یوشا

دست نوشته ها و تجربیات شخصی

یوشا

دست نوشته ها و تجربیات شخصی

شهید دکتر مصطفی چمران: می گویند تقوا از تخصص لازمتر است، آنرا می پذیرم، اما می گویم آنکس که تخصص ندارد و کاری را می پذیرد بی تقواست!

طبقه بندی موضوعی
تبلیغات
Blog.ir بلاگ، رسانه متخصصین و اهل قلم، استفاده آسان از امکانات وبلاگ نویسی حرفه‌ای، در محیطی نوین، امن و پایدار bayanbox.ir صندوق بیان - تجربه‌ای متفاوت در نشر و نگهداری فایل‌ها، ۳ گیگا بایت فضای پیشرفته رایگان Bayan.ir - بیان، پیشرو در فناوری‌های فضای مجازی ایران

 

در این مقاله(ها) قصد دارم برنامه نویسی هسته لینوکس 2 و 3 رو آموزش بدم.

اول برخی از اصول سیستم عامل و هسته لینوکس(از جمله Version های هسته، دانلود سورس، ساختمان دایرکتوری سورس، چگونگی نصب، Patch کردن، پیکربندی و Compile) رو معرفی می کنم و بعد به مباحث پیشرفته و برنامه نویسی(از قبیل تفاوت بین kernel-space و User-space، سازه های برنامه نویسی استفاده شده در هسته، Process ها، System-call ها، ساختمان داده هسته، Interrupt handler ها، همگاه سازی، مدیریت Time، مدیریت حافظه، سیستم فایل و خروجی/ورودی) می پردازم.

در این بین از کتابهای Advanced Linux programming، Linux Advanced Administration و Linux Kernel Development هم بهره ای می گیرم.
 

فهرست مندرجات:

  • تعریف سیستم عامل
  • انواع معماری سیستم عامل
  • تعریف هسته
  • انواع معماری هسته

  • تعریف سیستم عامل

همینطور که می دونید سیستم عامل نرم افزاری هست که بعنوان رابطی بین کاربر و سخت افزار عمل می کنه. همچنین به عنوان یک تخصیص دهنده منابع از جمله حافظه، زمان پردازش، فضای ذخیره سازی، کنترلر دستگاه های I/O و غیره... بشمار میره.
هدف اصلی سیستم عامل، مدیریت منابع سخت افزاری و نرم افزاری (یا همان داده) و همچنین بعنوان یک ماشین توسعه یافته بوده که به مرور زمان به قدرت، انعطاف پذیری و کاراییش افزوده شده.

 

  • انواع ساختار سیستم عامل

1- نوع Monolitic: این نوع سیستم عامل ها که به no-structure ها هم معروفند، ساختار خاصی ندارند و از یکسری روتین(یا رویه) که هر کدوم وظیفه خاصی دارن تشکیل شده اند.
همچنین به علت یکپارچگی و پیوستگی کد، هر روتین قادره روتین دیگه رو براحتی Call کنه. البته از طرفی هم وجود یک باگ در هسته منجر به Down شدن کل سیستم میشه.
در این نوع سیستم عامل ها هیچ گونه طبقه بندی و اولویت بندی برای روتین ها وجود نداره و کل سیستم از یک Core و تعدادی Extension ماژولار(در قدیم) تشکیل شده. که امروزه به شکل ماژول تغییر یافته. مثل Unix ,Linux -,BSD ,MsDOS و...
خود Core هم از تعدادی Subsystem که شامل شبکه، صدا، I/O، حافظه و غیره... هست تشکیل شده.

 

  
ساختار سیستم Monolitic


2- نوع Layered: این نوع سیستم عامل ها کلیتی از طرح Monolitic ها دارند بعلاوه روتین ها در لایه های مختلف و طبقه بندی شده قرار می گیرند و بر اساس اولویت به وظایفشون عمل می کنند.
مهمترین لایه در این نوع سیستم عامل ها هسته(Kernel) هستش که مستقیماً هم به منابع سخت افزاری دسترسی داره. مثل OS2.
همچنین روند توسعه و تکامل هسته در این نوع سیستم عامل ها راحتتر و سریعتر هستش.
منطق ارتباطیش هم برای لایه ها به صورت کلی به این شکله:

Operator->User programs->Input/output mgmt->Operator-process com->Memory mgmt->Processor allocation and multiprog


