لینوکس را بیشتر بشناسیم (پارت۱)مقدمه

این روزا بنا به دلایل مختلف سرگرم کردن خودمون خیلی کار سختی شده . و من خودمو در حالی پیدا کردم که داشتم توی سایتی در مورد لینوکس کرنل و اجزای سازنده ش می خوندم . من معمولا این کارو انجام نمی دم ! برا همین قدم بزرگی برام بود . مطالبی که خوندم خیلی جالب بود واسه همین گفتم بهتره یه پست در بارش بنویسم . ولی واقعا نمی شه تو یه پست جاش داد پس احتمال چنتا پارت داشته باشیم چون به نظر مطالب مهم و باحالی هستن و دوست دارم که در موردش بنویسیم هم خودم بهتر یاد بگیرم هم یکم سرگرم شم .

چیزای بیسیک

اگه دارید این پستو می بینید به این معنیه که یه وسیله الکترونیکی دارید که به نت وصله و چیزی که بهش میگیم سیستم عامل روش نصبه ! فارغ از سیستم عاملی که دارید قسمتی تو سیستم عامل وجود داره به اسم کرنل که کارش مدیریت سخت افزار عه و در واقع هسته سیستم عامل هست .

اگه بخواییم از یه جهت دیگه نگا کنیم ، دو تقسیم بندی فضای کرنل و فضای کاربر رو می بینیم . فضای کرنل قسمتی از سیستم عامله که دسترسی بیشتری داره و فضای کاربر دسترسی کمتری . فضای کرنل قسمتی رزرو شده ای از حافظه است که برنامه های یوزر نمی تونه مستقیما بهش دسترسی داشته باشه و به یه واسط احتیاج داره اما کدی که تو کرنل ران میشه دسترسی مستقیم به فضای کاربر داره .

از منظر پردازنده که نگا کنیم . کدی که تو کرنل ران میشه می تونه CPU رو کنترل کنه (Kernel mode) و کد کاربر خیلی محدود تره (User mode) بعضی از پردازنده ها سطح دسترسی بیشتری از کرنل رو ارائه میدن به اسم هایپروایزر (Hypervisor mode) . که فقط برای کد های که تو هایپروایزر مد ران میشن قابل دسترسی هست ( مانیتوریگ ماشین مجازی)

انواع کرنل ها

وظیفه کرنل فراهم کردن دسترسی و اشتراک گذاری سخت افزار به شکل امن و منصفانه اس . کرنل یک سری API ارائه می کنه و که به اسم فراخوان سیستمی (System calls) شناخته می شن . این API ها مثل یه جور مزر هستن که باعث میشن مد اجرا از یوزر مد به کرنل مد تغییر میکنه .

خود کرنل از لحاظ منطقی به دو بخش تقسیم میشه قسمت اصلی کرنل ( خود کرنل !) و دیوایس درایور (Device Driver) . در حالت کلی کرنل ها دو نوع هستن :

Monolithic Kernels

کرنل های یکپارچه بین بخش های داخلی و زیر سیستم های خودش کنترل دسترسی نداره و توابع عمومی مستقیما توسط زیر سیستم های دیگه فراخوانی میشن . کرنل های یکپارچه منطقا یه جدا سازی هایی دارن مخصوصا دیوایس درایور از بقیه بخش ها جدا ست و در عین حال خیلی بزرگتره چون باید بتونه با انواع و اقسام سخت افزار ها کار کنه . لینوکس جزء این دسته هست .

Monolithic Kernels

Micro Kernels

تو میکرو کرنل بخش های بزرگ کرنل از هم جدا هستن . مثلا اینطور تصور کنید که اول کرنل که خیلی کوچیکتر هست تو حافظه مستقر می شه و بعد بخش های دیگه مثلا فایل سیستم به عنوان ماژول بهش اضافه می شه . این ماژول ها تو فضای کاربر اجرا میشن . کرنل های این مدلی در حدی هستن که بتونن فضای آدرس ، پروسس ها و ترد ها رو مدیریت کنن . کرنل مینیکس که شبه یونیکس هم هست جز این دسته س .

Micro Kernels

میکرو یا یکپارچه ؟

میکرو کرنل ها چون طراحی ماژولار دارن شخصی سازی بیشتری دارن . میشه ماژول های مهمی که برای عملکرد درست سیستم عامل نیاز هست رو تغییر داد و جایگزین کرد و منطقا نیاز به بارگذاری مجدد کرنل نیست. ولی کرنل های یکپارچه هم می تونن ماژولار باشن . ماژول ها تو کرنل یکپارچه در جین کامپایل می تونن فعال یا غیر فعال بشن ،‌ همچنین ماژول های می تونن در هنگام اجرا به کرنل اضافه بشن .

کرنل های میکرو سرعت کمتری در مقابل کرنل های یکپارچه دارن در عوض چون میکرو بخش های مجزا داره اگه مشکلی تو یکی از بخش ها ایجاد بشه تاثیری رو خود کرنل و سرویس های دیگه نمی زاره در مقابل کرنل های یکپارچه اینطوری نیستن . یه نتیجه گیری می تونه این باشه که میکرو کرنل ها انعطاف پذیری بیشتری ارائه میدن و در مقابل سرعت کمتری دارن و کرنل های یکپارچه سرعت بیشتر در مقابل انعطاف پذیری کمتر .

یک نوع دیگه از کرنل ها هستن که بهشون میگن هیبرید (Hybrid kernels) که یه چیزی بین کرنل های یکپارچه و میکرو هستن که به نظر من همون کرنل های یکپارچه هستن چون همه سرویس های عادی که تو کرنل های یکپارچه تو فضای کرنل هست اینجام هست پس خیلی تفاوت ریزی دارن . به نظر میاد که ویندوز و مک او اس از این نوع کرنل ها استفاده می کنن .

ویژگی های لینوکس کرنل

لینوکس از زیر سیستم هایی تشکیل شده که سرویس های بیسیک رو تو کرنل کنار هم جمع کرده . لینوکس protablity خیلی خوبه داره که البته در طی این سال ها و با مشارکت کلی برنامه نویس به این درجه رسیده. میشه لینوکسو واسه کلی پردازنده با معماری های مختلف کامپایل کرد . مثلا لینوکس هم می تونه رو پردازنده ای که واحد مدیریت حافظه (MMU ) داره اجرا بشه و هم اگه نباشه بازم مشکلی نداره یا مثلا برای پردازنده هایی با معماری arm .

linux properties

سعی بر اینه که با همه زیر سیستم هایی که تو عکس می بینید آشنا بشیم . تو پست بعدی با System call interface (SCI) آشنا میشیم . البته یه نکته هم بگم که من متخصص نیستم و احتمالش هست کلمه ها یا اصطلاحاتی که استفاده می کنم درست نباشن یا کلا اشتباه به عرض رسونده باشم در این صورت حتما تو کامنتا بگید . منبع بیشتر مطالب از داکیومنت خود لینوکسه که سعی می کنم خیلی ساده و روون بنویسم .

Linux Kernel Labs

تو پارت های بعدی با ما همراه باشید

کپی بخش یا کل هر کدام از مطالب لینوکس ۹۸ تنها با کسب مجوز مکتوب امکان پذیر است.
وبلاگ لینوکس ۹۸ یک پروژه متن باز بوده و سورس آن در گیت‌هاب موجود است.