در این جلسه از آزمایشگاه خواهیم آموخت که چگونه میتوان در سیستم عامل لینوکس رفتار هسته را مشاهده کرد و اطلاعات مربوط به پردازهها و هسته را استخراج نمود.
انتظار میرود که دانشجویان با موارد زیر آشنا باشند:
- برنامه نویسی به زبان c/c++
- دستورات پوسته لینوکس که در جلسات قبل فرا گرفته شدهاند.
در سیستم عامل لینوکس برای بررسی وضعیت هسته، مشاهده پردازههای در حال اجرا و دریافت اطلاعاتی از این دست، روشی پیشبینی شده است که system file /proc نامیده میشود. در حقیقت /proc به عنوان یک فایل سیستم عادی نیست، بلکه واسطی است برای دسترسی به فضای آدرس پردازههای در حال اجرا. این کار باعث میشود تا بتوان به صورت عادی به کمک فراخوانیهای سیستمی، open, read, write در مورد پردازهها اطلاعات مورد نیاز را استخراج کرد یا تغییراتی در آنها ایجاد نمود.
-
وارد سیستم عامل مجازی ایجاد شده در جلسه قبل شوید.
-
با وارد کردن دستور مناسب وارد شاخه /proc شوید.
-
به کمک دستور ls لیست فایلهای موجود در این شاخه را ببینید.
-
همانطور که ملاحظه میکنید، تعدادی فایل در این شاخه وجود دارد که اسم های آنها به صورت عدد میباشد. این اسامی در واقع Process ID یا به اختصار PID پردازههای در حال اجرا در سیستم میباشند. دقت کنید که این فایلها در واقع به شکل فایلهای سنتی وجود ندارند، بلکه واسطهایی هستند که توسط هسته برای دسترسی به اطلاعات پردازهها ایجاد شدهاند.
- همانطور که در قبل اشاره شد. فایلهای موجود در شاخه /proc به شکل فایلهای عادی دیده میشوند. اما در واقع هر کدام از این فایلها یا زیر شاخهها موجود در این بخش، برنامههایی هستند که متغییرهایی را از هسته خوانده و آنها را به صورت ASCII بر میگردانند.
1.به کمک دستور cat محتویات مربوط به فایل /proc/version را در خروجی چاپ کنید. چه چیزی در خروجی مشاهده میکنید؟
-
محتویات چند فایل دیگر (فایلهایی با نام غیر عددی) در این شاخه چاپ را کنید. هر کدام از این فایلها چه چیزی را نشان میدهد؟
-
یک برنامه ساده به زبان c++ بنویسید که به کمک توابع فایل /proc/version را خوانده و محتویات آن را در فایلی با نام Linux Version.txt بنویسد. همانطور که مشاهده خواهید کرد، به کمک توابع کار با فایل به راحتی میتوان با فایلهای موجود در زیر شاخه /proc کار کرد.
-
سعی کنید در فایل /proc/version یک جمله دلخواه را بنویسید. چه اتفاقی میافتد؟
-
به ازای هر کدام از پردازهها، یک پوشه با شماره آن پردازه در /proc وجود دارد. به دلخواه وارد یکی از این پوشهها شوید و سپس با دستور ls فایلهای موجود در آن را ملاحظه کنید.
-
هر کدام از فایلها اطلاعات خاصی را در مورد این پردازه در اختیار ما قرار میدهند. محتویات هر کدام از فایلهای زیر را در این شاخه به کمک دستور cat نشان دهید و بررسی نمایید که هر کدام از این پوشهها حاوی چه چیزی هستند (لیست در ادامه آمده است). برای اطلاعات بیشتر در مورد هر کدام از این موارد از دستور man 5 proc استفاده کنید.
نام فایلها که باید بررسی شوند: cmdline/ environ/ stat/ status/ statm/ cwd/ exe/ root
- یک اسکریپت ساده بنویسید که لیست شمارهی پردازههای در حال اجرا به همراه نام آنها را در خروجی چاپ کند.
** تمرین ۳.۱ **: به کمک مطالبی که در بالا آموختهاید، برنامهای بنویسید که شماره یک پردازه را دریافت و در خروجی اطلاعاتی اعم از نام فایل اجرایی آن، مقدار حافظه مصرفی (به بایت)، پارامترهای اجرا و متغییرهای محیطی مربوط به آن را در خروجی چاپ کند.
- مشابه روشی که اطلاعات مربوط به پردازهها را میتوان مشاهده کرد، فایل سیستم /proc این امکان را در اختیار شما قرار میدهد تا اطلاعات را در ارتباط با هسته مشاهده کنید. از جمله این اطلاعات میتوان به اطلاعات دستگاههای I/O ، وضعیت وقفهها، اطلاعات پردازندهها و ... اشاره کرد. این فایلها در شاخهی اصلی /proc قرار دارند (فایلهایی که نام آنها عدد نمیباشد).
-
وارد شاخه /proc شوید
-
به کمک دستور ls بار دیگر لیستی از فایلهای موجود در این شاخه را ببینید.
-
هر کدام از فایلها یا پوشههای زیر را بررسی کنید و ملاحظه کنید که هر کدام چه اطلاعاتی را در اختیار ما قرار میدهند.
لیست مواردی که باید بررسی شود: meminfo/version/uptime/stat/mount/net/loadavg/ interrupts/ioports/filesystem/cpuinfo/cmdline
-
برنامهای بنویسید که نام مدل پردازنده، فرکانس آن و مقدار حافظه نهان (Cache Memory) آن را در خروجی چاپ کند.
-
برنامهای بنویسید که مقدار حافظه کل، حافظه استفاده شده و حافظه آزاد را در خروجی چاپ کند.
تمرین ۳.۲: به پرسشهای زیر پاسخ دهید.
-
درباره پنچ مورد از مهمترین فایلهای موجود در /proc/sys/kernel تحقیق کنید و کاربرد آنها را بیان نمایید.
-
در مورد self در شاخه /proc و کاربرد آن توضیح دهید.