3- نوع Virtual Machine: در این ساختار کاربر نیازی به تطبیق خود با سیستم عامل رو نداره و فقط از طریق واسط نرم افزاری، با سیستم عامل و سخت افزار(شبیه سازی شده) ارتباط برقرار می کنه(در واقع سیستم رو روی منابع مجازی اجرا می کنه). مثل VMware

4- نوع Client/Server: این نوع عمدتاً به دو بخش اصلی Client که فرمان رو صادر میکنه و Server که فرامین رو اجرا می کنه تقسیم میشه. و معمولاً برای فعالیت های شبکه ای، میزبانی و غیره... ازش استفاده میشه. مثل Netware و Windows Server.

 

  • تعریف هسته

هسته یا Kernel مهمترین و حساس ترین بخش هر سیستمی هست که مستقیماً با منابع(سخت افزار) سروکار داره. که معمولاً هم حاوی تعدادی ماژول/کامپوننت، سیستم مدیریت حافظه، سیستم زمانبندی(Scheduler)، درایور های دستگاه ها، سیستم فایل، شبکه و غیره... میشه.
ابتدا در خواست های کاربر وارد Shell و سپس Buffer های ورودی(Input) توسط Shell پیمایش و برای هسته تفسیر میشه. در صورتی که درخواست ها/تفسیرات معتبر اعلام بشن، هسته روتین مورد نظر رو فراخوانی و اجرا می کنه. به این ترتیب سرویس مورد نظر در اختیار کاربر قرار می گیره(Output); و در صورت نامعتبر بودن درخواست کاربر، توسط Shell، پیام خطایی به خروجی فرستاده میشه.


در تصویر زیر می تونید ببینید که لایه های مختلف در یک سیستم(لینوکس) چگونه با هم ارتباط برقرار می کنن:

 

ساختار لایه های لینوکس

از مزایای سیستم عامل های مبتنی بر یونیکس اینه که به یک مفسر/Shell وابسته نیستند، و از Shell های مختلفی پشتیبانی می کنند. مثل BASh – cSh – zSh – rSh - tSh و...

 

 

  • انواع معماری هسته

نوع Monolithic-Kernel: این نوع هسته ها یکپارچه هستند و تمامی خدمات/تسهیلات سیستم عامل در مرکز هسته قرار دارند. همچنین بیشتر پردازش ها در محیط هسته(Kernel-space) صورت می گیره. نصب و پیاده سازی هسته بر روی سیستم های مختلف راحت و کارامد هستش(اگر خوب طراحی بشن) و بعلاوه بدلیل یکپارچگی و وابستگی بین اجزای سیستم، یک اشکال در یک driver منجر به سقوط دیگر بخش های سیستم خواهد شد.
در این نوع هسته ها اغلب فعالیت ها توسط System-call ها صورت میگیره، ساختار این System-call ها در داخل برنامه ها تعبیه شده، بشکلی که یک نسخه از آن برای caller جهت بررسی فرستاده بشه. که این یک دلیل پویا بودن هسته لینوکس در load کردن ماژول های داخلیش شده.
یکی از معایب این نوع هسته ها اینه که برنامه نویسی در محیط هسته(Kernel-space) صورت می گیره، در نتیجه دسترسی به کتابخانه های کامل و همگانی(مثل LibC) امکانپذیر نیست و با محدودیت هایی روبرو هستید.
دیگر اینکه خطا زدایی(debuging) بسیار مشکل هست. بروز یک باگ در یک بخش، عوارض شدیدی در کل سیستم بوجود میاره. بدلیل اینکه هر تابع یا ساختمان داده اکثر privilege ها و قوای سیستم رو در اختیار داره.
از جمله هسته های نوع Monolithic هم می توان Linux, BSD, Unix, Solaris و DOS رو نام برد.

دو نوع اصلی دیگه هم وجود داره که Micro-Kernel و Exo-Kernel نام داره، ولی ما در این مقالات کاری باهاش نداریم.

نظرات (۴)

سلام
ایول...
لینک شدی
سلام
خوب بود،مرسی
منتظر ادامه هستیم
زنده بادت.
پاسخ:
باد یا یادت...؟
۰۳ مرداد ۹۱ ، ۱۹:۱۰ سید حمید میرهادی
سلام
اومدم بازدید پس بدم :)
موفق باشی
پاسخ:
مرسی، ولی من اهل این چیزا و صله ارحام مجازی نیستم... راحت باش
کاربران بیان میتوانند بدون نیاز به تأیید، نظرات خود را ارسال کنند.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">