نکات کلیدی
1. تکامل UNIX: از آزمایشگاههای بل به سیستمهای مدرن
اولین نقطه عطف قابل توجه، انتقال سیستم UNIX از PDP-7 به PDP-11 بود.
آغاز humble. UNIX به عنوان یک آزمایش در آزمایشگاههای بل در سال 1970 آغاز شد و در ابتدا بر روی PDP-7 اجرا میشد. قابلیت انتقال آن به PDP-11 یک لحظه کلیدی بود که پتانسیل آن را به عنوان یک سیستمعامل جهانی نشان میداد. این موفقیت اولیه با تصمیمی انقلابی برای بازنویسی UNIX به زبان C، یک زبان سطح بالا، ادامه یافت که در آن زمان برای سیستمهایعامل بیسابقه بود.
نقاط عطف کلیدی:
- توسعه اولیه در آزمایشگاههای بل بر روی PDP-7
- انتقال به PDP-11، نشاندهنده قابلیت انتقال
- بازنویسی به زبان C، امکان پذیرش گستردهتر
- انتشار نسخه 6 و نسخه 7، افزایش محبوبیت
- توسعه BSD در برکلی، پیشبرد نوآوری
- تجاریسازی با سیستم III و سیستم V
میراث نوآوری. تکامل UNIX داستانی از نوآوری و سازگاری مداوم است. از روزهای اولیهاش به عنوان یک پروژه تحقیقاتی تا استفاده گستردهاش در محیطهای تجاری و دانشگاهی، UNIX به طور مداوم مرزهای طراحی سیستمعامل را جابجا کرده است. تأثیر آن را میتوان در بسیاری از سیستمهایعامل مدرن، از جمله لینوکس و macOS مشاهده کرد.
2. اجزای اصلی سیستمهای UNIX سنتی
سیستمعامل معمولاً به هسته سیستم، یا به سادگی هسته، نامیده میشود تا جدایی آن از کاربر و برنامهها را تأکید کند.
هسته در مرکز. قلب UNIX هسته است که منابع سیستم را مدیریت کرده و پایهای برای برنامههای کاربری فراهم میکند. هسته از کاربران و برنامهها جدا شده و ثبات و امنیت را تضمین میکند. این هسته به عنوان واسطهای بین سختافزار و نرمافزار عمل میکند.
اجزای کلیدی:
- هسته: مدیریت فرآیندها، حافظه و ورودی/خروجی
- رابط تماس سیستم: اجازه میدهد برنامههای کاربری به توابع هسته دسترسی پیدا کنند
- شل: رابط کاربری برای تعامل با سیستم
- کامپایلر C: امکان توسعه برنامههای کاربری را فراهم میکند
مدیریت فرآیند و فایل. هسته به دو بخش اصلی تقسیم میشود: کنترل فرآیند و مدیریت فایل. کنترل فرآیند به مدیریت حافظه، زمانبندی و ارتباط بین فرآیندها میپردازد. سیستم فایل مدیریت تبادل دادهها بین حافظه و دستگاههای خارجی را با استفاده از درایورهای دستگاه و کش دیسک انجام میدهد.
3. سیستمهای مدرن UNIX: ماژولار و قابل گسترش
هستهای کوچک از امکانات، به صورت ماژولار نوشته شده است که توابع و خدمات مورد نیاز توسط تعدادی از فرآیندهای سیستمعامل را فراهم میکند.
طراحی ماژولار. سیستمهای مدرن UNIX، مانند SVR4، Solaris و لینوکس، معماری ماژولار را پذیرفتهاند. این رویکرد انعطافپذیری، قابلیت گسترش و استفاده مجدد از کد را افزایش میدهد. هسته دیگر یک بلوک یکپارچه از کد نیست، بلکه مجموعهای از ماژولهای مستقل است.
ویژگیهای کلیدی:
- هسته ماژولار: اجازه بارگذاری و بارگذاری دینامیک ماژولها را میدهد
- سیستم فایل مجازی: پشتیبانی از انواع مختلف سیستم فایل
- هسته پیشگیرنده: امکان پردازش زمان واقعی را فراهم میکند
- ساختارهای داده تخصیصیافته به صورت دینامیک: بهبود مدیریت حافظه
مزایای ماژولار بودن. طراحی ماژولار سیستمهای مدرن UNIX افزودن ویژگیهای جدید، رفع اشکالات و سازگاری با پلتفرمهای سختافزاری مختلف را آسانتر میکند. این امر برای ادامه ارتباط و پذیرش گسترده سیستمهایعامل مبتنی بر UNIX حیاتی بوده است.
4. مدیریت فرآیند UNIX: وضعیتها و ساختارها
UNIX از دو دسته فرآیند استفاده میکند: فرآیندهای سیستمی و فرآیندهای کاربری.
دو نوع فرآیند. UNIX بین فرآیندهای سیستمی که در حالت هسته برای انجام وظایف مدیریتی اجرا میشوند و فرآیندهای کاربری که برنامههای کاربری را اجرا میکنند، تمایز قائل میشود. فرآیندهای کاربری میتوانند از طریق تماسهای سیستم، استثناها یا وقفهها به حالت هسته وارد شوند.
وضعیتهای فرآیند:
- در حال اجرا (کاربر/هسته): در حال اجرا در حالت کاربر یا هسته
- آماده برای اجرا: در انتظار زمانبندی
- خوابیده: مسدود شده، در انتظار یک رویداد
- پیشگیرنده: به طور موقت توسط هسته معلق شده
- زامبی: خاتمه یافته اما هنوز در جدول فرآیند
تصویر فرآیند. یک فرآیند در UNIX مجموعهای پیچیده از ساختارهای داده است که شامل زمینه سطح کاربر، زمینه ثبت، و زمینه سطح سیستم میباشد. زمینه سطح سیستم شامل ورودی جدول فرآیند و ناحیه U است که اطلاعات کنترل فرآیند ضروری را در بر دارد.
5. رویکرد چند رشتهای Solaris: رشتههای کاربر و هسته
Solaris یک مدل پشتیبانی چند سطحی رشتهای غیرمعمول را پیادهسازی میکند که به منظور فراهم کردن انعطافپذیری قابل توجه در بهرهبرداری از منابع پردازنده طراحی شده است.
رشتههای چند سطحی. Solaris از یک مدل رشتهای چند سطحی منحصر به فرد استفاده میکند که شامل فرآیندها، رشتههای سطح کاربر (ULTs)، فرآیندهای سبکوزن (LWPs) و رشتههای هسته است. این رویکرد اجازه میدهد تا بهرهبرداری از منابع پردازنده به صورت انعطافپذیر انجام شود.
اجزای کلیدی:
- فرآیندها: فرآیندهای سنتی UNIX
- رشتههای سطح کاربر (ULTs): توسط یک کتابخانه رشته مدیریت میشوند و برای سیستمعامل نامرئی هستند
- فرآیندهای سبکوزن (LWPs): ULTها را به رشتههای هسته نگاشت میکنند
- رشتههای هسته: زمانبندی و ارسال برای اجرا بر روی پردازندهها
انعطافپذیری و کارایی. ترکیب رشتههای سطح کاربر و رشتههای سطح هسته به برنامهنویسان اجازه میدهد تا از همزمانی به روشی که برای یک برنامه خاص کارآمدتر و مناسبتر است، بهرهبرداری کنند. این رویکرد بار اضافی را کاهش داده و امکان استفاده بهتر از منابع را فراهم میکند.
6. مدل فرآیند و رشته لینوکس: انعطافپذیری و کنترل
بنابراین، لینوکس هیچ تمایزی بین یک رشته و یک فرآیند قائل نمیشود.
مدل یکپارچه. لینوکس بین رشتهها و فرآیندها تمایزی قائل نمیشود. یک فرآیند جدید با کپی کردن ویژگیهای فرآیند فعلی ایجاد میشود و منابع میتوانند به اشتراک گذاشته شوند که رفتار مشابه رشتهها را امکانپذیر میسازد.
وضعیتهای فرآیند:
- در حال اجرا: در حال اجرا یا آماده برای اجرا
- قابل قطع: مسدود شده، در انتظار یک رویداد
- غیرقابل قطع: مسدود شده، در انتظار به طور مستقیم بر روی سختافزار
- متوقف شده: متوقف شده، تنها با اقدام از سوی یک فرآیند دیگر میتواند از سر گرفته شود
- زامبی: خاتمه یافته اما هنوز در جدول فرآیند
ساختار وظیفه. یک فرآیند در لینوکس توسط یک ساختار داده task_struct
نمایندگی میشود که شامل اطلاعاتی درباره وضعیت فرآیند، زمانبندی، شناسهها، ارتباط بین فرآیندها، پیوندها، تایمرها، سیستم فایل، حافظه مجازی و زمینه خاص پردازنده است.
7. مکانیزمهای همزمانی UNIX: لولهها، پیامها و بیشتر
یکی از مهمترین مشارکتهای UNIX در توسعه سیستمهایعامل، لوله است.
ارتباط بین فرآیندها. UNIX چندین مکانیزم برای ارتباط و همگامسازی بین فرآیندها فراهم میکند که شامل لولهها، پیامها، حافظه مشترک، سمفورها و سیگنالها میشود. این مکانیزمها به فرآیندها اجازه میدهند تا با یکدیگر ارتباط برقرار کرده و اقدامات خود را هماهنگ کنند.
مکانیزمهای کلیدی:
- لولهها: بافرهای دایرهای برای ارتباط تولیدکننده-مصرفکننده
- پیامها: بلوکهای متنی با یک نوع، ارسال به صفهای پیام
- حافظه مشترک: بلوک مشترک حافظه مجازی که توسط چندین فرآیند به اشتراک گذاشته میشود
- سمفورها: تعمیمی از عملیاتهای انتظار و سیگنال برای همگامسازی
- سیگنالها: مکانیزمهای نرمافزاری برای اطلاعرسانی به فرآیندها درباره رویدادهای ناهمزمان
همگامسازی و هماهنگی. لولهها، پیامها و حافظه مشترک تبادل دادهها را تسهیل میکنند، در حالی که سمفورها و سیگنالها برای تحریک اقدامات توسط سایر فرآیندها استفاده میشوند و همگامسازی و هماهنگی مناسب را تضمین میکنند.
8. همگامسازی رشتهای Solaris: قفلهای mutex، سمفورها و قفلها
Solaris این اصول را در هسته برای رشتههای هسته پیادهسازی میکند؛ همچنین در کتابخانه رشتهها برای رشتههای سطح کاربر ارائه میشود.
اصول همگامسازی. Solaris چهار اصل همگامسازی رشتهای را فراهم میکند: قفلهای mutex، سمفورها، قفلهای خواننده/نویسنده و متغیرهای شرطی. این اصول هم در هسته و هم در کتابخانه رشتهها پیادهسازی شدهاند.
اصول کلیدی:
- قفلهای mutex: از پیشرفت بیش از یک رشته در زمان قفل شدن جلوگیری میکند
- سمفورها: سمفورهای شمارشی کلاسیک برای همگامسازی
- قفلهای خواننده/نویسنده: اجازه میدهند چندین خواننده یا یک نویسنده به یک شیء دسترسی داشته باشند
- متغیرهای شرطی: برای انتظار تا زمانی که یک شرط خاص درست باشد استفاده میشوند
عملیات اتمیک. تمام اصول همگامسازی نیاز به یک دستور سختافزاری دارند که اجازه میدهد یک شیء در یک عملیات اتمیک آزمایش و تنظیم شود و از این طریق اطمینان حاصل شود که انحصار متقابل وجود دارد و از شرایط رقابتی جلوگیری میشود.
9. مدیریت حافظه UNIX و Solaris: صفحهبندی و تخصیص
برای حافظه مجازی صفحهبندی شده، UNIX از تعدادی ساختار داده استفاده میکند که با تنظیمات جزئی، مستقل از ماشین هستند.
صفحهبندی و حافظه مجازی. UNIX از حافظه مجازی صفحهبندی شده استفاده میکند و فریمهای صفحه را در حافظه اصلی به فرآیندها و بافرهای بلوک دیسک تخصیص میدهد. این طرح برای فرآیندهای کاربری و ورودی/خروجی دیسک مؤثر است.
ساختارهای داده کلیدی:
- جدول صفحه: یکی برای هر فرآیند، با ورودی برای هر صفحه مجازی
- توصیفگر بلوک دیسک: توصیفکننده کپی دیسکی از یک صفحه مجازی
- جدول دادههای فریم صفحه: توصیفکننده هر فریم از حافظه واقعی
- جدول استفاده از تعویض: یکی برای هر دستگاه تعویض، با ورودی برای هر صفحه در دستگاه
تخصیص حافظه هسته. برای حافظه هسته، از یک سیستم دوست اصلاحشده استفاده میشود که به عنوان سیستم دوست تنبل شناخته میشود. این سیستم ادغام بلوکها را تا زمانی که احتمالاً نیاز باشد به تأخیر میاندازد و از این طریق بار اضافی را کاهش داده و عملکرد را بهبود میبخشد.
10. مدیریت حافظه لینوکس: صفحهبندی سهسطحی و تخصیص اسلاید
لینوکس از یک ساختار جدول صفحه سهسطحی استفاده میکند.
صفحهبندی سهسطحی. لینوکس از یک ساختار جدول صفحه سهسطحی استفاده میکند که شامل دایرکتوریهای صفحه، دایرکتوریهای میانه صفحه و جداول صفحه است. این ساختار برای سازگاری با معماریهای 64 بیتی طراحی شده است.
اجزای کلیدی:
- دایرکتوری صفحه: به دایرکتوریهای میانه صفحه اشاره میکند
- دایرکتوری میانه صفحه: به جداول صفحه اشاره میکند
- جدول صفحه: به صفحات مجازی فرآیند اشاره میکند
تخصیص اسلاید. برای حافظه هسته، لینوکس از یک طرح تخصیص اسلاید درون صفحات تخصیصیافته استفاده میکند. این طرح لیستهای پیوندی از قطعات حافظه با اندازههای مختلف را حفظ میکند و امکان تخصیص و آزادسازی مؤثر بلوکهای کوچک حافظه را فراهم میکند.
11. زمانبندی سنتی UNIX: اشتراکگذاری زمان و اولویتها
الگوریتم زمانبندی به گونهای طراحی شده است که زمان پاسخ خوبی برای کاربران تعاملی فراهم کند در حالی که اطمینان حاصل کند که کارهای پسزمینه با اولویت پایین گرسنه نمیمانند.
بازخورد چند سطحی. زمانبندی سنتی UNIX از بازخورد چند سطحی با گردشی در هر صف اولویت استفاده میکند. سیستم هر ثانیه فرآیندها را پیشگیرانه متوقف میکند.
محاسبه اولویت:
- اولویت بر اساس نوع فرآیند و تاریخچه اجرا تعیین میشود
- استفاده از CPU و یک عامل "خوب" قابل کنترل توسط کاربر در نظر گرفته میشود
- اولویتهای پایه فرآیندها را به باندهای ثابت تقسیم میکند
باندهای اولویت:
- تعویضکننده
- کنترل دستگاه ورودی/خروجی بلوک
- دستکاری فایل
- کنترل دستگاه ورودی/خروجی کاراکتر
- فرآیندهای کاربر
12. زمانبندی مدرن UNIX: زمان واقعی و پیشگیری
الگوریتم جدید به گونهای طراحی شده است که بالاترین اولویت را به فرآیندهای زمان واقعی، اولویت بعدی را به فرآیندهای حالت هسته و پایینترین اولویت را به سایر فرآیندهای حالت کاربر میدهد.
پشتیبانی از زمان واقعی. سیستمهای مدرن UNIX، مانند SVR4 و لینوکس، پشتیبانی از پردازش زمان واقعی را اضافه کردهاند. این شامل زمانبندهای اولویت ثابت پیشگیرنده و نقاط پیشگیری است.
کلاسهای اولویت SVR4:
- زمان واقعی: بالاترین اولویت، تضمین شده برای اجرا قبل از فرآیندهای هسته یا زماناشتراکی
- هسته: اولویت متوسط، قبل از فرآیندهای زماناشتراکی اجرا میشود
- زماناشتراکی: پایینترین اولویت، برای برنامههای کاربری
کلاسهای زمانبندی لینوکس:
- SCHED_FIFO: رشتههای زمان واقعی به ترتیب ورود
- SCHED_RR: رشتههای زمان واقعی به صورت گردشی
- SCHED_OTHER: سایر رشتهها، غیر زمان واقعی
آخرین بهروزرسانی::
نقد و بررسی
کتاب سیستمهای عامل نوشتهی ویلیام استالینگز با نظرات متنوعی مواجه شده و میانگین امتیاز آن ۳.۷۳ از ۵ است. بسیاری از خوانندگان از توضیحات شفاف و پوشش جامع مفاهیم سیستمهای عامل در این کتاب قدردانی میکنند. برخی آن را برای دورههای دانشگاهی و امتحانات مفید میدانند. این کتاب به خاطر رویکرد عددیاش در الگوریتمهای زمانبندی و مقایسههای مختلف سیستمهای عامل مورد تحسین قرار گرفته است. با این حال، برخی از خوانندگان آن را چالشبرانگیز یا طاقتفرسا مییابند. چندین غیرانگلیسیزبان نیز به مفید بودن آن اشاره کرده و این کتاب به زبانهای دیگر نیز ترجمه شده است. بهطور کلی، این کتاب به عنوان یک منبع معتبر برای یادگیری اصول سیستمهای عامل شناخته میشود.