Professional Documents
Culture Documents
Sis
Sis
هشتم
ویلیام استالینگز
شناسنامه کتاب
1
سیستم عامل های داخلی و اصول طراحی2.........................................................................................................................
فهرست مطالب
بخش 1پیشینه
بخش 2فرآیندها
بخش 3حافظه
2
سیستم عامل های داخلی و اصول طراحی3.........................................................................................................................
***هر گونه کپی برداری از کتاب یا بخشی از آن دارای پیگرد قانونی می باشد.
3
سیستم عامل های داخلی و اصول طراحی4.........................................................................................................................
پیشگفتار
از زمان انتشار هفتمین ویرایش این کتاب ،این حوزه شاهد نوآوریها و پیشرفتهای مستمر بوده است .در این نسخه جدید ،من
سعی میکنم این تغییرات را با حفظ پوشش گسترده و جامع کل حوزه ،ثبت کنم .برای شروع فرآیند بازنگری ،ویرایش هفتم این
کتاب به طور گسترده توسط تعدادی از اساتیدی که این موضوع را تدریس می کنند و توسط متخصصان فعال در این زمینه
مورد بررسی قرار گرفت .نتیجه این است که در بسیاری از جاها ،روایت روشن و فشرده شده است و تصویرسازی ها بهبود یافته
است.
فراتر از این اصالحات برای بهبود آموزش و کاربرپسندی ،محتوای فنی کتاب در سرتاسر به روز شده است تا تغییرات جاری در
این زمینه هیجان انگیز را منعکس کند ،و پشتیبانی مربی و دانش آموز گسترش یافته است .قابل توجه ترین تغییرات به شرح
زیر است:
ویندوز :8ویندوز 8آخرین سیستم عامل مایکروسافت برای رایانه های شخصی ،ایستگاه های کاری و سرورها است که شامل
تعدادی تغییرات در معماری داخلی است .نسخه جدید جزئیات داخلی ویندوز 8را در تمام زمینه های فناوری کلیدی تحت
پوشش این کتاب ،از جمله مدیریت فرآیند/رشته ،زمان بندی ،مدیریت حافظه ،امنیت ،سیستم های فایل ،و I/Oارائه می دهد.
سیستم عامل اندروید :اندروید سریعترین پلتفرم موبایل در حال رشد است .محدودیتهای دنیای واقعی و محیط عملکرد
دستگاههای تلفن همراه کامالً متفاوت از رایانههای رومیزی یا سرور سنتی است .یادگیری این محیط جدید برای دانش آموزان
مهم است.
لینوکس جاسازی شده :استفاده از حداقل نسخه لینوکس برای سیستم های جاسازی شده محبوبیت زیادی پیدا کرده است.
این نسخه جدید نمای کلی از عناصر کلیدی رویکرد لینوکس جاسازی شده را ارائه می دهد.
ماشین های مجازی :مجازی سازی سرور و سایر اشکال ماشین های مجازی به طور فزاینده ای در حال گسترش هستند .فصل
جدیدی به مسائل طراحی سیستم عامل برای ماشین های مجازی می پردازد.
مسائل طراحی چند هسته ای :معماری غالب رایانه اکنون چند هسته ای است .این موضوع مشکالت طراحی سیستم عامل
جدیدی را ایجاد می کند که در این نسخه جدید به آن پرداخته شده است.
4
سیستم عامل های داخلی و اصول طراحی5.........................................................................................................................
استانداردهای ورودی/خروجی :این کتاب بهروزرسانی شده است تا آخرین پیشرفتها ،از جمله Thunderboltرا
منعکس کند.
سخت افزار ذخیره سازی :بحث سخت افزار ذخیره سازی به روز شده است و اکنون شامل بحث درایوهای حالت جامد می شود.
تحمل خطا :برنامه درسی علوم کامپیوتر ACM/IEEE 2013تحمل خطا را به عنوان یکی از موضوعات اصلی دوره سیستم
عامل فهرست می کند .یک بخش جدید یک نمای کلی از تحمل خطا ارائه می دهد.
طرح متن
این کتاب به پنج بخش تقسیم شده است برای بررسی کلی به فصل صفر مراجعه کنید:
پیشینه
فرآیندها
حافظه
برنامه ریزی
موضوعات پیشرفته سیستم عامل های جاسازی شده ،ماشین های مجازی ،امنیت سیستم عامل و سیستم های توزیع
شده
این کتاب شامل تعدادی ویژگی آموزشی است ،از جمله استفاده از انیمیشن ها و یادداشت های ویدئویی و شکل ها و جداول
متعدد برای روشن شدن بحث .هر فصل شامل فهرستی از کلمات کلیدی ،سواالت مروری ،مشکالت تکالیف و پیشنهاداتی برای
مطالعه بیشتر است .این کتاب همچنین شامل یک فرهنگ لغت گسترده ،فهرستی از کلمات اختصاری پرکاربرد و کتابشناسی
است .عالوه بر این ،یک بانک آزمون نیز در اختیار مربیان قرار دارد.
5
سیستم عامل های داخلی و اصول طراحی6.........................................................................................................................
درباره نویسنده
دکتر ویلیام استالینگز 17عنوان ،و شمارش ویرایش های اصالح شده ،بیش از 40کتاب در مورد امنیت کامپیوتر ،شبکه های
کامپیوتری و معماری کامپیوتر تالیف کرده است .نوشته های او در نشریات متعددی از جمله ،Proceedings of IEEE
ACM Computing Reviewsو Cryptologiaمنتشر شده است.
او 12بار جایزه بهترین کتاب درسی علوم کامپیوتر سال را از انجمن نویسندگان متن و دانشگاهی دریافت کرده است.
در بیش از 30سال در این زمینه ،او یک مشارکت کننده فنی ،مدیر فنی و مدیر اجرایی با چندین شرکت فناوری پیشرفته بوده
است .او هر دو مجموعه پروتکل مبتنی بر TCP/IPو مبتنی بر OSIرا بر روی انواع کامپیوترها و سیستمهای عامل ،از
میکروکامپیوتر گرفته تا مین فریم ،طراحی و پیادهسازی کرده است .او بهعنوان مشاور به سازمانهای دولتی ،فروشندگان رایانه و
نرمافزار و کاربران عمده در طراحی ،انتخاب و استفاده از نرمافزار و محصوالت شبکه مشاوره داده است.
او سایت منابع دانشجویی علوم کامپیوتر را در ComputerScienceStudent.comایجاد و نگهداری می کند .این سایت
اسناد و پیوندهایی را در مورد موضوعات مختلف مورد عالقه دانشجویان علوم کامپیوتر و متخصصان ارائه می دهد .او یکی از
اعضای هیئت تحریریه Cryptologiaاست ،یک مجله علمی که به تمام جنبه های رمزنگاری اختصاص دارد .او نویسنده
متخصص رده شبکه در زمینه شبکه است answers.com .دکتر استالینگز دارای مدرک دکتری است .از .M.I.Tدر علوم
کامپیوتر و مدرک لیسانس از نوتردام در مهندسی برق.
6
سیستم عامل های داخلی و اصول طراحی7.........................................................................................................................
فصل صفر
0.2نمونه سیستم
بخش اول .پیش زمینه :یک نمای کلی از معماری و سازماندهی کامپیوتر ،با تاکید بر موضوعاتی که به طراحی سیستم عامل OS
مربوط می شود ،به عالوه مروری کلی بر مباحث سیستم عامل در ادامه کتاب ارائه می دهد.
بخش دوم .فرآیندها :تجزیه و تحلیل دقیقی از فرآیندها ،چند رشته ای ،چند پردازشی متقارن SMPو میکروکرنل ها را ارائه
می دهد .این بخش همچنین به بررسی جنبه های کلیدی همزمانی در یک سیستم واحد ،با تاکید بر موضوعات محرومیت و
وقفه متقابل می پردازد.
بخش سوم .حافظه :بررسی جامعی از تکنیک های مدیریت حافظه از جمله حافظه مجازی ارائه می دهد.
بخش چهارم .زمانبندی :بحث مقایسهای از رویکردهای مختلف برای زمانبندی فرآیند ارائه میکند .زمانبندی موضوع،
زمانبندی SMPو زمانبندی بالدرنگ نیز مورد بررسی قرار میگیرند.
7
سیستم عامل های داخلی و اصول طراحی8.........................................................................................................................
بخش پنجم .ورودی/خروجی و فایل ها :مسائل مربوط به کنترل سیستم عامل عملکرد I/Oرا بررسی می کند .توجه ویژه به
ورودی/خروجی دیسک ،که کلید عملکرد سیستم است ،اختصاص داده شده است .همچنین یک نمای کلی از مدیریت فایل ارائه
می دهد.
بخش ششم سیستم های جاسازی شده :تعداد سیستم های جاسازی شده بسیار بیشتر از سیستم های محاسباتی همه منظوره
است و تعدادی از چالش های سیستم عامل منحصر به فرد را ارائه می دهند .این بخش شامل بحث در مورد اصول مشترک به
عالوه پوشش دو سیستم نمونه است TinyOS :و .eCos
بخش هفتم امنیت :بررسی تهدیدها و مکانیسمهایی را برای تأمین امنیت رایانه و شبکه ارائه میکند.
بخش هشتم سیستم های توزیع شده :روندهای اصلی در شبکه سازی سیستم های کامپیوتری ،از جمله ،TCP/IPمحاسبات
مشتری/سرور ،و خوشه ها را بررسی می کند .همچنین برخی از زمینه های طراحی کلیدی در توسعه سیستم عامل های توزیع
شده را توضیح می دهد.
تعدادی از فصلها و ضمیمههای آنالین موضوعات اضافی مرتبط با کتاب را پوشش میدهند.
این متن برای آشنایی خواننده با اصول طراحی و مسائل پیاده سازی سیستم عامل های معاصر در نظر گرفته شده است .بر این
اساس ،یک برخورد صرفاً مفهومی یا نظری ناکافی خواهد بود .برای نشان دادن مفاهیم و پیوند آنها با انتخاب های طراحی دنیای
واقعی که باید انجام شوند ،سه سیستم عامل به عنوان نمونه های در حال اجرا انتخاب شده اند:
:Windowsیک سیستم عامل چندوظیفه ای که برای اجرا بر روی انواع رایانه های شخصی ،ایستگاه های کاری و سرورها
طراحی شده است .این یکی از معدود سیستم عامل های تجاری اخیر است که اساساً از ابتدا طراحی شده است .به این ترتیب،
در موقعیتی قرار دارد که میتواند جدیدترین پیشرفتها در فنآوری سیستمعامل را به روشی تمیز ترکیب کند .نسخه فعلی ارائه
شده در این کتاب ،ویندوز 7است.
یونیکس :یک سیستم عامل چندوظیفه ای که در اصل برای کامپیوترهای کوچک در نظر گرفته شده بود اما بر روی طیف
وسیعی از ماشین ها از میکروکامپیوترهای قدرتمند گرفته تا ابررایانه ها پیاده سازی شد .شامل این موضوع لینوکس است.
اندروید :اندروید پلتفرم غالب موبایل است .محدودیتهای دنیای واقعی و محیط عملیاتی دستگاههای تلفن همراه با رایانههای
رومیزی یا سرور سنتی کامالً متفاوت است .یادگیری این محیط جدید برای دانش آموزان مهم است .این کتاب جزئیات داخلی
اندروید را ارائه می دهد.
8
سیستم عامل های داخلی و اصول طراحی9.........................................................................................................................
بحث در مورد سیستمهای نمونه در سراسر متن توزیع میشود نه اینکه به صورت یک فصل یا ضمیمه جمعآوری شود .بنابراین،
در طول بحث ارز همزمان ،مکانیسمهای همزمانی هر سیستم نمونه توضیح داده میشود و انگیزه انتخابهای طراحی فردی مورد
بحث قرار میگیرد .با این رویکرد ،مفاهیم طراحی مورد بحث در یک فصل مشخص بالفاصله با مثال های دنیای واقعی تقویت
می شوند .این کتاب همچنین از سیستمهای نمونه دیگری در صورت لزوم استفاده میکند.
طبیعی است که خواننده ترتیب خاص موضوعات ارائه شده در این کتاب را زیر سوال ببرد .به عنوان مثال ،مبحث زمانبندی
فصل 9و 10ارتباط نزدیکی با مباحث همزمانی فصل 5و 6و موضوع کلی فرآیندها فصل 3دارد و ممکن است به طور منطقی
بالفاصله پس از آن مباحث پوشش داده شود.
مشکل این است که موضوعات مختلف بسیار به هم مرتبط هستند .به عنوان مثال ،در بحث حافظه مجازی ،اشاره به مسائل زمان
بندی مربوط به خطای صفحه مفید است .البته اشاره به برخی مسائل مربوط به مدیریت حافظه هنگام بحث در مورد تصمیمات
زمان بندی نیز مفید است .این نوع مثال را میتوان بیپایان تکرار کرد :بحث در مورد زمانبندی نیاز به درک کمی از مدیریت
ورودی/خروجی دارد و بالعکس.
شکل 0.1برخی از روابط متقابل مهم بین موضوعات را نشان می دهد .خطوط جامد نشان دهنده روابط بسیار قوی ،از نقطه نظر
تصمیمات طراحی و اجرا است .بر اساس این نمودار ،منطقی است که با یک بحث اساسی در مورد فرآیندها ،که در فصل 3انجام
می دهیم ،شروع کنیم .پس از آن ،ترتیب تا حدودی دلخواه است .بسیاری از روشهای سیستمعامل در ابتدا همه مواد را روی
فرآیندها جمعآوری میکنند و سپس به موضوعات دیگر میپردازند .این قطعا معتبر است .با این حال ،اهمیت مرکزی مدیریت
حافظه ،که به اعتقاد من اهمیتی برابر با مدیریت فرآیند دارد ،منجر به تصمیمگیری برای ارائه این مطالب قبل از نگاهی عمیق به
زمانبندی شده است.
9
سیستم عامل های داخلی و اصول طراحی10.........................................................................................................................
شرح و کنترل
فرآیند
مدیریت همزمانی
برنامه ریزی
حافظه
سیستم های
توزیع شده
امنیت
راهحل ایدهآل این است که دانشآموز پس از تکمیل فصلهای 1تا 3از سری ،فصلهای زیر را به صورت موازی بخواند و جذب
کند 4 :و سپس اختیاری 6 .5به دنبال آن 8 ;7به دنبال آن اختیاری .10 ;9قسمت های باقی مانده را می توان به هر ترتیبی
انجام داد .با این حال ،اگرچه مغز انسان ممکن است درگیر پردازش موازی باشد ،دانشآموز انسانی کار موفقیتآمیز با چهار
نسخه از یک کتاب را به طور همزمان در چهار فصل مختلف غیرممکن و گرانقیمت میبیند .با توجه به ضرورت ترتیب خطی ،به
نظر من ترتیب استفاده شده در این کتاب بیشترین تأثیر را دارد.
نظر پایانی فصل ،2به ویژه بخش ،2.3نمای سطح باالیی از تمام مفاهیم کلیدی تحت پوشش در فصل های بعدی را ارائه می
دهد .بنابراین ،پس از خواندن فصل ،2انعطاف پذیری قابل توجهی در انتخاب ترتیب خواندن فصل های باقی مانده وجود دارد.
منابع متعددی در اینترنت و وب برای پشتیبانی از این کتاب و برای همگام شدن با پیشرفتها در این زمینه وجود دارد.
سه وب سایت منابع اضافی را برای دانش آموزان و مربیان فراهم می کنند .یک وب سایت همراه برای این کتاب به آدرس
/http://williamstallings.com/OperatingSystemsوجود دارد .برای دانشآموزان ،این وبسایت شامل فهرستی از
پیوندهای مرتبط سازماندهی شده بر اساس فصل و فهرست اشتباهی برای کتاب است .همچنین اسنادی وجود دارد که زبان
10
سیستم عامل های داخلی و اصول طراحی11.........................................................................................................................
برنامه نویسی Cرا برای دانش آموزانی که با این زبان آشنا نیستند یا نیاز به تجدید نظر دارند معرفی می کند .برای مدرسان،
این وب سایت به صفحات درسی اساتیدی که از این کتاب تدریس می کنند پیوند می دهد و تعدادی اسناد و پیوندهای مفید
دیگر را ارائه می دهد.
همچنین یک وبسایت محتوای ممتاز با دسترسی کنترلشده وجود دارد ،که مقدار زیادی از مطالب پشتیبانی ،از جمله
فصلهای آنالین اضافی ،پیوستهای آنالین اضافی ،مجموعهای از مشکالت تکالیف خانه با راهحلها ،مجموعهای از انیمیشنهایی
که مفاهیم کلیدی را نشان میدهند ،و مجموعهای از یادداشتهای ویدیویی را ارائه میدهد .که روایتهای بسیاری از
الگوریتمهای کتاب هستند .برای اطالعات دسترسی به کارت جلوی این کتاب مراجعه کنید.
در نهایت ،مطالب اضافی برای مربیان در مرکز منابع مدرس IRCبرای این کتاب موجود است .برای جزئیات و اطالعات
دسترسی به مقدمه مراجعه کنید.
به محض اینکه هرگونه اشتباه تایپی یا سایر خطاها کشف شود ،فهرست اشتباه این کتاب در وب سایت موجود خواهد بود .لطفاً
هر گونه خطایی را که مشاهده کردید گزارش دهید .برگه های اشتباه برای کتاب های دیگر من در WilliamStalings.com
هستند.
من همچنین سایت منابع دانشجویی علوم کامپیوتر را در ComputerScienceStudent.comنگهداری می کنم .هدف این
سایت ارائه اسناد ،اطالعات و پیوندها برای دانشجویان و متخصصان علوم کامپیوتر می باشد .پیوندها و اسناد به هفت دسته
سازماندهی می شوند:
:Mathشامل یک تجدید کننده پایه ریاضی ،یک آغازگر تجزیه و تحلیل صف ،یک آغازگر سیستم اعداد ،و پیوندهایی به سایت
های ریاضی متعدد است.
نحوه :مشاوره و راهنمایی برای حل مشکالت تکالیف ،نوشتن گزارش های فنی و تهیه ارائه های فنی.
منابع تحقیق :پیوند به مجموعه های مهم مقاالت ،گزارش های فنی و کتابشناسی.
مشاغل علوم کامپیوتر :پیوندها و اسناد مفید برای کسانی که در نظر دارند شغلی در علوم کامپیوتر داشته باشند.
موضوعات متفرقه و طنز :باید هر چند وقت یکبار ذهن خود را از کار خود دور کنید.
11
سیستم عامل های داخلی و اصول طراحی12.........................................................................................................................
وب سایت های متعددی وجود دارند که اطالعات مربوط به موضوعات این کتاب را ارائه می دهند .وب سایت Companion
پیوندهایی را به این سایت ها ارائه می دهد که بر اساس فصل سازماندهی شده اند.
12
سیستم عامل های داخلی و اصول طراحی13.........................................................................................................................
بخش 1پیشینه
فصل 1
1.1عناصر اساسی
1.2تکامل ریزپردازنده
1.3اجرای دستورالعمل
1.4وقفه ها
1.6حافظه کش
1.8چند پردازنده و سازمان چند هسته ای متقارن چند پردازنده کامپیوترهای چند هسته ای
1.10اصطالحات کلیدی ،بررسی سواالت و مشکالت ضمیمه A1ویژگی های عملکرد حافظه های دو سطحی محل عملکرد
حافظه دو سطحی
13
سیستم عامل های داخلی و اصول طراحی14.........................................................................................................................
اهداف یادگیری
-مراحل انجام شده توسط یک پردازنده برای اجرای یک دستورالعمل را توضیح دهید.
-ویژگی های اساسی سازمان های چند پردازنده ای و چند هسته ای را توضیح دهید.
-مفهوم محلی بودن را مورد بحث قرار دهید و عملکرد یک سلسله مراتب حافظه چند سطحی را تجزیه و تحلیل کنید.
-عملکرد یک پشته و استفاده از آن برای پشتیبانی از فراخوانی و بازگشت رویه را درک کنید.
یک سیستم عامل OSاز منابع سخت افزاری یک یا چند پردازنده برای ارائه مجموعه ای از خدمات به کاربران سیستم سوء
استفاده می کند .این سیستم عامل همچنین حافظه ثانویه و دستگاه های ورودی/خروجی ورودی/خروجی را از طرف کاربران
خود مدیریت می کند .بر این اساس ،قبل از شروع بررسی سیستمعاملها ،داشتن درک درستی از سختافزار سیستمهای
کامپیوتری ضروری است .در این فصل مروری بر سخت افزار سیستم کامپیوتری ارائه می شود .در بیشتر زمینه ها ،نظرسنجی
مختصر است ،زیرا فرض بر این است که خواننده با این موضوع آشنا است .با این حال ،چندین حوزه به دلیل اهمیت آنها برای
موضوعاتی که بعداً در کتاب پوشش داده می شوند ،با جزئیات مورد بررسی قرار گرفته اند .موضوعات بیشتر در پیوست C
پوشش داده شده است.
1.1عناصر اساسی
در سطح باال ،یک کامپیوتر از پردازنده ،حافظه و اجزای ورودی/خروجی با یک یا چند ماژول از هر نوع تشکیل شده است .این
اجزا به نوعی به هم متصل می شوند تا به عملکرد اصلی رایانه که اجرای برنامه ها است ،دست یابند .بنابراین ،چهار عنصر
ساختاری اصلی وجود دارد:
-پردازنده :عملکرد کامپیوتر را کنترل می کند و عملکردهای پردازش داده آن را انجام می دهد .هنگامی که تنها یک
پردازنده وجود دارد ،اغلب به عنوان واحد پردازش مرکزی CPUشناخته می شود.
14
سیستم عامل های داخلی و اصول طراحی15.........................................................................................................................
-حافظه اصلی :داده ها و برنامه ها را ذخیره می کند .این حافظه معموالً فرار است .یعنی وقتی کامپیوتر خاموش می شود،
محتویات حافظه از بین می رود .در مقابل ،محتویات حافظه دیسک حتی زمانی که سیستم کامپیوتری خاموش است،
حفظ می شود .حافظه اصلی به عنوان حافظه حقیقی یا حافظه اصلی نیز شناخته می شود.
حافظه اصلی
= PCشمارنده برنامه
= IRثبت دستورالعمل
= MARثبت آدرس حافظه
= MBRثبت بافر حافظه
= I/O ARثبت آدرس ورودی/خروجی
= I/O BRثبت بافر ورودی/خروجی
-ماژول های ورودی/خروجی :داده ها را بین رایانه و محیط خارجی آن جابه جا می کند .محیط خارجی شامل انواع دستگاهها،
از جمله دستگاههای حافظه ثانویه به عنوان مثال ،دیسک ،تجهیزات ارتباطی و پایانهها است.
-گذرگاه سیستم :ارتباط بین پردازنده ها ،حافظه اصلی و ماژول های ورودی/خروجی را فراهم می کند.
شکل 1.1این اجزای سطح باال را نشان می دهد .یکی از وظایف پردازنده تبادل اطالعات با حافظه است .برای این منظور ،معموالً
از دو رجیستر داخلی برای پردازنده استفاده می کند :یک ثبات آدرس حافظه ،MARکه آدرس موجود در حافظه را برای
خواندن یا نوشتن بعدی مشخص می کند .و یک رجیستر بافر حافظه MBRکه حاوی داده هایی است که باید در حافظه نوشته
15
سیستم عامل های داخلی و اصول طراحی16.........................................................................................................................
شود یا داده های خوانده شده را از حافظه دریافت می کند .به طور مشابه ،یک ثبت آدرس I/O I/OARیک دستگاه I/O
خاص را مشخص می کند .یک ثبات بافر ورودی/خروجی I/OBRبرای تبادل داده بین یک ماژول I/Oو پردازنده استفاده می
شود.
یک ماژول حافظه شامل مجموعهای از مکانها است که با آدرسهایی با شمارهگذاری متوالی تعریف میشوند .هر مکان حاوی
یک الگوی بیت است که می تواند به عنوان یک دستورالعمل یا داده تفسیر شود .یک ماژول I/Oداده ها را از دستگاه های
خارجی به پردازنده و حافظه منتقل می کند و بالعکس .این شامل بافرهای داخلی برای نگهداری موقت داده ها تا زمانی که بتوان
آنها را ارسال کرد.
1.2تکامل ریزپردازنده
انقالب سخت افزاری که محاسبات دسکتاپ و دستی را به وجود آورد ،اختراع ریزپردازنده بود که شامل یک پردازنده بر روی یک
تراشه بود .اگرچه در اصل بسیار کندتر از پردازندههای چند تراشهای است ،ریزپردازندهها پیوسته تا حدی تکامل یافتهاند که به
دلیل فیزیک درگیر در جابجایی اطالعات در بازههای زمانی زیر نانوثانیه ،برای اکثر محاسبات بسیار سریعتر هستند.
ریزپردازندهها نه تنها به سریعترین پردازندههای همه منظوره در دسترس تبدیل شدهاند ،بلکه اکنون به چند پردازنده تبدیل
شدهاند .هر تراشه که سوکت نامیده می شود شامل چندین پردازنده که هسته نامیده می شود ،هر کدام دارای سطوح مختلف
حافظه پنهان بزرگ ،و چندین پردازنده منطقی است که واحدهای اجرایی هر هسته را به اشتراک می گذارند .از سال ،2010
داشتن 2یا 4هسته ،هر کدام با 2رشته سخت افزاری ،برای مجموع 4یا 8پردازنده منطقی ،غیرعادی نیست.
اگرچه پردازنده ها عملکرد بسیار خوبی را برای اکثر اشکال محاسباتی ارائه می دهند ،تقاضا برای محاسبات عددی افزایش می
یابد .واحدهای پردازش گرافیکی GPUمحاسبات کارآمدی را روی آرایههای داده با استفاده از تکنیکهای دادههای چندگانه
تک دستوری SIMDکه در ابررایانهها پیشگام شدهاند ،ارائه میکنند .پردازندههای گرافیکی دیگر فقط برای رندر کردن
گرافیکهای پیشرفته استفاده نمیشوند ،بلکه برای پردازشهای عددی عمومی ،مانند شبیهسازیهای فیزیک برای بازیها یا
محاسبات روی صفحات گسترده بزرگ نیز استفاده میشوند .همزمان ،خود CPUها قابلیت کار بر روی آرایههای داده را به
دست میآورند -با واحدهای برداری قدرتمندتر که در معماری پردازنده خانوادههای x86و AMD64ادغام شدهاند.
پردازنده ها و GPUها پایان داستان محاسباتی رایانه های شخصی مدرن نیستند .پردازندههای سیگنال دیجیتال DSPنیز
برای کار با سیگنالهای جریانی مانند صدا یا تصویر وجود دارند DSP .ها قبالً در دستگاه های ورودی/خروجی مانند مودم ها
تعبیه می شدند ،اما اکنون به دستگاه های محاسباتی درجه یک ،به ویژه در دستگاه های دستی تبدیل می شوند .سایر
16
سیستم عامل های داخلی و اصول طراحی17.........................................................................................................................
دستگاههای محاسباتی تخصصی واحدهای عملکرد ثابت برای پشتیبانی از سایر محاسبات استاندارد ،مانند رمزگذاری/رمزگشایی
گفتار و ویدیو کدکها ،یا ارائه پشتیبانی برای رمزگذاری و امنیت ،با CPUوجود دارند.
برای برآوردن نیازهای دستگاه های دستی ،ریزپردازنده کالسیک جای خود را به سیستم روی تراشه SoCمی دهد ،جایی که نه
تنها CPUها و حافظه های پنهان روی یک تراشه قرار دارند ،بلکه بسیاری از اجزای دیگر سیستم ،مانند DSPها GPU ،ها،
دستگاه های ورودی/خروجی مانند رادیوها و کدک ها و حافظه اصلی.
1.3اجرای دستورالعمل
برنامه ای که باید توسط یک پردازنده اجرا شود شامل مجموعه ای از دستورالعمل های ذخیره شده در حافظه است .در ساده
ترین شکل ،پردازش دستورالعمل شامل دو مرحله است :پردازنده دستورالعمل ها را یکی یکی از حافظه می خواند و هر دستور را
اجرا می کند .اجرای برنامه شامل تکرار فرآیند واکشی دستورالعمل و اجرای دستورالعمل است .اجرای دستورالعمل ممکن است
شامل چندین عملیات باشد و به ماهیت دستور بستگی دارد .پردازش مورد نیاز برای یک دستورالعمل منفرد ،چرخه دستورالعمل
نامیده می شود .با استفاده از یک توصیف دو مرحله ای ساده ،چرخه دستورالعمل در شکل 1.2نشان داده شده است .این دو
مرحله به عنوان مرحله واکشی و مرحله اجرا نامیده می شوند .اجرای برنامه فقط در صورتی متوقف می شود که پردازنده خاموش
باشد ،نوعی خطای غیرقابل بازیابی رخ دهد یا دستورالعمل برنامه ای که پردازنده را متوقف می کند مواجه شود.
در ابتدای هر چرخه دستورالعمل ،پردازنده یک دستورالعمل را از حافظه واکشی می کند .به طور معمول ،شمارنده برنامه PC
آدرس دستور بعدی را که باید واکشی می شود ،نگه می دارد .مگر اینکه دستور دیگری داده شود ،پردازنده همیشه کامپیوتر را
بعد از هر واکشی دستورالعمل افزایش می دهد تا دستور بعدی را به ترتیب یعنی دستورالعملی که در آدرس حافظه باالتر بعدی
قرار دارد واکشی کند .به عنوان مثال ،یک کامپیوتر ساده شده را در نظر بگیرید که در آن هر دستورالعمل یک کلمه 16بیتی از
حافظه را اشغال می کند .فرض کنید که شمارنده برنامه روی مکان 300تنظیم شده است .پردازنده در مرحله بعدی
17
سیستم عامل های داخلی و اصول طراحی18.........................................................................................................................
دستورالعمل را در مکان 300واکشی می کند .در چرخه های دستورالعمل بعدی ،دستورالعمل ها را از مکان های ،302 ،301
303و غیره دریافت می کند .این توالی ممکن است تغییر یابد ،همانطور که در ادامه توضیح داده شد.
دستورالعمل واکشی شده در ثبت دستورالعمل IRبارگذاری می شود .این دستورالعمل حاوی بیت هایی است که عملکردی را
که پردازنده باید انجام دهد را مشخص می کند .پردازنده دستور را تفسیر می کند و عمل مورد نیاز را انجام می دهد .به طور
کلی ،این اقدامات به چهار دسته تقسیم می شوند:
-حافظه پردازنده :داده ها ممکن است از پردازنده به حافظه یا از حافظه به پردازنده دیگر منتقل شوند.
: Processor-I/O -داده ها ممکن است با انتقال بین پردازنده و یک ماژول I/Oبه یک دستگاه جانبی یا از آن منتقل شوند.
-پردازش داده :پردازنده ممکن است برخی از عملیات حسابی یا منطقی را روی داده ها انجام دهد.
-کنترل :یک دستورالعمل ممکن است مشخص کند که توالی اجرا تغییر کند .برای مثال ،پردازنده ممکن است دستورالعملی را
از مکان 149واکشی کند ،که مشخص می کند دستور بعدی از مکان 182باشد .پردازنده شمارنده برنامه را روی 182تنظیم
می کند .بنابراین ،در مرحله واکشی بعدی ،دستورالعمل از مکان 182واکشی می شود.
18
سیستم عامل های داخلی و اصول طراحی19.........................................................................................................................
یک مثال ساده را با استفاده از یک پردازشگر فرضی در نظر بگیرید که شامل ویژگی های ذکر شده در شکل 1.3است .پردازنده
شامل یک ثبت داده واحد به نام ACcumulator ACاست .هر دو دستورالعمل و داده 16بیتی هستند و حافظه به صورت
دنباله ای از کلمات 16بیتی سازماندهی شده است .فرمت دستورالعمل 4بیت برای کد عملیاتی فراهم می کند ،که به 16 = 24
کد عملیاتی مختلف اجازه می دهد که با یک رقم هگزادسیمال 1 1نشان داده می شود .کد عملیاتی را که پردازنده باید انجام
دهد را تعریف می کند .با 12بیت باقیمانده از فرمت دستورالعمل ،تا K4 4096 = 212کلمه حافظه که با سه رقم هگزادسیمال
مشخص می شوند می توانند مستقیماً آدرس دهی شوند .شکل 1.4اجرای جزئی برنامه را نشان می دهد و موارد مربوطه را
نشان می دهد.
تعداد حافظه و رجیسترهای پردازنده قطعه برنامه نشان داده شده محتویات کلمه حافظه در آدرس 940را به محتوای کلمه
حافظه در آدرس 941اضافه می کند و نتیجه را در مکان دوم ذخیره می کند .سه دستورالعمل ،که می تواند به عنوان سه
مرحله واکشی و سه مرحله اجرا توصیف شود ،مورد نیاز است:
PC .1حاوی ،300آدرس اولین دستورالعمل است .این دستورالعمل مقدار 1940در هگزادسیمال در IRبارگذاری می شود و
رایانه شخصی افزایش می یابد .توجه داشته باشید که این فرآیند شامل استفاده از یک ثبات آدرس حافظه MARو یک ثبات
بافر حافظه MBRاست .برای سادگی ،این رجیسترهای میانی نشان داده نشده اند.
4 .2بیت اول اولین رقم هگزادسیمال در IRنشان می دهد که ACقرار است از حافظه بارگذاری شود 12 .بیت باقی مانده سه
رقم هگزادسیمال آدرس را مشخص می کند که 940است.
.4محتویات قدیمی ACو محتویات محل 941اضافه شده و نتیجه در ACذخیره می شود.
1یک تجدید کننده اساسی در مورد سیستم های اعداد (اعشاری ،باینری ،هگزادسیمال) را می توان در سایت منابع دانشجویی علوم کامپیوتر در ComputerScien
eStudent.comیافت.
19
سیستم عامل های داخلی و اصول طراحی20.........................................................................................................................
در این مثال ،برای افزودن محتویات مکان 940به محتویات ،941به سه چرخه دستورالعمل ،که هر کدام از یک مرحله واکشی
و یک مرحله اجرا تشکیل میشود ،نیاز است .با مجموعه پیچیدهتری از دستورالعملها ،چرخههای دستورالعمل کمتری مورد نیاز
است .اکثر پردازنده های مدرن شامل دستورالعمل هایی هستند که بیش از یک آدرس دارند .بنابراین مرحله اجرا برای یک
دستورالعمل خاص ممکن است شامل بیش از یک مرجع به حافظه باشد .همچنین ،به جای مراجع حافظه ،یک دستورالعمل
ممکن است یک عملیات I/Oرا مشخص کند.
1.4وقفه
تقریباً همه رایانهها مکانیزمی را ارائه میکنند که توسط آن سایر ماژولها ،I/Oحافظه ممکن است توالی عادی پردازنده را
مختل کنند .جدول 1.1رایج ترین کالس های وقفه ها را فهرست می کند.
20
سیستم عامل های داخلی و اصول طراحی21.........................................................................................................................
وقفه ها در درجه اول به عنوان راهی برای بهبود استفاده از پردازنده ارائه می شوند .برای مثال ،اکثر دستگاه های ورودی/خروجی
بسیار کندتر از پردازنده هستند .فرض کنید که پردازنده با استفاده از طرح چرخه دستورالعمل شکل 1.2داده ها را به چاپگر
منتقل می کند .پس از هر عملیات نوشتن ،پردازنده باید مکث کند و تا زمانی که چاپگر به کار برسد ،بیکار بماند .طول این مکث
ممکن است در حدود هزاران یا حتی میلیون ها چرخه دستورالعمل باشد .واضح است که این یک استفاده بسیار بیهوده از
پردازنده است.
برای ارائه یک مثال خاص ،رایانهای را در نظر بگیرید که با فرکانس 1گیگاهرتز کار میکند ،که تقریباً 109دستورالعمل در
ثانیه 2را امکانپذیر میکند 4 .میلیون بار کندتر از پردازنده است.
شکل a1.5این وضعیت را نشان می دهد .برنامه کاربر یک سری فراخوانی WRITEرا با پردازش انجام می دهد .خطوط
عمودی جامد بخش هایی از کد را در یک برنامه نشان می دهد .بخشهای کد ،2 ،1و 3به دنبالهای از دستورالعملهایی اشاره
دارند که شامل I/Oنمیشوند .فراخوانی های WRITEبه یک روال ورودی/خروجی است که یک ابزار سیستمی است و
عملیات ورودی/خروجی واقعی را انجام می دهد .برنامه I/Oاز سه بخش تشکیل شده است:
2بحث در مورد استفاده از پیشوندهای عددی ،مانند gigaو ، teraدر یک سند پشتیبانی در سایت منابع دانشجویی علوم کامپیوتر در ComputerScienceStudent.com
آمده است.
21
سیستم عامل های داخلی و اصول طراحی22.........................................................................................................................
-دنباله ای از دستورالعمل ها ،با برچسب 4در شکل ،برای آماده شدن برای عملیات I/Oواقعی .این ممکن است شامل کپی
کردن داده ها برای خروجی در یک بافر خاص و آماده سازی پارامترها برای یک فرمان دستگاه باشد.
-دستور I/Oواقعی .بدون استفاده از وقفه ،زمانی که این دستور صادر شد ،برنامه باید منتظر بماند تا دستگاه I/Oعملکرد
درخواستی را انجام دهد یا به صورت دوره ای وضعیت یا نظرسنجی دستگاه I/Oرا بررسی کند .برنامه ممکن است با انجام مکرر
یک عملیات آزمایشی منتظر بماند تا مشخص شود آیا عملیات I/Oانجام شده است یا خیر.
-دنباله ای از دستورالعمل ها ،که در شکل 5نشان داده شده است ،برای تکمیل عملیات .این ممکن است شامل تنظیم پرچمی
باشد که موفقیت یا شکست عملیات را نشان می دهد.
خط چین نشان دهنده مسیر اجرایی است که توسط پردازنده دنبال می شود .یعنی این خط دنباله ای را نشان می دهد که
دستورالعمل ها در آن اجرا می شوند .بنابراین ،پس از مواجه شدن با اولین دستور ،WRITEبرنامه کاربر قطع می شود و اجرا
با برنامه I/Oادامه می یابد .پس از اتمام اجرای برنامه ،I/Oبالفاصله پس از دستور ،WRITEاجرا در برنامه کاربر از سر گرفته
می شود.
از آنجایی که عملیات I/Oممکن است زمان نسبتاً زیادی طول بکشد ،برنامه I/Oدر انتظار تکمیل عملیات قطع میشود .از این
رو ،برنامه کاربر در نقطه فراخوانی WRITEبرای مدت زمان قابل توجهی متوقف می شود.
الف) بدون وقفه (ب) قطع می کند . I/Oکوتاه ج) قطع می کند .انتظار طوالنیI/O
صبر کنید
وقفه در طول اجرای برنامه کاربر رخ می دهد = X
22
سیستم عامل های داخلی و اصول طراحی23.........................................................................................................................
با وقفه ،پردازنده می تواند در اجرای دستورالعمل های دیگر در حالی که عملیات I/Oدر حال انجام است ،مشغول شود .جریان
کنترل را در شکل b1.5در نظر بگیرید .همانطور که قبالً ،برنامه کاربر به نقطه ای می رسد که در آن یک فراخوانی سیستمی به
شکل یک فراخوانی WRITEبرقرار می کند .برنامه ورودی/خروجی که در این مورد فراخوانی میشود ،فقط شامل کد
آمادهسازی و دستور واقعی ورودی/خروجی میشود .پس از اجرای این چند دستورالعمل ،کنترل به برنامه کاربر باز می گردد .در
همین حال ،دستگاه خارجی مشغول پذیرش داده ها از حافظه رایانه و چاپ آن است .این عملیات I/Oهمزمان با اجرای
دستورالعمل ها در برنامه کاربر انجام می شود.
هنگامی که دستگاه خارجی آماده سرویس می شود ،یعنی زمانی که آماده پذیرش داده های بیشتری از پردازنده است ،ماژول
I/Oبرای آن دستگاه خارجی یک سیگنال درخواست وقفه به پردازنده ارسال می کند .پردازنده با تعلیق عملکرد برنامه فعلی
پاسخ می دهد .انشعاب به یک روال برای سرویس دهی به دستگاه ورودی/خروجی خاص که به عنوان کنترل کننده وقفه
شناخته می شود .و از سرگیری اجرای اصلی پس از سرویس دستگاه .نقاطی که چنین وقفه هایی در آنها رخ می دهد در شکل
b1.5نشان داده شده است .توجه داشته باشید که وقفه می تواند در هر نقطه از برنامه اصلی رخ دهد ،نه فقط در یک
دستورالعمل خاص.
برای برنامه کاربر ،یک وقفه توالی عادی اجرا را به حالت تعلیق در می آورد .هنگامی که پردازش وقفه کامل شد ،اجرا از سر
گرفته می شود شکل .1.6بنابراین ،برنامه کاربر نیازی به کد خاصی برای تطبیق وقفه ندارد .پردازنده و سیستم عامل مسئول
تعلیق برنامه کاربر و سپس از سرگیری آن در همان نقطه هستند.
23
سیستم عامل های داخلی و اصول طراحی24.........................................................................................................................
همانطور که در شکل 1.7نشان داده شده است ،برای تطبیق وقفه ها ،یک مرحله وقفه به چرخه دستورالعمل اضافه می شود
شکل 1.2را مقایسه کنید .در مرحله وقفه ،پردازنده بررسی می کند که آیا وقفه ای رخ داده است که با وجود سیگنال وقفه
مشخص می شود .اگر هیچ وقفهای معلق نباشد ،پردازنده به مرحله واکشی میرود و دستورالعمل بعدی برنامه فعلی را واکشی
میکند .اگر یک وقفه در حال تعلیق باشد ،پردازنده اجرای برنامه فعلی را به حالت تعلیق در می آورد و یک روال کنترل کننده
وقفه را اجرا می کند .روال کنترل کننده وقفه عموماً بخشی از سیستم عامل است .به طور معمول ،این روال ماهیت وقفه را
تعیین می کند و هر گونه اقدامات مورد نیاز را انجام می دهد .در مثالی که استفاده میکنیم ،کنترلکننده تعیین میکند که
کدام ماژول I/Oباعث ایجاد وقفه شده است و ممکن است به برنامهای منشعب شود که دادههای بیشتری را در آن ماژول I/O
بنویسد .هنگامی که روال کنترل کننده وقفه کامل شد ،پردازنده می تواند اجرای برنامه کاربر را در نقطه وقفه از سر بگیرد.
وقفه ها
غیرفعال است
مکث
واضح است که در این فرآیند مقداری سربار دخیل است .برای تعیین ماهیت وقفه و تصمیم گیری در مورد اقدام مناسب باید
دستورالعمل های اضافی در کنترل کننده وقفه اجرا شود .با این وجود ،به دلیل زمان نسبتاً زیادی که صرفاً با انتظار در یک
عملیات I/Oتلف میشود ،پردازنده را میتوان با استفاده از وقفهها بسیار کارآمدتر به کار برد.
برای درک افزایش کارایی ،شکل 1.8را در نظر بگیرید ،که یک نمودار زمان بندی بر اساس جریان کنترل در شکل های a1.5و
b1.5است .شکل های b1.5و 1.8فرض می کنند که زمان الزم برای عملیات I/Oنسبتاً کوتاه است :کمتر از زمان تکمیل
اجرای دستورالعمل ها بین عملیات نوشتن در برنامه کاربر .مورد معمول تر ،به خصوص برای دستگاه های کندی مانند چاپگر،
این است که عملیات I/Oزمان بسیار بیشتری نسبت به اجرای یک سری دستورالعمل های کاربر می برد .شکل c1.5این
24
سیستم عامل های داخلی و اصول طراحی25.........................................................................................................................
وضعیت را نشان می دهد .در این حالت ،برنامه کاربر قبل از اینکه عملیات I/Oایجاد شده توسط اولین تماس کامل شود ،به
دومین تماس WRITEمی رسد .نتیجه این است که برنامه کاربر در آن نقطه قطع می شود .هنگامی که عملیات
ورودی/خروجی قبلی تکمیل شد ،ممکن است این تماس WRITEجدید پردازش شود و عملیات ورودی/خروجی جدیدی
شروع شود .شکل 1.9زمان بندی این وضعیت را با و بدون استفاده از وقفه نشان می دهد .ما میتوانیم ببینیم که هنوز افزایشی
در کارایی وجود دارد زیرا بخشی از زمانی که عملیات I/Oدر حال انجام است با اجرای دستورالعملهای کاربر همپوشانی دارد.
عملیات I/Oهمزمان
عملیات I/O؛ پردازنده
با اجرای پردازنده
منتظر می ماند
ب) با وقفه
25
سیستم عامل های داخلی و اصول طراحی26.........................................................................................................................
عملیات I/O؛
عملیات I/Oهمزمان
پردازنده منتظر می
با اجرای پردازنده.
ماند
سپس پردازنده منتظر
می ماند
عملیات I/Oهمزمان
با اجرای پردازنده.
عملیات I/O؛
سپس پردازنده منتظر
پردازنده منتظر می
می ماند
ماند
ب) با وقفه
26
سیستم عامل های داخلی و اصول طراحی27.........................................................................................................................
وقفه در فرآیند
27
سیستم عامل های داخلی و اصول طراحی28.........................................................................................................................
وقفه در پردازش
یک وقفه باعث ایجاد تعدادی رویداد ،هم در سخت افزار پردازنده و هم در نرم افزار می شود .شکل 1.10یک توالی معمولی را
نشان می دهد .هنگامی که یک دستگاه I/Oعملیات I/Oرا کامل می کند ،توالی زیر از رویدادهای سخت افزاری رخ می دهد:
.2همانطور که در شکل 1.7نشان داده شده است ،پردازنده قبل از پاسخ به وقفه ،اجرای دستور فعلی را به پایان می رساند.
.3پردازنده یک درخواست وقفه معلق را آزمایش می کند ،تشخیص می دهد که یک وقفه وجود دارد و یک سیگنال تایید را به
دستگاهی که وقفه را صادر کرده است ارسال می کند .تصدیق به دستگاه اجازه می دهد تا سیگنال وقفه خود را حذف کند.
.4پردازنده در مرحله بعد باید برای انتقال کنترل به روال وقفه آماده شود .برای شروع ،اطالعات مورد نیاز برای از سرگیری
برنامه فعلی را در نقطه وقفه ذخیره می کند .حداقل اطالعات مورد نیاز عبارت است از وضعیت برنامه word3 PSW3و محل
دستور بعدی که باید اجرا شود که در شمارنده برنامه PCموجود است .اینها را می توان روی یک پشته کنترل فشار داد پیوست
Pرا ببینید.
.5سپس پردازنده شمارنده برنامه را با محل ورود روال مدیریت وقفه بارگذاری می کند که به این وقفه پاسخ می دهد .بسته به
معماری کامپیوتر و طراحی سیستم عامل ،ممکن است یک برنامه واحد وجود داشته باشد ،یکی برای هر نوع وقفه ،یا یکی برای
هر دستگاه و هر نوع وقفه .اگر بیش از یک روال مدیریت وقفه وجود داشته باشد ،پردازنده باید تعیین کند که کدام یک را
فراخوانی کند .این اطالعات ممکن است در سیگنال وقفه اصلی گنجانده شده باشد ،یا ممکن است پردازنده مجبور باشد برای
دریافت پاسخی حاوی اطالعات مورد نیاز ،درخواستی را به دستگاهی که وقفه را صادر کرده است ،ارسال کند.
هنگامی که شمارنده برنامه بارگذاری شد ،پردازنده به چرخه دستورالعمل بعدی می رود که با واکشی دستورالعمل آغاز می شود.
از آنجایی که واکشی دستورالعمل توسط محتویات شمارنده برنامه تعیین می شود ،کنترل به برنامه کنترل کننده وقفه منتقل
می شود .اجرای این برنامه منجر به عملیات زیر می شود:
.6در این مرحله شمارنده برنامه و PSWمربوط به برنامه قطع شده در پشته کنترل ذخیره شده است .با این حال ،اطالعات
دیگری وجود دارد که بخشی از وضعیت برنامه در حال اجرا در نظر گرفته می شود .به ویژه ،محتویات ثبات های پردازنده باید
ذخیره شوند ،زیرا این ثبات ها ممکن است توسط کنترل کننده وقفه استفاده شوند .بنابراین ،همه این مقادیر ،به عالوه هر
اطالعات وضعیت دیگر ،باید ذخیره شوند .به طور معمول ،کنترل کننده وقفه با ذخیره محتویات همه ثبات ها در پشته شروع می
PSW 3حاوی اطالعات وضعیت در مورد فرآیند در حال اجرا است ،از جمله اطالعات استفاده از حافظه ،کدهای وضعیت ،و سایر اطالعات وضعیت ،مانند بیت فعال/غیرفعال وقفه
و بیت حالت هسته/کاربر .برای بحث بیشتر به پیوست ج مراجعه کنید.
28
سیستم عامل های داخلی و اصول طراحی29.........................................................................................................................
شود .سایر اطالعات وضعیتی که باید ذخیره شوند در فصل 3بحث شده است .شکل a1.11یک مثال ساده را نشان می دهد .در
این حالت ،یک برنامه کاربر پس از دستور در محل Nقطع می شود .محتویات همه رجیسترها به اضافه آدرس از دستورالعمل
بعدی ،N + 121در مجموع Mکلمه ،بر روی پشته کنترل فشار داده می شود .نشانگر پشته به روز می شود تا به باالی جدید
پشته اشاره کند ،و شمارنده برنامه به روز می شود تا به ابتدای روال سرویس وقفه اشاره کند.
.7اکنون کنترل کننده وقفه ممکن است به پردازش وقفه ادامه دهد .این شامل بررسی اطالعات وضعیت مربوط به عملیات I/O
یا رویداد دیگری است که باعث وقفه شده است .همچنین ممکن است شامل ارسال دستورات یا تأییدیه های اضافی به دستگاه
I/Oباشد.
.8هنگامی که پردازش وقفه کامل شد ،مقادیر ثبت ذخیره شده از پشته بازیابی شده و به ثبات ها بازیابی می شوند به عنوان
مثال ،به شکل b1.11مراجعه کنید.
.9عمل نهایی بازیابی مقادیر PSWو شمارنده برنامه از پشته است .در نتیجه دستور بعدی که باید اجرا شود از برنامه قطع شده
قبلی خواهد بود .مهم است که تمام اطالعات وضعیت برنامه قطع شده را برای ازسرگیری بعدی ذخیره کنید .این به این دلیل
است که وقفه یک روال فراخوانی از برنامه نیست .در عوض ،وقفه می تواند در هر زمان و بنابراین در هر نقطه از اجرای یک
برنامه کاربر رخ دهد .وقوع آن غیر قابل پیش بینی است.
29
سیستم عامل های داخلی و اصول طراحی30.........................................................................................................................
تا اینجا در مورد وقوع یک وقفه صحبت کردیم .با این حال ،فرض کنید که یک یا چند وقفه می تواند در حین پردازش یک وقفه
رخ دهد .به عنوان مثال ،یک برنامه ممکن است داده ها را از یک خط ارتباطی دریافت کند و نتایج را به طور همزمان چاپ کند.
چاپگر هر بار که عملیات چاپ را کامل می کند ،یک وقفه ایجاد می کند .کنترل کننده خط ارتباطی هر بار که یک واحد داده
می رسد یک وقفه ایجاد می کند .بسته به ماهیت رشته ارتباطات ،واحد می تواند یک کاراکتر یا یک بلوک باشد .در هر صورت،
ممکن است در حین پردازش وقفه چاپگر ،وقفه ارتباطی رخ دهد.
برای مقابله با وقفه های متعدد می توان دو رویکرد را در نظر گرفت .اولین مورد ،غیرفعال کردن وقفه ها در حین پردازش یک
وقفه است .وقفه غیرفعال به سادگی به این معنی است که پردازنده هر سیگنال درخواست وقفه جدیدی را نادیده می گیرد .اگر
در این مدت وقفه ای رخ دهد ،معموالً در حالت تعلیق باقی می ماند و پس از اینکه پردازنده دوباره وقفه ها را فعال کرد ،توسط
پردازنده بررسی می شود .بنابراین ،اگر یک وقفه در هنگام اجرای یک برنامه کاربر رخ دهد ،وقفه ها بالفاصله غیرفعال می شوند.
پس از تکمیل روال کنترل کننده وقفه ،قبل از شروع مجدد برنامه کاربر ،وقفه ها دوباره فعال می شوند و پردازنده بررسی می
کند که آیا وقفه های اضافی رخ داده است یا خیر .این رویکرد ساده است ،زیرا وقفهها به ترتیب دقیق مدیریت میشوند شکل
.a1.12
30
سیستم عامل های داخلی و اصول طراحی31.........................................................................................................................
اشکال رویکرد قبلی این است که اولویت نسبی یا نیازهای بحرانی زمانی را در نظر نمی گیرد .به عنوان مثال ،زمانی که ورودی از
خط ارتباطی می رسد ،ممکن است نیاز باشد که به سرعت جذب شود تا فضای بیشتری برای ورودی ایجاد شود .اگر دسته اول
ورودی قبل از رسیدن دسته دوم پردازش نشده باشد ،ممکن است داده ها از بین بروند زیرا ممکن است بافر روی دستگاه
ورودی/خروجی پر شده و سرریز شود.
31
سیستم عامل های داخلی و اصول طراحی32.........................................................................................................................
رویکرد دوم ،تعریف اولویتها برای وقفهها و اجازه دادن به یک وقفه با اولویت باالتر است که باعث قطع شدن یک کنترلکننده
وقفه با اولویت پایینتر شود شکل .b1.12به عنوان نمونه ای از این رویکرد دوم ،سیستمی را با سه دستگاه ورودی/خروجی در
نظر بگیرید :چاپگر ،دیسک و خط ارتباطی ،با افزایش اولویت های 4 ،2و 5به ترتیب .شکل 1.13یک توالی ممکن را نشان می
دهد .یک برنامه کاربر با t = 0شروع می شود .در ،t = 10یک وقفه چاپگر رخ می دهد .اطالعات کاربر در پشته کنترل قرار می
گیرد و اجرا در روال سرویس وقفه چاپگر ISRادامه می یابد .در حالی که این روال هنوز در حال اجرا است ،در t = 15یک
وقفه ارتباطات رخ می دهد .از آنجایی که خط ارتباطی اولویت بیشتری نسبت به چاپگر دارد ،درخواست وقفه رعایت می شود.
ISRچاپگر قطع می شود ،وضعیت آن به پشته فشار داده می شود و اجرا در ISRارتباطات ادامه می یابد .در حالی که این
روال در حال اجرا است ،یک وقفه دیسک t = 2021رخ می دهد .از آنجایی که این وقفه اولویت پایین تری دارد ،به سادگی نگه
داشته می شود و ISRارتباطات تا تکمیل اجرا می شود.
هنگامی که ISRارتباطات کامل شد ،t = 2521وضعیت پردازنده قبلی بازیابی می شود ،که اجرای ISRچاپگر است .با این
حال ،قبل از اینکه حتی یک دستورالعمل در آن روال اجرا شود ،پردازنده وقفه دیسک با اولویت باالتر را پاس می کند و کنترل را
به ISRدیسک منتقل می کند .تنها زمانی که آن روال کامل شود ISR ،t = 3521چاپگر از سر گرفته می شود .هنگامی که
آن روال t = 4021کامل شد ،کنترل در نهایت به برنامه کاربر باز می گردد.
برنامه کاربر روال سرویس قطع چاپگر روال خدمات قطع ارتباط
32
سیستم عامل های داخلی و اصول طراحی33.........................................................................................................................
محدودیت های طراحی روی حافظه کامپیوتر را می توان با سه سوال خالصه کرد :چقدر؟ چقدر سریع؟ چقدر گران؟
این سوال که چقدر تا حدودی باز است به پایان رسید .اگر ظرفیت وجود داشته باشد ،احتماالً برنامه هایی برای استفاده از آن
توسعه خواهند یافت .به این سوال که چقدر سریع می توان به یک معنا پاسخ داد .برای دستیابی به بهترین عملکرد ،حافظه باید
بتواند با پردازنده هماهنگ باشد .یعنی از آنجایی که پردازنده در حال اجرای دستورالعملها است ،نمیخواهیم منتظر دستورات
یا عملوندها باشد .سوال آخر را نیز باید در نظر گرفت .برای یک سیستم عملی ،هزینه حافظه باید در رابطه با سایر اجزا معقول
باشد.
همانطور که انتظار می رود ،بین سه ویژگی کلیدی حافظه ،یعنی ظرفیت ،زمان دسترسی و هزینه ،تعادل وجود دارد .فناوریهای
مختلفی برای پیادهسازی سیستمهای حافظه استفاده میشود و در این طیف از فناوریها ،روابط زیر برقرار است:
-زمان دسترسی سریعتر ،هزینه بیشتر برای هر بیت rظرفیت بیشتر ،هزینه کمتر برای هر بیت
دوراهی پیش روی طراح روشن است .طراح مایل است از فناوریهای حافظهای استفاده کند که حافظه با ظرفیت زیادی را فراهم
میکنند ،هم به دلیل نیاز به ظرفیت و هم به دلیل پایین بودن هزینه هر بیت .با این حال ،برای برآورده ساختن الزامات عملکرد،
طراح باید از حافظه های گران قیمت و ظرفیت نسبتاً کمتر با زمان دسترسی سریع استفاده کند.
راه برون رفت از این معضل ،تکیه نکردن به یک جزء یا فناوری حافظه ،بلکه به کارگیری سلسله مراتب حافظه است .یک سلسله
مراتب معمولی در شکل 1.14نشان داده شده است .با پایین آمدن سلسله مراتب ،موارد زیر رخ می دهد:
ب افزایش ظرفیت
بنابراین ،حافظههای کوچکتر ،گرانتر و سریعتر با حافظههای بزرگتر ،ارزانتر و کندتر تکمیل میشوند .کلید موفقیت این
سازمان ،کاهش فراوانی دسترسی در سطوح پایین تر است .ما این مفهوم را با جزئیات بیشتری در این فصل بررسی خواهیم کرد،
33
سیستم عامل های داخلی و اصول طراحی34.........................................................................................................................
زمانی که در مورد حافظه پنهان بحث می کنیم ،و زمانی که در ادامه این کتاب به حافظه مجازی می پردازیم .در این مرحله
توضیح مختصری ارائه شده است.
فرض کنید که پردازنده به دو سطح حافظه دسترسی دارد .سطح 1شامل 1000بایت است و زمان دسترسی 0.1میکرو ثانیه
دارد .سطح 2شامل 100000بایت است و زمان دسترسی 1میکرو ثانیه دارد .فرض کنید اگر بایتی که باید به آن دسترسی
داشت در سطح 1باشد ،پردازشگر مستقیماً به آن دسترسی دارد .اگر در سطح 2باشد ،ابتدا بایت به سطح 1منتقل می شود و
سپس پردازشگر به آن دسترسی پیدا می کند .برای سادگی ،ما زمان مورد نیاز برای پردازشگر را نادیده می گیریم تا تعیین کند
که آیا بایت در سطح 1است یا سطح .2شکل 1.15شکل کلی منحنی را نشان می دهد که این وضعیت را مدل می کند .شکل
میانگین زمان دسترسی به یک حافظه دو سطحی را به عنوان تابعی از نسبت Hنشان می دهد ،که در آن Hبه عنوان کسری از
تمام دسترسی های حافظه ای که در حافظه سریعتر یافت می شود به عنوان مثال ،حافظه پنهان تعریف می شود.
زمان دسترسی به سطح ،1و T2زمان دسترسی به سطح 2.4است همانطور که مشاهده می شود ،برای درصدهای باالی
دسترسی سطح ،1میانگین زمان دسترسی کل به سطح 1بسیار نزدیکتر از سطح 4 2است.
در مثال ما ،فرض کنید 95درصد از دسترسی های حافظه در حافظه پنهان یافت می شود
نتیجه نزدیک به زمان دسترسی حافظه سریعتر است .بنابراین استراتژی استفاده از دو سطح حافظه در اصل کار می کند ،اما تنها
در صورتی که شرایط الف تا د در لیست قبلی اعمال شود .با به کارگیری انواع فن آوری ها ،طیفی از سیستم های حافظه وجود
دارد که شرایط الف تا ج را برآورده می کند .خوشبختانه ،شرط د نیز به طور کلی معتبر است.
مبنای اعتبار شرط dیک اصل است که به عنوان محلی بودن مرجع DENN68شناخته می شود .در طول اجرای یک برنامه،
مراجع حافظه توسط پردازنده ،هم برای دستورالعمل ها و هم برای داده ها ،تمایل به خوشه بندی دارند .برنامه ها معموالً شامل
تعدادی حلقه تکراری و زیر روال هستند .هنگامی که یک حلقه یا زیربرنامه وارد می شود ،ارجاعات مکرری به مجموعه کوچکی
از دستورالعمل ها وجود دارد .به طور مشابه ،عملیات روی جداول و آرایه ها شامل دسترسی به مجموعه ای خوشه ای از بایت
های داده است .در یک دوره زمانی طوالنی ،خوشههای مورد استفاده تغییر میکنند ،اما در یک دوره زمانی کوتاه ،پردازنده عمدتاً
با خوشههای ثابتی از مراجع حافظه کار میکند.
4اگر کلمه قابل دسترسی در حافظه سریعتر یافت شود ،به عنوان یک ضربه تعریف می شود .اگر کلمه مورد دسترسی در حافظه سریعتر پیدا نشود ،اشتباه رخ میدهد.
34
سیستم عامل های داخلی و اصول طراحی35.........................................................................................................................
بر این اساس ،سازماندهی داده ها در سراسر سلسله مراتب ممکن است به گونه ای که درصد دسترسی به هر سطح متوالی پایین
تر به طور قابل مالحظه ای کمتر از سطح باال باشد .مثال دو سطحی که قبال ارائه شده را در نظر بگیرید .اجازه دهید حافظه
سطح 2شامل تمام دستورالعمل ها و داده های برنامه باشد .خوشه های فعلی را می توان به طور موقت در سطح 1قرار داد .هر
از چند گاهی ،یکی از خوشه های سطح 1باید به سطح 2بازگردانده شود تا فضایی برای ورود یک خوشه جدید به سطح 1
ایجاد شود.
با این حال ،بیشتر ارجاعات به دستورالعمل ها و داده های موجود در سطح 1خواهد بود.
این اصل را می توان در بیش از دو سطح حافظه اعمال کرد .سریعترین ،کوچکترین و گرانترین نوع حافظه شامل رجیسترهای
داخلی پردازنده است .به طور معمول ،یک پردازنده حاوی چند ده رجیستر است ،اگرچه برخی از پردازنده ها دارای صدها ثبات
هستند .با پرش از دو سطح ،حافظه اصلی سیستم حافظه داخلی اصلی کامپیوتر است .هر مکان در حافظه اصلی یک آدرس
منحصر به فرد دارد و بیشتر دستورالعمل های ماشین به یک یا چند آدرس حافظه اصلی اشاره دارد .حافظه اصلی معموالً با
حافظه نهان با سرعت باالتر و کوچکتر گسترش می یابد .کش معموالً برای برنامه نویس یا در واقع برای پردازنده قابل مشاهده
نیست .این دستگاهی برای مرحله بندی حرکت داده ها بین حافظه اصلی و رجیسترهای پردازنده برای بهبود عملکرد است.
35
سیستم عامل های داخلی و اصول طراحی36.........................................................................................................................
سه شکل حافظه که توضیح داده شد ،معموالً فرار هستند و از فناوری نیمه هادی استفاده می کنند .استفاده از سه سطح از این
واقعیت سوء استفاده می کند که حافظه نیمه هادی انواع مختلفی دارد که از نظر سرعت و هزینه متفاوت هستند.
داده ها به طور دائمی بر روی دستگاه های ذخیره سازی انبوه خارجی ذخیره می شوند ،که رایج ترین آنها عبارتند از هارد
دیسک و رسانه های قابل جابجایی ،مانند دیسک قابل جابجایی ،نوار ،و ذخیره سازی نوری .حافظه خارجی و غیر فرار نیز به
عنوان حافظه ثانویه یا حافظه کمکی شناخته می شود .اینها برای ذخیره فایلهای برنامه و داده استفاده میشوند و معموالً برای
برنامهنویس فقط از نظر فایلها و رکوردها قابل مشاهده هستند ،برخالف بایتها یا کلمات جداگانه .از هارد دیسک نیز برای ارائه
پسوندی به حافظه اصلی به نام حافظه مجازی استفاده می شود که در فصل 8مورد بحث قرار گرفته است.
سطوح اضافی را می توان به طور موثر به سلسله مراتب در نرم افزار اضافه کرد .به عنوان مثال ،بخشی از حافظه اصلی می تواند
به عنوان یک بافر برای نگهداری موقت داده هایی که قرار است روی دیسک خوانده شوند ،استفاده شود .چنین تکنیکی که گاهی
از آن به عنوان کش دیسک یاد می شود در فصل 11به تفصیل مورد بررسی قرار گرفته است ،عملکرد را از دو طریق بهبود می
بخشد:
-نوشته های دیسک خوشه ای هستند .به جای بسیاری از انتقال های کوچک داده ،ما چند انتقال بزرگ داده داریم .این کار
عملکرد دیسک را بهبود می بخشد و دخالت پردازنده را به حداقل می رساند.
-برخی از دادههایی که برای نوشتن در نظر گرفته شدهاند ممکن است توسط یک برنامه قبل از تخلیه بعدی به دیسک ارجاع
داده شوند .در این حالت ،داده ها به سرعت از حافظه پنهان نرم افزار به جای آهسته از دیسک بازیابی می شوند.
36
سیستم عامل های داخلی و اصول طراحی37.........................................................................................................................
1.6حافظه کش
اگرچه حافظه کش برای سیستم عامل نامرئی است ،اما با سایر سخت افزارهای مدیریت حافظه تعامل دارد .عالوه بر این ،بسیاری
از اصول مورد استفاده در طرحهای حافظه مجازی مورد بحث در فصل 8در حافظه نهان نیز اعمال میشوند.
انگیزه(محرک)
در تمام چرخههای دستورالعمل ،پردازنده حداقل یک بار برای واکشی دستورالعمل و اغلب یک یا چند بار دیگر برای واکشی
عملوندها و/یا ذخیره نتایج به حافظه دسترسی دارد .سرعتی که پردازنده میتواند دستورالعملها را با آن اجرا کند به وضوح
توسط زمان چرخه حافظه زمانی که برای خواندن یک کلمه از یا نوشتن یک کلمه در حافظه طول میکشد محدود میشود .این
محدودیت به دلیل عدم تطابق مداوم بین سرعت پردازنده و حافظه اصلی یک مشکل مهم بوده است :در طول سال ها ،سرعت
پردازنده به طور مداوم با سرعت بیشتری نسبت به سرعت دسترسی به حافظه افزایش یافته است .ما با یک مبادله بین سرعت،
هزینه و اندازه روبرو هستیم .در حالت ایدهآل ،حافظه اصلی باید با فناوری مشابه با رجیسترهای پردازنده ساخته شود و زمانهای
چرخه حافظه را با زمانهای چرخه پردازنده مقایسه کند .این همیشه یک استراتژی بسیار گران بوده است .راه حل این است که
از اصل محلی بودن با ارائه یک حافظه کوچک و سریع بین پردازنده و حافظه اصلی ،یعنی حافظه نهان ،استفاده کنیم.
اصول کش
حافظه کش برای ارائه زمان دسترسی به حافظه نزدیک به سریعترین حافظه های موجود و در عین حال پشتیبانی از یک حافظه
بزرگ است که قیمت انواع حافظه های نیمه هادی ارزان قیمت را دارد .این مفهوم در شکل a1.16نشان داده شده است .یک
حافظه اصلی نسبتا بزرگ و کند به همراه یک حافظه کش کوچکتر و سریعتر وجود دارد .کش حاوی یک کپی از بخشی از
حافظه اصلی است .هنگامی که پردازنده سعی می کند یک بایت یا کلمه حافظه را بخواند ،بررسی می شود تا مشخص شود آیا
بایت یا کلمه در حافظه پنهان است یا خیر .اگر چنین است ،بایت یا کلمه به پردازنده تحویل داده می شود.
در غیر این صورت ،یک بلوک از حافظه اصلی ،متشکل از تعداد ثابتی از بایت ها ،در حافظه پنهان خوانده می شود و سپس بایت
یا کلمه به پردازنده تحویل داده می شود .به دلیل پدیده محلی بودن مرجع ،زمانی که یک بلوک از داده ها به حافظه پنهان برای
ارضای یک مرجع حافظه واحد واکشی می شود ،این احتمال وجود دارد که بسیاری از مراجع حافظه در آینده نزدیک به بایت
های دیگر در بلوک باشد.
شکل b1.16استفاده از چندین سطح حافظه پنهان را نشان می دهد .کش L2کندتر و معموالً بزرگتر از کش L1است و کش
L3کندتر و معموالً بزرگتر از کش L2است.
37
سیستم عامل های داخلی و اصول طراحی38.........................................................................................................................
انتقال بلوک
انتقال کلمه
حافظه اصلی
سریع آرام
حافظه
اصلی
شکل 1.17ساختار یک حافظه کش/سیستم حافظه اصلی را نشان می دهد .حافظه اصلی شامل حداکثر n2کلمه آدرس پذیر
است که هر کلمه دارای یک آدرس nبیت منحصر به فرد است .برای اهداف نقشه برداری ،این حافظه شامل تعدادی بلوک با
طول ثابت از کلمات Kهر کدام در نظر گرفته می شود .یعنی بلوک های M = 2n>Kوجود دارد .حافظه پنهان از اسالت های
Cکه به آن خطوط نیز گفته می شود از Kکلمه تشکیل شده است ،و تعداد اسالت ها به طور قابل توجهی کمتر از تعداد بلوک
5
برخی از زیر مجموعه ها است. های حافظه اصلی
نماد >>به معنی بسیار کمتر از .به طور مشابه ،نماد << به معنای بسیار بیشتر از .dبه همه اینها اشاره دارد که با آن دنباله بیت ها شروع می شوند. 5
38
سیستم عامل های داخلی و اصول طراحی39.........................................................................................................................
از بلوک های حافظه اصلی در شکاف های حافظه پنهان قرار دارد .اگر یک کلمه در یک بلوک از حافظه ای که در کش نیست
خوانده می شود ،آن بلوک به یکی از اسالت های کش منتقل می شود .از آنجایی که تعداد بلوکها از اسالتها بیشتر است ،یک
اسالت منفرد نمیتواند به طور منحصربهفرد و دائمی به یک بلوک خاص اختصاص داده شود .بنابراین ،هر شکاف شامل یک
برچسب است که مشخص می کند کدام بلوک خاص در حال حاضر ذخیره می شود .تگ معموالً تعدادی بیت مرتبه باالتر از
آدرس است و به همه آدرسهایی اشاره میکند که با آن دنباله بیتها شروع میشوند.
به عنوان یک مثال ساده ،فرض کنید یک آدرس 6بیتی و یک تگ 2بیتی داریم .برچسب 01به بلوک مکان ها با آدرس های
زیر اشاره دارد.011000 .011000 .010111 .010110 .010101 .010100 .010011 .010010 .010001 .010000 :
.011111 .011110 .011101 .011100 011،010
شکل 1.18عملیات خواندن را نشان می دهد .پردازنده آدرس RAیک کلمه را برای خواندن ایجاد می کند .اگر کلمه در
حافظه پنهان باشد ،به پردازنده تحویل داده می شود .در غیر این صورت ،بلوک حاوی آن کلمه در حافظه پنهان بارگذاری شده و
کلمه به پردازنده تحویل داده می شود.
39
سیستم عامل های داخلی و اصول طراحی40.........................................................................................................................
شروع
خواندن آدرس
آدرس RAرا از CPUدریافت
کنید
انجام شده
طراحی کش
بحث دقیق در مورد طراحی کش فراتر از محدوده این کتاب است .عناصر کلیدی به اختصار در اینجا خالصه شده است .خواهیم
دید که مسائل طراحی مشابه باید در برخورد با حافظه مجازی و طراحی کش دیسک مورد توجه قرار گیرد .آنها در دسته های
زیر قرار می گیرند:
-اندازه بلوک
40
سیستم عامل های داخلی و اصول طراحی41.........................................................................................................................
-الگوریتم جایگزینی
قبالً به موضوع اندازه کش پرداخته ایم .به نظر می رسد که حافظه پنهان به طور منطقی کوچک می تواند تأثیر قابل توجهی بر
عملکرد داشته باشد .یکی دیگر از مشکالت اندازه ،اندازه بلوک است :واحد داده رد و بدل شده بین حافظه پنهان و حافظه اصلی.
شروع با اندازه بلوک نسبتا کوچک و سپس افزایش اندازه را در نظر بگیرید .با افزایش اندازه بلوک ،با هر انتقال بلوک ،داده های
مفید بیشتری به حافظه پنهان وارد می شود .نتیجه این خواهد بود که نسبت ضربه به دلیل اصل محلی بودن افزایش مییابد:
احتمال باالیی که دادههای موجود در مجاورت یک کلمه ارجاعشده احتماالً در آینده نزدیک ارجاع میشوند .با این حال ،نسبت
ضربه شروع به کاهش میکند ،زیرا بلوک حتی بزرگتر میشود و احتمال استفاده از دادههای تازه واکشی شده کمتر از احتمال
استفاده مجدد از دادههایی میشود که باید از حافظه پنهان خارج شوند تا فضایی برای بلوک جدید ایجاد شود. .
هنگامی که یک بلوک جدید از داده ها در حافظه پنهان خوانده می شود ،تابع نگاشت تعیین می کند که بلوک کدام مکان کش
را اشغال کند .دو محدودیت بر طراحی تابع نگاشت تأثیر می گذارد .اول ،زمانی که یک بلوک خوانده می شود ،ممکن است
دیگری جایگزین شود .ما می خواهیم این کار را به گونه ای انجام دهیم که احتمال جایگزینی بلوکی که در آینده نزدیک مورد
نیاز است را به حداقل برسانیم .هرچه تابع نقشه برداری انعطاف پذیرتر باشد ،دامنه بیشتری برای طراحی یک الگوریتم جایگزین
برای به حداکثر رساندن نسبت ضربه داریم .دوم ،هرچه تابع نقشه برداری انعطاف پذیرتر باشد ،مدار مورد نیاز برای جستجوی
حافظه پنهان برای تعیین اینکه آیا یک بلوک در حافظه نهان وجود دارد یا خیر ،پیچیده تر است .الگوریتم جایگزینی ،در
محدوده محدودیت های تابع نگاشت ،انتخاب می کند که وقتی یک بلوک جدید در حافظه نهان بارگذاری می شود و کش از
قبل دارای تمام شکاف ها با بلوک های دیگر است ،کدام بلوک جایگزین شود .ما میخواهیم بلوکی را که کمترین احتمال نیاز به
آن را دارد در آینده نزدیک جایگزین کنیم .اگرچه شناسایی چنین بلوکی غیرممکن است ،اما یک استراتژی مؤثر ،جایگزین
کردن بلوکی است که طوالنیترین زمان را در حافظه پنهان بدون اشاره به آن ،جایگزین کنید .این خط مشی به عنوان الگوریتم
کمترین استفاده اخیر LRUنامیده می شود .مکانیزم های سخت افزاری مورد نیاز است .بالکی که اخیراً کمتر استفاده شده را
شناسایی کنید.
اگر محتویات یک بلوک در حافظه پنهان تغییر کند ،الزم است قبل از جایگزینی ،آن را به حافظه اصلی بازگردانید .خط مشی
نوشتن تعیین می کند که عملیات نوشتن حافظه چه زمانی انجام شود .در یک افراط ،نوشتن می تواند هر بار که بلوک به روز
می شود رخ دهد .در نهایت ،نوشتن تنها زمانی رخ می دهد که بلوک جایگزین شود .خط مشی دوم عملیات نوشتن حافظه را به
41
سیستم عامل های داخلی و اصول طراحی42.........................................................................................................................
حداقل می رساند اما حافظه اصلی را در حالت منسوخ می گذارد .این می تواند با عملکرد چند پردازنده و دسترسی مستقیم به
حافظه توسط ماژول های سخت افزاری I/Oتداخل ایجاد کند.
در نهایت ،در حال حاضر داشتن چندین سطح حافظه پنهان ،با برچسب L1نزدیک ترین کش به پردازنده ،L2 ،و در بسیاری از
موارد سطح سوم ،L3امری عادی است .بحث در مورد مزایای عملکرد سطوح حافظه پنهان چندگانه فراتر از محدوده ما است.
برای بحث به STAL13مراجعه کنید.
سه تکنیک برای عملیات I/Oامکان پذیر است I/O :برنامه ریزی شده I/O ،مبتنی بر وقفه و دسترسی مستقیم به حافظه
.DMAقبل از بحث در مورد ،DMAبه طور خالصه دو تکنیک دیگر را تعریف می کنیم .برای جزئیات بیشتر به پیوست C
مراجعه کنید.
هنگامی که پردازنده در حال اجرای یک برنامه است و با یک دستورالعمل مربوط به I/Oمواجه می شود ،آن دستور را با صدور
دستوری به ماژول I/Oمناسب اجرا می کند .در مورد ورودی/خروجی برنامه ریزی شده ،ماژول I/Oعمل درخواستی را انجام
می دهد و سپس بیت های مناسب را در رجیستر وضعیت I/Oتنظیم می کند اما هیچ اقدام دیگری برای هشدار دادن به
پردازنده انجام نمی دهد .به ویژه ،پردازنده را قطع نمی کند.
بنابراین ،پس از فراخوانی دستور ،I/Oپردازنده باید نقش فعالی در تعیین زمان تکمیل دستور I/Oداشته باشد .برای این
منظور ،پردازنده به صورت دوره ای وضعیت ماژول I/Oرا بررسی می کند تا زمانی که متوجه شود عملیات کامل شده است.
با ورودی/خروجی برنامه ریزی شده ،پردازنده باید مدت زیادی منتظر بماند تا ماژول ورودی/خروجی مورد نظر برای دریافت یا
انتقال داده های بیشتر آماده شود .پردازنده ،در حالی که منتظر است ،باید بارها و بارها وضعیت ماژول I/Oرا بررسی کند .در
نتیجه ،سطح عملکرد کل سیستم به شدت کاهش می یابد.
یک جایگزین ،که به عنوان ورودی/خروجی مبتنی بر وقفه شناخته میشود ،این است که پردازنده دستور I/Oرا به یک ماژول
صادر کند و سپس به انجام کارهای مفید دیگری ادامه دهد .ماژول ورودی/خروجی پس از آماده شدن برای تبادل داده با
پردازنده ،پردازشگر را برای درخواست سرویس قطع می کند .سپس پردازشگر مانند قبل انتقال داده را اجرا می کند و سپس
پردازش قبلی خود را از سر می گیرد.
ورودی/خروجی مبتنی بر وقفه ،اگرچه کارآمدتر از ورودی/خروجی برنامهریزیشده ساده است ،اما همچنان به مداخله فعال
پردازنده برای انتقال دادهها بین حافظه و یک ماژول ورودی/خروجی نیاز دارد ،و هر انتقال داده باید مسیری را از طریق پردازنده
طی کند .بنابراین ،هر دوی این اشکال I/Oاز دو اشکال ذاتی رنج می برند:
42
سیستم عامل های داخلی و اصول طراحی43.........................................................................................................................
.1سرعت انتقال I/Oبا سرعتی که پردازنده می تواند دستگاه را آزمایش و سرویس کند محدود می شود.
.2پردازنده در مدیریت انتقال I/Oگره خورده است .برای هر انتقال I/Oباید تعدادی دستورالعمل اجرا شود.
هنگامی که حجم زیادی از داده ها جابه جا می شوند ،یک تکنیک کارآمدتر مورد نیاز است :دسترسی مستقیم به حافظه
.DMAتابع DMAمی تواند توسط یک ماژول جداگانه در گذرگاه سیستم انجام شود یا می توان آن را در یک ماژول I/O
گنجاند .در هر صورت ،تکنیک به شرح زیر عمل می کند .هنگامی که پردازنده بخواهد بلوکی از داده ها را بخواند یا بنویسد ،با
ارسال اطالعات زیر به ماژول ،DMAفرمانی را به ماژول DMAصادر می کند:
سپس پردازنده به کارهای دیگر ادامه می دهد .این عملیات I/Oرا به ماژول DMAواگذار کرده است و آن ماژول از آن
مراقبت خواهد کرد .ماژول DMAکل بلوک داده را ،یک کلمه در یک زمان ،مستقیماً یا از حافظه بدون عبور از پردازنده منتقل
می کند .هنگامی که انتقال کامل شد ،ماژول DMAیک سیگنال وقفه به پردازنده ارسال می کند .بنابراین ،پردازنده فقط در
ابتدا و انتهای انتقال درگیر است.
ماژول DMAبرای انتقال داده ها به حافظه و از حافظه نیاز به کنترل گذرگاه دارد .به دلیل این رقابت برای استفاده از گذرگاه،
ممکن است مواقعی پیش بیاید که پردازنده به گذرگاه نیاز داشته باشد و باید منتظر ماژول DMAباشد .توجه داشته باشید که
این یک وقفه نیست .پردازنده یک زمینه را ذخیره نمی کند و کار دیگری انجام نمی دهد .در عوض ،پردازنده برای یک چرخه
گذرگاه زمان انتقال یک کلمه در گذرگاه مکث می کند .اثر کلی این است که باعث می شود پردازنده در هنگام انتقال DMA
زمانی که دسترسی پردازنده به گذرگاه مورد نیاز است کندتر اجرا شود .با این وجود ،برای انتقال ورودی/خروجی چند کلمه ای،
DMAبسیار کارآمدتر از ورودی/خروجی مبتنی بر وقفه یا برنامه ریزی شده است.
به طور سنتی ،کامپیوتر به عنوان یک ماشین ترتیبی در نظر گرفته می شود .بیشتر زبان های برنامه نویسی کامپیوتری از برنامه
نویس می خواهند که الگوریتم ها را به عنوان دنباله ای از دستورالعمل ها مشخص کند .یک پردازنده برنامه ها را با اجرای
43
سیستم عامل های داخلی و اصول طراحی44.........................................................................................................................
دستورات ماشین به صورت متوالی و یکی در یک زمان اجرا می کند .هر دستورالعمل در دنباله ای از عملیات اجرا می شود
واکشی دستورالعمل ،واکشی عملوندها ،انجام عملیات ،ذخیره نتایج.
این دیدگاه از کامپیوتر هرگز کامال درست نبوده است .در سطح میکرو عملیات ،سیگنال های کنترلی متعددی به طور همزمان
تولید می شوند .خط لوله دستورالعمل ،حداقل در حد همپوشانی عملیات واکشی و اجرای ،برای مدت طوالنی وجود داشته است.
هر دوی اینها نمونه هایی از انجام توابع به صورت موازی هستند.
همانطور که فن آوری کامپیوتر تکامل یافته و هزینه سخت افزار کامپیوتر کاهش یافته است ،طراحان کامپیوتر به دنبال فرصت
های بیشتر و بیشتری برای موازی سازی ،معموال برای بهبود عملکرد و ،در برخی موارد ،برای بهبود قابلیت اطمینان بوده اند .در
این کتاب ،ما سه رویکرد رایج برای ارائه موازی سازی با تکرار پردازنده ها را بررسی می کنیم :چند پردازنده متقارن ،SMPs
رایانه های چند هسته ای ،و خوشه ها SMP .ها و رایانه های چند هسته ای در این بخش مورد بحث قرار می گیرند .خوشه ها
در فصل 16مورد بررسی قرار می گیرند.
تعریف SMPرا می توان به عنوان یک سیستم کامپیوتری مستقل با ویژگی های زیر تعریف کرد:
.2این پردازندهها حافظه اصلی و امکانات ورودی/خروجی یکسانی دارند و توسط یک گذرگاه یا دیگر طرحهای اتصال داخلی به
یکدیگر متصل میشوند ،به طوری که زمان دسترسی به حافظه برای هر پردازنده تقریباً یکسان است.
.3همه پردازندهها دسترسی به دستگاههای ورودی/خروجی را از طریق کانالهای مشابه یا از طریق کانالهای متفاوتی که
مسیرهایی را برای یک دستگاه فراهم میکنند ،به اشتراک میگذارند.
.4همه پردازنده ها می توانند عملکردهای یکسانی را انجام دهند از این رو اصطالح متقارن نامیده می شود.
.5سیستم توسط یک سیستم عامل یکپارچه کنترل می شود که تعامل بین پردازنده ها و برنامه های آنها را در سطوح کار،
وظیفه ،فایل و عناصر داده فراهم می کند.
نکات 1تا 4باید خود توضیحی باشد .نقطه 5یکی از تضادها را با یک سیستم چند پردازشی با جفت آزاد مانند یک خوشه نشان
می دهد .در مورد دوم ،واحد فیزیکی تعامل معموالً یک پیام یا فایل کامل است .در یک ،SMPعناصر داده فردی می توانند
سطح تعامل را تشکیل دهند و می تواند درجه باالیی از همکاری بین فرآیندها وجود داشته باشد.
یک سازمان SMPدارای چندین مزیت بالقوه نسبت به یک سازمان تک پردازشگر است ،از جمله موارد زیر:
44
سیستم عامل های داخلی و اصول طراحی45.........................................................................................................................
-عملکرد :اگر کاری که باید توسط یک کامپیوتر انجام شود را بتوان به گونهای سازماندهی کرد که برخی از بخشهای کار را
بتوان به صورت موازی انجام داد ،آنگاه سیستمی با چندین پردازنده عملکرد بیشتری نسبت به سیستمی با یک پردازنده از
همان نوع دارد.
-در دسترس بودن :در یک چند پردازنده متقارن ،به دلیل اینکه همه پردازنده ها می توانند عملکردهای یکسانی را انجام دهند،
خرابی یک پردازنده باعث توقف دستگاه نمی شود .در عوض ،سیستم می تواند با کاهش عملکرد به کار خود ادامه دهد.
رشد افزایشی :یک کاربر می تواند عملکرد یک سیستم را با افزودن یک پردازنده اضافی افزایش دهد.
: Scaling -فروشندگان می توانند طیف وسیعی از محصوالت را با ویژگی های قیمت و عملکرد متفاوت بر اساس تعداد
پردازنده های پیکربندی شده در سیستم ارائه دهند.
توجه به این نکته مهم است که اینها مزایای بالقوه و نه تضمینی هستند .سیستم عامل باید ابزارها و عملکردهایی را برای بهره
برداری از موازی در یک سیستم SMPفراهم کند.
ویژگی جذاب SMPاین است که وجود چندین پردازنده برای کاربر شفاف است .سیستم عامل از برنامه ریزی وظایف بر روی
تک تک پردازنده ها و همگام سازی بین پردازنده ها مراقبت می کند.
سازمان شکل 1.19سازماندهی کلی SMPرا نشان می دهد .پردازنده های متعددی وجود دارد که هر کدام شامل واحد کنترل،
واحد حسابی -منطقی و رجیسترهای مخصوص به خود است .هر پردازنده از طریق نوعی مکانیسم اتصال به یک حافظه اصلی
مشترک و دستگاه های ورودی/خروجی دسترسی دارد .یک اتوبوس مشترک یک تسهیالت رایج است .پردازنده ها می توانند از
طریق حافظه پیام ها و اطالعات وضعیت باقی مانده در فضاهای آدرس مشترک با یکدیگر ارتباط برقرار کنند .همچنین ممکن
است برای پردازنده ها امکان مبادله مستقیم سیگنال ها وجود داشته باشد.
حافظه
اصلی
حافظه اغلب به گونه ای سازماندهی می شود که چندین دسترسی همزمان به بلوک های جداگانه حافظه امکان پذیر باشد.
در رایانههای مدرن ،پردازندهها معموالً حداقل یک سطح حافظه پنهان دارند که برای پردازنده خصوصی است .این استفاده از
کش برخی از مالحظات طراحی جدید را معرفی می کند .از آنجایی که هر کش محلی حاوی تصویری از بخشی از حافظه اصلی
است ،اگر کلمه ای در یک کش تغییر داده شود ،می تواند یک کلمه را در حافظه پنهان دیگر باطل کند .برای جلوگیری از این
امر ،باید به سایر پردازندهها هشدار داده شود که بروزرسانی صورت گرفته است .این مشکل به عنوان مشکل انسجام حافظه پنهان
شناخته می شود و معموالً در سخت افزار به جای سیستم عامل حل می شود.
یک کامپیوتر چند هسته ای که به عنوان چند پردازنده تراشه نیز شناخته می شود ،دو یا چند پردازنده که هسته نامیده می
شود را روی یک تکه سیلیکون به نام دای ترکیب می کند .به طور معمول ،هر هسته از تمام اجزای یک پردازنده مستقل مانند
رجیسترها ،ALU ،سخت افزار خط لوله و واحد کنترل ،به عالوه دستورالعمل L1و حافظه پنهان داده تشکیل شده است .عالوه
بر هستههای متعدد ،تراشههای چند هستهای معاصر شامل حافظه نهان L2و در برخی موارد ،حافظه نهان L3نیز میشوند.
انگیزه توسعه رایانه های چند هسته ای را می توان به شرح زیر خالصه کرد .برای دههها ،سیستمهای ریزپردازنده افزایش کارایی
ثابت و معموالً تصاعدی را تجربه کردهاند .این تا حدودی به دلیل روندهای سخت افزاری است ،مانند افزایش فرکانس ساعت و
توانایی نزدیکتر کردن حافظه کش به پردازنده به دلیل کوچک شدن فزاینده اجزای میکروکامپیوتر .عملکرد همچنین با افزایش
پیچیدگی طراحی پردازنده برای بهره برداری از موازی سازی در اجرای دستورات و دسترسی به حافظه بهبود یافته است .به طور
خالصه ،طراحان با محدودیت های عملی در توانایی دستیابی به عملکرد بیشتر با استفاده از پردازنده های پیچیده تر مواجه شده
اند .طراحان دریافتهاند که بهترین راه برای بهبود عملکرد برای استفاده از پیشرفتهای سختافزاری ،قرار دادن چندین پردازنده
و مقدار قابل توجهی حافظه پنهان روی یک تراشه است .بحث مفصل درباره منطق این روند فراتر از محدوده ما است ،اما در
ضمیمه Cخالصه شده است.
نمونه ای از یک سیستم چند هسته ای Intel Core i7-990Xاست که شامل شش پردازنده x86است که هر کدام دارای
یک حافظه نهان اختصاصی L2و یک کش L3مشترک است شکل .1.20یکی از مکانیزمهایی که اینتل برای مؤثرتر کردن
حافظههای پنهان خود استفاده میکند ،واکشی اولیه است ،که در آن سختافزار الگوهای دسترسی به حافظه را بررسی میکند و
سعی میکند تا کشها را به صورت فرضی با دادههایی پر کند که احتماالً به زودی درخواست میشوند.
46
سیستم عامل های داخلی و اصول طراحی47.........................................................................................................................
تراشه Core i7-990Xاز دو نوع ارتباط خارجی با سایر تراشه ها پشتیبانی می کند .کنترلر حافظه DDR3کنترلر حافظه را
برای حافظه اصلی DDRنرخ داده دو برابر روی تراشه می آورد .این رابط از سه کانال با عرض 8بایت برای مجموع عرض
گذرگاه 192بیت ،برای سرعت داده جمعی تا 32گیگابایت بر ثانیه پشتیبانی می کند .با کنترلر حافظه روی تراشه ،گذرگاه
سمت جلو حذف می شود QuickPath Interconnect QPI .یک مشخصات اتصال الکتریکی نقطه به نقطه است .ارتباطات
پرسرعت بین تراشه های پردازنده متصل را امکان پذیر می کند .لینک QPIبا سرعت GT/s 6.4انتقال در ثانیه کار می کند.
با 16بیت در هر انتقال ،که به 12.8گیگابایت در ثانیه می رسد .و از آنجایی که پیوندهای QPIشامل جفتهای دوسویه
اختصاصی است ،کل پهنای باند 25.6گیگابایت بر ثانیه است.
DENN05به تاریخچه توسعه و به کارگیری اصل محلّی نگاه می کند و خواندنی جذاب را ایجاد می کند.
.STAL13 Stallings, W. Computer Organization and Architecture, 9th edرودخانه فوقانی زین،
نیوجرسی :پیرسون.2013 ،
47
سیستم عامل های داخلی و اصول طراحی48.........................................................................................................................
شرایط کلیدی
بررسی سواالت
.1.1چهار عنصر اصلی یک کامپیوتر را فهرست کرده و به طور خالصه تعریف کنید.
.1.3به طور کلی ،چهار عمل متمایز که یک دستورالعمل ماشین می تواند مشخص کند چیست؟
.1.4وقفه چیست؟
.1.6چه ویژگی هایی عناصر مختلف سلسله مراتب حافظه را متمایز می کند؟
.1.7حافظه کش چیست؟
48
سیستم عامل های داخلی و اصول طراحی49.........................................................................................................................
.1.10به طور کلی راهکارهای بهره برداری از موقعیت مکانی و مکان زمانی چیست؟
چالش ها و مسائل
در این موارد ،آدرس 12بیتی یک دستگاه خارجی خاص را شناسایی می کند .اجرای برنامه با استفاده از فرمت شکل 1.4را
برای برنامه زیر نشان دهید:
فرض کنید مقدار بعدی بازیابی شده از دستگاه 3 5باشد و مکان 940حاوی مقدار 2باشد.
.1.2اجرای برنامه شکل 1.4در متن با استفاده از شش مرحله توضیح داده شده است .این توضیحات را برای نشان دادن استفاده
از MARو MBRگسترش دهید.
.1.3یک ریزپردازنده فرضی 32بیتی را با دستورالعمل های 32بیتی متشکل از دو زمینه در نظر بگیرید .بایت اول شامل کد
عملیاتی و بقیه یک آدرس عملوند فوری و یا یک عملوند است.
آ .حداکثر ظرفیت حافظه قابل آدرس دهی مستقیم بر حسب بایت چقدر است؟
.1یک گذرگاه آدرس محلی 32بیتی و یک گذرگاه داده محلی 16بیتی ،یا
49
سیستم عامل های داخلی و اصول طراحی50.........................................................................................................................
.1.4یک ریزپردازنده فرضی را در نظر بگیرید که یک آدرس 16بیتی ایجاد می کند به عنوان مثال ،فرض کنید شمارنده برنامه
و رجیسترهای آدرس 16بیت عرض دارند و یک گذرگاه داده 16بیتی دارد.
آ .اگر پردازنده به «حافظه 16بیتی» متصل باشد ،حداکثر فضای آدرس حافظه که پردازنده می تواند مستقیماً به آن دسترسی
داشته باشد چقدر است؟
ب حداکثر فضای آدرس حافظه که پردازنده می تواند مستقیماً به آن دسترسی داشته باشد ،اگر به یک "حافظه 8بیتی" متصل
باشد چقدر است؟
ج چه ویژگی های معماری به این ریزپردازنده اجازه می دهد تا به یک "فضای ورودی/خروجی" مجزا دسترسی پیدا کند؟
د اگر یک دستورالعمل ورودی و خروجی بتواند یک عدد پورت ورودی/خروجی 8بیتی را مشخص کند ،ریزپردازنده چند پورت
ورودی/خروجی 8بیتی را می تواند پشتیبانی کند؟ چند درگاه ورودی/خروجی 16بیتی؟ توضیح.
1.5یک ریزپردازنده 32بیتی با یک گذرگاه داده خارجی 16بیتی را در نظر بگیرید که توسط یک ساعت ورودی 8مگاهرتز
هدایت می شود .فرض کنید که این ریزپردازنده دارای یک سیکل اتوبوس است که حداقل مدت آن برابر با چهار سیکل ساعت
ورودی است .حداکثر سرعت انتقال داده در گذرگاه که این ریزپردازنده می تواند بر حسب بایت در ثانیه حفظ کند چقدر است؟
برای افزایش عملکرد آن ،آیا بهتر است گذرگاه داده خارجی آن 32بیت باشد یا فرکانس ساعت خارجی ارائه شده به ریزپردازنده
را دو برابر کنیم؟ هر فرض دیگری را که دارید بیان کنید و توضیح دهید .راهنمایی :تعداد بایت هایی را که می توان در هر
چرخه اتوبوس منتقل کرد ،تعیین کنید.
1.6یک سیستم کامپیوتری را در نظر بگیرید که حاوی یک ماژول I/Oاست که یک صفحه کلید/چاپگر ساده Teletypeرا
کنترل می کند .رجیسترهای زیر در CPUقرار دارند و مستقیماً به گذرگاه سیستم متصل می شوند:
ورودی ضربه کلید از Teletypeو خروجی به چاپگر توسط ماژول I/Oکنترل می شود Teletype .قادر است یک نماد
الفبایی را به یک کلمه 8بیتی رمزگذاری کند و یک کلمه 8بیتی را به یک نماد الفبایی رمزگشایی کند .هنگامی که یک کلمه
8بیتی از Teletypeوارد ثبات ورودی می شود ،پرچم ورودی تنظیم می شود .وقتی یک کلمه چاپ می شود ،پرچم خروجی
تنظیم می شود.
50
سیستم عامل های داخلی و اصول طراحی51.........................................................................................................................
آ .توضیح دهید که CPUبا استفاده از چهار رجیستر اول فهرست شده در این مشکل چگونه می تواند رسیدن به I/Oبا
.Teletype
ب توضیح دهید که چگونه عملکرد را می توان با استفاده از IENبه طور موثرتر انجام داد.
1.7تقریباً در تمام سیستم هایی که شامل ماژول های DMAهستند ،دسترسی DMAبه حافظه اصلی نسبت به دسترسی
پردازنده به حافظه اصلی اولویت بیشتری دارد .چرا؟
1.8یک ماژول DMAکاراکترها را از یک دستگاه خارجی با سرعت 9600بیت در ثانیه bpsبه حافظه اصلی منتقل می کند.
این پردازنده می تواند دستورالعمل ها را با نرخ 1میلیون دستورالعمل در ثانیه دریافت کند .پردازنده به دلیل فعالیت DMA
چقدر کند می شود؟
1.9یک کامپیوتر شامل یک CPUو یک دستگاه I/O Dاست که از طریق یک گذرگاه مشترک با عرض گذرگاه داده یک
کلمه به حافظه اصلی Mمتصل می شود CPU .می تواند حداکثر 106دستور در ثانیه را اجرا کند .یک دستورالعمل متوسط به
پنج چرخه پردازنده نیاز دارد که سه تای آنها از گذرگاه حافظه استفاده می کنند .عملیات خواندن یا نوشتن حافظه از یک چرخه
پردازشگر استفاده می کند .فرض کنید که CPUبه طور مداوم برنامههای «پسزمینه» را اجرا میکند که به 95درصد نرخ
اجرای دستورات نیاز دارند ،اما به هیچ دستورالعمل ورودی/خروجی نیاز ندارند .فرض کنید که یک چرخه پردازنده برابر با یک
چرخه اتوبوس است .حال فرض کنید که بلوک های بسیار بزرگی از داده ها بین Mو Dمنتقل می شوند.
آ .اگر I/Oبرنامه ریزی شده استفاده شود و هر انتقال یک کلمه ای I/Oبه CPUنیاز دارد
دو دستورالعمل را اجرا کنید ،حداکثر نرخ انتقال داده ورودی/خروجی را بر حسب کلمات در ثانیه ،از طریق Dتخمین بزنید.
1.11معادالت 1.1و 1.2در پیوست A1را به سلسله مراتب حافظه در سطح nتعمیم دهید.
51
سیستم عامل های داخلی و اصول طراحی52.........................................................................................................................
ج اگر زمان دسترسی موثر 10درصد بیشتر از زمان دسترسی حافظه پنهان باشد ،نسبت ضربه Hچقدر است؟
1.13کامپیوتر دارای حافظه پنهان ،حافظه اصلی و دیسکی است که برای حافظه مجازی استفاده می شود .اگر یک کلمه ارجاع
شده در حافظه پنهان باشد ns 20 ،برای دسترسی به آن مورد نیاز است .اگر در حافظه اصلی است اما در حافظه نهان نیست،
ns 60برای بارگذاری آن در حافظه نهان مورد نیاز است این شامل زمان بررسی اولیه حافظه پنهان است و سپس مرجع مجدداً
شروع می شود .اگر کلمه در حافظه اصلی نباشد 12 ،میلیثانیه برای واکشی کلمه از دیسک ،به دنبال آن ns 60برای کپی
کردن آن در حافظه پنهان الزم است و سپس مرجع دوباره شروع میشود .نسبت ضربه حافظه کش 0.9و نسبت ضربه حافظه
اصلی 0.6است .میانگین زمان مورد نیاز برای دسترسی به یک کلمه ارجاع شده در این سیستم بر حسب nsچقدر است؟
1.14فرض کنید قرار است یک پشته توسط پردازنده برای مدیریت فراخوانی ها و برگرداندن رویه ها استفاده شود .آیا می توان
شمارنده برنامه را با استفاده از باالی پشته به عنوان شمارنده برنامه حذف کرد؟
در این فصل به یک کش اشاره شده است که به عنوان یک بافر بین حافظه اصلی و پردازنده عمل می کند و یک حافظه داخلی
دو سطحی ایجاد می کند .این معماری دو سطحی از ویژگی شناخته شده به عنوان محلی برای ارائه عملکرد بهبود یافته نسبت
به یک حافظه یک سطح قابل مقایسه استفاده می کند.
مکانیزم اصلی حافظه پنهان بخشی از معماری کامپیوتر است که در سخت افزار پیاده سازی شده و معموالً برای سیستم عامل
نامرئی است .بر این اساس ،این مکانیسم در این کتاب دنبال نشده است .با این حال ،دو نمونه دیگر از رویکرد حافظه دو سطحی
وجود دارد که از ویژگی محلی بودن نیز بهره برداری می کنند و حداقل تا حدی در سیستم عامل پیاده سازی می شوند :حافظه
مجازی و حافظه پنهان دیسک جدول .1.2این دو موضوع به ترتیب در فصول 8و 11بررسی شده است .در این پیوست ،به
برخی از ویژگیهای عملکرد حافظههای دو سطحی که در هر سه رویکرد مشترک هستند ،نگاه میکنیم.
52
سیستم عامل های داخلی و اصول طراحی53.........................................................................................................................
سیستم نرم افزار ترکیبی از سخت افزار و توسط سخت افزار ویژه سیستم مدیریت حافظه
پیاده سازی شده است نرم افزار سیستمی
دسترسی پردازنده به دسترسی مستقیم دسترسی غیر مستقیم دسترسی غیر
سطح دوم مستقیم
محل(موقعیت)
مبنای مزیت عملکرد یک حافظه دو سطحی ،اصل محلی بودن است که در بخش 1.5به آن اشاره شده است .این اصل بیان می
کند که مراجع حافظه تمایل به خوشه بندی دارند .در طی یک دوره زمانی طوالنی ،خوشه های مورد استفاده تغییر می کنند .اما
در یک دوره زمانی کوتاه ،پردازنده در درجه اول با دسته های ثابتی از مراجع حافظه کار می کند .به طور شهودی ،اصل محلی
بودن معنا پیدا می کند .خط استدالل زیر را در نظر بگیرید:
.1به جز دستورالعمل های شاخه و فراخوانی که تنها بخش کوچکی از دستورالعمل های برنامه را تشکیل می دهند ،اجرای
برنامه به صورت ترتیبی است .از این رو ،در بیشتر موارد ،دستورالعمل بعدی که باید واکشی شود ،بالفاصله از آخرین دستورالعمل
واکشی شده پیروی می کند.
.2به ندرت وجود دارد که دنباله ای طوالنی و بدون وقفه از فراخوانی های رویه و به دنبال آن توالی مربوطه از بازگشت ها وجود
داشته باشد .در عوض ،یک برنامه به یک پنجره نسبتاً باریک از عمق فراخوانی رویه محدود می شود .بنابراین ،در یک دوره زمانی
کوتاه ،ارجاع به دستورالعملها معموالً به چند رویه محلی میشوند.
.3بیشتر ساختارهای تکرار شونده از تعداد نسبتاً کمی دستورالعمل تشکیل شده اند که بارها تکرار شده اند .بنابراین ،برای مدت
زمان تکرار ،محاسبات به بخش کوچکی از یک برنامه محدود می شود.
53
سیستم عامل های داخلی و اصول طراحی54.........................................................................................................................
.4در بسیاری از برنامه ها ،بسیاری از محاسبات شامل پردازش ساختارهای داده ،مانند آرایه ها یا توالی رکوردها می شود .در
بسیاری از موارد ،ارجاعات پی در پی به این ساختارهای داده ،به مواردی از نزدیک واقع شده است.
این خط استدالل در بسیاری از مطالعات تایید شده است .با توجه به نکته ،1مطالعات مختلفی رفتار برنامه های زبان سطح باال
را تحلیل کرده اند .جدول 1.3شامل نتایج کلیدی ،اندازه گیری ظاهر انواع مختلف دستورات در طول اجرا ،از مطالعات زیر است.
اولین مطالعه رفتار زبان برنامه نویسی که توسط Knuth KNUT71انجام شد ،مجموعه ای از برنامه های FORTRANرا
مورد بررسی قرار داد که به عنوان تمرین های دانش آموز استفاده می شد.
Tanenbaum TANE78اندازهگیریهایی را منتشر کرد که از بیش از 300رویه مورد استفاده در برنامههای سیستم عامل
جمعآوری شده و به زبانی نوشته شده است که از برنامهنویسی ساختاریافته SALپشتیبانی میکند .پترسون و Sequin
PATT82مجموعه ای از اندازه گیری های گرفته شده از اجرارها و برنامه ها را برای حروفچینی ،طراحی به کمک کامپیوتر
،CADمرتب سازی و مقایسه فایل ها تجزیه و تحلیل کردند .زبان های برنامه نویسی Cو Pascalمورد مطالعه قرار گرفتند.
هاک HUCK83چهار برنامه را که برای نمایش ترکیبی از محاسبات علمی همه منظوره از جمله تبدیل فوریه سریع و ادغام
سیستمهای معادالت دیفرانسیل در نظر گرفته شده بودند ،تجزیه و تحلیل کرد .توافق خوبی در نتایج این مخلوط از زبانها و
برنامهها وجود دارد که دستورالعملهای انشعاب و فراخوانی تنها کسری از دستورات اجرا شده در طول عمر برنامه را نشان
میدهند .بنابراین ،این مطالعات ادعای 1را از لیست قبلی تأیید می کند.
54
سیستم عامل های داخلی و اصول طراحی55.........................................................................................................................
با توجه به ادعای ،2مطالعات گزارش شده در PATT85تاییدیه ای را ارائه می دهد .این در شکل 1.21نشان داده شده است
که رفتار بازگشت تماس را نشان می دهد .هر تماس با خطی که به سمت پایین و راست حرکت می کند و هر برگشت با خطی
که به سمت باال و راست حرکت می کند نشان داده می شود .در شکل پنجره ای با عمق 5تعریف شده است .فقط دنباله ای از
تماس ها و برگشت ها با حرکت خالص 6در هر جهت باعث حرکت پنجره می شود .همانطور که مشاهده می شود ،برنامه در
حال اجرا می تواند برای مدت طوالنی در یک پنجره ثابت باقی بماند .یک مطالعه توسط همان تحلیلگران برنامه های Cو
Pascalنشان داد که یک پنجره با عمق 8فقط باید در کمتر از ٪1از تماس ها یا برگشت ها جابجا شود .TAMI83
در ادبیات بین موقعیت مکانی و مکان زمانی تمایز گذاشته شده است .مکان مکانی به تمایل اجرا برای درگیر کردن تعدادی
مکان حافظه که خوشهبندی شدهاند اشاره دارد .این نشان دهنده تمایل یک پردازنده برای دسترسی متوالی به دستورالعمل ها
است .مکان مکانی همچنین تمایل یک برنامه برای دسترسی متوالی به مکان های داده مانند هنگام پردازش جدول داده ها را
منعکس می کند .مکان زمانی به تمایل یک پردازنده برای دسترسی به مکان های حافظه ای که اخیراً استفاده شده است اشاره
دارد .به عنوان مثال ،هنگامی که یک حلقه تکرار اجرا می شود ،پردازنده همان مجموعه دستورالعمل ها را به طور مکرر اجرا می
کند .به طور سنتی ،مکان زمانی با نگهداری دستورالعملها و مقادیر دادههای اخیراً استفاده شده در حافظه نهان و با بهرهبرداری
از سلسله مراتب کش مورد سوء استفاده قرار میگیرد .مکان مکانی عموماً با استفاده از بلوکهای کش بزرگتر و با ترکیب
مکانیسمهای واکشی اولیه واکشی مواردی که استفاده از آنها مورد انتظار است در منطق کنترل حافظه پنهان مورد سوء استفاده
قرار میگیرد .اخیراً تحقیقات قابل توجهی در مورد اصالح این تکنیک ها برای دستیابی به عملکرد بیشتر انجام شده است ،اما
استراتژی های اساسی یکسان باقی می مانند.
ویژگی localityرا می توان در تشکیل یک حافظه دو سطحی مورد سوء استفاده قرار داد .حافظه سطح باال M1کوچکتر،
سریعتر و گرانتر در هر بیت از حافظه سطح پایین M2است M1 .به عنوان یک ذخیره موقت برای بخشی از محتویات M2
بزرگتر استفاده می شود .هنگامی که یک مرجع حافظه ساخته می شود ،تالش برای دسترسی به آیتم در M1انجام می شود.
55
سیستم عامل های داخلی و اصول طراحی56.........................................................................................................................
در صورت موفقیت آمیز بودن ،دسترسی سریع ایجاد می شود .اگر نه ،بلوکی از مکانهای حافظه از M2به M1کپی میشود و
دسترسی از طریق M1انجام میشود .به دلیل موقعیت مکانی ،هنگامی که یک بلوک به M1وارد می شود ،باید تعدادی
دسترسی به مکان های آن بلوک وجود داشته باشد که در نتیجه خدمات کلی سریع انجام می شود.
برای بیان میانگین زمان دسترسی به یک آیتم ،نه تنها باید سرعت دو سطح حافظه بلکه احتمال یافتن یک مرجع در M1را نیز
در نظر بگیریم .ما داریم .جایی که
شکل 1.15میانگین زمان دسترسی را به عنوان تابعی از نسبت ضربه نشان می دهد .همانطور که مشاهده می شود ،برای درصد
باالیی از بازدیدها ،میانگین زمان دسترسی کل به M1بسیار نزدیکتر از M2است.
کارایی
اجازه دهید به برخی از پارامترهای مربوط به ارزیابی مکانیزم حافظه دو سطحی نگاه کنیم .ابتدا هزینه را در نظر بگیرید .ما داریم
جایی که
= C1هزینه متوسط هر بیت حافظه سطح باال = M1 C2هزینه متوسط هر بیت حافظه سطح پایین = M2 S1اندازه M1
= S2اندازه M2
56
سیستم عامل های داخلی و اصول طراحی57.........................................................................................................................
ما Cs ≈ C2را می خواهیم .با توجه به اینکه ،C1 >> C2این به S2<<S1نیاز دارد .شکل 1.22رابطه 6را نشان می دهد.
شکل 1.22رابطه میانگین هزینه حافظه با اندازه نسبی حافظه برای یک حافظه دو سطحی
بعد ،زمان دسترسی را در نظر بگیرید .برای اینکه یک حافظه دو سطحی بهبود عملکرد قابل توجهی را ارائه دهد ،باید Tsتقریباً
برابر با T1 Ts ≈ T1داشته باشیم .با توجه به اینکه T1بسیار کمتر از T2 Ts >> T1است ،نسبت ضربه نزدیک به 1مورد
نیاز است .بنابراین ما Buddyداریم که M1کوچک باشد تا هزینه را کاهش دهد و بزرگ باشد تا بتواند آن را بهبود بخشد
نسبت ضربه و در نتیجه عملکرد .آیا اندازه M1وجود دارد که هر دو الزامات را تا حد معقولی برآورده کند؟ ما می توانیم به این
سوال با یک سری سواالت فرعی پاسخ دهیم:
-چه مقدار نسبت ضربه برای برآوردن نیاز عملکرد مورد نیاز است؟
برای رسیدن به این موضوع ،کمیت T1>Tsرا در نظر بگیرید که به آن بازده دسترسی گفته می شود .این معیاری است برای
نزدیکی میانگین زمان دسترسی Tsبه زمان دسترسی .M1 T1از معادله ،1.1
در شکل T1>Ts ،1.23را به عنوان تابعی از نسبت ،Hبا کمیت T2>T1به عنوان پارامتر ترسیم می کنیم .به نظر می رسد
یک نسبت ضربه در محدوده 0.8تا 0.9برای برآوردن نیاز عملکرد مورد نیاز باشد.
6توجه داشته باشید که هر دو محور از مقیاس logاستفاده می کنند .بررسی اولیه مقیاسهای ورود به سیستم در سند تجدیدنظر ریاضی در سایت منابع دانشجویی علوم کامپیوتر
در ComputerScienceStudent.comاست.
57
سیستم عامل های داخلی و اصول طراحی58.........................................................................................................................
شکل 1.23بهره وری دسترسی به عنوان تابعی از نسبت ضربه r = T2 ,T1 2 1
اکنون میتوانیم سؤال مربوط به اندازه نسبی حافظه را دقیقاً بیان کنیم .آیا نسبت ضربه 0.8یا باالتر برای S1 << S2منطقی
است؟ این امر به عوامل مختلفی از جمله ماهیت نرم افزار در حال اجرا و جزئیات طراحی حافظه دو سطحی بستگی دارد .تعیین
کننده اصلی ،البته ،درجه محلی است .شکل 1.24اثر محل را بر نسبت ضربه نشان می دهد .واضح است که اگر M1باشد
همان اندازه M2است ،سپس نسبت ضربه 1.0خواهد بود :همه موارد موجود در M2همیشه در M1نیز ذخیره می شوند.
حال فرض کنید محلی وجود ندارد .یعنی مراجع کامالً تصادفی هستند .در آن صورت نسبت ضربه باید تابعی کامال خطی از
اندازه نسبی حافظه باشد .به عنوان مثال ،اگر اندازه M1نصف اندازه M2باشد ،در هر زمان نیمی از موارد از M2نیز در M1
هستند و نسبت ضربه 0.5خواهد بود .با این حال ،در عمل ،درجاتی از محلی بودن در مراجع وجود دارد .اثرات محلی متوسط و
قوی در شکل نشان داده شده است.
بنابراین ،اگر محلی قوی وجود داشته باشد ،دستیابی به مقادیر باالی نسبت ضربه حتی با اندازه نسبتاً کوچک حافظه سطح
باالیی امکان پذیر است .به عنوان مثال ،مطالعات متعدد نشان دادهاند که اندازههای حافظه نهان نسبتاً کوچک بدون توجه به
اندازه حافظه اصلی ،نسبت ضربه باالتر از 0.75را ایجاد میکنند به عنوان مثال STRE83 ،PRZY88 ،AGAR89 ،و
.SMIT82یک کش در محدوده K1تا K128کلمه به طور کلی کافی است ،در حالی که حافظه اصلی در حال حاضر معموالً
در محدوده گیگابایت است .هنگامی که حافظه مجازی و حافظه پنهان دیسک را در نظر می گیریم ،به مطالعات دیگری اشاره
می کنیم که همین پدیده را تأیید می کنند ،یعنی اینکه یک M1نسبتاً کوچک به دلیل موقعیت مکانی ،نسبت ضربه باالیی را
به دست می دهد.
58
سیستم عامل های داخلی و اصول طراحی59.........................................................................................................................
این ما را به آخرین سؤالی که قبالً فهرست شد میرساند :آیا اندازه نسبی دو حافظه ،نیاز هزینه را برآورده میکند؟ پاسخ به
وضوح بله است .اگر برای دستیابی به عملکرد خوب فقط به یک حافظه نسبتاً کوچک سطح باالیی نیاز داشته باشیم ،آنگاه هزینه
متوسط هر بیت از دو سطح حافظه به حافظه ارزانتر سطح پایین نزدیک میشود .لطفاً توجه داشته باشید که با درگیر شدن
حافظه نهان L2یا حتی کش های L2و ،L3تجزیه و تحلیل بسیار پیچیده تر است .برای بحث به PEIR99و HAND98
مراجعه کنید.
59
سیستم عامل های داخلی و اصول طراحی60.........................................................................................................................
فصل 2
سیستم عامل به عنوان رابط کاربر/کامپیوتر سیستم عامل به عنوان مدیر منابع
سیستم های دسته ای چندبرنامه ریزی شده سیستم های اشتراک زمان
2.6مالحظات طراحی سیستم عامل برای چند پردازنده و چند هسته متقارن سیستم عامل چند پردازنده مالحظات سیستم
عامل چند هسته ای
2.7مرور کلی Microsoft Windowsمعماری پسزمینه موضوعات مدل کالینت/سرور و اشیاء SMPویندوز
2.11اندروید /معماری نرم افزار اندروید فعالیت های معماری سیستم اندروید /مدیریت قدرت
60
سیستم عامل های داخلی و اصول طراحی61.........................................................................................................................
اهداف یادگیری
-تکامل سیستم عامل های برای سیستمهای دستهای ساده اولیه به سیستمهای پیچیده مدرن را مورد بحث قرار دهید.
-توضیح مختصری از هر یک از دستاوردهای اصلی در تحقیقات سیستم عامل ،همانطور که در بخش 2.3تعریف شده است،
ارائه دهید.
-در مورد حوزه های طراحی کلیدی که در توسعه سیستم عامل های مدرن مؤثر بوده اند بحث کنید.
-ماشین های مجازی و مجازی سازی را تعریف و مورد بحث قرار دهید.
-مسائل طراحی سیستم عامل را که با معرفی چند پردازنده و سازمان چند هسته ای مطرح می شود ،درک کنید.
-ویژگی های جدید موجود در سیستم های یونیکس مدرن را توضیح دهید.
ما مطالعه خود را در مورد سیستم عامل ها OSبا یک تاریخچه مختصر آغاز می کنیم .این تاریخچه به خودی خود جالب است
و همچنین در خدمت ارائه یک نمای کلی از اصول سیستم عامل است .بخش اول به بررسی اهداف و عملکردهای سیستم عامل
می پردازد .سپس به چگونگی تکامل سیستم عامل های از سیستمهای دستهای بدوی به سیستمهای چندکاربری پیچیده و
چندوظیفهای میپردازیم .بقیه فصل به تاریخچه و ویژگی های کلی دو سیستم عامل می پردازد که به عنوان نمونه در سراسر
این کتاب عمل می کنند .تمام مطالب این فصل در ادامه کتاب با عمق بیشتری پوشش داده شده است.
61
سیستم عامل های داخلی و اصول طراحی62.........................................................................................................................
سیستم عامل برنامه ای است که اجرای برنامه های کاربردی را کنترل می کند و به عنوان رابط بین برنامه ها و سخت افزار
کامپیوتر عمل می کند .می توان آن را دارای سه هدف در نظر گرفت:
-کارایی :یک سیستم عامل اجازه می دهد تا از منابع سیستم کامپیوتری به شیوه ای کارآمد استفاده شود.
-توانایی تکامل :یک سیستم عامل باید به گونه ای ساخته شود که امکان توسعه موثر ،آزمایش و معرفی عملکردهای جدید
سیستم را بدون تداخل با سرویس فراهم کند.
اجازه دهید به نوبه خود این سه جنبه از یک سیستم عامل را بررسی کنیم.
سخت افزار و نرم افزار مورد استفاده در ارائه برنامه های کاربردی به کاربر را می توان به صورت الیه ای یا سلسله مراتبی مشاهده
کرد ،همانطور که در شکل 2.1نشان داده شده است .کاربر این برنامهها ،یعنی کاربر نهایی ،عموماً به جزئیات سختافزار رایانه
توجهی ندارد .بنابراین ،کاربر نهایی یک سیستم کامپیوتری را بر حسب مجموعه ای از کاربردها مشاهده می کند .یک برنامه
کاربردی را می توان در یک زبان برنامه نویسی بیان کرد و توسط یک برنامه نویس برنامه توسعه داده می شود .اگر کسی بخواهد
یک برنامه کاربردی را به عنوان مجموعه ای از دستورالعمل های ماشینی که به طور کامل مسئولیت کنترل سخت افزار کامپیوتر
را بر عهده دارد ،توسعه دهد ،با یک تعهد بسیار پیچیده روبرو می شود .برای سهولت این کار ،مجموعه ای از برنامه های
سیستمی ارائه شده است .برخی از این برنامه ها به عنوان ابزارهای کمکی یا برنامه های کتابخانه ای شناخته می شوند .اینها
توابع پر استفاده را اجرا می کنند که به ایجاد برنامه ،مدیریت فایل ها و کنترل دستگاه های ورودی/خروجی کمک می کند .یک
برنامه نویس از این امکانات در توسعه یک برنامه کاربردی استفاده می کند و برنامه در حالی که در حال اجرا است ،برنامه های
کاربردی را برای انجام برخی عملکردها فراخوانی می کند .مهمترین مجموعه برنامه های سیستم شامل سیستم عامل است.
سیستم عامل جزئیات سخت افزار را از برنامه نویس پنهان می کند و یک رابط کاربری مناسب برای استفاده از سیستم در اختیار
برنامه نویس قرار می دهد .به عنوان یک واسطه عمل می کند و دسترسی و استفاده از آن امکانات و خدمات را برای برنامه نویس
و برنامه های کاربردی آسان تر می کند.
62
سیستم عامل های داخلی و اصول طراحی63.........................................................................................................................
سیستم عامل
مجموعه دستورالعمل
معماری
سخت افزار اجرایی
ترجمه
اتصال سیستم (باس) حافظه
نرم افزار
دستگاه های
ورودی/خروجی و حافظه اصلی
شبکه
به طور خالصه ،سیستم عامل معموالً خدماتی را در زمینه های زیر ارائه می دهد:
-توسعه برنامه :سیستم عامل امکانات و خدمات مختلفی مانند ویرایشگرها و دیباگرها را برای کمک به برنامه نویس در ایجاد
برنامه ها فراهم می کند .به طور معمول ،این خدمات به شکل برنامه های کاربردی هستند که اگرچه به طور دقیق بخشی از
هسته سیستم عامل نیستند ،اما با سیستم عامل ارائه می شوند و به عنوان ابزارهای توسعه برنامه کاربردی شناخته می شوند.
-اجرای برنامه :برای اجرای یک برنامه باید چند مرحله انجام شود .دستورالعمل ها و داده ها باید در حافظه اصلی بارگذاری
شوند ،دستگاه ها و فایل های ورودی/خروجی باید مقداردهی اولیه شوند و منابع دیگر باید آماده شوند .سیستم عامل این وظایف
زمان بندی را برای کاربر انجام می دهد.
-دسترسی به دستگاههای ورودی/خروجی :هر دستگاه ورودی/خروجی به مجموعه دستورالعملها یا سیگنالهای کنترلی خاص
خود برای کارکرد نیاز دارد .این سیستم عامل یک رابط یکنواخت فراهم می کند که این جزئیات را پنهان می کند تا برنامه
نویسان بتوانند با استفاده از خواندن و نوشتن ساده به چنین دستگاه هایی دسترسی داشته باشند.
63
سیستم عامل های داخلی و اصول طراحی64.........................................................................................................................
-دسترسی کنترل شده به فایل ها :برای دسترسی به فایل ،سیستم عامل باید درک دقیقی از ماهیت دستگاه ورودی/خروجی
درایو دیسک ،درایو نوار بلکه ساختار داده های موجود در فایل های موجود در فایل را نیز منعکس کند .رسانه ذخیره سازی در
مورد سیستمی با چندین کاربر ،سیستم عامل ممکن است مکانیزم های حفاظتی برای کنترل دسترسی به فایل ها فراهم کند.
-دسترسی به سیستم :برای سیستم های مشترک یا عمومی ،سیستم عامل دسترسی به سیستم را به عنوان یک کل و به منابع
سیستم خاص کنترل می کند .تابع دسترسی باید از منابع و داده ها در برابر کاربران غیرمجاز محافظت کند و باید تضادها را
برای اختالف منابع حل کند.
-تشخیص خطا و پاسخ :خطاهای مختلفی ممکن است در حین کار کردن سیستم کامپیوتری رخ دهد .اینها شامل خطاهای
سخت افزاری داخلی و خارجی ،مانند خطای حافظه ،یا خرابی یا نقص دستگاه است .و خطاهای نرم افزاری مختلف ،مانند تقسیم
بر صفر ،تالش برای دسترسی به مکان حافظه ممنوعه ،و ناتوانی سیستم عامل در اعطای درخواست یک برنامه کاربردی .در هر
مورد ،سیستم عامل باید پاسخی ارائه دهد که شرایط خطا را با کمترین تأثیر بر برنامه های در حال اجرا پاک کند .پاسخ ممکن
است از پایان دادن به برنامه ای که باعث خطا شده ،تا تالش مجدد عملیات ،تا گزارش دادن خطا به برنامه باشد.
-حسابداری :یک سیستم عامل خوب آمار استفاده از منابع مختلف را جمع آوری می کند و پارامترهای عملکرد مانند زمان
پاسخ را نظارت می کند .در هر سیستمی ،این اطالعات برای پیشبینی نیاز به پیشرفتهای آینده و تنظیم سیستم برای بهبود
عملکرد مفید است .در یک سیستم چند کاربره ،اطالعات را می توان برای مقاصد صورتحساب استفاده کرد.
-معماری مجموعه دستورات ISA: ISAمجموعه دستورات زبان ماشین را تعریف می کند که یک کامپیوتر می تواند دنبال
کند .این رابط مرز بین سخت افزار و نرم افزار است .توجه داشته باشید که هم برنامه های کاربردی و هم ابزارهای کمکی ممکن
است مستقیماً به ISAدسترسی داشته باشند .برای این برنامه ها ،زیرمجموعه ای از رپرتوار دستورالعمل موجود است user
.ISAسیستم عامل به دستورالعمل های زبان ماشین اضافی که با مدیریت منابع سیستم سر و کار دارد سیستم ISAدسترسی
دارد.
-رابط باینری برنامه ABI: ABIاستانداردی را برای قابلیت حمل باینری در بین برنامه ها تعریف می کند ABI .رابط
فراخوانی سیستم را برای سیستم عامل و منابع سخت افزاری و خدمات موجود در یک سیستم از طریق کاربر ISAتعریف می
کند.
-رابط برنامه نویسی کاربردی API: APIبه برنامه دسترسی به منابع سخت افزاری و خدمات موجود در یک سیستم را از
طریق ISAکاربر که با فراخوانی های کتابخانه زبان سطح باال HLLتکمیل می شود ،می دهد .هر تماس سیستمی معموالً از
64
سیستم عامل های داخلی و اصول طراحی65.........................................................................................................................
طریق کتابخانه ها انجام می شود .استفاده از یک ،APIنرم افزار کاربردی را قادر می سازد تا به راحتی ،از طریق اجرا مجدد ،به
سیستم های دیگری که از همان APIپشتیبانی می کنند ،منتقل شود.
کامپیوتر مجموعه ای از منابع برای جابجایی ،ذخیره سازی و پردازش داده ها و برای کنترل این توابع است .سیستم عامل
مسئول مدیریت این منابع است.
آیا می توان گفت که این سیستم عامل است که حرکت ،ذخیره سازی و پردازش داده ها را کنترل می کند؟ از یک منظر ،پاسخ
مثبت است :با مدیریت منابع رایانه ،سیستم عامل کنترل عملکردهای اساسی رایانه را در اختیار دارد .اما این کنترل به شیوه ای
عجیب اعمال می شود .به طور معمول ،ما مکانیزم کنترل را به عنوان چیزی خارج از آنچه کنترل می شود ،یا حداقل به عنوان
چیزی که بخشی مجزا و مجزا از آن چیزی است که کنترل می شود ،در نظر می گیریم .به عنوان مثال ،یک سیستم گرمایش
مسکونی توسط یک ترموستات کنترل می شود که جدا از دستگاه تولید و توزیع گرما است .این مورد در مورد سیستم عامل
نیست ،که به عنوان یک مکانیسم کنترل از دو جنبه غیر معمول است: .
-سیستم عامل مانند نرم افزارهای کامپیوتری معمولی عمل می کند .یعنی یک برنامه یا مجموعه ای از برنامه هایی است که
توسط پردازنده اجرا می شود.
-سیستمعامل اغلب کنترل را رها میکند و باید به پردازنده وابسته باشد تا بتواند کنترل را دوباره به دست آورد.
مانند سایر برنامه های کامپیوتری ،سیستم عامل دستورالعمل هایی را برای پردازنده ارائه می دهد .تفاوت اصلی در هدف برنامه
است .سیستم عامل پردازنده را در استفاده از سایر منابع سیستم و در زمان بندی اجرای برنامه های دیگر هدایت می کند .اما
برای اینکه پردازنده بتواند هر یک از این کارها را انجام دهد ،باید اجرای برنامه سیستم عامل را متوقف کند و برنامه های دیگر را
اجرا کند .بنابراین ،سیستم عامل برای انجام برخی کارهای «مفید» ،کنترل را برای پردازشگر رها میکند و سپس آنقدر کنترل را
از سر میگیرد تا پردازنده را برای انجام کار بعدی آماده کند .مکانیسم های درگیر در همه اینها باید با ادامه فصل مشخص شود.
شکل 2.2منابع اصلی را نشان می دهد که توسط سیستم عامل مدیریت می شوند .بخشی از سیستم عامل در حافظه اصلی
است .این شامل هسته یا هسته می شود که حاوی بیشترین توابع استفاده شده در سیستم عامل و در یک زمان معین ،سایر
بخش های سیستم عامل در حال استفاده است .باقیمانده حافظه اصلی شامل برنامه ها و داده های کاربر است .همانطور که
خواهیم دید ،سخت افزار مدیریت حافظه در پردازنده و سیستم عامل به طور مشترک تخصیص حافظه اصلی را کنترل می کنند.
سیستم عامل تصمیم می گیرد که یک دستگاه ورودی/خروجی چه زمانی می تواند توسط یک برنامه در اجرا استفاده شود و
دسترسی و استفاده از فایل ها را کنترل می کند .پردازنده به خودی خود یک منبع است و سیستم عامل باید تعیین کند که
65
سیستم عامل های داخلی و اصول طراحی66.........................................................................................................................
چقدر زمان پردازنده برای اجرای یک برنامه کاربر خاص اختصاص داده می شود .در مورد یک سیستم چند پردازنده ،این تصمیم
باید همه پردازنده ها را در بر گیرد.
یک سیستم عامل اصلی به دالیل مختلفی در طول زمان تکامل می یابد:
-ارتقاء سختافزار بهعالوه انواع جدید سختافزار :برای مثال ،نسخههای اولیه یونیکس و سیستمعامل مکینتاش از مکانیزم
صفحهبندی استفاده نمیکردند ،زیرا بر روی پردازندههایی بدون سختافزار 7صفحهبندی اجرا میشدند.
سیستم کامپیوتری
دستگاه ها ورودی/خروجی
حافظه
برنامه ها و
داده ها
پردازنده پردازنده
ذخیره
سازی
سیستم عامل
برنامه ها
نسخه های این سیستم عامل ها برای بهره برداری از قابلیت های صفحه بندی اصالح شدند .همچنین ،استفاده از پایانههای
گرافیکی و پایانههای حالت صفحه به جای پایانههای حالت اسکرول خط در یک زمان ،بر طراحی سیستمعامل تأثیر میگذارد .به
7صفحه بندی بعداً در این فصل به طور خالصه معرفی می شود و در فصل 7به تفصیل مورد بحث قرار می گیرد.
66
سیستم عامل های داخلی و اصول طراحی67.........................................................................................................................
عنوان مثال ،یک ترمینال گرافیکی معموالً به کاربر اجازه می دهد تا چندین برنامه را همزمان از طریق "پنجره ها" روی صفحه
مشاهده کند .این نیاز به پشتیبانی پیچیده تری در سیستم عامل دارد.
-خدمات جدید :در پاسخ به تقاضای کاربر یا در پاسخ به نیازهای مدیران سیستم ،سیستم عامل برای ارائه خدمات جدید
گسترش می یابد .به عنوان مثال ،اگر ثابت شود که حفظ عملکرد خوب برای کاربران با ابزارهای موجود دشوار است ،ابزارهای
اندازه گیری و کنترل جدید ممکن است به سیستم عامل اضافه شوند.
-رفع :هر سیستم عاملی دارای نقص است .اینها در طول زمان کشف می شوند و رفع می شوند .البته ،تعمیر ممکن است
خطاهای جدیدی ایجاد کند.
نیاز به تغییر منظم سیستم عامل الزامات خاصی را برای طراحی آن ایجاد می کند .یک بیانیه واضح این است که سیستم باید در
ساخت ماژوالر باشد ،با رابط های مشخص بین ماژول ها ،و باید به خوبی مستند باشد .برای برنامه های بزرگ ،مانند سیستم
عامل معمولی معاصر ،آنچه که ممکن است به عنوان مدوالرسازی ساده از آن یاد شود ،کافی نیست .DENN80aیعنی خیلی
بیشتر از پارتیشن بندی ساده یک برنامه به ماژول ها باید انجام شود .ما در ادامه این فصل به این موضوع باز خواهیم گشت.
در تالش برای درک الزامات کلیدی یک سیستمعامل و اهمیت ویژگیهای اصلی یک سیستمعامل معاصر ،در نظر گرفتن اینکه
چگونه سیستم عامل های در طول سالها تکامل یافتهاند ،مفید است.
پردازش سریال
با اولین رایانه ها ،از اواخر دهه 1940تا اواسط دهه ،1950برنامه نویس مستقیماً با سخت افزار رایانه تعامل داشت .هیچ سیستم
عاملی وجود نداشت این رایانهها از طریق کنسولی متشکل از چراغهای نمایشگر ،سوئیچهای کلید ،نوعی دستگاه ورودی و یک
چاپگر اجرا میشدند .برنامه های موجود در کد ماشین از طریق دستگاه ورودی به عنوان مثال ،کارت خوان بارگیری می شوند.
اگر خطایی برنامه را متوقف می کرد ،وضعیت خطا با چراغ ها نشان داده می شد .اگر برنامه به طور معمول تکمیل شود ،خروجی
روی چاپگر ظاهر می شود.
-زمانبندی :اکثر نصبها از یک برگه ثبت نام نسخه چاپی برای رزرو زمان رایانه استفاده میکنند .به طور معمول ،یک کاربر
می تواند برای مدت زمان چند برابر نیم ساعت یا بیشتر ثبت نام کند .یک کاربر ممکن است برای یک ساعت ثبت نام کند و در
67
سیستم عامل های داخلی و اصول طراحی68.........................................................................................................................
45دقیقه تمام کند .این امر منجر به تلف شدن زمان پردازش رایانه می شود .از طرف دیگر ،کاربر ممکن است با مشکل مواجه
شود ،در زمان تعیین شده کار را تمام نکند و مجبور شود قبل از حل مشکل متوقف شود.
-زمان راه اندازی :یک برنامه واحد ،به نام ،jobمی تواند شامل بارگیری اجرار به اضافه برنامه زبان سطح باال برنامه منبع در
حافظه ،ذخیره برنامه اجرا شده برنامه شی و سپس بارگیری و پیوند دادن شیء با یکدیگر باشد .برنامه و توابع مشترک هر یک از
این مراحل می تواند شامل نصب یا جدا کردن نوارها یا تنظیم عرشه کارت باشد .اگر خطایی رخ می داد ،کاربر بدبخت معموالً
باید به ابتدای توالی راه اندازی برمی گشت .بنابراین ،زمان قابل توجهی صرف تنظیم برنامه برای اجرا شد.
این حالت عملکرد را می توان پردازش سریال نامید که منعکس کننده این واقعیت است که کاربران به صورت سری به رایانه
دسترسی دارند .با گذشت زمان ،ابزارهای نرم افزاری سیستمی مختلف برای تالش برای کارآمدتر کردن پردازش سریال توسعه
یافتند .اینها شامل کتابخانههایی از توابع رایج ،لینککنندهها ،لودرها ،اشکالزداها و روتینهای درایور ورودی/خروجی است که
بهعنوان نرمافزار مشترک برای همه کاربران در دسترس بودند.
کامپیوترهای اولیه بسیار گران بودند و از این رو ،به حداکثر رساندن استفاده از پردازنده مهم بود .زمان تلف شده به دلیل زمان
بندی و زمان راه اندازی غیر قابل قبول بود.
برای بهبود استفاده ،مفهوم سیستم عامل دسته ای توسعه یافت .به نظر می رسد که اولین سیستم عامل دسته ای و اولین
سیستم عامل از هر نوع در اواسط دهه 1950توسط جنرال موتورز برای استفاده در IBM 701 WEIZ81توسعه یافت .این
مفهوم متعاقباً توسط تعدادی از مشتریان IBMاصالح و بر روی IBM 704پیادهسازی شد .در اوایل دهه ،1960تعدادی از
فروشندگان سیستم عامل های دسته ای را برای سیستم های کامپیوتری خود توسعه دادند ،IBSYS .سیستمعامل IBMبرای
رایانههای ،7094/7090بهویژه به دلیل تأثیر گسترده آن بر سایر سیستمها قابل توجه است.
ایده اصلی پشت طرح ساده پردازش دسته ای ،استفاده از یک نرم افزار به نام مانیتور است .با این نوع سیستم عامل ،کاربر دیگر
دسترسی مستقیم به پردازنده ندارد .درعوض ،کاربر کار را روی کارت یا نوار به اپراتور رایانه ارسال میکند ،او کارها را بهطور
متوالی با هم دستهبندی میکند و کل دسته را برای استفاده توسط مانیتور روی یک دستگاه ورودی قرار میدهد .هر برنامه به
گونه ای ساخته شده است که پس از تکمیل پردازش به مانیتور منشعب شود ،در این مرحله مانیتور به طور خودکار بارگذاری
برنامه بعدی را آغاز می کند.
برای درک نحوه عملکرد این طرح ،اجازه دهید از دو منظر به آن نگاه کنیم :مانیتور و پردازنده.
68
سیستم عامل های داخلی و اصول طراحی69.........................................................................................................................
وقفه در پردازش
درایورهای دستگاه
نظارت کنید
توالی کار
منطقه برنامه
کاربر
-دیدگاه مانیتور :مانیتور توالی رویدادها را کنترل می کند .برای تحقق این امر ،بیشتر مانیتور باید همیشه در حافظه اصلی باشد
و برای اجرا در دسترس باشد شکل .2.3آن بخش به عنوان مانیتور مقیم نامیده می شود .بقیه مانیتور شامل ابزارهای کاربردی و
توابع رایجی است که در ابتدای هر کاری که به آنها نیاز دارد به عنوان برنامه های فرعی برای برنامه کاربر بارگذاری می شوند.
مانیتور کارها را یکی یکی از دستگاه ورودی می خواند معموالً کارت خوان یا درایو نوار مغناطیسی .همانطور که خوانده می شود،
کار فعلی در ناحیه برنامه کاربر قرار می گیرد و کنترل به این کار منتقل می شود .پس از اتمام کار ،کنترل را به مانیتور برمی
گرداند که بالفاصله در کار بعدی خوانده می شود .نتایج هر کار برای تحویل به کاربر به یک دستگاه خروجی مانند چاپگر ارسال
می شود.
-دیدگاه پردازنده :در یک نقطه خاص ،پردازنده در حال اجرای دستورالعمل ها از بخشی از حافظه اصلی حاوی نمایشگر است.
این دستورالعمل ها باعث می شود که کار بعدی در قسمت دیگری از حافظه اصلی خوانده شود.
هنگامی که یک کار خوانده شد ،پردازنده با یک دستورالعمل شعبه در مانیتور مواجه می شود که به پردازنده دستور می دهد تا
اجرا را در شروع برنامه کاربر ادامه دهد .سپس پردازنده دستورالعمل ها را در برنامه کاربر اجرا می کند تا زمانی که با یک
وضعیت پایان یا خطا مواجه شود .هر یک از این رویدادها باعث می شود که پردازنده دستورات بعدی خود را از برنامه مانیتور
69
سیستم عامل های داخلی و اصول طراحی70.........................................................................................................................
دریافت کند .بنابراین عبارت "کنترل به یک کار منتقل می شود" به سادگی به این معنی است که پردازنده اکنون در حال
واکشی و اجرای دستورالعمل ها در یک برنامه کاربر است و "کنترل به مانیتور بازگردانده شده است" به این معنی است که
پردازنده اکنون در حال دریافت و اجرای دستورالعمل ها از برنامه است .برنامه نظارت
مانیتور یک عملکرد زمانبندی را انجام میدهد :دستهای از کارها در صف قرار میگیرند ،و کارها با حداکثر سرعت ممکن و بدون
زمان بیکاری اجرا میشوند .مانیتور زمان تنظیم کار را نیز بهبود می بخشد .با هر شغل ،دستورالعمل ها در شکل ابتدایی زبان
کنترل شغل JCLگنجانده شده است .این یک نوع خاص از زبان برنامه نویسی است که برای ارائه دستورالعمل ها به مانیتور
استفاده می شود .یک مثال ساده این است که یک کاربر برنامه ای را که به زبان برنامه نویسی FORTRANنوشته شده است
به اضافه مقداری داده برای استفاده توسط برنامه ارسال می کند .تمام دستورالعمل ها و داده های FORTRANدر یک کارت
پانچ جداگانه یا یک رکورد جداگانه روی نوار قرار دارند .عالوه بر FORTRANو خطوط داده ،این کار شامل دستورالعملهای
کنترل کار است که با شروع $نشان داده میشوند .فرمت کلی کار به صورت زیر است:
برای اجرای این کار ،مانیتور خط FTN$را می خواند و اجرار زبان مناسب را از حافظه انبوه خود معموالً نوار بارگیری می کند.
اجرار برنامه کاربر را به کد شی ترجمه می کند که در حافظه یا ذخیره سازی انبوه ذخیره می شود .اگر در حافظه ذخیره شود،
عملیات به عنوان "اجرا ،بارگذاری و رفتن" نامیده می شود .اگر روی نوار ذخیره شود ،دستور LOAD$مورد نیاز است .این
دستورالعمل توسط مانیتور خوانده می شود که پس از عملیات اجرا مجدداً کنترل را به دست می آورد .مانیتور لودر را فراخوانی
می کند که برنامه شی را در حافظه بارگذاری می کند به جای اجرار و کنترل را به آن منتقل می کند .به این ترتیب ،بخش
بزرگی از حافظه اصلی را می توان در میان زیرسیستم های مختلف به اشتراک گذاشت ،اگرچه تنها یک زیر سیستم می تواند در
یک زمان اجرا شود.
در طول اجرای برنامه کاربر ،هر دستور ورودی باعث می شود یک خط از داده خوانده شود .دستورالعمل ورودی در برنامه کاربر
باعث می شود که یک روال ورودی که بخشی از سیستم عامل است فراخوانی شود .روال ورودی بررسی می کند تا مطمئن شود
که برنامه به طور تصادفی در یک خط JCLخوانده نمی شود .اگر این اتفاق بیفتد ،خطایی رخ می دهد و کنترل به مانیتور
70
سیستم عامل های داخلی و اصول طراحی71.........................................................................................................................
منتقل می شود .در پایان کار کاربر ،مانیتور خطوط ورودی را اسکن می کند تا زمانی که با دستور JCLبعدی روبرو شود.
بنابراین ،سیستم در برابر برنامه ای با خطوط داده بسیار زیاد یا خیلی کم محافظت می شود.
مانیتور یا سیستم عامل دسته ای ،به سادگی یک برنامه کامپیوتری است .این به توانایی پردازنده برای واکشی دستورالعمل ها از
بخش های مختلف حافظه اصلی برای گرفتن متناوب و رها کردن کنترل وابسته است .برخی دیگر از ویژگی های سخت افزاری
نیز مطلوب هستند:
-محافظت از حافظه :زمانی که برنامه کاربر در حال اجرا است ،نباید ناحیه حافظه حاوی نمایشگر را تغییر دهد .اگر چنین
تالشی انجام شود ،سخت افزار پردازنده باید خطا را تشخیص دهد و کنترل را به مانیتور منتقل کند .سپس مانیتور کار را لغو
میکند ،پیام خطا را چاپ میکند و در کار بعدی بارگذاری میکند.
-تایمر :از یک تایمر برای جلوگیری از انحصار یک کار در سیستم استفاده می شود .تایمر در ابتدای هر کار تنظیم می شود .اگر
تایمر منقضی شود ،برنامه کاربر متوقف می شود و کنترل به مانیتور باز می گردد.
-دستورالعملهای ممتاز :برخی از دستورالعملهای سطح ماشین بهعنوان ممتاز تعیین شدهاند و فقط توسط مانیتور قابل اجرا
هستند .اگر پردازنده هنگام اجرای یک برنامه کاربری با چنین دستورالعملی مواجه شود ،خطایی رخ می دهد که باعث می شود
کنترل به مانیتور منتقل شود .از جمله دستورالعمل های ممتاز ،دستورالعمل های I/Oهستند ،به طوری که مانیتور کنترل تمام
دستگاه های I/Oرا حفظ می کند .به عنوان مثال ،این امر مانع از خواندن تصادفی دستورالعملهای کنترل کار توسط یک
برنامه کاربر از کار بعدی میشود .اگر یک برنامه کاربر بخواهد I/Oانجام دهد ،باید از مانیتور درخواست کند که این عملیات را
برای آن انجام دهد.
-وقفه ها :مدل های اولیه کامپیوتر این قابلیت را نداشتند .این ویژگی به سیستم عامل انعطاف پذیری بیشتری در واگذاری
کنترل و بازپس گیری کنترل از برنامه های کاربر می دهد.
مالحظات حفاظت از حافظه و دستورالعمل های ممتاز منجر به مفهوم حالت های عملکرد می شود .یک برنامه کاربر در حالت
کاربر اجرا می شود که در آن قسمت های خاصی از حافظه از استفاده کاربر محافظت می شود و ممکن است دستورالعمل های
خاصی در آن اجرا نشود .مانیتور در حالت سیستمی اجرا میشود ،یا حالتی که به آن حالت هسته میگویند ،که در آن
دستورالعملهای ممتاز ممکن است اجرا شوند و در آن مناطق حفاظتشده حافظه ممکن است دسترسی داشته باشند.
البته می توان یک سیستم عامل بدون این ویژگی ها ساخت .اما فروشندگان کامپیوتر به سرعت متوجه شدند که نتایج هرج و
مرج است ،و بنابراین حتی سیستم عامل های دسته ای نسبتا ابتدایی نیز با این ویژگی های سخت افزاری ارائه شدند.
71
سیستم عامل های داخلی و اصول طراحی72.........................................................................................................................
با سیستم عامل دسته ای ،زمان پردازنده بین اجرای برنامه های کاربر و اجرای مانیتور متناوب می شود .دو قربانی وجود داشته
است :اکنون مقداری حافظه اصلی در اختیار مانیتور قرار می گیرد و مقداری از زمان پردازنده توسط مانیتور مصرف می شود .هر
دوی اینها اشکال سربار هستند .با وجود این سربار ،سیستم دسته ای ساده استفاده از رایانه را بهبود می بخشد.
حتی با توالی کار خودکار ارائه شده توسط یک سیستم عامل دسته ای ساده ،پردازنده اغلب بیکار است .مشکل این است که
دستگاه های I/Oدر مقایسه با پردازنده کند هستند.
72
سیستم عامل های داخلی و اصول طراحی73.........................................................................................................................
شکل 2.4یک محاسبه نماینده را شرح می دهد .محاسبات مربوط به برنامه ای است که فایلی از رکوردها را پردازش می کند و
به طور متوسط 100دستورالعمل ماشین را در هر رکورد انجام می دهد .در این مثال ،رایانه بیش از 96درصد از زمان خود را
صرف انتظار برای دستگاههای ورودی/خروجی میکند تا انتقال دادهها به فایل را به پایان برساند .شکل a2.5این وضعیت را
نشان می دهد ،جایی که ما یک برنامه واحد داریم که به آن uniprogrammingگفته می شود .پردازنده زمان معینی را صرف
اجرا می کند تا زمانی که به یک دستور I/Oبرسد .سپس باید منتظر بماند تا دستورالعمل I/Oقبل از ادامه کار به پایان برسد.
این ناکارآمدی ضروری نیست .می دانیم که باید حافظه کافی برای نگهداری سیستم عامل مانیتور مقیم و یک برنامه کاربر وجود
داشته باشد .فرض کنید که فضایی برای سیستم عامل و دو برنامه کاربر وجود دارد .هنگامی که یک کار نیاز به منتظر ماندن
برای I/Oداشته باشد ،پردازنده می تواند به کار دیگر سوئیچ کند ،که احتماالً منتظر I/Oنیست شکل .b2.5
عالوه بر این ،ممکن است حافظه را برای نگهداری سه ،چهار یا چند برنامه گسترش دهیم و بین همه آنها سوئیچ کنیم شکل
.c2.5این رویکرد به عنوان چند برنامه ریزی یا چند وظیفه ای شناخته می شود .این موضوع اصلی سیستم عامل های مدرن
است.
برای نشان دادن مزایای چندبرنامهنویسی ،یک مثال ساده میآوریم .کامپیوتری با 250مگابایت حافظه در دسترس که توسط
سیستم عامل استفاده نمی شود ،دیسک ،ترمینال و چاپگر را در نظر بگیرید .سه برنامه ،JOB2 ،JOB1 ،و ،JOB3با ویژگی
های فهرست شده در جدول 2.1به طور همزمان برای اجرا ارسال می شوند .ما حداقل نیازهای پردازنده را برای JOB2و
JOB3و استفاده مداوم از دیسک و چاپگر توسط JOB3فرض می کنیم .برای یک محیط دسته ای ساده ،این کارها به ترتیب
اجرا می شوند .بنابراین JOB1 ،در 5دقیقه کامل می شود JOB2 .باید صبر کند تا 5دقیقه تمام شود و سپس 15دقیقه پس
از آن کامل شود JOB3 .بعد از 20دقیقه شروع می شود و در 30دقیقه از زمان ارسال اولیه تکمیل می شود .میانگین استفاده
از منابع ،توان عملیاتی و زمان پاسخ در ستون برنامهریزی یکنواخت جدول 2.2نشان داده شده است .استفاده از دستگاه به
دستگاه در شکل a2.6نشان داده شده است .بدیهی است که وقتی به طور میانگین در بازه زمانی 30دقیقه ای مورد نیاز باشد،
برای همه منابع ،استفاده ناکافی وجود دارد.
حال فرض کنید که کارها به طور همزمان تحت یک سیستم عامل چندبرنامهنویسی اجرا میشوند .از آنجایی که اختالف منابع
کمی بین کارها وجود دارد ،هر سه میتوانند در حداقل زمان اجرا شوند و در عین حال با سایر کارها در رایانه همزیستی داشته
باشند با فرض اینکه به JOB2و JOB3زمان کافی برای پردازشگر اختصاص داده شده است تا عملیات ورودی و خروجی خود
را فعال نگه دارند JOB1 .هنوز به 5دقیقه برای تکمیل نیاز دارد ،اما در پایان این زمان JOB2 ،یک سوم و JOB3نیمه تمام
74
سیستم عامل های داخلی و اصول طراحی75.........................................................................................................................
خواهد شد .هر سه کار در عرض 15دقیقه به پایان خواهند رسید .این بهبود هنگام بررسی ستون چندبرنامهنویسی جدول 2.2
که از هیستوگرام نشان داده شده در شکل b2.6به دست آمده است مشهود است.
همانند یک سیستم دستهای ساده ،یک سیستم دستهای چندبرنامهنویسی باید بر ویژگیهای سختافزاری کامپیوتری خاص
تکیه کند .قابل توجه ترین ویژگی اضافی که برای برنامه نویسی چندگانه مفید است ،سخت افزاری است که از وقفه های
ورودی/خروجی و DMAدسترسی مستقیم به حافظه پشتیبانی می کند .با I/Oیا DMAمبتنی بر وقفه ،پردازنده می تواند
برای یک کار دستور I/Oصادر کند و در حالی که I/Oتوسط کنترل کننده دستگاه انجام می شود ،کار دیگری را اجرا کند.
هنگامی که عملیات I/Oکامل شد ،پردازنده قطع می شود و کنترل به یک برنامه مدیریت وقفه در سیستم عامل منتقل می
شود .سپس سیستم عامل کنترل را به کار دیگری منتقل می کند.
سیستمعاملهای چندبرنامهنویسی در مقایسه با سیستمهای تک برنامهای یا تکبرنامهنویسی نسبتاً پیچیده هستند .برای اینکه
چندین کار آماده اجرا شوند ،باید در حافظه اصلی نگهداری شوند و به نوعی مدیریت حافظه نیاز دارند .عالوه بر این ،اگر چندین
کار آماده اجرا هستند ،پردازنده باید تصمیم بگیرد که کدام یک را اجرا کند و این تصمیم نیاز به یک الگوریتم برای زمان بندی
دارد .این مفاهیم بعداً در این فصل مورد بحث قرار می گیرند.
75
سیستم عامل های داخلی و اصول طراحی76.........................................................................................................................
با استفاده از چندبرنامهنویسی ،پردازش دستهای میتواند بسیار کارآمد باشد .با این حال ،برای بسیاری از مشاغل ،مطلوب است
که حالتی ارائه شود که در آن کاربر مستقیماً با رایانه تعامل داشته باشد .در واقع ،برای برخی از مشاغل ،مانند پردازش تراکنش،
یک حالت تعاملی ضروری است.
امروزه ،نیاز به یک تسهیالت محاسباتی تعاملی را می توان با استفاده از یک رایانه شخصی یا ایستگاه کاری اختصاصی برآورده
کرد و اغلب برآورده می کند .این گزینه در دهه 1960در دسترس نبود ،زمانی که اکثر کامپیوترها بزرگ و پرهزینه بودند .در
عوض ،به اشتراک گذاری زمان توسعه داده شد.
همانطور که چندبرنامهنویسی به پردازنده اجازه میدهد تا چندین کار دستهای را در یک زمان انجام دهد ،چندبرنامهنویسی نیز
میتواند برای مدیریت چندین کار تعاملی استفاده شود .در این مورد اخیر ،تکنیک به اشتراک گذاری زمان گفته می شود ،زیرا
زمان پردازنده بین چندین کاربر به اشتراک گذاشته می شود .در یک سیستم اشتراک زمانی ،چندین کاربر به طور همزمان از
طریق پایانهها به سیستم دسترسی پیدا میکنند و سیستمعامل اجرای هر برنامه کاربر را در یک دوره کوتاه یا کوانتومی
محاسبات به هم میریزد.
بنابراین ،اگر nکاربر به طور فعال در یک زمان درخواست خدمات داشته باشند ،هر کاربر تنها به طور متوسط n/1از ظرفیت
مؤثر رایانه را مشاهده خواهد کرد ،بدون احتساب سربار سیستم عامل .با این حال ،با توجه به زمان واکنش نسبتاً آهسته انسان،
زمان پاسخ در یک سیستم به درستی طراحی شده باید مشابه یک کامپیوتر اختصاصی باشد.
هم پردازش دسته ای و هم به اشتراک گذاری زمان از چندبرنامه نویسی استفاده می کنند .تفاوت های کلیدی در جدول 2.3
فهرست شده است .یکی از اولین سیستمعاملهای اشتراکگذاری زمانی که توسعه یافت ،سیستم اشتراکگذاری زمان سازگار
CTSS CORB62بود که در MITتوسط گروهی به نام Project MACشناخت با کمک ماشین یا رایانههای دسترسی
چندگانه توسعه یافت .این سیستم ابتدا برای IBM 709در سال 1961توسعه یافت و بعداً به IBM 7094منتقل شد.
در مقایسه با سیستم های بعدی CTSS ،ابتدایی است .این سیستم بر روی رایانه ای با 32000کلمه 36بیتی حافظه اصلی کار
می کرد که مانیتور مقیم 5000از آن را مصرف می کرد .زمانی که قرار بود کنترل به یک کاربر تعاملی اختصاص داده شود،
برنامه و داده های کاربر در 27000کلمه باقی مانده از حافظه اصلی بارگذاری می شود .یک برنامه همیشه برای شروع در محل
کلمه 5000بارگذاری می شد .این کار مانیتور و مدیریت حافظه را ساده کرد .یک ساعت سیستمی که تقریباً هر 0.2ثانیه یک
وقفه ایجاد می کند .در هر وقفه ساعت ،سیستم عامل کنترل را دوباره به دست می آورد و می توانست پردازنده را به کاربر
دیگری اختصاص دهد .این تکنیک به عنوان برش زمان شناخته می شود .بنابراین ،در بازههای زمانی معین ،کاربر فعلی از پیش
76
سیستم عامل های داخلی و اصول طراحی77.........................................................................................................................
گرفته میشود و کاربر دیگری بارگیری میشود .برای حفظ وضعیت برنامه کاربر قدیمی برای از سرگیری مجدد ،برنامهها و
دادههای کاربر قدیمی قبل از خواندن برنامهها و دادههای کاربر جدید روی دیسک نوشته میشوند .پس از آن ،کد برنامه کاربر
قدیمی و دادهها در زمانی که برنامه بعدی نوبت داده شد ،در حافظه اصلی بازیابی شدند.
برای به حداقل رساندن ترافیک دیسک ،حافظه کاربر تنها زمانی که برنامه ورودی آن را بازنویسی می کرد ،نوشته می شد .این
اصل در شکل 2.7نشان داده شده است .فرض کنید که چهار کاربر تعاملی با نیازهای حافظه زیر وجود دارد ،در کلمات:
77
سیستم عامل های داخلی و اصول طراحی78.........................................................................................................................
در ابتدا ،مانیتور JOB1را بارگذاری می کند و کنترل را به آن منتقل می کند .aبعداً مانیتور تصمیم می گیرد که کنترل را به
JOB2منتقل کند .از آنجایی که JOB2به حافظه بیشتری نسبت به JOB1نیاز دارد JOB1 ،باید ابتدا نوشته شود و سپس
JOB2می تواند بارگذاری شود .bبعد JOB3 ،برای اجرا بارگذاری می شود .با این حال ،چون JOB3کوچکتر از JOB2
است ،بخشی از JOB2می تواند در حافظه باقی بماند و زمان نوشتن دیسک cکاهش می یابد .بعداً ،مانیتور تصمیم می گیرد
که کنترل را به JOB1بازگرداند .هنگامی که JOB1دوباره در حافظه بارگذاری می شود ،یک بخش اضافی از JOB2باید
نوشته شود .هنگامی که JOB4بارگذاری می شود ،بخشی از JOB1و بخشی از JOB2باقی مانده در حافظه حفظ می شود
.eدر این مرحله ،اگر JOB1یا JOB2فعال شود ،تنها یک بار جزئی مورد نیاز خواهد بود .در این مثال JOB2 ،است که در
مرحله بعدی اجرا می شود .این مستلزم آن است که JOB4و بخش ساکن باقی مانده از JOB1نوشته شود و قسمت گمشده
JOB2در fخوانده شود.
رویکرد CTSSدر مقایسه با اشتراکگذاری زمان کنونی بدوی است ،اما مؤثر بود .بسیار ساده بود که اندازه مانیتور را به حداقل
رساند .از آنجایی که یک کار همیشه در همان مکانهای حافظه بارگذاری میشد ،نیازی به تکنیکهای جابجایی در زمان
بارگذاری وجود نداشت در ادامه بحث شد .تکنیک نوشتن فقط آنچه الزم بود ،فعالیت دیسک را به حداقل رساند .در حال اجرا بر
روی CTSS ،7094حداکثر 32کاربر را پشتیبانی می کند.
اشتراکگذاری زمان و چندبرنامهنویسی مجموعهای از مشکالت جدید را برای سیستم عامل ایجاد میکند .اگر چندین کار در
حافظه باشد ،باید از تداخل با یکدیگر محافظت شود ،به عنوان مثال ،با تغییر داده های یکدیگر .با چندین کاربر تعاملی ،سیستم
فایل باید محافظت شود تا فقط کاربران مجاز به یک فایل خاص دسترسی داشته باشند .مناقشه برای منابع ،مانند چاپگرها و
دستگاه های ذخیره سازی انبوه ،باید رسیدگی شود .این مشکالت و مشکالت دیگر ،با راه حل های ممکن ،در سراسر این متن
مواجه خواهند شد.
2.3دستاوردهای عمده
سیستم عامل ها یکی از پیچیده ترین نرم افزارهایی هستند که تا به حال توسعه یافته اند .این نشان دهنده چالش تالش برای
دستیابی به اهداف دشوار و در برخی موارد رقابتی راحتی ،کارایی و توانایی برای تکامل است DENN80a .پیشنهاد میکند که
چهار پیشرفت نظری عمده در توسعه سیستم عامل های وجود داشته است:
-فرآیندها
-مدیریت حافظه
-حفاظت و امنیت اطالعات
-برنامه ریزی و مدیریت منابع
78
سیستم عامل های داخلی و اصول طراحی79.........................................................................................................................
هر پیشرفتی با اصول یا انتزاعاتی مشخص می شود که برای رفع مشکالت عملی دشوار توسعه یافته اند .در مجموع ،این چهار
حوزه بسیاری از مسائل کلیدی طراحی و پیاده سازی سیستم عامل های مدرن را در بر می گیرند .بررسی مختصر این چهار
حوزه در این بخش به عنوان مروری بر بسیاری از بقیه متن عمل می کند.
فرآیند
در طراحی سیستم عامل ها مفهوم فرآیند قرار دارد .این اصطالح برای اولین بار توسط طراحان Multicsدر دهه 1960
استفاده شد .DALE68این یک اصطالح کلی تر از شغل است .تعاریف زیادی برای اصطالح فرآیند ارائه شده است ،از جمله
-واحدی از فعالیت که با یک رشته اجرا متوالی ،وضعیت فعلی و مجموعه ای از منابع سیستم مرتبط مشخص می شود.
سه خط اصلی توسعه سیستم کامپیوتری مشکالتی را در زمانبندی و همگامسازی ایجاد کردند که به توسعه مفهوم فرآیند
کمک کرد :عملیات دستهای چندبرنامهنویسی ،اشتراکگذاری زمانی و سیستمهای تراکنش بالدرنگ .همانطور که دیدیم،
چندبرنامهنویسی به گونهای طراحی شده است که پردازنده و دستگاههای ورودی/خروجی ،از جمله دستگاههای ذخیرهسازی ،به
طور همزمان برای دستیابی به حداکثر کارایی مشغول باشند .مکانیسم کلیدی این است :در پاسخ به سیگنالهایی که
نشاندهنده تکمیل تراکنشهای I/Oهستند ،پردازنده بین برنامههای مختلف موجود در حافظه اصلی سوئیچ میشود
خط دوم توسعه ،اشتراک زمانی همه منظوره بود .در اینجا ،هدف اصلی طراحی این است که به نیازهای هر کاربر پاسخ دهد و در
عین حال ،به دالیل هزینه ،بتواند از بسیاری از کاربران به طور همزمان پشتیبانی کند .این اهداف به دلیل زمان واکنش نسبتاً
کند کاربر سازگار هستند .به عنوان مثال ،اگر یک کاربر معمولی به طور متوسط به 2ثانیه زمان پردازش در دقیقه نیاز داشته
باشد ،نزدیک به 30کاربر باید بتوانند یک سیستم را بدون تداخل محسوس به اشتراک بگذارند .البته سربار سیستم عامل باید در
چنین محاسباتی لحاظ شود.
سومین خط مهم توسعه ،سیستم های پردازش تراکنش بالدرنگ بوده است .در این حالت ،تعدادی از کاربران در حال وارد کردن
پرس و جو یا به روز رسانی در مقابل یک پایگاه داده هستند .یک مثال سیستم رزرواسیون هواپیمایی است .تفاوت اصلی بین
سیستم پردازش تراکنش و سیستم اشتراک زمانی این است که اولی به یک یا چند برنامه محدود می شود ،در حالی که کاربران
79
سیستم عامل های داخلی و اصول طراحی80.........................................................................................................................
یک سیستم اشتراک زمانی می توانند در توسعه برنامه ،اجرای کار و استفاده از برنامه های کاربردی مختلف شرکت کنند . .در هر
دو مورد ،زمان پاسخگویی سیستم بسیار مهم است.
ابزار اصلی در دسترس برنامه نویسان سیستم در توسعه سیستم های چندبرنامه نویسی اولیه و چند کاربره تعاملی ،وقفه بود.
فعالیت هر کاری می تواند با وقوع یک رویداد تعریف شده ،مانند تکمیل I/Oبه حالت تعلیق درآید .پردازنده نوعی زمینه را
ذخیره می کند مانند شمارنده برنامه و سایر رجیسترها و به یک روال مدیریت وقفه منشعب می شود که ماهیت وقفه را تعیین
می کند ،وقفه را پردازش می کند و سپس پردازش کاربر را با کار قطع شده از سر می گیرد .یا یه کار دیگه طراحی نرم افزار
سیستم برای هماهنگی این فعالیت های مختلف بسیار دشوار بود .با تعداد زیادی کار در حال انجام در هر زمان ،که هر یک
شامل مراحل متعددی بود که باید به ترتیب انجام شوند ،تجزیه و تحلیل همه ترکیبهای ممکن از توالی رویدادها غیرممکن شد.
در غیاب برخی ابزارهای سیستماتیک هماهنگی و همکاری بین فعالیت ها ،برنامه نویسان به روش های موردی بر اساس درک
خود از محیطی که سیستم عامل باید کنترل می کرد ،متوسل شد.
این تالشها در برابر خطاهای برنامهنویسی ظریف آسیبپذیر بودند که اثرات آنها تنها زمانی قابل مشاهده بود که توالیهای
نسبتاً نادری از اقدامات اتفاق افتاد .تشخیص این خطاها دشوار بود زیرا باید از خطاهای نرم افزار کاربردی و خطاهای سخت
افزاری متمایز می شدند .حتی زمانی که خطا شناسایی شد ،تعیین علت مشکل بود ،زیرا شرایط دقیقی که در آن خطاها ظاهر
می شدند ،بازتولید بسیار سخت بود .به طور کلی ،چهار دلیل اصلی برای چنین خطاهایی وجود دارد :DENN80a
-همگامسازی نامناسب :اغلب اتفاق میافتد که یک روال باید در انتظار یک رویداد در جای دیگری از سیستم به حالت تعلیق
درآید .برای مثال ،برنامهای که خواندن ورودی/خروجی را آغاز میکند ،باید منتظر بماند تا دادهها در یک بافر در دسترس باشند
و سپس ادامه دهند .در چنین مواردی ،یک سیگنال از یک روال دیگر مورد نیاز است .طراحی نادرست مکانیسم سیگنالینگ می
تواند منجر به از بین رفتن سیگنال یا دریافت سیگنال های تکراری شود.
-محرومیت متقابل ناموفق :اغلب اتفاق می افتد که بیش از یک کاربر یا برنامه به طور همزمان سعی می کنند از یک منبع
مشترک استفاده کنند .به عنوان مثال ،دو کاربر ممکن است سعی کنند یک فایل را همزمان ویرایش کنند .اگر این دسترسی ها
کنترل نشود ،ممکن است خطایی رخ دهد .باید نوعی مکانیسم کنار گذاشتن متقابل وجود داشته باشد که تنها به یک روال در
هر زمان اجازه می دهد تا یک به روز رسانی را در برابر پرونده انجام دهد .صحت اجرای چنین طرد متقابل تحت تمام توالی
احتمالی رویدادها دشوار است.
-عملکرد برنامه نامعین :نتایج یک برنامه خاص معموالً باید فقط به ورودی آن برنامه بستگی داشته باشد و نه به فعالیت های
برنامه های دیگر در یک سیستم مشترک.
80
سیستم عامل های داخلی و اصول طراحی81.........................................................................................................................
اما زمانی که برنامهها حافظه مشترکی دارند و اجرای آنها توسط پردازشگر مختل میشود ،ممکن است با رونویسی مناطق
مشترک حافظه به روشهای غیرقابل پیشبینی با یکدیگر تداخل داشته باشند .بنابراین ،ترتیب برنامه ریزی برنامه های مختلف
ممکن است بر نتیجه هر برنامه خاصی تأثیر بگذارد.
-وقفه :این امکان وجود دارد که دو یا چند برنامه منتظر یکدیگر باشند .به عنوان مثال ،ممکن است دو برنامه هر کدام به دو
دستگاه ورودی/خروجی برای انجام برخی عملیات نیاز داشته باشند به عنوان مثال ،کپی از دیسک به نوار .یکی از برنامه ها
کنترل یکی از دستگاه ها و برنامه دیگر کنترل دستگاه دیگر را در اختیار گرفته است .هر کدام منتظر هستند تا برنامه دیگر منبع
مورد نظر را منتشر کند .چنین بنبستی ممکن است به زمانبندی شانس تخصیص و انتشار منابع بستگی داشته باشد.
آنچه برای مقابله با این مشکالت نیاز است ،یک روش سیستماتیک برای نظارت و کنترل برنامه های مختلف در حال اجرا بر روی
پردازنده است .مفهوم فرآیند پایه و اساس را فراهم می کند .میتوانیم فرآیندی را متشکل از سه جزء در نظر بگیریم:
-داده های مرتبط مورد نیاز برنامه متغیرها ،فضای کاری ،بافرها و غیره
این عنصر آخر ضروری است .زمینه اجرا ،یا وضعیت فرآیند ،داده های داخلی است که سیستم عامل قادر به نظارت و کنترل
فرآیند است .این اطالعات داخلی از فرآیند جدا شده است ،زیرا سیستم عامل دارای اطالعاتی است که اجازه ورود به فرآیند را
ندارند .زمینه شامل تمام اطالعاتی است که سیستم عامل برای مدیریت فرآیند و پردازنده برای اجرای صحیح فرآیند به آن نیاز
دارد .زمینه شامل محتویات رجیسترهای مختلف پردازشگر ،مانند شمارنده برنامه و ثبات های داده است .همچنین شامل
اطالعات استفاده از سیستم عامل است ،مانند اولویت فرآیند و اینکه آیا فرآیند منتظر تکمیل یک رویداد I/Oخاص است یا
خیر.
81
سیستم عامل های داخلی و اصول طراحی82.........................................................................................................................
شکل 2.8روشی را نشان می دهد که در آن فرآیندها ممکن است مدیریت شوند .دو فرآیند Aو Bدر بخشهایی از حافظه
اصلی وجود دارد .یعنی یک بلوک از حافظه به هر فرآیندی اختصاص داده می شود که حاوی برنامه ،داده ها و اطالعات زمینه
است .هر فرآیند در یک لیست فرآیند ساخته شده و نگهداری شده توسط سیستم عامل ثبت می شود .لیست فرآیند شامل یک
ورودی برای هر فرآیند است که شامل یک اشاره گر به محل بلوک حافظه است که شامل فرآیند است .ورودی همچنین ممکن
است شامل بخشی یا تمام زمینه اجرای فرآیند باشد .باقیمانده زمینه اجرا در جای دیگری ذخیره می شود ،شاید با خود فرآیند
همانطور که در شکل 2.8نشان داده شده است یا اغلب در یک منطقه جداگانه از حافظه .رجیستر شاخص فرآیند شامل فهرست
فرآیندی است که در حال حاضر پردازنده را کنترل می کند .شمارنده برنامه به دستور بعدی در آن فرآیند اشاره می کند که باید
اجرا شود.
ثبات های پایه و حد ،منطقه اشغال شده توسط فرآیند را در حافظه تعریف می کنند :ثبات پایه آدرس شروع منطقه حافظه است
و حد ،اندازه منطقه به بایت یا کلمات است .شمارنده برنامه و همه مراجع داده نسبت به ثبات پایه تفسیر می شوند و نباید از
مقدار موجود در ثبات حد تجاوز کنند .این از تداخل بین فرآیندها جلوگیری می کند.
در شکل ،2.8ثبت شاخص فرآیند نشان می دهد که فرآیند Bدر حال اجرا است .فرآیند Aقبالً در حال اجرا بود اما موقتاً قطع
شده است .محتویات همه رجیسترها در لحظه وقفه Aدر زمینه اجرای آن ثبت شد .بعداً ،سیستم عامل میتواند یک سوئیچ
فرآیند را انجام دهد و اجرای فرآیند Aرا از سر بگیرد .سوئیچ فرآیند شامل ذخیره زمینه Bو بازیابی زمینه Aاست .هنگامی
که شمارنده برنامه با مقداری بارگذاری میشود که به ناحیه برنامه Aاشاره میکند ،فرآیند Aبارگیری میشود .به طور خودکار
اجرا را از سر می گیرد.
82
سیستم عامل های داخلی و اصول طراحی83.........................................................................................................................
بنابراین ،فرآیند به عنوان یک ساختار داده تحقق می یابد .یک فرآیند می تواند در حال اجرا یا در انتظار اجرا باشد .کل وضعیت
فرآیند در هر لحظه در متن آن گنجانده شده است .این ساختار امکان توسعه تکنیک های قدرتمند را برای اطمینان از هماهنگی
و همکاری بین فرآیندها فراهم می کند .ویژگیهای جدید را میتوان با گسترش متن برای گنجاندن هرگونه اطالعات جدید
مورد نیاز برای پشتیبانی از ویژگی ،طراحی و در سیستمعامل گنجاند به عنوان مثال ،اولویت .در سرتاسر این کتاب ،تعدادی
نمونه را مشاهده خواهیم کرد که در آن از این ساختار فرآیند برای حل مشکالت ناشی از چندبرنامهنویسی و اشتراک منابع
استفاده میشود.
نکته پایانی که در اینجا به اختصار به آن اشاره می کنیم ،مفهوم رشته است .در اصل ،یک فرآیند واحد ،که منابع خاصی به آن
اختصاص داده شده است ،می تواند به رشته های متعدد و همزمان تقسیم شود که به طور مشترک برای انجام کار فرآیند اجرا
می شوند .این سطح جدیدی از فعالیت های موازی را برای مدیریت سخت افزار و نرم افزار معرفی می کند.
مدیریت حافظه
نیازهای کاربران را می توان با یک محیط محاسباتی که از برنامه نویسی مدوالر و استفاده انعطاف پذیر از داده ها پشتیبانی می
کند ،به بهترین وجه برآورده کرد .مدیران سیستم نیاز به کنترل کارآمد و منظم تخصیص فضای ذخیره سازی دارند .سیستم
عامل برای برآوردن این الزامات ،پنج مسئولیت اصلی مدیریت ذخیره سازی دارد:
-جداسازی فرآیند :سیستم عامل باید از تداخل فرآیندهای مستقل با حافظه یکدیگر ،هم داده ها و هم دستورالعمل ها،
جلوگیری کند.
-تخصیص و مدیریت خودکار :برنامه ها باید به صورت پویا در سلسله مراتب حافظه در صورت لزوم تخصیص داده شوند.
تخصیص باید برای برنامه نویس شفاف باشد .بنابراین ،برنامهنویس از نگرانیهای مربوط به محدودیتهای حافظه خالص میشود
و سیستمعامل میتواند با تخصیص حافظه به کارها تنها در صورت نیاز به کارایی دست یابد.
پشتیبانی از برنامه نویسی ماژوالر :برنامه نویسان باید قادر به تعریف ماژول های برنامه و ایجاد ،تخریب و تغییر اندازه ماژول ها به
صورت پویا باشند.
حفاظت و کنترل دسترسی :اشتراک گذاری حافظه ،در هر سطحی از سلسله مراتب حافظه ،این پتانسیل را برای یک برنامه ایجاد
می کند تا به فضای حافظه برنامه دیگر رسیدگی کند .این امر زمانی مطلوب است که به اشتراک گذاری توسط برنامه های خاص
نیاز باشد.
در مواقع دیگر ،یکپارچگی برنامه ها و حتی خود سیستم عامل را تهدید می کند .سیستم عامل باید به بخش هایی از حافظه
اجازه دهد که به طرق مختلف توسط کاربران مختلف قابل دسترسی باشد.
83
سیستم عامل های داخلی و اصول طراحی84.........................................................................................................................
ذخیره سازی طوالنی مدت :بسیاری از برنامه های کاربردی به ابزاری برای ذخیره سازی اطالعات برای مدت زمان طوالنی ،پس
از خاموش شدن رایانه نیاز دارند.
به طور معمول ،سیستم عامل ها این الزامات را با حافظه مجازی و امکانات سیستم فایل برآورده می کنند .سیستم فایل یک
ذخیره طوالنی مدت با اطالعات ذخیره شده در اشیاء نامگذاری شده به نام فایل پیاده سازی می کند .این فایل یک مفهوم
مناسب برای برنامه نویس است و یک واحد مفید برای کنترل دسترسی و محافظت برای سیستم عامل است.
حافظه مجازی تسهیالتی است که به برنامهها اجازه میدهد تا حافظه را از نقطه نظر منطقی ،بدون توجه به مقدار حافظه اصلی
در دسترس فیزیکی ،آدرس دهی کنند .حافظه مجازی برای برآورده کردن نیاز به داشتن چندین کار کاربر به طور همزمان در
حافظه اصلی طراحی شده است ،به طوری که در زمانی که یک فرآیند در فروشگاه ثانویه نوشته می شود و فرآیند جانشین
خوانده می شود ،وقفه ای بین اجرای فرآیندهای متوالی وجود ندارد .از آنجایی که اندازه فرآیندها متفاوت است ،اگر پردازنده بین
تعدادی از فرآیندها سوئیچ کند ،بسته بندی فشرده آنها در حافظه اصلی دشوار است .سیستم های صفحه بندی معرفی شدند که
به فرآیندها اجازه می دهد از تعدادی بلوک با اندازه ثابت به نام صفحات تشکیل شوند.
یک برنامه یک کلمه را با استفاده از یک آدرس مجازی متشکل از یک شماره صفحه و یک افست در داخل صفحه ارجاع می
دهد .هر صفحه از یک فرآیند ممکن است در هر جایی از حافظه اصلی قرار داشته باشد .سیستم صفحهبندی یک نگاشت پویا
بین آدرس مجازی مورد استفاده در برنامه و یک آدرس واقعی یا آدرس فیزیکی در حافظه اصلی فراهم میکند.
با در دسترس بودن سخت افزار نگاشت پویا ،گام منطقی بعدی حذف این الزام بود که تمام صفحات یک فرآیند به طور همزمان
در حافظه اصلی قرار گیرند .تمام صفحات یک فرآیند روی دیسک نگهداری می شوند .هنگامی که یک فرآیند در حال اجرا است،
برخی از صفحات آن در حافظه اصلی هستند .اگر به صفحه ای اشاره شود که در حافظه اصلی نیست ،سخت افزار مدیریت
حافظه این موضوع را تشخیص می دهد و ترتیبی می دهد که صفحه گم شده بارگذاری شود .چنین طرحی به عنوان حافظه
مجازی نامیده می شود و در شکل 2.9نشان داده شده است.
84
سیستم عامل های داخلی و اصول طراحی85.........................................................................................................................
آدرس
واحد مدیریت واقعی
پردازنده
حافظه
آدرس حافظه
مجازی اصلی
آدرس
دیسک
حافظه
ثانویه
سخت افزار پردازنده ،همراه با سیستم عامل ،یک «پردازنده مجازی» را در اختیار کاربر قرار می دهد که به حافظه مجازی
دسترسی دارد .این حافظه ممکن است یک فضای آدرس خطی یا مجموعهای از بخشها باشد که بلوکهایی با طول متغیر از
آدرسهای پیوسته هستند .در هر صورت ،دستورالعمل های زبان برنامه نویسی می توانند به مکان های برنامه و داده ها در ناحیه
حافظه مجازی اشاره کنند .جداسازی فرآیند را می توان با دادن حافظه مجازی منحصر به فرد و بدون همپوشانی به هر فرآیند به
دست آورد .اشتراک گذاری حافظه را می توان با همپوشانی بخش هایی از دو فضای حافظه مجازی به دست آورد .فایل ها در
85
سیستم عامل های داخلی و اصول طراحی86.........................................................................................................................
یک فروشگاه طوالنی مدت نگهداری می شوند .فایل ها و بخش هایی از فایل ها ممکن است برای دستکاری توسط برنامه ها در
حافظه مجازی کپی شوند.
شکل 2.10نگرانی های مربوط به آدرس دهی در طرح حافظه مجازی را نشان می دهد .ذخیره سازی شامل حافظه اصلی قابل
آدرس دهی مستقیم توسط دستورالعمل ماشین و حافظه کمکی با سرعت پایین است که به طور غیرمستقیم با بارگذاری بلوک
ها در حافظه اصلی قابل دسترسی است .سخت افزار ترجمه آدرس واحد مدیریت حافظه بین پردازنده و حافظه قرار می گیرد.
برنامهها با استفاده از آدرسهای مجازی به مکانها اشاره میکنند که به آدرسهای حافظه اصلی واقعی نگاشت میشوند .اگر به
یک آدرس مجازی ارجاع داده شود که در حافظه حقیقی نیست ،آنگاه بخشی از محتویات حافظه حقیقی به حافظه کمکی مبادله
می شود و بلوک مورد نظر از داده ها مبادله می شود .در طی این فعالیت ،فرآیندی که مرجع آدرس را ایجاد می کند .باید تعلیق
شود .طراح سیستم عامل نیاز به ایجاد یک مکانیسم ترجمه آدرس دارد که سربار کمی ایجاد می کند و یک خط مشی تخصیص
ذخیره سازی که ترافیک بین سطوح حافظه را به حداقل می رساند.
رشد استفاده از سیستمهای اشتراک زمانی و اخیراً شبکههای کامپیوتری باعث افزایش نگرانی در مورد حفاظت از اطالعات شده
است .ماهیت تهدیدی که به یک سازمان مربوط می شود بسته به شرایط بسیار متفاوت خواهد بود .با این حال ،برخی از ابزارهای
همه منظوره وجود دارد که میتوان آنها را در رایانهها و سیستمهای عاملی که از انواع مکانیسمهای حفاظتی و امنیتی پشتیبانی
میکنند ،تعبیه کرد .به طور کلی ،ما با مشکل کنترل دسترسی به سیستم های کامپیوتری و اطالعات ذخیره شده در آنها
سروکار داریم.
بسیاری از کارهای مربوط به امنیت و حفاظت در مورد سیستم عامل ها را می توان تقریباً به چهار دسته تقسیم کرد:
-محرمانه بودن :اطمینان می دهد که کاربران نمی توانند داده هایی را که دسترسی به آنها غیرمجاز است بخوانند.
-اصالت :مربوط به تأیید صحیح هویت کاربران و اعتبار پیام ها یا داده ها است.
86
سیستم عامل های داخلی و اصول طراحی87.........................................................................................................................
مسئولیت کلیدی سیستم عامل مدیریت منابع مختلف در دسترس فضای حافظه اصلی ،دستگاه های ورودی/خروجی ،پردازنده ها
و برنامه ریزی استفاده از آنها توسط فرآیندهای فعال مختلف است .هر سیاست تخصیص منابع و برنامه ریزی باید سه عامل را در
نظر بگیرد:
-انصاف :به طور معمول ،ما می خواهیم همه فرآیندهایی که برای استفاده از یک منبع خاص رقابت می کنند ،تقریباً یکسان و
منصفانه به آن منبع دسترسی داشته باشند .این امر به ویژه برای مشاغل هم طبقه ،یعنی مشاغلی با تقاضاهای مشابه ،صادق
است.
پاسخگویی متفاوت :از سوی دیگر ،سیستم عامل ممکن است نیاز داشته باشد که بین طبقات مختلف مشاغل با الزامات خدمات
متفاوت ،تبعیض قائل شود .سیستم عامل باید تالش کند تا تصمیمات تخصیص و زمان بندی را برای برآورده ساختن کل
مجموعه الزامات اتخاذ کند.
سیستم عامل نیز باید این تصمیمات را به صورت پویا اتخاذ کند .برای مثال ،اگر فرآیندی منتظر استفاده از یک دستگاه
ورودی/خروجی باشد ،ممکن است سیستم عامل بخواهد آن فرآیند را برای اجرا در اسرع وقت برنامه ریزی کند تا دستگاه را برای
درخواست های بعدی از سایر فرآیندها آزاد کند.
-کارایی :سیستم عامل باید تالش کند تا توان عملیاتی را به حداکثر برساند ،زمان پاسخ را به حداقل برساند ،و در صورت
اشتراکگذاری زمان ،تا حد امکان کاربران را در خود جای دهد .این معیارها در تضاد هستند .یافتن تعادل مناسب برای یک
موقعیت خاص یک مشکل مداوم برای تحقیقات سیستم عامل است.
برنامه ریزی و مدیریت منابع اساساً مسائل عملیاتی-پژوهشی هستند و می توان نتایج ریاضی آن رشته را به کار برد .عالوه بر
این ،اندازه گیری فعالیت سیستم برای نظارت بر عملکرد و انجام تنظیمات مهم است.
شکل 2.11عناصر اصلی سیستم عامل را نشان می دهد که در زمان بندی فرآیندها و تخصیص منابع در یک محیط چندبرنامه
نویسی دخیل هستند .سیستم عامل تعدادی صف را نگه می دارد که هر کدام به سادگی فهرستی از فرآیندهایی هستند که
منتظر منابع هستند .صف کوتاه مدت شامل فرآیندهایی است که در حافظه اصلی هستند یا حداقل حداقل بخش ضروری از هر
کدام در حافظه اصلی است و به محض در دسترس قرار گرفتن پردازنده آماده اجرا هستند .هر یک از این فرآیندها می تواند از
پردازنده بعدی استفاده کند .انتخاب یکی از آنها به عهده برنامهریز یا توزیعکننده کوتاهمدت است .یک استراتژی متداول این
است که به هر فرآیند در صف به نوبه خود مقداری زمان داده شود .به این روش به عنوان یک تکنیک دور روبین گفته می شود.
87
سیستم عامل های داخلی و اصول طراحی88.........................................................................................................................
در واقع ،تکنیک دور رابین از یک صف دایره ای استفاده می کند .استراتژی دیگر تخصیص سطوح اولویت به فرآیندهای مختلف
است که زمانبندیکننده فرآیندها را به ترتیب اولویت انتخاب میکند.
صف طوالنی مدت لیستی از کارهای جدید است که در انتظار استفاده از پردازنده هستند .سیستم عامل با انتقال یک فرآیند از
صف طوالنی مدت به صف کوتاه مدت ،کارها را به سیستم اضافه می کند .در آن زمان ،بخشی از حافظه اصلی باید به فرآیند
ورودی اختصاص یابد .بنابراین ،سیستم عامل باید مطمئن باشد که با پذیرش فرآیندهای زیاد در سیستم ،حافظه یا زمان
پردازش را بیش از حد متعهد نمی کند .برای هر دستگاه I/Oیک صف I/Oوجود دارد .ممکن است بیش از یک فرآیند
درخواست استفاده از یک دستگاه ورودی/خروجی را داشته باشد .تمام فرآیندهایی که منتظر استفاده از هر دستگاه هستند در
صف آن دستگاه قرار می گیرند .مجدداً ،سیستم عامل باید تعیین کند که کدام فرآیند را به یک دستگاه ورودی/خروجی موجود
اختصاص دهد.
در صورت بروز وقفه ،سیستم عامل کنترل پردازنده را در کنترل کننده وقفه دریافت می کند .یک فرآیند ممکن است به طور
خاص برخی از سرویس های سیستم عامل را فراخوانی کند ،مانند کنترل کننده دستگاه I/Oبا استفاده از تماس سرویس .در
این مورد ،یک کنترل کننده تماس سرویس ،نقطه ورود به سیستم عامل است .در هر صورت ،هنگامی که وقفه یا تماس سرویس
انجام شد ،زمانبندی کوتاهمدت برای انتخاب فرآیندی برای اجرا فراخوانی میشود.
موارد فوق یک توصیف عملکردی است .جزئیات و طراحی ماژوالر این بخش از سیستم عامل در سیستم های مختلف متفاوت
است .بیشتر تالشهای تحقیق و توسعه در سیستم عامل های به انتخاب الگوریتمها و ساختارهای داده برای این تابع معطوف
شده است که انصاف ،پاسخگویی متفاوت و کارایی را ارائه میدهند.
88
سیستم عامل های داخلی و اصول طراحی89.........................................................................................................................
سیستم عامل
قطع فرآیند
کنترل کننده
وقفه (کد)
وقفه از
I/O زمانبندی کوتاه
مدت (کد)
در طول سال ها ،تکامل تدریجی ساختار و قابلیت های سیستم عامل وجود داشته است .با این حال ،در سال های اخیر تعدادی
از عناصر طراحی جدید هم در سیستم عامل های جدید و هم نسخه های جدید سیستم عامل های موجود معرفی شده اند که
تغییر عمده ای در ماهیت سیستم عامل ها ایجاد می کند .این سیستم عامل های مدرن به پیشرفت های جدید در سخت افزار،
برنامه های کاربردی جدید و تهدیدات جدید امنیتی پاسخ می دهند .از جمله محرک های سخت افزاری کلیدی می توان به
سیستم های چند پردازنده ای ،افزایش بسیار زیاد سرعت پردازنده ،پیوست های شبکه با سرعت باال و افزایش اندازه و تنوع
دستگاه های ذخیره سازی حافظه اشاره کرد .در عرصه کاربرد ،برنامه های چند رسانه ای ،دسترسی به اینترنت و وب ،و
محاسبات مشتری/سرور بر طراحی سیستم عامل تأثیر گذاشته اند .با توجه به امنیت ،دسترسی به اینترنت به رایانهها تهدید
بالقوه را به شدت افزایش داده است و حمالت پیچیدهتر مانند ویروسها ،کرمها و تکنیکهای هک تأثیر عمیقی بر طراحی
سیستمعامل داشتهاند.
نرخ تغییر در تقاضاهای سیستم عامل نه تنها به اصالحات و بهبود معماری های موجود بلکه به روش های جدیدی برای
سازماندهی سیستم عامل نیاز دارد .طیف گسترده ای از رویکردها و عناصر طراحی مختلف در سیستم عامل های تجربی و
تجاری آزمایش شده است ،اما بسیاری از کارها در دسته های زیر قرار می گیرند:
-معماری میکروکرنل
89
سیستم عامل های داخلی و اصول طراحی90.........................................................................................................................
-طراحی شی گرا
اکثر سیستم عامل ها ،تا همین اواخر ،دارای یک هسته یکپارچه بزرگ بودند .بیشتر آنچه به عنوان عملکرد سیستم عامل در نظر
گرفته می شود در این هسته های بزرگ ارائه می شود ،از جمله زمان بندی ،سیستم فایل ،شبکه ،درایورهای دستگاه ،مدیریت
حافظه و موارد دیگر .به طور معمول ،یک هسته یکپارچه به عنوان یک فرآیند واحد پیاده سازی می شود که همه عناصر فضای
آدرس یکسانی دارند.
یک معماری میکروکرنل تنها چند عملکرد ضروری را به هسته اختصاص می دهد ،از جمله فضاهای آدرس ،ارتباطات بین
فرآیندی ،IPCو زمان بندی اولیه .سایر خدمات سیستم عامل توسط فرآیندهایی ارائه می شوند که گاهی اوقات سرور نامیده
می شوند که در حالت کاربر اجرا می شوند و مانند هر برنامه دیگری توسط میکروکرنل رفتار می شود .این رویکرد توسعه هسته
و سرور را از هم جدا می کند .سرورها ممکن است برای برنامه های کاربردی یا شرایط محیطی خاص سفارشی شوند .رویکرد
میکروکرنل پیاده سازی را ساده می کند ،انعطاف پذیری را فراهم می کند و به خوبی برای یک محیط توزیع شده مناسب است.
در اصل ،یک میکروکرنل با فرآیندهای سرور محلی و راه دور به همان روش تعامل دارد و ساخت سیستم های توزیع شده را
تسهیل می کند.
Multithreadingتکنیکی است که در آن یک فرآیند ،در حال اجرای یک برنامه ،به رشته هایی تقسیم می شود که می توانند
همزمان اجرا شوند .ما می توانیم تمایز زیر را ایجاد کنیم:
: Thread -یک واحد کاری قابل ارسال .این شامل یک زمینه پردازشگر که شامل شمارنده برنامه و نشانگر پشته است و ناحیه
داده خودش برای یک پشته برای فعال کردن انشعاب زیر روال است .یک رشته به صورت متوالی اجرا می شود و قابل وقفه است
تا پردازنده بتواند به رشته دیگری تبدیل شود.
: Process -مجموعه ای از یک یا چند رشته و منابع سیستم مرتبط مانند حافظه حاوی کد و داده ،فایل های باز و دستگاه ها.
این با مفهوم برنامه در حال اجرا مطابقت دارد .برنامه نویس با تقسیم یک برنامه منفرد به چندین رشته ،کنترل زیادی بر مدوالر
بودن برنامه و زمان رویدادهای مربوط به برنامه دارد.
Multithreadingبرای برنامه هایی مفید است که تعدادی کار اساسا مستقل را انجام می دهند که نیازی به سریال سازی
ندارند .به عنوان مثال یک سرور پایگاه داده است که به درخواست های مشتری متعدد گوش می دهد و پردازش می کند .با
وجود رشتههای متعددی که در یک فرآیند اجرا میشوند ،سوئیچ کردن به سمت جلو و عقب در بین رشتهها نسبت به یک
90
سیستم عامل های داخلی و اصول طراحی91.........................................................................................................................
سوئیچ فرآیند اصلی بین فرآیندهای مختلف ،سربار پردازنده کمتری را شامل میشود .موضوعات همچنین برای ساختاردهی
فرآیندهایی که بخشی از هسته سیستم عامل هستند ،همانطور که در فصل های بعدی توضیح داده شد ،مفید هستند.
چند پردازش متقارن SMPاصطالحی است که به معماری سخت افزار کامپیوتر شرح شده در فصل 1و همچنین به رفتار
سیستم عاملی که از آن معماری سوء استفاده می کند اشاره دارد .سیستمعامل یک SMPفرآیندها یا رشتهها را در تمامی
پردازندهها زمانبندی میکند SMP .دارای چندین مزیت بالقوه نسبت به معماری تک پردازنده است ،از جمله موارد زیر:
-عملکرد :اگر کاری که باید توسط یک کامپیوتر انجام شود را بتوان به گونهای سازماندهی کرد که برخی از بخشهای کار را
بتوان به صورت موازی انجام داد ،آنگاه سیستمی با پردازندههای متعدد عملکرد بیشتری نسبت به سیستمی با یک پردازنده از
همان نوع خواهد داشت .این در شکل 2.12نشان داده شده است .با چندبرنامهنویسی ،تنها یک فرآیند میتواند در یک زمان
اجرا شود .در همین حال تمام فرآیندهای دیگر منتظر پردازنده هستند .با چند پردازش ،بیش از یک فرآیند را می توان به طور
همزمان اجرا کرد ،هر کدام بر روی یک پردازنده متفاوت.
-در دسترس بودن :در یک چند پردازنده متقارن ،چون همه پردازنده ها می توانند عملکردهای یکسانی را انجام دهند ،خرابی
یک پردازنده باعث توقف سیستم نمی شود .در عوض ،سیستم می تواند با کاهش عملکرد به کار خود ادامه دهد.
رشد فزاینده :یک کاربر می تواند عملکرد یک سیستم را با افزودن یک پردازنده اضافی افزایش دهد.
: Scaling -فروشندگان می توانند طیف وسیعی از محصوالت را با ویژگی های قیمت و عملکرد متفاوت بر اساس تعداد
پردازنده های پیکربندی شده در سیستم ارائه دهند .توجه به این نکته مهم است که اینها مزایای بالقوه و نه تضمینی هستند.
سیستم عامل باید ابزارها و عملکردهایی را برای بهره برداری از موازی سازی در یک سیستم SMPفراهم کند.
Multithreadingو SMPاغلب با هم مورد بحث قرار می گیرند ،اما این دو امکانات مستقلی هستند .حتی در یک سیستم
تک پردازنده multithreading ،برای ساختار برنامهها و فرآیندهای هسته مفید است.
یک سیستم SMPحتی برای فرآیندهای غیر رشته ای مفید است ،زیرا چندین فرآیند می توانند به صورت موازی اجرا شوند .با
این حال ،این دو امکانات مکمل یکدیگر هستند و می توانند به طور موثر در کنار هم استفاده شوند .یکی از ویژگی های جذاب
SMPاین است که وجود چندین پردازنده برای کاربر شفاف است .سیستم عامل به زمانبندی رشتهها یا فرآیندها روی
پردازندههای جداگانه و همگامسازی بین پردازندهها رسیدگی میکند .این کتاب مکانیسمهای زمانبندی و هماهنگسازی مورد
استفاده برای ارائه ظاهر یک سیستم به کاربر را مورد بحث قرار میدهد .یک مشکل متفاوت این است که ظاهر یک سیستم
واحد را برای خوشهای از رایانههای جداگانه ارائه کنیم -یک سیستم چند رایانهای .در این مورد با مجموعه ای از موجودیت ها
کامپیوترها سروکار داریم که هر کدام حافظه اصلی ،حافظه ثانویه و سایر ماژول های ورودی/خروجی خود را دارند .یک سیستم
91
سیستم عامل های داخلی و اصول طراحی92.........................................................................................................................
عامل توزیع شده توهم یک فضای حافظه اصلی واحد و یک فضای حافظه ثانویه واحد ،به عالوه سایر امکانات دسترسی یکپارچه،
مانند یک سیستم فایل توزیع شده را فراهم می کند .اگرچه خوشه ها به طور فزاینده ای محبوب می شوند و محصوالت خوشه
ای زیادی در بازار وجود دارد ،وضعیت پیشرفته سیستم عامل های توزیع شده از سیستم عامل های تک پردازنده و SMPعقب
تر است .ما در قسمت هشتم چنین سیستم هایی را بررسی می کنیم .یکی دیگر از نوآوری ها در طراحی سیستم عامل ،استفاده
از فناوری های شی گرا است .طراحی شی گرا به فرآیند افزودن پسوندهای مدوالر به یک هسته کوچک نظم می بخشد .در سطح
سیستم عامل ،یک ساختار مبتنی بر شی برنامه نویسان را قادر می سازد تا یک سیستم عامل را بدون ایجاد اختالل در
یکپارچگی سیستم شخصی سازی کنند .شی گرایی همچنین توسعه ابزارهای توزیع شده و سیستم عامل های توزیع شده کامل
را تسهیل می کند.
2.5تحمل خطا
تحمل خطا به توانایی یک سیستم یا جزء برای ادامه عملکرد عادی علیرغم وجود خطاهای سخت افزاری یا نرم افزاری اشاره
دارد .این معموالً شامل درجاتی از افزونگی است .تحمل خطا برای افزایش قابلیت اطمینان یک سیستم در نظر گرفته شده است.
به طور معمول ،افزایش تحمل خطا ،و در نتیجه افزایش قابلیت اطمینان ،با هزینه همراه است ،چه از نظر مالی یا عملکرد ،یا هر
دو .بنابراین ،میزان پذیرش اقدامات تحمل خطا باید با توجه به بحرانی بودن منبع تعیین شود.
مفاهیم اساسی
معیارهای اساسی کیفیت عملکرد یک سیستم که به تحمل خطا مربوط می شود ،قابلیت اطمینان ،میانگین زمان تا شکست
MTTFو در دسترس بودن است .این مفاهیم با ارجاع به خطاهای سخت افزاری توسعه یافته اند ،اما به طور کلی در مورد
خطاهای سخت افزاری و نرم افزاری کاربرد دارند.
92
سیستم عامل های داخلی و اصول طراحی93.........................................................................................................................
قابلیت اطمینان Rtیک سیستم به عنوان احتمال عملکرد صحیح آن تا زمان tتعریف می شود ،با توجه به اینکه سیستم در
زمان t = 0به درستی کار می کرد .برای سیستم های کامپیوتری و سیستم عامل ها ،اصطالح عملکرد صحیح به معنای اجرای
صحیح مجموعه ای از برنامه ها و محافظت از داده ها در برابر تغییرات ناخواسته .میانگین زمان شکست MTTFبه صورت
تعریف شده است
میانگین زمان تعمیر MTTRمیانگین زمان الزم برای تعمیر یا تعویض یک عنصر معیوب است .شکل 2.13رابطه بین این سه
پارامتر را نشان می دهد.
93
سیستم عامل های داخلی و اصول طراحی94.........................................................................................................................
در دسترس بودن یک سیستم یا خدمات به عنوان کسری از زمانی که سیستم برای درخواست کاربران سرویس در دسترس است
تعریف می شود .به طور معادل ،در دسترس بودن احتمالی است که یک واحد تجاری تحت شرایط معین در یک لحظه معین به
درستی عمل می کند .زمانی که در طی آن سیستم در دسترس نیست ،خرابی نامیده می شود .زمانی که در طی آن سیستم در
دسترس است uptime ،نامیده می شود .در دسترس بودن Aیک سیستم را می توان به صورت زیر بیان کرد:
جدول 2.4برخی از سطوح در دسترس بودن معموالً شناسایی شده و زمان از کار افتادگی ساالنه مربوطه را نشان می دهد.
اغلب ،میانگین زمان کار ،که MTTFاست ،نشانگر بهتری نسبت به در دسترس بودن است ،زیرا یک خرابی کوچک و ترکیبی از
زمان آپدیت کوچک ممکن است منجر به معیار دسترسی باال شود ،اما کاربران ممکن است نتوانند هیچ سرویسی را در صورت
آپتایم دریافت کنند .کمتر از زمان الزم برای تکمیل یک سرویس است.
گسل
فرهنگ لغت استاندارد IEEEخطا را به عنوان یک حالت سخت افزاری یا نرم افزاری اشتباه ناشی از خرابی جزء ،خطای اپراتور،
تداخل فیزیکی از محیط ،خطای طراحی ،خطای برنامه یا خطای ساختار داده تعریف می کند .این استاندارد همچنین بیان می
کند که یک خطا خود را به عنوان 1یک نقص در یک دستگاه یا قطعه سخت افزاری نشان می دهد .برای مثال ،اتصال کوتاه یا
سیم شکسته ،یا 2مرحله ،فرآیند یا تعریف داده نادرست در یک برنامه کامپیوتری.
-دائمی :عیبی که پس از وقوع ،همیشه وجود دارد .این عیب تا زمانی که قطعه معیوب تعویض یا تعمیر شود ادامه دارد .به
عنوان مثال می توان به خرابی هد دیسک ،اشکاالت نرم افزاری و یک جزء ارتباطات سوخته اشاره کرد.
گذرا :عیب که فقط یک بار رخ می دهد .به عنوان مثال می توان به خطاهای انتقال بیت به دلیل نویز ضربه ای ،اختالالت منبع
تغذیه و تشعشعی که بیت حافظه را تغییر می دهد ،اشاره کرد.
-متناوب :نقصی که در زمان های متعدد و غیرقابل پیش بینی رخ می دهد .یک مثال از یک خطای متناوب ،خطای ناشی از
اتصال شل است.
94
سیستم عامل های داخلی و اصول طراحی95.........................................................................................................................
به طور کلی ،تحمل خطا با اضافه کردن افزونگی در یک سیستم ساخته می شود.
-افزونگی فضایی فیزیکی :افزونگی فیزیکی شامل استفاده از چندین مؤلفه است که یا عملکرد مشابهی را به طور همزمان انجام
می دهند یا به گونه ای پیکربندی شده اند که در صورت خرابی جزء دیگر ،یک جزء به عنوان پشتیبان در دسترس باشد .مثال
اولی استفاده از مدارهای موازی چندگانه با اکثریت نتیجه تولید به عنوان خروجی است .نمونه دومی یک سرور نام پشتیبان در
اینترنت است.
-افزونگی زمانی :افزونگی زمانی شامل تکرار یک تابع یا عملیات در هنگام شناسایی خطا است .این رویکرد در مورد خطاهای
موقت مؤثر است اما برای خطاهای دائمی مفید نیست .یک مثال ،ارسال مجدد یک بلوک از داده ها در هنگام شناسایی خطا
است ،مانند آنچه با پروتکل های کنترل پیوند داده انجام می شود.
-افزونگی اطالعات :افزونگی اطالعات تحمل خطا را با تکرار یا کدگذاری داده ها به گونه ای فراهم می کند که خطاهای بیت را
بتوان هم تشخیص داد و هم اصالح کرد .یک مثال مدارهای کدگذاری کنترل خطای مورد استفاده در سیستمهای حافظه و
تکنیکهای تصحیح خطا مورد استفاده در دیسکهای RAIDاست که در فصلهای بعدی توضیح داده شد.
تعدادی از تکنیکها را میتوان در نرمافزار OSگنجاند تا از تحمل خطا پشتیبانی کند .تعدادی مثال در سراسر کتاب مشهود
خواهد بود .لیست زیر نمونه هایی را ارائه می دهد:
-جداسازی فرآیند :همانطور که قبالً در این فصل ذکر شد ،فرآیندها به طور کلی از نظر حافظه اصلی ،دسترسی به فایل و جریان
اجرا از یکدیگر جدا می شوند .ساختار ارائه شده توسط سیستم عامل برای مدیریت فرآیندها ،سطح خاصی از حفاظت را برای
سایر فرآیندها در برابر فرآیندی که خطا ایجاد می کند ،فراهم می کند.
کنترلهای همزمانی :فصلهای 5و 6برخی از مشکالت و خطاهایی را که میتوانند هنگام برقراری ارتباط یا همکاری فرآیندها
رخ دهند ،مورد بحث قرار میدهند .این فصل ها همچنین تکنیک های مورد استفاده برای اطمینان از عملکرد صحیح و بازیابی از
شرایط خطا ،مانند وقفه را مورد بحث قرار می دهند.
ماشین های مجازی :ماشین های مجازی ،که در فصل 14مورد بحث قرار گرفت ،درجه بیشتری از ایزوله سازی برنامه ها و در
نتیجه جداسازی خطا را ارائه می دهند .از ماشینهای مجازی نیز میتوان برای ایجاد افزونگی استفاده کرد ،به طوری که یک
ماشین مجازی به عنوان پشتیبان برای دیگری عمل میکند.
95
سیستم عامل های داخلی و اصول طراحی96.........................................................................................................................
-نقاط بازرسی و بازگشت :یک چک پوینت کپی از وضعیت یک برنامه است که در حافظه ذخیره شده ای ذخیره شده است که
از خرابی های مورد بررسی مصون است .بازگشت مجدد ،اجرا را از یک ایست بازرسی که قبالً ذخیره شده است ،دوباره شروع می
کند .هنگامی که خرابی رخ می دهد ،وضعیت برنامه به نقطه بازرسی قبلی برمی گردد و از آنجا دوباره راه اندازی می شود .این
تکنیک را می توان برای بازیابی از خرابی های سخت افزاری گذرا و همچنین دائمی و انواع خاصی از خرابی های نرم افزاری
استفاده کرد .پایگاه داده و سیستم های پردازش تراکنش معموالً چنین قابلیت هایی را در خود دارند .طیف وسیع تری از تکنیک
ها را می توان مورد بحث قرار داد ،اما درمان کامل تحمل خطا در سیستم عامل فراتر از محدوده ما است.
2.6مالحظات طراحی سیستم عامل برای چند پردازنده و چند هسته ای
در یک سیستم ،SMPهسته میتواند روی هر پردازندهای اجرا شود ،و معموالً هر پردازنده از مجموعه پردازشها یا رشتههای
موجود ،برنامهریزی خود را انجام میدهد .هسته را می توان به صورت چندین فرآیند یا رشته های متعدد ساخت که به بخش
هایی از هسته اجازه می دهد به صورت موازی اجرا شوند .رویکرد SMPسیستم عامل را پیچیده می کند .طراح سیستمعامل
باید با پیچیدگی ناشی از اشتراکگذاری منابع مانند ساختارهای داده و اقدامات هماهنگ مانند دسترسی به دستگاهها از چندین
بخش سیستمعامل که همزمان اجرا میشوند ،مقابله کند .برای حل و فصل و همگام سازی ادعاها با منابع باید از تکنیک هایی
استفاده شود.
یک سیستم عامل SMPپردازنده و سایر منابع کامپیوتر را مدیریت می کند تا کاربر بتواند سیستم را به همان شکلی که یک
سیستم تک پردازنده چندبرنامه نویسی مشاهده کند .یک کاربر ممکن است برنامههایی بسازد که از چندین پردازش یا رشتههای
متعدد در فرآیندها استفاده میکنند بدون توجه به اینکه یک پردازنده واحد یا چند پردازنده در دسترس خواهد بود .بنابراین،
یک سیستمعامل چند پردازندهای باید تمام عملکرد یک سیستم چندبرنامهنویسی بهعالوه ویژگیهای اضافی را برای گنجاندن
چندین پردازنده فراهم کند .مسائل کلیدی طراحی شامل موارد زیر است:
-فرآیندها یا رشتههای همزمان همزمان :روالهای هسته باید مجدداً وارد شوند تا به چندین پردازنده اجازه دهند تا کد هسته
یکسانی را به طور همزمان اجرا کنند .با چندین پردازنده که بخش های مشابه یا متفاوتی از هسته را اجرا می کنند ،جداول
هسته و ساختارهای مدیریتی باید به درستی مدیریت شوند تا از خراب شدن داده ها یا عملیات نامعتبر جلوگیری شود.
-زمانبندی :هر پردازنده ممکن است زمانبندی را انجام دهد ،که کار اجرای یک خطمشی زمانبندی و اطمینان از جلوگیری از
تخریب ساختارهای داده زمانبندی را پیچیده میکند .اگر از multithreadingدر سطح هسته استفاده شود ،آنگاه این فرصت
96
سیستم عامل های داخلی و اصول طراحی97.........................................................................................................................
وجود دارد که چندین رشته را از یک فرآیند به طور همزمان در چندین پردازنده برنامه ریزی کنیم .زمان بندی چند پردازنده ای
در فصل 10مورد بررسی قرار گرفته است.
-همگام سازی :با داشتن چندین فرآیند فعال که دسترسی بالقوه به فضاهای آدرس مشترک یا منابع ورودی/خروجی مشترک
دارند ،باید دقت کرد تا همگام سازی موثری فراهم شود .همگام سازی تسهیالتی است که حذف متقابل و سفارش رویداد را
اعمال می کند .یک مکانیسم همگام سازی رایج که در سیستم عامل های چند پردازنده ای استفاده می شود قفل است که در
فصل 5توضیح داده شده است.
-مدیریت حافظه :مدیریت حافظه در یک چند پردازنده باید با تمام مسائلی که در کامپیوترهای تک پردازنده وجود دارد
رسیدگی کند و در قسمت سوم مورد بحث قرار گرفته است .عالوه بر این ،سیستم عامل باید از موازی سازی سخت افزاری
موجود برای دستیابی به بهترین عملکرد استفاده کند .مکانیسمهای صفحهبندی در پردازندههای مختلف باید برای ایجاد
یکپارچگی زمانی که چندین پردازنده یک صفحه یا بخش را به اشتراک میگذارند و برای تصمیمگیری در مورد جایگزینی
صفحه ،هماهنگ شوند .استفاده مجدد از صفحات فیزیکی بزرگترین مشکل نگرانی است .یعنی باید تضمین شود که یک صفحه
فیزیکی دیگر نمی تواند با محتویات قدیمی آن قبل از استفاده جدید از صفحه مورد استفاده قرار گیرد.
-قابلیت اطمینان و تحمل خطا :سیستم عامل باید در مواجهه با خرابی پردازنده ،تخریب خوبی را ارائه دهد .زمانبندی و سایر
بخشهای سیستمعامل باید از دست رفتن پردازنده را تشخیص دهند و جداول مدیریت را بر این اساس بازسازی کنند.
از آنجایی که مسائل طراحی سیستمعامل چند پردازنده معموالً شامل الحاقات راهحلهایی برای مشکالت طراحی تکپردازنده
چندبرنامهنویسی میشود ،ما سیستم عامل های چند پردازنده را جداگانه بررسی نمیکنیم .در عوض ،مسائل چند پردازنده خاص
در زمینه مناسب در سراسر این کتاب مورد بررسی قرار گرفته است.
مالحظات مربوط به سیستم های چند هسته ای شامل تمام مسائل طراحی است که تاکنون در این بخش برای سیستم های
SMPمورد بحث قرار گرفته است .اما نگرانی های اضافی ایجاد می شود .موضوع یکی از مقیاس های توازی بالقوه است.
فروشندگان چند هسته ای کنونی سیستم هایی با حداکثر هشت هسته روی یک تراشه ارائه می دهند .با هر نسل بعدی فناوری
پردازنده ،تعداد هستهها و مقدار حافظه نهان مشترک و اختصاصی افزایش مییابد ،به طوری که اکنون وارد عصر سیستمهای
«چند هستهای» میشویم.
97
سیستم عامل های داخلی و اصول طراحی98.........................................................................................................................
چالش طراحی برای یک سیستم چند هستهای چند هستهای این است که بهطور کارآمد قدرت پردازش چند هستهای را مهار
کند و منابع مهم روی تراشه را به طور مؤثر مدیریت کند .یک نگرانی اصلی این است که چگونه می توان موازی ذاتی یک
سیستم چند هسته ای را با الزامات عملکرد برنامه ها مطابقت داد.
پتانسیل برای موازی سازی در واقع در سه سطح در سیستم چند هسته ای معاصر وجود دارد .اول ،موازی سازی سخت افزاری
در هر پردازنده اصلی وجود دارد که به عنوان موازی سازی سطح دستورالعمل شناخته می شود ،که ممکن است توسط برنامه
نویسان و اجرارهای برنامه مورد سوء استفاده قرار گیرد یا نباشد .دوم ،پتانسیل برای چندبرنامهنویسی و اجرای چند رشتهای در
هر پردازنده وجود دارد .در نهایت ،این پتانسیل برای اجرای یک برنامه واحد در فرآیندهای همزمان یا رشته ها در چندین هسته
وجود دارد .بدون پشتیبانی قوی و مؤثر سیستمعامل برای دو نوع موازی اخیر که قبالً ذکر شد ،منابع سختافزاری بهطور مؤثر
استفاده نمیشوند.
بنابراین ،در اصل ،از زمان ظهور فناوری چند هستهای ،طراحان سیستمعامل با این مشکل دست و پنجه نرم میکنند که چگونه
میتوانند موازیسازی را از بارهای کاری محاسباتی استخراج کنند .رویکردهای مختلفی برای سیستم عامل های نسل بعدی در
حال بررسی است .در این بخش دو استراتژی کلی را معرفی می کنیم و در فصل های بعدی به بررسی جزئیات می پردازیم.
موازی سازی درون برنامه ها اغلب برنامه ها را می توان در اصل به وظایف متعددی تقسیم کرد که می توانند به صورت موازی
اجرا شوند ،با این کارها سپس به عنوان چندین فرآیند ،شاید هر کدام دارای چندین رشته ،پیاده سازی شوند .مشکل این است
که توسعهدهنده باید تصمیم بگیرد که چگونه کار برنامه را به وظایف مستقل اجرایی تقسیم کند .یعنی توسعه دهنده باید
تصمیم بگیرد که چه قطعاتی می توانند یا باید به صورت ناهمزمان یا موازی اجرا شوند .این در درجه اول اجرار و ویژگی های
زبان برنامه نویسی است که از فرآیند طراحی برنامه نویسی موازی پشتیبانی می کند .اما ،سیستم عامل حداقل میتواند با
تخصیص کارآمد منابع در میان وظایف موازی که توسط توسعهدهنده تعریف شده است ،از این فرآیند طراحی پشتیبانی کند.
یکی از موثرترین ابتکارات برای حمایت از توسعه دهندگان Grand Central Dispatch GCD ،است که در آخرین نسخه
سیستم عامل Mac OS Xمبتنی بر یونیکس و سیستم عامل های iPhone iOSپیاده سازی شده است GCD .یک قابلیت
پشتیبانی چند هسته ای است.
این به توسعه دهنده کمک نمی کند که چگونه یک کار یا برنامه را به بخش های همزمان جداگانه تقسیم کند .اما زمانی که یک
توسعهدهنده چیزی را شناسایی کرد که میتوان آن را به یک کار جداگانه تقسیم کرد GCD ،انجام آن را تا حد امکان آسان و
غیرتهاجمی میکند.
در اصل GCD ،یک مکانیسم thread poolاست که در آن سیستم عامل وظایف را بر روی رشتههایی ترسیم میکند که
نشاندهنده یک درجه همزمانی موجود است به عالوه رشتههایی برای مسدود کردن در .I/Oویندوز همچنین دارای مکانیزم
98
سیستم عامل های داخلی و اصول طراحی99.........................................................................................................................
Thread Poolاست از سال 2000و Thread Poolسالها به شدت در برنامه های سرور استفاده می شود .آنچه در GCD
جدید است ،گسترش زبان های برنامه نویسی است که به توابع ناشناس به نام بلوک به عنوان راهی برای تعیین وظایف اجازه می
دهد .بنابراین GCDیک گام تکاملی بزرگ نیست .با این وجود ،این ابزار جدید و ارزشمندی برای بهره برداری از موازی سازی
موجود در یک سیستم چند هسته ای است.
یکی از شعارهای اپل برای " GCDجزایر سریال سازی در دریای همزمانی" است .این واقعیت عملی افزودن همزمانی بیشتر به
برنامه های کاربردی دسکتاپ رایج را نشان می دهد .این جزایر همان چیزی هستند که توسعه دهندگان را از مشکالت دشوار
دسترسی همزمان به داده ها ،وقفه و سایر مشکالت چند رشته ای جدا می کنند .توسعه دهندگان تشویق می شوند تا
عملکردهایی از برنامه های خود را شناسایی کنند که بهتر است از رشته اصلی اجرا شوند ،حتی اگر از چندین کار متوالی یا تا
حدی وابسته به یکدیگر تشکیل شده باشند GCD .با حفظ نظم موجود و وابستگیهای بین وظایف فرعی ،شکستن کل واحد
کار را آسان میکند .در فصل های بعدی ،به برخی از جزئیات GCDنگاه می کنیم .رویکرد ماشین مجازی یک رویکرد جایگزین
این است که تشخیص دهیم با افزایش روزافزون تعداد هستهها روی یک تراشه ،تالش برای چندبرنامهنویسی هستههای جداگانه
برای پشتیبانی از چندین برنامه ممکن است استفاده نادرست از منابع باشد .JACK10اگر در عوض ،اجازه دهیم یک یا چند
هسته به یک فرآیند خاص اختصاص داده شود و سپس پردازنده را به حال خود رها کنیم تا تالش خود را به آن فرآیند اختصاص
دهد ،از بسیاری از هزینههای سربار تصمیمهای تغییر وظایف و زمانبندی اجتناب میکنیم .سیستمعامل چند هستهای میتواند
بهعنوان یک Hypervisorعمل کند که تصمیمگیری در سطح باالیی برای تخصیص هستهها به برنامهها میگیرد ،اما در
تخصیص منابع ،فراتر از آن ،کار چندانی انجام نمیدهد.
دلیل این رویکرد به شرح زیر است .در روزهای اولیه محاسبات ،یک برنامه روی یک پردازنده اجرا می شد .با چندبرنامهنویسی ،به
هر برنامه این توهم داده میشود که روی یک پردازنده اختصاصی اجرا میشود .چندبرنامه نویسی بر اساس مفهوم یک فرآیند
است که انتزاعی از یک محیط اجرا است .برای مدیریت فرآیندها ،سیستم عامل به فضای محافظت شده ،عاری از تداخل کاربر و
برنامه نیاز دارد .برای این منظور ،تمایز بین حالت هسته و حالت کاربر ایجاد شد .در واقع ،حالت هسته و حالت کاربر ،پردازنده را
به دو پردازنده انتزاعی میکنند .با این حال ،با تمام این پردازندههای مجازی ،بحث بر سر اینکه چه کسی توجه پردازنده واقعی را
به خود جلب میکند ،پیش میآید .سربار سوئیچینگ بین تمامی این پردازندهها شروع به افزایش میکند تا جایی که پاسخگویی
کاهش مییابد ،به خصوص زمانی که چندین هسته معرفی میشوند .اما با سیستمهای چند هستهای ،میتوانیم تمایز بین حالت
هسته و کاربر را حذف کنیم.
در این رویکرد ،سیستم عامل بیشتر شبیه یک Hypervisorعمل می کند .خود برنامه ها بسیاری از وظایف مدیریت منابع را
بر عهده می گیرند .سیستم عامل به یک برنامه یک پردازنده و مقداری حافظه اختصاص می دهد و خود برنامه با استفاده از
ابرداده های تولید شده توسط اجرار ،بهتر می داند که چگونه از این منابع استفاده کند.
99
سیستم عامل های داخلی و اصول طراحی100.........................................................................................................................
زمینه
مایکروسافت در ابتدا از نام Windowsدر سال 1985برای توسعه محیط عملیاتی به سیستم عامل اولیه MS-DOSاستفاده
کرد که یک سیستم عامل موفق در رایانه های شخصی اولیه بود .این ترکیب Windows/MS-DOSدر نهایت با نسخه
جدیدی از ویندوز ،معروف به ،Windows NTکه برای اولین بار در سال 1993منتشر شد ،جایگزین شد .طرح .هسته ویندوز
،NTمتشکل از هسته و ،Executiveبرای ماشین های 32بیتی طراحی شده و شامل تعدادی ویژگی شی گرا می باشد.
ویندوز با هر نسخه جدید به تکامل خود ادامه داده است .آخرین نسخه از این دست ،در زمان نگارش این مقاله ،ویندوز 8است.
ویندوز 8نشان دهنده مهم ترین تغییر در ویندوز از زمان معرفی NTاست .ویندوز 8برای کار در طیف گسترده ای از دستگاه
ها ،از جمله رایانه های شخصی ،لپ تاپ ها ،تبلت ها و رایانه های شخصی سینمای خانگی طراحی شده است .ویندوز 8تغییرات
عمده ای را در پلتفرم و رابط کاربری سیستم عامل ایجاد کرد تا تجربه کاربری خود را در دستگاه هایی مانند تبلت بهبود بخشد.
این تغییرات شامل پوسته ای بهینه شده با لمس بر اساس زبان طراحی مترو مایکروسافت بود.
پیشرفتهای زیادی در طراحی ویندوز NTاز زمان معرفی آن وجود داشته است ،از جمله جداسازی نسخههای سرویس گیرنده
و سرور ،اما در سطح جزئیات این بخش ،هسته و Executiveاساساً همان ساختار داخلی را حفظ کردهاند .با این حال ،با
ویندوز ،8تغییرات اساسی در قسمت داخلی سیستم عامل ،به خصوص در زمینه مدیریت فرآیند و مدیریت حافظه مجازی ایجاد
شده است .این ویژگی های داخلی ویندوز 8در فصل های بعدی مورد بحث قرار می گیرد.
معماری
شکل 2.14ساختار کلی ویندوز 8را نشان می دهد .مانند تقریباً تمام سیستم عامل ها ،ویندوز نرم افزار برنامه گرا را از نرم افزار
اصلی سیستم عامل جدا می کند .دومی که شامل ،Kernel ،Executiveدرایورهای دستگاه و الیه انتزاعی سخت افزار است،
در حالت هسته اجرا می شود .نرم افزار حالت هسته به داده های سیستم و سخت افزار دسترسی دارد .نرم افزار باقی مانده که در
حالت کاربر اجرا می شود ،دسترسی محدودی به داده های سیستم دارد .سازماندهی سیستم عامل ویندوز دارای معماری بسیار
ماژوالر است .هر عملکرد سیستم تنها توسط یک جزء از سیستم عامل مدیریت می شود .بقیه سیستمعامل و همه برنامهها از
طریق مؤلفه مسئول با استفاده از رابطهای استاندارد به آن عملکرد دسترسی دارند .اطالعات کلیدی سیستم فقط از طریق
عملکرد مناسب قابل دسترسی است .در اصل ،هر ماژول را می توان بدون بازنویسی کل سیستم یا رابط های برنامه کاربردی
استاندارد آن APIحذف ،ارتقا یا جایگزین کرد.
100
سیستم عامل های داخلی و اصول طراحی101.........................................................................................................................
:r Executiveشامل خدمات اصلی سیستم عامل ،مانند مدیریت حافظه ،مدیریت فرآیند و رشته ،امنیت I/O ،و ارتباطات بین
فرآیندی است.
: Kernel -اجرای پردازنده ها را کنترل می کند .هسته برنامه ریزی رشته ،تغییر فرآیند ،مدیریت استثنا و وقفه و همگام سازی
چند پردازنده را مدیریت می کند .برخالف بقیه سطوح اجرایی و کاربر ،کد خود کرنل در رشته ها اجرا نمی شود.
-الیه انتزاعی سخت افزار :HALبین دستورات و پاسخ های سخت افزاری عمومی و آنهایی که برای یک پلتفرم خاص منحصر
به فرد هستند ،نقشه می کشد .این سیستم عامل را از تفاوت های سخت افزاری خاص پلت فرم جدا می کند HAL .باعث می
شود گذرگاه سیستم هر کامپیوتر ،کنترل کننده دسترسی مستقیم به حافظه ،DMAکنترل کننده وقفه ،تایمرهای سیستم و
کنترل کننده حافظه برای اجزای Executiveو Kernelیکسان به نظر برسند .همچنین پشتیبانی مورد نیاز برای SMPرا
که متعاقباً توضیح داده شد ،ارائه می کند.
-درایورهای دستگاه :کتابخانه های پویا که عملکرد Executiveرا گسترش می دهند .اینها شامل درایورهای دستگاه
سختافزاری است که فراخوانیهای عملکرد ورودی/خروجی کاربر را به درخواستهای ورودی/خروجی دستگاه سختافزاری
خاص و اجزای نرمافزاری برای پیادهسازی سیستمهای فایل ،پروتکلهای شبکه و هر برنامه افزودنی دیگری که نیاز به اجرا در
حالت هسته دارند ،ترجمه میکنند.
-پنجرهسازی و سیستم گرافیکی :عملکردهای رابط کاربری گرافیکی ،مانند کار با ویندوز ،کنترلهای رابط کاربر ،و طراحی را
پیادهسازی میکند.
101
سیستم عامل های داخلی و اصول طراحی102.........................................................................................................................
Windows Executiveشامل اجزایی برای عملکردهای خاص سیستم است و یک APIبرای نرم افزار حالت کاربر ارائه می
دهد .در زیر شرح مختصری از هر یک از ماژول های اجرایی آورده شده است:
-مدیریت ورودی/خروجی :چارچوبی را ارائه میکند که از طریق آن دستگاههای ورودی/خروجی برای برنامهها قابل دسترسی
هستند و مسئول ارسال به درایورهای دستگاه مناسب برای پردازش بیشتر است .مدیر I/Oهمه APIهای I/Oویندوز را
پیادهسازی میکند و امنیت و نامگذاری دستگاهها ،پروتکلهای شبکه و سیستمهای فایل با استفاده از مدیر شی را اعمال
میکند Windows I/O .در فصل 11مورد بحث قرار گرفته است.
:r Cache managerعملکرد ورودی/خروجی مبتنی بر فایل را بهبود میبخشد و باعث میشود دادههای فایلی که اخیراً به
آنها ارجاع داده شده است در حافظه اصلی برای دسترسی سریع باقی بماند و با نگه داشتن بهروزرسانیها در حافظه برای مدت
کوتاهی قبل از ارسال به حافظه ،نوشتن دیسک را به تعویق بیاندازد .دیسک در دسته های کارآمدتر.
:r Object managerاشیاء اجرایی ویندوز را ایجاد ،مدیریت و حذف می کند که برای نمایش منابعی مانند فرآیندها ،رشته ها
و اشیاء همگام سازی استفاده می شوند .قوانین یکسانی را برای حفظ ،نامگذاری و تنظیم امنیت اشیا اعمال می کند .مدیر شیء
همچنین ورودیهایی را در جدول دسته هر فرآیند ایجاد میکند که شامل اطالعات کنترل دسترسی و اشارهگر به شی است.
اشیاء ویندوز بعداً در این بخش مورد بحث قرار می گیرند.
:r Plug-and-play managerتعیین می کند که کدام درایورها برای پشتیبانی از یک دستگاه خاص مورد نیاز هستند و آن
درایورها را بارگیری می کند.
:r Power Managerمدیریت توان را در بین دستگاههای مختلف هماهنگ میکند و میتواند برای کاهش مصرف انرژی با
خاموش کردن دستگاههای بیحرکت ،خواباندن پردازنده ،و حتی نوشتن تمام حافظه روی دیسک و قطع برق کل سیستم
پیکربندی شود.
-نظارت بر مرجع امنیتی :قوانین دسترسی-اعتبار و ممیزی-تولید را اعمال می کند .مدل شی گرا ویندوز اجازه می دهد تا یک
دید منسجم و یکسان از امنیت ،درست تا موجودیت های اساسی که Executiveرا تشکیل می دهند ،داشته باشد .بنابراین،
ویندوز از روالهای یکسانی برای اعتبارسنجی دسترسی و برای بررسی ممیزی برای همه اشیاء محافظتشده ،از جمله فایلها،
فرآیندها ،فضاهای آدرس و دستگاههای ورودی/خروجی استفاده میکند .امنیت ویندوز در فصل 15مورد بحث قرار گرفته است.
-مدیریت حافظه مجازی :آدرس های مجازی ،حافظه فیزیکی و فایل های صفحه بندی روی دیسک را مدیریت می کند .سخت
افزار مدیریت حافظه و ساختارهای داده را کنترل می کند که آدرس های مجازی در فضای آدرس فرآیند را به صفحات فیزیکی
در حافظه رایانه ترسیم می کند .مدیریت حافظه مجازی ویندوز در فصل 8توضیح داده شده است.
102
سیستم عامل های داخلی و اصول طراحی103.........................................................................................................................
:r Process/thread managerاشیاء فرآیند و رشته را ایجاد ،مدیریت و حذف می کند .فرآیند ویندوز و مدیریت رشته در
فصل 4توضیح داده شده است.
:r Configuration Managerمسئول پیاده سازی و مدیریت رجیستری سیستم است که مخزن تنظیمات پارامترهای
مختلف در سطح سیستم و هر کاربر است.
-تسهیالت فراخوانی رویه محلی پیشرفته :ALPCیک مکانیسم فراخوانی رویه متقابل کارآمد را برای ارتباط بین فرآیندهای
محلی که خدمات و زیرسیستمها را پیادهسازی میکنند ،پیادهسازی میکند .مشابه تسهیالت فراخوانی روش از راه دور RPC
که برای پردازش توزیع شده استفاده می شود.
فرآیندهای حالت کاربر ویندوز از چهار نوع اساسی فرآیندهای حالت کاربر پشتیبانی می کند:
-فرآیندهای سیستم خاص :خدمات حالت کاربر مورد نیاز برای مدیریت سیستم ،مانند مدیر جلسه ،سیستم فرعی احراز هویت،
مدیر سرویس و فرآیند ورود به سیستم.
-فرآیندهای سرویس :اسپولر چاپگر ،گزارشگر رویداد ،اجزای حالت کاربر که با درایورهای دستگاه همکاری می کنند ،سرویس
های مختلف شبکه ،و بسیاری ،بسیاری دیگر .سرویسها هم توسط مایکروسافت و هم توسعهدهندگان نرمافزار خارجی برای
گسترش عملکرد سیستم استفاده میشوند ،زیرا تنها راه برای اجرای فعالیتهای حالت کاربر پسزمینه در سیستم ویندوز
هستند.
-زیرسیستم های محیطی :شخصیت های مختلف سیستم عامل محیط را ارائه می دهد .زیرسیستم های پشتیبانی شده
Win32و POSIXهستند .هر زیرسیستم محیطی شامل یک فرآیند زیرسیستمی است که در بین همه برنامهها با استفاده از
زیرسیستم و کتابخانههای پیوند پویا DLLبه اشتراک گذاشته میشود که تماسهای برنامه کاربر را به تماسهای ALPCدر
فرآیند زیرسیستم و/یا تماسهای بومی ویندوز تبدیل میکند.
-برنامههای کاربردی کاربر :فایلهای اجرایی EXEو DLLهایی که عملکردی را که کاربران برای استفاده از سیستم اجرا
میکنند ،فراهم میکنند EXE .ها و DLLها عموماً در یک زیرسیستم محیطی خاص هدف قرار می گیرند .اگرچه برخی از
برنامه هایی که به عنوان بخشی از سیستم عامل ارائه می شوند از رابط های سیستم بومی NT APIاستفاده می کنند.
همچنین از اجرای برنامه های 32بیتی در سیستم های 64بیتی پشتیبانی می شود.
ویندوز برای پشتیبانی از برنامه های کاربردی نوشته شده برای چندین شخصیت سیستم عامل ساخته شده است .ویندوز این
پشتیبانی را با استفاده از مجموعهای از اجزای حالت هسته که زیر سیستمهای فرعی محیط سیستمعامل هستند ،فراهم میکند.
اجرای هر زیرسیستم محیطی شامل یک فرآیند جداگانه است که شامل ساختارهای داده مشترک ،امتیازات و دسته های اجرایی
103
سیستم عامل های داخلی و اصول طراحی104.........................................................................................................................
مورد نیاز برای پیاده سازی یک شخصیت خاص است .هنگامی که اولین برنامه از این نوع شروع می شود ،این فرآیند توسط
Session Managerویندوز شروع می شود .فرآیند زیرسیستم به عنوان یک کاربر سیستم اجرا می شود ،بنابراین
Executiveاز فضای آدرس خود در برابر فرآیندهای اجرا شده توسط کاربران عادی محافظت می کند .یک زیرسیستم محیطی
یک کاربر گرافیکی یا خط فرمان را فراهم می کند.
چهره ای که ظاهر و احساس سیستم عامل را برای کاربر تعریف می کند .عالوه بر این ،هر زیرسیستم APIرا برای آن محیط
خاص فراهم می کند .این بدان معنی است که برنامه های ایجاد شده برای یک محیط عامل خاص فقط برای اجرا در ویندوز نیاز
به اجرا مجدد دارند .از آنجایی که رابط سیستم عاملی که آنها می بینند همان است که برای آن نوشته شده است ،کد منبع
نیازی به تغییر ندارد.
مدل مشتری/سرور
سرویسهای سیستمعامل ویندوز ،زیرسیستمهای محیطی و برنامههای کاربردی با استفاده از مدل محاسباتی مشتری/سرور ،که
یک مدل رایج برای محاسبات توزیعشده است و در قسمت ششم مورد بحث قرار گرفته است ،ساختار یافتهاند .همین معماری را
می توان برای استفاده داخلی در یک سیستم منفرد استفاده کرد ،همانطور که در مورد ویندوز وجود دارد.
APIبومی NTمجموعه ای از خدمات مبتنی بر هسته است که انتزاعات اصلی مورد استفاده توسط سیستم مانند فرآیندها،
رشته ها ،حافظه مجازی I/O ،و ارتباطات را ارائه می کند .ویندوز مجموعه بسیار غنی تری از خدمات را با استفاده از مدل
سرویس گیرنده/سرور برای پیاده سازی عملکرد در فرآیندهای حالت کاربر ارائه می دهد .هم زیرسیستم های محیطی و هم
سرویس های حالت کاربر ویندوز به عنوان فرآیندهایی اجرا می شوند که از طریق RPCبا مشتریان ارتباط برقرار می کنند .هر
فرآیند سرور منتظر درخواست مشتری برای یکی از خدمات خود مانند خدمات حافظه ،خدمات ایجاد فرآیند یا خدمات شبکه
است .یک کالینت که می تواند یک برنامه کاربردی یا یک برنامه سرور دیگر باشد ،با ارسال یک پیام خدماتی را درخواست می
کند .پیام از طریق Executiveبه سرور مناسب هدایت می شود .سرور عملیات درخواستی را انجام می دهد و نتایج یا اطالعات
وضعیت را با استفاده از پیام دیگری که از طریق Executiveبه مشتری ارسال می شود ،برمی گرداند.
-این Executiveرا ساده می کند .ساخت انواع APIهای پیاده سازی شده در سرورهای حالت کاربر بدون هیچ گونه تضاد یا
تکراری در Executiveامکان پذیر است API .های جدید را می توان به راحتی اضافه کرد.
-قابلیت اطمینان را بهبود می بخشد .هر سرور جدید خارج از هسته اجرا می شود ،با پارتیشن حافظه مخصوص به خود که از
سرورهای دیگر محافظت می شود .یک سرور میتواند بدون از کار افتادن یا خراب کردن بقیه سیستمعامل از کار بیفتد.
104
سیستم عامل های داخلی و اصول طراحی105.........................................................................................................................
-این ابزار یکنواختی را برای برنامهها فراهم میکند تا با سرویسها از طریق RPCبدون محدودیت انعطافپذیری ارتباط برقرار
کنند .فرآیند ارسال پیام از برنامه های کاربردی کالینت توسط خردهای تابع پنهان می شود ،که قطعات کوچکی از کد هستند
که فراخوانی RPCرا می پوشانند .هنگامی که یک برنامه کاربردی یک فراخوانی APIبا یک زیرسیستم محیطی یا یک
سرویس برقرار می کند ،قسمت خرد در برنامه مشتری پارامترهای تماس را بسته بندی می کند و آنها را به عنوان یک پیام به
فرآیند سروری که تماس را اجرا می کند ارسال می کند.
-پایه مناسبی برای محاسبات توزیع شده فراهم می کند .به طور معمول ،محاسبات توزیع شده از یک مدل کالینت/سرور ،با
فراخوانی رویه از راه دور که با استفاده از ماژول های کالینت و سرور توزیع شده و تبادل پیام بین کالینت ها و سرورها اجرا می
شود ،استفاده می کند .با ویندوز ،یک سرور محلی می تواند پیامی را برای پردازش از طرف برنامه های مشتری محلی به یک
سرور راه دور ارسال کند .مشتریان نیازی ندارند بدانند که آیا درخواست به صورت محلی یا از راه دور انجام می شود .در واقع،
اینکه یک درخواست به صورت محلی یا از راه دور سرویس میشود ،میتواند به صورت پویا بر اساس شرایط بار فعلی و تغییرات
پیکربندی پویا تغییر کند.
موضوعات و SMP
دو ویژگی مهم ویندوز پشتیبانی آن از threadها و چند پردازش متقارن SMPاست که هر دو در بخش 2.4معرفی شدند.
RUSS11ویژگیهای زیر ویندوز را فهرست میکند که از رشتهها و SMPپشتیبانی میکنند:
-روال های سیستم عامل می توانند روی هر پردازنده موجود اجرا شوند و روال های مختلف می توانند به طور همزمان روی
پردازنده های مختلف اجرا شوند.
-ویندوز از استفاده از چندین رشته اجرا در یک فرآیند پشتیبانی می کند .چندین رشته در یک فرآیند ممکن است به طور
همزمان روی پردازنده های مختلف اجرا شوند.
-فرآیندهای سرور ممکن است از چندین رشته برای پردازش درخواستهای بیش از یک مشتری به طور همزمان استفاده کنند.
-ویندوز مکانیسم هایی را برای به اشتراک گذاری داده ها و منابع بین فرآیندها و قابلیت های ارتباط بین فرآیندی انعطاف پذیر
فراهم می کند.
105
سیستم عامل های داخلی و اصول طراحی106.........................................................................................................................
اشیاء ویندوز
اگرچه هسته ویندوز به زبان Cنوشته شده است ،اما اصول طراحی که دنبال میشوند به شدت بر مفاهیم طراحی شی گرا استوار
است .این رویکرد به اشتراک گذاری منابع و داده ها در بین فرآیندها و محافظت از منابع از دسترسی غیرمجاز را تسهیل می
کند .از جمله مفاهیم کلیدی شی گرا که توسط ویندوز استفاده می شود موارد زیر است:
:r Encapsulationیک شی شامل یک یا چند مورد از داده ها به نام ویژگی ها و یک یا چند رویه است که ممکن است روی
آن داده ها انجام شود که سرویس نامیده می شود .تنها راه دسترسی به داده های موجود در یک شی ،فراخوانی یکی از سرویس
های شی است .بنابراین ،داده های موجود در شی را می توان به راحتی از استفاده غیرمجاز و از استفاده نادرست محافظت کرد
به عنوان مثال ،تالش برای اجرای یک قطعه داده غیرقابل اجرا.
-کالس و نمونه شی :کالس شیء الگویی است که صفات و خدمات یک شی را فهرست می کند و ویژگی های شی معینی را
تعریف می کند .سیستم عامل می تواند در صورت نیاز نمونه های خاصی از یک کالس شی ایجاد کند .به عنوان مثال ،یک
کالس شیء فرآیندی و یک شیء پردازشی برای هر فرآیند فعال فعلی وجود دارد .این رویکرد ایجاد و مدیریت شی را ساده می
کند.
-وراثت :اگرچه پیاده سازی به صورت دستی کدگذاری شده است Executive ،از وراثت برای گسترش کالس های شی با
افزودن ویژگی های جدید استفاده می کند.
هر کالس Executiveبر اساس یک کالس پایه است که متدهای مجازی را مشخص می کند که از ایجاد ،نامگذاری ،ایمن
سازی و حذف اشیا پشتیبانی می کند .اشیاء Dispatcherاشیاء اجرایی هستند که خصوصیات یک شی رویداد را به ارث می
برند ،بنابراین می توانند از روش های همگام سازی رایج استفاده کنند .انواع شی خاص دیگر ،مانند کالس دستگاه ،به کالس
هایی برای دستگاه های خاص اجازه می دهد تا از کالس پایه به ارث برده شوند و داده ها و متدهای اضافی را اضافه کنند.
:r Polymorphismدر داخل ،ویندوز از مجموعه مشترکی از توابع APIبرای دستکاری اشیا از هر نوع استفاده می کند .این
یکی از ویژگی های چندشکلی است ،همانطور که در ضمیمه Dتعریف شده است .با این حال ،ویندوز کامالً چندشکلی نیست
زیرا APIهای زیادی وجود دارند که مختص یک نوع شی منفرد هستند .خواننده ای که با مفاهیم شی گرا آشنا نیست باید
پیوست Dرا مرور کند.
همه موجودیت ها در ویندوز شی نیستند .اشیاء در مواردی استفاده میشوند که دادهها برای دسترسی به حالت کاربر در نظر
گرفته شدهاند یا زمانی که دسترسی به دادهها به اشتراک گذاشته یا محدود شده است .در میان موجودیت هایی که توسط اشیاء
نشان داده می شوند ،می توان به فایل ها ،پردازش ها ،رشته ها ،سمافورها ،تایمرها و پنجره های گرافیکی اشاره کرد .ویندوز
106
سیستم عامل های داخلی و اصول طراحی107.........................................................................................................................
همه انواع اشیاء را به صورت یکنواخت و از طریق مدیر شی ایجاد و مدیریت می کند .مدیر شی مسئول ایجاد و از بین بردن اشیا
از طرف برنامه ها و اعطای دسترسی به خدمات و داده های یک شی است.
هر شی در ،Executiveکه گاهی به عنوان یک شی هسته برای متمایز کردن از اشیاء سطح کاربر که مورد توجه Executive
نیستند نامیده می شود ،به عنوان یک بلوک حافظه اختصاص داده شده توسط هسته وجود دارد و مستقیماً فقط توسط اجزای
حالت هسته قابل دسترسی است .برخی از عناصر ساختار داده به عنوان مثال ،نام شی ،پارامترهای امنیتی ،تعداد استفاده برای
همه انواع شی مشترک هستند ،در حالی که عناصر دیگر مختص یک نوع شی خاص هستند به عنوان مثال ،اولویت یک شی
.threadاز آنجایی که این ساختارهای داده شی در بخشی از فضای آدرس هر فرآیند هستند که فقط توسط هسته قابل
دسترسی است ،برای یک برنامه کاربردی غیرممکن است که به این ساختارهای داده ارجاع داده و مستقیماً آنها را بخواند یا
بنویسد .در عوض ،برنامه ها اشیاء را به طور غیر مستقیم از طریق مجموعه ای از توابع دستکاری شی که توسط Executive
پشتیبانی می شوند ،دستکاری می کنند .هنگامی که یک شی ایجاد می شود ،برنامه ای که درخواست ایجاد می کند ،یک دسته
برای شیء دریافت می کند .در اصل ،یک handleیک شاخص در یک جدول اجرایی هر فرآیند است که حاوی یک اشاره گر به
شی ارجاع شده است .این دسته میتواند توسط هر رشتهای در همان فرآیند برای فراخوانی توابع Win32که با اشیاء کار
میکنند یا میتوانند در فرآیندهای دیگر کپی شوند ،استفاده شود.
اشیاء ممکن است اطالعات امنیتی مرتبط با آنها ،به شکل یک توصیفگر امنیتی SDداشته باشند .این اطالعات امنیتی را می
توان برای محدود کردن دسترسی به شی بر اساس محتویات یک شی نشانه که یک کاربر خاص را توصیف می کند استفاده کرد.
به عنوان مثال ،یک فرآیند ممکن است یک شی سمافور با نام را با این هدف ایجاد کند که فقط کاربران خاصی باید بتوانند آن
سمافور را باز کرده و از آن استفاده کنند SD .برای شی سمافور میتواند آن دسته از کاربرانی را که اجازه دسترسی به شی
سمافور را دارند یا ممنوع همراه با نوع دسترسی مجاز خواندن ،نوشتن ،تغییر و غیره فهرست کند .در ویندوز ،اشیا ممکن است با
نام یا بدون نام باشند .هنگامی که یک فرآیند ایجاد یک شی بی نام می خورد ،مدیر شی یک دسته را به آن شی برمی گرداند ،و
دسته تنها راه برای ارجاع به آن است .دسته ها می توانند توسط فرآیندهای فرزند به ارث برده شوند یا بین فرآیندها تکرار شوند.
به اشیاء نامگذاری شده نیز نامی داده میشود که سایر فرآیندهای غیرمرتبط میتوانند از آن برای بدست آوردن دستهای برای
شی استفاده کنند .برای مثال ،اگر فرآیند Aبخواهد با فرآیند Bهمگام شود ،میتواند یک شی رویداد با نام ایجاد کند و نام
رویداد را به Bارسال کند .سپس فرآیند Bمیتواند آن شی رویداد را باز کرده و از آن استفاده کند .با این حال ،اگر Aبه
سادگی بخواهد از رویداد برای همگام سازی دو رشته در درون خود استفاده کند ،یک شی رویداد بدون نام ایجاد می کند ،زیرا
نیازی به پردازش های دیگر برای استفاده از آن رویداد نیست.
دو دسته از اشیاء مورد استفاده ویندوز برای همگام سازی استفاده از پردازنده وجود دارد:
107
سیستم عامل های داخلی و اصول طراحی108.........................................................................................................................
-اشیاء :Dispatcherزیرمجموعه ای از اشیاء اجرایی که رشته ها می توانند برای کنترل توزیع و همگام سازی عملیات
سیستم مبتنی بر رشته منتظر بمانند .این موارد در فصل 6توضیح داده شده است.
-اشیاء کنترل :توسط مؤلفه هسته برای مدیریت عملکرد پردازنده در مناطقی که توسط زمانبندی رشته عادی مدیریت
نمیشوند استفاده میشود .جدول 2.5اشیاء کنترل کرنل را فهرست می کند.
ویندوز یک سیستم عامل تمام عیار شی گرا نیست .در یک زبان شی گرا پیاده سازی نمی شود .ساختارهای داده ای که به طور
کامل در یک جزء اجرایی قرار دارند به عنوان اشیا نمایش داده نمی شوند .با این وجود ،ویندوز قدرت فناوری شی گرا را نشان
می دهد و نشان دهنده روند رو به افزایش به سمت استفاده از این فناوری در طراحی سیستم عامل است.
فراخوانی رویه ناهمزمان برای شکستن اجرای یک رشته مشخص و برای فراخوانی
یک رویه در حالت پردازشگر مشخص استفاده می شود.
فراخوان رویه معوق برای به تعویق انداختن پردازش وقفه برای جلوگیری از
تأخیر در وقفه های سخت افزاری استفاده می شود .همچنین
برای پیاده سازی تایمرها و ارتباطات بین پردازنده استفاده
می شود.
قطع کنید برای اتصال منبع وقفه به روال سرویس وقفه با استفاده از
ورودی در جدول توزیع وقفه IDTاستفاده می شود .هر
پردازنده یک IDTدارد که برای ارسال وقفه هایی که روی
آن پردازنده رخ می دهد استفاده می شود.
روند فضای آدرس مجازی و اطالعات کنترلی الزم برای اجرای
مجموعه ای از اشیاء رشته را نشان می دهد .یک فرآیند شامل
یک اشاره گر به یک نقشه آدرس ،یک لیست از رشته های
آماده حاوی اشیاء رشته ،یک لیست از موضوعات است.
رشته رشتههای متعلق به فرآیند ،کل زمان انباشته شده برای همه
رشتههایی که در فرآیند اجرا میشوند ،و یک اولویت پایه.
مشخصات نشان دهنده اشیاء رشته ،از جمله اولویت زمانبندی و
کوانتومی ،و پردازنده هایی است که رشته ممکن است روی
108
سیستم عامل های داخلی و اصول طراحی109.........................................................................................................................
تاریخچه
تاریخچه یونیکس داستانی است که اغلب گفته می شود و در اینجا با جزئیات زیاد تکرار نخواهد شد .در عوض ،ما یک خالصه
مختصر ارائه می دهیم .یونیکس ابتدا در آزمایشگاههای بل توسعه یافت و در سال 1970بر روی یک PDP-7عملیاتی شد.
برخی از افراد درگیر در آزمایشگاههای بل نیز در کار اشتراکگذاری زمانی در پروژه MIT MITشرکت داشتند .آن پروژه منجر
به توسعه CTSSو سپس Multicsشد .اگرچه معمول است که بگوییم یونیکس اصلی یک نسخه کوچک شده از Multics
بود ،توسعه دهندگان یونیکس در واقع ادعا کردند که بیشتر تحت تأثیر CTSS RITC78هستند .با این وجود ،یونیکس ایده
های بسیاری از Multicsرا در خود جای داده است.
کار بر روی یونیکس در آزمایشگاههای بل ،و بعداً در جاهای دیگر ،مجموعهای از نسخههای یونیکس را تولید کرد .اولین نقطه
عطف قابل توجه انتقال سیستم یونیکس از PDP-7به PDP-11بود .این اولین اشاره بود که یونیکس یک سیستم عامل برای
همه کامپیوترها خواهد بود .نقطه عطف مهم بعدی بازنویسی یونیکس در زبان برنامه نویسی Cبود .این یک استراتژی ناشنیده
در آن زمان بود .عموماً احساس میشد که چیزی به پیچیدگی یک سیستمعامل ،که باید با رویدادهای مهم زمان سروکار داشته
باشد ،باید منحصراً به زبان اسمبلی نوشته شود .دالیل این نگرش عبارتند از:
-حافظه هم حافظه رم و هم حافظه ثانویه با استانداردهای امروزی کوچک و گران بود ،بنابراین استفاده مؤثر از آن مهم بود .این
شامل تکنیکهای مختلفی برای پوشاندن حافظه با کدها و بخشهای دادههای مختلف ،و کدهای خودتغییرکننده بود.
حتی اگر اجرارها از دهه 1950در دسترس بودند ،صنعت کامپیوتر عموماً نسبت به کیفیت کدهای تولید شده به طور خودکار
شک داشت .با ظرفیت منابع کوچک ،کد کارآمد ،هم از نظر زمان و هم از نظر مکان ،ضروری بود.
-سرعت پردازنده و گذرگاه نسبتاً آهسته بود ،بنابراین صرفه جویی در چرخه ساعت می تواند تفاوت قابل توجهی در زمان اجرا
ایجاد کند.
پیاده سازی Cمزایای استفاده از یک زبان سطح باال را برای اکثر کدهای سیستم ،اگر نه برای همه ،نشان داد .امروزه تقریباً تمام
پیادهسازیهای یونیکس به زبان Cنوشته میشوند.
109
سیستم عامل های داخلی و اصول طراحی110.........................................................................................................................
این نسخههای اولیه یونیکس در آزمایشگاههای بل محبوب بودند .در سال ،1974سیستم یونیکس برای اولین بار در یک مجله
فنی RITC74توضیح داده شد .این باعث عالقه زیادی به سیستم شد .مجوزهای یونیکس به مؤسسات تجاری و همچنین
دانشگاه ها ارائه شد .اولین نسخه به طور گسترده در دسترس خارج از آزمایشگاه بل ،نسخه ،6در سال 1976بود .نسخه بعدی
،7که در سال 1978منتشر شد ،جد اکثر سیستم های یونیکس مدرن است .مهمترین سیستمهای غیر AT&Tکه توسعه
داده شد در دانشگاه کالیفرنیا در برکلی به نام UNIX BSDتوزیع نرم افزار برکلی انجام شد که ابتدا بر روی کامپیوترهای
PDPو سپس VAXاجرا می شد AT&T .به توسعه و اصالح سیستم ادامه داد .تا سال ،1982آزمایشگاههای بل چندین
نوع AT&Tیونیکس را در یک سیستم واحد ترکیب کرده بود که بهعنوان UNIX System IIIبه بازار عرضه میشد.
تعدادی ویژگی بعداً برای تولید UNIX System Vبه سیستم عامل اضافه شد.
شرح
شکل 2.15یک توصیف کلی از معماری کالسیک یونیکس را ارائه می دهد .سخت افزار زیرین توسط نرم افزار سیستم عامل
احاطه شده است .سیستم عامل اغلب هسته سیستم یا به سادگی هسته نامیده می شود تا بر جداسازی آن از کاربر و برنامه ها
تأکید شود .این هسته یونیکس است که در استفاده از یونیکس به عنوان نمونه در این کتاب به آن توجه خواهیم کرد .یونیکس
همچنین مجهز به تعدادی سرویس و رابط کاربری است که بخشی از سیستم محسوب می شوند .اینها را می توان در پوسته،
سایر نرم افزارهای رابط ،و اجزای اجرار Cاجرار ،اسمبلر ،لودر گروه بندی کرد .الیه خارج از این شامل برنامه های کاربردی کاربر
و رابط کاربری اجرار Cاست.
110
سیستم عامل های داخلی و اصول طراحی111.........................................................................................................................
فرآیند کنترل
زیر سیستم
سخت افزار
نگاهی دقیق تر به هسته در شکل 2.16ارائه شده است .برنامه های کاربر می توانند خدمات سیستم عامل را مستقیماً یا از
طریق برنامه های کتابخانه ای فراخوانی کنند .رابط فراخوانی سیستم مرزی با کاربر است و به نرم افزارهای سطح باالتر اجازه می
دهد تا به عملکردهای هسته خاصی دسترسی پیدا کنند .از طرف دیگر ،سیستم عامل شامل روال های ابتدایی است که مستقیماً
با سخت افزار تعامل دارند .بین این دو اینترفیس ،سیستم به دو بخش اصلی تقسیم میشود که یکی مربوط به کنترل فرآیند و
دیگری مربوط به مدیریت فایل و I/Oاست .زیرسیستم کنترل فرآیند مسئول مدیریت حافظه ،زمانبندی و ارسال فرآیندها و
هماهنگسازی و ارتباطات بین فرآیندی فرآیندها است .سیستم فایل داده ها را بین حافظه و دستگاه های خارجی به صورت
جریانی از کاراکترها یا در بلوک ها مبادله می کند .برای رسیدن به این هدف ،از انواع درایورهای دستگاه استفاده می شود .برای
انتقال بلوک گرا ،از رویکرد حافظه پنهان دیسک استفاده می شود :یک بافر سیستم در حافظه اصلی بین فضای آدرس کاربر و
دستگاه خارجی قرار می گیرد.
توضیحات در این بخش به آنچه که می توان سیستم های سنتی یونیکس نامید پرداخته است VAHA96 .از این اصطالح برای
اشاره به ،BSD4.3 ،System V Release 3 SVR3و نسخههای قبلی استفاده میکند .عبارات کلی زیر ممکن است در
مورد یک سیستم سنتی یونیکس بیان شود .این برای اجرا بر روی یک پردازنده طراحی شده است و توانایی محافظت از ساختار
داده های خود را در برابر دسترسی همزمان چندین پردازنده ندارد .هسته آن بسیار متنوع نیست و از یک نوع سیستم فایل ،خط
مشی زمانبندی فرآیند و فرمت فایل قابل اجرا پشتیبانی می کند .هسته سنتی یونیکس به گونه ای طراحی نشده است که قابل
111
سیستم عامل های داخلی و اصول طراحی112.........................................................................................................................
توسعه باشد و امکانات کمی برای استفاده مجدد از کد دارد .نتیجه این است که با اضافه شدن ویژگیهای جدید به نسخههای
مختلف یونیکس ،کدهای جدید زیادی باید اضافه میشد و هستهای متورم و غیر ماژوالر به دست میآمد.
با تکامل یونیکس ،تعداد پیادهسازیهای مختلف افزایش یافت و هر کدام ویژگیهای مفیدی را ارائه کردند .نیاز به تولید یک
پیادهسازی جدید بود که بسیاری از نوآوریهای مهم را متحد میکرد ،سایر ویژگیهای طراحی سیستمعامل مدرن را اضافه
میکرد و معماری ماژوالرتری تولید میکرد .نمونه معمول هسته یونیکس مدرن ،معماری است که در شکل 2.17نشان داده
شده است.
هسته کوچکی از امکانات وجود دارد که به صورت مدوالر نوشته شده است که عملکردها و خدمات مورد نیاز تعدادی از
فرآیندهای سیستم عامل را ارائه می دهد .هر یک از دایره های بیرونی نشان دهنده توابع و یک رابط است که ممکن است به
روش های مختلف پیاده سازی شود.
SVR4از تالشهای طراحان تجاری و آکادمیک استفاده میکند و برای ارائه یک پلت فرم یکنواخت برای استقرار تجاری
یونیکس توسعه یافته است .در این هدف موفق بوده و شاید مهم ترین نوع یونیکس باشد .اکثر ویژگیهای مهمی که تاکنون در
هر سیستم یونیکس ایجاد شده است را در بر میگیرد و این کار را به صورت یکپارچه و از نظر تجاری قابل دوام انجام میدهد.
SVR4روی پردازندههایی از ریزپردازندههای 32بیتی تا ابر رایانهها اجرا میشود.
BSD
سری انتشارات یونیکس توزیع نرم افزار برکلی BSDنقش کلیدی در توسعه تئوری طراحی سیستم عامل ایفا کرده است.
xBSD.4به طور گسترده در تاسیسات آکادمیک استفاده می شود و به عنوان پایه تعدادی از محصوالت تجاری یونیکس عمل
کرده است .احتماالً می توان با اطمینان گفت که BSDمسئول بیشتر محبوبیت یونیکس است و بیشتر پیشرفت های یونیکس
برای اولین بار در نسخه های BSDظاهر شد BSD4.4 .نسخه نهایی BSDبود که توسط برکلی منتشر شد.
112
سیستم عامل های داخلی و اصول طراحی113.........................................................................................................................
سازمان امضا و اجرا متعاقبا منحل شد .این یک ارتقاء بزرگ به BSD4.3است و شامل یک سیستم حافظه مجازی جدید،
تغییرات در ساختار هسته ،و لیست بلندباالیی از دیگر بهبودهای ویژگی است .یکی از پرکاربردترین و بهترین نسخه های مستند
BSD FreeBSDاست FreeBSD .برای سرورهای مبتنی بر اینترنت و فایروال ها محبوب است و در تعدادی از سیستم های
تعبیه شده استفاده می شود .آخرین نسخه سیستم عامل مکینتاش ،Mac OS X ،مبتنی بر FreeBSD 5.0و میکروکرنل
Mach 3.0است.
سوالریس 10
Solarisنسخه یونیکس مبتنی بر SVR4 Sunاست که آخرین نسخه آن 10است .سوالریس تمام ویژگی های SVR4به
عالوه تعدادی ویژگی پیشرفته تر ،مانند هسته کامالً قابل پیش گیری ،چند رشته ای ،پشتیبانی کامل از SMPو یک شی را
ارائه می کند .رابط گرا برای سیستم های فایل سوالریس پرکاربردترین و موفق ترین پیاده سازی تجاری یونیکس است.
2.10لینوکس
تاریخچه
لینوکس به عنوان یک نوع یونیکس برای معماری IBM PC Intel 80386شروع شد .لینوس توروالدز ،دانشجوی فنالندی
علوم کامپیوتر ،نسخه اولیه را نوشت .توروالدز نسخه اولیه لینوکس را در سال 1991بر روی اینترنت ارسال کرد .از آن زمان،
تعدادی از افراد با همکاری اینترنت ،در توسعه لینوکس که همگی تحت کنترل توروالدز بودند ،مشارکت داشتند .از آنجایی که
لینوکس رایگان است و کد منبع در دسترس است ،جایگزینی اولیه برای سایر ایستگاه های کاری یونیکس ،مانند ایستگاه های
Sun Microsystemsو IBMشد .امروزه لینوکس یک سیستم یونیکس با امکانات کامل است که بر روی تمامی این پلتفرم
ها و بیشتر از جمله اینتل پنتیوم و ایتانیوم و موتوروال IBM PowerPC/اجرا می شود.
113
سیستم عامل های داخلی و اصول طراحی114.........................................................................................................................
کلید موفقیت لینوکس در دسترس بودن بسته های نرم افزار رایگان تحت نظارت بنیاد نرم افزار آزاد FSFبوده است .هدف
8
FSFنرم افزار پایدار و مستقل از پلتفرم است که رایگان ،با کیفیت باال و مورد استقبال جامعه کاربران قرار می گیرد .پروژه
GNU FSFابزارهایی را برای توسعه دهندگان نرم افزار فراهم می کند و مجوز عمومی GNU GPLمهر تأیید FSFاست.
توروالدز از ابزارهای گنو در توسعه هسته خود استفاده کرد که سپس آن را تحت GPLمنتشر کرد .بنابراین ،توزیعهای لینوکس
که امروز میبینید محصول پروژه ،GNU FSFتالش فردی توروالد ،و تالشهای بسیاری از همکاران در سراسر جهان است.
عالوه بر استفاده بسیاری از برنامه نویسان ،لینوکس اکنون نفوذ قابل توجهی به دنیای شرکت ها داشته است .این نه تنها به دلیل
نرم افزار رایگان بلکه به دلیل کیفیت هسته لینوکس است .بسیاری از برنامه نویسان با استعداد در نسخه فعلی مشارکت داشته
اند که منجر به محصولی از لحاظ فنی چشمگیر شده است .عالوه بر این ،لینوکس بسیار ماژوالر است و به راحتی پیکربندی می
شود .این امر باعث میشود که عملکرد بهینه از انواع پلتفرمهای سختافزاری را آسان کنید .به عالوه ،با کد منبع موجود،
فروشندگان میتوانند برنامهها و برنامههای کاربردی را برای برآوردن نیازهای خاص تغییر دهند .در سراسر این کتاب ،جزئیاتی از
هسته های داخلی لینوکس بر اساس لینوکس 3.10که در ژوئن 2013منتشر شد ،ارائه خواهیم کرد.
ساختار مدوالر
اکثر هسته های یونیکس یکپارچه هستند .از قبل در این فصل به یاد بیاورید که یک هسته یکپارچه هسته ای است که تقریباً
تمام عملکردهای سیستم عامل را در یک بلوک بزرگ از کد که به عنوان یک فرآیند واحد با یک فضای آدرس واحد اجرا می
شود ،شامل می شود .تمام اجزای عملکردی هسته به تمام ساختارهای داده داخلی و روال های آن دسترسی دارند .اگر تغییراتی
در هر بخشی از یک سیستمعامل یکپارچه معمولی ایجاد شود ،همه ماژولها و روالها باید مجدداً پیوند داده شده و مجدداً نصب
شوند و قبل از اعمال تغییرات ،سیستم راهاندازی مجدد شود .در نتیجه ،هر گونه تغییر ،مانند افزودن یک درایور دستگاه جدید یا
عملکرد سیستم فایل ،دشوار است .این مشکل به ویژه برای لینوکس که توسعه آن جهانی است و توسط گروهی از برنامه نویسان
مستقل انجام می شود ،شدیدتر است.
اگرچه لینوکس از رویکرد میکروکرنل استفاده نمی کند ،اما با استفاده از معماری مدوالر خاص خود ،به بسیاری از مزایای بالقوه
این رویکرد دست می یابد .لینوکس به عنوان مجموعه ای از ماژول ها ساخته شده است که تعدادی از آنها می توانند به صورت
خودکار بارگیری و بارگیری شوند .این بلوکهای نسبتاً مستقل به عنوان ماژولهای قابل بارگیری GOYE99شناخته میشوند.
در اصل ،یک ماژول یک فایل شی است که کد آن را می توان در زمان اجرا به هسته پیوند داد و از آن جدا کرد.
2GNU 8مخفف بازگشتی برای GNU’s Not Unixاست .پروژه گنو یک مجموعه نرم افزار رایگان از بسته ها و ابزارها برای توسعه یک سیستم عامل یونیکس مانند است.
اغلب با هسته لینوکس استفاده می شود.
114
سیستم عامل های داخلی و اصول طراحی115.........................................................................................................................
به طور معمول ،یک ماژول برخی از عملکردهای خاص ،مانند یک سیستم فایل ،یک درایور دستگاه ،یا برخی ویژگی های دیگر
الیه باالیی هسته را پیاده سازی می کند .یک ماژول به عنوان فرآیند یا رشته خود اجرا نمی شود ،اگرچه می تواند رشته های
هسته را برای اهداف مختلف در صورت لزوم ایجاد کند .در عوض ،یک ماژول در حالت هسته به نمایندگی از فرآیند فعلی اجرا
می شود.
بنابراین ،اگرچه ممکن است لینوکس یکپارچه در نظر گرفته شود ،ساختار ماژوالر آن بر برخی از مشکالت در توسعه و تکامل
هسته غلبه می کند.
-پیوند پویا :یک ماژول کرنل را می توان بارگذاری کرد و در زمانی که هسته از قبل در حافظه و در حال اجرا است ،به هسته
متصل شد .همچنین یک ماژول را می توان در هر زمانی از حافظه جدا کرد و از حافظه حذف کرد.
-ماژول های قابل انباشته :ماژول ها در یک سلسله مراتب مرتب شده اند .ماژولهای فردی زمانی که توسط ماژولهای سرویس
گیرنده باالتر در سلسله مراتب ارجاع میشوند ،به عنوان کتابخانه ،و زمانی که به ماژولهای پایینتر ارجاع میدهند ،به عنوان
کالینت عمل میکنند.
پیوند پویا FRAN97پیکربندی را تسهیل می کند و حافظه هسته را ذخیره می کند .در لینوکس ،یک برنامه کاربر یا کاربر می
تواند ماژول های هسته را با استفاده از دستورات insmodو rmmodبه صراحت بارگیری و بارگیری کند .هسته خود نیاز به
توابع خاص را نظارت می کند و می تواند ماژول ها را در صورت نیاز بارگذاری و تخلیه کند .با ماژول های ،stackableوابستگی
بین ماژول ها قابل تعریف است .این دو فایده دارد:
.1کدهای مشترک برای مجموعه ای از ماژول های مشابه به عنوان مثال ،درایورهای سخت افزار مشابه را می توان به یک ماژول
منتقل کرد و تکرار را کاهش داد.
.2هسته میتواند مطمئن شود که ماژولهای مورد نیاز وجود دارند ،از بارگیری ماژولی که سایر ماژولهای در حال اجرا به آن
وابسته هستند ،خودداری کند ،و هر ماژول اضافی مورد نیاز را هنگام بارگیری یک ماژول جدید بارگیری کند.
شکل 2.18نمونه ای است که ساختارهای استفاده شده توسط لینوکس را برای مدیریت ماژول ها نشان می دهد .شکل لیستی
از ماژول های هسته را پس از بارگیری تنها دو ماژول نشان می دهد FAT :و .VFATهر ماژول با دو جدول تعریف می شود:
جدول ماژول و جدول نماد .kernel_symbolجدول ماژول شامل عناصر زیر است:
: *next -به ماژول زیر اشاره کنید .همه ماژول ها در یک لیست پیوندی سازماندهی شده اند .لیست با یک شبه مدول شروع
می شود در شکل 2.18نشان داده نشده است.
115
سیستم عامل های داخلی و اصول طراحی116.........................................................................................................................
: usecount -شمارنده استفاده از ماژول .شمارنده هنگامی که عملیاتی که شامل عملکردهای ماژول است شروع می شود
افزایش می یابد و با پایان عملیات کاهش می یابد.
: *deps -اشاره گر به لیست ماژول هایی که توسط این ماژول به آنها ارجاع داده می شود
جدول نمادها نمادهایی را فهرست می کند که در این ماژول تعریف شده و در جاهای دیگر استفاده می شود.
اجزای هسته
شکل 2.19که از MOSB02گرفته شده است ،اجزای اصلی هسته لینوکس را که بر روی معماری IA-64پیاده سازی شده
است مثالً Intel Itaniumنشان می دهد .شکل ،چندین فرآیند در حال اجرا در باالی هسته را نشان می دهد .هر کادر یک
فرآیند مجزا را نشان میدهد ،در حالی که هر خط squigglyبا سر پیکان نشاندهنده یک رشته اجرا است .هسته خود از
مجموعه ای متقابل از اجزا تشکیل شده است ،با فلش هایی که برهمکنش های اصلی را نشان می دهد .سختافزار زیرین نیز
بهعنوان مجموعهای از مؤلفهها با فلشهایی که نشان میدهد کدام مؤلفههای هسته استفاده میکنند یا کدام مؤلفههای
سختافزار را کنترل میکنند ،نشان داده میشود .البته همه اجزای هسته بر روی پردازنده اجرا می شوند ،اما برای سادگی ،این
روابط نشان داده نمی شوند.
-سیگنال ها :هسته از سیگنال ها برای فراخوانی یک فرآیند استفاده می کند .به عنوان مثال ،سیگنال ها برای اطالع رسانی یک
فرآیند از خطاهای خاص ،مانند تقسیم بر صفر استفاده می شود .جدول 2.6چند نمونه از سیگنال ها را نشان می دهد.
116
سیستم عامل های داخلی و اصول طراحی117.........................................................................................................................
117
سیستم عامل های داخلی و اصول طراحی118.........................................................................................................................
-فراخوانی سیستم :فراخوانی سیستم ابزاری است که به وسیله آن یک فرآیند یک سرویس هسته خاص را درخواست می کند.
صدها تماس سیستمی وجود دارد که تقریباً می توان آنها را به شش دسته دسته بندی کرد :سیستم فایل ،فرآیند ،زمان بندی،
ارتباطات بین فرآیندی ،سوکت شبکه و متفرقه .جدول 2.7چند مثال را در هر دسته تعریف می کند.
118
سیستم عامل های داخلی و اصول طراحی119.........................................................................................................................
مربوط به فرآیند
اجرای برنامه
119
سیستم عامل های داخلی و اصول طراحی120.........................................................................................................................
msgrcv یک ساختار بافر پیام برای دریافت پیام اختصاص داده شده
است .سپس تماس سیستمی پیامی را از صف پیام مشخص شده
توسط msqidدر بافر پیام جدید ایجاد شده می خواند.
gethostna
120
سیستم عامل های داخلی و اصول طراحی121.........................................................................................................................
me send ارتباطی بین سوکت داده شده و سوکت راه دور مرتبط با
setsockopt sockaddrبرقرار کنید.
متفرقه
fsync تمام بخشهای درون هستهای یک فایل را روی دیسک کپی کنید و
منتظر بمانید تا دستگاه گزارش دهد که همه قسمتها در حافظه
time
پایدار هستند.
vhangu
p زمان را بر حسب ثانیه از اول ژانویه 1970برگردانید.
-سیستم های فایل :یک فضای نام جهانی و سلسله مراتبی برای فایل ها ،دایرکتوری ها و سایر اشیاء مرتبط با فایل فراهم می
کند و توابع سیستم فایل را ارائه می دهد.
-پروتکل های شبکه :از رابط Socketsبرای کاربران برای مجموعه پروتکل TCP/IPپشتیبانی می کند.
-درایورهای دستگاه کاراکتر :دستگاههایی را مدیریت کنید که به هسته نیاز دارند تا دادهها را هر بار یک بایت ارسال یا دریافت
کند ،مانند پایانهها ،مودمها و چاپگرها.
-درایورهای دستگاه را مسدود کنید :دستگاه هایی را مدیریت کنید که داده ها را در بلوک می خوانند و می نویسند ،مانند
اشکال مختلف حافظه ثانویه دیسک های مغناطیسی ،CD-ROM ،و غیره.
121
سیستم عامل های داخلی و اصول طراحی122.........................................................................................................................
-درایورهای دستگاه شبکه :کارت های رابط شبکه و پورت های ارتباطی را که به دستگاه های شبکه مانند پل ها و روترها
متصل می شوند ،مدیریت کنید.
-تله ها و خطاها :تله ها و خطاهای ایجاد شده توسط پردازنده مانند خطای حافظه را کنترل کنید.
-حافظه فیزیکی :مجموعه فریم های صفحه را در حافظه حقیقی مدیریت می کند و صفحات را به حافظه مجازی اختصاص می
دهد.
2.11اندروید
سیستم عامل اندروید یک سیستم مبتنی بر لینوکس است که در اصل برای دستگاه های تلفن همراه با صفحه لمسی مانند
گوشی های هوشمند و رایانه های لوحی طراحی شده است .این محبوبترین سیستمعامل تلفن همراه با اختالف زیادی است:
گوشیهای اندرویدی حدود 4به 1از آیفونهای اپل در سطح جهانی فروش بیشتری دارند .VANC13اما این تنها یک عنصر
در تسلط فزاینده اندروید است :به طور فزاینده ای ،این سیستم عامل تقریباً پشت هر دستگاهی با تراشه رایانه ای غیر از سرورها
و رایانه های شخصی است .اندروید در حال تبدیل شدن به سیستم عامل استاندارد برای «اینترنت اشیا» است ،اصطالحی که به
گسترش اتصال دستگاه های هوشمند ،از لوازم خانگی گرفته تا حسگرهای کوچک اشاره دارد.
توسعه اولیه سیستم عامل اندروید توسط .Android, Incانجام شد که توسط گوگل در سال 2005خریداری شد .اولین نسخه
تجاری ،اندروید ،1.0در سال 2008منتشر شد .تا لحظه نگارش این مقاله ،جدیدترین نسخه اندروید Jelly Bean 4.3است.
در سال ،2007اتحادیه گوشی باز OHAتشکیل شد OHA .کنسرسیومی متشکل از 84شرکت برای توسعه استانداردهای باز
برای دستگاه های تلفن همراه است .به طور خاص OHA ،مسئول انتشار سیستم عامل اندروید به عنوان یک پلت فرم باز است.
منبع باز بودن اندروید کلید موفقیت آن بوده است.
اندروید به عنوان پشته نرم افزاری تعریف می شود که شامل هسته سیستم عامل ،میان افزار و برنامه های کاربردی کلیدی است.
شکل 2.20معماری نرم افزار اندروید را با جزئیات نشان می دهد .بنابراین ،آندروید باید به عنوان یک پشته نرم افزار کامل
نگریسته شود – نه فقط یک سیستم عامل .به یک معنا ،اندروید نوعی لینوکس تعبیه شده است .با این حال ،همانطور که شکل
2.20نشان می دهد ،بسیار بیشتر از عملکرد هسته جاسازی شده است.
122
سیستم عامل های داخلی و اصول طراحی123.........................................................................................................................
برنامه ها همه برنامه هایی که کاربر به طور مستقیم با آنها تعامل دارد بخشی از الیه برنامه هستند .این شامل مجموعه ای اصلی
از برنامه های کاربردی همه منظوره ،مانند سرویس گیرنده ایمیل ،برنامه پیام کوتاه ،تقویم ،نقشه ها ،مرورگر ،مخاطبین و سایر
برنامه های کاربردی است که معموالً برای هر دستگاه تلفن همراه استاندارد است .برنامه ها معموالً در جاوا پیاده سازی می
شوند .هدف اصلی معماری متن باز اندروید این است که توسعه دهندگان بتوانند برنامه های کاربردی جدید را برای دستگاه های
خاص و نیازهای کاربر نهایی خاص پیاده سازی کنند .استفاده از جاوا به توسعه دهندگان این امکان را می دهد که از مالحظات و
ویژگی های خاص سخت افزاری خالص شوند و همچنین از ویژگی های زبان سطح باالتر جاوا مانند کالس های از پیش تعریف
شده استفاده کنند .شکل 2.20نمونه هایی از انواع برنامه های کاربردی پایه موجود در پلتفرم اندروید را نشان می دهد.
چارچوب برنامه الیه Application Frameworkبلوکهای ساختمانی سطح باالیی را فراهم میکند که از طریق APIهای
استاندارد قابل دسترسی هستند و برنامهنویسان از آنها برای ایجاد برنامههای جدید استفاده میکنند .این معماری برای ساده
سازی استفاده مجدد از اجزا طراحی شده است .برخی از اجزای کلیدی Application Frameworkعبارتند از:
:Activity Manager -چرخه عمر برنامه ها را مدیریت می کند .مسئول شروع ،توقف و از سرگیری برنامه های مختلف است.
: Window Manager -انتزاع جاوا از Surface Managerزیرین Surface Manager .تعامل بافر فریم و ترسیم سطح
پایین را کنترل می کند ،در حالی که Window Managerیک الیه در باالی آن فراهم می کند تا به برنامه ها اجازه دهد
ناحیه مشتری خود را اعالم کنند و از ویژگی هایی مانند نوار وضعیت استفاده کنند.
: Content Providers -این توابع دادههای برنامهای را که باید بین برنامهها ،مانند مخاطبین ،به اشتراک گذاشته شوند،
محصور میکنند.
: Resource Manager -منابع برنامه را مدیریت می کند ،مانند رشته های محلی و بیت مپ.
: View System -رابط کاربری UIاولیه ،مانند دکمهها ،کادرهای فهرست ،انتخابگرهای تاریخ ،و سایر کنترلها و همچنین
رویدادهای رابط کاربری مانند لمس و حرکات را ارائه میکند.
: Location Manager -به توسعه دهندگان اجازه می دهد تا از سرویس های مبتنی بر مکان ،خواه از طریق ،GPSشناسه
دکل های تلفن همراه یا پایگاه های داده محلی Wi-Fiاستفاده کنند.
: Notification Manager -رویدادها را مدیریت می کند ،مانند دریافت پیام ها و قرار مالقات ها.
123
سیستم عامل های داخلی و اصول طراحی124.........................................................................................................................
: XMPP -عملکردهای استاندارد پیام رسانی همچنین ،چت را بین برنامه ها ارائه می دهد.
چارچوب برنامه
مدیر فعالیت رسانه ای مدیریت ویندوز ارائه دهندگان محتوا مشاهده سیستم مدیر اطالع رسانی
مدیر بسته مدیر تلفن مدیر منابع مدیر موقعیت مکانی سرویسXMPP
هسته لینوکس
درایور نمایشگر درایور دوربین فلش مموری درایور Binder
درایور بلوتوث
(IPC).
درایورUSB درایور صفحه کلید درایور وای فای درایورهای صوتی مدیران قدرت
پیاده سازی
هسته لینوکسC:
124
سیستم عامل های داخلی و اصول طراحی125.........................................................................................................................
SYSTEM LIBRARIESالیه زیر Application Frameworkاز دو بخش تشکیل شده استSystem Libraries :
و .Android Runtimeمؤلفه System Librariesمجموعه ای از توابع مفید سیستم است که به زبان Cیا ++Cنوشته
شده و توسط اجزای مختلف سیستم اندروید استفاده می شود .آنها از چارچوب برنامه و برنامه های کاربردی از طریق یک رابط
جاوا فراخوانی می شوند .این ویژگی ها از طریق فریم ورک اپلیکیشن اندروید در معرض دید توسعه دهندگان قرار می گیرند.
برخی از کتابخانه های کلیدی سیستم شامل موارد زیر است:
: Surface Manager -اندروید از یک مدیر پنجره ترکیبی مشابه Vistaیا Compizاستفاده می کند ،اما بسیار ساده تر
است .بهجای ترسیم مستقیم به بافر صفحه ،دستورات طراحی شما به نقشههای بیتی خارج از صفحه نمایش داده میشوند که
سپس با بیتمپهای دیگر ترکیب میشوند تا صفحه نمایشی را که کاربر میبیند تشکیل دهند .این به سیستم اجازه می دهد تا
انواع جلوه های جالب مانند پنجره های شفاف و انتقال های فانتزی ایجاد کند.
OpenGL: OpenGL Open Graphics Library -یک APIچند پلتفرمی چند زبانه برای ارائه گرافیک های
کامپیوتری دو بعدی و سه بعدی است OpenGL/ES OpenGL for Embedded Systems .زیرمجموعه ای از
OpenGLاست که برای سیستم های تعبیه شده طراحی شده است.
Media Framework: Media Framework -از ضبط و پخش ویدئو در بسیاری از فرمت ها ،از جمله AVC ،AAC
،MP3 ،H.263 ،H.264و MPEG-4پشتیبانی می کند.
-پایگاه داده :SQLاندروید شامل یک موتور پایگاه داده SQLiteسبک وزن برای ذخیره داده های پایدار است SQLite .در
بخش بعدی مورد بحث قرار می گیرد.
-موتور مرورگر :برای نمایش سریع محتوای ،HTMLاندروید از کتابخانه WebKitاستفاده می کند که در اصل همان
کتابخانه ای است که در سافاری و آیفون استفاده می شود .همچنین تا زمانی که گوگل به Blinkتغییر مکان داد ،این کتابخانه
برای مرورگر Google Chromeاستفاده می شد.
: Bionic LibC -این یک نسخه حذف شده از کتابخانه استاندارد سیستم Cاست که برای دستگاه های مبتنی بر لینوکس
تعبیه شده تنظیم شده است .رابط رابط استاندارد جاوا Native Interface JNIاست.
ANDROID RUNTIMEهر برنامه اندرویدی در فرآیند خودش اجرا میشود ،با نمونهای از ماشین مجازی Dalvik
DVM. DVMفایلها را با فرمت Dalvik Executable .dexاجرا میکند ،که برای حداقل حافظه و استفاده کارآمد از
پردازنده بهینه شده است DVM .در فصل 14مورد بررسی قرار گرفته است.
125
سیستم عامل های داخلی و اصول طراحی126.........................................................................................................................
جزء Android Runtimeشامل مجموعهای از کتابخانههای اصلی است که بیشتر قابلیتهای موجود در کتابخانههای اصلی
زبان برنامهنویسی جاوا را فراهم میکند .برای اجرای یک عملیات DVM ،با استفاده از JNIکتابخانه ++C/Cمربوطه را
فراخوانی می کند.
کرنل لینوکس هسته سیستم عامل اندروید مشابه توزیع هسته استاندارد لینوکس است ،اما با آن یکسان نیست .یکی از تغییرات
قابل توجه این است که هسته اندروید فاقد درایورهایی است که در محیط های تلفن همراه قابل استفاده نیستند و این باعث
کوچکتر شدن هسته می شود .عالوه بر این ،اندروید هسته لینوکس را با ویژگیهایی بهبود میبخشد که برای محیط موبایل
طراحی شدهاند و معموالً روی پلتفرم دسکتاپ یا لپتاپ کاربردی یا کاربردی نیستند.
اندروید برای خدمات سیستم اصلی مانند امنیت ،مدیریت حافظه ،مدیریت فرآیند ،پشته شبکه و مدل درایور به هسته لینوکس
خود متکی است .هسته همچنین به عنوان یک الیه انتزاعی بین سخت افزار و بقیه پشته نرم افزار عمل می کند و اندروید را قادر
می سازد از طیف گسترده ای از درایورهای سخت افزاری که لینوکس پشتیبانی می کند استفاده کند.
برنامه ها و چارچوب
درایور صوتی
راه انداز نمایش سایر
دوربین درایورها درایورها
126
سیستم عامل های داخلی و اصول طراحی127.........................................................................................................................
همانطور که در شکل 2.21نشان داده شده است ،نشان دادن اندروید از دیدگاه یک توسعه دهنده برنامه مفید است .این معماری
سیستم یک انتزاع ساده از معماری نرم افزار نشان داده شده در شکل 2.20است .به این صورت ،اندروید از الیه های زیر تشکیل
شده است:
برنامه ها و چارچوب :توسعه دهندگان برنامه در درجه اول به این الیه و APIهایی که امکان دسترسی به سرویس های الیه
پایین را می دهند ،توجه دارند.
:r Binder IPCمکانیسم ارتباط بین فرآیندی Binderبه چارچوب برنامه اجازه می دهد تا از مرزهای پردازش عبور کرده و
کد خدمات سیستم اندروید را فراخوانی کند .این اساساً به APIهای چارچوب سطح باال اجازه می دهد تا با خدمات سیستم
اندروید تعامل داشته باشند.
rخدمات سیستم :Androidبیشتر عملکردهایی که از طریق APIهای چارچوب برنامه در معرض دید قرار می گیرند ،خدمات
سیستمی را فراخوانی می کنند که به نوبه خود به توابع سخت افزاری و هسته اصلی دسترسی دارند .خدمات را می توان در دو
گروه سازماندهی کرد .خدمات رسانه ای با پخش و ضبط رسانه سروکار دارند .خدمات سیستم با توابع سیستم قابل مشاهده برای
برنامه سروکار دارند.
r Hardware Abstraction Layer HAL: HALیک رابط استاندارد برای درایورهای دستگاه الیه هسته فراهم می کند،
به طوری که کد الیه باالیی نیازی به جزئیات اجرای درایورها و سخت افزار خاص ندارد HAL .تقریباً بدون تغییر در توزیع
استاندارد لینوکس است.
:r Linux Kernelهسته لینوکس برای پاسخگویی به نیازهای یک محیط تلفن همراه طراحی شده است.
فعالیت ها
فعالیت یک جزء رابط کاربری بصری است که شامل مواردی مانند انتخاب منوها ،نمادها و چک باکس ها می شود .هر صفحه در
یک برنامه افزودنی از کالس Activityاست .فعالیتها از Viewsبرای ایجاد رابط کاربری گرافیکی استفاده میکنند که
اطالعات را نمایش میدهد و به اقدامات کاربر پاسخ میدهد .در فصل 4فعالیت ها را مورد بحث قرار می دهیم.
مدیریت توان
اندروید دو ویژگی را به هسته لینوکس اضافه می کند تا توانایی مدیریت انرژی را افزایش دهد :آالرم ها و .wakelocks
127
سیستم عامل های داخلی و اصول طراحی128.........................................................................................................................
قابلیت Alarmsدر هسته لینوکس پیاده سازی شده است و از طریق AlarmManagerدر کتابخانه های هسته RunTime
برای توسعه دهنده برنامه قابل مشاهده است .از طریق ،AlarmManagerیک برنامه می تواند یک سرویس بیدار شدن زمان
بندی شده درخواست کند .امکانات Alarmsدر هسته پیادهسازی میشود تا زنگ هشدار حتی اگر سیستم در حالت خواب
باشد فعال شود .این به سیستم اجازه می دهد تا به حالت خواب رفته و در مصرف انرژی صرفه جویی کند ،حتی اگر فرآیندی
وجود داشته باشد که نیاز به بیدار شدن دارد.
قابلیت wakelockاز ورود سیستم اندروید به حالت خواب جلوگیری می کند .یک برنامه می تواند یکی از wakelockهای
زیر را نگه دارد:
هر زمان که یک برنامه نیاز به روشن ماندن یکی از تجهیزات جانبی مدیریت شده داشته باشد ،این قفل ها از طریق API
درخواست می شوند .اگر هیچ wakelockوجود نداشته باشد که دستگاه را قفل می کند ،برای حفظ عمر باتری خاموش می
شود.
این اشیاء هسته با استفاده از فایلهای sys/ power/wavelock/برای برنامهها در فضای کاربر قابل مشاهده هستند.
فایلهای wake_lockو wake_unlockرا میتوان برای تعریف و تغییر یک قفل با نوشتن در فایل مربوطه استفاده کرد.
BRIN01مجموعه ای عالی از مقاالتی است که پیشرفت های عمده در طراحی سیستم عامل را در طول سال ها پوشش می
دهد.
VAHA96یک درمان عالی از داخلی های یونیکس ،که تجزیه و تحلیل مقایسه ای از تعدادی از انواع را ارائه می دهد ،است.
برای GOOD94 ،UNIX SVR4یک درمان قطعی با جزئیات فنی فراوان ارائه می دهد .برای FreeBSDمنبع باز محبوب،
MCKU05به شدت توصیه می شود MCDO07 .درمان خوبی برای داخلی های سوالریس ارائه می دهد .درمان های خوب
داخلی لینوکس LOVE10و MAUE08هستند.
128
سیستم عامل های داخلی و اصول طراحی129.........................................................................................................................
اگرچه کتابهای بیشماری در مورد نسخههای مختلف ویندوز وجود دارد ،اما مطالب بسیار کمی در قسمت داخلی ویندوز
موجود است .کتابی که باید بخوانید RUSS11است YAGH13 .بحث مفصلی در مورد داخلی های اندروید ارائه می دهد.
GAND11یک نمای کلی از Androidارائه می دهد.
BRIN01برینچ هانسن .P ،سیستم عامل های کالسیک :از پردازش دسته ای تا سیستم های توزیع شده .نیویورک:
.2001 ،Springer-Verlag
GAND11 Gandhewar, N., and Sheikh, R. "Google Android: An Emerging Software Platform
".for Devices Mobileمجله بین المللی علوم و مهندسی کامپیوتر ،فوریه .2011
GOOD94 Goodheart, B., and Cox, J. The Magic Gardenتوضیح داده شدهThe Internals of UNIX :
.System V Release 4. Englewood Cliffs, NJ: Prentice Hall, 1994
.R ،LOVE10 Loveتوسعه هسته لینوکس .رودخانه فوقانی زین ،نیوجرسی :ادیسون -وسلی.2010 ،
MCDO07 McDougall, R., and Mauro, J. Solaris Internals: Solaris 10 and OpenSolaris Kernel
.2007 ،CA: Sun Microsystems Press ،Architecture. Palo Alto
.MCKU05 McKusick, M., and Neville-Neil, Jطراحی و پیاده سازی سیستم عامل ،FreeBSD. Reading
.2005 ،MA: Addison-Wesley
RUSS11روسینوویچ ،م .سلیمان ،دیand Ionescu, A. Windows Internals: Covering Windows 7 and .
.Windows Server 2008 R2ردموند :WA ،مایکروسافت پرس.2011 ،
.U. UNIX Internals: The New Frontiers ،VAHA96 Vahaliaرودخانه فوقانی زین ،نیوجرسی :سالن پرنتیس،
.1996
تصاویر متحرک
مجموعه ای از انیمیشن که مفاهیم این فصل را نشان می دهد در وب سایت Premiumموجود است .خواننده تشویق می شود
که انیمیشن ها را برای تقویت مفاهیم این فصل مشاهده کند.
129
سیستم عامل های داخلی و اصول طراحی130.........................................................................................................................
شرایط کلیدی
130
سیستم عامل های داخلی و اصول طراحی131.........................................................................................................................
بررسی سواالت
.2.4فرآیند چیست؟
.2.6پنج مسئولیت مدیریت ذخیره سازی یک سیستم عامل معمولی را فهرست کرده و به طور خالصه توضیح دهید.
چالش ها و مسائل
.2.1فرض کنید یک کامپیوتر چندبرنامهای داریم که در آن هر کار ویژگیهای یکسانی دارد .در یک دوره محاسباتی ،T ،برای
یک کار ،نیمی از زمان در I/Oو نیمی دیگر در فعالیت پردازنده صرف می شود .هر کار در مجموع Nدوره اجرا می شود .فرض
کنید که از یک زمانبندی ساده دور روبین استفاده میشود ،و عملیات I/Oمیتواند با عملکرد پردازنده همپوشانی داشته باشد.
مقادیر زیر را تعریف کنید:
-توان عملیاتی = میانگین تعداد کارهای تکمیل شده در دوره زمانی T
-استفاده از پردازنده = درصد زمانی که پردازنده فعال است در انتظار نیست این مقادیر را برای یک ،دو و چهار کار همزمان
محاسبه کنید ،با این فرض که دوره Tبه هر یک از روش های زیر توزیع شده است:
131
سیستم عامل های داخلی و اصول طراحی132.........................................................................................................................
.2.2یک برنامه I/O-boundبرنامه ای است که اگر به تنهایی اجرا شود ،زمان بیشتری را نسبت به استفاده از پردازنده برای
I/Oصرف می کند .یک برنامه محدود به پردازنده برعکس است .فرض کنید یک الگوریتم زمانبندی کوتاهمدت به نفع
برنامههایی است که در گذشته اخیر از زمان پردازش کمی استفاده کردهاند .توضیح دهید که چرا این الگوریتم از برنامههای
I/O-Boundحمایت میکند و در عین حال به طور دائم زمان پردازنده را به برنامههای محدود به پردازنده دریغ نمیکند.
.2.3سیاستهای زمانبندی را که ممکن است هنگام تالش برای بهینهسازی یک سیستم اشتراک زمانی استفاده کنید ،با
سیاستهایی که برای بهینهسازی یک سیستم دستهای چندبرنامهای استفاده میکنید ،مقایسه کنید.
.2.4هدف از فراخوانی سیستم چیست و تماس های سیستمی چگونه با سیستم عامل و مفهوم عملیات دوگانه حالت هسته و
حالت کاربر ارتباط دارند؟
.2.5در سیستم عامل اصلی آیبیام ،OS/390 ،یکی از ماژولهای اصلی در هسته System Resource Manager ،است.
این ماژول وظیفه تخصیص منابع بین فضاهای آدرس فرایندها را بر عهده دارد SRM .به OS/390درجه ای از پیچیدگی
منحصر به فرد در بین سیستم عامل ها می دهد .هیچ سیستم عامل اصلی دیگری و مطمئناً هیچ نوع سیستم عامل دیگری نمی
تواند با عملکردهای انجام شده توسط SRMمطابقت داشته باشد .مفهوم منبع شامل پردازنده ،حافظه حقیقی و کانال های
I/Oاست SRM .آمار مربوط به استفاده از پردازنده ،کانال و ساختارهای داده کلیدی مختلف را جمع آوری می کند .هدف آن
ارائه عملکرد بهینه بر اساس پایش و تحلیل عملکرد است .نصب اهداف عملکردی مختلفی را مشخص میکند ،و اینها به عنوان
راهنمایی برای SRMعمل میکنند ،که به صورت پویا ویژگیهای نصب و عملکرد کار را بر اساس استفاده از سیستم تغییر
میدهد .به نوبه خود SRM ،گزارش هایی را ارائه می دهد که اپراتور آموزش دیده را قادر می سازد تا تنظیمات و تنظیمات
پارامتر را برای بهبود خدمات کاربر اصالح کند.
این مشکل به یک نمونه از فعالیت SRMمربوط می شود .حافظه حقیقی به بلوک هایی با اندازه مساوی به نام فریم تقسیم می
شود که ممکن است هزاران عدد باشد .هر فریم می تواند یک بلوک از حافظه مجازی که به عنوان صفحه نامیده می شود را در
خود جای دهد SRM .تقریباً 20بار در ثانیه کنترل را دریافت می کند و هر فریم صفحه را بازرسی می کند .اگر صفحه ارجاع
داده نشده یا تغییر داده نشده باشد ،شمارنده 1افزایش می یابد .با گذشت زمان SRM ،این اعداد را میانگین می کند تا
میانگین ثانیه هایی را که یک فریم صفحه در سیستم دست نخورده می ماند ،تعیین کند .هدف از این کار چه می تواند باشد و
SRMچه اقدامی ممکن است انجام دهد؟
132
سیستم عامل های داخلی و اصول طراحی133.........................................................................................................................
.2.6یک چند پردازنده با هشت پردازنده دارای 20درایو نوار متصل است .تعداد زیادی کار به سیستم ارسال شده است که هر
کدام به حداکثر چهار درایو نوار برای کامل شدن نیاز دارند .فرض کنید که هر کار فقط با سه درایو نوار برای مدت طوالنی شروع
به اجرا می کند ،قبل از اینکه به درایو نوار چهارم برای مدت کوتاهی در پایان کار خود نیاز داشته باشید .همچنین عرضه بی
پایان چنین مشاغلی را فرض کنید.
آ .فرض کنید زمانبندی در سیستم عامل کاری را شروع نمی کند مگر اینکه چهار نوار وجود داشته باشد
درایوهای موجود هنگامی که یک کار شروع می شود ،بالفاصله چهار درایو اختصاص داده می شود و تا پایان کار آزاد نمی شوند.
حداکثر تعداد مشاغلی که می تواند در یک زمان در حال انجام باشد چقدر است؟ حداکثر و حداقل تعداد درایوهای نواری که
ممکن است در نتیجه این خط مشی بیکار باقی بمانند چقدر است؟
ب یک سیاست جایگزین برای بهبود استفاده از درایو نوار و در عین حال جلوگیری از وقفه سیستم پیشنهاد کنید .حداکثر تعداد
مشاغلی که می تواند در یک زمان در حال انجام باشد چقدر است؟ حدود تعداد درایوهای نوار بدون کار چقدر است؟
133
سیستم عامل های داخلی و اصول طراحی134.........................................................................................................................
بخش دوم
فصل 3
3.1فرآیند چیست؟
فرآیندهای معلق
3.3شرح فرآیند
3.4کنترل فرآیند
3.7خالصه
134
سیستم عامل های داخلی و اصول طراحی135.........................................................................................................................
اهداف یادگیری
-اصطالح فرآیند را تعریف کنید و رابطه بین فرآیندها و بلوک های کنترل فرآیند را توضیح دهید.
-مفهوم یک حالت فرآیندی را توضیح دهید و در مورد انتقال حالتی که فرآیندها متحمل می شوند بحث کنید.
-هدف ساختارهای داده و عناصر ساختار داده مورد استفاده توسط یک سیستم عامل برای مدیریت فرآیندها را فهرست کرده و
توصیف کنید.
تمام سیستم عامل های چندبرنامه نویسی ،از سیستم های تک کاربره مانند ویندوز برای کاربران نهایی گرفته تا سیستم های
مرکزی مانند سیستم عامل اصلی z/OS ،IBMکه می تواند هزاران کاربر را پشتیبانی کند ،بر اساس مفهوم فرآیند ساخته شده
اند .اکثر الزاماتی که سیستم عامل باید برآورده کند را می توان با ارجاع به فرآیندها بیان کرد:
-سیستم عامل باید در اجرای چندین فرآیند دخالت کند تا در عین حال زمان پاسخگویی معقول را فراهم کند.
-سیستم عامل باید منابع را به فرآیندها مطابق با یک خط مشی خاص تخصیص دهد به عنوان مثال ،عملکردها یا برنامه های
خاص دارای اولویت باالتری هستند و در عین حال از وقفه 9جلوگیری کند.
-ممکن است سیستم عامل برای پشتیبانی از ارتباطات بین فرآیندی و ایجاد فرآیندها توسط کاربر مورد نیاز باشد ،که هر دو
ممکن است به ساختار برنامه ها کمک کنند.
ما با بررسی روشی که سیستم عامل فرآیندها را نشان می دهد و کنترل می کند ،شروع می کنیم .سپس ،این فصل به بررسی
وضعیت های فرآیندی می پردازد که رفتار فرآیندها را مشخص می کند .سپس به ساختارهای داده ای که سیستم عامل برای
9وقفه در فصل 6مورد بررسی قرار می گیرد .به عنوان یک مثال ساده ،وقفه زمانی رخ می دهد که دو فرآیند برای ادامه به دو منبع مشابه نیاز داشته باشند و هر کدام مالکیت یکی
را داشته باشند .مگر اینکه اقدامی انجام شود ،هر فرآیند به طور نامحدود منتظر منبع گم شده خواهد ماند.
135
سیستم عامل های داخلی و اصول طراحی136.........................................................................................................................
مدیریت فرآیندها استفاده می کند نگاه می کنیم .اینها شامل ساختارهای داده برای نشان دادن وضعیت هر فرآیند و ساختارهای
داده ای است که سایر ویژگی های فرآیندهایی را که سیستم عامل برای دستیابی به اهداف خود به آنها نیاز دارد ،ثبت می کند.
در مرحله بعد ،به روش هایی که سیستم عامل از این ساختارهای داده برای کنترل اجرای فرآیند استفاده می کند ،نگاه می
کنیم .در نهایت ،مدیریت فرآیند را در UNIX SVR4مورد بحث قرار می دهیم .فصل 4نمونه های مدرن تری از مدیریت
فرآیند ارائه می دهد.
این فصل گهگاه به حافظه مجازی اشاره می کند .اغلب اوقات ،ما میتوانیم این مفهوم را در برخورد با فرآیندها نادیده بگیریم ،اما
در برخی نقاط بحث ،مالحظات حافظه مجازی مناسب است .حافظه مجازی در فصل 2پیش نمایش داده شده و در فصل 8به
تفصیل مورد بحث قرار گرفته است.
3.1فرآیند چیست؟
پیش زمینه
قبل از تعریف اصطالح فرآیند ،مفید است که برخی از مفاهیم معرفی شده در فصل های 1و 2را خالصه کنیم:
.1پلتفرم کامپیوتر از مجموعه ای از منابع سخت افزاری مانند پردازنده ،حافظه اصلی ،ماژول های ورودی/خروجی ،تایمرها،
درایوهای دیسک و غیره تشکیل شده است.
.2برنامه های کاربردی کامپیوتری برای انجام برخی کارها توسعه یافته اند .به طور معمول ،آنها ورودی های دنیای بیرون را می
پذیرند ،برخی از پردازش ها را انجام می دهند و خروجی تولید می کنند.
.3نوشتن مستقیم برنامه ها برای یک پلتفرم سخت افزاری ناکارآمد است .دالیل اصلی این امر به شرح زیر است:
آ .برنامه های متعددی را می توان برای یک پلتفرم توسعه داد .بنابراین ،ایجاد روال های مشترک برای دسترسی به منابع
کامپیوتر منطقی است.
ب خود پردازنده فقط از چندبرنامهنویسی پشتیبانی محدودی میکند .نرمافزاری برای مدیریت اشتراکگذاری پردازنده و سایر
منابع توسط چندین برنامه به طور همزمان مورد نیاز است.
ج هنگامی که چندین برنامه به طور همزمان فعال هستند ،الزم است از داده ها ،استفاده از ورودی/خروجی و سایر استفاده از
منابع هر برنامه از برنامه های دیگر محافظت شود.
136
سیستم عامل های داخلی و اصول طراحی137.........................................................................................................................
.4سیستم عامل برای ارائه یک رابط کاربری راحت ،غنی ،ایمن و سازگار برای برنامه های کاربردی ایجاد شده است .سیستم
عامل الیه ای از نرم افزار بین برنامه ها و سخت افزار کامپیوتر است شکل 2.1که از برنامه ها و برنامه های کاربردی پشتیبانی
می کند.
.5ما میتوانیم سیستمعامل را بهعنوان یک نمایش یکنواخت و انتزاعی از منابع در نظر بگیریم که توسط برنامهها قابل
درخواست و دسترسی است .منابع شامل حافظه اصلی ،رابط های شبکه ،سیستم های فایل و غیره است .هنگامی که سیستم
عامل این انتزاع منابع را برای استفاده برنامه ها ایجاد کرد ،باید استفاده از آنها را نیز مدیریت کند .به عنوان مثال ،یک سیستم
عامل ممکن است به اشتراک گذاری منابع و حفاظت از منابع را اجازه دهد.
اکنون که مفاهیم برنامهها ،نرمافزار سیستم و منابع را در اختیار داریم ،در موقعیتی قرار داریم که چگونه سیستمعامل میتواند
بهطور منظم اجرای برنامهها را مدیریت کند تا
-پردازنده فیزیکی بین چندین برنامه جابجا می شود ،بنابراین به نظر می رسد که همه در حال پیشرفت هستند.
رویکرد همه سیستم عامل های مدرن تکیه بر مدلی است که در آن اجرای یک برنامه کاربردی با وجود یک یا چند فرآیند
مطابقت دارد.
از فصل 2به یاد بیاورید که ما تعاریف متعددی از اصطالح فرآیند ارائه کردیم
-واحدی از فعالیت که با اجرای دنباله ای از دستورالعمل ها ،وضعیت فعلی و مجموعه ای از منابع سیستم مرتبط است.
ما همچنین می توانیم یک فرآیند را به عنوان یک موجودیت در نظر بگیریم که از تعدادی عنصر تشکیل شده است .دو عنصر
ضروری یک فرآیند عبارتند از کد برنامه که ممکن است با سایر فرآیندهایی که همان برنامه را اجرا می کنند به اشتراک گذاشته
شود و مجموعه ای از داده های مرتبط با آن کد .فرض کنید که پردازنده شروع به اجرای این کد برنامه می کند و ما به این
137
سیستم عامل های داخلی و اصول طراحی138.........................................................................................................................
موجودیت اجرایی به عنوان یک فرآیند اشاره می کنیم .در هر نقطه از زمان ،در حالی که برنامه در حال اجرا است ،این فرآیند را
می توان به طور منحصر به فرد با تعدادی از عناصر ،از جمله موارد زیر مشخص کرد:
-شناسه :یک شناسه منحصر به فرد مرتبط با این فرآیند ،برای متمایز کردن آن از سایر فرآیندها.
: State -اگر فرآیند در حال اجرا باشد ،در حالت در حال اجرا است.
نشانگرهای حافظه :شامل نشانگرهایی به کد برنامه و داده های مرتبط با این فرآیند ،به عالوه هر بلوک حافظه مشترک با سایر
فرآیندها است.
-داده های زمینه :داده هایی هستند که در هنگام اجرای فرآیند در رجیسترهای پردازنده وجود دارند.
-اطالعات وضعیت ورودی/خروجی :شامل درخواستهای ورودی/خروجی برجسته ،دستگاههای ورودی/خروجی مثالً درایوهای
دیسک اختصاص داده شده به این فرآیند ،فهرستی از فایلهای در حال استفاده توسط فرآیند و غیره است.
-اطالعات حسابداری :ممکن است شامل مقدار زمان پردازنده و ساعت استفاده شده ،محدودیت های زمانی ،شماره حساب و
غیره باشد.
اطالعات لیست قبلی در یک ساختار داده ذخیره می شود که معموالً بلوک کنترل فرآیند نامیده می شود شکل 3.1که توسط
سیستم عامل ایجاد و مدیریت می شود .نکته قابل توجه در مورد بلوک کنترل فرآیند این است که حاوی اطالعات کافی است به
طوری که می توان یک فرآیند در حال اجرا را قطع کرد و بعداً اجرا را از سر گرفت ،گویی وقفه رخ نداده است .بلوک کنترل
فرآیند ابزار کلیدی است که سیستم عامل را قادر میسازد تا از چندین فرآیند پشتیبانی کند و چند پردازش را فراهم کند.
هنگامی که یک فرآیند قطع می شود ،مقادیر فعلی شمارنده برنامه و رجیسترهای پردازنده داده های زمینه در زمینه های
مناسب بلوک کنترل فرآیند مربوطه ذخیره می شوند و وضعیت فرآیند به مقدار دیگری تغییر می کند ،مانند به صورت مسدود یا
آماده در ادامه توضیح داده شد .سیستم عامل اکنون آزاد است تا برخی از فرآیندهای دیگر را در حالت در حال اجرا قرار دهد.
شمارنده برنامه و داده های زمینه برای این فرآیند در رجیسترهای پردازنده بارگذاری می شوند و این فرآیند اکنون شروع به اجرا
می کند.
138
سیستم عامل های داخلی و اصول طراحی139.........................................................................................................................
مشخص کننده
موقعیت
اولویت
شمارنده برنامه
نشانگرهای حافظه
بنابراین ،می توان گفت که یک فرآیند از کد برنامه و داده های مرتبط به اضافه یک بلوک کنترل فرآیند تشکیل شده است .برای
یک کامپیوتر تک پردازنده ،در هر زمان معین ،حداکثر یک فرآیند در حال اجرا است و آن فرآیند در حالت اجرا قرار دارد.
همانطور که قبالً بحث شد ،برای اجرای یک برنامه ،یک فرآیند یا وظیفه برای آن برنامه ایجاد می شود .از دیدگاه پردازنده،
دستورات را از مجموعه خود به ترتیبی که توسط مقادیر متغیر در ثبات برنامه شمارنده دیکته می شود ،اجرا می کند .با گذشت
زمان ،شمارنده برنامه ممکن است به کد در برنامه های مختلف که بخشی از فرآیندهای مختلف هستند اشاره کند .از دیدگاه یک
برنامه منفرد ،اجرای آن مستلزم دنباله ای از دستورالعمل ها در آن برنامه است.
139
سیستم عامل های داخلی و اصول طراحی140.........................................................................................................................
ما میتوانیم رفتار یک فرآیند فردی را با فهرست کردن دنباله دستورالعملهایی که برای آن فرآیند اجرا میشوند ،مشخص کنیم.
به چنین فهرستی به عنوان اثری از فرآیند یاد می شود .ما میتوانیم رفتار پردازنده را با نشان دادن اینکه چگونه ردپای
فرآیندهای مختلف در هم میپیچد ،مشخص کنیم.
اجازه دهید یک مثال بسیار ساده را در نظر بگیریم .شکل 3.2یک طرح حافظه از سه فرآیند را نشان می دهد .برای ساده کردن
بحث ،استفاده از حافظه مجازی را فرض نمی کنیم .بنابراین هر سه فرآیند با برنامه هایی که به طور کامل در حافظه اصلی
بارگذاری شده اند نشان داده می شوند .عالوه بر این ،یک برنامه توزیع کننده کوچک وجود دارد که پردازنده را از یک فرآیند به
فرآیند دیگر سوئیچ می کند .شکل 3.3ردپای هر یک از فرآیندها را در مراحل اولیه اجرای آنها نشان می دهد 12 .دستورالعمل
اول اجرا شده در فرآیندهای Aو Cنشان داده شده است .فرآیند Bچهار دستورالعمل را اجرا می کند و ما فرض می کنیم که
دستور چهارم یک عملیات I/Oرا فراخوانی می کند که فرآیند باید منتظر بماند.
اکنون اجازه دهید این ردیابی ها را از دیدگاه پردازنده مشاهده کنیم .شکل 3.4ردهای به هم پیوسته حاصل از 52چرخه
دستورالعمل اول را نشان می دهد برای راحتی ،چرخه های دستورالعمل شماره گذاری شده اند .در این شکل ،مناطق سایه دار
کد اجرا شده توسط دیسپچر را نشان می دهد .توالی یکسانی از دستورالعمل ها توسط توزیع کننده در هر نمونه اجرا می شود
زیرا عملکرد یکسان توزیع کننده در حال اجرا است .ما فرض میکنیم که سیستمعامل فقط به یک فرآیند اجازه میدهد تا
حداکثر شش دوره دستورالعمل اجرا شود و پس از آن قطع میشود .این مانع از انحصار هر فرآیند واحد در زمان پردازنده می
شود .همانطور که شکل 3.4نشان میدهد ،شش دستورالعمل اول فرآیند Aاجرا میشوند و به دنبال آن یک بازه زمانی ایجاد
میشود .ستون های اول و سوم چرخه های دستورالعمل را شمارش می کنند.
140
سیستم عامل های داخلی و اصول طراحی141.........................................................................................................................
ستون های دوم و چهارم نشانی آدرس دستورالعمل در حال اجرا و اجرای برخی از کدها در دیسپچر را نشان می دهد که شش
دستورالعمل را قبل از تبدیل کنترل به پردازش Bاجرا می کند .صبر کن .بنابراین ،پردازنده اجرای فرآیند Bرا متوقف میکند و
از طریق دیسپچر به پردازش Cمیپردازد .پس از وقفه زمانی ،پردازنده به پردازش Aبرمیگردد .وقتی این فرآیند به پایان
میرسد ،پردازش Bهمچنان در انتظار Iاست .عملیات O/تکمیل شود ،بنابراین دیسپچر دوباره به پردازش Cمیپردازد.
مسئولیت اصلی سیستم عامل کنترل اجرای فرآیندها است .این شامل تعیین الگوی interleavingبرای اجرا و تخصیص منابع
به فرآیندها است .اولین قدم در طراحی یک سیستم عامل برای کنترل فرآیندها ،توصیف رفتاری است که ما می خواهیم
فرآیندها نشان دهند.
141
سیستم عامل های داخلی و اصول طراحی142.........................................................................................................................
ما میتوانیم سادهترین مدل ممکن را با مشاهده این نکته بسازیم که در هر زمان ،یک فرآیند یا توسط یک پردازنده اجرا میشود
یا نه .در این مدل ،یک فرآیند ممکن است در یکی از دو حالت باشد :در حال اجرا یا در حال اجرا نیست ،همانطور که در شکل
a3.5نشان داده شده است .هنگامی که سیستم عامل یک فرآیند جدید ایجاد می کند ،یک بلوک کنترل فرآیند برای فرآیند
ایجاد می کند و آن فرآیند را در حالت Not Runningوارد سیستم می کند .این فرآیند وجود دارد ،برای سیستم عامل
شناخته شده است ،و منتظر فرصتی برای اجرا است .هر از چند گاهی ،فرآیند در حال اجرا قطع می شود و بخش توزیع کننده
سیستم عامل فرآیند دیگری را برای اجرا انتخاب می کند .فرآیند اول از حالت Runningبه حالت Not Runningو یکی از
فرآیندهای دیگر به حالت Runningمنتقل می شود.
=100آدرس شروع برنامه توزیع کننده /مناطق سایه دار نشان دهنده اجرای فرآیند دیسپچر است .ستون های اول و سوم چرخه
های دستورالعمل را شمارش می کنند /.ستون های دوم و چهارم آدرس دستور در حال اجرا را نشان می دهند.
از این مدل ساده ،میتوانیم برخی از عناصر طراحی سیستمعامل را درک کنیم .هر فرآیند باید به نحوی نمایش داده شود تا
سیستم عامل بتواند آن را پیگیری کند .به این معنی که باید برخی اطالعات مربوط به هر فرآیند ،از جمله وضعیت فعلی و مکان
در حافظه وجود داشته باشد .این بلوک کنترل فرآیند است .فرآیندهایی که در حال اجرا نیستند باید به نوعی در صف نگه داشته
شوند و منتظر نوبت اجرا شوند .شکل b3.5یک ساختار را نشان می دهد .یک صف واحد وجود دارد که در آن هر ورودی نشانگر
بلوک کنترل فرآیند یک فرآیند خاص است .از طرف دیگر ،صف ممکن است شامل یک لیست پیوندی از بلوک های داده باشد
که در آن هر بلوک یک فرآیند را نشان می دهد .ما این اجرای اخیر را متعاقبا بررسی خواهیم کرد.
142
سیستم عامل های داخلی و اصول طراحی143.........................................................................................................................
ورود خروج
توقف
صف
ورود خروج
توقف
ما می توانیم رفتار دیسپچر را بر اساس این نمودار صف توصیف کنیم .فرآیندی که قطع می شود به صف فرآیندهای انتظار
منتقل می شود .از طرف دیگر ،اگر فرآیند تکمیل یا متوقف شده باشد ،دور انداخته می شود از سیستم خارج می شود .در هر
صورت ،توزیع کننده فرآیند دیگری را از صف برای اجرا می گیرد.
قبل از اصالح مدل ساده دو حالته ،بحث در مورد ایجاد و خاتمه فرآیندها مفید خواهد بود .در نهایت ،و صرف نظر از مدل رفتار
فرآیندی که استفاده می شود ،عمر یک فرآیند با ایجاد و پایان آن محدود می شود.
ایجاد فرآیند هنگامی که قرار است یک فرآیند جدید به فرآیندهایی که در حال حاضر مدیریت می شوند اضافه شود ،سیستم
عامل ساختارهای داده ای را ایجاد می کند که برای مدیریت فرآیند استفاده می شود و فضای آدرس در حافظه اصلی را به
فرآیند اختصاص می دهد .ما این ساختارهای داده را در بخش 3.3توضیح می دهیم .این اقدامات ایجاد یک فرآیند جدید را
تشکیل می دهد.
همانطور که در جدول 3.1نشان داده شده است ،چهار رویداد مشترک منجر به ایجاد یک فرآیند می شود .در یک محیط دسته
ای ،فرآیندی در پاسخ به ارسال یک کار ایجاد می شود .در یک محیط تعاملی ،زمانی که یک کاربر جدید تالش می کند وارد
سیستم شود ،فرآیندی ایجاد می شود .در هر دو مورد ،سیستم عامل مسئول ایجاد فرآیند جدید است .یک سیستم عامل
همچنین ممکن است یک فرآیند از طرف یک برنامه ایجاد کند.
143
سیستم عامل های داخلی و اصول طراحی144.........................................................................................................................
به عنوان مثال ،اگر کاربر درخواست کند که یک فایل چاپ شود ،سیستم عامل می تواند فرآیندی ایجاد کند که چاپ را مدیریت
کند .بنابراین فرآیند درخواست می تواند مستقل از زمان الزم برای تکمیل کار چاپ ادامه یابد.
کار دسته ای جدید سیستم عامل با یک جریان کنترل دسته ای ،معموالً روی
نوار یا دیسک ارائه می شود .هنگامی که سیستم عامل
برای انجام کار جدید آماده می شود ،دنباله بعدی
دستورات کنترل کار را می خواند.
ورود تعاملی کاربر در ترمینال به سیستم وارد می شود.
ایجاد شده توسط سیستم عامل سیستم عامل میتواند فرآیندی را برای انجام یک عملکرد
برای ارائه یک سرویس از طرف یک برنامه کاربر ،بدون نیاز به منتظر ماندن کاربر
به عنوان مثال ،فرآیندی برای کنترل چاپ ایجاد کند.
ایجاد شده توسط فرآیند موجود به منظور مدوالر بودن یا بهره برداری از موازی سازی،
یک برنامه کاربر می تواند ایجاد تعدادی از فرآیندها را
دیکته کند.
به طور سنتی ،سیستم عامل همه فرآیندها را به گونهای ایجاد میکرد که برای کاربر یا برنامه کاربردی شفاف بود ،و این هنوز
معموالً در بسیاری از سیستمعاملهای معاصر یافت میشود .با این حال ،اجازه دادن به یک فرآیند برای ایجاد فرآیند دیگر می
تواند مفید باشد .به عنوان مثال ،یک فرآیند برنامه کاربردی ممکن است فرآیند دیگری را برای دریافت داده هایی که برنامه
تولید می کند ایجاد کند و آن داده ها را به شکلی مناسب برای تجزیه و تحلیل بعدی سازماندهی کند .فرآیند جدید به موازات
فرآیند اصلی اجرا میشود و هر از گاهی که دادههای جدید در دسترس است فعال میشود .این ترتیب می تواند در ساختار
برنامه بسیار مفید باشد .به عنوان مثال دیگر ،یک فرآیند سرور به عنوان مثال ،سرور چاپ ،سرور فایل ممکن است برای هر
درخواستی که رسیدگی می کند ،یک فرآیند جدید ایجاد کند .هنگامی که سیستم عامل یک فرآیند را به درخواست صریح یک
فرآیند دیگر ایجاد می کند ،عمل به عنوان تخم ریزی فرآیند نامیده می شود.
هنگامی که یک فرآیند دیگر را ایجاد می کند ،اولی به عنوان فرآیند والد و فرآیند تخم ریزی شده به عنوان فرآیند فرزند نامیده
می شود .به طور معمول ،فرآیندهای "مرتبط" نیاز به ارتباط و همکاری با یکدیگر دارند .دستیابی به این همکاری برای برنامه
نویس کار دشواری است .این موضوع در فصل 5مورد بحث قرار گرفته است.
144
سیستم عامل های داخلی و اصول طراحی145.........................................................................................................................
خاتمه فرآیند جدول 3.2دالیل معمولی برای خاتمه فرآیند را خالصه می کند .هر سیستم کامپیوتری باید وسیله ای را برای یک
فرآیند فراهم کند تا تکمیل آن را نشان دهد .یک کار دسته ای باید شامل یک دستورالعمل توقف یا یک فراخوان صریح سرویس
سیستم عامل برای خاتمه باشد .در مورد اول ،دستور توقف یک وقفه ایجاد می کند تا به سیستم عامل هشدار دهد که یک
فرآیند تکمیل شده است .برای یک برنامه تعاملی ،عملکرد کاربر نشان می دهد که فرآیند تکمیل شده است .به عنوان مثال ،در
یک سیستم اشتراک زمانی ،فرآیند یک کاربر خاص زمانی خاتمه می یابد که کاربر از سیستم خارج شود یا ترمینال خود را
خاموش کند .در رایانه شخصی یا ایستگاه کاری ،کاربر ممکن است از یک برنامه مانند پردازش کلمه یا صفحه گسترده خارج
شود .تمام این اقدامات در نهایت منجر به درخواست سرویس به سیستم عامل برای پایان دادن به فرآیند درخواست می شود.
عالوه بر این ،تعدادی از شرایط خطا و خطا می تواند منجر به خاتمه یک فرآیند شود .جدول 3.2برخی از شرایط 10رایج تر
شناخته شده را فهرست می کند 3 .در نهایت ،در برخی از سیستم عامل ها ،یک فرآیند ممکن است توسط طرفدار خاتمه یابد.
اگر همه فرآیندها همیشه آماده اجرا بودند ،نظم صف پیشنهاد شده در شکل b3.5موثر خواهد بود .صف یک لیست اول به اول
است و پردازنده در فرآیندهای موجود به صورت دورگرد عمل می کند به هر فرآیند در صف زمان مشخصی داده می شود تا اجرا
شود و سپس به صف بازگردانده می شود ، .مگر اینکه مسدود شده باشد.
با این حال ،حتی با مثال سادهای که توضیح دادیم ،این پیادهسازی ناکافی است :برخی از فرآیندها در حالت اجرا نشده آماده
اجرا هستند ،در حالی که برخی دیگر مسدود شدهاند و منتظر تکمیل عملیات I/Oهستند .بنابراین ،با استفاده از یک صف،
توزیع کننده نمی تواند فقط فرآیند را در قدیمی ترین انتهای صف انتخاب کند .در عوض ،دیسپاچر باید لیست را اسکن کند و به
دنبال فرآیندی باشد که مسدود نشده و طوالنیترین مدت در صف بوده است.
تکمیل عادی این فرآیند یک فراخوانی سرویس سیستم عامل را اجرا می
کند تا نشان دهد که اجرای آن به پایان رسیده است.
از محدودیت زمانی فراتر این فرآیند بیش از مدت زمان کل مشخص شده اجرا شده
رفت است .برای نوع زمانی که اندازه گیری می شود ،تعدادی
احتمال وجود دارد .اینها شامل کل زمان سپری شده "زمان
ساعت دیواری" ،مدت زمان صرف شده برای اجرا ،و در مورد
3 10یک سیستم عامل بخشنده ممکن است ،در برخی موارد ،به کاربر اجازه دهد تا بدون خاتمه دادن به فرآیند ،از یک خطا بازیابی کند .به عنوان مثال ،اگر کاربر درخواست
دسترسی به فایلی را داشته باشد و آن دسترسی رد شود ،سیستم عامل ممکن است به سادگی به کاربر اطالع دهد که دسترسی رد شده است و اجازه می دهد روند ادامه یابد.
145
سیستم عامل های داخلی و اصول طراحی146.........................................................................................................................
این فرآیند به حافظه بیشتری از آنچه سیستم می تواند ارائه دهد حافظه در دسترس نیست
نیاز دارد.
نقض حدود فرآیند سعی می کند به یک مکان حافظه دسترسی پیدا کند که
اجازه دسترسی به آن را ندارد.
خطای حفاظت این فرآیند سعی میکند از منبعی مانند فایلی استفاده
کند که مجاز به استفاده از آن نیست ،یا سعی میکند از
آن به شیوهای نامناسب استفاده کند ،مانند نوشتن در یک
فایل فقط خواندنی.
خطای حسابی این فرآیند یک محاسبات ممنوع ،مانند تقسیم بر صفر را
امتحان میکند ،یا سعی میکند اعدادی بزرگتر از ظرفیت
سختافزار را ذخیره کند.
گذر زمان این فرآیند بیش از یک حداکثر مشخص شده برای رخ دادن
یک رویداد خاص منتظر مانده است.
خرابی ورودی/خروجی خطایی در حین ورودی یا خروجی رخ میدهد ،مانند
ناتوانی در یافتن یک فایل ،شکست در خواندن یا نوشتن
پس از حداکثر تعداد تالش مشخص مثالً هنگامی که یک
ناحیه معیوب روی نوار مواجه میشوید ،یا عملیات
نامعتبر مانند خواندن از چاپگر خط.
دستورالعمل نامعتبر این فرآیند تالش می کند تا یک دستورالعمل
غیرموجود را اجرا کند اغلب در نتیجه انشعاب به یک
منطقه داده و تالش برای اجرای داده ها.
آموزش ممتاز این فرآیند سعی می کند از یک دستورالعمل رزرو شده برای
سیستم عامل استفاده کند.
سوء استفاده از داده ها یک قطعه داده از نوع اشتباه است یا مقداردهی اولیه نشده است.
146
سیستم عامل های داخلی و اصول طراحی147.........................................................................................................................
مداخله اپراتور یا سیستم به دالیلی ،اپراتور یا سیستم عامل فرآیند را خاتمه داده
عامل است به عنوان مثال ،اگر یک وقفه وجود داشته باشد.
فسخ والدین هنگامی که یک والدین خاتمه می دهند ،سیستم عامل ممکن
است به طور خودکار تمام فرزندان آن والدین را خاتمه دهد.
درخواست والدین یک فرآیند والد معموالً این اختیار را دارد که هر یک از فرزندان
خود را خاتمه دهد.
یک راه طبیعی تر برای رسیدگی به این وضعیت ،تقسیم حالت Not Runningبه دو حالت آماده و مسدود است .این در شکل
3.6نشان داده شده است .برای اندازه گیری خوب ،ما دو حالت اضافی اضافه کرده ایم که مفید خواهد بود .پنج حالت در این
نمودار جدید به شرح زیر است:
: Running -فرآیندی که در حال حاضر در حال اجراست .برای این فصل ،ما یک کامپیوتر با یک پردازنده را فرض می کنیم،
بنابراین حداکثر یک فرآیند در هر زمان می تواند در این حالت باشد.
11 Blocked/Waiting: -فرآیندی که تا زمانی که رویدادی رخ ندهد ،مانند تکمیل یک عملیات I/Oنمی تواند اجرا شود.
-جدید :فرآیندی که به تازگی ایجاد شده است اما هنوز توسط سیستم عامل در مجموعه فرآیندهای اجرایی پذیرفته نشده است.
به طور معمول ،یک فرآیند جدید هنوز در حافظه اصلی بارگذاری نشده است ،اگرچه بلوک کنترل فرآیند آن ایجاد شده است.
-خروج :فرآیندی که توسط سیستم عامل از مجموعه فرآیندهای اجرایی خارج شده است ،یا به دلیل توقف یا به دلیل توقف آن
به دالیلی.
حالت های جدید و خروج سازه های مفیدی برای مدیریت فرآیند هستند .حالت جدید مربوط به فرآیندی است که به تازگی
تعریف شده است .به عنوان مثال ،اگر یک کاربر جدید سعی کند به سیستم اشتراک زمانی وارد شود یا یک کار دسته ای جدید
برای اجرا ارسال شود ،سیستم عامل می تواند یک فرآیند جدید را در دو مرحله تعریف کند .ابتدا ،سیستم عامل کارهای خانه
داری الزم را انجام می دهد .یک شناسه با فرآیند مرتبط است .هر جدولی که برای مدیریت فرآیند مورد نیاز است تخصیص داده
شده و ساخته می شود .در این مرحله ،فرآیند در حالت جدید است .این بدان معناست که سیستم عامل اقدامات الزم برای ایجاد
Waiting 11یک اصطالح جایگزین پرکاربرد برای Blockedبه عنوان یک وضعیت فرآیند است .به طور کلی ،ما استفاده خواهیم کرد
مسدود شده است ،اما شرایط قابل تعویض هستند.
147
سیستم عامل های داخلی و اصول طراحی148.........................................................................................................................
فرآیند را انجام داده است اما خود را متعهد به اجرای فرآیند نکرده است .به عنوان مثال ،سیستم عامل ممکن است تعداد
فرآیندهایی را که ممکن است در سیستم وجود داشته باشد به دالیل عملکرد یا محدودیت حافظه اصلی محدود کند .در حالی
که یک فرآیند در حالت جدید است ،اطالعات مربوط به فرآیند مورد نیاز سیستم عامل در جداول کنترل در حافظه اصلی
نگهداری می شود .با این حال ،خود این فرآیند در حافظه اصلی نیست .یعنی کد برنامه ای که باید اجرا شود در حافظه اصلی
نیست و فضایی برای داده های مرتبط با آن برنامه در نظر گرفته نشده است .در حالی که فرآیند در حالت جدید است ،برنامه در
حافظه ثانویه ،معموالً ذخیره سازی دیسک ،12باقی می ماند
به طور مشابه ،یک فرآیند در دو مرحله از یک سیستم خارج می شود .اوالً ،یک فرآیند زمانی خاتمه می یابد که به نقطه اتمام
طبیعی برسد ،زمانی که به دلیل یک خطای غیرقابل جبران متوقف می شود ،یا زمانی که فرآیند دیگری با اختیار مناسب باعث
توقف فرآیند می شود.
خاتمه فرآیند را به حالت خروج منتقل می کند .در این مرحله ،فرآیند دیگر برای اجرا واجد شرایط نیست .جداول و سایر
اطالعات مرتبط با کار به طور موقت توسط سیستم عامل حفظ می شود ،که زمانی را برای برنامه های کمکی یا پشتیبانی برای
استخراج اطالعات مورد نیاز فراهم می کند .برای مثال ،یک برنامه حسابداری ممکن است نیاز به ثبت زمان پردازشگر و سایر
منابع مورد استفاده فرآیند برای مقاصد صورتحساب داشته باشد .یک برنامه کاربردی ممکن است نیاز به استخراج اطالعات در
مورد تاریخچه فرآیند برای اهداف مربوط به عملکرد یا تجزیه و تحلیل استفاده داشته باشد .هنگامی که این برنامه ها اطالعات
مورد نیاز را استخراج کردند ،سیستم عامل دیگر نیازی به نگهداری داده های مربوط به فرآیند ندارد و فرآیند از سیستم حذف
می شود.
12بحث این پاراگراف ،مفهوم حافظه مجازی را نادیده می گیریم .در سیستم هایی که از حافظه مجازی پشتیبانی می کنند ،زمانی که یک فرآیند از Newبه Readyمی رود ،کد
برنامه و داده های آن در حافظه مجازی بارگذاری می شود .حافظه مجازی در فصل 2به اختصار مورد بحث قرار گرفت و در فصل 8به تفصیل مورد بررسی قرار گرفت.
148
سیستم عامل های داخلی و اصول طراحی149.........................................................................................................................
شکل 3.6انواع رویدادهایی را نشان می دهد که منجر به انتقال هر حالت برای یک فرآیند می شود .انتقال های ممکن به شرح
زیر است:
: Null New -یک فرآیند جدید برای اجرای یک برنامه ایجاد می شود .این رویداد به هر یک از دالیل ذکر شده در جدول
3.1رخ می دهد.
: New Ready -سیستم عامل زمانی که برای انجام یک فرآیند اضافی آماده شود ،فرآیندی را از حالت جدید به حالت آماده
منتقل می کند .اکثر سیستم ها بر اساس تعداد فرآیندهای موجود یا مقدار حافظه مجازی متعهد به فرآیندهای موجود،
محدودیتی را تعیین می کنند .این محدودیت تضمین می کند که فرآیندهای فعال زیادی وجود ندارد که عملکرد را کاهش دهد.
: Ready Running -زمانی که زمان انتخاب یک فرآیند برای اجرا فرا می رسد ،سیستم عامل یکی از فرآیندها را در حالت
آماده انتخاب می کند .این وظیفه زمانبندی یا توزیع کننده است .زمان بندی در قسمت چهارم بررسی شده است.
-در حال اجرا خروج :فرآیند در حال اجرا توسط سیستم عامل خاتمه می یابد اگر فرآیند نشان دهد که کامل شده است یا اگر
متوقف شود .جدول 3.2را ببینید.
: Running Ready -رایج ترین دلیل این انتقال این است که فرآیند در حال اجرا به حداکثر زمان مجاز برای اجرای بدون
وقفه رسیده است .تقریباً تمام سیستم عامل های چندبرنامه نویسی این نوع نظم زمانی را تحمیل می کنند .چندین دلیل
جایگزین دیگر برای این انتقال وجود دارد که در همه سیستم عامل ها اجرا نمی شوند .موردی که در آن سیستم عامل سطوح
مختلفی از اولویت را به فرآیندهای مختلف اختصاص می دهد ،از اهمیت ویژه ای برخوردار است .برای مثال ،فرض کنید که
فرآیند Aدر یک سطح اولویت مشخص در حال اجرا است ،و فرآیند ،Bدر سطح اولویت باالتر ،مسدود شده است .اگر سیستم
عامل یاد بگیرد که رویدادی که فرآیند Bدر انتظار آن بوده رخ داده است B ،را به حالت آماده منتقل میکند ،میتواند فرآیند
Aرا قطع کند و فرآیند Bرا ارسال کند .ممکن است به طور داوطلبانه کنترل پردازنده را آزاد کند .یک مثال یک فرآیند پس
زمینه است که برخی از عملکردهای حسابداری یا نگهداری را به صورت دوره ای انجام می دهد.
: Running Blocked -یک فرآیند در صورت درخواست چیزی که باید منتظر بماند در حالت Blockedقرار می گیرد.
درخواست به سیستم عامل معموالً به صورت تماس سرویس سیستم است .یعنی فراخوانی از برنامه در حال اجرا به رویه ای که
بخشی از کد سیستم عامل است .برای مثال ،یک فرآیند ممکن است سرویسی را از سیستم عامل درخواست کند که سیستم
عامل آماده اجرای فوری آن نیست.
می تواند منبعی مانند فایل یا بخش مشترک حافظه مجازی را درخواست کند که فوراً در دسترس نیست .یا ممکن است فرآیند
اقدامی را آغاز کند ،مانند عملیات ،I/Oکه باید قبل از ادامه فرآیند تکمیل شود .هنگامی که فرآیندها با یکدیگر ارتباط برقرار
149
سیستم عامل های داخلی و اصول طراحی150.........................................................................................................................
می کنند ،یک فرآیند ممکن است زمانی که منتظر فرآیند دیگری برای ارائه داده است یا منتظر پیامی از یک فرآیند دیگر است،
مسدود شود.
: Blocked Ready -یک فرآیند در حالت Blockedهنگامی که رویدادی که برای آن منتظر بوده رخ می دهد به حالت
آماده منتقل می شود.
-خروج آماده :برای وضوح ،این انتقال در نمودار وضعیت نشان داده نمی شود .در برخی از سیستم ها ،والدین ممکن است در هر
زمانی فرآیند فرزند را خاتمه دهند .همچنین ،اگر یکی از والدین خاتمه دهد ،تمام فرآیندهای فرزند مرتبط با آن والد ممکن
است خاتمه یابد.
با بازگشت به مثال ساده خود ،شکل 3.7انتقال هر فرآیند در بین حالت ها را نشان می دهد .شکل a3.8روشی را نشان می
دهد که در آن یک رشته صف بندی ممکن است با دو صف اجرا شود :یک صف آماده و یک صف مسدود شده .با ورود هر فرآیند
به سیستم ،در صف آماده قرار می گیرد.
وقتی زمان آن فرا می رسد که سیستم عامل فرآیند دیگری را برای اجرا انتخاب کند ،یکی را از صف آماده انتخاب می کند .در
غیاب هر طرح اولویتی ،این می تواند یک صف ساده اول به اول باشد .هنگامی که یک فرآیند در حال اجرا از اجرا حذف می
شود ،بسته به شرایط یا خاتمه می یابد یا در صف آماده یا مسدود قرار می گیرد .در نهایت ،هنگامی که یک رویداد رخ می دهد،
هر فرآیندی در صف Blockedکه فقط در آن رویداد منتظر بوده است به صف آماده منتقل می شود.
این ترتیب اخیر به این معنی است که ،هنگامی که یک رویداد رخ می دهد ،سیستم عامل باید کل صف مسدود شده را اسکن
کند و فرآیندهای منتظر آن رویداد را جستجو کند .در یک سیستم عامل بزرگ ،ممکن است صدها یا حتی هزاران فرآیند در آن
صف وجود داشته باشد .بنابراین ،داشتن تعدادی صف ،یکی برای هر رویداد ،کارآمدتر خواهد بود .سپس ،هنگامی که رویداد رخ
می دهد ،کل لیست فرآیندها در صف مناسب را می توان به حالت آماده انتقال داد شکل .b3.8
150
سیستم عامل های داخلی و اصول طراحی151.........................................................................................................................
یک اصالح نهایی :اگر ارسال فرآیندها توسط یک طرح اولویت دیکته می شود ،آنگاه راحت است که تعدادی صف آماده ،یکی
برای هر سطح اولویت داشته باشیم .سپس سیستم عامل می تواند به آسانی تعیین کند که کدام فرآیند آماده با باالترین اولویت
است که طوالنی ترین زمان را انتظار داشته است.
فرآیندهای معلق
نیاز به مبادله سه حالت اصلی که قبالً توضیح داده شد آماده ،در حال اجرا ،مسدود شده روشی سیستماتیک برای مدلسازی
رفتار فرآیندها و راهنمایی اجرای سیستمعامل ارائه میکنند .برخی از سیستم عامل ها فقط با استفاده از این سه حالت ساخته
می شوند.
با این حال ،توجیه خوبی برای اضافه کردن حالت های دیگر به مدل وجود دارد .برای مشاهده مزایای این حالت های جدید،
سیستمی را در نظر بگیرید که از حافظه مجازی استفاده نمی کند .هر فرآیندی که باید اجرا شود باید به طور کامل در حافظه
اصلی بارگذاری شود .بنابراین ،در شکل ،b3.8تمام فرآیندهای موجود در تمام صف ها باید در حافظه اصلی ساکن باشند.
به یاد بیاورید که دلیل همه این ماشینهای پیچیده این است که فعالیتهای ورودی/خروجی بسیار کندتر از محاسبات هستند و
بنابراین پردازنده در یک سیستم برنامهنویسی تک در اکثر مواقع بیکار است .اما ترتیب شکل b3.8مشکل را به طور کامل حل
نمی کند .درست است که در این حالت ،حافظه چندین فرآیند را نگه میدارد و زمانی که یک فرآیند مسدود میشود ،پردازنده
151
سیستم عامل های داخلی و اصول طراحی152.........................................................................................................................
میتواند به فرآیند دیگری منتقل شود .اما پردازنده آنقدر سریعتر از ورودی/خروجی است که معموالً همه فرآیندهای موجود در
حافظه منتظر I/Oهستند .بنابراین ،حتی با چندبرنامهنویسی ،یک پردازنده ممکن است در بیشتر مواقع بیکار باشد .چه باید
کرد؟ حافظه اصلی را می توان گسترش داد تا فرآیندهای بیشتری را در خود جای دهد .اما دو نقص در این رویکرد وجود دارد.
اول ،هزینهای مربوط به حافظه اصلی است ،که اگرچه بر اساس هر بایت کوچک است ،اما با رسیدن به گیگابایت حافظه ،شروع
به افزایش میکند .دوم ،اشتهای برنامه ها برای حافظه به همان سرعتی افزایش یافته است که هزینه حافظه کاهش یافته است.
بنابراین حافظه بزرگتر منجر به فرآیندهای بزرگتر می شود ،نه فرآیندهای بیشتر.
راه حل دیگر جابجایی است که شامل انتقال بخشی یا تمام فرآیند از حافظه اصلی به دیسک است .هنگامی که هیچ یک از
فرآیندهای حافظه اصلی در حالت آماده نیست ،سیستم عامل یکی از فرآیندهای مسدود شده را روی دیسک به یک صف تعلیق
مبادله می کند .این یک صف از فرآیندهای موجود است که به طور موقت از حافظه اصلی حذف شده یا به حالت تعلیق درآمده
است .سپس سیستمعامل فرآیند دیگری را از صف تعلیق وارد میکند یا یک درخواست فرآیند جدید را پاس میکند .سپس اجرا
با فرآیند تازه وارد ادامه می یابد.
با این حال ،تعویض ،یک عملیات ورودی/خروجی است ،و بنابراین امکان بدتر کردن مشکل وجود دارد ،نه بهتر .اما از آنجایی که
ورودی/خروجی دیسک عموماً سریعترین ورودی/خروجی در یک سیستم است مثالً در مقایسه با ورودی/خروجی نوار یا چاپگر،
تعویض معموالً کارایی را افزایش میدهد.
با استفاده از مبادله همانطور که توضیح داده شد ،یک حالت دیگر باید به مدل رفتار فرآیند ما اضافه شود شکل :a3.9حالت
.Suspendهنگامی که تمام فرآیندهای حافظه اصلی در حالت مسدود هستند ،سیستم عامل میتواند یک فرآیند را با قرار
دادن آن در حالت Suspendو انتقال آن به دیسک به حالت تعلیق درآورد .فضایی که در حافظه اصلی آزاد میشود ،میتواند
برای وارد کردن فرآیند دیگری استفاده شود.
هنگامی که سیستم عامل یک عملیات تعویض را انجام می دهد ،برای انتخاب یک فرآیند برای وارد کردن به حافظه اصلی دو
انتخاب دارد :می تواند یک فرآیند جدید ایجاد شده را بپذیرد یا می تواند یک فرآیند قبالً تعلیق شده را وارد کند .به نظر میرسد
که ترجیح باید وارد کردن فرآیندی که قبالً تعلیق شده بود ،ارائه خدمات به آن به جای افزایش بار کل سیستم باشد.
اما این خط استدالل مشکلی را به همراه دارد .تمام فرآیندهایی که به حالت تعلیق درآمده اند در زمان تعلیق در حالت مسدود
بودند .واضح است که بازگرداندن یک فرآیند مسدود شده به حافظه اصلی فایده ای ندارد ،زیرا هنوز برای اجرا آماده نیست .با این
حال ،بدانید که هر فرآیند در حالت Suspendدر ابتدا در یک رویداد خاص مسدود شده است .هنگامی که آن رویداد رخ می
دهد ،فرآیند مسدود نمی شود و به طور بالقوه برای اجرا در دسترس است.
152
سیستم عامل های داخلی و اصول طراحی153.........................................................................................................................
بنابراین ،ما باید در این جنبه از طراحی تجدید نظر کنیم .در اینجا دو مفهوم مستقل وجود دارد :اینکه آیا یک فرآیند در انتظار
یک رویداد است مسدود شده یا نه و اینکه آیا یک فرآیند از حافظه اصلی جابجا شده است تعلیق شده یا خیر .برای تطبیق این
ترکیب ،2×2به چهار حالت نیاز داریم:
-آماده/تعلیق :فرآیند در حافظه ثانویه است اما به محض بارگیری در حافظه اصلی برای اجرا در دسترس است.
جدید
مسیریابی خروج
153
سیستم عامل های داخلی و اصول طراحی154.........................................................................................................................
قبل از نگاه کردن به نمودار انتقال حالت که دو حالت معلق جدید را در بر می گیرد ،باید به یک نکته دیگر اشاره کرد .بحث تا
اینجای کار فرض بر این بود که حافظه مجازی در حال استفاده نیست و یک فرآیند یا تماماً در حافظه اصلی است یا تماماً خارج
از حافظه اصلی است .با یک طرح حافظه مجازی ،می توان فرآیندی را اجرا کرد که فقط بخشی از آن در حافظه اصلی است .اگر
به آدرسی از فرآیند که در حافظه اصلی نیست ارجاع داده شود ،می توان بخش مناسبی از فرآیند را وارد کرد .استفاده از حافظه
مجازی برای رفع نیاز به مبادله صریح ظاهر می شود ،زیرا هر آدرس دلخواه در هر فرآیند دلخواه می تواند توسط سخت افزار
مدیریت حافظه پردازنده به داخل یا خارج از حافظه اصلی منتقل شود .با این حال ،همانطور که در فصل 8خواهیم دید ،عملکرد
یک سیستم حافظه مجازی در صورت وجود تعداد کافی فرآیندهای فعال که تا حدی در حافظه اصلی هستند ،ممکن است از
بین برود .بنابراین ،حتی در یک سیستم حافظه مجازی ،سیستمعامل باید هر چند وقت یکبار بهدلیل عملکرد ،فرآیندها را
بهطور صریح و کامل عوض کند.
اجازه دهید اکنون در شکل b3.9به مدل انتقال حالتی که توسعه داده ایم نگاه کنیم .خطوط چین در شکل ،انتقال های ممکن
اما نه ضروری را نشان می دهد .انتقال های جدید مهم به شرح زیر است:
:Suspend Ready/ Readyهنگامی که هیچ فرآیند آماده ای در حافظه اصلی وجود ندارد ،سیستم عامل برای ادامه اجرا
باید یکی را وارد کند .عالوه بر این ،ممکن است فرآیندی در حالت آماده/تعلیق اولویت باالتری نسبت به هر یک از فرآیندهای
موجود در حالت آماده داشته باشد .در آن صورت ،طراح سیستم عامل ممکن است دیکته کند که رسیدن به فرآیند با اولویت
باالتر از به حداقل رساندن مبادله مهمتر است.
: Suspend Ready/ Ready -به طور معمول ،سیستم عامل ترجیح می دهد یک فرآیند مسدود شده را به جای یک فرآیند
آماده به حالت تعلیق درآورد ،زیرا فرآیند آماده اکنون می تواند اجرا شود ،در حالی که فرآیند مسدود شده فضای حافظه اصلی را
اشغال می کند و نمی توان آن را اجرا کرد .با این حال ،اگر این تنها راه برای آزاد کردن یک بلوک به اندازه کافی بزرگ از حافظه
اصلی باشد ،ممکن است نیاز به تعلیق یک فرآیند آماده باشد .همچنین ،اگر معتقد است که فرآیند مسدود شده به زودی آماده
می شود ،ممکن است سیستم عامل به جای فرآیند مسدود شده با اولویت باالتر ،یک فرآیند آماده با اولویت پایین تر را به حالت
تعلیق درآورد.
154
سیستم عامل های داخلی و اصول طراحی155.........................................................................................................................
New Ready/Suspend -و :New Readyهنگامی که یک فرآیند جدید ایجاد می شود ،می توان آن را به صف آماده یا
به صف آماده/تعلیق اضافه کرد .در هر صورت ،سیستم عامل باید یک بلوک کنترل فرآیند ایجاد کند و یک فضای آدرس را به
فرآیند اختصاص دهد .ممکن است برای سیستم عامل ترجیح داده شود که این وظایف خانه داری را در زمان اولیه انجام دهد ،به
طوری که بتواند مجموعه بزرگی از فرآیندها را حفظ کند که مسدود نشده اند .با این استراتژی ،اغلب ناکافی است
فضای کافی در حافظه اصلی برای یک فرآیند جدید؛ از این رو استفاده از New Sآماده/تعلیق انتقال .از سوی دیگر ،می توانیم
استدالل کنیم که یک فلسفه زمان ایجاد فرآیندها تا حد امکان دیرتر ،سربار سیستم عامل را کاهش می دهد و به آن سیستم
عامل اجازه می دهد تا وظایف ایجاد فرآیند را در زمانی انجام دهد که سیستم به هر حال با فرآیندهای مسدود شده مسدود شده
است.
: Blocked/Suspend Blocked -گنجاندن این انتقال ممکن است طراحی ضعیفی به نظر برسد .به هر حال ،اگر فرآیندی
آماده اجرا نباشد و از قبل در حافظه اصلی نباشد ،وارد کردن آن به چه معناست؟ اما سناریوی زیر را در نظر بگیرید :یک فرآیند
خاتمه می یابد و مقداری حافظه اصلی آزاد می شود .فرآیندی در صف Blocked/Suspendبا اولویت باالتر از هر یک از
فرآیندهای موجود در صف Ready/Suspendوجود دارد و سیستم عامل دالیلی برای این باور دارد که رویداد مسدودسازی
برای آن فرآیند به زودی رخ خواهد داد .در این شرایط منطقی به نظر می رسد که یک فرآیند مسدود شده را به حافظه اصلی
ترجیح دهیم تا یک فرآیند آماده.
: Running Ready/Suspend -به طور معمول ،یک فرآیند در حال اجرا زمانی که زمان تخصیص منقضی شود به حالت
آماده منتقل می شود .با این حال ،اگر سیستم عامل به دلیل اینکه یک فرآیند با اولویت باالتر در صف Blocked/Suspendاز
حالت انسداد خارج شده است ،از فرآیند جلوگیری می کند ،سیستم عامل می تواند فرآیند در حال اجرا را مستقیماً به صف
آماده/تعلیق منتقل کند و مقداری از حافظه اصلی را آزاد کند.
-خروجی هر حالت :معموالً یک فرآیند در حین اجرا خاتمه می یابد ،یا به دلیل کامل شدن یا به دلیل برخی از شرایط خطای
کشنده .با این حال ،در برخی از سیستمعاملها ،یک فرآیند ممکن است توسط فرآیندی که آن را ایجاد کرده است یا زمانی که
فرآیند والد خود خاتمه مییابد ،خاتمه یابد .اگر این مجاز باشد ،یک فرآیند در هر وضعیتی می تواند به حالت خروج منتقل شود.
سایر کاربردهای تعلیق تا کنون ،مفهوم یک فرآیند تعلیق شده را با فرآیندی که در حافظه اصلی نیست یکسان دانسته ایم.
فرآیندی که در حافظه اصلی نیست ،فوراً برای اجرا در دسترس نیست ،خواه در انتظار یک رویداد باشد یا خیر .میتوانیم مفهوم
فرآیند معلق را تعمیم دهیم .اجازه دهید یک فرآیند معلق را به عنوان دارای ویژگی های زیر تعریف کنیم:
155
سیستم عامل های داخلی و اصول طراحی156.........................................................................................................................
.2فرآیند ممکن است در انتظار یک رویداد باشد یا نباشد .اگر چنین باشد ،این شرایط مسدود شده مستقل از شرایط تعلیق
است و وقوع رویداد مسدود کردن ،فرآیند را قادر نمیسازد که فوراً اجرا شود.
.3فرآیند توسط یک عامل در حالت تعلیق قرار گرفت :یا خود ،یک فرآیند والد ،یا سیستم عامل ،به منظور جلوگیری از اجرای
آن.
.4تا زمانی که نماینده صراحتاً دستور حذف را صادر نکند ،ممکن است فرآیند از این حالت حذف نشود.
جدول 3.3برخی از دالیل تعلیق یک فرآیند را فهرست می کند .یکی از دالیلی که در مورد آن بحث کردیم ،فراهم کردن فضای
حافظه برای وارد کردن یک فرآیند آماده/معلق یا افزایش حافظه تخصیص یافته به سایر فرآیندهای آماده است .سیستم عامل
ممکن است انگیزه های دیگری برای تعلیق یک فرآیند داشته باشد .برای مثال ،ممکن است یک فرآیند حسابرسی یا ردیابی
برای نظارت بر فعالیت در سیستم به کار گرفته شود .این فرآیند ممکن است برای ثبت سطح استفاده از منابع مختلف پردازنده،
حافظه ،کانال ها و میزان پیشرفت فرآیندهای کاربر در سیستم استفاده شود .سیستم عامل تحت کنترل اپراتور ،ممکن است هر
از چند گاهی این فرآیند را روشن و خاموش کند .اگر سیستم عامل مشکلی را تشخیص دهد یا مشکوک باشد ،ممکن است
فرآیندی را به حالت تعلیق درآورد .یکی از نمونه های آن وقفه است که در فصل 6مورد بحث قرار گرفته است.
به عنوان مثالی دیگر ،مشکلی در یک خط ارتباطی شناسایی میشود و اپراتور سیستم عامل را مجبور میکند فرآیندی را که از
خط استفاده میکند در حین انجام برخی آزمایشها به حالت تعلیق درآورد .مجموعه دیگری از دالیل مربوط به اقدامات یک
کاربر تعاملی است .به عنوان مثال ،اگر کاربر مشکوک به وجود اشکال در برنامه باشد ،ممکن است برنامه را با تعلیق اجرای آن،
بررسی و اصالح برنامه یا داده ها و از سرگیری اجرا ،رفع اشکال کند .یا ممکن است فرآیند پسزمینهای وجود داشته باشد که در
حال جمعآوری آمار ردیابی یا حسابداری است ،که ممکن است کاربر بخواهد بتواند آن را روشن و خاموش کند .مالحظات
زمانبندی نیز ممکن است منجر به تصمیم مبادله شود .به عنوان مثال ،اگر قرار است فرآیندی به صورت دورهای فعال شود ،اما
بیشتر اوقات بیکار است ،باید بین استفادهها جایگزین شود .برنامه ای که استفاده یا فعالیت کاربر را رصد می کند یک مثال
است.در نهایت ،یک فرآیند والد ممکن است بخواهد یک فرآیند نزولی را به حالت تعلیق درآورد .برای مثال ،فرآیند Aممکن
است فرآیند Bرا برای انجام خواندن فایل ایجاد کند .متعاقباً ،فرآیند Bبا یک خطا در روند خواندن فایل مواجه میشود و آن را
به پردازش Aگزارش میدهد.در تمام این موارد ،فعال سازی یک فرآیند تعلیق شده توسط عاملی که در ابتدا درخواست تعلیق
کرده بود ،درخواست می شود.
156
سیستم عامل های داخلی و اصول طراحی157.........................................................................................................................
مبادله سیستم عامل باید حافظه اصلی کافی را آزاد کند تا فرآیندی آماده
اجرا شود.
دلیل دیگر سیستم سیستم عامل ممکن است یک پسزمینه یا فرآیند ابزار یا فرآیندی
عامل را که مشکوک به ایجاد مشکل است ،به حالت تعلیق درآورد.
درخواست کاربر یک کاربر ممکن است بخواهد اجرای یک برنامه را به منظور رفع
تعاملی اشکال یا در ارتباط با استفاده از یک منبع به حالت تعلیق درآورد.
زمان سنجی یک فرآیند ممکن است به صورت دوره ای اجرا شود به عنوان مثال،
یک فرآیند حسابداری یا نظارت سیستم و ممکن است در زمان
انتظار برای بازه زمانی بعدی به حالت تعلیق درآید.
درخواست فرآیند یک فرآیند والد ممکن است بخواهد اجرای یک نسل را به حالت
والدین تعلیق درآورد تا فرآیند تعلیق شده را بررسی یا اصالح کند ،یا فعالیت
فرزندان مختلف را هماهنگ کند.
3.3شرح فرآیند
سیستم عامل رویدادهای درون سیستم کامپیوتری را کنترل می کند .فرآیندها را برای اجرا توسط پردازنده برنامه ریزی و ارسال
می کند ،منابع را به فرآیندها تخصیص می دهد و به درخواست های فرآیندهای کاربر برای خدمات اساسی پاسخ می دهد.
اساساً ،ما میتوانیم سیستمعامل را به عنوان موجودی در نظر بگیریم که استفاده از منابع سیستم را توسط فرآیندها مدیریت
میکند.
این مفهوم در شکل 3.10نشان داده شده است .در یک محیط چندبرنامهنویسی ،تعدادی فرآیند Pn ،. . . . ،P1وجود دارد که
در حافظه مجازی ایجاد شده و وجود دارد .هر فرآیند در طول اجرای خود نیاز به دسترسی به منابع سیستم خاصی از جمله
پردازنده ،دستگاه های ورودی/خروجی و حافظه اصلی دارد .در شکل ،فرآیند P1در حال اجرا است .حداقل بخشی از فرآیند در
حافظه اصلی است و کنترل دو دستگاه ورودی/خروجی را در اختیار دارد .پردازش P2نیز در حافظه اصلی است اما در انتظار
دستگاه I/Oاختصاص داده شده به P1مسدود شده است .فرآیند Pnتعویض شده است و بنابراین به حالت تعلیق درآمده
است.
157
سیستم عامل های داخلی و اصول طراحی158.........................................................................................................................
حافظه
مجازی
منابع
کامپیوتری
ما جزئیات مدیریت این منابع توسط سیستم عامل را به نمایندگی از فرآیندهای فصل های بعدی بررسی می کنیم .در اینجا ما با
یک سوال اساسی تر سروکار داریم :سیستم عامل برای کنترل فرآیندها و مدیریت منابع برای آنها به چه اطالعاتی نیاز دارد؟
اگر قرار است سیستم عامل فرآیندها و منابع را مدیریت کند ،باید اطالعاتی در مورد وضعیت فعلی هر فرآیند و منبع داشته
باشد .رویکرد جهانی برای ارائه این اطالعات ساده است :سیستم عامل جداول اطالعات را در مورد هر موجودیتی که مدیریت می
کند ایجاد و نگهداری می کند .یک ایده کلی از دامنه این تالش در شکل 3.11نشان داده شده است که چهار نوع جداول
مختلف را نشان می دهد که توسط سیستم عامل نگهداری می شوند :حافظه ،I/O ،فایل و فرآیند .اگرچه جزئیات از
سیستمعاملی به سیستمعامل دیگر متفاوت است ،اما اساساً همه سیستمعاملها اطالعات را در این چهار دسته نگهداری
میکنند.
جداول حافظه برای پیگیری حافظه اصلی واقعی و ثانویه مجازی استفاده می شود .برخی از حافظه اصلی برای استفاده توسط
سیستم عامل رزرو شده است .بقیه برای استفاده توسط فرآیندها در دسترس است .فرآیندها بر روی حافظه ثانویه با استفاده از
نوعی حافظه مجازی یا مکانیسم تعویض ساده نگهداری می شوند .جداول حافظه باید شامل اطالعات زیر باشد:
-هر گونه ویژگی حفاظتی بلوک های حافظه اصلی یا مجازی ،مانند اینکه کدام فرآیندها ممکن است به مناطق خاصی از حافظه
مشترک دسترسی پیدا کنند.
ما ساختارهای اطالعاتی برای مدیریت حافظه را در قسمت سوم به تفصیل بررسی می کنیم.
158
سیستم عامل های داخلی و اصول طراحی159.........................................................................................................................
جداول I/Oتوسط سیستم عامل برای مدیریت دستگاه های I/Oو کانال های سیستم کامپیوتری استفاده می شود .در هر زمان
معین ،یک دستگاه I/Oممکن است در دسترس باشد یا به یک فرآیند خاص اختصاص داده شود .اگر عملیات I/Oدر حال
انجام است ،سیستم عامل باید از وضعیت عملیات I/Oو مکان در حافظه اصلی که به عنوان منبع یا مقصد انتقال I/Oاستفاده
می شود ،بداند .مدیریت I/Oدر فصل 11مورد بررسی قرار گرفته است.
سیستم عامل ممکن است جداول فایل را نیز حفظ کند .این جداول اطالعاتی در مورد وجود فایل ها ،موقعیت آنها در حافظه
ثانویه ،وضعیت فعلی آنها و سایر ویژگی ها ارائه می دهد .بسیاری از این اطالعات ،اگر نگوییم همه ،ممکن است توسط یک
سیستم مدیریت فایل نگهداری و استفاده شوند ،در این صورت ،سیستم عامل اطالعات کمی از فایل ها دارد یا اصالً دانش ندارد.
در سایر سیستم عامل ها ،بسیاری از جزئیات مدیریت فایل توسط خود سیستم عامل مدیریت می شود .این موضوع در فصل 12
بررسی شده است.
در نهایت ،سیستم عامل باید جداول فرآیند را برای مدیریت فرآیندها حفظ کند .بقیه این بخش به بررسی جداول فرآیند مورد
نیاز اختصاص دارد .قبل از پرداختن به این بحث باید به دو نکته اضافی اشاره کرد .اوالً ،اگرچه شکل 3.11چهار مجموعه جداول
متمایز را نشان می دهد ،باید واضح باشد که این جداول باید به نحوی به یکدیگر مرتبط یا ارجاع داده شوند .حافظه،
ورودی/خروجی و فایلها به نمایندگی از فرآیندها مدیریت میشوند ،بنابراین باید به طور مستقیم یا غیرمستقیم به این منابع در
جداول فرآیند اشاره شود .فایل های اشاره شده در جداول فایل از طریق دستگاه I/Oقابل دسترسی هستند و در برخی مواقع
در حافظه اصلی یا مجازی خواهند بود .خود جداول باید توسط سیستم عامل قابل دسترسی باشند و بنابراین تابع مدیریت
حافظه هستند.
دوم ،سیستم عامل چگونه می داند که جداول را در وهله اول ایجاد کند؟ واضح است که سیستمعامل باید اطالعاتی در مورد
محیط اولیه داشته باشد ،مانند اینکه چقدر حافظه اصلی وجود دارد ،دستگاههای ورودی/خروجی چیست و شناسههای آنها
چیست و غیره .این یک مشکل پیکربندی است .یعنی وقتی سیستم عامل اولیه می شود ،باید به برخی از داده های پیکربندی
که محیط اصلی را تعریف می کنند ،دسترسی داشته باشد و این داده ها باید خارج از سیستم عامل ،با کمک انسان یا برخی از
نرم افزارهای پیکربندی خودکار ایجاد شوند.
159
سیستم عامل های داخلی و اصول طراحی160.........................................................................................................................
آنچه را که سیستم عامل برای مدیریت و کنترل یک فرآیند باید بداند ،در نظر بگیرید .ابتدا باید بداند که فرآیند در کجا قرار
دارد .دوم ،باید ویژگی های فرآیند را که برای مدیریت آن ضروری است بداند به عنوان مثال ،شناسه فرآیند و وضعیت فرآیند.
مکان فرآیند قبل از اینکه بتوانیم به سؤاالتی بپردازیم که یک فرآیند در کجا واقع شده است یا ویژگی های آن چیست ،باید به
یک سؤال اساسی تر بپردازیم :تجلی فیزیکی یک فرآیند چیست؟ حداقل ،یک فرآیند باید شامل یک برنامه یا مجموعه ای از
برنامه ها باشد که باید اجرا شوند .با این برنامه ها مجموعه ای از مکان های داده برای متغیرهای محلی و سراسری و هر ثابت
تعریف شده مرتبط است .بنابراین ،یک فرآیند حداقل از حافظه کافی برای نگهداری برنامه ها و داده های آن فرآیند تشکیل شده
است .عالوه بر این ،اجرای یک برنامه معموالً شامل یک پشته به پیوست Pمراجعه کنید است که برای پیگیری فراخوانیهای
رویه و ارسال پارامتر بین رویهها استفاده میشود .در نهایت ،هر فرآیند دارای تعدادی ویژگی است که توسط سیستم عامل برای
کنترل فرآیند استفاده می شود .به طور معمول ،مجموعه ای از ویژگی ها به عنوان یک بلوک کنترل فرآیند نامیده می شود .می
توانیم به این مجموعه از برنامه ،داده ها ،پشته و ویژگی ها به عنوان تصویر فرآیند اشاره کنیم جدول .3.4
مکان تصویر فرآیند به طرح مدیریت حافظه مورد استفاده بستگی دارد .در ساده ترین حالت ،تصویر فرآیند به عنوان یک بلوک
پیوسته یا پیوسته از حافظه حفظ می شود .این بلوک در حافظه ثانویه ،معموالً دیسک ،نگهداری می شود .برای اینکه سیستم
عامل بتواند فرآیند را مدیریت کند ،حداقل بخش کوچکی از تصویر آن باید در حافظه اصلی نگهداری شود .برای اجرای فرآیند،
کل تصویر فرآیند باید در حافظه اصلی یا حداقل حافظه مجازی بارگذاری شود .بنابراین ،سیستم عامل باید مکان هر فرآیند روی
160
سیستم عامل های داخلی و اصول طراحی161.........................................................................................................................
دیسک و برای هر فرآیندی که در حافظه اصلی است ،مکان آن فرآیند در حافظه اصلی را بداند .ما تغییرات کمی پیچیدهتر را در
این طرح با سیستمعامل CTSSدر فصل 2دیدیم.
با ،CTSSهنگامی که یک فرآیند تعویض میشود ،بخشی از تصویر فرآیند ممکن است در حافظه اصلی باقی بماند .بنابراین،
سیستم عامل باید پیگیری کند که کدام بخش از تصویر هر فرآیند هنوز در حافظه اصلی است.
داده های کاربر :بخش قابل تغییر فضای کاربر .ممکن است شامل داده های برنامه ،یک ناحیه پشته کاربر و برنامه هایی باشد
که ممکن است اصالح شوند.
مرتبط با آن است .یک پشته برای ذخیره پارامترها و آدرس LIFOپشته :هر فرآیند دارای یک یا چند پشته آخرین در اول
های فراخوانی برای فراخوانی رویه و سیستم استفاده می شود.
بلوک کنترل فرآیند :داده های مورد نیاز سیستم عامل برای کنترل فرآیند جدول 3.5را ببینید.
سیستم عامل های مدرن ،سختافزار صفحهبندی را فرض میکنند که به حافظه فیزیکی غیرمرتبط اجازه میدهد تا فرآیندهای
مقیم را پشتیبانی کند 13.در هر زمان معین ،بخشی از تصویر فرآیند ممکن است در حافظه اصلی 14و بقیه در حافظه ثانویه باشد.
بنابراین ،جداول فرآیند حفظ میشوند .توسط سیستم عامل باید مکان هر صفحه از هر تصویر فرآیند را نشان دهد.
شکل 3.11ساختار اطالعات مکان را به شکل زیر نشان می دهد .یک جدول فرآیند اولیه با یک ورودی برای هر فرآیند وجود
دارد .هر ورودی حداقل حاوی یک اشاره گر به تصویر فرآیند است .اگر تصویر فرآیند حاوی بلوکهای متعدد باشد ،این اطالعات
مستقیماً در جدول فرآیند اولیه قرار میگیرد یا با ارجاع متقابل به ورودیهای جداول حافظه در دسترس است .البته این تصویر
کلی است .یک سیستم عامل خاص روش خاص خود را برای سازماندهی اطالعات مکان خواهد داشت.
ویژگیهای فرآیند یک سیستم چندبرنامهنویسی پیچیده به اطالعات زیادی در مورد هر فرآیند نیاز دارد .همانطور که توضیح
داده شد ،این اطالعات را می توان در یک بلوک کنترل فرآیند در نظر گرفت .سیستمهای مختلف این اطالعات را به روشهای
13مروری کوتاه بر مفاهیم صفحات ،بخشها و حافظه مجازی در بخش مدیریت حافظه در بخش 2.3ارائه شده است.
14این بحث کوتاه به برخی از جزئیات اشاره دارد .به طور خاص ،در سیستمی که از حافظه مجازی استفاده می کند ،تمام تصویر فرآیند برای یک فرآیند فعال همیشه در حافظه
ثانویه است .هنگامی که بخشی از تصویر در حافظه اصلی بارگذاری می شود ،به جای جابجایی ،کپی می شود .بنابراین ،حافظه ثانویه یک کپی از تمام بخش ها و/یا صفحات را حفظ
می کند .با این حال ،اگر قسمت حافظه اصلی تصویر اصالح شود ،کپی ثانویه قدیمی خواهد بود تا زمانی که قسمت حافظه اصلی دوباره روی دیسک کپی شود.
161
سیستم عامل های داخلی و اصول طراحی162.........................................................................................................................
مختلف سازماندهی میکنند و نمونههای متعددی از آن در پایان این فصل و فصل بعد ظاهر میشوند .در حال حاضر ،اجازه
دهید به سادگی نوع اطالعاتی را که ممکن است برای یک سیستم عامل مفید باشد ،بدون در نظر گرفتن جزئیات نحوه
سازماندهی آن اطالعات ،بررسی کنیم.
جدول 3.5دسته های معمولی از اطالعات مورد نیاز سیستم عامل برای هر فرآیند را فهرست می کند .ممکن است از مقدار
اطالعات مورد نیاز تا حدودی شگفت زده شوید .همانطور که درک بیشتری از مسئولیت های سیستم عامل به دست می آورید،
این لیست باید منطقی تر به نظر برسد.
ما می توانیم اطالعات بلوک کنترل فرآیند را به سه دسته کلی گروه بندی کنیم:
-شناسایی فرآیند
با توجه به شناسایی فرآیند ،تقریباً در همه سیستمهای عامل ،به هر فرآیند یک شناسه عددی منحصربهفرد اختصاص داده
میشود که ممکن است به سادگی یک شاخص در جدول فرآیند اولیه باشد شکل .3.11در غیر این صورت باید نقشه ای وجود
داشته باشد که به سیستم عامل اجازه دهد جداول مناسب را بر اساس شناسه فرآیند پیدا کند .این شناسه از چند جهت مفید
است .بسیاری از جداول دیگر که توسط سیستم عامل کنترل می شوند ممکن است از شناسه های فرآیند برای ارجاع متقابل
جداول فرآیند استفاده کنند .به عنوان مثال ،جداول حافظه ممکن است به گونه ای سازماندهی شوند که نقشه ای از حافظه
اصلی با نشان دادن اینکه کدام فرآیند به هر منطقه اختصاص داده شده است ،ارائه شود .مراجع مشابه در جداول I/Oو فایل
ظاهر می شوند .هنگامی که فرآیندها با یکدیگر ارتباط برقرار می کنند ،شناسه فرآیند به سیستم عامل از مقصد یک ارتباط
خاص اطالع می دهد .هنگامی که فرآیندها مجاز به ایجاد فرآیندهای دیگر هستند ،شناسه ها والد و فرزندان هر فرآیند را نشان
می دهند.
عالوه بر این شناسههای فرآیند ،ممکن است به یک فرآیند یک شناسه کاربری اختصاص داده شود که کاربر مسئول کار را نشان
میدهد .اطالعات وضعیت پردازنده از محتویات رجیسترهای پردازنده تشکیل شده است .در حالی که یک فرآیند در حال اجرا
است ،البته ،اطالعات در رجیسترها وجود دارد.
هنگامی که یک فرآیند قطع می شود ،تمام این اطالعات ثبت باید ذخیره شود تا زمانی که فرآیند از سرگیری اجرا می شود،
بتوان آن را بازیابی کرد .ماهیت و تعداد رجیسترهای درگیر به طراحی پردازنده بستگی دارد .به طور معمول ،مجموعه ثبت شامل
162
سیستم عامل های داخلی و اصول طراحی163.........................................................................................................................
رجیسترهای قابل مشاهده توسط کاربر ،رجیسترهای کنترل و وضعیت ،و نشانگرهای پشته خواهد بود .این موارد در فصل 1
توضیح داده شده است.
نکته قابل توجه ،تمام طراحیهای پردازنده شامل یک ثبات یا مجموعهای از ثباتها است که اغلب به عنوان کلمه وضعیت برنامه
PSWشناخته میشود که حاوی اطالعات وضعیت است PSW .معموالً حاوی کدهای شرایط به اضافه سایر اطالعات وضعیت
است .یک مثال خوب از کلمه وضعیت پردازنده این است که در پردازنده های Intel x86که به عنوان ثبات EFLAGS
شناخته می شود نشان داده شده در شکل 3.12و جدول .3.6این ساختار توسط هر سیستم عاملی از جمله یونیکس و ویندوز
که روی یک پردازنده x86اجرا می شود استفاده می شود.
سومین دسته عمده از اطالعات در بلوک کنترل فرآیند را می توان به دلیل نیاز به نام بهتر ،اطالعات کنترل فرآیند نامید .این
اطالعات اضافی مورد نیاز سیستم عامل برای کنترل و هماهنگی فرآیندهای فعال مختلف است .قسمت آخر جدول 3.5دامنه
این اطالعات را نشان می دهد .همانطور که ما جزئیات عملکرد سیستم عامل را در فصل های بعدی بررسی می کنیم ،نیاز به
موارد مختلف در این لیست باید روشن شود.
شکل 3.13ساختار تصاویر فرآیند در حافظه مجازی را نشان می دهد .هر تصویر فرآیند شامل یک بلوک کنترل فرآیند ،یک
پشته کاربر ،فضای آدرس خصوصی فرآیند و هر فضای آدرس دیگری است که فرآیند با سایر فرآیندها به اشتراک می گذارد.
شناسایی فرآیند
شناسه ها
شناسه های عددی که ممکن است با بلوک کنترل فرآیند ذخیره شوند شامل
*EFOUJGJFS PG UIF QSPDFTT UIBU DSFBUFE UIJT QSPDFTT QBSFOU QSPDFTT. -
. 6TFS JEFOUJGJFS-
163
سیستم عامل های داخلی و اصول طراحی164.........................................................................................................................
یک ثبات قابل مشاهده توسط کاربر ،ثبتی است که ممکن است با استفاده از زبان ماشینی که پردازنده در حالت کاربر اجرا می
کند ،ارجاع داده شود .به طور معمول ،از 8تا 32مورد از این رجیسترها وجود دارد ،اگرچه برخی از پیاده سازی های RISC
بیش از 100دارند.
اینها انواع رجیسترهای پردازنده هستند که برای کنترل عملکرد پردازنده استفاده می شوند .این شامل
-برنامه شمارنده :حاوی آدرس دستورالعمل بعدی است که باید واکشی شود.
-کدهای شرط :نتیجه آخرین عملیات حسابی یا منطقی به عنوان مثال ،عالمت ،صفر ،حمل ،برابر ،سرریز.
-اطالعات وضعیت :شامل پرچم های فعال/غیرفعال وقفه ،حالت اجرا می شود.
نشانگرهای پشته
هر فرآیند دارای یک یا چند دسته سیستم آخرین در اولین خروجی LIFOمرتبط با آن است .یک پشته برای ذخیره پارامترها
و آدرس های فراخوانی برای فراخوانی رویه و سیستم استفاده می شود .نشانگر پشته به باالی پشته اشاره می کند.
این اطالعاتی است که سیستم عامل برای انجام عملکرد برنامه ریزی خود مورد نیاز است .موارد معمول اطالعات:
-وضعیت فرآیند :آمادگی فرآیند را برای برنامه ریزی برای اجرا به عنوان مثال ،در حال اجرا ،آماده ،انتظار ،توقف تعریف می
کند.
-اولویت :ممکن است از یک یا چند زمینه برای توصیف اولویت زمانبندی فرآیند استفاده شود .در برخی از سیستم ها ،چندین
مقدار مورد نیاز است به عنوان مثال ،پیش فرض ،فعلی ،باالترین مجاز.
-اطالعات مربوط به زمانبندی :این به الگوریتم زمانبندی مورد استفاده بستگی دارد .به عنوان مثال ،مدت زمان انتظار فرآیند و
مدت زمانی که فرآیند در آخرین باری که در حال اجرا بود اجرا شده است.
164
سیستم عامل های داخلی و اصول طراحی165.........................................................................................................................
یک فرآیند ممکن است به فرآیند دیگری در یک صف ،حلقه یا ساختار دیگری مرتبط باشد .به عنوان مثال ،تمام فرآیندهای در
حالت انتظار برای یک سطح اولویت خاص ممکن است در یک صف مرتبط شوند.
یک فرآیند ممکن است رابطه والد-فرزند خلق-خلق را با فرآیند دیگری نشان دهد .بلوک کنترل فرآیند ممکن است حاوی اشاره
گرهایی به فرآیندهای دیگر برای پشتیبانی از این ساختارها باشد.
پرچم ها ،سیگنال ها و پیام های مختلف ممکن است با ارتباط بین دو فرآیند مستقل مرتبط باشند .برخی یا همه این اطالعات
ممکن است در بلوک کنترل فرآیند نگهداری شوند.
امتیازات فرآیند
فرآیندها از نظر حافظه قابل دسترسی و انواع دستورالعمل هایی که ممکن است اجرا شوند دارای امتیازاتی هستند .بعالوه ،ممکن
است امتیازاتی برای استفاده از ابزارها و خدمات سیستم اعمال شود.
مدیریت حافظه
این بخش ممکن است شامل نشانگرهایی به جداول بخش و/یا صفحه باشد که حافظه مجازی اختصاص داده شده به این فرآیند
را توصیف می کند.
منابع کنترل شده توسط فرآیند ممکن است نشان داده شوند ،مانند فایل های باز شده .تاریخچه استفاده از پردازنده یا منابع
دیگر نیز ممکن است گنجانده شود .این اطالعات ممکن است توسط زمانبندی مورد نیاز باشد.
165
سیستم عامل های داخلی و اصول طراحی166.........................................................................................................................
نشان دهنده حمل یا قرض گرفتن بین نیم بایت از یک عملیات حسابی یا منطقی 8بیتی با استفاده از ثبات ALاست.
CFپرچم حمل
انجام یا قرض گرفتن در سمت چپ ترین موقعیت بیت را پس از یک عملیات حسابی نشان می دهد .همچنین توسط برخی از
عملیات تغییر و چرخش اصالح شده است.
OFپرچم سرریز
PFپرچم برابری
برابری نتیجه یک عملیات حسابی یا منطقی 1 .نشان دهنده برابری یکنواخت است 0 .نشان دهنده برابری فرد است.
166
سیستم عامل های داخلی و اصول طراحی167.........................................................................................................................
SFپرچم عالمت
ZFپرچم صفر
پرچم کنترل
DFپرچم جهت
تعیین میکند که آیا دستورالعملهای پردازش رشته ،نیمثبتکنندههای 16بیتی SIو DIبرای عملیاتهای 16بیتی یا
ثبتکنندههای 32بیتی ESIو EDIبرای عملیاتهای 32بیتی را افزایش یا کاهش میدهند.
پرچم های سیستم نباید توسط برنامه های کاربردی اصالح شود
ACبررسی تراز
تنظیم کنید که یک کلمه یا دوکلمه روی مرز غیرکلمه یا غیردوکلمه خطاب شود.
اگر بتوان این بیت را تنظیم و پاک کرد ،این پردازنده از دستورالعمل CPUIDپشتیبانی می کند .این دستورالعمل اطالعاتی در
مورد فروشنده ،خانواده و مدل ارائه می دهد.
RFپرچم رزومه
به برنامهنویس اجازه میدهد تا استثناهای اشکالزدایی را غیرفعال کند تا دستور بعد از یک استثناء اشکالزدایی مجدداً راهاندازی
شود ،بدون اینکه فوراً استثناء اشکالزدایی دیگری ایجاد شود.
وقتی تنظیم شود ،باعث می شود که پردازنده در طول عملیات حالت محافظت شده ،یک استثنا برای همه دسترسی ها به
دستگاه های ورودی/خروجی ایجاد کند.
TFپرچم دام
هنگامی که تنظیم می شود ،پس از اجرای هر دستور باعث وقفه می شود .این برای رفع اشکال استفاده می شود.
نشان می دهد که وظیفه فعلی در یک وظیفه دیگر در عملیات حالت محافظت شده قرار دارد.
به برنامه نویس اجازه می دهد حالت مجازی 8086را فعال یا غیرفعال کند ،که تعیین می کند آیا پردازنده به عنوان یک ماشین
8086کار می کند یا خیر.
در حالت مجازی 8086برای نشان دادن اینکه یک یا چند وقفه در انتظار سرویس هستند استفاده می شود.
فضای آدرس کاربر فضای آدرس کاربر خصوصی فضای آدرس کاربر خصوصی
خصوصی (برنامه ها، (برنامه ها ،داده ها) (برنامه ها ،داده ها)
داده ها)
فضای آدرس مشترک فضای آدرس مشترک فضای آدرس مشترک
168
سیستم عامل های داخلی و اصول طراحی169.........................................................................................................................
در شکل ،هر تصویر فرآیند به عنوان یک محدوده پیوسته از آدرس ها ظاهر می شود .در اجرای واقعی ،ممکن است اینطور
نباشد .این به طرح مدیریت حافظه و روشی که در آن ساختارهای کنترلی توسط سیستم عامل سازماندهی می شوند بستگی
دارد .همانطور که در جدول 3.5نشان داده شده است ،بلوک کنترل فرآیند ممکن است حاوی اطالعات ساختاری ،از جمله اشاره
گرهایی باشد که امکان پیوند بلوک های کنترل فرآیند را فراهم می کند .بنابراین ،صف هایی که در بخش قبل توضیح داده شد
می توانند به عنوان لیست های پیوندی بلوک های کنترل فرآیند پیاده سازی شوند .به عنوان مثال ،ساختار صف شکل a3.8می
تواند همانطور که در شکل 3.14پیشنهاد شده است ،پیاده سازی شود .نقش بلوک کنترل فرآیند بلوک کنترل فرآیند مهمترین
ساختار داده در یک سیستم عامل است .هر بلوک کنترل فرآیند حاوی تمام اطالعات مربوط به یک فرآیند است که توسط
سیستم عامل مورد نیاز است .بلوکها تقریباً توسط هر ماژول در سیستمعامل ،از جمله موارد مرتبط با زمانبندی ،تخصیص
منابع ،پردازش وقفه ،و نظارت و تحلیل عملکرد ،خوانده و/یا اصالح میشوند .می توان گفت که مجموعه بلوک های کنترل
فرآیند وضعیت سیستم عامل را مشخص می کند .این موضوع یک موضوع طراحی مهم را مطرح می کند .تعدادی از روتین ها در
سیستم عامل نیاز به دسترسی به اطالعات در بلوک های کنترل فرآیند دارند .ارائه دسترسی مستقیم به این جداول دشوار
نیست .هر فرآیند مجهز به یک شناسه منحصربهفرد است و میتوان از آن بهعنوان شاخصی در جدول نشانگرهای بلوکهای
کنترل فرآیند استفاده کرد .مشکل دسترسی نیست ،بلکه محافظت است .دو مشکل خود را نشان می دهد:
rیک اشکال در یک روال منفرد ،مانند کنترل کننده وقفه ،می تواند به بلوک های کنترل فرآیند آسیب برساند ،که می تواند
توانایی سیستم را برای مدیریت فرآیندهای آسیب دیده از بین ببرد.
169
سیستم عامل های داخلی و اصول طراحی170.........................................................................................................................
تغییر طراحی در ساختار یا معنای بلوک کنترل فرآیند می تواند بر تعدادی از ماژول ها در سیستم عامل تأثیر بگذارد .این
مشکالت را میتوان با الزام همه روتینهای سیستمعامل به انجام یک روال کنترلکننده ،که تنها وظیفه آن محافظت از
بلوکهای کنترل فرآیند است و تنها داور برای خواندن و نوشتن این بلوکها است ،برطرف کرد .معاوضه در استفاده از چنین
روتینی شامل مسائل مربوط به عملکرد و درجه ای است که می توان به درستی باقیمانده نرم افزار سیستم اعتماد کرد.
3.4کنترل فرآیند
قبل از ادامه بحث ما در مورد روشی که سیستم عامل فرآیندها را مدیریت می کند ،باید بین حالت اجرای پردازنده که معموالً با
سیستم عامل مرتبط است و حالتی که معموالً با برنامه های کاربر مرتبط است تمایز قائل شویم .اکثر پردازنده ها حداقل از دو
حالت اجرا پشتیبانی می کنند .برخی دستورالعملها را فقط میتوان در حالت ممتازتر اجرا کرد .اینها شامل خواندن یا تغییر یک
رجیستر کنترل ،مانند کلمه وضعیت برنامه است .دستورالعمل های اولیه ورودی/خروجی؛ و دستورالعمل های مربوط به مدیریت
حافظه .عالوه بر این ،مناطق خاصی از حافظه فقط در حالت ممتازتر قابل دسترسی هستند.
مدیریت فرآیند
مدیریت حافظه
-تعویض
170
سیستم عامل های داخلی و اصول طراحی171.........................................................................................................................
مدیریت I/O
-مدیریت بافر
توابع پشتیبانی
-رسیدگی به وقفه
-حسابداری
-نظارت
حالت کم امتیاز اغلب به عنوان حالت کاربر شناخته می شود ،زیرا برنامه های کاربر معموالً در این حالت اجرا می شوند .حالت
دارای امتیاز بیشتر به عنوان حالت سیستم ،حالت کنترل یا حالت هسته شناخته می شود .این آخرین اصطالح به هسته سیستم
عامل اشاره دارد ،که بخشی از سیستم عامل است که عملکردهای مهم سیستم را در بر می گیرد .جدول 3.7توابع معموالً در
هسته یک سیستم عامل را فهرست می کند.
دلیل استفاده از دو حالت باید مشخص باشد .الزم است سیستم عامل و جداول کلیدی سیستم عامل ،مانند بلوک های کنترل
فرآیند ،از تداخل برنامه های کاربر محافظت شود .در حالت هسته ،نرم افزار کنترل کامل پردازنده و تمامی دستورالعمل ها،
رجیسترها و حافظه آن را دارد .این سطح از کنترل ضروری نیست و از نظر ایمنی برای برنامه های کاربر مطلوب نیست .دو سوال
مطرح می شود :چگونه پردازنده می داند که در کدام حالت قرار است اجرا شود و چگونه حالت تغییر می کند؟ در مورد سوال
اول ،معموالً مقداری در کلمه وضعیت برنامه PSWوجود دارد که نحوه اجرا را نشان می دهد .این بیت در پاسخ به برخی
رویدادها تغییر می کند .به طور معمول ،هنگامی که یک کاربر با یک سرویس سیستم عامل تماس می گیرد یا زمانی که یک
وقفه باعث اجرای یک روال سیستم عامل می شود ،حالت به حالت هسته تنظیم می شود و پس از بازگشت از سرویس به فرآیند
کاربر ،حالت به حالت تنظیم می شود .حالت کاربر به عنوان مثال ،پردازنده Itaniumاینتل را در نظر بگیرید که معماری 64
بیتی IA-64را پیاده سازی می کند .پردازنده دارای یک ثبت وضعیت پردازنده psrاست که شامل یک قسمت cpl 2بیتی
سطح امتیاز فعلی است .سطح 0ممتازترین سطح است ،در حالی که سطح 3کمترین امتیاز است .اکثر سیستم عامل ها مانند
لینوکس از سطح 0برای هسته و یک سطح دیگر برای حالت کاربر استفاده می کنند .هنگامی که یک وقفه رخ می دهد،
پردازنده بیشتر بیت های psrاز جمله قسمت cplرا پاک می کند .این به طور خودکار cplرا روی سطح 0تنظیم می کند .در
پایان روال مدیریت وقفه ،دستور نهایی که اجرا می شود irtبازگشت وقفه است .این دستورالعمل باعث می شود که پردازنده
psrبرنامه قطع شده را بازیابی کند که سطح امتیاز آن برنامه را بازیابی می کند .توالی مشابهی زمانی رخ می دهد که یک برنامه
171
سیستم عامل های داخلی و اصول طراحی172.........................................................................................................................
یک تماس سیستمی برقرار می کند .برای ،Itaniumیک برنامه کاربردی با قرار دادن شناسه فراخوانی سیستم و آرگومان های
فراخوانی سیستم در یک ناحیه از پیش تعریف شده و سپس اجرای یک دستورالعمل خاص که اثر آن قطع کردن اجرا در سطح
کاربر و انتقال کنترل به هسته است ،یک فراخوانی سیستمی برقرار می کند.
ایجاد فرآیند
در بخش ،3.2رویدادهایی را که منجر به ایجاد یک فرآیند جدید می شود ،مورد بحث قرار دادیم .پس از بحث در مورد
ساختارهای داده مرتبط با یک فرآیند ،اکنون در موقعیتی هستیم که به طور خالصه مراحل مربوط به ایجاد فرآیند را توضیح
دهیم .هنگامی که سیستم عامل تصمیم گرفت ،به هر دلیلی جدول ،3.1یک فرآیند جدید ایجاد کند ،می تواند به صورت زیر
عمل کند:
.1یک شناسه فرآیند منحصر به فرد را به فرآیند جدید اختصاص دهید .در این زمان ،یک ورودی جدید به جدول فرآیند اولیه
اضافه می شود که شامل یک ورودی در هر فرآیند است.
.2فضا را برای فرآیند اختصاص دهید .این شامل تمام عناصر تصویر فرآیند است .بنابراین ،سیستم عامل باید بداند چه مقدار فضا
برای فضای آدرس کاربر خصوصی برنامه ها و داده ها و پشته کاربر مورد نیاز است .این مقادیر را می توان به طور پیش فرض بر
اساس نوع فرآیند تخصیص داد یا می توان آنها را بر اساس درخواست کاربر در زمان ایجاد شغل تنظیم کرد .اگر فرآیندی توسط
یک فرآیند دیگر ایجاد شود ،فرآیند والد می تواند مقادیر مورد نیاز را به عنوان بخشی از درخواست ایجاد فرآیند به سیستم عامل
منتقل کند .اگر قرار است هر فضای آدرس موجود با این فرآیند جدید به اشتراک گذاشته شود ،پیوندهای مناسب باید تنظیم
شوند .در نهایت ،فضایی برای بلوک کنترل فرآیند باید اختصاص داده شود.
.3بلوک کنترل فرآیند را راه اندازی کنید .بخش شناسایی فرآیند حاوی شناسه این فرآیند به اضافه شناسه های مناسب دیگر،
مانند شناسه فرآیند والد است .بخش اطالعات وضعیت پردازنده معموالً با اکثر ورودیها صفر میشود ،به جز برای شمارنده
برنامه تنظیم به نقطه ورود برنامه و اشارهگرهای پشته سیستم برای تعیین مرزهای پشته فرآیند .بخش اطالعات کنترل فرآیند بر
اساس مقادیر پیش فرض استاندارد به اضافه ویژگی هایی که برای این فرآیند درخواست شده اند ،مقداردهی اولیه می شود .به
عنوان مثال ،وضعیت فرآیند معموالً به Readyیا Ready/Suspendمقداردهی اولیه می شود .اولویت ممکن است به طور
پیشفرض روی کمترین اولویت تنظیم شود ،مگر اینکه درخواست صریح برای اولویت باالتر داده شود .در ابتدا ،فرآیند ممکن
است هیچ منبعی دستگاه های ورودی/خروجی ،فایل ها نداشته باشد ،مگر اینکه درخواست صریحی برای آنها وجود داشته باشد
یا از والدین به ارث رسیده باشند.
172
سیستم عامل های داخلی و اصول طراحی173.........................................................................................................................
.4پیوندهای مناسب را تنظیم کنید .برای مثال ،اگر سیستمعامل هر صف زمانبندی را بهعنوان یک لیست پیوندی حفظ کند،
فرآیند جدید باید در لیست آماده یا آماده/تعلیق قرار گیرد.
.5سایر ساختارهای داده را ایجاد یا گسترش دهید .به عنوان مثال ،سیستم عامل ممکن است یک فایل حسابداری در هر فرآیند
نگهداری کند تا بعداً برای اهداف صورتحساب و/یا ارزیابی عملکرد استفاده شود.
سوئیچینگ فرآیند
در ظاهر ،عملکرد سوئیچینگ فرآیند ساده به نظر می رسد .در برخی مواقع ،یک فرآیند در حال اجرا قطع میشود و
سیستمعامل فرآیند دیگری را به حالت Runningاختصاص میدهد و کنترل را به آن فرآیند میسپارد .با این حال ،چندین
موضوع طراحی مطرح شده است .اول ،چه رویدادهایی باعث تغییر فرآیند می شوند؟ مسئله دیگر این است که ما باید تمایز بین
تغییر حالت و تغییر فرآیند را تشخیص دهیم .در نهایت ،سیستم عامل برای دستیابی به سوئیچ فرآیند ،چه کاری باید با
ساختارهای مختلف داده تحت کنترل خود انجام دهد؟
زمان تعویض فرآیندها ،هر زمانی که سیستم عامل کنترل فرآیند در حال اجرا را به دست آورد ،ممکن است سوئیچ فرآیند رخ
دهد .جدول 3.8رویدادهای احتمالی را نشان می دهد که ممکن است به سیستم عامل کنترل بدهد.
ابتدا اجازه دهید وقفه های سیستم را در نظر بگیریم .در واقع ،مانند بسیاری از سیستمها ،میتوانیم دو نوع وقفه سیستم را
تشخیص دهیم که یکی از آنها به سادگی به عنوان وقفه و دیگری به عنوان یک تله شناخته میشود .اولی به دلیل نوعی رویداد
است که خارج از فرآیند در حال اجرا و مستقل از آن است ،مانند تکمیل یک عملیات .I/Oمورد دوم مربوط به یک خطا یا
شرایط استثنا است که در فرآیند در حال اجرا ایجاد شده است ،مانند تالش برای دسترسی غیرقانونی به فایل .با یک وقفه
معمولی ،ابتدا کنترل به یک کنترل کننده وقفه منتقل می شود ،که برخی کارهای اولیه را انجام می دهد و سپس به یک روال
سیستم عامل که مربوط به نوع خاصی از وقفه است که رخ داده است ،منشعب می شود .به عنوان مثال می توان به موارد زیر
اشاره کرد:
-وقفه ساعت :سیستم عامل تعیین می کند که آیا فرآیند در حال اجرا برای حداکثر واحد زمان مجاز اجرا شده است یا خیر.
یعنی یک برش زمانی حداکثر مدت زمانی است که یک فرآیند می تواند قبل از قطع شدن اجرا کند .اگر چنین است ،این فرآیند
باید به حالت آماده تغییر کند و فرآیند دیگری ارسال شود.
-وقفه ورودی/خروجی :سیستم عامل تعیین میکند که چه عملکرد ورودی/خروجی رخ داده است .اگر اقدام ورودی/خروجی
رویدادی را تشکیل دهد که یک یا چند فرآیند منتظر آن هستند ،سیستم عامل تمام فرآیندهای مسدود شده مربوطه را به حالت
آماده و فرآیندهای مسدود/تعلیق به حالت آماده/تعلیق منتقل میکند .سپس سیستم عامل باید تصمیم بگیرد که آیا اجرای
173
سیستم عامل های داخلی و اصول طراحی174.........................................................................................................................
فرآیندی را که در حال حاضر در حالت Runningاست از سر بگیرد یا از آن فرآیند برای یک فرآیند آماده با اولویت باالتر
جلوگیری کند.
-خطای حافظه :پردازنده با یک مرجع آدرس حافظه مجازی برای کلمه ای که در حافظه اصلی نیست مواجه می شود .سیستم
عامل باید بلوک صفحه یا بخش حافظه حاوی مرجع را از حافظه ثانویه به حافظه اصلی وارد کند .پس از اینکه درخواست I/O
برای وارد کردن بلوک حافظه صادر شد ،فرآیند با خطای حافظه در حالت مسدود قرار می گیرد .سپس سیستم عامل یک سوئیچ
فرآیند را برای از سرگیری اجرای یک فرآیند دیگر انجام می دهد .پس از وارد شدن بلوک مورد نظر به حافظه ،آن فرآیند در
حالت آماده قرار می گیرد.
با یک تله ،سیستم عامل تعیین می کند که آیا خطا یا شرایط استثنا کشنده است یا خیر .اگر چنین است ،فرآیند در حال اجرا
به حالت خروج منتقل می شود و یک سوئیچ فرآیند رخ می دهد .اگر نه ،عملکرد سیستم عامل به ماهیت خطا و طراحی سیستم
عامل بستگی دارد .ممکن است برخی از مراحل بازیابی را انجام دهد یا به سادگی به کاربر اطالع دهد .ممکن است یک سوئیچ
فرآیند انجام دهد یا روند فعلی را از سر بگیرد .در نهایت ،سیستم عامل ممکن است با یک تماس سرپرست از برنامه در حال اجرا
فعال شود.
به عنوان مثال ،یک فرآیند کاربر در حال اجرا است و دستورالعملی اجرا می شود که یک عملیات I/Oرا درخواست می کند،
مانند یک فایل باز .این تماس منجر به انتقال به روتینی می شود که بخشی از کد سیستم عامل است .استفاده از تماس
سیستمی ممکن است باعث شود فرآیند کاربر در حالت .Blocked
174
سیستم عامل های داخلی و اصول طراحی175.........................................................................................................................
تغییر حالت در فصل ،1در مورد گنجاندن مرحله وقفه به عنوان بخشی از چرخه دستورالعمل بحث کردیم .به یاد بیاورید که در
مرحله وقفه ،پردازنده بررسی میکند که آیا وقفهای معلق است که با وجود سیگنال وقفه مشخص میشود .اگر هیچ وقفهای
معلق نباشد ،پردازنده به مرحله واکشی میرود و دستورالعمل بعدی برنامه فعلی را در فرآیند جاری واکشی میکند .اگر یک وقفه
در حال تعلیق باشد ،پردازنده اقدامات زیر را انجام می دهد:
.1شمارنده برنامه را روی آدرس شروع یک برنامه کنترل کننده وقفه تنظیم می کند.
.2از حالت کاربر به حالت هسته سوئیچ می کند تا کد پردازش وقفه شامل دستورالعمل های ممتاز باشد.
پردازنده اکنون به مرحله واکشی می رود و اولین دستورالعمل برنامه کنترل کننده وقفه را واکشی می کند که وقفه را سرویس
می کند .در این مرحله ،به طور معمول ،زمینه فرآیندی که قطع شده است در بلوک کنترل فرآیند برنامه قطع شده ذخیره می
شود.
یک سوال که اکنون ممکن است برای شما پیش بیاید این است که زمینه ای که ذخیره شده است چیست؟ پاسخ این است که
باید شامل هر گونه اطالعاتی باشد که ممکن است با اجرای کنترل کننده وقفه تغییر کند و برای از سرگیری برنامه ای که قطع
شده است مورد نیاز باشد .بنابراین ،بخشی از بلوک کنترل فرآیند که به عنوان اطالعات وضعیت پردازنده نامیده می شد باید
ذخیره شود .این شامل شمارنده برنامه ،سایر رجیسترهای پردازنده و اطالعات پشته است.
آیا کار دیگری باید انجام شود؟ این بستگی به اتفاقات بعدی دارد .کنترل کننده وقفه معموالً یک برنامه کوتاه است که چند کار
اساسی مربوط به یک وقفه را انجام می دهد .به عنوان مثال ،پرچم یا نشانگر را که وجود یک وقفه را نشان می دهد ،بازنشانی می
کند .ممکن است یک تأییدیه برای نهادی که وقفه را صادر کرده است ارسال کند ،مانند یک ماژول .I/Oو ممکن است برخی از
خانه داری های اولیه را در رابطه با اثرات رویدادی که باعث وقفه شده است انجام دهد .برای مثال ،اگر وقفه مربوط به یک رویداد
ورودی/خروجی باشد ،کنترل کننده وقفه شرایط خطا را بررسی می کند .اگر خطایی رخ داده باشد ،کنترل کننده وقفه ممکن
است سیگنالی را به فرآیندی ارسال کند که در ابتدا عملیات I/Oرا درخواست کرده است .اگر وقفه با ساعت باشد ،کنترل کننده
کنترل را به دیسپچر میدهد ،که میخواهد کنترل را به فرآیند دیگری منتقل کند ،زیرا زمان تخصیص داده شده به فرآیند در
حال اجرا منقضی شده است.
در مورد سایر اطالعات در بلوک کنترل فرآیند چطور؟ اگر قرار باشد این وقفه با تغییر به فرآیند دیگری دنبال شود ،باید کارهایی
انجام شود .با این حال ،در اکثر سیستم عامل ها ،وقوع وقفه لزوما به معنای سوئیچ فرآیند نیست .این امکان وجود دارد که پس
از اجرای کنترل کننده وقفه ،فرآیند در حال اجرا مجدداً اجرا شود .در این صورت ،تنها چیزی که الزم است این است که هنگام
بروز وقفه ،اطالعات وضعیت پردازنده را ذخیره کنید و زمانی که کنترل به برنامه در حال اجرا برگردانده شد ،آن اطالعات را
بازیابی کنید .به طور معمول ،عملکردهای ذخیره و بازیابی در سخت افزار انجام می شود.
175
سیستم عامل های داخلی و اصول طراحی176.........................................................................................................................
تغییر حالت فرآیند واضح است که سوئیچ حالت مفهومی متمایز از سوئیچ فرآیند است 10 .یک سوئیچ حالت ممکن است بدون
تغییر وضعیت 15فرآیندی که در حال حاضر در حالت در حال اجرا است رخ دهد .در آن صورت ،صرفه جویی در زمینه و بازسازی
بعدی شامل هزینه کمی است .با این حال ،اگر قرار است فرآیند در حال اجرا به حالت دیگری آماده ،مسدود و غیره منتقل شود،
سیستم عامل باید تغییرات اساسی در محیط خود ایجاد کند .مراحل مربوط به سوئیچ کامل فرآیند به شرح زیر است:
.1زمینه پردازنده ،از جمله شمارنده برنامه و سایر ثبات ها را ذخیره کنید.
.2بلوک کنترل فرآیند فرآیندی را که در حال حاضر در حالت Runningقرار دارد ،به روز کنید .این شامل تغییر وضعیت
فرآیند به یکی از حالتهای دیگر آماده ،مسدود ،آماده/تعلیق ،یا خروج میشود .سایر زمینه های مرتبط نیز باید به روز شوند ،از
جمله دلیل خروج از وضعیت در حال اجرا و اطالعات حسابداری.
.3بلوک کنترل فرآیند این فرآیند را به صف مناسب آماده؛ مسدود شده در رویداد i؛ آماده/تعلیق منتقل کنید.
.4فرآیند دیگری را برای اجرا انتخاب کنید .این موضوع در قسمت چهارم بررسی شده است.
.5بلوک کنترل فرآیند فرآیند انتخاب شده را به روز کنید .این شامل تغییر وضعیت این فرآیند به Runningاست.
.6ساختارهای داده مدیریت حافظه را به روز کنید .بسته به نحوه مدیریت ترجمه آدرس ،ممکن است این مورد نیاز باشد .این
موضوع در بخش سوم بررسی شده است.
.7با بارگذاری در مقادیر قبلی شمارنده برنامه و سایر رجیسترها ،زمینه پردازشگر را به شرایطی که در زمانی که فرآیند انتخاب
شده برای آخرین بار از حالت Runningخارج شد ،وجود داشت ،بازیابی کنید.
بنابراین ،سوئیچ فرآیند ،که شامل تغییر حالت است ،به تالش بیشتری نسبت به سوئیچ حالت نیاز دارد.
در فصل ،2به دو واقعیت جالب در مورد سیستم عامل ها اشاره کردیم:
-سیستم عامل مانند نرم افزارهای کامپیوتری معمولی عمل می کند به این معنا که سیستم عامل مجموعه ای از برنامه ها است
که توسط پردازنده اجرا می شود.
15اصطالح سوئیچ زمینه اغلب در ادبیات و کتاب های درسی سیستم عامل یافت می شود .متأسفانه ،اگرچه بیشتر متون از این اصطالح به معنای چیزی استفاده میکنند که در
اینجا سوئیچ فرآیند نامیده میشود ،منابع دیگر از آن به معنای سوئیچ حالت یا حتی سوئیچ رشته (که در فصل بعدی تعریف میشود) استفاده میکنند .برای جلوگیری از ابهام ،در
این کتاب از این واژه استفاده نشده است.
176
سیستم عامل های داخلی و اصول طراحی177.........................................................................................................................
-سیستم عامل اغلب کنترل را رها می کند و برای بازگرداندن کنترل به سیستم عامل به پردازنده وابسته است.
اگر سیستم عامل فقط مجموعه ای از برنامه ها باشد و اگر مانند هر برنامه دیگری توسط پردازنده اجرا شود ،آیا سیستم عامل
یک فرآیند است؟ اگر چنین است چگونه کنترل می شود؟ این سواالت جالب الهام بخش تعدادی از رویکردهای طراحی شده
است .شکل 3.15طیفی از رویکردها را نشان می دهد که در سیستم عامل های مختلف معاصر یافت می شوند.
یک رویکرد سنتی که در بسیاری از سیستم عامل های قدیمی رایج است ،اجرای هسته سیستم عامل خارج از هر فرآیندی است
شکل .a3.15با این رویکرد ،زمانی که فرآیند در حال اجرا قطع میشود یا یک فراخوان سرپرست صادر میکند ،متن حالت این
فرآیند ذخیره میشود و کنترل به هسته منتقل میشود .سیستم عامل دارای ناحیه حافظه مخصوص به خود برای استفاده و
پشته سیستم خود برای کنترل فراخوانی ها و بازگشت های رویه است .سیستم عامل می تواند هر عملکرد دلخواه را انجام دهد و
زمینه فرآیند قطع شده را بازیابی کند ،که باعث می شود اجرا در فرآیند کاربر قطع شده از سر گرفته شود .از طرف دیگر،
سیستم عامل میتواند عملکرد ذخیرهسازی محیط فرآیند را تکمیل کند و به برنامهریزی و ارسال فرآیند دیگری ادامه دهد.
اینکه این اتفاق بیفتد بستگی به دلیل وقفه و شرایط آن زمان دارد.
در هر صورت ،نکته کلیدی در اینجا این است که مفهوم فرآیند فقط برای برنامه های کاربر اعمال می شود .کد سیستم عامل به
عنوان یک موجودیت جداگانه اجرا می شود که در حالت ممتاز عمل می کند.
جایگزینی که با سیستم عامل های رایانه های کوچکتر رایانه های شخصی ،ایستگاه های کاری رایج است ،اجرای تقریباً تمام نرم
افزارهای سیستم عامل در چارچوب فرآیند کاربر است .دیدگاه این است که سیستم عامل در درجه اول مجموعه ای از روال
هایی است که کاربر برای انجام عملکردهای مختلف فراخوانی می کند و در محیط فرآیند کاربر اجرا می شود .این در شکل
b3.15نشان داده شده است .در هر نقطه ای ،سیستم عامل nتصویر فرآیند را مدیریت می کند .هر تصویر نه تنها شامل مناطق
نشان داده شده در شکل ،3.13بلکه شامل برنامه ،داده ها و مناطق پشته برای برنامه های هسته است.
177
سیستم عامل های داخلی و اصول طراحی178.........................................................................................................................
شکل 3.16یک ساختار تصویر فرآیند معمولی را برای این استراتژی نشان می دهد .یک پشته کرنل جداگانه برای مدیریت
تماس ها/بازگشت ها در حالی که فرآیند در حالت هسته است استفاده می شود.
شناسایی فرآیند
اطالعات وضعیت پردازنده
اطالعات کنترل فرآیند
پشته کاربر
پشته هسته
فضای آدرس مشترک
شکل 3.16تصویر فرآیند :عملیاتی سیستم در فضای کاربر اجرا می شود
178
سیستم عامل های داخلی و اصول طراحی179.........................................................................................................................
کد و داده های سیستم عامل در فضای آدرس اشتراکی قرار دارند و توسط تمام فرآیندهای کاربر به اشتراک گذاشته می شوند.
هنگامی که یک وقفه ،تله یا تماس سرپرست رخ می دهد ،پردازنده در حالت هسته قرار می گیرد و کنترل به سیستم عامل
منتقل می شود .برای انتقال کنترل از یک برنامه کاربر به سیستم عامل ،زمینه حالت ذخیره می شود و تغییر حالت به یک روال
سیستم عامل انجام می شود .با این حال ،اجرا در فرآیند کاربر فعلی ادامه دارد .بنابراین ،سوئیچ فرآیند انجام نمی شود ،فقط یک
سوئیچ حالت در همان فرآیند انجام می شود.
اگر سیستم عامل پس از اتمام کار خود تشخیص دهد که فرآیند جاری باید به کار خود ادامه دهد ،سپس یک سوئیچ حالت
برنامه قطع شده را در فرآیند جاری از سر می گیرد .این یکی از مزایای کلیدی این رویکرد است :یک برنامه کاربر برای به
کارگیری برخی روال سیستم عامل قطع شده است و سپس از سر گرفته می شود و همه اینها بدون جریمه دو سوئیچ فرآیند رخ
داده است.
با این حال ،اگر مشخص شود که یک سوئیچ فرآیند به جای بازگشت به برنامه قبالً اجرا شده رخ می دهد ،آنگاه کنترل به یک
روال تغییر فرآیند منتقل می شود .بسته به طراحی سیستم ،این روال ممکن است در فرآیند فعلی اجرا شود یا نباشد .با این
حال ،در برخی مواقع ،فرآیند فعلی باید در حالت غیر در حال اجرا قرار گیرد و فرآیند دیگری به عنوان فرآیند در حال اجرا
تعیین شود .در طول این مرحله ،از نظر منطقی راحتتر است که اجرا را خارج از همه فرآیندها ببینیم.
به نوعی ،این دیدگاه از سیستم عامل قابل توجه است .به بیان ساده ،در مقاطع خاصی از زمان ،یک فرآیند اطالعات وضعیت خود
را ذخیره می کند ،فرآیند دیگری را برای اجرا از بین آنهایی که آماده هستند انتخاب می کند و کنترل را به آن فرآیند واگذار
می کند .دلیل اینکه این یک وضعیت دلخواه و در واقع آشفته نیست این است که در طول زمان بحرانی ،کدی که در فرآیند
کاربر اجرا می شود ،کد سیستم عامل مشترک است و نه کد کاربر .به دلیل مفهوم حالت کاربر و حالت هسته ،کاربر نمی تواند
روال های سیستم عامل را دستکاری یا تداخل کند ،حتی اگر آنها در محیط فرآیند کاربر اجرا شوند .این به ما یادآوری می کند
که بین مفاهیم فرآیند و برنامه تمایز وجود دارد و رابطه بین این دو یک به یک نیست.
در یک فرآیند ،هم یک برنامه کاربر و هم برنامه های سیستم عامل ممکن است اجرا شوند و برنامه های سیستم عاملی که در
فرآیندهای مختلف کاربر اجرا می شوند یکسان هستند.
جایگزین دیگر ،که در شکل c3.15نشان داده شده است ،پیاده سازی سیستم عامل به عنوان مجموعه ای از فرآیندهای سیستم
است .مانند سایر گزینه ها ،نرم افزاری که بخشی از هسته است در حالت هسته اجرا می شود .با این حال ،در این مورد ،توابع
179
سیستم عامل های داخلی و اصول طراحی180.........................................................................................................................
اصلی هسته به عنوان فرآیندهای جداگانه سازماندهی می شوند .مجدداً ،ممکن است مقدار کمی کد تغییر فرآیند وجود داشته
باشد که خارج از هر فرآیندی اجرا شود.
این رویکرد چند مزیت دارد .این یک نظم و انضباط طراحی برنامه را تحمیل می کند که استفاده از سیستم عامل مدوالر را با
حداقل رابط های تمیز بین ماژول ها تشویق می کند .عالوه بر این ،برخی از توابع غیر بحرانی سیستم عامل به راحتی به عنوان
فرآیندهای جداگانه پیاده سازی می شوند.
به عنوان مثال ،قبالً به یک برنامه مانیتور اشاره کردیم که سطح استفاده از منابع مختلف پردازنده ،حافظه ،کانال ها و میزان
پیشرفت فرآیندهای کاربر را در سیستم ثبت می کند .از آنجایی که این برنامه سرویس خاصی را برای هیچ فرآیند فعالی ارائه
نمی دهد ،فقط می تواند توسط سیستم عامل فراخوانی شود .به عنوان یک فرآیند ،تابع می تواند در یک سطح اولویت اختصاص
داده شده اجرا شود و با سایر فرآیندهای تحت کنترل توزیع کننده در هم آمیخته شود .در نهایت ،پیادهسازی سیستمعامل
بهعنوان مجموعهای از فرآیندها در محیط چند پردازندهای یا چند رایانهای مفید است ،که در آن میتوان برخی از خدمات
سیستم عامل را به پردازندههای اختصاصی ارسال کرد و عملکرد را بهبود بخشید.
UNIX System Vاز یک تسهیالت فرآیندی ساده اما قدرتمند استفاده می کند که برای کاربر بسیار قابل مشاهده است.
یونیکس از مدل شکل b3.15پیروی می کند که در آن بیشتر سیستم عامل در محیط یک فرآیند کاربر اجرا می شود .یونیکس
از دو دسته فرآیند استفاده می کند :فرآیندهای سیستمی و فرآیندهای کاربر .فرآیندهای سیستم در حالت هسته اجرا می شوند
و کدهای سیستم عامل را برای انجام وظایف اداری و خانه داری ،مانند تخصیص حافظه و تعویض فرآیند ،اجرا می کنند.
فرآیندهای کاربر در حالت کاربر برای اجرای برنامهها و ابزارهای کاربر و در حالت هسته برای اجرای دستورالعملهایی که متعلق
به هسته هستند عمل میکنند .یک فرآیند کاربر با صدور یک فراخوانی سیستمی ،زمانی که یک استثنا عیب ایجاد می شود ،یا
زمانی که یک وقفه رخ می دهد ،وارد حالت هسته می شود.
Statesفرآیند
در مجموع نه حالت فرآیند توسط سیستم عامل یونیکس SVR4شناسایی شده است .اینها در جدول 3.9فهرست شده اند و
یک نمودار انتقال حالت در شکل 3.17نشان داده شده است بر اساس شکل .BACH86این شکل مشابه شکل b3.9است که
دو حالت خواب یونیکس مربوط به دو حالت مسدود شده است .تفاوت ها به شرح زیر است:
-یونیکس از دو حالت در حال اجرا استفاده می کند تا نشان دهد که آیا فرآیند در حالت کاربر یا حالت هسته اجرا می شود.
180
سیستم عامل های داخلی و اصول طراحی181.........................................................................................................................
-بین دو حالت تمایز قائل شده است :آماده اجرا ،در حافظه و پیشگیری .اینها اساساً همان حالت هستند ،همانطور که با خط
چین که به آنها می پیوندد نشان داده می شود .این تمایز برای تأکید بر روشی است که در آن حالت پیش دستی وارد می شود.
هنگامی که یک فرآیند در حالت هسته اجرا می شود در نتیجه یک تماس سرپرست ،وقفه ساعت یا وقفه ،I/Oزمانی فرا می
رسد که هسته کار خود را کامل کرده و آماده است تا کنترل را به برنامه کاربر بازگرداند .در این مرحله ،هسته ممکن است
تصمیم بگیرد که فرآیند فعلی را به نفع فرآیندی که آماده و دارای اولویت باالتر است ،پیشی بگیرد .در آن صورت ،فرآیند کنونی
به حالت پیش فرض حرکت می کند .با این حال ،برای اهداف ارسال ،آن فرآیندها در حالت Preemptedو آنهایی که در حالت
آماده برای اجرا ،در حافظه هستند یک صف تشکیل می دهند.
181
سیستم عامل های داخلی و اصول طراحی182.........................................................................................................................
Preemptionفقط زمانی اتفاق می افتد که یک فرآیند در حال انتقال از حالت هسته به حالت کاربر باشد .در حالی که یک
فرآیند در حالت هسته در حال اجرا است ،ممکن است از قبل استفاده نشود .این باعث می شود یونیکس برای پردازش بالدرنگ
نامناسب باشد .فصل 10الزامات پردازش بالدرنگ را مورد بحث قرار می دهد.
دو فرآیند در یونیکس منحصر به فرد هستند .فرآیند 0یک فرآیند خاص است که هنگام بوت شدن سیستم ایجاد می شود .در
واقع ،به عنوان یک ساختار داده بارگذاری شده در زمان بوت از پیش تعریف شده است .این فرآیند مبادله است .عالوه بر این،
فرآیند 0فرآیند 1را ایجاد می کند که به آن فرآیند اولیه می گویند .تمام فرآیندهای دیگر در سیستم دارای فرآیند 1به عنوان
جد هستند .هنگامی که یک کاربر تعاملی جدید به سیستم وارد می شود ،این فرآیند 1است که یک فرآیند کاربر را برای آن
کاربر ایجاد می کند .متعاقباً ،فرآیند کاربر میتواند فرآیندهای فرزند را در یک درخت انشعاب ایجاد کند ،به طوری که هر برنامه
خاص میتواند شامل تعدادی فرآیند مرتبط باشد.
شرح فرایند
یک فرآیند در یونیکس مجموعه نسبتاً پیچیده ای از ساختارهای داده است که تمام اطالعات الزم برای مدیریت و ارسال
فرآیندها را در اختیار سیستم عامل قرار می دهد .جدول 3.10عناصر تصویر فرآیند را خالصه می کند که در سه بخش
سازماندهی شده اند :زمینه در سطح کاربر ،زمینه ثبت و زمینه در سطح سیستم.
زمینه سطح کاربر شامل عناصر اساسی برنامه کاربر است و می تواند مستقیماً از یک فایل شی اجرا شده تولید شود .برنامه کاربر
به قسمت های متن و داده تفکیک شده است .ناحیه متن فقط خواندنی است و برای نگهداری دستورالعمل های برنامه در نظر
182
سیستم عامل های داخلی و اصول طراحی183.........................................................................................................................
گرفته شده است .در حالی که فرآیند در حال اجرا است ،پردازنده از ناحیه پشته کاربر برای فراخوانی ها و برگرداندن رویه و
ارسال پارامتر استفاده می کند .ناحیه حافظه مشترک یک ناحیه داده ای است که با سایر فرآیندها به اشتراک گذاشته می شود.
تنها یک کپی فیزیکی از یک ناحیه حافظه مشترک وجود دارد ،اما با استفاده از حافظه مجازی ،در هر فرآیند اشتراک گذاری به
نظر می رسد که منطقه حافظه مشترک در فضای آدرس آن قرار دارد .هنگامی که یک فرآیند در حال اجرا نیست ،اطالعات
وضعیت پردازنده در ناحیه زمینه ثبت ذخیره می شود.
زمینه در سطح سیستم حاوی اطالعات باقی مانده ای است که سیستم عامل برای مدیریت فرآیند به آن نیاز دارد .این شامل یک
بخش استاتیک است که اندازه آن ثابت است و در طول عمر خود با یک فرآیند باقی می ماند و یک بخش پویا که اندازه آن در
طول عمر فرآیند متفاوت است .یکی از عناصر بخش استاتیک ،ورودی جدول فرآیند است.
این در واقع بخشی از جدول فرآیند است که توسط سیستم عامل نگهداری می شود ،با یک ورودی در هر فرآیند .ورودی جدول
فرآیند حاوی اطالعات کنترل فرآیند است که همیشه در دسترس هسته است .از این رو ،در یک سیستم حافظه مجازی ،تمام
ورودی های جدول فرآیند در حافظه اصلی نگهداری می شوند .جدول 3.11محتویات ورودی جدول فرآیند را فهرست می کند.
ناحیه کاربر ،یا ناحیه ،Uحاوی اطالعات کنترل فرآیند اضافی است که در هنگام اجرای هسته در چارچوب این فرآیند ،مورد نیاز
است .همچنین هنگام پردازش صفحهبندی به و از حافظه استفاده میشود .جدول 3.12محتویات این جدول را نشان می دهد.
183
سیستم عامل های داخلی و اصول طراحی184.........................................................................................................................
شمارنده برنامه آدرس دستور بعدی که باید اجرا شود .ممکن است در فضای هسته یا
حافظه کاربر این فرآیند باشد
ثبت وضعیت شامل وضعیت سخت افزار در زمان preemption.محتوا و قالب به
پردازنده سخت افزار بستگی دارد
نشانگر پشته به باالی هسته یا پشته کاربر ،بسته به حالت کار در آن زمان یا
پیشپرداخت ،اشاره میکند.
ثبت های وابسته به سخت افزار
همه منظوره
زمینه سطح سیستم
ورود جدول وضعیت یک فرآیند را تعریف می کند .این اطالعات همیشه در دسترس
فرآیند سیستم عامل است
ناحیه Uکاربر. اطالعات کنترل فرآیند که فقط در چارچوب فرآیند نیاز به دسترسی
دارند
جدول منطقه نگاشت از آدرس های مجازی به فیزیکی را تعریف می کند .همچنین
فرآیند حاوی یک زمینه مجوز است که نوع دسترسی مجاز به فرآیند را
نشان می دهد :فقط خواندنی ،خواندنی نوشتنی یا خواندنی-اجرای
پشته هسته شامل قاب پشته ای از رویه های کرنل است که فرآیند در حالت هسته
اجرا می شود
184
سیستم عامل های داخلی و اصول طراحی185.........................................................................................................................
185
سیستم عامل های داخلی و اصول طراحی186.........................................................................................................................
با یک فرآیند در طول عمر خود ،و یک بخش پویا ،که اندازه آن در طول عمر فرآیند متفاوت است ،باقی می ماند .یکی از عناصر
بخش استاتیک ،ورودی جدول فرآیند است .این در واقع بخشی از جدول فرآیند است که توسط سیستم عامل نگهداری می شود،
با یک ورودی در هر فرآیند .ورودی جدول فرآیند حاوی اطالعات کنترل فرآیند است که همیشه در دسترس هسته است .از این
رو ،در یک سیستم حافظه مجازی ،تمام ورودی های جدول فرآیند در حافظه اصلی نگهداری می شوند .جدول 3.11محتویات
ورودی جدول فرآیند را فهرست می کند.
ناحیه کاربر ،یا ناحیه ،Uحاوی اطالعات کنترل فرآیند اضافی است که در هنگام اجرای هسته در چارچوب این فرآیند ،مورد نیاز
است .همچنین هنگام پردازش صفحهبندی به و از حافظه استفاده میشود .جدول 3.12محتویات این جدول را نشان می دهد.
تمایز بین ورودی جدول فرآیند و ناحیه Uنشان دهنده این واقعیت است که هسته یونیکس همیشه در چارچوب برخی از
فرآیندها اجرا می شود .در بیشتر مواقع ،هسته با نگرانی های آن فرآیند سروکار دارد .با این حال ،در برخی مواقع ،مانند زمانی
که هسته در حال اجرای یک الگوریتم زمانبندی مقدماتی برای ارسال فرآیند دیگری است ،نیاز به دسترسی به اطالعات مربوط
به سایر فرآیندها دارد .اطالعات موجود در جدول فرآیند زمانی قابل دسترسی است که فرآیند داده شده ،فرآیند فعلی نباشد.
سومین بخش استاتیک زمینه سطح سیستم ،جدول ناحیه هر فرآیند است که توسط سیستم مدیریت حافظه استفاده می شود.
در نهایت ،پشته هسته بخشی پویا از زمینه سطح سیستم است .این پشته زمانی استفاده می شود که فرآیند در حالت هسته اجرا
می شود و حاوی اطالعاتی است که باید ذخیره و بازیابی شوند زیرا فراخوانی ها و وقفه های رویه رخ می دهد.
186
سیستم عامل های داخلی و اصول طراحی187.........................................................................................................................
187
سیستم عامل های داخلی و اصول طراحی188.........................................................................................................................
کنترل فرایند
ایجاد فرآیند در یونیکس با استفاده از فراخوانی سیستم هسته fork ،انجام می شود .هنگامی که یک فرآیند یک درخواست
forkصادر می کند ،سیستم عامل عملکردهای زیر را انجام می دهد :BACH86
.3یک کپی از تصویر فرآیند والد ایجاد می کند ،به استثنای هر حافظه مشترک.
.4شمارشگرها را برای هر فایلی که متعلق به والدین است افزایش میدهد تا نشان دهد که یک فرآیند اضافی اکنون نیز مالک
آن فایلها است.
.6شماره شناسه فرزند را به فرآیند والد ،و مقدار 0را به فرآیند فرزند برمی گرداند.
همه این کارها در حالت هسته در فرآیند والد انجام می شود .هنگامی که هسته این توابع را تکمیل کرد ،می تواند یکی از
کارهای زیر را به عنوان بخشی از روال توزیع کننده انجام دهد:
-در فرآیند والدین بمانید .کنترل در نقطه تماس forkوالد به حالت کاربر برمی گردد.
-انتقال کنترل به فرآیند فرزند .پردازش فرزند در همان نقطه ای از کد به عنوان والد اجرا می شود ،یعنی در بازگشت از
فراخوانی . fork
-انتقال کنترل به فرآیند دیگری .والدین و فرزند هر دو در حالت آماده برای اجرا باقی می مانند.
شاید تجسم این روش ایجاد فرآیند دشوار باشد زیرا هم والد و هم فرزند در حال اجرای کد یکسانی هستند .تفاوت در این است:
هنگامی که بازگشت از forkاتفاق می افتد ،پارامتر بازگشت تست می شود .اگر مقدار صفر باشد ،این فرآیند فرزند است و برای
ادامه اجرا میتوان یک شاخه را برای برنامه کاربر مناسب اجرا کرد .اگر مقدار غیر صفر باشد ،این فرآیند والد است و خط اصلی
اجرا می تواند ادامه یابد.
188
سیستم عامل های داخلی و اصول طراحی189.........................................................................................................................
3.7خالصه
اساسی ترین مفهوم در سیستم عامل مدرن فرآیند است .وظیفه اصلی سیستم عامل ایجاد ،مدیریت و خاتمه فرآیندها است .در
حالی که فرآیندها فعال هستند ،سیستم عامل باید ببیند که به هر یک از آنها زمان برای اجرا توسط پردازنده اختصاص داده می
شود ،فعالیت های خود را هماهنگ می کند ،تقاضاهای متضاد را مدیریت می کند ،و منابع سیستم را به فرآیندها تخصیص می
دهد.
سیستم عامل برای انجام عملکردهای مدیریت فرآیند خود ،شرحی از هر فرآیند یا تصویر فرآیند را حفظ می کند که شامل
فضای آدرسی است که فرآیند در آن اجرا می شود و یک بلوک کنترل فرآیند .دومی شامل تمام اطالعاتی است که سیستم عامل
برای مدیریت فرآیند مورد نیاز است ،از جمله وضعیت فعلی ،منابع تخصیص یافته به آن ،اولویت و سایر داده های مرتبط.
در طول عمر خود ،یک فرآیند در میان تعدادی از ایالت ها حرکت می کند .مهمترین آنها Running ،Readyو Blocked
هستند .یک فرآیند آماده فرآیندی است که در حال حاضر اجرا نمی شود اما به محض اینکه سیستم عامل آن را ارسال کرد
آماده اجرا است .فرآیند در حال اجرا ،فرآیندی است که در حال حاضر توسط پردازنده در حال اجرا است .در یک سیستم چند
پردازنده ،بیش از یک فرآیند می تواند در این حالت باشد .یک فرآیند مسدود شده منتظر تکمیل برخی رویدادها است ،مانند
عملیات .I/O
یک فرآیند در حال اجرا یا توسط یک وقفه ،که رویدادی است که در خارج از فرآیند رخ می دهد و توسط پردازنده شناسایی می
شود ،یا با اجرای یک فراخوانی ناظر به سیستم عامل قطع می شود .در هر صورت ،پردازنده یک سوئیچ حالت را انجام می دهد و
کنترل را به روال سیستم عامل منتقل می کند .سیستم عامل پس از اتمام کار الزم ،ممکن است روند قطع شده را از سر بگیرد
یا به فرآیند دیگری تغییر مکان دهد.
توضیحات خوبی از مدیریت فرآیند یونیکس در GOOD94و GRAY97یافت می شود NEHM75 .بحث جالبی در مورد
وضعیت های فرآیند و سیستم عامل های اولیه مورد نیاز برای ارسال فرآیند است.
،.B ،GOOD94 Goodheartو J. The Magic Garden ،Coxتوضیح داده شدهThe Internals of UNIX :
.1994 ،NJ: Prentice Hall ،System V Release 4. Englewood Cliffs
.GRAY97 Gray, Jارتباطات بین فرآیندی در یونیکس :گوشه ها و شکاف ها .رودخانه فوقانی زین ،نیوجرسی :سالن
پرنتیس.1997 ،
189
سیستم عامل های داخلی و اصول طراحی190.........................................................................................................................
J. "Dispatcher Primitives for the Construction of Operating Kernels." Acta ،NEHM75 Nehmer
،Informaticaجلد.1975 ،5 .
تصاویر متحرک
مجموعه ای از انیمیشن که مفاهیم این فصل را نشان می دهد در وب سایت Premiumموجود است .خواننده تشویق می شود
که انیمیشن ها را برای تقویت مفاهیم این فصل مشاهده کند.
شرایط کلیدی
بررسی سواالت
3.3برای مدل پردازش شکل ،3.6به طور خالصه هر حالت را تعریف کنید.
190
سیستم عامل های داخلی و اصول طراحی191.........................................................................................................................
3.8سیستم عامل برای چه نوع نهادهایی جداول اطالعات را برای اهداف مدیریتی نگهداری می کند؟
3.11مراحل انجام شده توسط سیستم عامل برای ایجاد یک فرآیند جدید چیست؟
چالش ها و مسائل
3.1جدول انتقال حالت زیر یک مدل ساده شده از مدیریت فرآیند است ،با برچسبهایی که انتقال بین حالتهای آماده ،اجرا،
مسدود شده و غیر ساکن را نشان میدهد.
یک مثال از رویدادی که می تواند باعث هر یک از انتقال های فوق شود را بیاورید .اگر کمک می کند نمودار بکشید.
3.2فرض کنید در زمان 5هیچ منبع سیستمی به جز پردازنده و حافظه استفاده نمی شود .حال وقایع زیر را در نظر بگیرید:
191
سیستم عامل های داخلی و اصول طراحی192.........................................................................................................................
در زمان P1 :5دستوری را برای خواندن از واحد دیسک 3اجرا می کند .در زمان :15برش زمانی P5منقضی می شود.
در زمان P7 :18دستوری را برای نوشتن در واحد 3دیسک اجرا می کند .در زمان P3 :20دستوری را برای خواندن از واحد
دیسک 2اجرا می کند .در زمان P5 :24دستوری را برای نوشتن در واحد دیسک 3اجرا می کند .در زمان P5 :28تعویض
شده است
در زمان :33یک وقفه از واحد دیسک 2رخ می دهد :خواندن P3کامل شده است .در زمان :36یک وقفه از واحد دیسک 3رخ
می دهد :خواندن P1کامل شده است .در زمان P8 :38خاتمه می یابد.
در زمان :40یک وقفه از واحد دیسک 3رخ می دهد :نوشتن P5کامل شده است .در زمان P5 :44مجدداً تعویض می شود.
در زمان :48یک وقفه از واحد دیسک 3رخ می دهد :نوشتن P7کامل شده است.
برای هر بار 37 ،22و ،47مشخص کنید که هر فرآیند در کدام حالت است .اگر فرآیندی مسدود شده است ،رویدادی را که در
آن مسدود شده است را بیشتر شناسایی کنید.
3.3شکل b3.9شامل هفت حالت است .در اصل ،می توان یک انتقال بین هر دو حالت ،برای مجموع 42انتقال مختلف ترسیم
کرد.
آ .تمام انتقالهای ممکن را فهرست کنید و مثالی از آنچه میتواند باعث هر انتقال شود را بیاورید.
3.4برای مدل فرآیند هفت حالته شکل ،b3.9نمودار صفی مشابه شکل b3.8ترسیم کنید.
3.5نمودار انتقال حالت شکل b3.9را در نظر بگیرید .فرض کنید زمان آن رسیده است که سیستم عامل فرآیندی را ارسال کند
و فرآیندهایی هم در حالت آماده و هم در حالت آماده/تعلیق وجود دارد و حداقل یک فرآیند در حالت آماده/تعلیق اولویت
زمانبندی باالتری نسبت به هر یک از فرآیندها دارد .در حالت آماده دو سیاست افراطی به شرح زیر است 1 :همیشه از یک
فرآیند در حالت آماده ارسال شود ،تا مبادله به حداقل برسد ،و 2همیشه به فرآیند با باالترین اولویت ترجیح داده شود ،حتی اگر
این به معنای تعویض در زمانی باشد که تعویض ضروری نیست .یک خط مشی میانی پیشنهاد کنید که سعی می کند نگرانی
های مربوط به اولویت و عملکرد را متعادل کند.
آ .آیا می توانید توجیهی برای وجود این همه حالت انتظار مجزا ارائه دهید؟
192
سیستم عامل های داخلی و اصول طراحی193.........................................................................................................................
ب چرا stateهای زیر نسخههای مقیم و تعویضشده ندارند :انتظار خطای صفحه ،انتظار صفحه تصادفی ،انتظار رویداد معمول،
انتظار صفحه رایگان ،و انتظار منبع؟ ج نمودار انتقال حالت را رسم کنید و عمل یا اتفاقی را که باعث هر انتقال می شود را نشان
دهید.
3.7سیستم عامل VAX/VMSاز چهار حالت دسترسی پردازنده برای تسهیل حفاظت و اشتراک منابع سیستم در بین
فرآیندها استفاده می کند .حالت دسترسی تعیین می کند
-امتیازات اجرای دستورالعمل :چه دستوراتی را پردازنده ممکن است اجرا کند
-امتیازات دسترسی به حافظه :دستورالعمل فعلی ممکن است به کدام مکان ها در حافظه مجازی دسترسی داشته باشد
193
سیستم عامل های داخلی و اصول طراحی194.........................................................................................................................
: Kernel -هسته سیستم عامل VMSرا اجرا می کند که شامل مدیریت حافظه ،مدیریت وقفه و عملیات I/Oاست.
: Executive -بسیاری از تماس های سرویس سیستم عامل ،از جمله روال های مدیریت فایل و ضبط دیسک و نوار را اجرا
می کند.
: Supervisor -سایر خدمات سیستم عامل مانند پاسخ به دستورات کاربر را اجرا می کند
-کاربر :برنامه های کاربر ،به عالوه ابزارهایی مانند اجرارها ،ویرایشگرها ،پیوند دهنده ها و اشکال زدا را اجرا می کند.
فرآیندی که در حالتی با امتیاز کمتر اجرا می شود ،اغلب نیاز به فراخوانی رویه ای دارد که در حالت دارای امتیاز بیشتر اجرا می
شود .به عنوان مثال ،یک برنامه کاربر به یک سرویس سیستم عامل نیاز دارد .این تماس با استفاده از یک دستورالعمل تغییر
حالت CHMبه دست می آید که باعث ایجاد وقفه می شود که کنترل را به یک روال در حالت دسترسی جدید منتقل می کند.
بازگشت با اجرای دستور REIبازگشت از استثنا یا وقفه انجام می شود.
آ .تعدادی از سیستم عامل ها دارای دو حالت هسته و کاربر هستند .چه هستند مزایا و معایب ارائه چهار حالت به جای دو؟ /ب
آیا می توانید حتی برای بیش از چهار حالت پرونده بسازید؟
194
سیستم عامل های داخلی و اصول طراحی195.........................................................................................................................
3.8طرح VMSکه در مسئله قبل مورد بحث قرار گرفت ،اغلب به عنوان یک ساختار حفاظتی حلقه نامیده می شود ،همانطور
که در شکل 3.18نشان داده شده است .در واقع ،طرح ساده هسته/کاربر ،همانطور که در بخش 3.3توضیح داده شد ،یک
ساختار دو حلقه ای است .یک نقطه ضعف احتمالی این ساختار حفاظتی این است که نمی توان به راحتی از آن برای اجرای
اصل "نیاز به دانستن" استفاده کرد SILB04 .این مثال را میآورد :اگر یک شی در دامنه Djقابل دسترسی است اما در دامنه
Diقابل دسترسی نیست .j < i ،اما این بدان معنی است که هر شیء قابل دسترسی در Diدر Djنیز قابل دسترسی است.
آ .آیا این امکان وجود دارد که بخواهید به یک فرآیند اجازه دهید در بیش از یک رویداد به طور همزمان منتظر بماند؟ مثالی
ارائه کنید.
ب در آن صورت ،چگونه ساختار صف شکل را برای پشتیبانی از این ویژگی جدید تغییر می دهید؟
3.10در تعدادی از رایانه های اولیه ،یک وقفه باعث شد که مقادیر ثبت در مکان های ثابت مرتبط با سیگنال وقفه داده شده
ذخیره شود .در چه شرایطی این یک تکنیک عملی است؟ توضیح دهید که چرا به طور کلی ناخوشایند است.
3.11در بخش ،3.4بیان شد که یونیکس برای برنامههای بالدرنگ مناسب نیست زیرا ممکن است فرآیندی که در حالت هسته
اجرا میشود ،از پیش استفاده نشود .دارای جزئیات -بسیط.
195
سیستم عامل های داخلی و اصول طراحی196.........................................................................................................................
فصل 4
4.1فرآیندها و موضوعات
عملکرد نرم افزار در برنامه کاربردی چند هسته ای مثال :نرم افزار بازی Valve
196
سیستم عامل های داخلی و اصول طراحی197.........................................................................................................................
فرآیندها و موضوعات
4.9خالصه
اهداف یادگیری
-تفاوت بین رشته های سطح کاربر و رشته های سطح هسته را توضیح دهید.
این فصل به بررسی برخی از مفاهیم پیشرفته تر مربوط به مدیریت فرآیند می پردازد که در تعدادی از سیستم عامل های معاصر
یافت می شود .ما نشان میدهیم که مفهوم فرآیند پیچیدهتر و ظریفتر از آنچه تاکنون ارائه شده است است و در واقع دو مفهوم
جداگانه و بالقوه مستقل را در بر میگیرد :یکی مربوط به مالکیت منابع و دیگری مربوط به اجرا .این تمایز منجر به توسعه
ساختاری به نام threadدر بسیاری از سیستم عامل ها شده است.
197
سیستم عامل های داخلی و اصول طراحی198.........................................................................................................................
-مالکیت منبع :یک فرآیند شامل یک فضای آدرس مجازی برای نگهداری تصویر فرآیند است .از فصل 3به یاد بیاورید که
تصویر فرآیند مجموعه ای از برنامه ،داده ها ،پشته و ویژگی های تعریف شده در بلوک کنترل فرآیند است .هر از چندگاهی
ممکن است به یک فرآیند کنترل یا مالکیت منابعی مانند حافظه اصلی ،کانال های ورودی/خروجی ،دستگاه های ورودی/خروجی
و فایل ها اختصاص یابد .سیستم عامل یک عملکرد حفاظتی برای جلوگیری از تداخل ناخواسته بین فرآیندها با توجه به منابع
انجام می دهد.
-زمانبندی/اجرا :اجرای یک فرآیند یک مسیر اجرا ردیابی را از طریق یک یا چند برنامه دنبال میکند به عنوان مثال ،شکل
.1.5این اجرا ممکن است با فرآیندهای دیگر تداخل داشته باشد .بنابراین ،یک فرآیند دارای یک حالت اجرا در حال اجرا ،آماده
و غیره و یک اولویت اعزام است و موجودی است که توسط سیستم عامل برنامه ریزی و ارسال می شود.
برخی از افکار باید خواننده را متقاعد کند که این دو ویژگی مستقل هستند و میتوانند به طور مستقل توسط سیستم عامل مورد
بررسی قرار گیرند .این در تعدادی از سیستم عامل ها ،به ویژه سیستم های اخیراً توسعه یافته انجام می شود .برای تفکیک این
دو ویژگی ،واحد توزیع معموالً به عنوان یک فرآیند رشته یا سبک وزن نامیده می شود ،در حالی که واحد مالکیت منبع معموالً
به عنوان یک فرآیند یا وظیفه 16نامیده می شود.
Multithreadingبه توانایی یک سیستم عامل برای پشتیبانی از چندین مسیر اجرا همزمان در یک فرآیند واحد اشاره دارد.
رویکرد سنتی یک رشته اجرا در هر فرآیند ،که در آن مفهوم یک رشته به رسمیت شناخته نمی شود ،به عنوان رویکرد تک
رشته ای نامیده می شود .دو آرایش نشان داده شده در نیمه سمت چپ شکل 4.1رویکردهای تک رشته ای هستندMS- .
DOSنمونه ای از سیستم عاملی است که از یک فرآیند کاربر و یک رشته واحد پشتیبانی می کند .سیستم عامل های دیگر،
مانند برخی از انواع یونیکس ،از چندین فرآیند کاربر پشتیبانی می کنند اما فقط از یک رشته در هر فرآیند پشتیبانی می کنند.
نیمه سمت راست شکل 4.1رویکردهای چند رشته ای را نشان می دهد .یک محیط زمان اجرا جاوا نمونه ای از یک سیستم یک
فرآیند با چندین رشته است .نکته جالب در این بخش استفاده از چندین فرآیند است که هر یک از چندین رشته پشتیبانی می
کنند .این رویکرد در ویندوز ،سوالریس ،و بسیاری از نسخههای مدرن یونیکس و سایر موارد استفاده میشود .در این بخش ما
1 16افسوس ،حتی این درجه از سازگاری حفظ نمی شود .در سیستمعاملهای اصلی آیبیام ،مفاهیم فضای آدرس و وظیفه به ترتیب تقریباً با مفاهیم فرآیند و رشتهای که در این
بخش توضیح میدهیم مطابقت دارد .همچنین ،در ادبیات ،اصطالح فرآیند سبک وزن به عنوان ( )1معادل اصطالح(2) ، threadنوع خاصی از رزوه شناخته شده به عنوان رشته
در سطح هسته ،یا ( )3در مورد ، Solarisیک استفاده می شود .موجودی که رشته های سطح کاربر را به رشته های سطح هسته نگاشت می کند.
198
سیستم عامل های داخلی و اصول طراحی199.........................................................................................................................
یک توصیف کلی از چند رشته ای ارائه می دهیم .جزئیات رویکردهای ویندوز ،سوالریس و لینوکس بعداً در این فصل مورد بحث
قرار خواهند گرفت.
در یک محیط چند رشته ای ،یک فرآیند به عنوان واحد تخصیص منابع و واحد حفاظت تعریف می شود .موارد زیر با فرآیندها
مرتبط هستند:
-دسترسی محافظت شده به پردازنده ها ،سایر فرآیندها برای ارتباطات بین فرآیندی ،فایل ها ،و منابع ورودی/خروجی دستگاه
ها و کانال ها
در یک فرآیند ،ممکن است یک یا چند رشته وجود داشته باشد که هر کدام دارای موارد زیر هستند:
-یک زمینه موضوع ذخیره شده زمانی که در حال اجرا نیست .یکی از راههای مشاهده رشته ،بهعنوان یک شمارنده برنامه
مستقل است که در یک فرآیند عمل میکند
-دسترسی به حافظه و منابع فرآیند آن ،به اشتراک گذاشته شده با سایر رشته ها در آن فرآیند
شکل 4.2تمایز بین رشته ها و فرآیندها را از دیدگاه مدیریت فرآیند نشان می دهد .در یک مدل فرآیند تک رشته ای یعنی
مفهوم مشخصی از رشته وجود ندارد ،نمایش یک فرآیند شامل بلوک کنترل فرآیند و فضای آدرس کاربر ،و همچنین پشته های
کاربر و هسته برای مدیریت رفتار تماس/بازگشت است .اجرای فرآیند در حالی که فرآیند در حال اجرا است ،رجیسترهای
پردازنده را کنترل می کند .محتویات این رجیسترها زمانی که فرآیند اجرا نمی شود ذخیره می شود .در یک محیط چند رشته
ای ،هنوز یک بلوک کنترل فرآیند و فضای آدرس کاربر مرتبط با فرآیند وجود دارد ،اما اکنون پشته های جداگانه ای برای هر
رشته و همچنین یک بلوک کنترل جداگانه برای هر رشته وجود دارد که حاوی مقادیر ثبت ،اولویت و موارد دیگر است.
بنابراین ،همه رشته های یک فرآیند ،وضعیت و منابع آن فرآیند را به اشتراک می گذارند .آنها در همان فضای آدرس ساکن
هستند و به داده های مشابه دسترسی دارند .وقتی یک رشته یک مورد از داده ها را در حافظه تغییر می دهد ،رشته های دیگر
در صورت دسترسی و زمانی که به آن آیتم دسترسی داشته باشند ،نتایج را می بینند .اگر یک رشته فایلی را با امتیاز خواندن باز
کند ،رشته های دیگر در همان فرآیند نیز می توانند از آن فایل بخوانند.
199
سیستم عامل های داخلی و اصول طراحی200.........................................................................................................................
.1برای ایجاد یک موضوع جدید در یک فرآیند موجود زمان بسیار کمتری نسبت به ایجاد یک فرآیند کامالً جدید نیاز است.
مطالعات انجام شده توسط توسعه دهندگان Machنشان می دهد که ایجاد رشته ده برابر سریعتر از ایجاد فرآیند در یونیکس
TEVA87است.
.3زمان کمتری برای جابجایی بین دو رشته در یک فرآیند نسبت به جابجایی بین فرآیندها نیاز است.
Thread .4ها کارایی را در ارتباط بین برنامه های اجرایی مختلف افزایش می دهند .در اکثر سیستم عامل ها ،ارتباط بین
فرآیندهای مستقل نیازمند مداخله هسته برای ایجاد حفاظت و مکانیسم های مورد نیاز برای ارتباط است .با این حال ،از آنجا که
رشتههای درون یک فرآیند حافظه و فایلها را به اشتراک میگذارند ،میتوانند بدون فراخوانی هسته با یکدیگر ارتباط برقرار
کنند.
بنابراین ،اگر برنامه یا تابعی وجود داشته باشد که باید بهعنوان مجموعهای از واحدهای اجرایی مرتبط پیادهسازی شود ،انجام آن
بهعنوان مجموعهای از رشتهها به جای مجموعهای از فرآیندهای مجزا بسیار کارآمدتر است.
نمونهای از برنامهای که میتواند از رشتهها استفاده کند ،سرور فایل است .همانطور که هر درخواست فایل جدید وارد می شود،
یک رشته جدید می تواند برای برنامه مدیریت فایل ایجاد شود .از آنجایی که یک سرور بسیاری از درخواستها را رسیدگی
میکند ،بسیاری از رشتهها در مدت زمان کوتاهی ایجاد و از بین میروند .اگر سرور روی یک کامپیوتر چند پردازنده ای اجرا
شود ،چندین رشته در یک فرآیند می توانند به طور همزمان روی پردازنده های مختلف اجرا شوند .عالوه بر این ،از آنجایی که
فرآیندها یا رشتهها در یک سرور فایل باید دادههای فایل را به اشتراک بگذارند و بنابراین اقدامات خود را هماهنگ میکنند،
استفاده از رشتهها و حافظه مشترک سریعتر از پردازشها و ارسال پیام برای این هماهنگی است.
ساختار threadهمچنین برای ساده کردن ساختار برنامه ای که به طور منطقی چندین عملکرد مختلف را انجام می دهد ،روی
یک پردازنده مفید است.
200
سیستم عامل های داخلی و اصول طراحی201.........................................................................................................................
LETW88چهار مثال از کاربرد threadها در یک سیستم پردازش چند کاربره تک کاربره را ارائه می دهد:
-کار پیش زمینه و پس زمینه :به عنوان مثال ،در یک برنامه صفحه گسترده ،یک رشته می تواند منوها را نمایش دهد و ورودی
کاربر را بخواند ،در حالی که رشته دیگر دستورات کاربر را اجرا می کند و صفحه گسترده را به روز می کند .این ترتیب اغلب
سرعت درک شده برنامه را با اجازه دادن به برنامه برای درخواست دستور بعدی قبل از تکمیل دستور قبلی افزایش می دهد.
-پردازش ناهمزمان :عناصر ناهمزمان در برنامه را می توان به صورت رشته پیاده سازی کرد .به عنوان مثال ،به عنوان محافظت
در برابر قطع برق ،می توان یک واژه پرداز را طراحی کرد تا بافر حافظه دسترسی تصادفی RAMخود را هر دقیقه یک بار روی
دیسک بنویسد .میتوان رشتهای ایجاد کرد که تنها کار آن پشتیبانگیری دورهای است و مستقیماً با سیستمعامل زمانبندی
میشود .نیازی به کد فانتزی در برنامه اصلی برای بررسی زمان یا هماهنگی ورودی و خروجی نیست.
-سرعت اجرا :یک فرآیند چند رشته ای می تواند یک دسته از داده ها را در حین خواندن دسته بعدی از یک دستگاه محاسبه
کند .در یک سیستم چند پردازنده ،چندین رشته از یک فرآیند ممکن است قادر به اجرای همزمان باشند .بنابراین ،حتی اگر یک
رشته ممکن است برای یک عملیات I/Oبرای خواندن در دسته ای از داده ها مسدود شود ،رشته دیگری ممکن است در حال
اجرا باشد.
-ساختار برنامه مدوالر :برنامه هایی که شامل انواع فعالیت ها یا منابع و مقصدهای ورودی و خروجی متنوعی هستند ممکن
است طراحی و پیاده سازی با استفاده از رشته ها آسان تر باشد.
در سیستمعاملی که از رشتهها پشتیبانی میکند ،زمانبندی و ارسال بر اساس رشته انجام میشود .از این رو ،بیشتر اطالعات
وضعیت مربوط به اجرا در ساختارهای داده سطح رشته نگهداری می شود .با این حال ،اقدامات متعددی وجود دارد که بر همه
رشتههای یک فرآیند تأثیر میگذارد و سیستمعامل باید آنها را در سطح فرآیند مدیریت کند .به عنوان مثال ،تعلیق شامل
تعویض فضای آدرس یک فرآیند از حافظه اصلی برای ایجاد فضایی برای فضای آدرس یک فرآیند دیگر است .از آنجایی که همه
رشتهها در یک فرآیند فضای آدرس یکسانی دارند ،همه رشتهها به طور همزمان معلق میشوند .به طور مشابه ،خاتمه یک
فرآیند ،تمام رشتههای درون آن فرآیند را خاتمه میدهد.
کارکرد رشته
مانند فرآیندها ،رشته ها دارای حالت های اجرایی هستند و ممکن است با یکدیگر همگام شوند .ما به نوبه خود به این دو جنبه
از عملکرد رشته نگاه می کنیم.
وضعیت های موضوع مانند فرآیندها ،حالت های کلیدی برای یک رشته عبارتند از :در حال اجرا ،آماده و مسدود شده است .به
طور کلی ،ارتباط دادن حالت های تعلیق با رشته ها منطقی نیست زیرا چنین حالت هایی مفاهیمی در سطح فرآیند هستند.
201
سیستم عامل های داخلی و اصول طراحی202.........................................................................................................................
بهویژه ،اگر فرآیندی مبادله شود ،همه رشتههای آن لزوماً مبادله میشوند ،زیرا همه آنها فضای آدرس فرآیند را به اشتراک
میگذارند.
چهار عملیات threadاساسی مرتبط با تغییر در وضعیت رشته وجود دارد :ANDE04
: Spawn -به طور معمول ،زمانی که یک فرآیند جدید ایجاد می شود ،یک رشته برای آن فرآیند نیز ایجاد می شود .متعاقباً،
یک رشته در یک فرآیند ممکن است رشته دیگری را در همان فرآیند ایجاد کند و یک اشاره گر دستورالعمل و آرگومان هایی
برای رشته جدید ارائه کند .موضوع جدید با زمینه ثبت نام و فضای پشته خود ارائه می شود و در صف آماده قرار می گیرد.
: Block -زمانی که یک رشته باید منتظر یک رویداد باشد ،آن را مسدود می کند ذخیره ثبت نام کاربر ،شمارنده برنامه و
نشانگرهای پشته .پردازنده ممکن است اکنون به اجرای یک رشته آماده دیگر در همان یا یک فرآیند دیگر روی بیاورد.
: Unblock -هنگامی که رویدادی که یک رشته برای آن مسدود شده است رخ می دهد ،رشته به صف آماده منتقل می شود.
: Finish -هنگامی که یک رشته کامل می شود ،زمینه ثبت نام و پشته های آن جدا می شوند.
202
سیستم عامل های داخلی و اصول طراحی203.........................................................................................................................
بلوک کنترل
فرآیند
بلوک کنترل
فضای آدرس
فرآیند
کاربر
فضای
آدرس کاربر
زمان
203
سیستم عامل های داخلی و اصول طراحی204.........................................................................................................................
زمان
درخواست تکمیل
کوانتوم زمانی منقضی
I/Oدرخواست
شد می شود
کوانتوم زمانی
منقضی می شود
یک مسئله مهم این است که آیا مسدود شدن یک رشته منجر به مسدود شدن کل فرآیند می شود یا خیر .به عبارت دیگر ،اگر
یک threadدر یک فرآیند مسدود شود ،آیا این مانع از اجرای هر رشته دیگری در همان فرآیند می شود ،حتی اگر آن
Threadدیگر در حالت آماده باشد؟ واضح است که اگر رشته مسدود شده کل فرآیند را مسدود کند ،بخشی از انعطافپذیری و
قدرت رشته ها از بین میرود.
ما متعاقباً در بحث خود در مورد رشتههای سطح کاربر در مقابل رشتههای سطح هسته به این موضوع باز میگردیم ،اما در حال
حاضر اجازه دهید مزایای عملکرد رشتههایی را که کل فرآیند را مسدود نمیکنند ،در نظر بگیریم .شکل 4.3بر اساس یکی در
KLEI96برنامه ای را نشان می دهد که دو فراخوانی روش از راه دور RPCs17را با دو میزبان مختلف برای به دست آوردن
یک نتیجه ترکیبی انجام می دهد .در یک برنامه تک رشته ای ،نتایج به ترتیب به دست می آیند ،بنابراین برنامه باید به نوبت
منتظر پاسخ هر سرور باشد .بازنویسی برنامه برای استفاده از یک رشته مجزا برای هر RPCمنجر به افزایش سرعت قابل توجهی
می شود .توجه داشته باشید که اگر این برنامه بر روی یک تک پردازنده کار می کند ،درخواست ها باید به صورت متوالی تولید
شوند و نتایج به ترتیب پردازش شوند .با این حال ،برنامه به طور همزمان منتظر دو پاسخ است.
در یک تک پردازشگر ،چندبرنامهنویسی امکان درهمآمیزی رشتههای متعدد در چندین فرآیند را فراهم میکند .در مثال شکل
،4.4سه رشته در دو فرآیند روی پردازنده قرار گرفته اند .اجرا از یک رشته به رشته دیگر منتقل می شود یا زمانی که رشته در
حال اجرا مسدود شده باشد یا زمانی که برش زمانی آن تمام شده باشد.
RPC 17تکنیکی است که توسط آن دو برنامه ،که ممکن است در ماشین های مختلف اجرا شوند ،با استفاده از دستور فراخوانی/بازگشت رویه و معنایی تعامل دارند .هر دو برنامه
فراخوانی و فراخوانی به گونه ای رفتار می کنند که انگار برنامه شریک روی یک دستگاه اجرا می شود . RPCها اغلب برای برنامه های کاربردی سرویس گیرنده/سرور استفاده می
شوند و در فصل 16مورد بحث قرار می گیرند
204
سیستم عامل های داخلی و اصول طراحی205.........................................................................................................................
همگام سازی threadهمه رشته های یک فرآیند فضای آدرس و سایر منابع یکسان مانند فایل های باز را به اشتراک می
گذارند .هر گونه تغییر یک منبع توسط یک رشته بر محیط رشته های دیگر در همان فرآیند تأثیر می گذارد .بنابراین الزم است
فعالیتهای رشتههای مختلف را همگامسازی کنیم تا با یکدیگر تداخل نداشته باشند یا ساختار دادهای را خراب نکنند .به عنوان
مثال ،اگر دو رشته هر کدام سعی کنند یک عنصر را به یک لیست دارای پیوند دوگانه به طور همزمان اضافه کنند ،ممکن است
یک عنصر از بین برود یا فهرست ممکن است بدشکل شود.
مسائل مطرح شده و تکنیک های مورد استفاده در همگام سازی رشته ها به طور کلی مانند همگام سازی فرآیندها است .این
مسائل و تکنیک ها موضوع فصل های 5و 6می باشد.
دو دسته کلی از اجرای رشته وجود دارد :رشتههای سطح کاربر ULTو رشتههای سطح هسته .KLT
threadsدر سطح کاربر در یک مرکز ULTخالص ،تمام کارهای مدیریت رشته توسط برنامه انجام می شود و هسته از وجود
رشته ها آگاه نیست .شکل a4.5رویکرد ULTخالص را نشان می دهد .هر برنامه کاربردی را می توان با استفاده از کتابخانه
رشته ها که مجموعه ای از روال ها برای مدیریت ULTاست برنامه ریزی کرد تا چند رشته ای باشد .کتابخانه threadsشامل
کدهایی برای ایجاد و از بین بردن رشته ها ،برای ارسال پیام ها و داده ها بین رشته ها ،برای زمان بندی اجرای رشته ،و برای
ذخیره و بازیابی زمینه های رشته است.
205
سیستم عامل های داخلی و اصول طراحی206.........................................................................................................................
به طور پیش فرض ،یک برنامه با یک رشته شروع می شود و در آن رشته شروع به اجرا می کند .این برنامه و رشته آن به یک
فرآیند اختصاص داده شده است که توسط هسته مدیریت می شود .در هر زمانی که برنامه در حال اجرا است فرایند در حالت
Runningاست ،برنامه ممکن است یک رشته جدید برای اجرا در همان فرآیند ایجاد کند Spawning .با فراخوانی ابزار
spawnدر کتابخانه threadsانجام می شود .کنترل توسط یک فراخوانی رویه به آن ابزار منتقل می شود .کتابخانه threads
یک ساختار داده برای رشته جدید ایجاد می کند و سپس با استفاده از برخی از الگوریتم های زمان بندی ،کنترل را به یکی از
رشته های این فرآیند که در حالت آماده است ،منتقل می کند .هنگامی که کنترل به کتابخانه منتقل می شود ،زمینه رشته
فعلی ذخیره می شود ،و زمانی که کنترل از کتابخانه به یک رشته منتقل می شود ،زمینه آن رشته بازیابی می شود .زمینه اساساً
شامل محتویات ثبت کاربر ،شمارنده برنامه و نشانگرهای پشته است.
تمام فعالیت های توضیح داده شده در پاراگراف قبل در فضای کاربر و در یک فرآیند واحد انجام می شود .هسته از این فعالیت
بی اطالع است .هسته به برنامه ریزی فرآیند به عنوان یک واحد ادامه می دهد و یک حالت اجرا آماده ،در حال اجرا ،مسدود
شده و غیره را به آن فرآیند اختصاص می دهد .مثالهای زیر باید رابطه بین زمانبندی رشته و زمانبندی فرآیند را روشن کند.
فرض کنید که فرآیند Bدر رشته 2خود در حال اجرا است .حالت های فرآیند و دو ULTکه بخشی از فرآیند هستند در شکل
a4.6نشان داده شده است .هر یک از موارد زیر یک اتفاق محتمل است:
.1برنامه ای که در رشته 2اجرا می شود ،یک فراخوانی سیستمی ایجاد می کند که Bرا مسدود می کند .به عنوان مثال ،یک
تماس I/Oبرقرار می شود .این باعث می شود که کنترل به هسته منتقل شود .هسته عمل I/Oرا فراخوانی می کند ،فرآیند B
را در حالت Blockedقرار می دهد و به فرآیند دیگری سوئیچ می کند.
در همین حال ،با توجه به ساختار داده ای که توسط کتابخانه threadsنگهداری می شود ،موضوع 2فرآیند Bهنوز در حالت
Runningاست .مهم است که توجه داشته باشید که موضوع 2در واقع به معنای اجرا شدن بر روی یک پردازنده اجرا نمی
شود .اما توسط کتابخانه threadsدر حالت Runningدرک می شود .نمودارهای وضعیت مربوطه در شکل b4.6نشان داده
شده است.
.2یک وقفه ساعت ،کنترل را به هسته منتقل می کند ،و هسته تعیین می کند که فرآیند در حال اجرا Bبخش زمانی خود را
تمام کرده است .هسته فرآیند Bرا در حالت آماده قرار می دهد و به فرآیند دیگری سوئیچ می کند .در همین حال ،با توجه به
ساختار داده ای که توسط کتابخانه threadsنگهداری می شود ،موضوع 2فرآیند Bهنوز در حالت Runningاست.
نمودارهای وضعیت مربوطه در شکل c4.6نشان داده شده است.
206
سیستم عامل های داخلی و اصول طراحی207.........................................................................................................................
Thread 2 .3به جایی رسیده است که نیاز به انجام برخی اقدامات توسط thread 1 process Bدارد Thread 2 .وارد
حالت Blockedشده و Thread 1از Readyبه Runningمنتقل می شود .خود فرآیند در حالت Runningباقی می
ماند .نمودارهای وضعیت مربوطه در شکل d4.6نشان داده شده است.
توجه داشته باشید که هر یک از سه مورد قبلی یک رویداد جایگزین را پیشنهاد میکند که از نمودار الف شکل 4.6شروع
میشود .بنابراین هر یک از سه نمودار دیگر d ،c ،bانتقالی از وضعیت موجود در aرا نشان می دهد .در موارد 1و 2شکلهای
b4.6و ،c4.6زمانی که هسته کنترل را به پردازش Bبرمیگرداند ،اجرا در رشته 2از سر گرفته میشود .همچنین توجه داشته
باشید که یک فرآیند میتواند با پایان دادن به بخش زمانی آن یا با پیشپرداخت شدن توسط آن ،قطع شود .یک فرآیند با
اولویت باالتر ،در حالی که در حال اجرای کد در کتابخانه threadsاست .بنابراین ،یک فرآیند ممکن است در وسط یک سوئیچ
رشته از یک رشته به رشته دیگر در صورت قطع شدن باشد .هنگامی که آن فرآیند از سر گرفته می شود ،اجرا در کتابخانه
threadsادامه می یابد ،که سوئیچ threadرا تکمیل می کند و کنترل را به رشته دیگری در آن فرآیند منتقل می کند.
استفاده از ULTبه جای KLTدارای مزایای متعددی است که از جمله آنها می توان به موارد زیر اشاره کرد:
.1تغییر رشته به امتیازات حالت هسته نیاز ندارد زیرا تمام ساختارهای داده مدیریت رشته در فضای آدرس کاربر یک فرآیند
واحد هستند .بنابراین ،فرآیند برای انجام مدیریت رشته به حالت هسته تغییر نمی کند .این باعث صرفه جویی در هزینه های دو
سوئیچ حالت کاربر به هسته ،بازگشت هسته به کاربر می شود.
.2زمان بندی می تواند خاص برنامه باشد .یک برنامه ممکن است از یک الگوریتم زمانبندی ساده دوربرد بیشترین بهره را ببرد،
در حالی که دیگری ممکن است از یک الگوریتم زمانبندی مبتنی بر اولویت سود ببرد .الگوریتم زمانبندی را میتوان بدون
ایجاد مزاحمت در زمانبندی سیستمعامل زیربنایی ،برای برنامه کاربردی تنظیم کرد.
ULT .3ها می توانند روی هر سیستم عاملی اجرا شوند .هیچ تغییری در هسته اصلی برای پشتیبانی از ULTها الزم نیست.
کتابخانه threadsمجموعه ای از توابع در سطح برنامه است که توسط همه برنامه ها به اشتراک گذاشته شده است.
.1در یک سیستم عامل معمولی ،بسیاری از تماس های سیستمی مسدود می شوند .در نتیجه ،زمانی که یک ULTیک
فراخوانی سیستمی را اجرا میکند ،نه تنها آن رشته مسدود میشود ،بلکه تمام رشتههای درون فرآیند نیز مسدود میشوند.
.2در یک استراتژی خالص ،ULTیک برنامه چند رشته ای نمی تواند از مزایای چند پردازشی استفاده کند .یک هسته در هر
زمان یک پردازش را فقط به یک پردازنده اختصاص می دهد .بنابراین ،تنها یک رشته در یک فرآیند می تواند در یک زمان اجرا
207
سیستم عامل های داخلی و اصول طراحی208.........................................................................................................................
شود .در واقع ،ما چندبرنامهنویسی در سطح برنامه را در یک فرآیند واحد داریم .در حالی که این چندبرنامهنویسی میتواند منجر
به افزایش سرعت برنامه شود ،برنامههایی وجود دارند که از توانایی اجرای همزمان بخشهایی از کد بهره میبرند.
راه هایی برای حل این دو مشکل وجود دارد .به عنوان مثال ،هر دو مشکل را می توان با نوشتن یک برنامه به عنوان فرآیندهای
چندگانه به جای چندین رشته حل کرد .اما این رویکرد مزیت اصلی threadها را از بین می برد :هر سوئیچ به جای یک سوئیچ
threadبه یک سوئیچ فرآیند تبدیل می شود و در نتیجه سربار بسیار بیشتری به همراه دارد.
راه دیگر برای غلبه بر مشکل مسدود کردن رشته ها استفاده از تکنیکی است که به آن ژاکت گفته می شود .هدف از
jacketingتبدیل یک تماس سیستم مسدود کننده به یک تماس سیستمی غیر مسدود کننده است .به عنوان مثال ،به جای
فراخوانی مستقیم روتین I/Oسیستم ،یک رشته یک روتین I/Oدر سطح برنامه را فراخوانی می کند .در این روال ژاکت کدی
وجود دارد که بررسی می کند آیا دستگاه I/Oمشغول است یا خیر .اگر اینطور باشد ،رشته وارد حالت Blockedمی شود و
کنترل از طریق کتابخانه threadsرا به رشته دیگری منتقل می کند .هنگامی که این رشته بعداً دوباره کنترل می شود ،روال
ژاکت دوباره دستگاه I/Oرا بررسی می کند.
threadsدر سطح هسته در یک مرکز KLTخالص ،تمام کار مدیریت threadتوسط هسته انجام می شود .هیچ کد مدیریت
رشته در سطح برنامه وجود ندارد ،فقط یک رابط برنامه نویسی برنامه APIبرای تسهیالت رشته هسته وجود دارد .ویندوز نمونه
ای از این رویکرد است.
شکل b4.5رویکرد KLTخالص را نشان می دهد .هسته اطالعات زمینه را برای فرآیند به عنوان یک کل و برای رشته های
جداگانه در فرآیند حفظ می کند .زمان بندی توسط هسته بر اساس رشته انجام می شود .این رویکرد بر دو اشکال اصلی رویکرد
ULTغلبه می کند .ابتدا ،هسته میتواند به طور همزمان چندین رشته از یک فرآیند را روی چندین پردازنده زمانبندی کند.
دوم ،اگر یک رشته در یک فرآیند مسدود شود ،هسته میتواند رشته دیگری از همان فرآیند را زمانبندی کند .مزیت دیگر
رویکرد KLTاین است که روتین های هسته خود می توانند چند رشته ای باشند.
نقطه ضعف اصلی رویکرد KLTدر مقایسه با رویکرد ULTاین است که انتقال کنترل از یک رشته به رشته دیگر در همان
فرآیند نیاز به تغییر حالت به هسته دارد .برای نشان دادن تفاوت ها ،جدول 4.1نتایج اندازه گیری های انجام شده بر روی یک
کامپیوتر تک پردازنده VAXرا نشان می دهد که یک سیستم عامل یونیکس مانند را اجرا می کند .دو معیار به شرح زیر است:
،Null Forkزمان ایجاد ،زمانبندی ،اجرا ،و تکمیل فرآیند/رشتهای که رویه تهی را فراخوانی میکند به عنوان مثال ،سربار
forkکردن یک فرآیند/رشته .و ،Signal-Waitزمانی است که یک فرآیند/رشته به فرآیند/رشته انتظار سیگنال می دهد و
سپس بر اساس یک شرط منتظر می ماند یعنی سربار همگام سازی دو فرآیند/رشته با هم .می بینیم که بین ULTها و
KLTها و به طور مشابه بین KLTها و فرآیندها یک ترتیب بزرگی یا بیشتر تفاوت وجود دارد.
208
سیستم عامل های داخلی و اصول طراحی209.........................................................................................................................
بنابراین ،در ظاهر ،در حالی که سرعت قابل توجهی با استفاده از چند رشته ای KLTدر مقایسه با فرآیندهای تک رشته ای
وجود دارد ،سرعت قابل توجهی با استفاده از ULTها وجود دارد .با این حال ،اینکه آیا افزایش سرعت اضافی محقق می شود یا
خیر ،به ماهیت برنامه های درگیر بستگی دارد .اگر اکثر سوئیچ های رشته در یک برنامه به دسترسی به حالت هسته نیاز داشته
باشند ،یک طرح مبتنی بر ULTممکن است خیلی بهتر از یک طرح مبتنی بر KLTعمل نکند.
شکل 4.6نمونه هایی از روابط بین حالت های موضوعی سطح کاربر و Statesفرآیند
رویکردهای ترکیبی برخی از سیستم عامل ها یک تسهیالت ترکیبی ULT/KLTرا ارائه می دهند شکل .c4.5در یک سیستم
ترکیبی ،ایجاد رشته به طور کامل در فضای کاربر انجام می شود ،همانطور که بخش عمده ای از زمان بندی و همگام سازی
موضوعات در یک برنامه کاربردی است ULT .های متعدد از یک برنامه کاربردی بر روی تعدادی کمتر یا مساوی از KLTها
نگاشت می شوند .برنامه نویس ممکن است تعداد KLTها را برای یک برنامه کاربردی و پردازنده خاص تنظیم کند تا به
بهترین نتایج کلی دست یابد.
209
سیستم عامل های داخلی و اصول طراحی210.........................................................................................................................
در یک رویکرد ترکیبی ،چندین رشته در یک برنامه کاربردی میتوانند به صورت موازی بر روی چندین پردازنده اجرا شوند و
یک فراخوانی سیستم مسدود کننده نیازی به مسدود کردن کل فرآیند ندارد .اگر به درستی طراحی شود ،این رویکرد باید
مزایای رویکردهای خالص ULTو KLTرا ترکیب کند و در عین حال معایب را به حداقل برساند .سوالریس نمونه خوبی از
یک سیستم عامل با استفاده از این رویکرد ترکیبی است .نسخه فعلی سوالریس رابطه ULT/KLTرا به یک به یک بودن
محدود می کند.
ترتیبات دیگر
همانطور که گفتیم ،مفاهیم تخصیص منبع و واحد توزیع به طور سنتی در مفهوم واحد فرآیند -یعنی به عنوان یک رابطه 1 :1
بین رشته ها و فرآیندها تجسم می یابد .اخیراً ،عالقه زیادی به ارائه رشته های متعدد در یک فرآیند واحد ،که یک رابطه چند به
یک است ،وجود داشته است .با این حال ،همانطور که جدول 4.2نشان می دهد ،دو ترکیب دیگر نیز بررسی شده اند ،یعنی یک
رابطه چند به چند و یک رابطه یک به چند.
210
سیستم عامل های داخلی و اصول طراحی211.........................................................................................................................
ایده داشتن رابطه چند به چند بین رشته ها و فرآیندها در سیستم عامل آزمایشی WARD80 ،TRIX PAZZ92بررسی
شده است .در TRIXمفاهیم دامنه و threadوجود دارد .دامنه یک موجودیت ثابت است که از یک فضای آدرس و "پورت
ها" تشکیل شده است که از طریق آن پیام ها می توانند ارسال و دریافت شوند thread .یک مسیر اجرایی واحد است که دارای
پشته اجرا ،وضعیت پردازنده و اطالعات زمانبندی است.
همانطور که با رویکردهای چند رشته ای که تاکنون مورد بحث قرار گرفت ،چندین رشته ممکن است در یک دامنه واحد اجرا
شوند و دستاوردهای بازدهی را که قبالً مورد بحث قرار گرفت را فراهم کنند .با این حال ،این امکان نیز وجود دارد که یک
211
سیستم عامل های داخلی و اصول طراحی212.........................................................................................................................
فعالیت کاربر یا برنامه کاربردی در چندین دامنه انجام شود .در این مورد ،یک رشته وجود دارد که می تواند از یک دامنه به
دامنه دیگر حرکت کند.
به نظر میرسد که استفاده از یک رشته در حوزههای متعدد عمدتاً ناشی از تمایل به ارائه ابزارهای ساختاری برای برنامهنویس
است .به عنوان مثال ،برنامه ای را در نظر بگیرید که از یک زیربرنامه I/Oاستفاده می کند .در یک محیط چندبرنامهنویسی که
به فرآیندهای ایجاد شده توسط کاربر اجازه میدهد ،برنامه اصلی میتواند یک فرآیند جدید برای مدیریت I/Oایجاد کند و
سپس به اجرا ادامه دهد .با این حال ،اگر پیشرفت آینده برنامه اصلی به نتیجه عملیات I/Oبستگی داشته باشد ،برنامه اصلی
باید منتظر بماند تا برنامه دیگر I/Oبه پایان برسد .راه های مختلفی برای پیاده سازی این اپلیکیشن وجود دارد:
.1کل برنامه را می توان به عنوان یک فرآیند واحد پیاده سازی کرد .این یک راه حل منطقی و سرراست است .مشکالتی در
رابطه با مدیریت حافظه وجود دارد .فرآیند به عنوان یک کل ممکن است به حافظه اصلی قابل توجهی برای اجرای کارآمد نیاز
داشته باشد ،در حالی که زیربرنامه I/Oبه فضای آدرس نسبتاً کوچکی برای بافر I/Oو مدیریت مقدار نسبتاً کمی از کد برنامه
نیاز دارد .از آنجایی که برنامه I/Oدر فضای آدرس برنامه بزرگتر اجرا می شود ،یا کل فرآیند باید در حافظه اصلی در طول
عملیات I/Oباقی بماند یا عملیات I/Oدر معرض تعویض قرار گیرد .اگر برنامه اصلی و زیربرنامه ورودی/خروجی به صورت دو
رشته در فضای آدرس یکسان اجرا شوند ،این اثر مدیریت حافظه نیز وجود خواهد داشت.
.2برنامه اصلی و زیربرنامه I/Oرا می توان به صورت دو فرآیند مجزا پیاده سازی کرد .این امر باعث ایجاد فرآیند فرعی می
شود .اگر فعالیت ورودی/خروجی مکرر باشد ،یا باید فرآیند فرعی را که منابع مدیریتی را مصرف میکند زنده رها کرد ،یا به طور
مکرر برنامه فرعی را ایجاد و نابود کرد که ناکارآمد است.
.3برنامه اصلی و زیربرنامه I/Oرا به عنوان یک فعالیت واحد در نظر بگیرید که قرار است به صورت یک رشته اجرا شود .با این
حال ،یک فضای آدرس دامنه می تواند برای برنامه اصلی و یکی برای زیربرنامه I/Oایجاد شود .بنابراین ،رشته را می توان بین
دو فضای آدرس با ادامه اجرا حرکت داد .سیستم عامل می تواند دو فضای آدرس را به طور مستقل مدیریت کند و هیچ هزینه
ای برای ایجاد فرآیند متحمل نمی شود .عالوه بر این ،فضای آدرس مورد استفاده توسط زیربرنامه I/Oنیز می تواند توسط سایر
برنامه های ساده I/Oبه اشتراک گذاشته شود.
تجربیات توسعه دهندگان TRIXنشان می دهد که گزینه سوم شایستگی دارد و ممکن است موثرترین راه حل برای برخی از
برنامه ها باشد.
212
سیستم عامل های داخلی و اصول طراحی213.........................................................................................................................
ارتباط یک به چند در زمینه سیستم عامل های توزیع شده طراحی شده برای کنترل سیستم های کامپیوتری توزیع شده ،به
مفهوم رشته به عنوان یک موجودیت در درجه اول که می تواند در بین فضاهای آدرس حرکت کند ،عالقه مند شده است5 .18
نمونه قابل توجه این تحقیق .سیستم عامل Cloudsو به ویژه هسته آن است که با نام Ra DASG92شناخته می شود.
مثال دیگر سیستم Emerald STEE95است.
یک رشته در ابرها واحدی از فعالیت از دیدگاه کاربر است .یک فرآیند یک فضای آدرس مجازی با یک بلوک کنترل فرآیند
مرتبط است .پس از ایجاد ،یک رشته در یک فرآیند با فراخوانی یک نقطه ورود به برنامه در آن فرآیند شروع به اجرا می کند.
موضوعات ممکن است از یک فضای آدرس به فضای دیگر منتقل شوند و در واقع مرزهای رایانه را در بر گیرند یعنی از یک رایانه
به رایانه دیگر منتقل شوند .همانطور که یک رشته حرکت می کند ،باید اطالعات خاصی مانند ترمینال کنترل ،پارامترهای
جهانی ،و راهنمای زمان بندی به عنوان مثال ،اولویت را به همراه داشته باشد.
رویکرد ابرها روشی مؤثر برای عایقسازی کاربران و برنامهنویسان از جزئیات محیط توزیع شده ارائه میکند .فعالیت کاربر ممکن
است به صورت یک رشته نمایش داده شود ،و حرکت آن رشته در بین رایانهها ممکن است به دالیل مختلف مرتبط با سیستم،
مانند نیاز به دسترسی به یک منبع راه دور ،و تعادل بار ،توسط سیستم عامل دیکته شود.
استفاده از یک سیستم چند هستهای برای پشتیبانی از یک برنامه با رشتههای متعدد ،مانند مواردی که ممکن است در یک
ایستگاه کاری ،یک کنسول بازی ویدیویی ،یا یک رایانه شخصی که برنامهای با پردازنده شدید اجرا میکند رخ دهد ،مشکالتی را
در مورد عملکرد و طراحی برنامهها ایجاد میکند .در این بخش ،ابتدا به برخی از مفاهیم عملکرد یک برنامه کاربردی چند رشته
ای در یک سیستم چند هسته ای نگاه می کنیم و سپس یک مثال خاص از یک برنامه کاربردی که برای بهره برداری از قابلیت
های چند هسته ای طراحی شده است را شرح می دهیم.
18جابجایی فرآیندها یا رشتهها در میان فضاهای آدرس یا مهاجرت رشتهها در ماشینهای مختلف در سالهای اخیر به یک موضوع داغ تبدیل شده است .فصل 18این موضوع را
بررسی می کند.
213
سیستم عامل های داخلی و اصول طراحی214.........................................................................................................................
مزایای عملکرد بالقوه یک سازمان چند هسته ای به توانایی بهره برداری موثر از منابع موازی موجود در برنامه بستگی دارد .اجازه
دهید ابتدا روی یک برنامه واحد که روی یک سیستم چند هسته ای اجرا می شود تمرکز کنیم .قانون امدال نگاه کنید به
پیوست Eبیان می کند که:
قانون برنامهای را فرض میکند که در آن کسری f-1از زمان اجرا شامل کدی است که ذاتاً سریال است و کسری fکه شامل
کدی است که بینهایت قابل موازیسازی بدون سربار زمانبندی است .به نظر می رسد این قانون چشم انداز یک سازمان چند
هسته ای را جذاب می کند .اما همانطور که شکل a4.7نشان می دهد ،حتی مقدار کمی از کد سریال تاثیر قابل توجهی دارد.
اگر فقط 10درصد از کد ذاتاً سریال باشد ،f = 0.9اجرای برنامه بر روی یک سیستم چند هسته ای با هشت پردازنده تنها یک
افزایش عملکرد را به همراه دارد .این منجر به منحنی می شود که در آن عملکرد به اوج می رسد و سپس به دلیل افزایش بار
سربار استفاده از چندین پردازنده شروع به کاهش می کند .شکل ،b4.7از ،MCDO07یک نمونه معرف است .با این حال،
مهندسان نرم افزار به این مشکل پرداخته اند و برنامه های کاربردی متعددی وجود دارد که در آنها می توان به طور موثر از یک
سیستم چند هسته ای بهره برداری کرد MCDO07 .مجموعهای از برنامههای پایگاه داده را گزارش میدهد که در آن توجه
زیادی به کاهش کسر سریال در معماریهای سختافزار ،سیستمهای عامل ،میانافزار و نرمافزار کاربردی پایگاه داده شده است.
شکل 4.8نتیجه را نشان می دهد .همانطور که این مثال نشان می دهد ،سیستم های مدیریت پایگاه داده و برنامه های کاربردی
پایگاه داده حوزه ای هستند که در آن سیستم های چند هسته ای می توانند به طور موثر مورد استفاده قرار گیرند .بسیاری از
انواع سرورها همچنین می توانند به طور مؤثر از سازمان چند هسته ای موازی استفاده کنند ،زیرا سرورها معموالً تراکنش های
نسبتاً مستقل متعددی را به صورت موازی انجام می دهند .عالوه بر نرمافزار سرور همهمنظوره ،تعدادی از کالسهای کاربردی
مستقیماً از توانایی مقیاسسازی توان عملیاتی با تعداد هستهها بهره میبرند MCDO06 .نمونههای زیر را فهرست میکند:
-برنامه های کاربردی بومی چند رشته ای :برنامه های کاربردی چند رشته ای با داشتن تعداد کمی از فرآیندهای بسیار رشته
ای مشخص می شوند .نمونههایی از برنامههای threadedعبارتند از Lotus Dominoیا Siebel CRMمدیر ارتباط با
مشتری.
214
سیستم عامل های داخلی و اصول طراحی215.........................................................................................................................
-برنامه های کاربردی چند فرآیندی :برنامه های کاربردی چند فرآیندی با حضور بسیاری از فرآیندهای تک رشته ای مشخص
می شوند .نمونه هایی از برنامه های کاربردی چند فرآیندی عبارتند از پایگاه داده SAP ،Oracleو .PeopleSoft
-برنامه های کاربردی جاوا :برنامه های جاوا از threadingبه روشی اساسی استفاده می کنند .نه تنها زبان جاوا برنامه های
چند رشته ای را تا حد زیادی تسهیل می کند ،بلکه ماشین مجازی جاوا یک فرآیند چند رشته ای است که زمان بندی و
مدیریت حافظه را برای برنامه های جاوا فراهم می کند .برنامههای جاوا که میتوانند مستقیماً از منابع چند هستهای بهره ببرند
شامل سرورهای برنامهای مانند IBM's Websphere ،BEA's Weblogic ،Sun's Java Application Serverو
سرور برنامه کاربردی Tomcatمنبع باز هستند .همه برنامههایی که از سرور برنامه Java 2 Platform, Enterprise
Edition J2EE Platformاستفاده میکنند ،میتوانند فوراً از فناوری چند هستهای بهره ببرند.
-برنامه های کاربردی چند نمونه ای :حتی اگر یک برنامه کاربردی برای استفاده از تعداد زیادی از رشته ها مقیاس نشود ،باز هم
می توان با اجرای موازی چندین نمونه از برنامه ،از معماری چند هسته ای بهره برد .اگر چندین نمونه برنامه نیاز به درجه ای از
انزوا داشته باشند ،می توان از فناوری مجازی سازی برای سخت افزار سیستم عامل برای ارائه هر یک از آنها با محیط جداگانه و
امن خود استفاده کرد.
215
سیستم عامل های داخلی و اصول طراحی216.........................................................................................................................
216
سیستم عامل های داخلی و اصول طراحی217.........................................................................................................................
شکل 4.8مقیاس بندی بارهای کاری پایگاه داده بر روی سخت افزار چند پردازنده
Valveیک شرکت سرگرمی و فناوری است که تعدادی بازی محبوب و همچنین موتور Sourceرا توسعه داده است که یکی
از پربازدیدترین موتورهای بازی موجود است Source .یک موتور انیمیشن است که توسط Valveبرای بازیهای خود استفاده
میشود و مجوز برای بازیسازان دیگر دارد.
در سالهای اخیر Valve ،نرمافزار موتور منبع را برای استفاده از multithreadingبرای بهرهبرداری از قدرت تراشههای
پردازنده چند هستهای اینتل و AMDبرنامهریزی کرده است .REIM06کد موتور منبع تجدید نظر شده پشتیبانی
قدرتمندتری را برای بازی های Valveمانند Half Life 2فراهم می کند.
از دیدگاه ،Valveگزینه های دانه بندی رشته به صورت زیر تعریف می شوند :HARR06
threading -درشت :ماژول های منفرد که سیستم نامیده می شوند به پردازنده های جداگانه اختصاص داده می شوند.
در مورد موتور ،Sourceاین به معنای قرار دادن رندر در یک پردازنده AI ،هوش مصنوعی در پردازنده دیگر ،فیزیک
در پردازنده دیگر و غیره است .این سرراست است .در اصل ،هر ماژول اصلی یک رشته است و هماهنگی اصلی شامل
همگام سازی تمام رشته ها با یک موضوع خط زمانی است.
217
سیستم عامل های داخلی و اصول طراحی218.........................................................................................................................
threading -ریز دانه :بسیاری از وظایف مشابه یا یکسان در چندین پردازنده پخش می شوند .به عنوان مثال ،حلقه ای
که روی یک آرایه از داده ها تکرار می شود ،می تواند به تعدادی حلقه موازی کوچکتر در رشته های جداگانه تقسیم
شود که می توانند به صورت موازی برنامه ریزی شوند.
threading -ترکیبی :این شامل استفاده انتخابی از رزوه ریز دانه برای برخی سیستم ها و رزوه تک برای سیستم های
دیگر است.
Valveدریافت که از طریق threadingدرشت ،می تواند تا دو برابر عملکرد در دو پردازنده در مقایسه با اجرای روی یک
پردازنده واحد دست یابد .اما این افزایش عملکرد فقط با موارد ساختگی قابل دستیابی است .برای گیم پلی دنیای واقعی ،بهبود
در حد ضریب 1.2بود Valve .همچنین دریافت که استفاده موثر از رشته ریزدانه دشوار است .زمان هر واحد کار می تواند
متغیر باشد و مدیریت جدول زمانی نتایج و پیامدها مستلزم برنامه ریزی پیچیده است.
Valveمتوجه شد که رویکرد threadingترکیبی امیدوارکنندهترین و بهترین مقیاس است ،زیرا سیستمهای چند هستهای با
8یا 16پردازنده در دسترس قرار گرفتند .سیستم های شناسایی Valveکه به طور موثر عمل می کنند به طور دائم به یک
پردازنده اختصاص داده می شوند.
یک مثال میکس صدا است که تعامل کمی با کاربر دارد ،توسط پیکربندی فریم ویندوز محدود نمی شود و بر روی مجموعه داده
های خود کار می کند .ماژولهای دیگر ،مانند رندر صحنه ،میتوانند در تعدادی رشته سازماندهی شوند تا ماژول بتواند روی یک
پردازنده واحد اجرا شود اما با پخش شدن بر روی پردازندههای بیشتر و بیشتر ،عملکرد بیشتری را به دست آورد.
218
سیستم عامل های داخلی و اصول طراحی219.........................................................................................................................
شکل 4.9ساختار رشته را برای ماژول رندر نشان می دهد .در این ساختار سلسله مراتبی ،رشتههای سطح باالتر در صورت نیاز،
رشته های سطح پایینتر را تولید میکنند .ماژول رندر متکی به بخش مهمی از موتور منبع ،لیست جهانی است که یک پایگاه
داده از عناصر بصری در دنیای بازی است .اولین کار این است که تعیین کنیم چه مناطقی از جهان باید ارائه شوند .وظیفه بعدی
تعیین این است که چه اشیایی در صحنه هستند که از زوایای مختلف مشاهده می شود .پس از آن کار پردازنده فشرده فرا می
رسد .ماژول رندر باید رندر هر شیء را از منظرهای متعدد ،مانند نمای پخش کننده ،نمای نمایشگرهای تلویزیون ،و نقطه نظر
بازتاب در آب ،بررسی کند.
برخی از عناصر کلیدی استراتژی threadingبرای ماژول رندر در LEON07فهرست شده است و شامل موارد زیر است:
فهرستهای رندر صحنه برای چندین صحنه به صورت موازی به عنوان مثال ،جهان و انعکاس آن در آب بسازید.
-تبدیل استخوان شخصیت را برای همه شخصیتها در همه صحنهها به صورت موازی محاسبه کنید.
طراحان دریافتند که قفل کردن پایگاه دادههای کلیدی ،مانند فهرست جهانی ،برای یک رشته بسیار ناکارآمد است .بیش از 95
درصد مواقع ،یک رشته سعی می کند از یک مجموعه داده بخواند ،و حداکثر تنها 5درصد از زمان صرف نوشتن برای یک
مجموعه داده می شود .بنابراین ،یک مکانیسم همزمانی معروف به مدل تک نویسنده-چند خواننده به طور موثر کار می کند.
این بخش با مروری بر اشیاء و مکانیسمهای کلیدی که از اجرای برنامه در ویندوز 8پشتیبانی میکنند آغاز میشود .بقیه بخش
با جزئیات بیشتری به نحوه مدیریت فرآیندها و رشتهها میپردازد.
یک برنامه کاربردی از یک یا چند فرآیند تشکیل شده است .هر فرآیند منابع مورد نیاز برای اجرای یک برنامه را فراهم می کند.
یک فرآیند دارای فضای آدرس مجازی ،کد قابل اجرا ،دستگیره های باز برای اشیاء سیستم ،زمینه امنیتی ،شناسه فرآیند
منحصر به فرد ،متغیرهای محیطی ،کالس اولویت ،حداقل و حداکثر اندازه مجموعه کاری و حداقل یک رشته اجرا می باشد .هر
فرآیند با یک رشته شروع می شود که اغلب به آن رشته اصلی می گویند ،اما می تواند رشته های اضافی را از هر یک از رشته
های خود ایجاد کند.
threadموجودیتی در یک فرآیند است که می تواند برای اجرا برنامه ریزی شود .همه رشتههای یک فرآیند فضای آدرس
مجازی و منابع سیستم آن را به اشتراک میگذارند .بهعالوه ،هر رشته ،کنترلکنندههای استثنا ،اولویت زمانبندی ،ذخیرهسازی
219
سیستم عامل های داخلی و اصول طراحی220.........................................................................................................................
محلی رشته ،شناسه رشته منحصربهفرد ،و مجموعهای از ساختارهایی را که سیستم برای ذخیره بافت موضوع تا زمانبندی آن
استفاده میکند ،حفظ میکند .در یک کامپیوتر چند پردازنده ای ،سیستم می تواند همزمان به تعداد پردازنده هایی که روی
کامپیوتر وجود دارد ،رشته ها را اجرا کند.
یک شیء شغلی به گروههایی از فرآیندها اجازه میدهد تا به عنوان یک واحد مدیریت شوند .اشیاء شغلی اشیای قابل نامگذاری،
ایمن و قابل اشتراک گذاری هستند که ویژگی های فرآیندهای مرتبط با آنها را کنترل می کنند .عملیاتی که روی شی شغلی
انجام می شود ،تمام فرآیندهای مرتبط با شی شغل را تحت تأثیر قرار می دهد .به عنوان مثال می توان به اعمال محدودیت
هایی مانند اندازه مجموعه کاری و اولویت فرآیند یا پایان دادن به تمام فرآیندهای مرتبط با یک کار اشاره کرد.
یک Thread Poolمجموعهای از موضوعات کارگری است که به طور موثر فراخوانی غیرهمزمان را از طرف برنامه اجرا میکند.
Thread Poolدر درجه اول برای کاهش تعداد رشته های کاربردی و ارائه مدیریت رشته های کارگر استفاده می شود.
فیبر واحدی از اجرا است که باید به صورت دستی توسط برنامه برنامه ریزی شود .فیبرها در زمینه رشته هایی اجرا می شوند که
آنها را زمان بندی می کنند .هر رشته می تواند چندین فیبر را برنامه ریزی کند .به طور کلی ،الیاف مزیتی نسبت به کاربردهای
چند رشته ای با طراحی خوب ندارند .با این حال ،استفاده از فیبرها میتواند پورت کردن برنامههایی را که برای زمانبندی
رشتههای خودشان طراحی شدهاند ،آسانتر کند .از نقطه نظر سیستم ،یک فیبر هویت رشته ای را که آن را اجرا می کند ،فرض
می کند .به عنوان مثال ،اگر یک فیبر به ذخیرهسازی محلی رشته دسترسی داشته باشد ،به ذخیرهسازی محلی رشته نخی که
آن را اجرا میکند ،دسترسی پیدا میکند .عالوه بر این ،اگر یک فیبر تابع ExitThreadرا فراخوانی کند ،رشته ای که آن را
اجرا می کند خارج می شود .با این حال ،یک فیبر تمام اطالعات مربوط به وضعیت یکسان مرتبط با یک رشته را ندارد .تنها
اطالعات حالتی که برای یک فیبر نگهداری می شود پشته آن ،زیر مجموعه ای از رجیسترها و داده های فیبر ارائه شده در طول
ایجاد فیبر است .ثبات های ذخیره شده مجموعه ای از ثبات ها هستند که معموالً در طول فراخوانی تابع حفظ می شوند .فیبرها
به طور پیشگیرانه برنامه ریزی نشده اند .یک رشته یک فیبر را با جابجایی از فیبر دیگر به آن زمان بندی می کند .سیستم
همچنان موضوعات را برای اجرا برنامه ریزی می کند .وقتی رشتهای که فیبرها را در حال اجرا است ،از قبل انتخاب میشود،
فیبر در حال اجرا آن پیشپرداخت میشود اما انتخاب شده باقی میماند.
زمانبندی حالت کاربر UMSیک مکانیسم سبک وزن است که برنامهها میتوانند از آن برای زمانبندی رشتههای خود استفاده
کنند .یک برنامه کاربردی میتواند بین رشتههای UMSدر حالت کاربر بدون دخالت زمانبندی سیستم جابهجا شود و اگر یک
رشته UMSدر هسته بلوک شود ،دوباره کنترل پردازنده را به دست میآورد .هر رشته UMSبه جای به اشتراک گذاشتن
زمینه موضوعی یک رشته ،زمینه رشته خود را دارد .قابلیت جابهجایی بین رشتهها در حالت کاربر UMS ،را برای موارد کاری
کوتاه مدت که به تماسهای سیستمی کمی نیاز دارند ،کارآمدتر از Thread Poolsمیکند.
220
سیستم عامل های داخلی و اصول طراحی221.........................................................................................................................
UMSبرای برنامه های کاربردی با الزامات عملکرد باال که نیاز به اجرای کارآمد بسیاری از رشته ها به طور همزمان بر روی
سیستم های چند پردازنده ای یا چند هسته ای دارند ،مفید است .برای استفاده از ،UMSیک برنامه کاربردی باید یک مؤلفه
زمانبندی را پیادهسازی کند که رشتههای UMSبرنامه را مدیریت کند و تعیین کند که چه زمانی باید اجرا شوند.
ویندوز 8رویکرد سنتی ویندوز را برای مدیریت وظایف پسزمینه و چرخه عمر برنامهها تغییر میدهد .توسعه دهندگان اکنون
مسئول مدیریت وضعیت برنامه های کاربردی خود هستند .نسخه های قبلی ویندوز همیشه کنترل کامل طول عمر یک فرآیند را
به کاربر می دهد .در محیط دسکتاپ کالسیک ،کاربر مسئول بستن یک برنامه است .یک کادر محاوره ای ممکن است از آنها
بخواهد کار خود را ذخیره کنند .این موضوع در حالت دسکتاپ ویندوز 8صادق است .در رابط کاربری جدید ،Metroویندوز 8
چرخه حیات یک برنامه کاربردی را در اختیار می گیرد .اگرچه تعداد محدودی از برنامه ها می توانند در کنار برنامه اصلی در
رابط کاربری مترو با استفاده از عملکرد SnapViewاجرا شوند ،تنها یک برنامه فروشگاه می تواند در یک زمان اجرا شود .این
نتیجه مستقیم طراحی جدید است Windows 8 Live Tiles .ظاهر برنامه هایی را می دهد که دائماً روی سیستم در حال
اجرا هستند .در واقع ،آنها اعالنهای فشاری را دریافت میکنند و از منابع سیستم برای نمایش محتوای پویا ارائه شده استفاده
نمیکنند.
برنامه پیش زمینه در رابط مترو به تمام منابع پردازنده ،شبکه و دیسک در دسترس کاربر دسترسی دارد .همه برنامه های دیگر
به حالت تعلیق درآمده و به این منابع دسترسی ندارند .هنگامی که یک برنامه وارد حالت تعلیق می شود ،یک رویداد باید برای
ذخیره وضعیت اطالعات کاربر فعال شود .این مسئولیت بر عهده توسعه دهنده برنامه است .به دالیل مختلف ،چه به منابع نیاز
داشته باشد و چه به دلیل اتمام زمان برنامه ،ممکن است ویندوز 8یک برنامه پس زمینه را خاتمه دهد .این یک انحراف قابل
توجه از سیستم عامل ویندوز قبل از آن است .برنامه باید تمامی داده هایی را که کاربر وارد کرده است ،تنظیماتی که تغییر داده
و غیره را حفظ کند .این بدان معناست که شما باید وضعیت برنامه خود را در زمانی که به حالت تعلیق درآمده است ذخیره
کنید ،در صورتی که ویندوز آن را خاتمه دهد ،تا بتوانید بعداً وضعیت آن را بازیابی کنید.
هنگامی که برنامه به پیش زمینه باز می گردد ،رویداد دیگری برای به دست آوردن وضعیت کاربر از حافظه فعال می شود .هیچ
رویدادی برای نشان دادن پایان برنامه پسزمینه فعال نمیشود .در عوض ،تا زمانی که برنامه مجدداً راه اندازی شود ،داده های
برنامه در سیستم باقی می مانند ،گویی به حالت تعلیق در آمده است .کاربران انتظار دارند برنامه را همانطور که آن را ترک
کردهاند پیدا کنند ،خواه توسط ویندوز تعلیق شده باشد یا خاتمه یافته باشد یا توسط کاربر بسته شده باشد Microsoft,
.2013توسعه دهندگان برنامه می توانند از کد برای تعیین اینکه آیا باید وضعیت ذخیره شده را بازیابی کند یا خیر استفاده
کنند.
221
سیستم عامل های داخلی و اصول طراحی222.........................................................................................................................
برخی از برنامهها ،مانند فیدهای خبری ،ممکن است به مهر تاریخ مرتبط با اجرای قبلی برنامه نگاه کنند و تصمیم بگیرند که
دادهها را به نفع اطالعات تازه بهدستآمده حذف کنند .این تصمیمی است که توسط توسعه دهنده انجام می شود ،نه توسط
سیستم عامل .اگر کاربر یک برنامه را ببندد ،داده های ذخیره نشده ذخیره نمی شوند .با توجه به اینکه وظایف پیشزمینه تمام
منابع سیستم را اشغال میکنند ،گرسنگی برنامههای پسزمینه در ویندوز 8یک واقعیت است .این امر باعث میشود که توسعه
برنامه مربوط به تغییرات وضعیت برای موفقیت یک برنامه ویندوز 8حیاتی باشد.
برای پردازش نیازهای وظایف پسزمینه ،یک APIوظیفه پسزمینه ساخته شده است تا به برنامهها اجازه دهد تا کارهای
کوچک را در حالی که در پیشزمینه نیستند ،انجام دهند .در این محیط محدود ،برنامهها ممکن است اعالنهای فشاری را از
سرور دریافت کنند یا کاربر ممکن است تماس تلفنی دریافت کند .اعالنهای فشاری رشتههای XMLالگو هستند .آنها از
طریق یک سرویس ابری به نام سرویس اطالع رسانی ویندوز WNSمدیریت می شوند .این سرویس گهگاه بهروزرسانیها را به
برنامههای پسزمینه کاربر ارسال میکند API .آن درخواست ها را در صف قرار می دهد و زمانی که منابع پردازشگر کافی
دریافت کرد ،آنها را پردازش می کند .وظایف پسزمینه در استفاده از پردازنده به شدت محدود شدهاند و در هر ساعت پردازنده
تنها یک پردازشگر در ثانیه دریافت میکنند .این تضمین می کند که وظایف حیاتی سهمیه منابع برنامه کاربردی تضمین شده
را دریافت می کنند .با این حال ،تضمین نمی کند که یک برنامه پس زمینه هرگز اجرا شود.
فرآیند ویندوز
-یک فرآیند می تواند به عنوان یک فرآیند جدید یا به عنوان یک کپی از یک فرآیند موجود ایجاد شود.
-هر دو شیء فرآیند و رشته دارای قابلیت همگام سازی داخلی هستند.
شکل ،4.10بر اساس یکی در ،RUSS11روشی را نشان می دهد که در آن یک فرآیند با منابعی که کنترل می کند یا استفاده
می کند ،ارتباط دارد .به هر فرآیند یک نشانه دسترسی امنیتی اختصاص داده می شود که به آن نشانه اولیه فرآیند می گویند.
هنگامی که یک کاربر برای اولین بار وارد سیستم می شود ،ویندوز یک نشانه دسترسی ایجاد می کند که شامل شناسه امنیتی
برای کاربر است .هر فرآیندی که توسط این کاربر ایجاد می شود یا از طرف او اجرا می شود ،یک کپی از این نشانه دسترسی
دارد .ویندوز از این رمز برای تأیید توانایی کاربر برای دسترسی به اشیاء ایمن یا انجام عملکردهای محدود شده در سیستم و
اشیاء ایمن استفاده می کند .نشانه دسترسی کنترل می کند که آیا فرآیند می تواند ویژگی های خود را تغییر دهد یا خیر .در
222
سیستم عامل های داخلی و اصول طراحی223.........................................................................................................................
این حالت ،فرآیند دارای دسته ای برای توکن دسترسی خود نیست .اگر فرآیند سعی در باز کردن چنین دستهای داشته باشد،
سیستم امنیتی تعیین میکند که آیا این مجاز است و بنابراین آیا فرآیند ممکن است ویژگیهای خود را تغییر دهد یا خیر.
همچنین مجموعه ای از بلوک ها به فرآیند مربوط می شوند که فضای آدرس مجازی را که در حال حاضر به این فرآیند
اختصاص داده شده است ،تعریف می کنند .فرآیند نمی تواند مستقیماً این ساختارها را تغییر دهد ،اما باید به مدیر حافظه
مجازی ،که یک سرویس تخصیص حافظه برای فرآیند ارائه می دهد ،تکیه کند.
در نهایت ،این فرآیند شامل یک جدول شیء ،با دستههایی برای سایر اشیاء شناخته شده برای این فرآیند است .شکل 4.10یک
رشته را نشان می دهد .عالوه بر این ،فرآیند به یک شی فایل و یک شی بخش که بخشی از حافظه مشترک را تعریف می کند،
نشانه دسترسی دارد.
دسترسی
شی
پردازش
اشیاء موجود
ساختار شی گرا ویندوز توسعه یک تسهیالت فرآیندی با هدف عمومی را تسهیل می کند .ویندوز از دو نوع شیء مرتبط با
فرآیند استفاده می کند :فرآیندها و رشته ها .فرآیند ،موجودی مربوط به یک کار کاربر یا برنامه ای است که دارای منابعی مانند
حافظه و فایل های باز است thread .یک واحد کار قابل ارسال است که به صورت متوالی اجرا می شود و قابل وقفه است ،به
طوری که پردازنده می تواند به رشته دیگری تبدیل شود.
هر فرآیند ویندوز با یک شی نشان داده می شود .هر شیء فرآیندی شامل تعدادی ویژگی است و تعدادی از اقدامات یا خدماتی
را که ممکن است انجام دهد را در بر می گیرد .یک فرآیند زمانی که از طریق مجموعه ای از روش های رابط منتشر شده
223
سیستم عامل های داخلی و اصول طراحی224.........................................................................................................................
فراخوانی شود ،یک سرویس را انجام می دهد .هنگامی که ویندوز یک فرآیند جدید ایجاد می کند ،از کالس شی یا نوع تعریف
شده برای فرآیند ویندوز به عنوان یک الگو برای تولید یک نمونه شی جدید استفاده می کند .در زمان ایجاد ،مقادیر ویژگی
اختصاص داده می شود .جدول 4.3یک تعریف مختصر از هر یک از ویژگی های شیء برای یک شی فرآیند ارائه می دهد.
یک فرآیند ویندوز برای اجرا باید حداقل دارای یک رشته باشد .سپس آن رشته ممکن است رشته های دیگری ایجاد کند .در
یک سیستم چند پردازنده ،چندین رشته از یک فرآیند ممکن است به صورت موازی اجرا شوند .جدول 4.4ویژگی های شی
threadرا تعریف می کند .توجه داشته باشید که برخی از ویژگی های یک threadشبیه ویژگی های یک فرآیند است.
در این موارد ،مقدار ویژگی رشته از مقدار ویژگی فرآیند مشتق میشود .برای مثال ،تمایل پردازشگر رشته ای مجموعه ای از
پردازنده ها در یک سیستم چند پردازنده ای است که ممکن است این رشته را اجرا کند .این مجموعه برابر یا زیر مجموعه ای از
میل پردازشگر فرآیند است.
شناسه فرآیند یک مقدار منحصر به فرد که فرآیند را برای سیستم عامل
شناسایی می کند.
توصیفگر امنیتی توصیف می کند که چه کسی یک شی را ایجاد کرده است،
چه کسی می تواند به آن شی دسترسی پیدا کند یا از آن
استفاده کند ،و چه کسی از دسترسی به شی منع شده است.
اولویت پایه اولویت اجرای پایه برای موضوعات فرآیند.
مجموعه پیشفرض پردازندههایی که رشتههای فرآیند میتوانند میل پیش فرض پردازنده
روی آن اجرا شوند.
محدودیت های سهمیه حداکثر مقدار حافظه سیستمی صفحهبندیشده و
غیرصفحهشده ،فضای فایل صفحهبندی و زمان پردازشی که
فرآیندهای کاربر میتوانند استفاده کنند.
زمان اجرا کل مدت زمانی که همه رشته ها در فرآیند اجرا شده اند.
شمارنده های متغیرهایی که تعداد و نوع عملیات ورودی/خروجی را که
ورودی/خروجی threadهای فرآیند انجام داده اند را ثبت می کنند.
224
سیستم عامل های داخلی و اصول طراحی225.........................................................................................................................
شمارنده های عملیات متغیرهایی که تعداد و انواع عملیات حافظه مجازی را که
VM رشته های پردازش انجام داده اند ،ثبت می کنند.
پورت های استثنا/اشکال کانالهای ارتباطی بین فرآیندی که مدیر فرآیند زمانی که یکی
زدایی از رشتههای فرآیند باعث ایجاد استثنا شود ،پیامی را به آنها
ارسال میکند .به طور معمول ،اینها به ترتیب به فرآیندهای
فرعی محیط و دیباگر متصل می شوند.
وضعیت خروج دلیل خاتمه یک فرآیند
توجه داشته باشید که یکی از ویژگیهای یک شی context ،threadاست که حاوی مقادیر ثبتکنندههای پردازشگر در
آخرین اجرای رشته است .این اطالعات امکان تعلیق و از سرگیری رشته ها را فراهم می کند .عالوه بر این ،می توان رفتار یک
رشته را با تغییر بافت آن در حالی که معلق است تغییر داد.
225
سیستم عامل های داخلی و اصول طراحی226.........................................................................................................................
شناسه رشته یک مقدار منحصر به فرد که یک رشته را هنگام فراخوانی یک سرور
شناسایی می کند
زمینه رشته مجموعه ای از مقادیر ثبات و سایر داده های فرار که وضعیت
اجرای یک رشته را تعریف می کند
اولویت پویا اولویت اجرای threadدر هر لحظه
اولویت پایه حد پایین اولویت پویا رشته
میل پردازشگر رشته مجموعه ای از پردازنده هایی که threadمی تواند روی آنها اجرا
شود ،که یک زیرمجموعه یا تمام وابستگی پردازشگر فرآیند
threadاست.
زمان اجرای رشته مقدار تجمعی زمانی که یک رشته در حالت کاربر و در حالت
هسته اجرا شده است
وضعیت هشدار پرچمی که نشان می دهد آیا یک رشته منتظر ممکن است یک
فراخوانی رویه ناهمزمان را اجرا کند یا خیر
تعداد تعلیق تعداد دفعاتی که اجرای threadبدون از سرگیری مجدد به
حالت تعلیق درآمده است
نشانه جعل هویت یک نشانه دسترسی موقت که به یک رشته اجازه می دهد تا از
طرف یک فرآیند دیگر که توسط زیرسیستم ها استفاده می شود
عملیات انجام دهد.
پورت پایان یک کانال ارتباطی بین فرآیندی که مدیر فرآیند با پایان یافتن
رشته پیامی به آن ارسال می کند که توسط زیرسیستم ها
استفاده می شود
وضعیت خروج از رشته دلیل قطع شدن یک تاپیک
226
سیستم عامل های داخلی و اصول طراحی227.........................................................................................................................
ویندوز از همزمانی بین فرآیندها پشتیبانی می کند زیرا رشته ها در فرآیندهای مختلف ممکن است همزمان اجرا شوند به نظر
می رسد همزمان اجرا می شوند .عالوه بر این ،رشته های متعدد در یک فرآیند ممکن است به پردازنده های جداگانه اختصاص
داده شوند و به طور همزمان اجرا شوند در واقع همزمان اجرا می شوند .یک فرآیند چند رشته ای بدون استفاده از چندین
فرآیند ،همزمانی را به دست می آورد .موضوعات درون یک فرآیند می توانند اطالعات را از طریق فضای آدرس مشترک خود
مبادله کنند و به منابع مشترک فرآیند دسترسی داشته باشند .رشته ها در فرآیندهای مختلف می توانند اطالعات را از طریق
حافظه مشترکی که بین دو فرآیند تنظیم شده است تبادل کنند.
یک فرآیند چند رشته ای شی گرا وسیله ای کارآمد برای پیاده سازی یک برنامه کاربردی سرور است .به عنوان مثال ،یک فرآیند
سرور می تواند به تعدادی از مشتریان به طور همزمان سرویس دهد.
-آماده :ممکن است یک رشته آماده برای اجرا برنامه ریزی شود .توزیع کننده هسته تمام موضوعات آماده را پیگیری می کند و
آنها را به ترتیب اولویت برنامه ریزی می کند.
:- Standbyیک رشته آماده به کار برای اجرای بعدی بر روی یک پردازنده خاص انتخاب شده است .رشته در این حالت
منتظر می ماند تا آن پردازنده در دسترس قرار گیرد .اگر اولویت رشته آماده به کار به اندازه کافی باال باشد ،رشته در حال اجرا
روی آن پردازنده ممکن است به نفع رشته آماده به کار گرفته شود .در غیر این صورت ،رشته آماده به کار صبر می کند تا رشته
در حال اجرا بلوک شود یا برش زمان خود را تمام کند.
227
سیستم عامل های داخلی و اصول طراحی228.........................................................................................................................
-در حال اجرا :هنگامی که توزیع کننده هسته یک سوئیچ رشته را انجام می دهد ،موضوع آماده به کار وارد حالت Running
می شود و اجرا را شروع می کند و اجرا را تا زمانی ادامه می دهد که توسط یک رشته با اولویت باالتر از قبل استفاده شود ،برش
زمان خود را تمام کند ،بلوک کند یا خاتمه یابد .در دو حالت اول به حالت Readyبرمی گردد.
:Waiting-یک رشته زمانی وارد حالت انتظار می شود که 1در یک رویداد مسدود شده باشد به عنوان مثال2 ،I/O ،
داوطلبانه برای اهداف همگام سازی منتظر بماند ،یا 3یک زیر سیستم محیطی رشته را به سمت هدایت کند .خود را تعلیق کند.
هنگامی که شرط انتظار برآورده شد ،در صورتی که تمام منابع آن در دسترس باشد ،رشته به حالت آماده حرکت می کند.
:Transition-اگر نخی آماده اجرا باشد اما منابع در دسترس نباشد ،پس از انتظار وارد این حالت می شود .برای مثال ،پشته
رشته ممکن است از حافظه خارج شود .هنگامی که منابع در دسترس هستند ،موضوع به حالت آماده می رود.
-خاتمه یافته :یک رشته می تواند به خودی خود ،توسط رشته دیگر یا زمانی که فرآیند والد آن خاتمه یابد خاتمه یابد .هنگامی
که کارهای خانه داری تکمیل شد ،موضوع از سیستم حذف می شود ،یا ممکن است توسط Executive6برای شروع مجدد در
آینده حفظ شود.
فرآیند همه منظوره و تسهیالت رشته باید از فرآیند خاص و ساختارهای رشته ای در محیط های مختلف سیستم عامل
پشتیبانی کند .این مسئولیت هر زیرسیستم سیستم عامل است که از فرآیند ویندوز و ویژگی های رشته برای شبیه سازی
فرآیند و امکانات رشته سیستم عامل مربوطه خود بهره برداری کند .این حوزه از مدیریت فرآیند/رشته پیچیده است و ما در
اینجا فقط یک مرور مختصر ارائه می دهیم.
ایجاد فرآیند با درخواست یک فرآیند جدید از یک برنامه شروع می شود .برنامه درخواست ایجاد فرآیند را به زیرسیستم
محافظت شده مربوطه ارسال می کند که درخواست را به Executiveارسال می کند Executive .یک شی فرآیند ایجاد می
کند و یک دسته برای آن شی به زیرسیستم برمی گرداند .هنگامی که ویندوز یک فرآیند ایجاد می کند ،به طور خودکار یک
موضوع ایجاد نمی کند .در مورد ،Win32همیشه باید یک فرآیند جدید با یک رشته اولیه ایجاد شود .بنابراین ،زیرسیستم
Win32مجدداً مدیر فرآیند ویندوز را فراخوانی می کند تا یک رشته برای فرآیند جدید ایجاد کند و یک Thread handleرا
از ویندوز دریافت کند .سپس اطالعات مربوط به موضوع و فرآیند به برنامه بازگردانده می شود .در مورد ،POSIXرشته ها
پشتیبانی نمی شوند.
228
سیستم عامل های داخلی و اصول طراحی229.........................................................................................................................
بنابراین ،زیرسیستم POSIXیک رشته برای فرآیند جدید از ویندوز دریافت می کند تا فرآیند ممکن است فعال شود اما فقط
اطالعات فرآیند را به برنامه برمی گرداند .این واقعیت که فرآیند POSIXبا استفاده از یک فرآیند و یک رشته از Windows
Executiveاجرا می شود برای برنامه قابل مشاهده نیست.
هنگامی که یک فرآیند جدید توسط Executiveایجاد می شود ،فرآیند جدید بسیاری از ویژگی های خود را از فرآیند ایجاد به
ارث می برد .با این حال ،در محیط ،Win32این ایجاد فرآیند به طور غیر مستقیم انجام می شود .یک فرآیند مشتری برنامه
درخواست ایجاد فرآیند خود را به زیرسیستم Win32ارسال می کند .سپس زیرسیستم به نوبه خود یک درخواست فرآیند را به
مجری ویندوز ارسال می کند .از آنجایی که اثر مطلوب این است که فرآیند جدید ویژگیهای فرآیند مشتری و نه فرآیند سرور را
به ارث میبرد ،ویندوز زیرسیستم را قادر میسازد تا والد فرآیند جدید را مشخص کند .سپس فرآیند جدید رمز دسترسی
والدین ،محدودیتهای سهمیه ،اولویت پایه و میل پردازنده پیشفرض را به ارث میبرد.
سوالریس پشتیبانی از رشته های چندسطحی را برای ارائه انعطاف پذیری قابل توجهی در بهره برداری از منابع پردازنده پیاده
سازی می کند.
:Process-این فرآیند عادی یونیکس است و شامل فضای آدرس کاربر ،پشته و بلوک کنترل فرآیند است.
-رشتههای سطح کاربر :از طریق یک کتابخانه رشتهها در فضای آدرس یک فرآیند پیادهسازی میشوند و برای سیستم عامل
نامرئی هستند .یک رشته در سطح کاربر ULT 19یک واحد اجرایی ایجاد شده توسط کاربر در یک فرآیند است.
فرآیندهای سبک وزن :یک فرآیند سبک وزن LWPرا می توان به عنوان یک نقشه برداری بین ULTها و رشته های هسته
مشاهده کرد .هر LWPاز ULTپشتیبانی می کند و به یک رشته هسته نگاشت می کند LWP .ها توسط هسته به طور
مستقل برنامه ریزی می شوند و ممکن است به صورت موازی روی چند پردازنده اجرا شوند.
-رشته های هسته :اینها موجودیت های اساسی هستند که می توانند برای اجرا در یکی از پردازنده های سیستم برنامه ریزی و
ارسال شوند.
19
باز هم ،مخفف ULTمنحصر به این کتاب است و در ادبیات سوالریس یافت نمی شود.
229
سیستم عامل های داخلی و اصول طراحی230.........................................................................................................................
شکل 4.12رابطه بین این چهار موجودیت را نشان می دهد .توجه داشته باشید که همیشه دقیقاً یک رشته هسته برای هر
LWPوجود دارد .یک LWPدر یک فرآیند برای برنامه قابل مشاهده است .بنابراین ،ساختارهای داده LWPدر فضای آدرس
فرآیند مربوطه خود وجود دارد .در همان زمان ،هر LWPبه یک رشته هسته قابل توزیع متصل است و ساختار داده برای آن
رشته هسته در فضای آدرس هسته حفظ می شود.
یک فرآیند ممکن است شامل یک ULTمنفرد متصل به یک LWPباشد .در این مورد ،یک رشته اجرا وجود دارد که مربوط
به یک فرآیند سنتی یونیکس است .هنگامی که همزمانی در یک فرآیند واحد مورد نیاز نباشد ،یک برنامه کاربردی از این
ساختار فرآیند استفاده می کند .اگر یک برنامه نیاز به همزمانی داشته باشد ،فرآیند آن شامل چندین رشته است که هر یک به
یک LWPمحدود می شود ،که به نوبه خود هر یک به یک رشته هسته محدود می شوند.
عالوه بر این ،رشتههای هستهای وجود دارند که با LWPها مرتبط نیستند .هسته این رشته های هسته را ایجاد ،اجرا و از بین
می برد تا توابع خاص سیستم را اجرا کند .استفاده از رشته های هسته به جای فرآیندهای هسته برای اجرای توابع سیستم،
سربار سوئیچینگ در هسته را کاهش می دهد از یک سوئیچ فرآیند به یک سوئیچ رشته.
انگیزه
ساختار رشته سه سطحی ،LWP ،ULTرشته هسته در Solarisبرای تسهیل مدیریت رشته توسط سیستم عامل و ارائه یک
رابط تمیز برای برنامه ها در نظر گرفته شده است .رابط ULTمی تواند یک کتابخانه رشته استاندارد باشد .یک ULTتعریف
شده بر روی یک LWPکه توسط سیستم عامل مدیریت می شود و حالت های اجرا تعریف شده ای دارد که متعاقباً تعریف می
شود ،نگاشت می شود .یک LWPبه یک رشته هسته با یک مطابقت یک به یک در حالت های اجرا متصل است .بنابراین،
همزمانی و اجرا در سطح رشته هسته مدیریت می شود.
230
سیستم عامل های داخلی و اصول طراحی231.........................................................................................................................
عالوه بر این ،یک برنامه کاربردی از طریق یک رابط برنامه نویسی برنامه متشکل از تماس های سیستمی به سخت افزار
دسترسی دارد API .به کاربر اجازه می دهد تا از خدمات هسته برای انجام وظایف ممتاز از طرف فرآیند فراخوانی ،مانند خواندن
یا نوشتن یک فایل ،صدور فرمان کنترل به دستگاه ،ایجاد یک فرآیند یا رشته جدید ،تخصیص حافظه برای استفاده از فرآیند
استفاده کند ، .و غیره.
ساختار فرآیند
شکل 4.13به طور کلی ساختار فرآیند یک سیستم سنتی یونیکس را با سوالریس مقایسه می کند .در یک پیاده سازی معمولی
یونیکس ،ساختار فرآیند شامل شناسه فرآیند است .شناسه های کاربر؛ یک جدول ارسال سیگنال ،که هسته از آن برای تصمیم
گیری در هنگام ارسال سیگنال به یک فرآیند استفاده می کند .توصیف کننده های فایل ،که وضعیت فایل های مورد استفاده در
این فرآیند را توصیف می کند .یک نقشه حافظه ،که فضای آدرس را برای این فرآیند تعریف می کند .و یک ساختار حالت
پردازنده ،که شامل پشته هسته برای این فرآیند است .سوالریس این ساختار اصلی را حفظ می کند اما بلوک حالت پردازنده را با
لیستی از ساختارها که شامل یک بلوک داده برای هر LWPاست جایگزین می کند.
231
سیستم عامل های داخلی و اصول طراحی232.........................................................................................................................
-مقادیر ذخیره شده رجیسترهای سطح کاربر زمانی که LWPدر حال اجرا نیست
-پشته هسته برای این ،LWPکه شامل آرگومان های فراخوانی سیستم ،نتایج و کدهای خطا برای هر سطح تماس است.
اجرای رشته
شکل 4.14نمای ساده شده ای از هر دو حالت اجرای رشته را نشان می دهد .این حالت ها وضعیت اجرای هر رشته هسته و
LWPمحدود شده به آن را منعکس می کنند .همانطور که گفته شد ،برخی از رشته های هسته با LWPمرتبط نیستند.
همان نمودار اجرا اعمال می شود .ایالت ها به شرح زیر است:
-رایگان :منابع موضوع منتشر شده است و موضوع در انتظار حذف از ساختار داده رشته سیستم عامل است.
اگر نخی با اولویت باالتر یا به دلیل برش زمان ،از ONPROCبه RUNمنتقل شود .یک رشته در صورت مسدود شدن از
ONPROCبه SLEEPمنتقل می شود و باید منتظر یک رویداد برای بازگشت به حالت RUNباشد .در صورتی که
threadیک تماس سیستمی را فراخوانی کند مسدود می شود و باید منتظر انجام سرویس سیستم باشد .یک رشته در صورتی
که فرآیند آن متوقف شود وارد حالت STOPمی شود .این ممکن است برای اهداف اشکال زدایی انجام شود.
اکثر سیستم عامل ها شامل دو شکل اساسی از فعالیت های همزمان هستند :فرآیندها و وقفه ها .فرآیندها یا رشتهها با یکدیگر
همکاری میکنند و استفاده از ساختارهای داده مشترک را با استفاده از انواع اولیهای مدیریت میکنند که محرومیت متقابل را
اعمال میکنند فقط یک فرآیند در هر زمان میتواند کد خاصی را اجرا کند یا به دادههای خاصی دسترسی داشته باشد و اجرای
آنها را همگامسازی میکند .وقفه ها با جلوگیری از مدیریت آنها برای یک دوره زمانی هماهنگ می شوند .سوالریس این دو
مفهوم را در یک مدل واحد ،یعنی رشتههای هسته و مکانیسمهای زمانبندی و اجرای رشتههای هسته ،یکی میکند .برای انجام
این کار ،وقفه ها به رشته های هسته تبدیل می شوند.
انگیزه تبدیل وقفه ها به رشته ها کاهش سربار است .کنترل کننده های وقفه اغلب داده های به اشتراک گذاشته شده توسط
بقیه هسته را دستکاری می کنند .بنابراین ،در حالی که یک روال هسته ای که به چنین داده هایی دسترسی دارد در حال اجرا
است ،وقفه ها باید مسدود شوند ،حتی اگر بیشتر وقفه ها روی آن داده ها تأثیری نداشته باشند .به طور معمول ،روش انجام این
کار به این صورت است که روتین سطح اولویت وقفه را باالتر برای مسدود کردن وقفه ها تنظیم می کند و سپس پس از تکمیل
دسترسی ،سطح اولویت را کاهش می دهد .این عملیات زمان بر است .مشکل در یک سیستم چند پردازنده ای بزرگتر می شود.
هسته باید از اشیاء بیشتری محافظت کند و ممکن است نیاز به مسدود کردن وقفه ها در همه پردازنده ها باشد.
Solaris .1از مجموعه ای از رشته های هسته برای مدیریت وقفه ها استفاده می کند .مانند هر رشته هسته ،یک رشته وقفه
دارای شناسه ،اولویت ،زمینه و پشته خاص خود است.
.2هسته دسترسی به ساختارهای داده را کنترل میکند و با استفاده از وقفهها ،بین رشتههای وقفه ،از نوع مورد بحث در فصل
،5همگامسازی میکند.
.3رشته های وقفه دارای اولویت های باالتری نسبت به سایر انواع رشته های هسته هستند.
233
سیستم عامل های داخلی و اصول طراحی234.........................................................................................................................
هنگامی که یک وقفه رخ می دهد ،به یک پردازنده خاص تحویل داده می شود و رشته ای که روی آن پردازنده اجرا می شد پین
می شود .یک رشته پین شده نمی تواند به پردازنده دیگری منتقل شود و زمینه آن حفظ می شود .به سادگی تا زمانی که وقفه
پردازش نشود به حالت تعلیق در می آید .سپس پردازنده شروع به اجرای یک رشته وقفه می کند .مجموعهای از رشتههای وقفه
غیرفعال شده در دسترس است ،بنابراین نیازی به ایجاد رشته جدید نیست .سپس رشته وقفه برای مدیریت وقفه اجرا می شود.
اگر روال کنترل کننده نیاز به دسترسی به ساختار داده ای داشته باشد که در حال حاضر برای استفاده توسط رشته اجرایی
دیگری قفل شده است ،رشته وقفه باید منتظر دسترسی به آن ساختار داده باشد .یک رشته وقفه فقط می تواند توسط رشته
وقفه دیگری با اولویت باالتر پیشی بگیرد.
تجربه با رشتههای وقفه سوالریس نشان میدهد که این رویکرد نسبت به استراتژی مدیریت وقفه سنتی KLEI95عملکرد
برتری را ارائه میدهد.
وظایف لینوکس
یک فرآیند یا وظیفه در لینوکس با ساختار داده task_structنشان داده می شود .در ساختار داده task_structحاوی
اطالعات در تعدادی دسته است:
:State-وضعیت اجرای فرآیند در حال اجرا ،آماده ،تعلیق ،متوقف شده ،زامبی .این در ادامه توضیح داده شده است.
-اطالعات زمانبندی :اطالعات مورد نیاز لینوکس برای زمانبندی فرآیندها .یک فرآیند می تواند عادی یا واقعی باشد و دارای
اولویت باشد .فرآیندهای بالدرنگ قبل از فرآیندهای عادی برنامه ریزی می شوند و در هر دسته می توان از اولویت های نسبی
استفاده کرد .شمارنده مدت زمان مجاز اجرای یک فرآیند را ردیابی می کند.
-شناسه ها :هر فرآیند یک شناسه فرآیند منحصر به فرد دارد و همچنین دارای شناسه های کاربر و گروه است .شناسه گروه
برای تخصیص امتیاز دسترسی به منابع به گروهی از فرآیندها استفاده می شود.
-ارتباطات بین فرآیندی :لینوکس از مکانیسم های IPCموجود در UNIX SVR4که در فصل 6توضیح داده شده است،
پشتیبانی می کند.
-پیوندها :هر فرآیند شامل پیوندی به فرآیند والدین خود ،پیوندهایی به خواهر و برادرانش فرآیندهایی با همان والدین و
پیوندهایی به همه فرزندانش است.
234
سیستم عامل های داخلی و اصول طراحی235.........................................................................................................................
-زمانها و زمانسنجها :شامل زمان ایجاد فرآیند و مقدار زمان پردازشگر که تاکنون توسط فرآیند مصرف شده است .یک فرآیند
ممکن است یک یا چند تایمر بازه ای را نیز مرتبط کرده باشد .یک فرآیند یک تایمر بازه ای را با استفاده از یک فراخوانی
سیستمی تعریف می کند .در نتیجه ،هنگامی که تایمر منقضی می شود ،سیگنالی به فرآیند ارسال می شود .یک تایمر ممکن
است یک بار مصرف یا دوره ای باشد.
:File system-شامل اشاره گر به هر فایلی که توسط این فرآیند باز می شود ،و همچنین نشانگرهایی به دایرکتوری های فعلی
و ریشه برای این فرآیند می باشد.
-فضای آدرس :فضای آدرس مجازی اختصاص داده شده به این فرآیند را تعریف می کند
-زمینه خاص پردازنده :رجیسترها و اطالعات پشته ای که زمینه این فرآیند را تشکیل می دهند
شکل 4.15حالت های اجرای یک فرآیند را نشان می دهد .این موارد به شرح زیر است:
:Running-این مقدار حالت مربوط به دو حالت است .یک فرآیند در حال اجرا یا در حال اجرا است یا آماده اجرا است.
:Interruptible-این یک حالت مسدود شده است که در آن فرآیند منتظر یک رویداد است ،مانند پایان یک عملیات ،I/Oدر
دسترس بودن یک منبع ،یا سیگنالی از یک فرآیند دیگر.
:Uninterruptible-این حالت مسدود شده دیگری است .تفاوت بین این حالت و حالت وقفه در این است که در یک حالت
بدون وقفه ،یک فرآیند مستقیماً در شرایط سخت افزاری منتظر است و بنابراین هیچ سیگنالی را کنترل نمی کند.
235
سیستم عامل های داخلی و اصول طراحی236.........................................................................................................................
-متوقف شد :این فرآیند متوقف شده است و تنها با اقدام مثبت از یک فرآیند دیگر می تواند از سر گرفته شود .به عنوان مثال،
فرآیندی که در حال رفع اشکال است را می توان در حالت Stopقرار داد.
:Zombie-فرآیند خاتمه یافته است ،اما بنا به دالیلی ،هنوز باید ساختار وظیفه خود را در جدول پردازش داشته باشد.
موضوعات لینوکس
سیستمهای یونیکس سنتی از یک رشته اجرا در هر فرآیند پشتیبانی میکنند ،در حالی که سیستمهای یونیکس مدرن معموالً
از چندین رشته در سطح هسته در هر فرآیند پشتیبانی میکنند .همانند سیستمهای سنتی یونیکس ،نسخههای قدیمیتر هسته
لینوکس هیچ پشتیبانی از multithreadingرا ارائه نمیکردند.
در عوض ،برنامهها باید با مجموعهای از توابع کتابخانه در سطح کاربر نوشته شوند ،که محبوبترین آنها به عنوان کتابخانههای
pthreadرشته 20POSIXشناخته میشوند ،و همه رشتهها در یک فرآیند در سطح هسته نگاشت میشوند .ما دیدیم که
نسخه های مدرن یونیکس رشته های سطح هسته را ارائه می دهند .لینوکس یک راه حل منحصر به فرد ارائه می دهد که
تمایزی بین رشته ها و فرآیندها تشخیص نمی دهد .با استفاده از مکانیزمی شبیه به فرآیندهای سبک سوالریس ،رشتههای
سطح کاربر به فرآیندهای سطح هسته نگاشت میشوند.
چندین رشته در سطح کاربر که یک فرآیند در سطح کاربر را تشکیل می دهند در فرآیندهای سطح هسته لینوکس که شناسه
گروه یکسانی دارند نگاشت می شوند .این فرآیندها را قادر میسازد تا منابعی مانند فایلها و حافظه را به اشتراک بگذارند و از
نیاز به سوئیچ زمینه در زمانی که زمانبند در میان فرآیندهای یک گروه جابجا میشود ،اجتناب کنند.
یک فرآیند جدید در لینوکس با کپی کردن ویژگی های فرآیند فعلی ایجاد می شود .یک فرآیند جدید را می توان شبیه سازی
کرد تا منابعی مانند فایل ها ،کنترل کننده های سیگنال و حافظه مجازی را به اشتراک بگذارد .هنگامی که دو فرآیند حافظه
مجازی یکسانی را به اشتراک میگذارند ،به عنوان رشتههایی در یک فرآیند واحد عمل میکنند .با این حال ،هیچ نوع ساختار
داده جداگانه ای برای یک رشته تعریف نشده است .به جای دستور forkمعمول ،فرآیندها در لینوکس با استفاده از دستور
cloneایجاد می شوند .این دستور شامل مجموعه ای از پرچم ها به عنوان آرگومان است .فراخوانی سیستمی forkسنتی
توسط لینوکس به عنوان یک فراخوانی سیستمی کلون با پاک شدن تمام پرچمهای کلون پیادهسازی میشود.
( 8POSIX 20سیستمهای عامل قابل حمل مبتنی بر یونیکس) یک استاندارد API IEEEاست که شامل یک استاندارد برای یک APIرشتهای است .کتابخانه هایی که
استاندارد POSIX Threadsرا پیاده سازی می کنند اغلب Pthreadنامیده می شوند . Pthreadها بیشتر در سیستم های POSIXیونیکس مانند لینوکس و سوالریس
استفاده می شوند ،اما پیاده سازی های مایکروسافت ویندوز نیز وجود دارد.
236
سیستم عامل های داخلی و اصول طراحی237.........................................................................................................................
:CLONE_THREAD-این فرآیند را در همان گروه رشته والد قرار می دهد .اگر این پرچم درست باشد ،به طور ضمنی
CLONE_PARENTرا اجرا میکند.
:CLONE_VM-فضای آدرس را به اشتراک می گذارد توصیف کننده حافظه و تمام جداول صفحه
هنگامی که هسته لینوکس از یک فرآیند به فرآیند دیگر سوئیچ میکند ،بررسی میکند که آیا آدرس دایرکتوری صفحه فرآیند
جاری با آدرس فرآیند برنامهریزی شده یکسان است یا خیر .اگر چنین هستند ،پس فضای آدرس یکسانی را به اشتراک می
گذارند ،به طوری که یک سوئیچ زمینه اساساً فقط یک پرش از یک مکان کد به مکان دیگر کد است.
اگرچه فرآیندهای شبیهسازی شده که بخشی از یک گروه فرآیند هستند ،میتوانند فضای حافظه یکسانی را به اشتراک بگذارند،
اما نمیتوانند پشتههای کاربر مشابهی را به اشتراک بگذارند .بنابراین فراخوانی cloneفضاهای پشته جداگانه ای برای هر فرآیند
ایجاد می کند.
با هر فرآیند در لینوکس مجموعه ای از فضاهای نام مرتبط است .فضای نام یک فرآیند یا چندین فرآیند که فضای نام یکسانی
دارند را قادر میسازد تا دیدگاه متفاوتی از سیستم نسبت به سایر فرآیندهایی که فضای نام مرتبط دیگری دارند داشته باشند.
یکی از اهداف کلی فضاهای نام ،پشتیبانی از اجرای گروههای کنترل ،cgroupsکه قبالً کانتینرها نامیده میشد ،ابزاری برای
مجازیسازی سبک و همچنین اهداف دیگر است که فرآیند یا گروهی از فرآیندها را با این توهم فراهم میکند که فقط پردازش
های روی سیستم بنابراین cgroup ،شکلی از ماشین مجازی است .در حال حاضر شش فضای نام در لینوکس وجود دارد:
uts ،ipc ،net ،pid ،mntو .user
فضاهای نام توسط فراخوانی سیستم cloneایجاد می شود که به عنوان پارامتر یکی از شش پرچم کلون فضای نام
،CLONE_NEWIPC ،CLONE_NEWNET ،CLONE_NEWPID ،CLONE_NEWNS
،CLONE_NEWUTSو _CLONEایجاد می شود.
237
سیستم عامل های داخلی و اصول طراحی238.........................................................................................................................
کاربر جدید .یک فرآیند همچنین می تواند یک فضای نام با فراخوانی سیستم unshareبا یکی از این پرچم ها ایجاد کند.
برخالف ،cloneدر چنین حالتی فرآیندی ایجاد نمی شود .فقط یک فضای نام جدید ایجاد می شود که به فرآیند فراخوانی
متصل می شود.
MOUNT NAMESPACEیک فضای نام mountیک نمای خاص از سلسله مراتب سیستم فایل را به فرآیند ارائه می
دهد ،به طوری که دو فرآیند با فضاهای نام mountمختلف ،سلسله مراتب سیستم فایل متفاوتی را مشاهده می کنند .تمام
عملیات فایلی که یک فرآیند استفاده می کند فقط برای سیستم فایل قابل مشاهده برای پردازش اعمال می شود.
فضای نام UTSفضای نام UTSاشتراک گذاری زمانی یونیکس به فراخوانی سیستم لینوکس unnameمربوط می شود.
فراخوانی unameنام و اطالعات مربوط به هسته فعلی را باز می گرداند ،از جمله ،nodenameکه نام سیستم در برخی از
شبکه های پیاده سازی تعریف شده است .و نام دامنه که نام دامنه NISاست NIS .سرویس اطالعات شبکه یک طرح استاندارد
است که در تمام سیستم های اصلی یونیکس و یونیکس مانند استفاده می شود .این به گروهی از ماشینها در دامنه NISاجازه
میدهد تا مجموعه مشترکی از فایلهای پیکربندی را به اشتراک بگذارند .این به مدیر سیستم اجازه میدهد تا سیستمهای
سرویس گیرنده NISرا با حداقل دادههای پیکربندی راهاندازی کند و دادههای پیکربندی را از یک مکان اضافه ،حذف یا تغییر
دهد .با فضای نام ،UTSپارامترهای اولیه و پیکربندی می توانند برای فرآیندهای مختلف در یک سیستم متفاوت باشند.
IPC NAMESPACEیک فضای نام IPCمنابع ارتباطی بین فرآیندی خاصی IPCمانند سمافورها را جدا می کند.
بنابراین ،مکانیسم های همزمانی را می توان توسط برنامه نویس به کار گرفت که IPCرا در بین فرآیندهایی که فضای نام IPC
یکسانی دارند ،فعال می کند.
PID NAMESPACEفضاهای نام PIDفضای شناسه فرآیند را ایزوله می کنند ،به طوری که فرآیندها در فضاهای نام
مختلف PIDمی توانند PIDیکسانی داشته باشند .این ویژگی برای ،Checkpoint/Restore In Userspace CRIU
یک ابزار نرم افزار لینوکس استفاده می شود .با استفاده از این ابزار ،میتوانید یک برنامه در حال اجرا یا بخشی از آن را فریز
کنید و آن را به عنوان مجموعهای از فایلها به یک هارد دیسک چک کنید .سپس می توانید از فایل ها برای بازیابی و اجرای
برنامه از نقطه انجماد استفاده کنید .یکی از ویژگی های متمایز پروژه CRIUاین است که عمدتاً در فضای کاربر پیاده سازی
می شود.
NETWORK NAMESPACEفضاهای نام شبکه جداسازی منابع سیستم مرتبط با شبکه را فراهم می کنند .بنابراین،
هر فضای نام شبکه دارای دستگاه های شبکه ،آدرس های ،IPجداول مسیریابی ،IPشماره پورت و غیره است .این فضاهای نام
تمام دسترسی به منابع شبکه را مجازی می کنند و به هر cgroupاجازه می دهند به شبکه مورد نیاز خود دسترسی داشته
238
سیستم عامل های داخلی و اصول طراحی239.........................................................................................................................
باشند اما نه بیشتر .در هر زمان یک دستگاه شبکه فقط به یک فضای نام شبکه تعلق دارد .همچنین ،یک سوکت می تواند تنها
به یک فضای نام تعلق داشته باشد.
USER NAMESPACEفضاهای نام کاربری محفظهای با مجموعه UIDهای خاص خود ،کامالً مجزا از موارد موجود در
والد ،ارائه میکنند .بنابراین هنگامی که یک فرآیند یک فرآیند جدید را شبیه سازی می کند ،می تواند یک فضای نام کاربری
جدید ،و همچنین یک فضای نام PIDجدید و همه فضاهای نام دیگر به آن اختصاص دهد .فرآیند شبیهسازیشده میتواند به
همه منابع فرآیند والد یا زیرمجموعهای از منابع و امتیازات والد دسترسی و امتیازاتی داشته باشد.
قبل از بحث در مورد جزئیات رویکرد Androidبرای مدیریت پردازش و رشته ،باید مفاهیم Androidبرنامهها و فعالیتها را
شرح دهیم.
اپلیکیشن اندروید نرم افزاری است که یک اپلیکیشن را پیاده سازی می کند .هر برنامه Androidاز یک یا چند نمونه از یک یا
چند نوع از چهار نوع مؤلفه برنامه تشکیل شده است .هر مؤلفه نقش مشخصی در رفتار کلی برنامه ایفا می کند و هر مؤلفه می
تواند به صورت جداگانه در داخل برنامه و حتی سایر برنامه ها فعال شود .در زیر چهار نوع جزء ذکر شده است:
-فعالیت ها :یک فعالیت مربوط به یک صفحه نمایش است که به عنوان رابط کاربری قابل مشاهده است .به عنوان مثال ،یک
برنامه ایمیل ممکن است یک فعالیت داشته باشد که لیستی از ایمیل های جدید را نشان می دهد ،فعالیت دیگری برای نوشتن
یک ایمیل ،و فعالیت دیگری برای خواندن ایمیل ها داشته باشد .اگرچه این فعالیت ها با هم کار می کنند تا یک تجربه کاربری
منسجم را در برنامه ایمیل ایجاد کنند ،اما هر یک مستقل از دیگران است .اندروید بین فعالیت های داخلی و صادراتی تمایز قائل
می شود .برنامههای دیگر ممکن است فعالیتهای صادراتی را شروع کنند ،که معموالً شامل صفحه اصلی برنامه است .با این
حال ،برنامه های دیگر نمی توانند فعالیت های داخلی را شروع کنند .برای مثال ،یک برنامه دوربین میتواند فعالیت را در برنامه
ایمیلی که نامههای جدید میسازد ،شروع کند تا کاربر بتواند یک عکس را به اشتراک بگذارد.
-خدمات :سرویسها معموالً برای انجام عملیات پسزمینهای استفاده میشوند که اتمام آن زمان قابلتوجهی است .این امر
پاسخگویی سریعتر را برای رشته اصلی معروف به رشته UIیک برنامه ،که کاربر به طور مستقیم با آن در تعامل است ،تضمین
میکند .به عنوان مثال ،یک سرویس ممکن است رشته یا فرآیندی برای پخش موسیقی در پسزمینه در حالی که کاربر در
برنامه دیگری است ایجاد کند ،یا ممکن است رشتهای برای واکشی دادهها از طریق شبکه بدون مسدود کردن تعامل کاربر با یک
فعالیت ایجاد کند .یک سرویس ممکن است توسط یک برنامه فراخوانی شود .عالوه بر این ،سرویسهای سیستمی وجود دارند
239
سیستم عامل های داخلی و اصول طراحی240.........................................................................................................................
که در تمام طول عمر سیستم اندروید اجرا میشوند ،مانند سرویسهای Battery ،Power Managerو .Vibratorاین
سرویس های سیستم رشته هایی را در داخل فرآیند سرور سیستم ایجاد می کنند.
-ارائه دهندگان محتوا :یک ارائه دهنده محتوا به عنوان یک رابط برای داده های برنامه عمل می کند که می تواند توسط برنامه
استفاده شود .یک دسته از داده های مدیریت شده ،داده های خصوصی است که فقط توسط برنامه های کاربردی حاوی ارائه
دهنده محتوا استفاده می شود .به عنوان مثال ،برنامه NotePadاز یک ارائه دهنده محتوا برای ذخیره یادداشت ها استفاده می
کند .دسته دیگر داده های مشترک است که توسط چندین برنامه قابل دسترسی است .این دسته شامل داده های ذخیره شده
در سیستم های فایل ،پایگاه داده ،SQLiteدر وب یا هر مکان ذخیره سازی دائمی دیگری است که برنامه شما می تواند به آن
دسترسی داشته باشد.
-گیرنده های پخش :یک گیرنده پخش به اعالن های پخش در سراسر سیستم پاسخ می دهد .یک پخش می تواند از برنامه
دیگری سرچشمه بگیرد ،مثالً به برنامه های دیگر اطالع دهد که برخی از داده ها در دستگاه بارگیری شده و برای استفاده در
دسترس است ،یا از سیستم ،برای مثال ،هشدار کم شدن باتری.
هر برنامه بر روی ماشین مجازی اختصاصی خود و فرآیند واحد خود اجرا می شود که برنامه و ماشین مجازی آن را در بر می
گیرد شکل .4.16این رویکرد که به آن مدل sandboxingگفته می شود ،هر برنامه کاربردی را جدا می کند .بنابراین ،یک
برنامه بدون اعطای مجوز نمی تواند به منابع دیگری دسترسی داشته باشد .هر برنامه به عنوان یک کاربر لینوکس جداگانه با
شناسه کاربری منحصر به فرد خود در نظر گرفته می شود که برای تنظیم مجوزهای فایل استفاده می شود.
فعالیت ها
Activityجزء برنامه ای است که صفحه ای را فراهم می کند که کاربران می توانند برای انجام کاری با آن تعامل داشته باشند،
مانند شماره گیری تلفن ،گرفتن عکس ،ارسال ایمیل یا مشاهده نقشه .به هر فعالیت پنجره ای داده می شود که در آن رابط
کاربری خود را ترسیم می کند .پنجره معموالً صفحه را پر می کند ،اما ممکن است کوچکتر از صفحه نمایش باشد و در باالی
پنجره های دیگر شناور باشد.
همانطور که ذکر شد ،یک برنامه کاربردی ممکن است شامل چندین فعالیت باشد .هنگامی که یک برنامه در حال اجرا است ،یک
فعالیت در پیش زمینه است و این فعالیت است که با کاربر تعامل دارد .فعالیت ها به ترتیب باز شدن هر فعالیت در یک پشته
آخرین در اول پشت پشته مرتب می شوند .اگر کاربر به فعالیت دیگری در برنامه سوئیچ کند ،فعالیت جدید ایجاد میشود و به
باالی پشته پشتی فشار داده میشود ،در حالی که فعالیت پیشزمینه قبلی به دومین مورد روی پشته برای این برنامه تبدیل
240
سیستم عامل های داخلی و اصول طراحی241.........................................................................................................................
میشود .این فرآیند را می توان چندین بار تکرار کرد و به پشته اضافه کرد .کاربر می تواند با فشار دادن دکمه بازگشت یا ویژگی
رابط مشابه ،از آخرین فعالیت پیش زمینه نسخه پشتیبان تهیه کند.
حالت های فعالیت شکل 4.17نمای ساده شده ای از نمودار انتقال حالت یک فعالیت را ارائه می دهد .به خاطر داشته باشید که
ممکن است چندین فعالیت در برنامه وجود داشته باشد که هر کدام در نقطه خاص خود در نمودار انتقال حالت هستند .هنگامی
که یک اکتیویتی جدید راه اندازی می شود ،نرم افزار کاربردی یک سری فراخوانی سیستم را با Activity Managerانجام
می دهد شکل onCreate :2.20تنظیمات استاتیک اکتیویتی را انجام می دهد ،از جمله هرگونه مقداردهی اولیه ساختار داده.
onStartفعالیت را برای کاربر روی صفحه قابل مشاهده می کند onResume .کنترل را به اکتیویتی منتقل می کند تا
ورودی کاربر به اکتیویتی برود .در این مرحله فعالیت در حالت Resumedاست .این به عنوان طول عمر پیش زمینه فعالیت
شناخته می شود .در طول این مدت ،فعالیت در مقابل همه فعالیتهای دیگر روی صفحه قرار دارد و دارای تمرکز ورودی کاربر
است.
یک اقدام کاربر ممکن است فعالیت دیگری را در برنامه فراخوانی کند .به عنوان مثال ،در طول اجرای برنامه ایمیل ،زمانی که
کاربر یک ایمیل را انتخاب می کند ،یک فعالیت جدید برای مشاهده آن ایمیل باز می شود .سیستم به چنین فعالیتی با
فراخوانی سیستم onPauseپاسخ میدهد ،که فعالیت در حال اجرا را روی پشته قرار میدهد و آن را در حالت Pausedقرار
میدهد .سپس برنامه یک اکتیویتی جدید ایجاد می کند که وارد حالت Resumedمی شود.
فرآیند اختصاصی
کاربرد
فعالیت سرویس
ماشین مجازی
اختصاصی
241
سیستم عامل های داخلی و اصول طراحی242.........................................................................................................................
در هر زمانی ،یک کاربر ممکن است با استفاده از دکمه برگشت ،بستن یک پنجره ،یا هر اقدام دیگری مرتبط با این فعالیت،
فعالیت در حال اجرا را خاتمه دهد .سپس برنامه برای توقف فعالیت 0onStop ،را فراخوانی می کند .سپس برنامه اکتیویتی را
که در باالی پشته قرار دارد نمایش می دهد و آن را از سر می گیرد .حالت های Resumedو Pausedبا هم طول عمر قابل
مشاهده فعالیت را تشکیل می دهند .در طول این مدت ،کاربر می تواند فعالیت را روی صفحه ببیند و با آن تعامل داشته باشد.
اگر کاربر یک برنامه را ترک کند تا به برنامه دیگر برود ،مثالً با رفتن به صفحه اصلی ،فعالیت فعلی در حال اجرا متوقف شده و
سپس متوقف می شود.
مکث
کاربر به سمت فعالیت
حرکت می کند
توقف
242
سیستم عامل های داخلی و اصول طراحی243.........................................................................................................................
هنگامی که کاربر این برنامه را از سر می گیرد ،فعالیت متوقف شده ،که در باالی پشته پشتی قرار دارد ،دوباره راه اندازی می
شود و به فعالیت پیش زمینه برای برنامه تبدیل می شود.
کشتن یک برنامه اگر موارد زیادی در حال انجام باشد ،ممکن است سیستم برای حفظ پاسخگویی نیاز به بازیابی بخشی از
حافظه اصلی داشته باشد .در این صورت ،سیستم با از بین بردن یک یا چند فعالیت در یک برنامه و همچنین خاتمه فرآیند آن
برنامه ،حافظه را بازیابی می کند .این کار حافظه مورد استفاده برای مدیریت فرآیند و همچنین حافظه برای مدیریت فعالیت
هایی که کشته شده اند را آزاد می کند .با این حال ،خود برنامه هنوز وجود دارد .کاربر از وضعیت تغییر یافته آن بی اطالع است.
اگر کاربر به آن برنامه برگردد ،الزم است سیستم هر گونه فعالیت وقفه شده را در حین فراخوانی مجدداً ایجاد کند.
سیستم برنامهها را به سبک پشتهگرا میکشد :بنابراین ابتدا برنامههایی که اخیراً استفاده شدهاند را از بین میبرد .برنامه هایی که
دارای سرویس های پیش زمینه هستند بسیار بعید است که از بین بروند.
تخصیص پیشفرض فرآیندها و رشتهها به یک برنامه ،یک فرآیند و یک رشته است .همه اجزای برنامه بر روی یک رشته از
فرآیند واحد برای آن برنامه اجرا می شوند .برای جلوگیری از کند شدن رابط کاربری زمانی که عملیات کند و/یا مسدود کردن
در یک جزء اتفاق میافتد ،توسعهدهنده میتواند چندین رشته را در یک فرآیند و/یا چندین فرآیند را در یک برنامه ایجاد کند.
در هر صورت ،تمام فرآیندها و رشته های آنها برای یک برنامه خاص در یک ماشین مجازی اجرا می شوند.
به منظور بازیابی حافظه در سیستمی که به شدت بارگذاری می شود ،سیستم ممکن است یک یا چند فرآیند را از بین ببرد.
همانطور که در بخش قبل بحث شد ،هنگامی که یک فرآیند از بین می رود ،یک یا چند مورد از فعالیت های پشتیبانی شده
توسط آن فرآیند نیز از بین می رود .سلسله مراتب تقدم برای تعیین اینکه کدام فرآیند یا فرآیندها برای بازیابی منابع مورد نیاز
از بین می روند ،استفاده می شود .هر فرآیند در هر زمان معین در سطح خاصی از سلسله مراتب وجود دارد و فرآیندها ابتدا با
کمترین اولویت از بین می روند .سطوح سلسله مراتب به ترتیب تقدم نزولی به شرح زیر است:
-فرآیند پیش زمینه :فرآیندی که برای کاری که کاربر در حال حاضر انجام می دهد مورد نیاز است .بیش از یک فرآیند در یک
زمان می تواند یک فرآیند پیش زمینه باشد .به عنوان مثال ،هم فرآیندی که میزبان فعالیتی است که کاربر با آن در تعامل است
فعالیت در حالت Resumedو هم فرآیندی که میزبان سرویسی است که به فعالیتی که کاربر با آن در تعامل است ،میزبانی می
کند ،فرآیندهای پیش زمینه هستند.
-فرآیند قابل مشاهده :فرآیندی که میزبان مؤلفه ای است که در پیش زمینه نیست ،اما همچنان برای کاربر قابل مشاهده است.
243
سیستم عامل های داخلی و اصول طراحی244.........................................................................................................................
-فرآیند سرویس :فرآیندی که سرویسی را اجرا می کند که در هیچ یک از دسته های باالتر قرار نمی گیرد .به عنوان مثال می
توان به پخش موسیقی در پس زمینه یا بارگیری داده ها در شبکه اشاره کرد.
-فرآیند خالی :فرآیندی که هیچ جزء برنامه فعالی را در خود جای نمی دهد .تنها دلیل زنده نگه داشتن این نوع فرآیند برای
اهداف کش است ،برای بهبود زمان راه اندازی دفعه بعد که یک مؤلفه باید در آن اجرا شود.
همانطور که در فصل 2ذکر شد Mac OS X Grand Central Dispatch GCD ،مجموعه ای از رشته های موجود را
فراهم می کند .طراحان میتوانند بخشهایی از برنامهها را که بلوکها نامیده میشوند ،تعیین کنند که میتوانند به طور مستقل
ارسال شوند و همزمان اجرا شوند .سیستم عامل تا حد امکان همزمانی را بر اساس تعداد هسته های موجود و ظرفیت رشته
سیستم فراهم می کند .اگرچه سایر سیستمعاملها از Thread Poolاستفاده کردهاند GCD ،بهبود کیفی را در سهولت
استفاده و کارایی ایجاد میکند.
بلوک یک پسوند ساده برای Cیا زبان های دیگر مانند ++Cاست .هدف از تعریف یک بلوک ،تعریف یک واحد کار مستقل از
جمله کد به اضافه داده است .در اینجا یک مثال ساده از تعریف بلوک آورده شده است:
یک بلوک در ابتدای تابع با یک حلقه نشان داده می شود که در براکت های فرفری محصور شده است .تعریف بلوک باال xرا به
عنوان راهی برای فراخوانی تابع تعریف می کند ،به طوری که با فراخوانی تابع xکلمات hello worldرا چاپ می کند.
بلوکها برنامهنویس را قادر میسازند تا توابع پیچیده را همراه با آرگومانها و دادههایشان کپسوله کند ،به طوری که به راحتی
بتوان به آنها ارجاع داد و در یک برنامه ،بسیار شبیه به یک متغیر ،منتقل کرد .به صورت نمادین:
بلوک ها با استفاده از صف ها برنامه ریزی و ارسال می شوند .این برنامه از صف های سیستم ارائه شده توسط GCDاستفاده
می کند و همچنین ممکن است صف های خصوصی ایجاد کند .بلوک ها در یک صف قرار می گیرند که در طول اجرای برنامه با
آنها مواجه می شوند .سپس GCDاز این صفها برای توصیف همزمانی ،سریالسازی و تماسها استفاده میکند .صف ها
ساختارهای داده فضای کاربر سبک وزن هستند که به طور کلی آنها را بسیار کارآمدتر از مدیریت دستی رشته ها و قفل ها می
کند .به عنوان مثال ،این صف دارای سه بلوک است:
244
سیستم عامل های داخلی و اصول طراحی245.........................................................................................................................
بسته به صف و نحوه تعریف آن GCD ،این بلوک ها را یا به عنوان فعالیت های بالقوه همزمان یا به عنوان فعالیت های سریالی
در نظر می گیرد .در هر صورت ،بلوکها بر اساس اول به اول ارسال میشوند .اگر این یک صف همزمان باشد ،توزیع کننده به
محض اینکه یکی در دسترس باشد F ،را به یک رشته اختصاص می دهد ،سپس ،Gسپس .Hاگر این یک صف سریال باشد،
توزیع کننده Fرا به یک رشته اختصاص می دهد ،و سپس Gرا به aاختصاص می دهد .بعد از اینکه Fکامل شد رشته کنید.
استفاده از رشته های از پیش تعریف شده باعث صرفه جویی در هزینه ایجاد یک رشته جدید برای هر درخواست می شود و
تاخیر مرتبط با پردازش یک بلوک را کاهش می دهد Thread Pools .بهطور خودکار توسط سیستم اندازهگیری میشوند تا
عملکرد برنامهها را با استفاده از GCDبه حداکثر برسانند و در عین حال تعداد رشتههای بیکار یا رقیب را به حداقل برسانند.
عالوه بر برنامهریزی مستقیم بلوکها ،برنامه میتواند یک بلوک و صف را با منبع رویداد ،مانند تایمر ،سوکت شبکه یا توصیفگر
فایل مرتبط کند .هر بار که منبع رویدادی را صادر می کند ،اگر از قبل اجرا نشده باشد ،بلوک برنامه ریزی می شود .این امکان
پاسخگویی سریع را بدون هزینه نظرسنجی یا "پارک کردن یک موضوع" در منبع رویداد فراهم می کند.
مثالی از SIRA09سهولت استفاده از GCDرا نشان می دهد .یک برنامه مبتنی بر سند با دکمه ای در نظر بگیرید که با
کلیک بر روی آن ،سند فعلی را تجزیه و تحلیل می کند و آمار جالبی در مورد آن نمایش می دهد .در حالت معمول ،این تجزیه
و تحلیل باید در کمتر از یک ثانیه اجرا شود ،بنابراین از کد زیر برای اتصال دکمه با یک عمل استفاده می شود:
خط اول بدنه تابع سند را تجزیه و تحلیل می کند ،خط دوم وضعیت داخلی برنامه را به روز می کند ،و خط سوم به برنامه می
گوید که نمای آمار باید به روز شود تا این وضعیت جدید را منعکس کند .این کد که از یک الگوی رایج پیروی می کند در رشته
245
سیستم عامل های داخلی و اصول طراحی246.........................................................................................................................
اصلی اجرا می شود .تا زمانی که تجزیه و تحلیل طوالنی نشود ،طراحی قابل قبول است ،زیرا پس از کلیک کاربر روی دکمه،
رشته اصلی برنامه باید ورودی کاربر را با بیشترین سرعت ممکن مدیریت کند تا بتواند به حلقه رویداد اصلی برگردد .اقدام بعدی
کاربر را پردازش کنید .اما اگر کاربر یک سند بسیار بزرگ یا پیچیده را باز کند ،مرحله تجزیه و تحلیل ممکن است زمان غیرقابل
قبولی طوالنی داشته باشد .یک توسعهدهنده ممکن است تمایلی به تغییر کد برای رویارویی با این رویداد بعید نداشته باشد ،که
ممکن است شامل اشیاء جهانی برنامه ،مدیریت رشته ،تماسهای برگشتی ،آرگومانبندی ،اشیاء زمینه ،متغیرهای جدید و غیره
باشد .اما با ،GCDیک افزودن ساده به کد نتیجه مطلوب را ایجاد می کند:
همه توابع در GCDبا _dispatchشروع می شوند .فراخوانی outer dispatch_ asyncوظیفه ای را در یک صف همزمان
جهانی قرار می دهد .این به سیستم عامل می گوید که بلوک را می توان به یک صف همزمان جداگانه ،خارج از صف اصلی ،و به
صورت موازی اجرا کرد .بنابراین ،موضوع اصلی اجرا به تاخیر نمی افتد .هنگامی که تابع تجزیه و تحلیل کامل شد ،فراخوانی
داخلی dispatch_asyncمواجه می شود .این به سیستم عامل هدایت می کند تا بلوک کد زیر را در انتهای صف اصلی قرار
دهد تا زمانی که به سر صف رسید اجرا شود .بنابراین با کار بسیار کم از طرف برنامه نویس ،نیاز مورد نظر برآورده می شود.
4.9خالصه
برخی از سیستم عامل ها مفاهیم فرآیند و رشته را متمایز می کنند ،اولی مربوط به مالکیت منابع و دومی مربوط به اجرای
برنامه است .این رویکرد ممکن است به بهبود کارایی و راحتی کدگذاری منجر شود .در یک سیستم چند رشته ای ،ممکن است
چندین رشته همزمان در یک فرآیند تعریف شوند .این ممکن است با استفاده از رشتههای سطح کاربر یا رشتههای سطح هسته
انجام شود .رشتههای سطح کاربر برای سیستم عامل ناشناخته هستند و توسط یک کتابخانه رشتهای که در فضای کاربر یک
فرآیند اجرا میشود ،ایجاد و مدیریت میشوند.
رشته های سطح کاربر بسیار کارآمد هستند زیرا برای تغییر از یک رشته به رشته دیگر نیازی به سوئیچ حالت نیست .با این
حال ،تنها یک رشته در سطح کاربر در یک فرآیند میتواند در یک زمان اجرا شود و اگر یک رشته مسدود شود ،کل فرآیند
مسدود میشود .رشتههای سطح کرنل رشتههایی در یک فرآیند هستند که توسط هسته نگهداری میشوند.
246
سیستم عامل های داخلی و اصول طراحی247.........................................................................................................................
از آنجایی که آنها توسط هسته شناسایی می شوند ،چندین رشته در یک فرآیند می توانند به صورت موازی روی یک چند
پردازنده اجرا شوند و مسدود شدن یک رشته کل فرآیند را مسدود نمی کند .با این حال ،یک سوئیچ حالت برای تغییر از یک
رشته به رشته دیگر مورد نیاز است.
4.10توصیه به خواندن
LEWI96و KLEI96مرورهای خوبی از مفاهیم رشته و بحث در مورد استراتژی های برنامه نویسی ارائه می دهند .اولی
بیشتر بر روی مفاهیم و دومی بیشتر بر برنامه نویسی تمرکز می کند ،اما هر دو پوشش مفیدی از هر دو موضوع را ارائه می
دهند PHAM96 .تسهیالت رشته ویندوز NTرا به طور عمیق مورد بحث قرار می دهد .پوشش خوب مفاهیم رشته های
یونیکس در ROBB04یافت می شود.
KLEI96کلیمان ،اس .شاه ،د .و اسمالدرز ،ب .برنامه نویسی با موضوعات .رودخانه فوقانی زین ،نیوجرسی :سالن پرنتیس،
.1996
.LEWI96 Lewis, B., and Berg, D. Threads Primerرودخانه فوقانی زین ،نیوجرسی :سالن پرنتیس.1996 ،
.PHAM96 Pham, T., and Garg, Pبرنامه نویسی چند رشته ای با ویندوز .NT
شرایط کلیدی
247
سیستم عامل های داخلی و اصول طراحی248.........................................................................................................................
بررسی سواالت
.4.1جدول 3.5عناصر معمولی موجود در بلوک کنترل فرآیند را برای یک سیستم عامل بدون رشته فهرست می کند .از این
میان ،کدام یک باید به یک بلوک کنترل رشته و کدام یک باید به بلوک کنترل فرآیند برای یک سیستم چند رشته ای تعلق
داشته باشد؟
.4.2دالیلی را فهرست کنید که چرا تغییر حالت بین رشته ها ممکن است ارزان تر از تغییر حالت بین فرآیندها باشد.
.4.3دو ویژگی مجزا و بالقوه مستقل که در مفهوم فرآیند گنجانده شده اند کدامند؟
.4.4چهار مثال کلی از استفاده از threadها در یک سیستم چند پردازشی تک کاربره را ذکر کنید.
.4.5چه منابعی معموالً توسط همه رشته های یک فرآیند به اشتراک گذاشته می شود؟
چالش ها و مسائل
.4.1اشاره شد که دو مزیت استفاده از رشته های متعدد در یک فرآیند این است که 1کار کمتری در ایجاد یک رشته جدید در
یک فرآیند موجود نسبت به ایجاد یک فرآیند جدید انجام می شود و 2ارتباط بین موضوعات در همان فرآیند .ساده شده است.
آیا این هم چنین است که یک تغییر حالت بین دو رشته در یک فرآیند ،کار کمتری نسبت به یک سوئیچ حالت بین دو رشته در
فرآیندهای مختلف دارد؟
.4.2در بحث ULTها در مقابل KLTها ،اشاره شد که یک نقطه ضعف ULTها این است که وقتی یک ULTیک
فراخوانی سیستمی را اجرا می کند ،نه تنها آن رشته مسدود می شود ،بلکه تمام رشته های درون فرآیند نیز مسدود می شوند.
چرا اینطور است؟
OS/2 .4.3یک سیستم عامل منسوخ شده برای رایانه های شخصی از IBMاست .در ،OS/2آنچه معموالً در مفهوم فرآیند
در سایر سیستمعاملها گنجانده میشود به سه نوع موجودیت مجزا تقسیم میشود :جلسه ،فرآیندها و رشتهها .یک جلسه
مجموعه ای از یک یا چند فرآیند مرتبط با یک رابط کاربری صفحه کلید ،صفحه نمایش و ماوس است .این جلسه یک برنامه
کاربردی تعاملی کاربر ،مانند یک برنامه پردازش کلمه یا یک صفحه گسترده را نشان می دهد .این مفهوم به کاربر رایانه شخصی
248
سیستم عامل های داخلی و اصول طراحی249.........................................................................................................................
اجازه می دهد تا بیش از یک برنامه را باز کند و هر یک یا چند پنجره را روی صفحه نمایش دهد .سیستم عامل باید ردیابی کند
که کدام پنجره و در نتیجه کدام جلسه فعال است ،به طوری که ورودی صفحه کلید و ماوس به جلسه مناسب هدایت شود .در
هر زمان ،یک جلسه در حالت پیش زمینه و سایر جلسات در حالت پس زمینه است .تمام ورودی های صفحه کلید و ماوس به
یکی از فرآیندهای جلسه پیش زمینه ،همانطور که توسط برنامه ها دیکته می شود ،هدایت می شود .هنگامی که یک جلسه در
حالت پیش زمینه است ،فرآیندی که خروجی ویدیو را انجام می دهد ،آن را مستقیماً به بافر ویدیوی سخت افزاری و از آنجا به
صفحه نمایش کاربر می فرستد.
وقتی جلسه به پسزمینه منتقل میشود ،بافر ویدیوی سختافزاری در بافر ویدیویی منطقی برای آن جلسه ذخیره میشود .در
حالی که یک جلسه در پس زمینه است ،اگر هر یک از رشته های هر یک از فرآیندهای آن جلسه اجرا شود و خروجی صفحه
نمایش تولید کند ،آن خروجی به بافر ویدیوی منطقی هدایت می شود .هنگامی که جلسه به پیش زمینه باز می گردد ،صفحه به
روز می شود تا محتوای فعلی بافر منطقی ویدئو را برای جلسه پیش زمینه جدید منعکس کند.
راهی برای کاهش تعداد مفاهیم مرتبط با فرآیند در OS/2از سه به دو وجود دارد .جلسات را حذف کنید و رابط کاربری صفحه
کلید ،ماوس و صفحه نمایش را با فرآیندها مرتبط کنید .بنابراین ،یک فرآیند در یک زمان در حالت پیش زمینه است .برای
ساختار بیشتر ،فرآیندها را می توان به رشته ها تقسیم کرد.
ب اگر با این اصالح پیش بروید ،منابع حافظه ،فایلها و غیره را کجا اختصاص میدهید :در سطح فرآیند یا رشته؟
.4.4محیطی را در نظر بگیرید که در آن یک نگاشت یک به یک بین رشتههای سطح کاربر و رشتههای سطح هسته وجود دارد
که به یک یا چند رشته در یک فرآیند اجازه میدهد تا تماسهای سیستمی را مسدود کنند در حالی که رشتههای دیگر به کار
خود ادامه میدهند .توضیح دهید که چرا این مدل میتواند برنامههای چند رشتهای را سریعتر از همتاهای تکرشتهای آنها در
یک کامپیوتر تکپردازنده اجرا کند.
.4.5اگر فرآیندی خارج شود و هنوز رشتههایی از آن فرآیند در حال اجرا باشد ،آیا به اجرای آن ادامه میدهند؟
.4.6سیستم عامل اصلی OS/390حول مفاهیم فضای آدرس و وظیفه ساختار یافته است .به طور کلی ،یک فضای آدرس
منفرد مربوط به یک برنامه واحد است و کم و بیش با یک فرآیند در سیستم عامل های دیگر مطابقت دارد .در یک فضای آدرس،
تعدادی از وظایف ممکن است تولید و اجرا شوند .این تقریباً با مفهوم multithreadingمطابقت دارد.
دو ساختار داده برای مدیریت این ساختار وظیفه کلیدی هستند .یک بلوک کنترل فضای آدرس ASCBحاوی اطالعاتی در
مورد فضای آدرس مورد نیاز OS/390است که آیا آن فضای آدرس در حال اجرا است یا خیر .اطالعات موجود در ASCB
249
سیستم عامل های داخلی و اصول طراحی250.........................................................................................................................
شامل اولویت ارسال ،حافظه حقیقی و مجازی تخصیص داده شده به این فضای آدرس ،تعداد وظایف آماده در این فضای آدرس و
اینکه آیا هر کدام از آنها جابجا شده است یا خیر .بلوک کنترل وظیفه TCBنشان دهنده یک برنامه کاربر در حال اجرا است.
این شامل اطالعات مورد نیاز برای مدیریت یک کار در فضای آدرس است ،از جمله اطالعات وضعیت پردازنده ،اشاره گر به برنامه
هایی که بخشی از این وظیفه هستند و وضعیت اجرای کار ASCB .ها ساختارهای جهانی هستند که در حافظه سیستم
نگهداری می شوند ،در حالی که TCBها ساختارهای محلی هستند که در فضای آدرس خود نگهداری می شوند .مزیت تقسیم
اطالعات کنترل به بخش های جهانی و محلی چیست؟
.4.7بسیاری از مشخصات زبان فعلی ،مانند Cو ،++Cبرای برنامه های چند رشته ای ناکافی هستند .همانطور که این مشکل
نشان می دهد ،این می تواند بر روی اجرارها و صحت کد تأثیر بگذارد .اعالنات و تعریف تابع زیر را در نظر بگیرید:
ب زبان Cفقط به اجرای تک رشته ای می پردازد .آیا استفاده از دو رشته موازی مشکل یا مشکالت احتمالی ایجاد می کند؟
.4.8اما برخی از اجرارهای بهینه سازی موجود از جمله ،gccکه تمایل به نسبتا محافظه کارانه دارند count_positivesرا به
چیزی شبیه به
250
سیستم عامل های داخلی و اصول طراحی251.........................................................................................................................
اگر رشته های Aو Bهمزمان اجرا شوند چه مشکل یا مشکل احتمالی با این نسخه اجرا شده برنامه رخ می دهد؟
در mainابتدا متغیری به نام mythreadرا اعالم می کنیم که دارای یک نوع pthread_tاست .این در اصل یک شناسه
برای یک موضوع است .بعد ،دستور ifیک رشته مرتبط با mythreadایجاد می کند .فراخوانی pthread_createصفر را در
هنگام موفقیت و یک مقدار غیر صفر را در هنگام شکست برمی گرداند .آرگومان سوم pthread_createنام تابعی است که
threadجدید هنگام شروع آن اجرا می کند .هنگامی که این thread_functionبرمی گردد ،رشته خاتمه می یابد .در ضمن
خود برنامه اصلی یک threadتعریف می کند ،به طوری که دو رشته در حال اجرا هستند .تابع pthread_joinبه thread
اصلی اجازه می دهد تا تا پایان رشته جدید صبر کند.
251
سیستم عامل های داخلی و اصول طراحی252.........................................................................................................................
آیا این همان خروجی است که انتظار دارید؟ اگر نه ،چه مشکلی پیش آمده است؟
.4.10مستندات سوالریس بیان می کند که یک ULTممکن است به رشته دیگری با همان اولویت تسلیم شود .آیا این امکان
وجود ندارد که یک رشته قابل اجرا با اولویت باالتر وجود داشته باشد و بنابراین تابع بازده باید منجر به تسلیم به رشته ای با
اولویت یکسان یا باالتر شود؟
.4.11در Solaris 9و ،Solaris 10نقشه برداری یک به یک بین ULTو LWPوجود دارد .در ،Solaris 8یک LWP
واحد از یک یا چند ULTپشتیبانی می کند.
ب در ،Solaris 8وضعیت اجرای رشته یک ULTاز LWPآن متمایز است .توضیح دهد که چرا.
ج شکل 4.18نمودارهای انتقال حالت را برای یک ULTو LWPمرتبط با آن در سوالریس 8و 9نشان می دهد .عملکرد دو
نمودار و روابط آنها را توضیح دهید.
252
سیستم عامل های داخلی و اصول طراحی253.........................................................................................................................
فصل5
همزمانی:
5.1اصول همزمانی
5.3سمافورها
طرد متقابل
5.4مانیتور
مانیتور با سیگنال
5.5ارسال پیام
همگام سازی آدرس دهی فرمت پیام صف بندی نظم و انضباط محرومیت متقابل
253
سیستم عامل های داخلی و اصول طراحی254.........................................................................................................................
5.6مشکل خوانندگان/نویسندگان
5.7خالصه
اهداف یادگیری
-مفاهیم اساسی مربوط به همزمانی ،مانند شرایط مسابقه ،نگرانی های سیستم عامل ،و الزامات محرومیت متقابل را مورد بحث
قرار دهید.
موضوعات اصلی طراحی سیستم عامل همگی با مدیریت فرآیندها و موضوعات مرتبط هستند:
-پردازش توزیع شده :مدیریت فرآیندهای متعددی که بر روی چندین سیستم کامپیوتری توزیع شده اجرا می شوند .تکثیر اخیر
خوشه ها نمونه بارز این نوع سیستم است.
اساسی برای همه این زمینه ها ،و اساسی در طراحی سیستم عامل ،همزمانی است .همزمانی شامل مجموعه ای از مسائل
طراحی ،از جمله ارتباط بین فرآیندها ،اشتراک گذاری و رقابت برای منابع مانند حافظه ،فایل ها ،و دسترسی ،I/Oهمگام سازی
254
سیستم عامل های داخلی و اصول طراحی255.........................................................................................................................
فعالیت های چندین فرآیند ،و تخصیص زمان پردازنده به فرآیندها است .خواهیم دید که این مسائل نه تنها در محیطهای
پردازش چندگانه و توزیعشده ،بلکه در سیستمهای چندبرنامهنویسی تکپردازنده نیز به وجود میآیند.
-برنامه های کاربردی چندگانه :چندبرنامه نویسی اختراع شد تا زمان پردازش به صورت پویا بین تعدادی از برنامه های کاربردی
فعال تقسیم شود.
-برنامه های کاربردی ساختاریافته :به عنوان توسعه ای از اصول طراحی مدوالر و برنامه نویسی ساختاریافته ،برخی از برنامه ها
را می توان به طور موثر به عنوان مجموعه ای از فرآیندهای همزمان برنامه ریزی کرد.
-ساختار سیستم عامل :مزایای ساختاری یکسانی در مورد برنامه های سیستم اعمال می شود و دیدیم که سیستم عامل ها خود
اغلب به عنوان مجموعه ای از فرآیندها یا رشته ها پیاده سازی می شوند.
به دلیل اهمیت این موضوع ،چهار فصل و یک ضمیمه بر روی مسائل مربوط به همزمانی تمرکز دارند .فصل های 5و 6به
همزمانی در سیستم های چندبرنامه ای و چند پردازشی می پردازد .فصل 16و 18مسائل همزمانی مربوط به پردازش توزیع
شده را بررسی می کند.
این فصل با مقدمهای بر مفهوم همزمانی و پیامدهای اجرای چندین فرآیند همزمان آغاز میشود .ما متوجه میشویم که شرط
اساسی برای پشتیبانی از فرآیندهای همزمان ،توانایی اجرای طرد متقابل است .یعنی توانایی حذف تمام فرآیندهای دیگر از یک
دوره عمل در حالی که به یک فرآیند آن توانایی داده شده است .در مرحله بعد ،مکانیسمهای سختافزاری را بررسی میکنیم که
میتوانند از حذف متقابل پشتیبانی کنند.
سپس راه حل هایی را بررسی می کنیم که شامل انتظار مشغول نیستند و می توانند توسط سیستم عامل پشتیبانی شوند یا
توسط اجرارهای زبان اجرا شوند .ما سه رویکرد را بررسی می کنیم :سمافورها ،مانیتورها ،و ارسال پیام.
دو مسئله کالسیک به صورت همزمان برای نشان دادن مفاهیم و مقایسه رویکردهای ارائه شده در این فصل استفاده می شود.
مشکل تولید کننده/مصرف کننده در بخش 5.3معرفی شده و به عنوان مثال در حال اجرا استفاده می شود .فصل با مشکل
خوانندگان/نویسندگان بسته می شود.
بحث ما در مورد همزمانی در فصل 6ادامه دارد و ما بحث در مورد مکانیسم های همزمانی سیستم های نمونه خود را تا پایان
آن فصل به تعویق می اندازیم .ضمیمه Aموضوعات اضافی در مورد همزمانی را پوشش می دهد .جدول 5.1برخی از
اصطالحات کلیدی مرتبط با همزمانی را فهرست می کند .مجموعهای از انیمیشنهایی که مفاهیم این فصل را نشان میدهند به
255
سیستم عامل های داخلی و اصول طراحی256.........................................................................................................................
صورت آنالین در دسترس هستند .روی کره در حال چرخش در وب سایت این کتاب در WilliamStalingsکلیک کنید.
com/OS/OS7e.htmlبرای دسترسی.
256
سیستم عامل های داخلی و اصول طراحی257.........................................................................................................................
5.1اصول همزمانی
در یک سیستم چندبرنامهنویسی تکپردازنده ،فرآیندها در زمان به هم میپیوندند تا ظاهر اجرای همزمان را به دست آورند شکل
.a2.12حتی اگر پردازش موازی واقعی به دست نیامده است ،و حتی اگر مقدار معینی از سربار درگیر در جابجایی بین فرآیندها
باشد ،اجرای درونی فواید عمده ای در کارایی پردازش و ساختار برنامه دارد .در یک سیستم چند پردازنده ،نه تنها می توان
اجرای چندین فرآیند را به هم زد ،بلکه آنها را همپوشانی کرد شکل .b2.12
در نگاه اول ،ممکن است به نظر برسد که تداخل و همپوشانی بیانگر شیوههای متفاوتی از اجرا هستند و مشکالت مختلفی را
ایجاد میکنند .در واقع ،هر دو تکنیک را می توان به عنوان نمونه هایی از پردازش همزمان در نظر گرفت و هر دو مشکالت
یکسانی را ارائه می دهند.
در مورد تک پردازنده ،مشکالت ناشی از یک ویژگی اساسی سیستم های چندبرنامه نویسی است :سرعت نسبی اجرای فرآیندها
قابل پیش بینی نیست .این بستگی به فعالیتهای سایر فرآیندها ،روش مدیریت وقفهها توسط سیستمعامل و سیاستهای
زمانبندی سیستمعامل دارد .مشکالت زیر ایجاد می شود:
.1اشتراک منابع جهانی مملو از خطر است .برای مثال ،اگر دو فرآیند هر دو از یک متغیر سراسری استفاده کنند و هر دو
خواندن و نوشتن را بر روی آن متغیر انجام دهند ،ترتیبی که در آن خواندن و نوشتن های مختلف اجرا می شود بسیار مهم
است .نمونه ای از این مشکل در زیر بخش زیر نشان داده شده است.
.2مدیریت بهینه تخصیص منابع برای سیستم عامل مشکل است .برای مثال ،فرآیند Aممکن است درخواست استفاده از یک
کانال ورودی/خروجی خاص را داشته باشد و کنترل آن به او داده شود و سپس قبل از استفاده از آن کانال به حالت تعلیق درآید.
ممکن است برای سیستم عامل نامطلوب باشد که کانال را به سادگی قفل کند و از استفاده از آن توسط سایر فرآیندها جلوگیری
کند .در واقع این ممکن است به یک شرایط وقفه منجر شود ،همانطور که در فصل 6توضیح داده شد.
.3یافتن یک خطای برنامهنویسی بسیار دشوار میشود ،زیرا نتایج معموالً قطعی و قابل تکرار نیستند به عنوان مثال ،برای بحث
در مورد این نکته به LEBL87, CARR89, SHEN02مراجعه کنید.
تمام مشکالت فوق خود را در یک سیستم چند پردازنده ای نیز نشان می دهند ،زیرا در اینجا نیز سرعت نسبی اجرای فرآیندها
غیرقابل پیش بینی است .یک سیستم چند پردازنده ای همچنین باید با مشکالت ناشی از اجرای همزمان چندین فرآیند مقابله
کند .با این حال ،اساساً مشکالت مشابه مشکالت سیستم های تک پردازنده هستند .این باید با ادامه بحث روشن شود.
257
سیستم عامل های داخلی و اصول طراحی258.........................................................................................................................
این روش عناصر اساسی یک برنامه را نشان می دهد که یک رویه اکو کاراکتر را ارائه می دهد .ورودی از یک صفحه کلید یک بار
در یک زمان به دست می آید .هر کاراکتر ورودی در چانه متغیر ذخیره می شود .سپس به choutمتغیر منتقل شده و به
نمایشگر ارسال می شود .هر برنامه ای می تواند این رویه را بارها و بارها فراخوانی کند تا ورودی کاربر را بپذیرد و آن را روی
صفحه نمایش کاربر نمایش دهد.
حال در نظر بگیرید که ما یک سیستم چندبرنامهنویسی تک پردازنده داریم که از یک کاربر پشتیبانی میکند .کاربر می تواند از
یک برنامه به برنامه دیگر بپرد و هر برنامه از صفحه کلید یکسانی برای ورودی و از یک صفحه نمایش برای خروجی استفاده می
کند .از آنجایی که هر برنامه باید از پژواک رویه استفاده کند ،منطقی است که یک رویه مشترک باشد که در بخشی از حافظه
جهانی برای همه برنامهها بارگذاری شود .بنابراین ،تنها یک کپی از رویه اکو استفاده می شود که باعث صرفه جویی در فضا می
شود .به اشتراک گذاری حافظه اصلی در بین فرآیندها برای اجازه کارآمدی مفید است .تعامل نزدیک بین فرآیندها با این حال،
چنین اشتراک گذاری می تواند منجر به مشکالت شود .دنباله زیر را در نظر بگیرید:
.1فرآیند P1رویه اکو را فراخوانی می کند و بالفاصله پس از اینکه getcharمقدار خود را برمی گرداند و آن را در چانه ذخیره
می کند ،قطع می شود .در این مرحله ،آخرین کاراکتر وارد شده ،x ،در متغیر چانه ذخیره می شود.
.2فرآیند P2فعال می شود و رویه اکو را فراخوانی می کند ،که تا نتیجه گیری اجرا می شود ،وارد می شود و سپس یک
کاراکتر ،y ،را روی صفحه نمایش می دهد.
.3فرآیند P1از سر گرفته می شود .در این زمان ،مقدار xدر چانه بازنویسی شده و بنابراین گم شده است .در عوض ،چانه
حاوی yاست که به choutمنتقل شده و نمایش داده می شود.
بدین ترتیب کاراکتر اول گم می شود و کاراکتر دوم دو بار نمایش داده می شود .ماهیت این مشکل ،متغیر جهانی مشترک ،چانه
است .چندین فرآیند به این متغیر دسترسی دارند .اگر یکی از فرآیندها متغیر سراسری را به روز کند و سپس قطع شود ،فرآیند
دیگری ممکن است قبل از اینکه اولین فرآیند بتواند از مقدار آن استفاده کند ،متغیر را تغییر دهد .با این حال ،فرض کنید که ما
در هر زمان فقط به یک فرآیند اجازه می دهیم در آن رویه باشد .سپس دنباله فوق به صورت زیر می شود:
258
سیستم عامل های داخلی و اصول طراحی259.........................................................................................................................
.1فرآیند P1رویه اکو را فراخوانی می کند و بالفاصله پس از پایان تابع ورودی قطع می شود .در این مرحله ،آخرین کاراکتر
وارد شده ،x ،در متغیر چانه ذخیره می شود.
.2فرآیند P2فعال شده و رویه اکو را فراخوانی می کند .با این حال ،به دلیل اینکه P1هنوز در داخل رویه اکو قرار دارد ،اگرچه
در حال حاضر به حالت تعلیق درآمده است P2 ،از ورود به رویه مسدود شده است .بنابراین P2 ،در انتظار در دسترس بودن
روش اکو به حالت تعلیق درآمده است.
.3در مدتی بعد ،فرآیند P1از سر گرفته می شود و اجرای اکو را کامل می کند .کاراکتر مناسب xنمایش داده می شود.
.4هنگامی که P1از echoخارج می شود ،بلوک روی P2حذف می شود .هنگامی که P2بعداً از سر گرفته می شود ،روش
اکو با موفقیت فراخوانی می شود.
این مثال نشان می دهد که محافظت از متغیرهای جهانی مشترک و سایر منابع جهانی مشترک ضروری است و تنها راه برای
انجام این کار ،کنترل کدی است که به متغیر دسترسی دارد .اگر این انضباط را تحمیل کنیم که فقط یک فرآیند در هر زمان
ممکن است وارد اکو شود و یک بار در اکو ،رویه باید قبل از اینکه برای فرآیند دیگری در دسترس باشد تا تکمیل شود ،آنگاه
نوع خطای که در مورد آن بحث شد رخ نخواهد داد .چگونگی تحمیل آن انضباط موضوع اصلی این فصل است.
این مشکل با این فرض بیان شد که یک سیستم عامل تک پردازنده و چندبرنامهنویسی وجود دارد .این مثال نشان می دهد که
مشکالت همزمانی حتی زمانی که یک پردازنده وجود دارد رخ می دهد .در یک سیستم چند پردازنده ،همان مشکالت مربوط به
منابع مشترک محافظت شده به وجود می آید ،و همان راه حل کار می کند .اول ،فرض کنید هیچ مکانیزمی برای کنترل
دسترسی به متغیر جهانی مشترک وجود ندارد:
.1فرآیندهای P1و P2هر دو در حال اجرا هستند ،هر کدام روی یک پردازنده جداگانه .هر دو فرآیند فرآیند اکو را فراخوانی
می کنند.
259
سیستم عامل های داخلی و اصول طراحی260.........................................................................................................................
نتیجه این است که ورودی کاراکتر P1قبل از نمایش از بین می رود و ورودی کاراکتر P2توسط P1و P2نمایش داده می
شود .مجدداً ،اجازه دهید قابلیت اجرای نظم و انضباط را اضافه کنیم که تنها یک فرآیند در هر زمان ممکن است در حال تکرار
باشد .سپس دنباله زیر رخ می دهد:
.1فرآیندهای P1و P2هر دو در حال اجرا هستند ،هر کدام روی یک پردازنده جداگانه P1 .رویه اکو را فراخوانی می کند.
.2در حالی که P1داخل رویه اکو است P2 ،اکو را فراخوانی می کند .از آنجایی که P1هنوز داخل رویه اکو است چه P1معلق
باشد و چه در حال اجرا P2 ،از ورود به رویه مسدود می شود .بنابراین P2 ،در انتظار در دسترس بودن روش اکو به حالت تعلیق
درآمده است.
.3در زمان بعدی ،پردازش P1اجرای اکو را کامل می کند ،از آن رویه خارج می شود و به اجرا ادامه می دهد .بالفاصله پس از
خروج P1از اکو P2 ،از سر گرفته شده و اجرای اکو را آغاز می کند.
در مورد سیستم تک پردازنده ،دلیل مشکل ما این است که یک وقفه می تواند اجرای دستورالعمل را در هر جایی از یک فرآیند
متوقف کند .در مورد یک سیستم چند پردازنده ،ما شرایط یکسانی داریم و عالوه بر این ،ممکن است مشکلی ایجاد شود زیرا
ممکن است دو فرآیند به طور همزمان اجرا شوند و هر دو سعی در دسترسی به یک متغیر سراسری یکسان داشته باشند .با این
حال ،راه حل هر دو نوع مشکل یکسان است :کنترل دسترسی به منبع مشترک.
شرایط مسابقه
شرایط مسابقه زمانی اتفاق میافتد که چندین پردازش یا رشته ،آیتمهای داده را میخوانند و مینویسند ،به طوری که نتیجه
نهایی به ترتیب اجرای دستورالعملها در چندین فرآیند بستگی دارد .اجازه دهید دو مثال ساده را در نظر بگیریم.
به عنوان مثال اول ،فرض کنید دو فرآیند P1و P2متغیر سراسری aرا به اشتراک می گذارند .در نقطه ای از اجرای خودP1 ،
aرا به مقدار 1به روز می کند ،و در نقطه ای از اجرای خود P2 a ،را به مقدار 2به روز می کند .بنابراین ،این دو کار در رقابت
برای نوشتن متغیر aهستند .در این مثال" ،بازنده" مسابقه فرآیندی که آخرین به روز رسانی می شود مقدار نهایی aرا تعیین
می کند.
برای مثال دوم ،دو فرآیند P3و P4را در نظر بگیرید که متغیرهای جهانی bو cرا با مقادیر اولیه b = 1و c = 2به اشتراک
می گذارند .در نقطه ای از اجرای خود P3 ،تخصیص b = b + cرا اجرا می کند ،در نقطه ای از اجرای خود P4 ،تخصیص c
= b + cرا اجرا می کند .توجه داشته باشید که دو فرآیند متغیرهای مختلف را به روز می کنند .با این حال ،مقادیر نهایی دو
متغیر به ترتیبی که دو فرآیند این دو تخصیص را اجرا می کنند ،بستگی دارد .اگر P3ابتدا دستور انتساب خود را اجرا کند،
مقادیر نهایی b = 3و c = 5است .اگر P4ابتدا دستور انتساب خود را اجرا کند ،مقادیر نهایی b = 4و c = 3هستند.
260
سیستم عامل های داخلی و اصول طراحی261.........................................................................................................................
پیوست Aشامل بحث در مورد شرایط مسابقه با استفاده از سمافورها به عنوان مثال است.
وجود همزمانی چه مسائل طراحی و مدیریتی را مطرح می کند؟ می توانیم نگرانی های زیر را فهرست کنیم:
.1سیستم عامل باید بتواند فرآیندهای مختلف را پیگیری کند .این کار با استفاده از بلوک های کنترل فرآیند انجام می شود و
در فصل 4توضیح داده شد.
.2سیستم عامل باید منابع مختلفی را برای هر فرآیند فعال تخصیص و تخصیص دهد .در مواقعی ،چندین فرآیند می خواهند به
یک منبع دسترسی داشته باشند .این منابع شامل
rزمان پردازشگر :این تابع زمانبندی است که در قسمت چهارم مورد بحث قرار گرفته است.
rحافظه :اکثر سیستم عامل ها از طرح حافظه مجازی استفاده می کنند .موضوع در بخش سوم مورد بررسی قرار گرفته است.
.3سیستم عامل باید از داده ها و منابع فیزیکی هر فرآیند در برابر تداخل ناخواسته سایر فرآیندها محافظت کند .این شامل
تکنیک هایی است که به حافظه ،فایل ها و دستگاه های ورودی/خروجی مربوط می شود .درمان کلی حفاظت در قسمت هفتم
یافت می شود.
.4عملکرد یک فرآیند و خروجی تولید شده باید مستقل از سرعت اجرای آن نسبت به سرعت سایر فرآیندهای همزمان باشد.
این موضوع این فصل است.
برای درک اینکه چگونه می توان به موضوع استقالل سرعت پرداخت ،باید به روش هایی که در آن فرآیندها می توانند تعامل
داشته باشند نگاه کنیم.
تعامل فرآیند
ما میتوانیم روشهای تعامل فرآیندها را بر اساس میزان آگاهی آنها از وجود یکدیگر طبقهبندی کنیم .جدول 5.2سه درجه
ممکن از آگاهی را به اضافه پیامدهای هر یک فهرست می کند:
261
سیستم عامل های داخلی و اصول طراحی262.........................................................................................................................
-فرآیندهای بی اطالع از یکدیگر :اینها فرآیندهای مستقلی هستند که قرار نیست با هم کار کنند .بهترین مثال برای این
وضعیت ،برنامه ریزی چندگانه چندین فرآیند مستقل است .اینها می توانند کارهای دسته ای یا جلسات تعاملی یا ترکیبی باشند.
اگرچه فرآیندها با هم کار نمی کنند ،سیستم عامل باید نگران رقابت برای منابع باشد .به عنوان مثال ،دو برنامه مستقل ممکن
است هر دو بخواهند به یک دیسک یا فایل یا چاپگر دسترسی داشته باشند .سیستم عامل باید این دسترسی ها را تنظیم کند.
-فرآیندهایی که به طور غیرمستقیم از یکدیگر آگاه هستند :اینها فرآیندهایی هستند که لزوماً توسط شناسه های پردازش
مربوطه خود از یکدیگر آگاه نیستند ،اما دسترسی به برخی از شی ها ،مانند بافر I/Oرا به اشتراک می گذارند .چنین
فرآیندهایی همکاری در اشتراک شیء مشترک را نشان می دهند.
-فرآیندهایی که مستقیماً از یکدیگر آگاه هستند :اینها فرآیندهایی هستند که می توانند با شناسه فرآیند با یکدیگر ارتباط
برقرار کنند و برای کار مشترک روی برخی از فعالیت ها طراحی شده اند .باز هم ،چنین فرآیندهایی همکاری را نشان می دهند.
شرایط همیشه آنطور که در جدول 5.2پیشنهاد شده است واضح و روشن نخواهد بود .در عوض ،چندین فرآیند ممکن است
جنبههایی از رقابت و همکاری را نشان دهند .با این وجود ،بررسی هر یک از سه مورد در لیست قبلی به طور جداگانه و تعیین
پیامدهای آنها برای سیستم عامل مفید است.
262
سیستم عامل های داخلی و اصول طراحی263.........................................................................................................................
رقابت در میان فرآیندها برای منابع فرآیندهای همزمان زمانی که برای استفاده از یک منبع رقابت می کنند با یکدیگر در تضاد
قرار می گیرند .در شکل خالص آن میتوانیم وضعیت را به صورت زیر توصیف کنیم .دو یا چند فرآیند در طول اجرای خود نیاز
به دسترسی به یک منبع دارند .هر فرآیند از وجود فرآیندهای دیگر بی اطالع است و هر یک باید تحت تأثیر اجرای سایر
فرآیندها قرار نگیرد .از این نتیجه می شود که هر فرآیند باید وضعیت هر منبعی را که از آن استفاده می کند بدون تأثیر بگذارد.
نمونههایی از منابع شامل دستگاههای ورودی/خروجی ،حافظه ،زمان پردازنده و ساعت است.
هیچ تبادل اطالعاتی بین فرآیندهای رقیب وجود ندارد .با این حال ،اجرای یک فرآیند ممکن است بر رفتار فرآیندهای رقیب
تأثیر بگذارد .به طور خاص ،اگر دو فرآیند هر دو بخواهند به یک منبع دسترسی داشته باشند ،یکی از فرآیندها به آن منبع
توسط سیستم عامل اختصاص داده می شود و دیگری باید منتظر بماند .بنابراین ،روندی که دسترسی به آن ممنوع است کند
می شود .در یک حالت شدید ،فرآیند مسدود شده ممکن است هرگز به منبع دسترسی پیدا نکند و از این رو هرگز با موفقیت
خاتمه نخواهد یافت.
در مورد فرآیندهای رقابتی باید با سه مشکل کنترل مواجه شد .اول نیاز به طرد متقابل است .فرض کنید دو یا چند فرآیند نیاز
به دسترسی به یک منبع واحد غیرقابل اشتراک ،مانند چاپگر دارند .در طول اجرا ،هر فرآیند دستوراتی را به دستگاه
ورودی/خروجی ،دریافت اطالعات وضعیت ،ارسال داده و/یا دریافت داده خواهد بود .ما به چنین منبعی به عنوان یک منبع
حیاتی و بخشی از برنامه که از آن به عنوان بخش مهم برنامه استفاده می کند اشاره خواهیم کرد .مهم است که فقط یک برنامه
در هر زمان در بخش بحرانی آن مجاز باشد .ما نمیتوانیم برای درک و اجرای این محدودیت به سادگی به سیستم عامل تکیه
کنیم ،زیرا ممکن است الزامات دقیق واضح نباشد .برای مثال ،در مورد چاپگر ،ما میخواهیم هر فرآیند فردی ،چاپگر را در حالی
که یک فایل کامل را چاپ میکند ،کنترل کند .در غیر این صورت ،خطوطی از فرآیندهای رقیب به هم متصل خواهند شد.
اجرای طرد متقابل دو مشکل کنترلی اضافی ایجاد می کند .یکی وقفه است .برای مثال ،دو فرآیند P1و P2و دو منبع R1و
R2را در نظر بگیرید .فرض کنید که هر فرآیند برای انجام بخشی از عملکرد خود نیاز به دسترسی به هر دو منبع دارد .سپس
ممکن است وضعیت زیر را داشته باشید :سیستم عامل R1را به P2و R2را به P1اختصاص می دهد .هر فرآیند منتظر یکی
از دو منبع است .هیچکدام منبعی را که قبالً مالک آن است آزاد نمیکند تا زمانی که منبع دیگر را به دست نیاورد و عملکردی
را که به هر دو منبع نیاز دارد انجام دهد .این دو فرآیند به وقفه رسیده اند.
263
سیستم عامل های داخلی و اصول طراحی264.........................................................................................................................
آخرین مشکل کنترل گرسنگی است .فرض کنید که سه فرآیند P3 ،P2 ،P1هر کدام نیاز به دسترسی دورهای به منبع R
دارند .موقعیتی را در نظر بگیرید که در آن P1منبع را در اختیار دارد ،و P2و P3هر دو به تأخیر افتادهاند و منتظر آن منبع
هستند .وقتی P1از بخش بحرانی خود خارج می شود ،باید به P2یا P3اجازه دسترسی به Rداده شود .فرض کنید که
سیستم عامل به P3دسترسی می دهد و P1مجدداً قبل از اینکه P3بخش حیاتی خود را کامل کند نیاز به دسترسی دارد .اگر
سیستم عامل پس از اتمام P3به P1دسترسی دهد و متعاقباً به P1و P3به طور متناوب اجازه دسترسی دهد ،ممکن است
P2به طور نامحدودی از دسترسی به منبع محروم شود ،حتی اگر وضعیت وقفه وجود نداشته باشد.
کنترل رقابت ناگزیر سیستم عامل را درگیر می کند زیرا این سیستم عامل است که منابع را تخصیص می دهد .بعالوه ،خود
فرآیندها باید بتوانند نیاز به طرد متقابل را به نوعی بیان کنند ،مانند قفل کردن یک منبع قبل از استفاده از آن .هر راه حلی
شامل پشتیبانی از سیستم عامل است ،مانند ارائه تسهیالت قفل .شکل 5.1مکانیسم طرد متقابل را به صورت انتزاعی نشان می
دهد n .فرآیند وجود دارد که باید همزمان اجرا شوند .هر فرآیند شامل 1یک بخش حیاتی است که بر روی برخی از منابع Ra
عمل می کند ،و 2کد اضافی قبل و بعد از بخش حیاتی که شامل دسترسی به Raنیست .از آنجایی که همه فرآیندها به یک
منبع Raدسترسی دارند ،مطلوب است که در هر زمان فقط یک فرآیند در بخش بحرانی آن باشد .برای اعمال طرد متقابل ،دو
عملکرد ارائه شده است :بحرانی و خروجی .هر تابع نام منبعی را که موضوع رقابت است به عنوان آرگومان می گیرد .هر فرآیندی
که بخواهد وارد بخش بحرانی خود شود در حالی که فرآیند دیگری در بخش بحرانی خود است ،برای همان منبع ،منتظر می
ماند.
بررسی مکانیسم های خاص برای ارائه عملکردهای بحرانی و خروجی باقی مانده است .در حال حاضر ،ما این موضوع را به تعویق
می اندازیم در حالی که موارد دیگر تعامل فرآیند را در نظر می گیریم.
همکاری در میان فرآیندها از طریق اشتراک گذاری مورد همکاری از طریق اشتراک گذاری فرآیندهایی را پوشش می دهد که با
سایر فرآیندها بدون آگاهی صریح از آنها در تعامل هستند .برای مثال ،چندین فرآیند ممکن است به متغیرهای مشترک یا به
فایلها یا پایگاههای داده مشترک دسترسی داشته باشند .فرآیندها ممکن است از داده های به اشتراک گذاشته شده بدون ارجاع
264
سیستم عامل های داخلی و اصول طراحی265.........................................................................................................................
به فرآیندهای دیگر استفاده کرده و به روز کنند ،اما می دانند که سایر فرآیندها ممکن است به همان داده ها دسترسی داشته
باشند .بنابراین فرآیندها باید برای اطمینان از مدیریت صحیح داده هایی که به اشتراک می گذارند ،همکاری کنند .مکانیسم
های کنترلی باید از یکپارچگی داده های مشترک اطمینان حاصل کنند.
از آنجایی که داده ها بر روی منابع دستگاه ها ،حافظه نگهداری می شوند ،مشکالت کنترلی مانند طرد متقابل ،وقفه و گرسنگی
دوباره وجود دارد .تنها تفاوت این است که اقالم داده ممکن است در دو حالت مختلف خواندن و نوشتن قابل دسترسی باشند و
فقط عملیات نوشتن باید متقابل باشد.
با این حال ،فراتر از این مشکالت ،یک نیاز جدید معرفی شده است :انسجام داده ها .به عنوان یک مثال ساده ،یک برنامه
حسابداری را در نظر بگیرید که در آن موارد مختلف داده ممکن است به روز شوند .فرض کنید دو مورد از داده های aو bباید
در رابطه a = bحفظ شوند .یعنی هر برنامه ای که یک مقدار را به روز می کند باید مقدار دیگر را نیز برای حفظ رابطه به روز
کند .حال دو فرآیند زیر را در نظر بگیرید:
اگر حالت در ابتدا سازگار باشد ،هر فرآیندی که به طور جداگانه گرفته شود ،داده های مشترک را در یک حالت ثابت باقی می
گذارد .اکنون دنباله اجرای همزمان زیر را در نظر بگیرید ،که در آن دو فرآیند به استثنای متقابل در مورد هر یک از آیتمهای
داده aو bاحترام میگذارند:
در پایان این دنباله اجرا ،شرط a = bدیگر برقرار نیست .به عنوان مثال ،اگر با a = b = 1شروع کنیم ،در پایان این دنباله
اجرا a = 4 ،و b = 3خواهیم داشت .با اعالم کل دنباله در هر فرآیند به عنوان یک بخش بحرانی ،می توان از مشکل جلوگیری
کرد.
بنابراین ،می بینیم که مفهوم بخش بحرانی در مورد همکاری با اشتراک گذاری مهم است .همان توابع انتزاعی entercriticalو
exitcriticalکه قبالً مورد بحث قرار گرفت شکل 5.1را می توان در اینجا استفاده کرد .در این مورد ،آرگومان توابع می تواند
یک متغیر ،یک فایل یا هر شی مشترک دیگری باشد.
265
سیستم عامل های داخلی و اصول طراحی266.........................................................................................................................
عالوه بر این ،اگر از بخشهای حیاتی برای ارائه یکپارچگی دادهها استفاده شود ،ممکن است هیچ منبع یا متغیر خاصی وجود
نداشته باشد که بتوان آن را به عنوان آرگومان شناسایی کرد .در آن صورت ،میتوانیم استدالل را بهعنوان شناسهای در نظر
بگیریم که در بین فرآیندهای همزمان برای شناسایی بخشهای مهمی که باید متقابالً انحصاری باشند ،به اشتراک گذاشته
میشود.
که در مورد آن بحث کردیم ،هر فرآیند دارای محیط جدا شده خود است که سایر فرآیندها را شامل نمی شود .تعامالت بین
فرآیندها غیر مستقیم است .در هر دو مورد ،اشتراک وجود دارد .در مورد رقابت ،آنها منابع را بدون آگاهی از سایر فرآیندها به
اشتراک می گذارند .در حالت دوم ،آنها مقادیر مشترکی دارند ،و اگرچه هر فرآیند به طور صریح از سایر فرآیندها آگاه نیست ،اما
از نیاز به حفظ یکپارچگی داده ها آگاه است .با این حال ،هنگامی که فرآیندها از طریق ارتباط با یکدیگر همکاری می کنند،
فرآیندهای مختلف در تالش مشترکی شرکت می کنند که همه فرآیندها را به هم مرتبط می کند .ارتباط راهی برای همگام
سازی یا هماهنگ کردن فعالیت های مختلف فراهم می کند.
به طور معمول ،ارتباط را می توان به عنوان متشکل از پیام هایی توصیف کرد .اصول اولیه برای ارسال و دریافت پیام ممکن است
به عنوان بخشی از زبان برنامه نویسی ارائه شود یا توسط هسته سیستم عامل ارائه شود.
از آنجا که هیچ چیز بین فرآیندها در عمل ارسال پیام به اشتراک گذاشته نمی شود ،طرد متقابل یک الزام کنترلی برای این نوع
همکاری نیست .با این حال ،مشکالت وقفه و گرسنگی همچنان وجود دارد .به عنوان نمونه ای از وقفه ،دو فرآیند ممکن است
مسدود شوند ،که هر یک منتظر یک ارتباط از طرف دیگر است .به عنوان نمونه ای از گرسنگی ،سه فرآیند P2 ،P1و P3را در
نظر بگیرید که رفتار زیر را نشان می دهند P1 .مکرراً در حال تالش برای برقراری ارتباط با P2یا P3است و P2و P3هر دو
در تالش برای برقراری ارتباط با P1هستند .توالی ممکن است ایجاد شود که در آن P1و P2به طور مکرر اطالعات را مبادله
می کنند ،در حالی که P3در انتظار یک ارتباط از P1مسدود می شود .هیچ وقفه وجود ندارد ،زیرا P1فعال می ماند ،اما P3
گرسنه است.
هر گونه تسهیالت یا قابلیتی که برای حمایت از طرد متقابل است باید شرایط زیر را برآورده کند:
.1طرد متقابل باید اجرا شود :فقط یک فرآیند در هر زمان مجاز به ورود به بخش بحرانی آن است ،در بین تمام فرآیندهایی که
بخشهای حیاتی برای یک منبع یا شی مشترک دارند.
266
سیستم عامل های داخلی و اصول طراحی267.........................................................................................................................
.2فرآیندی که در بخش غیر بحرانی خود متوقف می شود ،باید این کار را بدون تداخل با سایر فرآیندها انجام دهد.
.3نباید امکان داشته باشد که فرآیندی که نیاز به دسترسی به بخش بحرانی دارد به طور نامحدود به تعویق بیفتد :بدون وقفه یا
گرسنگی.
.4هنگامی که هیچ فرآیندی در بخش بحرانی نیست ،هر فرآیندی که درخواست ورود به بخش بحرانی خود را دارد باید بدون
تاخیر اجازه ورود داشته باشد.
.5هیچ فرضی در مورد سرعت نسبی فرآیند یا تعداد پردازنده ها وجود ندارد.
.6یک فرآیند فقط برای یک زمان محدود در بخش بحرانی خود باقی می ماند.
روشهای متعددی وجود دارد که از طریق آنها میتوان الزامات طرد متقابل را برآورده کرد .یک رویکرد این است که مسئولیت را
به فرآیندهایی که مایل به اجرای همزمان هستند واگذار کنید .فرآیندها ،چه برنامههای سیستمی باشند و چه برنامههای
کاربردی ،باید با یکدیگر هماهنگ شوند تا حذف متقابل را اعمال کنند ،بدون اینکه زبان برنامهنویسی یا سیستمعامل پشتیبانی
کنند .می توان از اینها به عنوان رویکردهای نرم افزاری یاد کرد .اگرچه این رویکرد مستعد سربار پردازش باال و اشکاالت است ،با
این وجود بررسی چنین رویکردهایی برای به دست آوردن درک بهتری از پیچیدگی پردازش همزمان مفید است .این موضوع در
ضمیمه الف پوشش داده شده است .رویکرد دوم شامل استفاده از دستورالعمل های ماشینی با هدف خاص است .اینها مزیت
کاهش سربار را دارند اما با این وجود به عنوان یک راه حل همه منظوره غیرجذاب نشان داده می شوند .آنها در بخش 5.2
پوشش داده شده اند .رویکرد سوم ،ارائه سطحی از پشتیبانی در سیستم عامل یا زبان برنامه نویسی است .سه مورد از مهمترین
این رویکردها در بخشهای 5.3تا 5.5بررسی شدهاند.
در این بخش ،به چندین رویکرد سخت افزاری جالب برای حذف متقابل نگاه می کنیم.
از آنجا که بخش بحرانی را نمی توان قطع کرد ،طرد متقابل تضمین شده است .قیمت این روش ،با این حال ،باال است .بهره وری
اجرا می تواند به طور قابل توجهی کاهش یابد ،زیرا پردازنده در توانایی خود در به هم زدن فرآیندها محدود است .مشکل دیگر
267
سیستم عامل های داخلی و اصول طراحی268.........................................................................................................................
این است که این رویکرد در معماری چند پردازنده کار نخواهد کرد .هنگامی که رایانه شامل بیش از یک پردازنده باشد ،ممکن
است و معمولی بیش از یک فرآیند در یک زمان اجرا شود .در این مورد ،وقفههای غیرفعال ضامن حذف متقابل نیستند.
در یک پیکربندی چند پردازنده ،چندین پردازنده به یک حافظه اصلی مشترک دسترسی دارند .در این مورد ،رابطه ارباب و برده
وجود ندارد .بلکه پردازشگرها به طور مستقل در یک رابطه همتا رفتار می کنند .هیچ مکانیسم وقفه ای بین پردازنده ها وجود
ندارد که بتوان بر اساس آن حذف متقابل انجام شود.
در سطح سخت افزار ،همانطور که ذکر شد ،دسترسی به یک مکان حافظه ،هر گونه دسترسی دیگر به همان مکان را مستثنی
می کند .با این کار به عنوان پایه ،طراحان پردازنده چندین دستورالعمل ماشینی را پیشنهاد کرده اند که دو عمل را به صورت
اتمی انجام می دهند 2 ،مانند خواندن و نوشتن یا خواندن و آزمایش ،یک مکان حافظه واحد با یک چرخه واکشی دستورالعمل.
در طول اجرای دستور ،دسترسی به مکان حافظه برای هر دستور دیگری که به آن مکان ارجاع می دهد مسدود می شود.
در این بخش ،ما به دو مورد از متداول ترین دستورالعمل های اجرا شده نگاه می کنیم .موارد دیگر در RAYN86و
STON93شرح داده شده است .دستورالعمل مقایسه و مبادله دستورالعمل مقایسه و مبادله ،که دستورالعمل مقایسه و مبادله
نیز نامیده می شود ،می تواند به صورت زیر تعریف شود :HERL90
این نسخه از دستورالعمل یک مکان حافظه * wordرا در برابر یک مقدار آزمایشی testvalبررسی می کند .اگر مقدار فعلی
مکان حافظه testvalباشد ،با newvalجایگزین می شود .در غیر این صورت بدون تغییر باقی می ماند .مقدار حافظه قدیمی
همیشه برگردانده می شود.
بنابراین ،در صورتی که مقدار برگشتی با مقدار آزمایشی یکسان باشد ،مکان حافظه به روز شده است .بنابراین ،این دستورالعمل
اتمی دارای دو بخش است :مقایسه ای بین یک مقدار حافظه و یک مقدار آزمایشی انجام می شود .اگر مقادیر یکسان باشند ،یک
مبادله رخ می دهد .کل تابع مقایسه و مبادله به صورت اتمی انجام می شود -یعنی در معرض وقفه نیست.
نسخه دیگری از این دستورالعمل یک مقدار بولی را برمیگرداند :درست در صورتی که مبادله رخ داده باشد .نادرست در غیر این
صورت برخی از نسخههای این دستورالعمل تقریباً در تمام خانوادههای پردازنده ،sparc ،IA64 ،x86سری z IBMو غیره
موجود است و اکثر سیستمعاملها از این دستورالعمل برای پشتیبانی از همزمانی استفاده میکنند.
268
سیستم عامل های داخلی و اصول طراحی269.........................................................................................................................
شکل a5.2یک پروتکل حذف متقابل بر اساس استفاده از این دستورالعمل را نشان می دهد 3 .یک پیچ متغیر مشترک به 0
مقداردهی اولیه می شود .تنها فرآیندی که ممکن است وارد بخش بحرانی آن شود ،فرآیندی است که پیچ را برابر با 0پیدا کند.
همه فرآیندهای دیگر تالش می کنند برای ورود به بخش بحرانی خود به حالت انتظار مشغول شوید .اصطالح انتظار مشغول یا
انتظار چرخشی به تکنیکی اشاره دارد که در آن یک فرآیند تا زمانی که مجوز ورود به بخش بحرانی خود را دریافت نکند نمی
تواند کاری انجام دهد اما به اجرای یک دستورالعمل یا مجموعه ای از دستورالعمل ها ادامه می دهد که متغیر مناسب را برای به
دست آوردن ورودی آزمایش می کند .هنگامی که یک فرآیند بخش بحرانی خود را ترک می کند ،پیچ را به 0بازنشانی می کند.
در این مرحله تنها به یکی از فرآیندهای انتظار دسترسی به بخش بحرانی آن داده شده است .انتخاب فرآیند بستگی به این دارد
که کدام فرآیند بعداً دستور مقایسه و تعویض را اجرا می کند.
این دستورالعمل محتویات یک ثبات را با یک مکان حافظه مبادله می کند .هر دو معماری IA-32اینتل Pentiumو معماری
IA-64 Itaniumدارای یک دستورالعمل XCHGهستند .شکل b5.2یک پروتکل حذف متقابل بر اساس استفاده از یک
دستورالعمل مبادله را نشان می دهد .یک پیچ متغیر مشترک به 0مقداردهی اولیه میشود .هر فرآیند از یک کلید متغیر محلی
استفاده میکند که به 1مقداردهی اولیه میشود .تنها فرآیندی که ممکن است وارد بخش بحرانی آن شود ،فرآیندی است که
پیچ را برابر با 0بیابد .تمام فرآیندهای دیگر را از بخش بحرانی حذف میکند.
269
سیستم عامل های داخلی و اصول طراحی270.........................................................................................................................
تنظیم پیچ بر روی .1هنگامی که یک فرآیند بخش بحرانی خود را ترک می کند ،پیچ را روی 0تنظیم می کند و به فرآیند
دیگری اجازه می دهد تا به بخش بحرانی خود دسترسی پیدا کند .توجه داشته باشید که عبارت زیر همیشه به دلیل نحوه
مقداردهی اولیه متغیرها و به دلیل ماهیت الگوریتم تبادل برقرار است:
اگر پیچ = 0باشد ،هیچ فرآیندی در بخش بحرانی آن نیست .اگر پیچ = 1باشد ،دقیقاً یک فرآیند در بخش بحرانی آن قرار دارد،
یعنی فرآیندی که مقدار کلید آن برابر با 0است .ویژگی های رویکرد دستگاه-دستورالعمل استفاده از ویژه دستورالعمل ماشین
برای اجرای محرومیت متقابل چندین مزیت دارد:
-برای هر تعداد فرآیند روی یک پردازنده یا چند پردازنده که حافظه اصلی مشترک دارند ،قابل اجرا است.
-می توان از آن برای پشتیبانی از چندین بخش حیاتی استفاده کرد .هر بخش بحرانی را می توان با متغیر خود تعریف کرد.
-انتظار مشغول است :بنابراین ،در حالی که یک فرآیند در انتظار دسترسی به بخش مهم است ،به مصرف زمان پردازنده ادامه
می دهد.
-گرسنگی امکان پذیر است :هنگامی که یک فرآیند یک بخش بحرانی را ترک می کند و بیش از یک فرآیند در انتظار است،
انتخاب یک فرآیند انتظار دلخواه است .بنابراین ،برخی از فرآیندها می توانند به طور نامحدودی از دسترسی محروم شوند.
-وقفه ممکن است :سناریوی زیر را در یک سیستم تک پردازنده در نظر بگیرید .فرآیند P1دستورالعمل ویژه را اجرا می کند به
عنوان مثال ،مقایسه و مبادله ،مبادله و وارد بخش بحرانی آن می شود .سپس P1قطع می شود تا پردازنده به P2داده شود که
اولویت باالتری دارد .اگر P2اکنون سعی کند از همان منبع P1استفاده کند ،به دلیل مکانیزم حذف متقابل از دسترسی به آن
جلوگیری می شود .بنابراین ،به یک حلقه انتظار مشغول خواهد رفت .با این حال P1 ،هرگز ارسال نخواهد شد زیرا اولویت
کمتری نسبت به فرآیند آماده دیگر P2 ،دارد .به دلیل اشکاالت راه حل های نرم افزاری و سخت افزاری ،باید به دنبال مکانیسم
های دیگری باشیم.
270
سیستم عامل های داخلی و اصول طراحی271.........................................................................................................................
5.3سمافورها
اکنون به سیستم عامل و مکانیسم های زبان برنامه نویسی می پردازیم که برای ایجاد همزمانی استفاده می شوند .جدول 5.3
مکانیسم های مورد استفاده رایج را خالصه می کند .در این بخش با سمافورها شروع می کنیم .دو بخش بعدی مانیتورها و
ارسال پیام را مورد بحث قرار می دهد .مکانیسم های دیگر در جدول 5.3هنگام بررسی نمونه های خاص سیستم عامل ،در فصل
های 6و 13مورد بحث قرار گرفته است.
سمافور یک مقدار صحیح که برای سیگنال دهی در بین فرآیندها استفاده می شود.
فقط سه عملیات را می توان روی یک سمافور انجام داد که همه آنها اتمی
هستند :مقداردهی اولیه ،کاهش و افزایش .عملیات کاهش ممکن است منجر به
مسدود شدن یک فرآیند شود و عملیات افزایشی ممکن است منجر به رفع
انسداد یک فرآیند شود .همچنین به عنوان سمافور شمارش یا سمافور عمومی
نیز شناخته می شود.
سمافور باینری سمافوری که فقط مقادیر 0و 1را می گیرد.
موتکس شبیه به سمافور باینری .یک تفاوت کلیدی بین این دو این است که فرآیندی که
mutexرا قفل می کند مقدار را روی صفر قرار می دهد باید آن را باز کند مقدار
را روی 1تنظیم می کند.
متغیر شرط نوع داده ای که برای مسدود کردن یک فرآیند یا رشته تا زمانی که یک شرط
خاص درست باشد استفاده می شود.
نظارت کنید یک ساختار زبان برنامه نویسی که متغیرها ،رویه های دسترسی و کد اولیه را
در یک نوع داده انتزاعی کپسوله می کند .متغیر مانیتور فقط از طریق
رویههای دسترسی آن قابل دسترسی است و فقط یک فرآیند ممکن است
فعال باشد.
پرچم های رویداد دسترسی به مانیتور در هر زمان رویه های دسترسی بخش های حیاتی هستند.
یک مانیتور ممکن است یک صف از فرآیندهایی داشته باشد که منتظر
دسترسی به آن هستند.
صندوق پست /پیام یک کلمه حافظه که به عنوان مکانیزم همگام سازی استفاده می شود.
271
سیستم عامل های داخلی و اصول طراحی272.........................................................................................................................
ها کد برنامه ممکن است رویداد متفاوتی را با هر بیت در پرچم مرتبط کند.
یک رشته می تواند برای یک رویداد یا ترکیبی از رویدادها با بررسی یک
یا چند بیت در پرچم مربوطه منتظر بماند .تا زمانی که تمام بیت های
مورد نیاز تنظیم شوند ANDیا تا زمانی که حداقل یکی از بیت ها
تنظیم شود ORرشته مسدود می شود.
اسپینالک وسیله ای برای دو فرآیند برای تبادل اطالعات و ممکن است برای همگام سازی
استفاده شود.
اولین پیشرفت عمده در برخورد با مشکالت فرآیندهای همزمان در سال 1965با رساله دایکسترا DIJK65رخ دادDijkstra .
به طراحی یک سیستم عامل به عنوان مجموعه ای از فرآیندهای متوالی همکاری و توسعه مکانیسم های کارآمد و قابل اعتماد
برای حمایت از همکاری توجه داشت .اگر پردازنده و سیستمعامل مکانیسمها را در دسترس قرار دهند ،این مکانیسمها میتوانند
به راحتی توسط فرآیندهای کاربر استفاده شوند.
اصل اساسی این است :دو یا چند فرآیند می توانند با استفاده از سیگنال های ساده با یکدیگر همکاری کنند ،به طوری که یک
فرآیند می تواند مجبور شود در یک مکان مشخص متوقف شود تا زمانی که سیگنال خاصی را دریافت کند .هر نیاز هماهنگی
پیچیده را می توان با ساختار مناسب سیگنال ها برآورده کرد .برای سیگنال دهی از متغیرهای خاصی به نام سمافور استفاده می
شود.
برای انتقال یک سیگنال از طریق سمافور ،sیک فرآیند semSignal sاولیه را اجرا می کند .برای دریافت سیگنال از طریق
سمافور ،sیک فرآیند semWait sاولیه را اجرا می کند .اگر سیگنال مربوطه هنوز مخابره نشده باشد ،فرآیند تا زمانی که
انتقال انجام شود به حالت تعلیق در می آید.21
21در مقاله اصلی Dijkstraو در بسیاری از متون ،از حرف Pبرای semWaitو حرف Vبرای semSignalاستفاده می شود .اینها حروف اول کلمات هلندی تست
)(proberenو افزایش ) (verhogenهستند .در برخی از ادبیات ،از اصطالحات انتظار و سیگنال استفاده می شود .این کتاب از semWaitو semSignalبرای وضوح استفاده
می کند و برای جلوگیری از سردرگمی با عملیات انتظار و سیگنال مشابه در مانیتورها که در ادامه بحث شد.
272
سیستم عامل های داخلی و اصول طراحی273.........................................................................................................................
برای دستیابی به اثر مورد نظر ،میتوانیم سمافور را بهعنوان متغیری ببینیم که دارای یک مقدار صحیح است که فقط سه
عملیات بر اساس آن تعریف میشود:
.1یک سمافور ممکن است به یک مقدار صحیح غیر منفی مقداردهی اولیه شود.
.2عملیات semWaitمقدار سمافور را کاهش می دهد .اگر مقدار منفی شود ،فرآیند اجرای semWaitمسدود می شود .در
غیر این صورت ،روند اجرا ادامه می یابد.
.3عملیات semSignalمقدار سمافور را افزایش می دهد .اگر مقدار حاصل کمتر یا مساوی صفر باشد ،در صورت وجود ،فرآیند
مسدود شده توسط یک عملیات ،semWaitدر صورت وجود ،رفع انسداد می شود.
به غیر از این سه عملیات ،هیچ راهی برای بازرسی یا دستکاری سمافورها وجود ندارد.
این عملیات را به شرح زیر توضیح می دهیم .برای شروع ،سمافور دارای ارزش صفر یا مثبت است .اگر مقدار مثبت باشد ،آن
مقدار برابر با تعداد فرآیندهایی است که می توانند یک انتظار صادر کنند و بالفاصله به اجرا ادامه دهند .اگر مقدار صفر باشد ،یا
با مقداردهی اولیه یا به دلیل اینکه تعدادی از فرآیندهای برابر با مقدار اولیه سمافور یک انتظار صادر کردهاند ،فرآیند بعدی برای
صدور انتظار مسدود میشود و مقدار سمافور منفی میشود .هر انتظار بعدی ،مقدار سمافور را بیشتر به قلمرو منهای هدایت می
کند .مقدار منفی برابر با تعداد فرآیندهایی است که در انتظار رفع انسداد هستند .هنگامی که مقدار سمافور منفی است ،هر
سیگنال یکی از فرآیندهای انتظار را باز می کند.
-به طور کلی ،هیچ راهی وجود ندارد که قبل از اینکه فرآیند یک سمافور را کاهش دهد ،مشخص شود که آیا مسدود می شود یا
خیر.
-پس از اینکه یک فرآیند یک سمافور را افزایش داد و فرآیند دیگری بیدار شد ،هر دو فرآیند به طور همزمان به اجرا ادامه
میدهند .هیچ راهی برای دانستن اینکه کدام فرآیند ،در صورت وجود ،فوراً در یک سیستم تک پردازنده ادامه خواهد یافت،
وجود ندارد.
-وقتی به یک سمافور سیگنال می دهید ،لزوماً نمی دانید که آیا فرآیند دیگری در انتظار است یا خیر ،بنابراین تعداد فرآیندهای
مسدود شده ممکن است صفر یا یک باشد.
شکل 5.3تعریف رسمی تری از اصول اولیه برای سمافورها را نشان می دهد .اولیه semWaitو semSignalاتمی فرض می
شوند .یک نسخه محدودتر ،معروف به سمافور باینری ،در شکل 5.4تعریف شده است .یک سمافور باینری ممکن است فقط
مقادیر 0و 1را دریافت کند و با سه عملیات زیر قابل تعریف است:
.2عملیات semWaitBمقدار سمافور را بررسی می کند .اگر مقدار صفر باشد ،فرآیند اجرای semWaitBمسدود می شود.
اگر مقدار یک باشد ،مقدار به صفر تغییر میکند و روند اجرا ادامه مییابد.
.3عملیات semSignalBبررسی می کند که آیا هر فرآیندی در این سمافور مسدود شده است مقدار سمافور برابر با 0است.
اگر چنین است ،پس فرآیندی که توسط یک عملیات semWaitBمسدود شده است ،مسدود می شود .اگر هیچ فرآیندی
مسدود نشود ،مقدار سمافور روی یک تنظیم می شود.
در اصل ،اجرای سمافور باینری باید آسانتر باشد و میتوان نشان داد که قدرت بیانی مشابه سمافور عمومی دارد مسئله 5.16را
ببینید .برای مقایسه دو نوع سمافور ،سمافور غیر دودویی اغلب به عنوان سمافور شمارش یا سمافور عمومی شناخته میشود.
274
سیستم عامل های داخلی و اصول طراحی275.........................................................................................................................
دوباره به صف آماده می پیوندد .سپس Bاجرا می شود ،2در نهایت دستور semWaitرا صادر می کند و مسدود می شود و به
Dاجازه می دهد 3اجرا شود .هنگامی که Dیک نتیجه جدید را تکمیل می کند ،دستور semSignalرا صادر می کند که به
Bاجازه می دهد تا به صف آماده 4حرکت کند D .دوباره به صف آماده می پیوندد و Cشروع به اجرا می کند 5اما وقتی
دستور semWaitرا صادر می کند مسدود می شود .به طور مشابه A ،و Bاجرا می شوند و روی سمافور مسدود می شوند و
به Dاجازه می دهند تا اجرا را از سر بگیرد .6وقتی Dیک نتیجه داشت ،یک semSignalصادر می کند که Cرا به صف
آماده منتقل می کند .چرخه های بعدی D Aو Bرا از حالت Blockedآزاد می کنند .برای الگوریتم طرد متقابل مورد بحث
در بخش فرعی بعدی و نشان داده شده در شکل ،5.6سمافورهای قوی رهایی از گرسنگی را تضمین می کنند ،در حالی که
سمافورهای ضعیف این کار را نمی کنند .ما سمافورهای قوی را فرض می کنیم زیرا راحت تر هستند و این شکل سمافور است
که معموالً توسط اپراتور -ارائه می شود.
275
سیستم عامل های داخلی و اصول طراحی276.........................................................................................................................
طرد متقابل
شکل 5.6یک راه حل ساده برای مشکل طرد متقابل با استفاده از سمافور را نشان می دهد شکل 5.1را مقایسه کنید n .فرآیند
شناسایی شده در آرایه Piرا در نظر بگیرید که همگی به یک منبع نیاز دارند .هر فرآیند دارای یک بخش حیاتی است که برای
دسترسی به منبع استفاده می شود .در هر فرآیند ،یک semWaitها درست قبل از بخش بحرانی آن اجرا می شود .اگر مقدار s
منفی شود ،فرآیند مسدود می شود .اگر مقدار 1باشد ،به 0کاهش می یابد و فرآیند بالفاصله وارد بخش بحرانی خود می شود.
چون sدیگر مثبت نیست ،هیچ فرآیند دیگری نمی تواند وارد بخش بحرانی آن شود.
سمافور به 1مقداردهی اولیه می شود .بنابراین ،اولین فرآیندی که یک sem-Witرا اجرا می کند ،می تواند بالفاصله وارد
بخش بحرانی شود و مقدار sرا روی 0تنظیم کند .مسدود خواهد شد و مقدار sرا -1تنظیم کنید .ممکن است هر تعدادی از
فرآیندها وارد شوند .هر تالش ناموفق منجر به کاهش بیشتر ارزش sمی شود .هنگامی که فرآیندی که در ابتدا وارد بخش
بحرانی خود شد s ،افزایش می یابد و یکی از فرآیندهای مسدود شده در صورت وجود از صف فرآیندهای مسدود شده مرتبط با
سمافور حذف می شود و در حالت آماده قرار می گیرد .هنگامی که برنامه بعدی توسط سیستم عامل برنامه ریزی شود ،ممکن
است وارد بخش بحرانی شود.
شکل ،5.7بر اساس یکی در ،BACO03یک توالی ممکن برای سه فرآیند را با استفاده از رشته حذف متقابل شکل 5.6نشان
می دهد .در این مثال سه فرآیند C ،B ،Aبه یک منبع مشترک محافظت شده توسط قفل سمافور دسترسی دارند .فرآیند A
semWaitقفل را اجرا می کند .چون سمافور در زمان عملیات semWaitمقدار 1دارد A ،می تواند بالفاصله وارد بخش
بحرانی خود شود و سمافور مقدار 0را به خود می گیرد .در حالی که Aدر بخش بحرانی خود است B ،و Cهر دو عملیات
semWaitرا انجام می دهند و در انتظار در دسترس بودن سمافور مسدود شده است .وقتی Aاز بخش بحرانی خود خارج می
شود و semSignalقفل را انجام می دهد B ،که اولین پردازش در صف بود ،اکنون می تواند وارد بخش بحرانی خود شود.
276
سیستم عامل های داخلی و اصول طراحی277.........................................................................................................................
اجرای عادی
روی قفل
سمافور مسدود
شده است
برنامه شکل 5.6به همان اندازه می تواند شرایطی را که بیش از یک فرآیند در بخش بحرانی آن در یک زمان مجاز باشد به
خوبی برطرف کند .این نیاز به سادگی با مقداردهی اولیه سمافور به مقدار مشخص شده برآورده می شود .بنابراین ،در هر زمان،
مقدار s.countرا می توان به صورت زیر تفسیر کرد:
s.count ≥ 0: s.count-تعداد پردازش هایی است که می توانند semWait sرا بدون تعلیق اجرا کنند اگر هیچ
semSignal sدر این فاصله اجرا نشود .چنین موقعیت هایی به سمافورها اجازه می دهد تا از همگام سازی و همچنین طرد
متقابل پشتیبانی کنند.
اکنون یکی از رایج ترین مشکالتی که در پردازش همزمان با آن مواجه است را بررسی می کنیم :مشکل تولیدکننده/مصرف
کننده .بیانیه کلی این است :یک یا چند تولید کننده وجود دارند که انواعی از داده ها سوابق ،کاراکترها را تولید می کنند و آنها
را در یک بافر قرار می دهند .یک مصرف کننده وجود دارد که اقالم را یکی یکی از بافر خارج می کند .سیستم باید برای
جلوگیری از همپوشانی عملیات بافر محدود شود .یعنی فقط یک عامل تولید کننده یا مصرف کننده می تواند در هر زمان به بافر
277
سیستم عامل های داخلی و اصول طراحی278.........................................................................................................................
دسترسی داشته باشد .مشکل این است که مطمئن شوید که تولید کننده سعی نمی کند داده ها را در صورت پر بودن بافر به آن
اضافه کند و مصرف کننده سعی نمی کند داده ها را از یک بافر خالی حذف کند .ما به تعدادی راه حل برای این مشکل نگاه
خواهیم کرد تا هم قدرت و هم مشکالت سمافورها را نشان دهیم.
برای شروع ،اجازه دهید فرض کنیم که بافر بی نهایت است و از یک آرایه خطی از عناصر تشکیل شده است .به صورت انتزاعی،
می توان عملکرد تولید کننده و مصرف کننده را به صورت زیر تعریف کرد:
شکل 5.8ساختار بافر bرا نشان می دهد .تولید کننده می تواند اقالمی را تولید کرده و با سرعت خود در بافر ذخیره کند .هر
بار ،یک شاخص inدر بافر افزایش می یابد .مصرف کننده به روشی مشابه اقدام می کند اما باید مطمئن شود که سعی نمی کند
از یک بافر خالی بخواند .از این رو ،مصرفکننده قبل از اقدام مطمئن میشود که تولیدکننده از آن فراتر رفته است.
اجازه دهید سعی کنیم این سیستم را با استفاده از سمافورهای باینری پیاده سازی کنیم .شکل 5.9اولین تالش است .بهجای
پرداختن به شاخصهای داخل و خارج ،میتوانیم به سادگی تعداد آیتمهای موجود در بافر را با استفاده از متغیر عدد صحیح = n
در -خارج پیگیری کنیم .سمافور sبرای اعمال طرد متقابل استفاده می شود .تاخیر سمافور برای وادار کردن مصرف کننده به
semWaitدر صورت خالی بودن بافر استفاده می شود.
این راه حل نسبتاً ساده به نظر می رسد .تولید کننده آزاد است که در هر زمانی به بافر اضافه کند semWaitB .ها را قبل از
الحاق و semSignalBانجام می دهد .پس از آن برای جلوگیری از دسترسی مصرف کننده یا هر تولیدکننده دیگری به بافر در
طول عملیات الحاق .همچنین در حالی که در بخش انتقادی ،تهیه کننده مقدار nرا افزایش می دهد .اگر ،n = 1آنگاه بافر
درست قبل از این ضمیمه خالی بود ،بنابراین تولیدکننده semSignalBتاخیر را برای آگاه کردن مصرف کننده از این واقعیت
انجام می دهد .مصرف کننده با استفاده از semWaitBتاخیر شروع به انتظار برای اولین مورد برای تولید می کند .سپس یک
آیتم را می گیرد و nرا در بخش بحرانی خود کاهش می دهد .اگر تولیدکننده بتواند جلوتر از مصرف کننده بماند یک موقعیت
رایج ،آنگاه مصرف کننده به ندرت جلوی تأخیر سمافور را می گیرد زیرا nمعموالً مثبت است .بنابراین هم تولیدکننده و هم
مصرف کننده به راحتی کار می کنند .با این حال ،یک نقص در این برنامه وجود دارد .هنگامی که مصرف کننده بافر را تمام
کرد ،باید سمافور تاخیری را مجددا تنظیم کند تا مجبور شود منتظر بماند تا تولید کننده موارد بیشتری را در بافر قرار دهد .این
هدف عبارت است :اگر n == 0 semWaitBتاخیر .سناریوی ارائه شده در جدول 5.4را در نظر بگیرید .در خط ،14مصرف
278
سیستم عامل های داخلی و اصول طراحی279.........................................................................................................................
کننده موفق به اجرای عملیات semWaitBنمی شود .مصرف کننده در واقع بافر را تخلیه کرده و nرا روی 0تنظیم کرده
است خط ،8اما تولید کننده قبل از اینکه مصرف کننده بتواند آن را در خط 14آزمایش کند n ،را افزایش داده است .نتیجه
یک semSignalBاست که با semWaitBقبلی مطابقت ندارد .مقدار 1-برای nدر خط 20به این معنی است که مصرف
کننده یک مورد از بافری را مصرف کرده است که وجود ندارد .انتقال عبارت شرطی در بخش بحرانی مصرف کننده انجام نمی
شود زیرا این امر می تواند منجر به وقفه شود به عنوان مثال ،بعد از خط 8جدول .5.4
یک راه حل برای این مشکل ،معرفی یک متغیر کمکی است که می تواند در بخش بحرانی مصرف کننده تنظیم شود تا در آینده
استفاده شود .این در شکل 5.10نشان داده شده است .یک ردپای دقیق از منطق باید شما را متقاعد کند که دیگر وقفه نمی
تواند رخ دهد .همانطور که در شکل 5.11نشان داده شده است ،اگر از سمافورهای عمومی که سمافورهای شمارش نیز نامیده
می شوند استفاده شود ،می توان یک راه حل تا حدودی تمیزتر به دست آورد.
شکل 5.9یک راه حل نادرست برای مشکل تولید کننده/مصرف کننده بافر بی نهایت با استفاده از سمافورهای باینری
279
280.........................................................................................................................سیستم عامل های داخلی و اصول طراحی
280
سیستم عامل های داخلی و اصول طراحی281.........................................................................................................................
y
19 semWaitBs 0 0 0
20 n−− 0 −1 0
21 semSignalBs 1 −1 0
متغیر nاکنون یک سمافور است .مقدار آن همچنان برابر است با تعداد موارد موجود در بافر .حال فرض کنید در رونویسی این
برنامه اشتباهی رخ داده و عملیات semSignalانجام شود s .و semSignal nمبادله می شوند .این به semSignalنیاز
دارد.
عملیات در بخش بحرانی تولید کننده بدون وقفه توسط مصرف کننده یا تولید کننده دیگر انجام شود .آیا این روی برنامه تاثیر
می گذارد؟ خیر ،زیرا مصرف کننده باید قبل از ادامه در هر موردی در هر دو سمافور منتظر بماند .حال فرض کنید که عملیات
semWait nو semWait sبه طور تصادفی معکوس شده اند .این یک نقص جدی و در واقع کشنده ایجاد می کند .اگر
زمانی که بافر خالی است ،مصرف کننده وارد بخش بحرانی خود شود ،n.count = 0هیچ تولیدکننده ای نمی تواند به بافر
اضافه کند و سیستم به وقفه می رسد .این نمونه خوبی از ظرافت سمافورها و دشواری تولید طرح های صحیح است.
شکل 5.10یک راه حل صحیح برای مشکل تولید کننده/مصرف کننده بافر بی نهایت با استفاده از سمافورهای باینری
281
سیستم عامل های داخلی و اصول طراحی282.........................................................................................................................
در نهایت ،اجازه دهید یک محدودیت جدید و واقع بینانه به مشکل تولید کننده/مصرف کننده اضافه کنیم :یعنی اینکه بافر
متناهی است .بافر به عنوان یک ذخیره سازی دایره ای در نظر گرفته می شود شکل ،5.12و مقادیر اشاره گر باید مدول اندازه
بافر بیان شوند .روابط زیر برقرار است:
شکل 5.11راه حلی برای مشکل تولیدکننده/مصرف کننده بافر نامحدود با استفاده از سمافورها
شکل 5.13راه حلی را با استفاده از سمافورهای عمومی نشان می دهد .سمافور eبرای پیگیری تعداد فضاهای خالی اضافه شده
است.
282
سیستم عامل های داخلی و اصول طراحی283.........................................................................................................................
مثال آموزنده دیگر در استفاده از سمافورها ،مشکل آرایشگاه است که در ضمیمه Aتوضیح داده شده است .ضمیمه Aهمچنین
شامل مثال های دیگری از مشکل شرایط مسابقه هنگام استفاده از سمافورها است.
شکل 5.13راه حلی برای مشکل تولیدکننده/مصرف کننده بافر محدود با استفاده از سمافورها
همانطور که قبال ذکر شد ،ضروری است که عملیات semWaitو semSignalبه عنوان اولیه اتمی اجرا شوند .یکی از راه های
واضح پیاده سازی آنها در سخت افزار یا سیستم عامل است .در صورت عدم موفقیت ،طرح های مختلفی پیشنهاد شده است.
ماهیت مشکل ،حذف متقابل است :فقط یک فرآیند در هر زمان ممکن است یک سمافور را با عملیات semWaitیا
semSignalدستکاری کند .بنابراین ،هر یک از طرح های نرم افزاری ،مانند الگوریتم دکر یا الگوریتم پترسون پیوست ،Aمی
تواند مورد استفاده قرار گیرد .این مستلزم سربار پردازش قابل توجهی است.
283
سیستم عامل های داخلی و اصول طراحی284.........................................................................................................................
جایگزین دیگر استفاده از یکی از طرحهای سختافزاری برای حذف متقابل است .برای مثال ،شکل a5.14استفاده از
دستورالعمل مقایسه و تعویض را نشان می دهد .در این پیاده سازی ،سمافور دوباره یک ساختار است ،مانند شکل ،5.3اما اکنون
شامل یک جزء صحیح جدید s.flag ،است .مسلماً ،این شامل نوعی انتظار مشغول است .با این حال ،عملیات semWaitو
semSignalنسبتاً کوتاه هستند ،بنابراین میزان انتظار مشغول باید جزئی باشد .همانطور که در شکل b5.14نشان داده شده
است ،برای یک سیستم تک پردازنده ،می توان از وقفه ها برای مدت زمان عملیات semWaitیا semSignalجلوگیری کرد.
بار دیگر ،مدت نسبتا کوتاه این عملیات به معنی منطقی بودن این رویکرد است.
5.4مانیتور
سمافورها ابزاری بدوی و در عین حال قدرتمند و انعطاف پذیر برای اعمال طرد متقابل و برای هماهنگ کردن فرآیندها ارائه می
کنند .با این حال ،همانطور که شکل 5.9نشان می دهد ،ممکن است تولید یک برنامه صحیح با استفاده از سمافورها دشوار
باشد .مشکل این است که عملیات sem-Witو semSignalممکن است در سراسر یک برنامه پراکنده شوند و دیدن اثر کلی
این عملیات بر روی سمافورهایی که آنها را تحت تأثیر قرار می دهند آسان نیست.
مانیتور یک ساختار به زبان برنامهنویسی است که عملکردی معادل عملکرد سمافورها را ارائه میکند و کنترل آن آسانتر است.
این مفهوم ابتدا به طور رسمی در HOAR74تعریف شد .ساختار مانیتور در تعدادی از زبان های برنامه نویسی ،از جمله
پاسکال همزمان ،پاسکال-پالس ،مدوال ،2-مدول 3-و جاوا پیاده سازی شده است .همچنین به عنوان کتابخانه برنامه پیاده سازی
شده است .این به برنامه نویسان اجازه می دهد تا قفل مانیتور را روی هر شیئی قرار دهند .به طور خاص ،برای چیزی مانند یک
لیست پیوندی ،ممکن است بخواهید همه لیست های پیوندی را با یک قفل قفل کنید ،یا یک قفل برای هر لیست داشته باشید،
284
سیستم عامل های داخلی و اصول طراحی285.........................................................................................................................
یا یک قفل برای هر عنصر از هر لیست داشته باشید .ما با نگاهی به نسخه Hoareشروع می کنیم و سپس یک اصالح را بررسی
می کنیم.
مانیتور با سیگنال
مانیتور یک ماژول نرم افزاری است که از یک یا چند رویه ،یک توالی اولیه سازی و داده های محلی تشکیل شده است .ویژگی
های اصلی یک مانیتور به شرح زیر است:
.1متغیرهای داده محلی فقط با رویه های مانیتور قابل دسترسی هستند و نه با هیچ روش خارجی.
.3تنها یک فرآیند ممکن است در یک زمان در مانیتور اجرا شود .هر فرآیند دیگری که مانیتور را فراخوانی کرده باشد مسدود
می شود و منتظر می ماند تا مانیتور در دسترس قرار گیرد.
دو مشخصه اول یادآور ویژگی های اشیاء در نرم افزارهای شی گرا هستند .در واقع ،یک سیستم عامل شی گرا یا زبان برنامه
نویسی می تواند به راحتی یک مانیتور را به عنوان یک شی با ویژگی های خاص پیاده سازی کند.
با اجرای نظم و انضباط یک فرآیند در یک زمان ،مانیتور می تواند یک تسهیالت طرد متقابل را فراهم کند .متغیرهای داده در
مانیتور تنها با یک فرآیند در یک زمان قابل دسترسی هستند .بنابراین ،یک ساختار داده مشترک را می توان با قرار دادن آن در
یک مانیتور محافظت کرد .اگر دادههای موجود در یک مانیتور منبعی را نشان میدهند ،آنگاه مانیتور یک تسهیالت حذف متقابل
برای دسترسی به منبع فراهم میکند.
برای مفید بودن برای پردازش همزمان ،مانیتور باید دارای ابزارهای همگام سازی باشد .به عنوان مثال ،فرض کنید یک فرآیند
مانیتور را فراخوانی می کند و در حالی که در مانیتور است ،باید تا زمانی که شرایطی برآورده شود مسدود شود .یک تسهیالت
مورد نیاز است که توسط آن فرآیند نه تنها مسدود شود بلکه مانیتور را آزاد کند تا فرآیند دیگری وارد آن شود .بعداً ،هنگامی که
شرایط برآورده شد و مانیتور مجدداً در دسترس قرار گرفت ،فرآیند باید از سر گرفته شود و اجازه داده شود تا در نقطه تعلیق
مانیتور دوباره وارد شود .یک مانیتور از همگام سازی با استفاده از متغیرهای شرطی که در مانیتور موجود است و فقط در مانیتور
قابل دسترسی هستند پشتیبانی می کند .متغیرهای شرط یک نوع داده خاص در مانیتورها هستند که با دو عملکرد کار می
کنند:
:cwait c-اجرای فرآیند فراخوانی را در شرایط cبه حالت تعلیق درآورید .مانیتور اکنون برای استفاده در فرآیند دیگری در
دسترس است.
285
سیستم عامل های داخلی و اصول طراحی286.........................................................................................................................
:csignal c-اجرای برخی از فرآیندهای مسدود شده پس از یک cwaitدر همان شرایط را از سر بگیرید .اگر چندین چنین
فرآیند وجود دارد ،یکی از آنها را انتخاب کنید .اگر چنین فرآیندی وجود ندارد ،هیچ کاری انجام ندهید.
توجه داشته باشید که عملیات انتظار و سیگنال مانیتور با سمافور متفاوت است .اگر فرآیندی در مانیتور سیگنال دهد و هیچ
وظیفه ای روی متغیر شرط منتظر نباشد ،سیگنال از بین می رود.
شکل 5.15ساختار یک مانیتور را نشان می دهد .اگرچه یک فرآیند میتواند با فراخوانی هر یک از رویههای آن وارد مانیتور
شود ،اما میتوانیم مانیتور را به عنوان یک نقطه ورودی واحد در نظر بگیریم که محافظت میشود به طوری که در هر زمان تنها
یک فرآیند ممکن است در مانیتور باشد .سایر فرآیندهایی که سعی می کنند وارد مانیتور شوند به صفی از فرآیندهای مسدود
شده در انتظار در دسترس بودن مانیتور می پیوندند .هنگامی که یک فرآیند در مانیتور قرار دارد ،ممکن است به طور موقت در
شرایط xبا صدور cwait xخود را مسدود کند .سپس در صفی از فرآیندها قرار می گیرد که در انتظار ورود مجدد به مانیتور
زمانی که شرایط تغییر می کند ،و اجرا را در نقطه ای از برنامه خود پس از فراخوانی cwait xاز سر می گیرد.
اگر فرآیندی که در مانیتور در حال اجرا است ،تغییری را در متغیر شرط xتشخیص دهد csignal x ،صادر میکند که به صف
شرط مربوطه هشدار میدهد که شرایط تغییر کرده است.
به عنوان مثالی از استفاده از مانیتور ،اجازه دهید به مشکل تولیدکننده/مصرف کننده بافر محدود بازگردیم .شکل 5.16راه حلی
را با استفاده از مانیتور نشان می دهد .ماژول مانیتور ،بافر محدود ،بافر مورد استفاده برای ذخیره و بازیابی کاراکترها را کنترل
می کند .مانیتور شامل دو متغیر شرط است که با condساختار اعالم می شود notfull :زمانی درست است که فضایی برای
اضافه کردن حداقل یک کاراکتر به بافر وجود داشته باشد و notemptyزمانی درست است که حداقل یک کاراکتر در بافر
وجود داشته باشد.
یک تولید کننده می تواند کاراکترها را فقط با استفاده از رویه ضمیمه داخل مانیتور به بافر اضافه کند .تولید کننده دسترسی
مستقیم به بافر ندارد .این رویه ابتدا شرط notfullرا بررسی می کند تا مشخص کند آیا فضای موجود در بافر وجود دارد یا
خیر .در غیر این صورت ،فرآیند اجرای مانیتور در آن شرایط مسدود می شود .اکنون ممکن است فرآیند دیگری تولیدکننده یا
مصرف کننده وارد مانیتور شود .بعداً ،وقتی بافر دیگر پر نیست ،ممکن است فرآیند مسدود شده از صف حذف شود ،دوباره فعال
شود و پردازش از سر گرفته شود .پس از قرار دادن یک کاراکتر در بافر ،فرآیند وضعیت notemptyرا نشان می دهد .شرح
مشابهی را می توان در مورد عملکرد مصرف کننده انجام داد.
286
سیستم عامل های داخلی و اصول طراحی287.........................................................................................................................
این مثال به تقسیم مسئولیت با مانیتور در مقایسه با سمافورها اشاره می کند .در مورد مانیتورها ،ساختار مانیتور خود باعث
حذف متقابل می شود :امکان دسترسی تولیدکننده و مصرف کننده به طور همزمان به بافر وجود ندارد .با این حال ،برنامه نویس
باید cwaitو csignal primitivesمناسب را در داخل مانیتور قرار دهد تا فرآیندها از قرار دادن موارد در یک بافر کامل یا
حذف آنها از یک بافر خالی جلوگیری کنند .در مورد سمافورها ،هم حذف متقابل و هم همگام سازی به عهده برنامه نویس است.
287
سیستم عامل های داخلی و اصول طراحی288.........................................................................................................................
شکل 5.16راه حلی برای مشکل تولیدکننده/مصرف کننده بافر محدود با استفاده از مانیتور
توجه داشته باشید که در شکل ،5.16یک فرآیند بالفاصله پس از اجرای تابع csignalاز مانیتور خارج می شود .اگر سیگنال
csignalدر پایان پروسه اتفاق نیفتد ،به پیشنهاد ،Hoareفرآیند صدور سیگنال مسدود میشود تا مانیتور در دسترس باشد و
تا زمانی که مانیتور آزاد شود در یک صف قرار میگیرد .یک امکان در این مرحله ،قرار دادن فرآیند مسدود شده در صف ورودی
است ،به طوری که باید برای دسترسی با سایر فرآیندهایی که هنوز وارد مانیتور نشده اند رقابت کند .با این حال ،از آنجا که یک
فرآیند مسدود شده در یک تابع csignalقبالً تا حدی وظیفه خود را در مانیتور انجام داده است ،منطقی است که با تنظیم یک
صف فوری جداگانه ،به این فرآیند نسبت به فرآیندهای تازه وارد اولویت داده شود شکل .5.15یکی از زبانهایی که از مانیتورها
استفاده میکند ،پاسکال همزمان ،نیاز دارد که csignalفقط به عنوان آخرین عملیات اجرا شده توسط یک رویه مانیتور ظاهر
شود .اگر هیچ فرآیندی در شرایط xمنتظر نمی ماند ،سپس csignalاجرا می شود xتأثیری ندارد.
288
سیستم عامل های داخلی و اصول طراحی289.........................................................................................................................
مانند سمافورها ،ممکن است در عملکرد همگام سازی مانیتورها اشتباه شود .برای مثال ،اگر یکی از توابع csignalدر مانیتور
بافر محدود حذف شود ،فرآیندهایی که وارد صف شرط مربوطه می شوند به طور دائم قطع می شوند .مزیتی که مانیتورها نسبت
به سمافورها دارند این است که تمام عملکردهای همگام سازی به نمایشگر محدود می شوند.
بنابراین ،تأیید اینکه همگام سازی به درستی انجام شده است و تشخیص اشکال آسان تر است .عالوه بر این ،هنگامی که یک
مانیتور به درستی برنامه ریزی شد ،دسترسی به منبع محافظت شده برای دسترسی از تمام فرآیندها صحیح است .در مقابل ،با
سمافورها ،دسترسی به منابع تنها در صورتی صحیح است که تمام فرآیندهایی که به منبع دسترسی دارند به درستی برنامه
ریزی شده باشند.
تعریف Hoareاز مانیتورها HOAR74مستلزم آن است که اگر حداقل یک فرآیند در یک صف شرط وجود داشته باشد،
هنگامی که یک فرآیند دیگر یک سیگنال csignبرای آن شرایط صادر می کند ،یک فرآیند از آن صف بالفاصله اجرا می شود.
بنابراین ،فرآیند صدور سیگنال csignال یا باید فوراً از مانیتور خارج شود یا در مانیتور مسدود شود.
.1اگر فرآیند صدور csignalبا مانیتور به پایان نرسیده باشد ،دو سوئیچ فرآیند اضافی مورد نیاز است :یکی برای مسدود کردن
این فرآیند و دیگری برای از سرگیری آن پس از در دسترس شدن مانیتور.
.2زمانبندی فرآیند مرتبط با یک سیگنال باید کامال قابل اعتماد باشد .هنگامی که یک سیگنال csignال صادر می شود ،یک
فرآیند از صف شرط مربوطه باید بالفاصله فعال شود و زمانبند باید اطمینان حاصل کند که هیچ فرآیند دیگری قبل از فعال
سازی وارد مانیتور نمی شود .در غیر این صورت ،شرایطی که تحت آن فرآیند فعال شده است می تواند تغییر کند .به عنوان
مثال ،در شکل ،5.16هنگامی که یک csignal notemptyصادر می شود ،یک فرآیند از صف نوت باید قبل از ورود یک
مصرف کننده جدید به مانیتور فعال شود .مثال دیگر :یک فرآیند تولیدکننده ممکن است یک کاراکتر را به یک بافر خالی اضافه
کند و سپس قبل از سیگنال دهی با شکست مواجه شود .هر فرآیند در صف نوت به طور دائم قطع می شود.
لمپسون و ردل تعریف متفاوتی از مانیتور برای زبان Mesa LAMP80ارائه کردند .رویکرد آنها بر مشکالت ذکر شده غلبه می
کند و چندین برنامه افزودنی مفید را پشتیبانی می کند .ساختار مانیتور Mesaهمچنین در زبان برنامه نویسی سیستم های
Modula-3 NELS91استفاده می شود .در csignal primitive ،Mesaبا cnotifyبا تعبیر زیر جایگزین میشود:
هنگامی که یک فرآیند در حال اجرا در مانیتور cnotifyx ،را اجرا میکند ،باعث میشود که صف شرط xاطالعرسانی شود ،اما
فرآیند سیگنالدهی به اجرا ادامه میدهد .نتیجه اعالن این است که فرآیند در سر صف شرط در زمان مناسبی در آینده که
289
سیستم عامل های داخلی و اصول طراحی290.........................................................................................................................
مانیتور در دسترس باشد از سر گرفته می شود .با این حال ،از آنجایی که هیچ تضمینی وجود ندارد که برخی از فرآیندهای دیگر
قبل از فرآیند انتظار وارد مانیتور نشود ،فرآیند انتظار باید مجدداً شرایط را بررسی کند .برای مثال ،رویههای موجود در مانیتور
بافر محدود اکنون کد شکل 5.17را دارند .دستورات ifبا حلقههای whileجایگزین میشوند .بنابراین ،این ترتیب منجر به
حداقل یک ارزیابی اضافی از متغیر شرط می شود .با این حال ،در عوض ،هیچ سوئیچ فرآیند اضافی وجود ندارد ،و هیچ
محدودیتی برای زمانی که فرآیند انتظار باید بعد از یک cnotifyاجرا شود ،وجود ندارد .یکی از اصالحات مفیدی که می تواند
با cnotify primitiveمرتبط شود ،یک تایمر نگهبان مرتبط با هر شرط اولیه است .روندی که بوده است انتظار برای حداکثر
فاصله زمانی در حالت آماده قرار می گیرد ،صرف نظر از اینکه آیا این شرایط اطالع داده شده است یا خیر .هنگامی که فعال می
شود ،فرآیند شرایط را بررسی می کند و در صورت برآورده شدن شرایط ادامه می یابد .مهلت زمانی از گرسنگی نامحدود یک
فرآیند در صورتی که برخی از فرآیندهای دیگر قبل از سیگنال دادن به یک شرط با شکست مواجه شوند ،جلوگیری می کند.
با این قاعده که یک فرآیند به جای فعال سازی مجدد اجباری اطالع رسانی می شود ،می توان یک cbroadcastاولیه را به
رپرتوار اضافه کرد .پخش باعث می شود تمام فرآیندهای در انتظار یک شرط در حالت آماده قرار بگیرند .این در شرایطی راحت
است که یک فرآیند نمی داند چند فرآیند دیگر باید دوباره فعال شوند .به عنوان مثال ،در برنامه تولیدکننده/مصرف کننده ،فرض
کنید که هر دو تابع appendو takeمی توانند برای بلوک های طول متغیر کاراکترها اعمال شوند .در این صورت ،اگر
تولیدکننده بلوکی از کاراکترها را به بافر اضافه کند ،نیازی نیست بداند هر مصرف کننده منتظر چه تعداد کاراکتر را برای مصرف
آماده کرده است .این به سادگی یک Cbroadcastصادر می کند و همه فرآیندهای انتظار برای تالش مجدد هشدار داده می
شوند .عالوه بر این ،زمانی که یک فرآیند مشکل داشته باشد ،می توان از یک پخش استفاده کرد.
بررسی دقیق اینکه کدام فرآیند دیگر را دوباره فعال کنید .یک مثال خوب یک مدیر حافظه است .مدیر دارای jبایت رایگان
است .یک فرآیند یک Kبایت اضافی را آزاد می کند ،اما نمی داند کدام فرآیند انتظار می تواند با مجموع k + jبایت ادامه یابد.
از این رو از پخش استفاده می کند و همه فرآیندها خودشان بررسی می کنند که آیا حافظه کافی وجود دارد یا خیر .مزیت
290
سیستم عامل های داخلی و اصول طراحی291.........................................................................................................................
مزیت دیگر مانیتور Lampson/Redellاین است که رویکرد ماژوالرتری برای ساخت برنامه دارد .به عنوان مثال ،اجرای یک
تخصیص دهنده بافر را در نظر بگیرید .برای همکاری فرآیندهای متوالی دو سطح شرط وجود دارد:
.1ساختارهای داده منسجم .بنابراین ،مانیتور حذف متقابل را اعمال می کند و یک عملیات ورودی یا خروجی را قبل از اجازه
دادن به عملیات دیگری در بافر تکمیل می کند.
.2سطح ،1به عالوه حافظه کافی برای این فرآیند برای تکمیل درخواست تخصیص آن.
در مانیتور ،Hoareهر سیگنال شرط سطح 1را منتقل میکند ،اما پیام ضمنی را نیز به همراه دارد" :من به اندازه کافی بایت را
آزاد کردم تا تماس اختصاصی شما اکنون کار کند ".بنابراین ،سیگنال به طور ضمنی شرط سطح 2را دارد .اگر برنامهنویس بعداً
تعریف شرط سطح 2را تغییر دهد ،الزم است همه فرآیندهای سیگنالینگ مجدداً برنامهریزی شوند .اگر برنامه نویس مفروضات
ایجاد شده توسط هر فرآیند انتظار خاصی را تغییر دهد یعنی انتظار برای سطح 2تغییر ناپذیر کمی متفاوت ،ممکن است الزم
باشد همه فرآیندهای سیگنالینگ را مجددا برنامه ریزی کرد .این غیر ماژوالر است و به احتمال زیاد باعث ایجاد خطاهای همگام
سازی می شود به عنوان مثال ،به اشتباه بیدار می شود زمانی که کد اصالح می شود .برنامه نویس باید به خاطر داشته باشد که
هر بار که تغییر کوچکی در وضعیت سطح 2ایجاد می شود ،همه رویه ها را در مانیتور تغییر دهد .با یک مانیتور
،Lampson/Redellپخش وضعیت سطح 1را تضمین می کند و اشاره ای به سطح 2دارد .هر فرآیند باید خود شرط سطح
2را بررسی کند .اگر تغییری در وضعیت سطح 2در یک پیشخدمت یا یک سیگنال دهنده ایجاد شود ،امکان بیدار شدن اشتباه
وجود ندارد زیرا هر روش وضعیت سطح 2خود را بررسی می کند .بنابراین ،شرط سطح 2را می توان در هر رویه پنهان کرد .با
مانیتور ،Hoareشرط سطح 2باید از پیشخدمت به کد هر فرآیند سیگنال دهی منتقل شود ،که اصول انتزاع داده و ماژوالریت
بین رویه ای را نقض می کند.
5.5ارسال پیام
هنگامی که فرآیندها با یکدیگر تعامل دارند ،دو الزام اساسی باید برآورده شوند :همگام سازی و ارتباط .فرآیندها باید برای اجرای
طرد متقابل هماهنگ شوند .فرآیندهای همکاری ممکن است نیاز به تبادل اطالعات داشته باشند .یک رویکرد برای ارائه هر دوی
291
سیستم عامل های داخلی و اصول طراحی292.........................................................................................................................
این عملکردها ،ارسال پیام است .ارسال پیام دارای مزیت دیگری است که در سیستم های توزیع شده و همچنین در سیستم
های چند پردازنده و تک پردازنده با حافظه مشترک پیاده سازی می شود.
جدول 5.5ویژگی های طراحی سیستم های پیام برای ارتباطات بین فرآیندی و همگام سازی
سیستم های ارسال پیام به اشکال مختلفی وجود دارد .در این بخش ،مقدمهای کلی ارائه میکنیم که ویژگیهایی را که معموالً
در چنین سیستمهایی یافت میشوند مورد بحث قرار میدهد .عملکرد واقعی ارسال پیام معموالً به شکل یک جفت اولیه ارائه
می شود:
این حداقل مجموعه ای از عملیات مورد نیاز برای فرآیندها در ارسال پیام است .یک فرآیند اطالعات را در قالب یک پیام به
فرآیند دیگری که توسط یک مقصد تعیین شده است ارسال می کند .یک فرآیند با اجرای دریافت اولیه ،با نشان دادن منبع و
پیام ،اطالعات را دریافت می کند .تعدادی از مسائل طراحی مربوط به سیستم های ارسال پیام در لیست ذکر شده است .جدول
5.5و در ادامه این بخش بررسی شده است.
هماهنگ سازی
ارتباط یک پیام بین دو فرآیند مستلزم سطحی از همگام سازی بین این دو است :گیرنده نمی تواند پیامی را تا زمانی که توسط
فرآیند دیگری ارسال شده باشد دریافت کند .عالوه بر این ،باید مشخص کنیم که پس از صدور یک ارسال یا دریافت اولیه ،چه
اتفاقی برای یک فرآیند می افتد .ابتدا ارسال اولیه را در نظر بگیرید .هنگامی که یک ارسال اولیه در یک فرآیند اجرا می شود ،دو
احتمال وجود دارد :یا فرآیند ارسال تا زمانی که پیام دریافت نشود مسدود شود یا خیر .به طور مشابه ،هنگامی که یک فرآیند
یک دریافت اولیه صادر می کند ،دو احتمال وجود دارد:
292
سیستم عامل های داخلی و اصول طراحی293.........................................................................................................................
.1اگر قبالً پیامی ارسال شده باشد ،پیام دریافت شده و اجرا ادامه می یابد.
.2اگر پیام منتظری وجود نداشته باشد ،یا الف فرآیند تا رسیدن پیام مسدود می شود ،یا ب فرآیند به اجرا ادامه می دهد و
تالش برای دریافت را رها می کند.
بنابراین ،هم فرستنده و هم گیرنده می توانند مسدود یا غیر مسدود باشند .سه ترکیب رایج هستند ،اگرچه هر سیستم خاص
معموالً فقط یک یا دو ترکیب پیادهسازی میکند:
-مسدود کردن ارسال ،مسدود کردن دریافت :هم فرستنده و هم گیرنده تا زمان تحویل پیام مسدود می شوند .این گاهی اوقات
به عنوان قرار مالقات نامیده می شود .این ترکیب امکان همگام سازی دقیق بین فرآیندها را فراهم می کند.
-ارسال غیر مسدود ،مسدود کردن دریافت :اگرچه فرستنده ممکن است به کار خود ادامه دهد ،گیرنده تا رسیدن پیام
درخواستی مسدود می شود .این احتماالً مفیدترین ترکیب است.
این به یک فرآیند اجازه می دهد تا یک یا چند پیام را در سریع ترین زمان ممکن به مقصدهای مختلف ارسال کند .فرآیندی که
قبل از انجام کار مفید باید پیامی دریافت کند ،باید تا رسیدن چنین پیامی مسدود شود .یک مثال یک فرآیند سرور است که
برای ارائه یک سرویس یا منبع به سایر فرآیندها وجود دارد.
-ارسال بدون انسداد ،دریافت غیرمسدود :هیچ یک از طرفین الزم نیست منتظر بمانند.
ارسال غیر مسدود برای بسیاری از کارهای برنامه نویسی همزمان طبیعی تر است .به عنوان مثال ،اگر از آن برای درخواست
عملیات خروجی مانند چاپ استفاده شود ،به فرآیند درخواست اجازه می دهد تا درخواست را در قالب یک پیام صادر کند و
سپس ادامه دهد .یکی از خطرات بالقوه ارسال غیر انسدادی این است که یک خطا می تواند منجر به موقعیتی شود که در آن
یک فرآیند به طور مکرر پیام تولید می کند .از آنجایی که هیچ مانعی برای نظم بخشیدن به فرآیند وجود ندارد ،این پیام ها می
توانند منابع سیستم ،از جمله زمان پردازنده و فضای بافر را به ضرر سایر فرآیندها و سیستم عامل مصرف کنند .همچنین ،ارسال
غیرمسدود کننده باری را بر دوش برنامه نویس می گذارد تا تشخیص دهد که یک پیام دریافت شده است :فرآیندها باید از پیام
های پاسخ برای تأیید دریافت پیام استفاده کنند.
برای دریافت اولیه ،نسخه مسدود کننده برای بسیاری از کارهای برنامه نویسی همزمان طبیعی تر به نظر می رسد .به طور کلی،
فرآیندی که درخواست پیام می کند ،قبل از ادامه به اطالعات مورد انتظار نیاز دارد .با این حال ،اگر یک پیام گم شود ،که می
تواند در یک سیستم توزیع شده اتفاق بیفتد ،یا اگر یک فرآیند قبل از ارسال یک پیام پیش بینی شده با شکست مواجه شود،
فرآیند دریافت می تواند به طور نامحدود مسدود شود .این مشکل را می توان با استفاده از دریافت غیر مسدود کننده حل کرد .با
293
سیستم عامل های داخلی و اصول طراحی294.........................................................................................................................
این حال ،خطر این رویکرد این است که اگر یک پیام پس از اینکه یک فرآیند قبالً یک دریافت منطبق را اجرا کرده است ارسال
شود ،پیام از بین خواهد رفت.
روشهای ممکن دیگر این است که به یک فرآیند اجازه میدهیم تا قبل از صدور دریافت ،آزمایش کند که آیا یک پیام منتظر
است یا خیر و به یک فرآیند اجازه میدهد بیش از یک منبع را در یک دریافت اولیه مشخص کند .رویکرد دوم در صورتی مفید
است که فرآیندی منتظر پیامهایی از بیش از یک منبع باشد و در صورت رسیدن هر یک از این پیامها میتواند ادامه یابد.
واضح است که باید راهی برای مشخص کردن فرآیند ارسال پیام در ارسال اولیه وجود داشته باشد .به طور مشابه ،بیشتر
پیادهسازیها به یک فرآیند دریافت اجازه میدهند منبع پیامی را که قرار است دریافت شود ،نشان دهد.
طرح های مختلف برای تعیین فرآیندها در ارسال و دریافت اولیه به دو دسته تقسیم می شوند :آدرس دهی مستقیم و آدرس
دهی غیر مستقیم .با آدرس دهی مستقیم ،ارسال اولیه شامل یک شناسه خاص از فرآیند مقصد است .دریافت اولیه را می توان
به یکی از دو روش مدیریت کرد .یکی از احتماالت این است که بخواهیم فرآیند ارسال را به صراحت مشخص کند .بنابراین،
فرآیند باید از قبل بداند که از کدام فرآیند یک پیام انتظار می رود .این اغلب برای همکاری فرآیندهای همزمان موثر خواهد بود.
با این حال ،در موارد دیگر ،نمی توان فرآیند منبع پیش بینی شده را مشخص کرد .به عنوان مثال یک فرآیند چاپگر-سرور است
که یک پیام درخواست چاپ را از هر فرآیند دیگری می پذیرد .برای چنین کاربردهایی ،یک رویکرد موثرتر استفاده از آدرس
دهی ضمنی است .در این حالت ،پارامتر منبع دریافت اولیه دارای مقداری است که پس از انجام عملیات دریافت بازگردانده می
شود.
رویکرد کلی دیگر آدرس دهی غیرمستقیم است .در این مورد ،پیامها مستقیماً از فرستنده به گیرنده ارسال نمیشوند ،بلکه به
یک ساختار داده مشترک شامل صفهایی ارسال میشوند که میتوانند به طور موقت پیامها را نگه دارند .به چنین صف هایی
معموالً صندوق پستی گفته می شود .بنابراین ،برای ارتباط دو فرآیند ،یک فرآیند پیامی را به صندوق پستی مربوطه ارسال می
کند و فرآیند دیگر پیام را از صندوق پستی دریافت می کند.
نقطه قوت استفاده از آدرس دهی غیرمستقیم این است که با جدا کردن فرستنده و گیرنده ،انعطاف پذیری بیشتری در استفاده
از پیام ها فراهم می کند .رابطه بین فرستنده و گیرنده می تواند یک به یک ،چند به یک ،یک به چند ،یا چند به بسیاری باشد
شکل .5.18یک رابطه یک به یک اجازه می دهد تا یک پیوند ارتباطات خصوصی بین دو فرآیند ایجاد شود .این امر تعامل آنها
را از تداخل اشتباه سایر فرآیندها محافظت می کند.
یک رابطه چند به یک برای تعامل مشتری/سرور مفید است .یک فرآیند به تعدادی از فرآیندهای دیگر خدمات ارائه می دهد .در
این مورد ،صندوق پستی اغلب به عنوان یک پورت شناخته می شود .رابطه یک به چند امکان یک فرستنده و چندین گیرنده را
294
سیستم عامل های داخلی و اصول طراحی295.........................................................................................................................
فراهم می کند .برای برنامههایی که قرار است پیام یا اطالعاتی به مجموعهای از فرآیندها پخش شود مفید است .یک رابطه چند
به چند به چندین فرآیند سرور اجازه می دهد تا خدمات همزمان را به چندین مشتری ارائه دهند.
ارتباط فرآیندها با صندوق های پستی می تواند ثابت یا پویا باشد .پورت ها اغلب به طور ایستا با یک فرآیند خاص مرتبط
هستند .یعنی پورت ایجاد می شود و به طور دائم به فرآیند اختصاص می یابد .به طور مشابه ،یک رابطه یک به یک معموالً به
صورت ایستا و دائمی تعریف می شود .هنگامی که فرستنده های زیادی وجود دارد ،ارتباط یک فرستنده به یک صندوق پستی
ممکن است به صورت پویا رخ دهد .ممکن است برای این منظور از موارد اولیه مانند اتصال و قطع استفاده شود .یک موضوع
مربوط به مالکیت صندوق پستی است .در مورد یک پورت ،معموالً متعلق به فرآیند دریافت و ایجاد آن است .بنابراین ،هنگامی
که فرآیند از بین می رود ،بندر نیز از بین می رود .برای مورد صندوق پست عمومی ،سیستم عامل ممکن است یک سرویس
ایجاد صندوق پستی ارائه دهد .چنین صندوقهای پستی را میتوان یا بهعنوان متعلق به فرآیند ایجاد مشاهده کرد ،در این
صورت با فرآیند خاتمه مییابد ،یا بهعنوان متعلق به سیستمعامل ،در این صورت یک فرمان صریح برای از بین بردن صندوق
پست مورد نیاز است.
فرمت پیام
قالب پیام بستگی به اهداف تسهیالت پیام رسانی و اینکه آیا این تسهیالت روی یک کامپیوتر واحد اجرا می شود یا بر روی یک
سیستم توزیع شده بستگی دارد .برای برخی از سیستم عامل ها ،طراحان پیام های کوتاه و با طول ثابت را برای به حداقل
رساندن هزینه پردازش و ذخیره سازی ترجیح می دهند .اگر قرار است مقدار زیادی از داده ارسال شود ،داده ها را می توان در
یک فایل قرار داد و پیام به سادگی به آن فایل ارجاع می دهد .یک رویکرد انعطاف پذیرتر اجازه دادن به پیام های با طول متغیر
است.
295
سیستم عامل های داخلی و اصول طراحی296.........................................................................................................................
شکل 5.19یک قالب پیام معمولی را برای سیستم عامل هایی نشان می دهد که از پیام های با طول متغیر پشتیبانی می کنند.
پیام به دو بخش تقسیم می شود :سربرگ که حاوی اطالعاتی در مورد پیام است و بدنه ای که حاوی محتوای واقعی پیام است.
هدر ممکن است حاوی شناسایی منبع و مقصد مورد نظر پیام ،یک زمینه طول ،و یک زمینه نوع برای تمایز بین انواع مختلف
پیام باشد .همچنین ممکن است اطالعات کنترلی دیگری مانند یک زمینه اشاره گر وجود داشته باشد تا بتوان لیست پیوندی از
پیام ها را ایجاد کرد .یک شماره توالی ،برای پیگیری تعداد و ترتیب پیامهای ارسال شده بین منبع و مقصد.
سادهترین رشته صفبندی ،اولین در اول خروج است ،اما اگر برخی از پیامها از سایر پیامها فوریتر باشند ،ممکن است این کافی
نباشد .یک جایگزین این است که امکان تعیین اولویت پیام ،بر اساس نوع پیام یا با تعیین توسط فرستنده فراهم شود .گزینه
دیگر این است که به گیرنده اجازه دهید صف پیام را بررسی کند و پیام بعدی را انتخاب کند.
طرد متقابل
شکل 5.20روشی را نشان می دهد که در آن می توان از ارسال پیام برای اعمال طرد متقابل استفاده کرد شکل های ،5.2 ،5.1
و 5.6را مقایسه کنید .ما استفاده از مسدود کننده دریافت اولیه و nonblockingارسال اولیه را فرض می کنیم .مجموعهای از
فرآیندهای همزمان یک صندوق پستی ،صندوقی را به اشتراک میگذارند که همه فرآیندها میتوانند از آن برای ارسال و دریافت
استفاده کنند .صندوق پستی به گونه ای تنظیم شده است که حاوی یک پیام واحد با محتوای پوچ باشد .فرآیندی که مایل به
ورود به بخش حیاتی خود است ابتدا سعی می کند پیامی را دریافت کند .اگر صندوق پستی خالی باشد ،فرآیند مسدود شده
است .هنگامی که یک فرآیند پیام را دریافت کرد ،بخش حیاتی خود را انجام می دهد و سپس پیام را دوباره در صندوق پستی
قرار می دهد .بنابراین ،پیام به عنوان نشانه ای عمل می کند که از فرآیندی به فرآیند دیگر منتقل می شود.
296
سیستم عامل های داخلی و اصول طراحی297.........................................................................................................................
راه حل قبلی فرض می کند که اگر بیش از یک فرآیند عملیات دریافت را همزمان انجام دهند ،آنگاه:
-اگر پیامی وجود داشته باشد ،فقط به یک فرآیند تحویل داده می شود و بقیه مسدود می شوند یا
-اگر صف پیام خالی باشد ،تمام فرآیندها مسدود می شوند .هنگامی که یک پیام در دسترس است ،تنها یک فرآیند مسدود شده
فعال می شود و به آن پیام داده می شود .این مفروضات تقریباً در مورد تمام امکانات ارسال پیام صادق است.
به عنوان مثالی از استفاده از ارسال پیام ،شکل 5.21راه حلی برای مشکل تولیدکننده/مصرف کننده بافر محدود است .با استفاده
از قدرت حذف متقابل اساسی در ارسال پیام ،مشکل را میتوان با ساختار الگوریتمی مشابه شکل 5.13حل کرد .در عوض،
برنامه شکل 5.21از قابلیت ارسال پیام برای ارسال داده ها عالوه بر سیگنال ها استفاده می کند .از دو صندوق پستی استفاده
می شود .همانطور که تولید کننده داده ها را تولید می کند ،به عنوان پیام به صندوق پست ارسال می شود که ممکن است
مصرف شود .تا زمانی که حداقل یک پیام در آن صندوق پستی وجود داشته باشد ،مصرف کننده می تواند مصرف کند .بنابراین
ممکن است مصرف به عنوان بافر عمل می کند .داده ها در بافر به صورت صفی از پیام ها سازماندهی می شوند" .اندازه" بافر
توسط ظرفیت متغیر جهانی تعیین می شود .در ابتدا ،صندوق پستی mayproduceبا تعدادی پیام پوچ برابر با ظرفیت بافر پر
می شود .تعداد پیام ها در mayproduceبا هر تولید کاهش می یابد و با هر مصرف افزایش می یابد.
این رویکرد کامالً منعطف است .ممکن است چندین تولید کننده و مصرف کننده وجود داشته باشد ،به شرطی که همه به هر دو
صندوق پستی دسترسی داشته باشند .حتی ممکن است این سیستم با تمام فرآیندهای تولید کننده و صندوق پستی ممکن در
یک سایت و تمام فرآیندهای مصرف کننده و صندوق پستی ممکن است در سایت دیگری توزیع شود.
297
سیستم عامل های داخلی و اصول طراحی298.........................................................................................................................
شکل 5.21راه حلی برای مشکل تولیدکننده/مصرف کننده بافر محدود با استفاده از پیام ها
5.6مشکل خوانندگان/نویسندگان
در پرداختن به طراحی مکانیسم های همگام سازی و همزمانی ،مفید است که بتوانیم مسئله در دست را به مسائل شناخته شده
مرتبط کنیم و بتوانیم هر راه حلی را از نظر توانایی آن در حل این مسائل شناخته شده آزمایش کنیم .در ادبیات ،چندین مشکل
اهمیت پیدا کرده اند و اغلب ظاهر می شوند ،هم به این دلیل که نمونه هایی از مشکالت طراحی رایج هستند و هم به دلیل
ارزش آموزشی .یکی از این مشکالت مشکل تولیدکننده/مصرف کننده است که قبال مورد بررسی قرار گرفته است .در این بخش،
ما به یک مشکل کالسیک دیگر نگاه می کنیم :مشکل خوانندگان/نویسندگان.
مشکل خواننده/نویسنده به صورت زیر تعریف می شود :یک ناحیه داده مشترک بین تعدادی از فرآیندها وجود دارد .ناحیه داده
می تواند یک فایل ،یک بلوک از حافظه اصلی یا حتی بانکی از رجیسترهای پردازنده باشد .تعدادی فرآیند وجود دارد که فقط
ناحیه داده را می خوانند خوانندگان و تعدادی نیز فقط در ناحیه داده می نویسند نویسندگان .شرایطی که باید رعایت شود به
شرح زیر است:
.3اگر نویسنده ای در حال نوشتن روی فایل باشد ،هیچ خواننده ای نمی تواند آن را بخواند.
298
سیستم عامل های داخلی و اصول طراحی299.........................................................................................................................
بنابراین ،خوانندگان فرآیندهایی هستند که الزم نیست یکدیگر را کنار بگذارند و نویسندگان فرآیندهایی هستند که ملزم به
حذف کلیه فرآیندهای دیگر ،خوانندگان و نویسندگان به طور یکسان هستند.
قبل از ادامه ،اجازه دهید این مشکل را از دو مشکل دیگر متمایز کنیم :مشکل کلی طرد متقابل و مشکل تولیدکننده/مصرف
کننده .در مشکل خوان ها/نویسندگان ،خوانندگان در ناحیه داده نیز نمی نویسند ،و همچنین نویسنده ها هنگام نوشتن ،ناحیه
داده را نمی خوانند .یک مورد کلی تر ،که شامل این مورد می شود ،اجازه دادن به هر یک از فرآیندها برای خواندن یا نوشتن
ناحیه داده است .در آن صورت ،میتوانیم هر بخشی از فرآیندی را که به ناحیه داده دسترسی دارد ،به عنوان یک بخش بحرانی
اعالم کنیم و راهحل کلی حذف متقابل را تحمیل کنیم .دلیل توجه به مورد محدودتر این است که راهحلهای کارآمدتر برای این
مورد امکانپذیر است و راهحلهای کمتر کارآمد برای مشکل کلی بهطور غیرقابل قبولی کند هستند.
به عنوان مثال ،فرض کنید که منطقه مشترک یک کاتالوگ کتابخانه است .کاربران عادی کتابخانه برای یافتن کتاب ،کاتالوگ را
مطالعه می کنند .یک یا چند کتابدار می توانند فهرست را به روز کنند .در راه حل کلی ،هر دسترسی به کاتالوگ به عنوان یک
بخش مهم تلقی می شود و کاربران مجبور می شوند کاتالوگ را یکی یکی بخوانند .این به وضوح تاخیرهای غیرقابل تحملی را
تحمیل می کند .در عین حال ،جلوگیری از تداخل نویسندگان با یکدیگر و همچنین جلوگیری از خواندن در حین انجام نوشتن
برای جلوگیری از دسترسی به اطالعات متناقض ضروری است.
آیا می توان مشکل تولیدکننده/مصرف کننده را صرفاً یک مورد خاص از مشکل خوانندگان/نویسندگان با یک نویسنده تهیه
کننده و یک خواننده واحد مصرف کننده در نظر گرفت؟ پاسخ منفی است .تهیه کننده فقط یک نویسنده نیست .باید نشانگرهای
صف را بخواند تا تعیین کند آیتم بعدی را کجا بنویسد ،و باید مشخص کند که آیا بافر پر است یا خیر .به طور مشابه ،مصرف
کننده فقط یک خواننده نیست ،زیرا باید نشانگرهای صف را طوری تنظیم کند که نشان دهد یک واحد را از بافر حذف کرده
است .اکنون دو راه حل برای مشکل را بررسی می کنیم.
شکل 5.22راه حلی با استفاده از سمافورها است که هر یک از یک خواننده و یک نویسنده را نشان می دهد .راه حل برای
چندین خواننده و نویسنده تغییر نمی کند .فرآیند نویسنده ساده است .سمافور wsemبرای اعمال طرد متقابل استفاده می
شود .تا زمانی که یک نویسنده به ناحیه داده مشترک دسترسی دارد ،هیچ نویسنده و خواننده دیگری نمی تواند به آن دسترسی
داشته باشد .فرآیند خواننده همچنین از wsemبرای اعمال طرد متقابل استفاده می کند .با این حال ،برای اجازه دادن به
چندین خواننده ،ما نیاز داریم که وقتی خوانندهای در حال مطالعه نیست ،اولین خوانندهای که سعی در خواندن دارد باید در
wsemمنتظر بماند .وقتی حداقل یک خواننده در حال مطالعه است ،خوانندگان بعدی الزم نیست قبل از ورود منتظر بمانند.
299
سیستم عامل های داخلی و اصول طراحی300.........................................................................................................................
متغیر سراسری تعداد خوانده شده برای پیگیری تعداد خوانندگان استفاده می شود و سمافور xبرای اطمینان از اینکه تعداد
خوانده شده به درستی به روز می شود استفاده می شود.
شکل 5.22راه حلی برای مشکل خوانندگان/نویسندگان با استفاده از سمافور :خوانندگان اولویت دارند
در راه حل قبلی ،خوانندگان اولویت دارند .هنگامی که یک خواننده منفرد شروع به دسترسی به ناحیه داده می کند ،این امکان
برای خوانندگان وجود دارد که کنترل ناحیه داده را تا زمانی که حداقل یک خواننده در حال خواندن باشد حفظ کنند .بنابراین،
نویسندگان در معرض گرسنگی هستند.
شکل 5.23راه حلی را نشان می دهد که تضمین می کند وقتی حداقل یکی از نویسنده ها تمایل به نوشتن را اعالم کرده است،
هیچ خواننده جدیدی اجازه دسترسی به ناحیه داده را ندارد .برای نویسندگان ،سمافورها و متغیرهای زیر به مواردی که قبالً
تعریف شدهاند اضافه میشوند:
-یک rsemسمافور که از همه خوانندگان جلوگیری می کند در حالی که حداقل یک نویسنده وجود دارد که مایل به دسترسی
به ناحیه داده است.
برای خوانندگان ،یک سمافور اضافی مورد نیاز است .نباید اجازه داد یک صف طوالنی در rsemایجاد شود .در غیر این صورت
نویسندگان نمی توانند از صف بپرند .بنابراین ،فقط یک خواننده مجاز است در rsemصف بکشد ،با هر خواننده اضافی که در
semaphore zبالفاصله قبل از انتظار در rsemصف میکشد .جدول 5.6احتماالت را خالصه می کند.
301
سیستم عامل های داخلی و اصول طراحی302.........................................................................................................................
شکل 5.23راه حلی برای مشکل خوانندگان/نویسندگان با استفاده از سمافور :نویسندگان اولویت دارند
یک راه حل جایگزین ،که به نویسندگان اولویت می دهد و با استفاده از ارسال پیام پیاده سازی می شود ،در شکل 5.24نشان
داده شده است .در این حالت ،یک فرآیند کنترل کننده وجود دارد که به منطقه داده مشترک دسترسی دارد.
سایر فرآیندهایی که مایل به دسترسی به منطقه داده هستند یک پیام درخواستی را به کنترل کننده ارسال می کنند ،با یک
پیام پاسخ " "OKبه آنها دسترسی داده می شود و تکمیل دسترسی را با یک پیام "تمام شده" نشان می دهد .کنترلر مجهز به
سه صندوق پستی است ،یکی برای هر نوع پیامی که ممکن است دریافت کند.
کنترل کننده خدمات نوشتن پیام های درخواست را قبل از خواندن پیام های درخواست پردازش می کند تا به نویسندگان
اولویت بدهد .عالوه بر این ،طرد متقابل باید اجرا شود.
302
سیستم عامل های داخلی و اصول طراحی303.........................................................................................................................
برای انجام این کار از تعداد متغیر استفاده می شود که به تعداد بیشتری از حداکثر تعداد ممکن خواننده مقداردهی اولیه می
شود .در این مثال از مقدار استفاده می کنیم
-اگر تعداد > 0باشد ،هیچ نویسنده ای منتظر نیست و ممکن است خواننده فعال باشد یا نباشد .ابتدا همه پیامهای «تمامشده»
را برای پاک کردن خوانندگان فعال سرویس دهید .سپس درخواست های نوشتن را سرویس کنید و سپس درخواست ها را
بخوانید.
-اگر count = 0باشد ،تنها درخواست باقی مانده یک درخواست نوشتن است .به نویسنده اجازه دهید ادامه دهد و منتظر پیام
«تمام شد».
-اگر تعداد < 0باشد ،یک نویسنده درخواستی داده است و منتظر می ماند تا همه خوانندگان فعال را پاک کند .بنابراین ،فقط
پیامهای «تمامشده» باید سرویس شوند.
303
سیستم عامل های داخلی و اصول طراحی304.........................................................................................................................
5.7خالصه
موضوع اصلی سیستمعاملهای مدرن ،چندبرنامهنویسی ،پردازش چندگانه و پردازش توزیعشده است .اساسی برای این مضامین،
و اساسی برای فن آوری طراحی سیستم عامل ،همزمانی است .هنگامی که چندین فرآیند به طور همزمان اجرا می شوند ،چه در
مورد یک سیستم چند پردازنده ای و چه بطور مجازی در مورد یک سیستم برنامه نویسی چند پردازنده تک پردازنده ،مسائل
مربوط به حل تعارض و همکاری ایجاد می شود.
فرآیندهای همزمان ممکن است به طرق مختلفی با هم تعامل داشته باشند .فرآیندهایی که از یکدیگر بی اطالع هستند ،ممکن
است برای منابعی مانند زمان پردازنده یا دسترسی به دستگاه های ورودی/خروجی رقابت کنند .فرآیندها ممکن است به طور
غیرمستقیم از یکدیگر آگاه باشند زیرا آنها دسترسی به یک شیء مشترک ،مانند یک بلوک از حافظه اصلی یا یک فایل را به
اشتراک می گذارند .در نهایت ،فرآیندها ممکن است به طور مستقیم از یکدیگر آگاه باشند و با تبادل اطالعات همکاری کنند.
مسائل کلیدی که در این تعامالت به وجود می آید طرد و وقفه متقابل است.
طرد متقابل شرایطی است که در آن مجموعه ای از فرآیندهای همزمان وجود دارد که تنها یکی از آنها قادر به دسترسی به یک
منبع معین یا انجام یک عملکرد معین در هر زمان است .تکنیکهای طرد متقابل را میتوان برای حل تعارضها ،مانند رقابت
برای منابع ،و همگامسازی فرآیندها بهمنظور همکاری آنها استفاده کرد .نمونه دومی مدل تولید کننده/مصرف کننده است که در
آن یک فرآیند داده ها را در یک بافر قرار می دهد و یک یا چند فرآیند در حال استخراج داده ها از آن بافر هستند.
یک رویکرد برای حمایت از طرد متقابل شامل استفاده از دستورالعملهای ماشینی با هدف خاص است .این روش سربار را
کاهش می دهد اما همچنان ناکارآمد است زیرا از انتظار مشغول است.
رویکرد دیگر برای حمایت از طرد متقابل ،ارائه ویژگیهای درون سیستمعامل است .دو تا از رایج ترین تکنیک ها سمافورها و
امکانات پیام هستند .سمافورها برای سیگنال دهی در بین فرآیندها استفاده می شوند و می توانند به آسانی برای اجرای نظم و
انضباط طرد متقابل استفاده شوند .پیام ها برای اجرای طرد متقابل مفید هستند و همچنین ابزار مؤثری برای ارتباط بین
فرآیندی فراهم می کنند.
304
سیستم عامل های داخلی و اصول طراحی305.........................................................................................................................
5.8توصیه به خواندن
کتاب کوچک سمافورها 291صفحه DOWN08نمونه های متعددی از کاربرد سمافورها را ارائه می دهد .رایگان آنالین در
دسترس است.
ANDR83و BEN06بسیاری از مکانیسم های شرح داده شده در این فصل را بررسی می کنند RAYN86 .مجموعهای
جامع و شفاف از الگوریتمها برای حذف متقابل است که نرمافزار مانند Dekkerو رویکردهای سختافزاری و همچنین
سمافورها و پیامها را پوشش میدهد HOAR85 .یک کالسیک بسیار خوانا است که رویکردی رسمی برای تعریف فرآیندهای
متوالی و همزمانی ارائه می دهد LAMP86 .یک درمان رسمی طوالنی مدت طرد متقابل است RUDO90 .کمک مفیدی
برای درک همزمانی است BACO03 .یک درمان به خوبی سازماندهی شده برای همزمانی است BIRR89 .مقدمه عملی
خوبی برای برنامه نویسی با استفاده از همزمانی ارائه می دهد BUHR95 .یک بررسی جامع از مانیتورها استKANG98 .
یک تحلیل آموزنده از 12خط مشی زمانبندی مختلف برای مشکل خوانندگان/نویسندگان است.
GOTT12نگاهی روشنگرانه به مشکالتی است که می توان با استفاده از mutexesبا ++Cایجاد کرد LU08 .نگاهی عالی
به انواع اشکاالت همزمانی که معموالً ظاهر می شوند ارائه می دهد.
.G ،ANDR83 Andrewsو " .F ،Schneiderمفاهیم و نمادها برای برنامه نویسی همزمان ".بررسی های محاسباتی،
مارس .1983
BACO03بیکن ،جی ،و هریس ،تی .سیستم عامل :طراحی نرم افزار همزمان و توزیع شده .ریدینگ :MA ،ادیسون-وسلی،
.2003
BEN06بن آری .M ،اصول برنامه نویسی همزمان و توزیع شده .هارلو ،انگلستان :ادیسون-وسلی.2006 ،
.A ،BIRR89 Birrellمقدمه ای بر برنامه نویسی با موضوعاتSRC Research Report 35, Compaq Systems .
.Research Center, Palo Alto, CAژانویه .1989موجود در
http://www.hpl.hp.com/techreports/Compaq-DEC
،BUHR95 Buhr, P., and Fortier, M. "Classification Monitor." ACM Computing Surveysمارس
.1995
305
سیستم عامل های داخلی و اصول طراحی306.........................................................................................................................
،.J ،GOTT12 Gottschlichو " .H ،Boehmچرا قفل ها نباید در برنامه نویسی عمومی استفاده شوندHP ".
،HPL-2012-246 ،Laboratoriesدسامبر .2012
.HOAR85 Hoare, Cارتباط فرآیندهای متوالی.1985 ،NJ: Prentice-Hall ،Englewood Cliffs .
.S ،KANG98 Kangو " .Lee, Jتحلیل و راه حل سیاست های غیر پیشگیرانه برای برنامه ریزی خوانندگان و نویسندگان".
بررسی سیستم عامل ها ،جوالی .1998
LU08لو ،اس ،.و همکاران" .یادگیری از اشتباهات -یک مطالعه جامع در مورد ویژگی های اشکال همزمانی در دنیای واقعی".
،ACM ASPLOS’08مارس .2008
تصاویر متحرک
مجموعه ای از انیمیشن که مفاهیم این فصل را نشان می دهد در وب سایت Premiumموجود است .خواننده تشویق می شود
که انیمیشن ها را برای تقویت مفاهیم این فصل مشاهده کند.
306
سیستم عامل های داخلی و اصول طراحی307.........................................................................................................................
شرایط کلیدی
بررسی سواالت
.5.1چهار موضوع طراحی را که مفهوم همزمانی برای آنها مرتبط است فهرست کنید.
.5.4سه درجه از آگاهی بین فرآیندها را فهرست کرده و هر کدام را به اختصار تعریف کنید.
.5.6سه مشکل کنترل مرتبط با فرآیندهای رقیب را فهرست کرده و هر کدام را به طور خالصه تعریف کنید.
.5.11مانیتور چیست؟
چالش ها و مسائل
.5.1در ابتدای بخش ،5.1بیان شده است که چندبرنامهنویسی و چند پردازش با توجه به همزمانی ،مشکالت مشابهی دارند .این
تا آنجا که پیش می رود درست است .با این حال ،دو تفاوت را از نظر همزمانی بین چندبرنامهنویسی و چند پردازش ذکر کنید.
.5.2فرآیندها و رشتهها ابزار ساختاری قدرتمندی برای اجرای برنامههایی هستند که بسیار پیچیدهتر از برنامههای متوالی ساده
هستند .ساختار قبلی که برای بررسی آموزنده است ،کوروتین است .هدف از این مشکل معرفی کوروتین ها و مقایسه آنها با
فرآیندها است .این مشکل ساده از CONW63را در نظر بگیرید:
کارت های 80ستونی را بخوانید و با تغییرات زیر روی خطوط 125کاراکتری چاپ کنید .بعد از هر تصویر کارت ،یک جای
خالی اضافی درج می شود ،و هر جفت ستاره مجاور ** روی کارت با کاراکتر جایگزین می شود.
آ .یک راه حل برای این مشکل به عنوان یک برنامه متوالی معمولی ایجاد کنید .متوجه خواهید شد که نوشتن برنامه دشوار است.
تعامالت بین عناصر مختلف برنامه به دلیل تبدیل از طول 80به 125ناهموار است .عالوه بر این ،طول تصویر کارت ،پس از
تبدیل ،بسته به تعداد دفعات ستاره دوتایی متفاوت خواهد بود .یکی از راههای بهبود وضوح و به حداقل رساندن احتمال بروز
اشکال ،نوشتن برنامه بهعنوان سه رویه جداگانه است .اولین رویه در تصاویر کارت خوانده می شود ،هر تصویر را با یک جای
خالی قرار می دهد و جریانی از کاراکترها را در یک فایل موقت می نویسد .بعد از اینکه همه کارت ها خوانده شدند ،رویه دوم
فایل موقت را می خواند ،کاراکتر را جایگزین می کند و فایل موقت دوم را می نویسد .روش سوم جریان کاراکترها را از فایل
موقت دوم می خواند و خطوطی با 125کاراکتر را چاپ می کند.
ب راه حل متوالی به دلیل سربار I/Oو فایل های موقت جذاب نیست .کانوی شکل جدیدی از ساختار برنامه را پیشنهاد کرد،
کوروتین ،که به برنامه اجازه می دهد تا به صورت سه برنامه متصل شده توسط بافرهای یک کاراکتری نوشته شود شکل .5.25
در یک روش سنتی ،یک رابطه master/slaveبین رویه فراخوانی و فراخوانی وجود دارد .رویه فراخوانی ممکن است یک
فراخوانی را از هر نقطه از رویه اجرا کند .رویه فراخوانی شده در نقطه ورود شروع می شود و در نقطه فراخوانی به رویه فراخوانی
308
سیستم عامل های داخلی و اصول طراحی309.........................................................................................................................
باز می گردد .کوروتین رابطه متقارن تری را نشان می دهد .با انجام هر فراخوانی ،اجرا از آخرین نقطه فعال در رویه فراخوانی
شده طول می کشد .از آنجایی که هیچ مفهومی وجود ندارد که فرآیند فراخوانی «باالتر» از فراخوانی باشد ،بازگشتی وجود ندارد.
در عوض ،هر کوروتینی می تواند با دستور رزومه ،کنترل را به هر کوروتین دیگری منتقل کند .اولین باری که یک کوروتین
فراخوانی می شود ،در نقطه ورودی آن "از سر گرفته می شود" .متعاقباً ،کوروتین در نقطه آخرین دستور رزومه خود دوباره فعال
می شود .توجه داشته باشید که تنها یک روال مشترک در یک برنامه می تواند در یک زمان در حال اجرا باشد و نقاط انتقال به
صراحت در کد تعریف شده اند ،بنابراین این نمونه ای از پردازش همزمان نیست .عملکرد برنامه را در شکل 5.25توضیح دهید.
ج این برنامه به شرایط خاتمه رسیدگی نمی کند .فرض کنید که مسیر I/O
tine READCARDاگر یک تصویر 80کاراکتری را در inbufقرار داده باشد مقدار trueرا برمی گرداند .در غیر این
صورت falseبرمی گردد .برنامه را طوری تغییر دهید که این احتمال را شامل شود .توجه داشته باشید که آخرین خط چاپ
شده ممکن است کمتر از 125کاراکتر داشته باشد.
309
سیستم عامل های داخلی و اصول طراحی310.........................................................................................................................
توجه داشته باشید که زمانبند در یک سیستم تکپردازنده ،اجرای شبه موازی این دو فرآیند همزمان را با درهمآمیزی
دستورالعملهای آنها ،بدون محدودیت در ترتیب ،interleavingاجرا میکند.
آ .دنبالهای را نشان دهید یعنی دنبالهای از گزارهها را دنبال کنید بهگونهای که عبارت « xاست »10چاپ شود.
ب دنباله ای را نشان دهید که عبارت " "x is 8چاپ شود .باید به خاطر داشته باشید که افزایش/کاهش در سطح زبان مبدأ به
صورت اتمی انجام نمی شود ،یعنی کد زبان اسمبلی:
آ .کران پایینی مناسب و کران باالیی را روی مقدار نهایی خروجی محاسبه متغیر مشترک توسط این برنامه همزمان تعیین کنید.
فرض کنید فرآیندها می توانند با هر سرعت نسبی اجرا شوند و یک مقدار فقط پس از بارگذاری در یک ثبات توسط یک
دستورالعمل ماشین جداگانه می تواند افزایش یابد.
ب فرض کنید که تعداد دلخواه از این فرآیندها طبق مفروضات قسمت الف مجاز به اجرای موازی هستند .این اصالح چه تأثیری
بر دامنه مقادیر نهایی شمارش خواهد داشت؟
.5.5آیا انتظار مشغول همیشه کارایی کمتری از نظر استفاده از زمان پردازنده نسبت به انتظار مسدود کردن دارد؟ توضیح.
310
سیستم عامل های داخلی و اصول طراحی311.........................................................................................................................
این راهحل نرمافزاری برای مشکل حذف متقابل برای دو فرآیند در HYMA66پیشنهاد شدهاست .یک مثال متضاد پیدا کنید
که نشان دهد این راه حل نادرست است .جالب است بدانید که حتی ارتباطات ACMنیز در این مورد فریب خورده است.
.5.7یک رویکرد نرمافزاری برای حذف متقابل ،الگوریتم نانوایی المپورت LAMP74است ،که به این دلیل نامیده میشود ،زیرا
مبتنی بر رویه در نانواییها و مغازههای دیگر است که در آن هر مشتری در بدو ورود یک بلیت شمارهدار دریافت میکند و به هر
کدام به نوبه خود امکان ارائه خدمات را میدهد .الگوریتم به شرح زیر است:
آرایه های انتخاب و شماره به ترتیب به falseو 0مقداردهی اولیه می شوند .عنصر iهر آرایه ممکن است توسط فرآیند i
خوانده و نوشته شود ،اما فقط توسط فرآیندهای دیگر خوانده شود .نماد a, b < c, dبه صورت زیر تعریف می شود:
311
سیستم عامل های داخلی و اصول طراحی312.........................................................................................................................
.5.8اکنون نسخه ای از الگوریتم نانوایی را بدون انتخاب متغیر در نظر بگیرید .سپس ما داریم
آیا این نسخه انحراف متقابل را نقض می کند؟ توضیح دهید چرا یا چرا نه.
.5.9برنامه زیر را در نظر بگیرید که یک رویکرد نرم افزاری برای حذف متقابل ارائه می دهد:
کنترل آرایه عدد صحیح ;N: 1عدد صحیح kکه در آن ،k ≤ N ≤ 1و هر عنصر "کنترل" 1 ،0است ،یا .2تمام عناصر
"کنترل" در ابتدا صفر هستند .مقدار اولیه kغیر مادی است .برنامه فرآیند ith 1 ≤ i ≤ Nاست
به این الگوریتم Eisenberg-McGuireگفته می شود .عملکرد و ویژگی های کلیدی آن را توضیح دهید.
312
سیستم عامل های داخلی و اصول طراحی313.........................................................................................................................
.5.11هنگامی که یک دستورالعمل ماشین خاص برای ارائه استثنای متقابل در مد شکل 5.2استفاده می شود ،هیچ کنترلی بر
روی مدت زمانی که یک فرآیند باید قبل از دسترسی به بخش حیاتی خود منتظر بماند وجود ندارد .الگوریتمی ابداع کنید که از
دستور مقایسه&تغییر استفاده میکند اما تضمین میکند که هر فرآیندی که منتظر ورود به بخش حیاتی خود است ،این کار را
در n-1نوبت انجام میدهد ،جایی که nتعداد فرآیندهایی است که ممکن است نیاز به دسترسی به بخش بحرانی داشته باشند و
یک "نوبت" است .یک رویداد متشکل از یک فرآیند خروج از بحرانی بخش و فرآیند دیگری که به آن دسترسی داده شده است.
این مجموعه از تعاریف را با شکل 5.3مقایسه کنید .توجه داشته باشید یک تفاوت :با تعریف قبلی ،سمافور هرگز نمی تواند
ارزش منفی داشته باشد .آیا تفاوتی در تأثیر دو مجموعه از تعاریف هنگام استفاده در برنامه ها وجود دارد؟ یعنی آیا می توانید
بدون تغییر معنای برنامه ،یک مجموعه را جایگزین دیگری کنید؟
.5.13یک منبع قابل اشتراک گذاری با ویژگی های زیر را در نظر بگیرید 1 :تا زمانی که کمتر از سه فرآیند از منبع استفاده می
کنند ،فرآیندهای جدید می توانند بالفاصله از آن استفاده کنند 2 .هنگامی که سه فرآیند از منبع استفاده می کنند ،هر سه باید
قبل از شروع هر فرآیند جدیدی از آن استفاده کنند .میدانیم که شمارندهها برای پیگیری تعداد فرآیندهای منتظر و فعال مورد
نیاز هستند ،و این شمارندهها خود منابع مشترکی هستند که باید با طرد متقابل محافظت شوند .بنابراین ممکن است راه حل
زیر را ایجاد کنیم:
313
سیستم عامل های داخلی و اصول طراحی314.........................................................................................................................
به نظر می رسد که راه حل همه چیز را به درستی انجام می دهد :همه دسترسی ها به متغیرهای مشترک با طرد متقابل
محافظت می شوند ،فرآیندها خود را مسدود نمی کنند در حالی که در طرد متقابل ،در صورت وجود یا وجود سه کاربر فعال ،از
استفاده از منبع فرآیندهای جدید جلوگیری می شود .و آخرین فرآیند خروج حداکثر سه فرآیند انتظار را از حالت انسداد خارج
می کند.
آ .با این حال برنامه نادرست است .توضیح دهد که چرا.
ب فرض کنید اگر در خط 6را به مقداری تغییر دهیم .آیا با این کار مشکلی در برنامه حل می شود؟ آیا هیچ مشکلی باقی می
ماند؟
314
سیستم عامل های داخلی و اصول طراحی315.........................................................................................................................
آ .توضیح دهید که این برنامه چگونه کار می کند و چرا درست است.
ب این راه حل به طور کامل مانع از برش فرآیندهای تازه وارد نمی شود ،اما احتمال آن را کاهش می دهد .مثالی از برش در خط
بزنید.
ج این برنامه نمونه ای از یک الگوی طراحی کلی است که روشی یکسان برای پیاده سازی راه حل های بسیاری از مسائل
همزمانی با استفاده از سمافورها است .از آن به عنوان الگوی I'll Do It For Youنام برده شده است .الگو را شرح دهید.
315
سیستم عامل های داخلی و اصول طراحی316.........................................................................................................................
آ .توضیح دهید که این برنامه چگونه کار می کند و چرا درست است.
ب آیا این راه حل از نظر تعداد فرآیندهایی که در یک زمان می توان آن را باز کرد با راه حل قبلی متفاوت است؟ توضیح.
ج این برنامه نمونه ای از یک الگوی طراحی کلی است که روشی یکسان برای پیاده سازی راه حل های بسیاری از مسائل
همزمانی با استفاده از سمافورها است .از آن به عنوان الگوی Pass The Batonیاد شده است .الگو را شرح دهید.
.5.16پیاده سازی سمافورهای عمومی با استفاده از سمافورهای باینری باید امکان پذیر باشد .ما می توانیم از عملیات
semWaitBو semSignalBو دو سمافور باینری ،تاخیر و mutexاستفاده کنیم .موارد زیر را در نظر بگیرید:
316
سیستم عامل های داخلی و اصول طراحی317.........................................................................................................................
در ابتدا s ،به مقدار سمافور مورد نظر تنظیم می شود .هر عملیات semWait sرا کاهش می دهد و هر عملیات semSignal
sرا افزایش می دهد mutex .سمافور باینری ،که به 1مقداردهی اولیه شده است ،اطمینان می دهد که برای به روز رسانی s
استثنا وجود دارد .تاخیر سمافور باینری که به 0مقداردهی اولیه می شود ،برای مسدود کردن فرآیندها استفاده می شود.
در برنامه قبلی یک نقص وجود دارد .نقص را نشان دهید و تغییری پیشنهاد دهید که آن را برطرف کند .نکته :فرض کنید هر
یک از دو فرآیند semWaitsرا فراخوانی می کنند ،زمانی که sدر ابتدا 0است ،و بعد از اینکه اولی به تازگی
semSignalBmutexرا انجام داد اما semWaitBتاخیر را انجام نداد ،تماس دوم به semWaitsبه همان صورت ادامه می
یابد .نقطه .تنها کاری که باید انجام دهید این است که یک خط از برنامه را جابجا کنید.
.5.17در سال ،1978دایکسترا این حدس را مطرح کرد که هیچ راه حلی برای مشکل طرد متقابل اجتناب از گرسنگی وجود
ندارد ،که برای تعداد ناشناخته اما محدودی از فرآیندها ،با استفاده از تعداد محدودی از سمافورهای ضعیف قابل اعمال است .در
سال ،1979جی ام موریس با انتشار الگوریتمی با استفاده از سه سمافور ضعیف ،این حدس را رد کرد .رفتار الگوریتم را می توان
به صورت زیر توصیف کرد :اگر یک یا چند فرآیند در یک عملیات semWaitSمنتظر باشند و فرآیند دیگری semSignalS
را اجرا کند ،مقدار سمافور Sتغییر نمی کند و یکی از فرآیندهای انتظار مستقل از semWaitSمسدود می شوند .جدای از سه
سمافور ،الگوریتم از دو متغیر صحیح غیر منفی به عنوان شمارنده تعداد فرآیندها در بخش های خاصی از الگوریتم استفاده می
کند .بنابراین ،سمافورهای Aو Bبه 1مقداردهی اولیه می شوند ،در حالی که سمافور Mو شمارنده های NAو NMبه 0
مقداردهی اولیه می شوند .سمافور حذف متقابل Bاز دسترسی به متغیر مشترک NAمحافظت می کند .فرآیندی که تالش
میکند وارد بخش حیاتی خود شود باید از دو مانع که با سمافورهای Aو Mنشان داده میشوند عبور کند .شمارندههای NA
و NMبه ترتیب شامل تعداد فرآیندهایی هستند که آماده عبور از مانع Aو فرآیندهایی هستند که قبالً از مانع Aعبور
کردهاند اما هنوز از مانع Mعبور نکردهاند .در بخش دوم پروتکل ،فرآیندهای NMمسدود شده در Mبا استفاده از تکنیک
آبشاری مشابه آنچه در قسمت اول استفاده شد ،وارد بخشهای بحرانی خود میشوند .الگوریتمی را تعریف کنید که با این
توضیحات مطابقت داشته باشد.
پارک ژوراسیک متشکل از موزه دایناسورها و پارکی برای سافاری سواری است .تعداد مسافر و nماشین تک سرنشین وجود
دارد .مسافران مدتی در موزه پرسه می زنند ،سپس برای سوار شدن به یک ماشین سافاری صف می کشند .هنگامی که یک
ماشین در دسترس است ،یک مسافر را که می تواند نگه دارد بار می کند و برای مدت زمان تصادفی در اطراف پارک می چرخد.
اگر خودروهای nهمگی خارج از مسافران هستند ،مسافری که می خواهد سوار شود منتظر می ماند .اگر ماشینی آماده بارگیری
317
سیستم عامل های داخلی و اصول طراحی318.........................................................................................................................
باشد اما مسافری منتظر نباشد ،ماشین منتظر می ماند .از سمافورها برای همگام سازی فرآیندهای mمسافر و nفرآیند خودرو
استفاده کنید.
کد اسکلت زیر روی یک کاغذ پاره در کف اتاق امتحان پیدا شد .از نظر صحت آن را درجه بندی کنید .نحو و اعالن های متغیر
از دست رفته را نادیده بگیرید .به یاد داشته باشید که Pو Vمربوط به semWaitو semSignalهستند.
.5.19در تفسیر شکل 5.9و جدول ،5.4بیان شد که "این کار به سادگی انتقال عبارت شرطی به داخل بخش بحرانی کنترل
شده توسط sمصرف کننده انجام نمی شود زیرا این امر می تواند منجر به وقفه شود ".این را با جدولی مشابه جدول 5.4نشان
دهید.
.5.20راه حل مشکل تولید کننده/مصرف کننده بافر بی نهایت تعریف شده در شکل 5.10را در نظر بگیرید .فرض کنید ما یک
مورد متداول داریم که در آن تولید کننده و مصرف کننده تقریباً با سرعت یکسانی کار می کنند .سناریو می تواند این باشد:
سازنده :ضمیمه; ;semSignalتولید کردن؛ … ضمیمه ;semSignalتولید کردن؛ … مصرف کننده :مصرف کردن; …
گرفتن ;semWaitمصرف کردن؛ … گرفتن … ;semWaitتولید کننده همیشه موفق می شود یک عنصر جدید را در حین
مصرف عنصر قبلی توسط مصرف کننده به بافر و سیگنال اضافه کند .تولید کننده همیشه به یک بافر خالی اضافه می کند و
مصرف کننده همیشه تنها مورد موجود در بافر را می گیرد .اگرچه مصرف کننده هرگز سمافور را مسدود نمی کند ،تعداد زیادی
تماس با مکانیسم سمافور برقرار می شود که سربار قابل توجهی ایجاد می کند.
برنامه جدیدی بسازید که در این شرایط کارآمدتر باشد .نکات :به nاجازه دهید مقدار 1-را داشته باشد ،به این معنی که نه تنها
بافر خالی است ،بلکه مصرف کننده این واقعیت را تشخیص داده است و تا زمانی که تولیدکننده داده های جدیدی را ارائه نکند،
مسدود می شود .راه حل نیازی به استفاده از متغیر محلی mموجود در شکل 5.10ندارد.
.5.21شکل 5.13را در نظر بگیرید .آیا در صورت تعویض موارد زیر ،معنای برنامه تغییر می کند؟
318
سیستم عامل های داخلی و اصول طراحی319.........................................................................................................................
.5.22شبه کد زیر پیاده سازی صحیح مشکل تولیدکننده/مصرف کننده با بافر محدود است:
برچسبهای p1, p2, p3و c1, c2, c3به خطوط کد نشان داده شده در باال اشاره دارد p2و c2هر کدام سه خط کد را
پوشش میدهند .سمافورهای خالی و پر ،سمافورهای خطی هستند که می توانند مقادیر منفی و مثبت نامحدود بگیرند .چندین
فرآیند تولید کننده وجود دارد که به آنها Pc ،Pb ،Paو غیره گفته می شود ،و فرآیندهای مصرف کننده متعددی وجود دارد
که به عنوان ،Cc ،Cb ،Caو غیره نامیده می شود .فرآیندهای مسدود شده در نمودار زمان بندی زیر ،هر خط نشان دهنده
وضعیت بافر و سمافورها پس از اجرای برنامه ریزی شده است .برای سادهتر کردن ،فرض میکنیم که زمانبندی به گونهای است
که فرآیندها در حین اجرای یک بخش معین از کد ،p1یا … ،p2یا c3هرگز قطع نمیشوند .وظیفه شما تکمیل نمودار زیر
است.
319
سیستم عامل های داخلی و اصول طراحی320.........................................................................................................................
.5.23این مشکل استفاده از سمافورها را برای هماهنگ کردن سه نوع فرآیند نشان میدهد 6.بابانوئل در مغازهاش در قطب
شمال میخوابد و فقط میتوان آن را بیدار کرد 1هر نه گوزن شمالی که از تعطیالت خود در اقیانوس آرام جنوبی برگشته
باشند .یا 2برخی از الف ها در ساخت اسباب بازی مشکل دارند .الف ها برای اینکه اجازه دهند بابانوئل کمی بخوابد ،فقط زمانی
می توانند او را بیدار کنند که سه نفر از آنها مشکل داشته باشند .وقتی سه الف در حال حل مشکالت خود هستند ،هر الف
دیگری که مایل به دیدار بابانوئل است باید منتظر باشد تا آن الف ها برگردند .اگر بابانوئل از خواب بیدار شود و سه الف را ببیند
که در مغازهاش منتظرند و آخرین گوزن شمالی که از مناطق استوایی برگشته است ،بابانوئل تصمیم گرفته است که الفها
میتوانند تا بعد از کریسمس صبر کنند ،زیرا مهمتر است که سورتمه او را آماده کند . .فرض میرود که گوزنهای شمالی
نمیخواهند مناطق استوایی را ترک کنند و بنابراین تا آخرین لحظه ممکن در آنجا میمانند .آخرین گوزن شمالی که وارد
میشود باید بابانوئل را بگیرد در حالی که بقیه در یک کلبه گرمکننده منتظر میمانند تا به دام بیفتند .سورتمه این مشکل را با
استفاده از سمافورها حل کنید.
آ .پیاده سازی ارسال پیام با استفاده از سمافورها .نکته :از یک ناحیه بافر مشترک برای نگهداری صندوق های پستی استفاده
کنید که هر کدام از آرایه ای از اسالت پیام تشکیل شده است.
ب پیاده سازی سمافور با استفاده از ارسال پیام نکته :یک فرآیند همگام سازی جداگانه را معرفی کنید.
.5.25توضیح دهید که مشکل این اجرای مسئله تکنویسنده چند خوان چیست؟
320
سیستم عامل های داخلی و اصول طراحی321.........................................................................................................................
فصل 6
6.1اصول وقفه
نمودارهای تخصیص منابع منابع قابل مصرف منابع قابل استفاده مجدد شرایط برای وقفه
6.2پیشگیری از وقفه
6.3اجتناب از وقفه
6.4تشخیص وقفه
6.12خالصه
اهداف یادگیری
-پیشگیری از وقفه را تعریف کنید و راهبردهای پیشگیری از وقفه را در رابطه با هر یک از شرایط وقفه شرح دهید.
-تفاوت اساسی در رویکرد بین تشخیص وقفه و پیشگیری یا اجتناب از وقفه را توضیح دهید.
-روش های همزمانی و همگام سازی مورد استفاده در یونیکس ،لینوکس ،سوالریس ،ویندوز و اندروید را توضیح دهید.
این فصل دو مشکل را بررسی میکند که همه تالشها برای پشتیبانی از پردازش همزمان را آزار میدهد :بنبست و گرسنگی .ما
با بحث در مورد اصول اساسی وقفه و مشکل مربوط به گرسنگی شروع می کنیم .سپس سه رویکرد رایج برای مقابله با وقفه را
بررسی می کنیم :پیشگیری ،تشخیص و اجتناب .سپس به یکی از مسائل کالسیک که برای نشان دادن مسائل مربوط به همگام
سازی و وقفه استفاده می شود نگاه می کنیم :مسئله فیلسوفان غذاخوری.
322
سیستم عامل های داخلی و اصول طراحی323.........................................................................................................................
مانند فصل ،5بحث در این فصل به بررسی همزمانی و وقفه در یک سیستم محدود می شود .اقدامات برای مقابله با مشکالت
وقفه توزیع شده در فصل 18ارزیابی شده است .انیمیشنی که وقفه را نشان می دهد به صورت آنالین در دسترس است .برای
دسترسی ،روی کره در حال چرخش در WilliamStallings.com/OS/OS7e.htmlکلیک کنید.
6.1اصول وقفه
وقفه را می توان به عنوان مسدود کردن دائمی مجموعه ای از فرآیندها تعریف کرد که یا برای منابع سیستم رقابت می کنند یا با
یکدیگر ارتباط برقرار می کنند .هنگامی که هر فرآیند در مجموعه در انتظار یک رویداد معموالً آزاد شدن برخی از منابع
درخواستی که فقط می تواند توسط یک فرآیند مسدود شده دیگر در مجموعه راه اندازی شود ،مجموعه ای از فرآیندها به وقفه
می رسد .وقفه دائمی است زیرا هیچ یک از رویدادها هرگز آغاز نمی شود .برخالف سایر مشکالت در مدیریت فرآیند همزمان،
هیچ راه حل کارآمدی در حالت کلی وجود ندارد.
همه وقفه ها شامل نیازهای متناقض برای منابع توسط دو یا چند فرآیند است .یک مثال رایج ،وقفه ترافیکی است .شکل a6.1
وضعیتی را نشان می دهد که در آن چهار اتومبیل تقریباً در یک زمان به یک تقاطع توقف چهار طرفه رسیده اند .چهار ربع
تقاطع منابعی هستند که کنترل روی آنها الزم است .به ویژه ،اگر هر چهار خودرو بخواهند مستقیماً از تقاطع عبور کنند ،منابع
مورد نیاز به شرح زیر است:
-ماشین ،1در حال حرکت به سمت شمال ،به ربع aو bنیاز دارد.
قانون جاده در Statesمتحده این است که یک اتومبیل در یک توقف چهار طرفه باید بالفاصله به اتومبیلی که در سمت راست
آن قرار دارد موکول کند .این قانون اگر فقط دو یا سه ماشین در تقاطع وجود داشته باشد کار می کند .به عنوان مثال ،اگر فقط
خودروهای شمال و غرب به تقاطع برسند ،خودروی شمال منتظر خواهد ماند و ماشین به سمت غرب ادامه میدهد .اما اگر هر
چهار خودرو تقریباً در یک زمان وارد شوند و هر چهار خودرو از این قانون پیروی کنند ،هر کدام از ورود به چهارراه خودداری
میکنند .این باعث یک وقفه بالقوه می شود .این فقط یک وقفه بالقوه است ،زیرا منابع الزم برای ادامه حرکت هر یک از خودروها
در دسترس است .اگر یک خودرو در نهایت تصمیم به ادامه کار بگیرد ،می تواند این کار را انجام دهد.
323
سیستم عامل های داخلی و اصول طراحی324.........................................................................................................................
با این حال ،اگر هر چهار خودرو قوانین را نادیده بگیرند و همزمان با احتیاط وارد تقاطع شوند ،هر خودرو یک منبع یک ربع را
تصاحب می کند اما نمی تواند ادامه دهد زیرا منبع دوم مورد نیاز قبالً توسط ماشین دیگری توقیف شده است .این یک وقفه
واقعی است .اجازه دهید اکنون به تصویری از وقفه مربوط به فرآیندها و منابع رایانه نگاه کنیم .شکل 6.2که از آن به عنوان
نمودار پیشرفت مشترک یاد می کنیم ،پیشرفت دو فرآیند را نشان می دهد که برای دو منبع رقابت می کنند .هر فرآیند نیاز به
استفاده انحصاری از هر دو منبع برای یک دوره زمانی معین دارد .دو فرآیند Pو Qشکل کلی زیر را دارند:
324
سیستم عامل های داخلی و اصول طراحی325.........................................................................................................................
در شکل ،6.2محور xپیشرفت در اجرای Pو محور yنشان دهنده پیشرفت در اجرای Qاست .بنابراین پیشرفت مشترک دو
فرآیند با مسیری نشان داده می شود که از مبدا در جهت شمال شرقی پیش می رود . .برای یک سیستم تک پردازنده ،تنها یک
فرآیند در هر زمان ممکن است اجرا شود ،و مسیر شامل بخش های افقی و عمودی متناوب است ،با یک بخش افقی نشان
دهنده دوره زمانی که Pاجرا می شود و Qمنتظر می ماند و یک بخش عمودی نشان دهنده دوره ای است که Qاجرا می شود
و .Pمنتظر می ماند شکل مناطقی را نشان می دهد که هر دو Pو Qبه منبع Aنیاز دارند خطوط اریب رو به باال .هر دو Pو
Qبه منبع Bنیاز دارند خطوط اریب رو به پایین .و Pو Qهر دو به هر دو منبع نیاز دارند .از آنجایی که فرض میکنیم هر
فرآیندی نیاز به کنترل انحصاری هر منبعی دارد ،اینها همه مناطق ممنوعه هستند .یعنی هیچ مسیری که پیشرفت اجرای
مشترک Pو Qرا نشان می دهد غیرممکن است وارد این مناطق شود.
در شکل شش مسیر اجرای مختلف نشان داده شده است .این موارد را می توان به صورت زیر خالصه کرد:
Q B .1و سپس Aرا بدست می آورد و سپس Bو Aرا آزاد می کند .وقتی Pاجرا را از سر گرفت ،می تواند هر دو منبع را
بدست آورد.
Q B .2را بدست می آورد و سپس A. Pرا اجرا می کند و در یک درخواست برای Aبالک می کند Q B .و Aرا آزاد می
کند .وقتی Pاجرا را از سر گرفت ،می تواند هر دو منبع را بدست آورد.
Q B .3را بدست می آورد و سپس P Aرا بدست می آورد .وقفه اجتناب ناپذیر است ،زیرا با ادامه اجرا Q ،روی Aمسدود می
شود و Pروی Bمسدود می شود.
P A .4را بدست می آورد و سپس Qبه Bمی رسد .وقفه اجتناب ناپذیر است ،زیرا با ادامه اجرا Q ،روی Aمسدود می شود و
Pروی Bمسدود می شود.
P A .5را بدست می آورد و سپس Bرا اجرا می کند و در یک درخواست برای Bمسدود می کند P A .و Bرا آزاد می کند.
وقتی Qاجرا را از سر گرفت ،می تواند هر دو منبع را بدست آورد.
P A .6و سپس Bرا بدست می آورد و سپس Aو Bرا آزاد می کند .وقتی Qاجرا را از سر گرفت ،می تواند هر دو منبع را
بدست آورد.
ناحیه سایه خاکستری شکل 6.2که می توان از آن به عنوان یک منطقه کشنده یاد کرد ،در تفسیر مسیرهای 3و 4اعمال می
شود .اگر یک مسیر اجرایی وارد این منطقه مرگبار شود ،وقفه اجتناب ناپذیر است .توجه داشته باشید که وجود یک منطقه
کشنده به منطق دو فرآیند بستگی دارد .با این حال ،وقفه تنها در صورتی اجتناب ناپذیر است که پیشرفت مشترک دو فرآیند،
مسیری را ایجاد کند که وارد منطقه مرگبار شود.
325
سیستم عامل های داخلی و اصول طراحی326.........................................................................................................................
اینکه وقفه رخ می دهد یا نه ،هم به پویایی اجرا و هم به جزئیات برنامه بستگی دارد .به عنوان مثال ،فرض کنید که Pبه هر دو
منبع به طور همزمان نیاز ندارد تا این دو فرآیند شکل زیر را داشته باشند:
این وضعیت در شکل 6.3منعکس شده است .برخی فکرها باید شما را متقاعد کنند که صرف نظر از زمانبندی نسبی این دو
فرآیند ،وقفه نمی تواند رخ دهد.
همانطور که نشان داده شده است ،نمودار پیشرفت مشترک را می توان برای ثبت تاریخچه اجرای دو فرآیند که منابع مشترک
دارند استفاده کرد .در مواردی که ممکن است بیش از دو فرآیند برای یک منبع با هم رقابت کنند ،یک نمودار با ابعاد باالتر مورد
نیاز است .اصول مربوط به مناطق مرگبار و وقفه یکسان باقی خواهد ماند.
دو دسته کلی از منابع قابل استفاده هستند :قابل استفاده مجدد و قابل مصرف .یک منبع قابل استفاده مجدد منبعی است که
می تواند به طور ایمن فقط توسط یک فرآیند در یک زمان استفاده شود و با استفاده از آن تخلیه نمی شود .فرآیندها واحدهای
منبعی را بدست می آورند که بعداً برای استفاده مجدد توسط فرآیندهای دیگر آزاد می کنند .نمونه هایی از منابع قابل استفاده
مجدد شامل پردازنده ها می باشد .کانال های ورودی/خروجی؛ حافظه اصلی و ثانویه؛ دستگاه ها؛ و ساختارهای داده مانند فایل
ها ،پایگاه های داده و سمافورها.
به عنوان نمونه ای از وقفه شامل منابع قابل استفاده مجدد ،دو فرآیند را در نظر بگیرید که برای دسترسی انحصاری به فایل
دیسک Dو درایو نوار Tرقابت می کنند .برنامه ها در عملیات نشان داده شده در شکل 6.4شرکت می کنند .وقفه زمانی رخ
می دهد که هر فرآیند یک منبع را نگه داشته و دیگری را درخواست کند .به عنوان مثال ،وقفه زمانی رخ می دهد که سیستم
چندبرنامه نویسی اجرای دو فرآیند را به صورت زیر درهم بندد:
326
سیستم عامل های داخلی و اصول طراحی327.........................................................................................................................
ممکن است به نظر برسد که این یک خطای برنامه نویسی است تا یک مشکل برای طراح سیستم عامل .با این حال ،دیدیم که
طراحی برنامه همزمان چالش برانگیز است .چنین بنبستهایی اتفاق میافتد ،و علت اغلب در منطق برنامه پیچیده قرار میگیرد
و تشخیص را دشوار میکند .یکی از استراتژیهای مقابله با چنین بنبستی ،تحمیل محدودیتهای طراحی سیستم در مورد
ترتیب درخواست منابع است.
مثال دیگری از وقفه با یک منبع قابل استفاده مجدد مربوط به درخواست برای حافظه اصلی است .فرض کنید فضای موجود
برای تخصیص 200کیلوبایت است و دنباله درخواستهای زیر رخ میدهد:
327
سیستم عامل های داخلی و اصول طراحی328.........................................................................................................................
وقفه زمانی رخ می دهد که هر دو فرآیند به درخواست دوم خود پیش بروند .اگر مقدار حافظه درخواستی از قبل مشخص نباشد،
مقابله با این نوع وقفه با استفاده از محدودیت های طراحی سیستم دشوار است .بهترین راه برای مقابله با این مشکل خاص ،در
واقع حذف این امکان با استفاده از حافظه مجازی است که در فصل 8مورد بحث قرار گرفته است.
منابع مصرفی
یک منبع مصرفی منبعی است که می تواند ایجاد تولید و نابود شود مصرف شود .به طور معمول ،محدودیتی در تعداد منابع
مصرفی یک نوع خاص وجود ندارد .یک فرآیند تولید بدون انسداد ممکن است تعدادی از این منابع را ایجاد کند .هنگامی که
یک منبع توسط یک فرآیند مصرف کننده به دست می آید ،منبع از بین می رود .نمونههایی از منابع مصرفی وقفهها ،سیگنالها،
پیامها و اطالعات در بافرهای ورودی/خروجی هستند.
به عنوان نمونه ای از وقفه شامل منابع مصرفی ،جفت فرآیندهای زیر را در نظر بگیرید ،که در آن هر فرآیند سعی می کند پیامی
را از فرآیند دیگر دریافت کند و سپس پیامی را به فرآیند دیگر ارسال کند:
وقفه زمانی رخ می دهد که Receiveمسدود شود یعنی فرآیند دریافت تا زمانی که پیام دریافت نشود مسدود شود .یک بار
دیگر ،خطای طراحی دلیل وقفه است .چنین خطاهایی ممکن است کامالً ظریف باشند و تشخیص آنها دشوار باشد .عالوه بر این،
ممکن است ترکیب نادری از رویدادها برای ایجاد وقفه الزم باشد .بنابراین یک برنامه می تواند برای مدت زمان قابل توجهی،
حتی سال ها ،قبل از اینکه واقعاً وقفه رخ دهد ،مورد استفاده قرار گیرد .هیچ استراتژی مؤثر واحدی وجود ندارد که بتواند با انواع
وقفه ها مقابله کند .جدول 6.1عناصر کلیدی مهم ترین رویکردهایی را خالصه می کند
328
سیستم عامل های داخلی و اصول طراحی329.........................................................................................................................
جدول 6.1خالصه رویکردهای تشخیص ،پیشگیری و اجتناب از وقفه برای سیستم های عامل ISLO80
سیاست
طرح مزایای عمده معایب عمده
تخصیص
رویکرد های
منابع
مختلف
درخواست برای فرآیندهایی که یک ناکارآمد
سری فعالیت را انجام می همه منابع
به یکباره دهند به خوبی کار می
کند
جلوگیری محافظه پیشدستی هیچ پیشدستی الزم شروع فرآیند را به
کار؛ منابع نیست تأخیر می اندازد
را کم نیازهای منابع آینده
تعهد می باید توسط آنها
کند شناخته شوند
سفارش هنگام استفاده از منابعی فرآیندها
منابع که وضعیت آنها را می
توان به راحتی ذخیره
و بازیابی کرد ،راحت
است
اجتناب میانه راه دستکاری امکان اجرا از بیشتر از آنچه الزم است،
بین کنید تا طریق بررسی پیشی گرفته است
تشخیص و حداقل یک های زمان اجرا
پیشگیری مسیر امن
پیدا کنید
تشخیص بسیار برای نیازی به محاسبه درخواستهای
لیبرال؛ تست زمان اجرا ندارد منابع افزایشی را
منابع وقفه به زیرا مشکل در مجاز نمیداند
329
سیستم عامل های داخلی و اصول طراحی330.........................................................................................................................
توسعه یافته است :پیشگیری ،اجتناب ،و تشخیص .پس از معرفی نمودارهای تخصیص منابع و سپس بحث در مورد شرایط وقفه ،
هر یک از این موارد را به نوبه خود بررسی می کنیم.
یک ابزار مفید در توصیف تخصیص منابع به فرآیندها ،نمودار تخصیص منابع است که توسط Holt HOLT72معرفی شده
است .گراف تخصیص منبع یک گراف جهت دار است که وضعیتی از سیستم منابع و فرآیندها را به تصویر می کشد که هر
فرآیند و هر منبع توسط یک گره نمایش داده می شود .یک یال گراف که از یک فرآیند به یک منبع هدایت می شود منبعی را
نشان می دهد که توسط فرآیند درخواست شده است اما هنوز به آن اعطا نشده است شکل .a6.5در یک گره منبع ،یک نقطه
برای هر نمونه از آن منبع نشان داده می شود .نمونههایی از انواع منابع که ممکن است چندین نمونه داشته باشند ،دستگاههای
ورودی/خروجی هستند که توسط یک ماژول مدیریت منابع در سیستمعامل تخصیص داده میشوند .یک لبه گراف که از نقطه
گره منبع قابل استفاده مجدد به یک فرآیند هدایت می شود ،درخواستی را نشان می دهد که اعطا شده است شکل .b6.5یعنی
یک واحد از آن منبع به فرآیند اختصاص داده شده است .یک یال گراف که از نقطه گره منبع مصرفی به یک فرآیند هدایت می
شود نشان می دهد که فرآیند تولید کننده آن منبع است.
330
سیستم عامل های داخلی و اصول طراحی331.........................................................................................................................
شکل c6.5یک مثال وقفه را نشان می دهد .تنها یک واحد از منابع Raو Rbوجود دارد .فرآیند P1 Rbرا نگه می دارد و Ra
را درخواست می کند ،در حالی که P2 Raرا نگه می دارد اما Rbرا درخواست می کند .شکل d6.5دارای همان توپولوژی
شکل c6.5است ،اما هیچ وقفه وجود ندارد زیرا چندین واحد از هر منبع در دسترس است.
نمودار تخصیص منابع شکل 6.6با وضعیت وقفه در شکل b6.1مطابقت دارد .توجه داشته باشید که در این حالت ،ما یک
موقعیت ساده نداریم که در آن دو فرآیند هر کدام یک منبع داشته باشند و دیگری نیاز داشته باشد .بلکه در این حالت یک
زنجیره دایره ای از فرآیندها و منابع وجود دارد که منجر به وقفه می شود.
331
سیستم عامل های داخلی و اصول طراحی332.........................................................................................................................
شرایط وقفه
سه شرط سیاست باید وجود داشته باشد تا وقفه ممکن شود:
.1طرد متقابل .فقط یک فرآیند ممکن است در یک زمان از یک منبع استفاده کند .هیچ فرآیندی نمی تواند به واحد منبعی که
به فرآیند دیگری تخصیص داده شده است دسترسی پیدا کند.
.2نگه دارید و منتظر بمانید .یک فرآیند ممکن است منابع تخصیص یافته را در حالی که منتظر تخصیص منابع دیگر است
نگهداری کند.
.3بدون پیشدستی .هیچ منبعی را نمی توان به زور از فرآیندی که آن را نگه می دارد حذف کرد.
از بسیاری جهات این شرایط کامالً مطلوب هستند .برای مثال ،حذف متقابل برای اطمینان از سازگاری نتایج و یکپارچگی یک
پایگاه داده مورد نیاز است .به همین ترتیب ،پیشدستی نباید خودسرانه انجام شود .به عنوان مثال ،زمانی که منابع داده درگیر
هستند ،پیشپرداخت باید توسط یک مکانیسم بازیابی بازگشتی پشتیبانی شود ،که یک فرآیند و منابع آن را به وضعیت قبلی
مناسب باز میگرداند که از آن فرآیند میتواند در نهایت اقدامات خود را تکرار کند.
سه شرط اول برای وجود وقفه الزم است اما کافی نیست .برای اینکه وقفه واقعاً اتفاق بیفتد ،شرط چهارم الزم است:
.4انتظار دایره ای .یک زنجیره بسته از فرآیندها وجود دارد ،به طوری که هر فرآیند حداقل یک منبع مورد نیاز فرآیند بعدی در
زنجیره را در خود نگه می دارد به عنوان مثال ،شکل c6.5و شکل .6.6
شرط چهارم ،در واقع ،پیامد بالقوه سه شرط اول است .یعنی با توجه به اینکه سه شرط اول وجود دارد ،ممکن است یک توالی از
رویدادها رخ دهد که منجر به یک انتظار دایره ای حل نشدنی شود .انتظار دایره ای حل نشدنی در واقع تعریف وقفه است .انتظار
دایره ای فهرست شده به عنوان شرط 4غیرقابل حل است زیرا سه شرط اول برقرار است .بنابراین ،چهار شرط با هم ،شرایط
الزم و کافی را برای وقفه 22تشکیل می دهند
22تقریباً همه کتابهای درسی به سادگی این چهار شرط را بهعنوان شرایط الزم برای بنبست فهرست میکنند ،اما چنین ارائهای برخی از مسائل ظریفتر را پنهان میکند .مورد
،4شرط انتظار دایره ای ،اساساً با سه شرط دیگر متفاوت است .موارد 1تا 3تصمیمات خط مشی هستند ،در حالی که مورد 4شرایطی است که ممکن است بسته به ترتیب
درخواست ها و انتشار توسط فرآیندهای درگیر رخ دهد .پیوند انتظار دایره ای با سه شرط ضروری منجر به تمایز ناکافی بین پیشگیری و اجتناب می شود .برای بحث به
][SHUB90و ] [SHUB03مراجعه کنید.
332
سیستم عامل های داخلی و اصول طراحی333.........................................................................................................................
برای روشن شدن این بحث ،بازگشت به مفهوم نمودار پیشرفت مشترک ،مانند آنچه در شکل 6.2نشان داده شده است ،مفید
است .به یاد بیاورید که ما یک منطقه مرگبار را به این صورت تعریف کردیم که وقتی فرآیندها به آن منطقه پیشرفت کردند ،آن
فرآیندها به وقفه خواهند رسید .منطقه کشنده تنها در صورتی وجود دارد که تمام سه شرط اول ذکر شده در باال برآورده شوند.
اگر یک یا چند مورد از این شرایط برآورده نشود ،منطقه کشنده ای وجود ندارد و وقفه نمی تواند رخ دهد .بنابراین ،اینها شرایط
الزم برای وقفه هستند .برای اینکه وقفه اتفاق بیفتد ،نه تنها باید منطقه کشنده ،بلکه باید دنباله ای از درخواست های منابع
وجود داشته باشد که به منطقه مرگبار منتهی شده است .اگر شرایط انتظار دایره ای رخ دهد ،در واقع منطقه کشنده وارد شده
است .بنابراین ،هر چهار شرط ذکر شده در باال برای وقفه کافی است .به طور خالصه،
سه رویکرد کلی برای مقابله با وقفه وجود دارد .اول اینکه می توان با اتخاذ سیاستی که یکی از شرایط را حذف می کند شرایط
1تا 4از وقفه جلوگیری کرد .دوم ،میتوان با انتخابهای پویا مناسب بر اساس وضعیت فعلی تخصیص منابع ،از بنبست
جلوگیری کرد .سوم ،می توان تالش کرد وجود وقفه را تشخیص داد شرایط 1تا 4نگه داشتن و اقدامی برای بازیابی انجام داد.
ما هر یک از این رویکردها را به نوبه خود مورد بحث قرار می دهیم.
6.2پیشگیری از وقفه
راهبرد پیشگیری از وقفه ،به زبان ساده ،طراحی سیستمی است به گونه ای که امکان وقفه منتفی شود .میتوانیم روشهای
پیشگیری از بنبست را به دو دسته تقسیم کنیم .یک روش غیرمستقیم پیشگیری از وقفه ،جلوگیری از وقوع یکی از سه شرط
ضروری ذکر شده در قبل است موارد 1تا .3یک روش مستقیم برای پیشگیری از وقفه ،جلوگیری از وقوع یک انتظار دایره ای
است مورد .4اکنون تکنیک های مربوط به هر یک از چهار شرط را بررسی می کنیم.
طرد متقابل
به طور کلی ،اولین شرط از چهار شرط ذکر شده را نمی توان غیر مجاز دانست .اگر دسترسی به یک منبع مستلزم طرد متقابل
باشد ،پس حذف متقابل باید توسط سیستم عامل پشتیبانی شود .برخی از منابع ،مانند فایلها ،ممکن است دسترسی چندگانه را
برای خواندن و فقط دسترسی انحصاری برای نوشتن را مجاز کنند .حتی در این مورد ،اگر بیش از یک فرآیند نیاز به مجوز
نوشتن داشته باشد ،وقفه ممکن است رخ دهد.
333
سیستم عامل های داخلی و اصول طراحی334.........................................................................................................................
شرط انتظار و انتظار را میتوان با الزام فرآیند درخواست تمام منابع مورد نیاز خود در یک زمان و مسدود کردن فرآیند تا زمانی
که همه درخواستها به طور همزمان اعطا شوند ،جلوگیری کرد .این رویکرد از دو جهت ناکارآمد است .اوالً ،ممکن است یک
فرآیند برای مدت طوالنی در انتظار تکمیل شدن تمام درخواستهای منابعش بماند ،در حالی که در واقع میتوانست فقط با
برخی از منابع ادامه دهد .ثانیاً ،منابع تخصیص یافته به یک فرآیند ممکن است برای مدت قابل توجهی بالاستفاده بمانند ،در
طی این مدت آنها از سایر فرآیندها محروم می شوند .مشکل دیگر این است که یک فرآیند ممکن است از قبل از همه منابع
مورد نیاز خود مطلع نباشد.
همچنین یک مشکل عملی با استفاده از برنامه نویسی مدوالر یا ساختار چند رشته ای برای یک برنامه ایجاد می شود .یک برنامه
کاربردی باید از تمام منابعی که در همه سطوح یا در همه ماژول ها درخواست می شود برای درخواست همزمان آگاه باشد.
بدون پیشدستی
این عارضه به روش های مختلفی قابل پیشگیری است .اوالً ،اگر فرآیندی که منابع خاصی را در اختیار دارد از درخواست بیشتر
رد شود ،آن فرآیند باید منابع اصلی خود را آزاد کند و در صورت لزوم ،آنها را مجدداً همراه با منبع اضافی درخواست کند .از
طرف دیگر ،اگر فرآیندی منبعی را درخواست کند که در حال حاضر توسط یک فرآیند دیگر نگهداری میشود ،سیستمعامل
ممکن است از فرآیند دوم جلوگیری کند و از آن بخواهد منابع خود را آزاد کند .این طرح دوم تنها در صورتی از وقفه جلوگیری
می کند که هیچ دو فرآیند دارای اولویت یکسان نباشند.
این رویکرد فقط زمانی عملی است که برای منابعی اعمال شود که وضعیت آنها به راحتی ذخیره و بعداً بازیابی شود ،همانطور که
در مورد یک پردازنده وجود دارد.
شرایط انتظار دایره ای را می توان با تعریف یک ترتیب خطی انواع منابع جلوگیری کرد .اگر به یک فرآیند منابعی از نوع R
اختصاص داده شده باشد ،ممکن است متعاقباً فقط منابعی از انواع زیر Rرا در ترتیب درخواست کند.
برای مشاهده اینکه این استراتژی کار می کند ،اجازه دهید یک شاخص را با هر نوع منبع مرتبط کنیم .سپس منبع Riقبل از
Rjدر ترتیب اگر i jباشد .حال فرض کنید دو فرآیند Aو Bبه وقفه رسیده اند زیرا A Riرا بدست آورده و Rjرا درخواست
کرده است و B Rjرا بدست آورده و Riرا درخواست کرده است .این شرط غیرممکن است زیرا به i jو j iداللت دارد.
334
سیستم عامل های داخلی و اصول طراحی335.........................................................................................................................
مانند جلوگیری از انتظار و انتظار ،پیشگیری از انتظار دایره ای ممکن است ناکارآمد باشد ،فرآیندها را کند کند و دسترسی غیر
ضروری به منابع را ممنوع کند.
6.3اجتناب از وقفه
یک رویکرد برای حل مشکل وقفه که به طور ماهرانه ای با پیشگیری از وقفه متفاوت است ،اجتناب 23از وقفه است 2 .در
پیشگیری از وقفه ،ما درخواست های منابع را برای جلوگیری از حداقل یکی از چهار شرط وقفه محدود می کنیم .این امر یا به
طور غیرمستقیم و با جلوگیری از یکی از سه شرط سیاست ضروری حذف متقابل ،نگه داشتن و انتظار ،عدم پیشدستی یا
مستقیماً با جلوگیری از انتظار دایرهای انجام میشود .این امر منجر به استفاده ناکارآمد از منابع و اجرای ناکارآمد فرآیندها می
شود.
از سوی دیگر ،اجتناب از وقفه ،سه شرط الزم را فراهم می کند ،اما انتخاب های عاقالنه ای انجام می دهد تا اطمینان حاصل
کند که هرگز به نقطه وقفه نرسیده است .به این ترتیب ،اجتناب امکان همزمانی بیشتر از پیشگیری را فراهم می کند .با اجتناب
از وقفه ،به صورت پویا تصمیم گرفته می شود که آیا درخواست تخصیص منبع فعلی ،در صورت اعطای ،به طور بالقوه منجر به
وقفه می شود یا خیر .بنابراین اجتناب از وقفه مستلزم آگاهی از درخواست های منابع فرآیند آینده است.
در این بخش ،دو رویکرد برای اجتناب از وقفه را شرح می دهیم:
اگر فرآیندی ممکن است منجر به وقفه شود ،فرآیندی را شروع نکنید.
اگر این تخصیص ممکن است منجر به وقفه شود ،درخواست منابع افزایشی را به یک فرآیند اعطا نکنید.
ماتریس Claimحداکثر نیاز هر فرآیند را برای هر منبع ،با یک ردیف به هر فرآیند اختصاص می دهد .این اطالعات باید از قبل
توسط فرآیندی برای جلوگیری از وقفه اعالم شود .به طور مشابه ،ماتریس تخصیص تخصیص فعلی را به هر فرآیند می دهد.
روابط زیر برقرار است:
2 23اصطالح اجتناب کمی گیج کننده است .در واقع میتوان راهبردهای مورد بحث در این بخش را نمونههایی از پیشگیری از بنبست دانست زیرا در واقع از بروز بنبست
جلوگیری میکند.
335
سیستم عامل های داخلی و اصول طراحی336.........................................................................................................................
با تعریف این مقادیر ،میتوانیم یک خطمشی اجتناب از بنبست تعریف کنیم که در صورتی که منابع مورد نیاز آن ممکن است
منجر به بنبست شود ،از شروع فرآیند جدید خودداری میکند .فقط در صورتی که یک فرآیند جدید Pn + 1را شروع کنید
یعنی ،یک فرآیند تنها در صورتی شروع میشود که حداکثر ادعای همه فرآیندهای فعلی به اضافه موارد فرآیند جدید برآورده
شود .این استراتژی به سختی مطلوب است ،زیرا بدترین را فرض می کند :اینکه همه فرآیندها حداکثر ادعای خود را با هم دارند.
استراتژی انکار تخصیص منابع ،که به آن الگوریتم بانکدار گفته می شود ،برای اولین بار در DIJK65ارائه شد .اجازه دهید با
تعریف مفاهیم دولت و ایمن شروع کنیم .سیستمی را با تعداد ثابت فرآیند و تعداد ثابت منابع در نظر بگیرید .در هر زمان ممکن
است یک فرآیند صفر یا بیشتر منابع به آن تخصیص داده شود .وضعیت سیستم منعکس کننده تخصیص فعلی منابع به فرآیندها
است .بنابراین ،حالت متشکل از دو بردار ،منبع و موجود ،و دو ماتریس ،ادعا و تخصیص است که قبالً تعریف شد .حالت ایمن
حالتی است که در آن حداقل یک توالی از تخصیص منابع به فرآیندها وجود داشته باشد که منجر به وقفه نشود یعنی همه
فرآیندها را می توان تا تکمیل اجرا کرد .دولت ناامن البته حالتی است که ایمن نباشد.
مثال زیر این مفاهیم را نشان می دهد .شکل a6.7وضعیت یک سیستم متشکل از چهار فرآیند و سه منبع را نشان می دهد.
مجموع منابع R2 ،R1و R3به ترتیب 3 ،9و 6واحد است .در وضعیت فعلی تخصیص هایی به چهار فرآیند انجام شده است و
1واحد R2و 1واحد R3در دسترس باقی مانده است .آیا این یک ایالت امن است؟
برای پاسخ به این سوال ،یک سوال میانی مطرح میکنیم :آیا میتوان هر یک از چهار فرآیند را با منابع موجود اجرا کرد؟ یعنی
آیا تفاوت بین حداکثر نیاز و تخصیص فعلی برای هر فرآیندی با منابع موجود قابل تامین است؟ از نظر ماتریسها و بردارهایی که
قبالً معرفی شدند ،شرطی که برای فرآیند iباید برآورده شود این است:
واضح است که برای P1که تنها 1واحد R1دارد و به 2واحد R1دیگر 2 ،واحد R2و 2واحد R3نیاز دارد ،این امکان وجود
ندارد .با این حال ،با اختصاص یک واحد از R3به پردازش P2 ،P2حداکثر منابع مورد نیاز خود را تخصیص داده است و می
تواند تا تکمیل اجرا شود .بگذارید فرض کنیم که این کار انجام شده است .وقتی P2تکمیل شد ،منابع آن را می توان به
مجموعه منابع موجود برگرداند.
336
سیستم عامل های داخلی و اصول طراحی337.........................................................................................................................
حالت حاصل در شکل b6.7نشان داده شده است .اکنون می توانیم دوباره بپرسیم که آیا هر یک از فرآیندهای باقی مانده را می
توان تکمیل کرد .در این مورد ،هر یک از فرآیندهای باقی مانده می تواند تکمیل شود .فرض کنید P1را انتخاب می کنیم ،منابع
مورد نیاز را تخصیص می دهیم P1 ،را تکمیل می کنیم و تمام منابع P1را به مجموعه موجود برمی گردانیم .ما در حالت نشان
داده شده در شکل c6.7باقی مانده ایم .بعد ،میتوانیم P3را تکمیل کنیم که در نتیجه حالت شکل d6.7به دست میآید .در
نهایت می توانیم P4را تکمیل کنیم .در این مرحله ،تمام فرآیندها تا پایان اجرا شده است .بنابراین ،حالت تعریف شده توسط
شکل a6.7یک حالت امن است.
این مفاهیم استراتژی اجتناب از وقفه زیر را پیشنهاد می کنند که تضمین می کند سیستم فرآیندها و منابع همیشه در وضعیت
ایمن قرار دارد .هنگامی که یک فرآیند برای مجموعهای از منابع درخواست میکند ،فرض کنید که درخواست اعطا شده است،
وضعیت سیستم را متناسب با آن بهروزرسانی کنید و سپس تعیین کنید که آیا نتیجه یک حالت امن است یا خیر .در این
صورت ،درخواست را اعطا کنید و در غیر این صورت ،فرآیند را مسدود کنید تا زمانی که اعطای درخواست امن نباشد .حالت
تعریف شده در شکل a6.8را در نظر بگیرید .فرض کنید P2یک واحد اضافی R1و یک واحد اضافی R3را درخواست می
کند .اگر فرض کنیم درخواست اعطا شده است ،در آن صورت حالت حاصل شکل a6.7است .ما قبالً دیدیم که این یک کشور
امن است .بنابراین ،اعطای درخواست امن است .حال اجازه دهید به حالت شکل a6.8برگردیم و فرض کنیم که P1برای هر
یک از R1و R3یک واحد اضافی درخواست می کند .اگر فرض کنیم که درخواست پذیرفته شده است ،در وضعیت شکل b6.8
باقی میمانیم .آیا این یک ایالت امن است؟ پاسخ منفی است ،زیرا هر فرآیند حداقل به یک واحد اضافی R1نیاز دارد و هیچ
کدام در دسترس نیست .بنابراین ،بر اساس اجتناب از وقفه ،درخواست P1باید رد شود و P1باید مسدود شود .ذکر این نکته
مهم است که شکل b6.8یک حالت وقفه نیست .این فقط پتانسیل وقفه را دارد .برای مثال ،ممکن است که اگر P1از این حالت
اجرا شود ،متعاقباً یک واحد از R1و یک واحد از R3را قبل از نیاز مجدد به این منابع آزاد کند .اگر این اتفاق بیفتد ،سیستم به
حالت امن باز میگردد .بنابراین ،استراتژی اجتناب از وقفه ،وقفه را با قطعیت پیش بینی نمی کند .صرفاً احتمال وقفه را پیش
بینی می کند و اطمینان می دهد که هرگز چنین امکانی وجود ندارد.
337
سیستم عامل های داخلی و اصول طراحی338.........................................................................................................................
شکل 6.9یک نسخه انتزاعی از منطق اجتناب از وقفه را نشان می دهد .الگوریتم اصلی در قسمت ب نشان داده شده است .با
وضعیت سیستم تعریف شده توسط حالت ساختار داده ،درخواست* برداری است که منابع درخواست شده توسط فرآیند iرا
تعریف می کند .ابتدا ،بررسی می شود تا اطمینان حاصل شود که درخواست از ادعای اصلی فرآیند فراتر نمی رود.
338
سیستم عامل های داخلی و اصول طراحی339.........................................................................................................................
اگر درخواست معتبر باشد ،گام بعدی تعیین این است که آیا امکان انجام درخواست وجود دارد یعنی منابع کافی در دسترس
است .اگر امکان پذیر نباشد ،فرآیند به حالت تعلیق در می آید .در صورت امکان ،مرحله نهایی این است که تعیین کنیم آیا انجام
درخواست امن است یا خیر .برای انجام این کار ،منابع به طور آزمایشی به پردازش iاختصاص داده می شود تا newstateرا
تشکیل دهد .سپس تست ایمنی با استفاده از الگوریتم شکل c6.9انجام می شود.
اجتناب از وقفه این مزیت را دارد که مانند تشخیص وقفه ،نیازی به بازگرداندن و بازگرداندن فرآیندها نیست و نسبت به
پیشگیری از وقفه محدودیت کمتری دارد .با این حال ،تعدادی محدودیت در استفاده از آن دارد:
-حداکثر منبع مورد نیاز برای هر فرآیند باید از قبل بیان شود.
-فرآیندهای مورد بررسی باید مستقل باشند .به این معنا که ترتیب اجرای آنها باید با هیچ گونه الزامات همگام سازی محدود
نشده باشد.
339
سیستم عامل های داخلی و اصول طراحی340.........................................................................................................................
6.4تشخیص وقفه
راهبردهای پیشگیری از وقفه بسیار محافظه کارانه هستند .آنها مشکل وقفه را با محدود کردن دسترسی به منابع و با اعمال
محدودیت بر فرآیندها حل می کنند .در نقطه مقابل ،استراتژی های تشخیص وقفه دسترسی به منابع را محدود نمی کند یا
اقدامات فرآیند را محدود نمی کند .با تشخیص وقفه ،منابع درخواستی در صورت امکان به فرآیندها اعطا می شود .سیستم
عامل به صورت دوره ای الگوریتمی را اجرا می کند که به آن اجازه می دهد تا شرایط انتظار دایره ای را که قبال در شرایط 4
توضیح داده شده و در شکل 6.6نشان داده شده است ،تشخیص دهد.
بررسی وقفه را می توان به دفعات هر درخواست منبع یا در موارد کمتر بسته به احتمال وقوع وقفه انجام داد .بررسی هر
درخواست منبع دو مزیت دارد :به تشخیص زودهنگام منجر میشود و الگوریتم نسبتاً ساده است زیرا مبتنی بر تغییرات تدریجی
در وضعیت سیستم است .از سوی دیگر ،چنین بررسی های مکرری زمان قابل توجهی از پردازنده را مصرف می کند .یک
الگوریتم رایج برای تشخیص وقفه ،الگوریتمی است که در COFF71توضیح داده شده است ،که برای تشخیص یک وقفه با در
نظر گرفتن تمام احتماالت توالی کارهایی که باید تکمیل شوند ،طراحی شده است .از ماتریس تخصیص و بردار موجود که در
بخش قبل توضیح داده شد استفاده می شود .عالوه بر این ،یک ماتریس درخواست Qبه گونهای تعریف میشود که Qijمقدار
منابع از نوع jدرخواست شده توسط فرآیند iرا نشان میدهد .الگوریتم با عالمت گذاری فرآیندهایی که بخشی از یک مجموعه
وقفه نیستند پیش می رود .در ابتدا ،تمام فرآیندها بدون عالمت هستند .سپس مراحل زیر انجام می شود:
.1هر فرآیندی را که دارای یک ردیف در ماتریس تخصیص تمام صفرها است عالمت گذاری کنید .فرآیندی که منابع تخصیصی
ندارد نمی تواند در وقفه شرکت کند.
340
سیستم عامل های داخلی و اصول طراحی341.........................................................................................................................
.2یک بردار موقت Wرا راه اندازی کنید تا با بردار موجود برابر شود.
.3شاخص iرا به گونه ای بیابید که فرآیند iدر حال حاضر عالمت گذاری نشده باشد و ردیف i Qکمتر یا مساوی Wباشد.
یعنی ،Qik … Wkبرای .k … m … 1اگر چنین ردیفی یافت نشد ،الگوریتم را خاتمه دهید.
.4اگر چنین ردیفی یافت شد ،فرآیند iرا عالمت گذاری کنید و ردیف مربوطه از ماتریس تخصیص را به Wاضافه کنید .یعنی
Wk = Wk + Aikرا برای k … m … 1تنظیم کنید .به مرحله 3برگردید.
وقفه وجود دارد اگر و تنها در صورتی که فرآیندهای عالمت گذاری نشده در انتهای الگوریتم وجود داشته باشد .مجموعه
سطرهای بدون عالمت دقیقاً با مجموعه فرآیندهای وقفه مطابقت دارد .استراتژی در این الگوریتم یافتن فرآیندی است که
درخواستهای منابع آن میتواند با منابع موجود برآورده شود و سپس فرض کنیم که آن منابع اعطا شدهاند و این فرآیند تا
تکمیل اجرا میشود و تمام منابع خود را آزاد میکند .سپس الگوریتم به دنبال فرآیند دیگری برای ارضای آن می گردد .توجه
داشته باشید که این الگوریتم تضمینی برای جلوگیری از وقفه نیست .که به ترتیبی که درخواستهای آتی اعطا میشوند بستگی
دارد .تمام کاری که انجام می دهد این است که مشخص کند آیا وقفه در حال حاضر وجود دارد یا خیر .ما می توانیم از شکل
6.10برای نشان دادن الگوریتم تشخیص وقفه استفاده کنیم .الگوریتم به صورت زیر پیش می رود:
.3درخواست فرآیند P3کمتر یا مساوی Wاست ،بنابراین P3را عالمت زده و تنظیم کنید
.W = W + 10 0 0 1 02 = 10 0 0 1 02
.4هیچ فرآیند بدون عالمت دیگری در Qردیفی کمتر یا مساوی Wندارد .بنابراین ،الگوریتم را خاتمه دهید.
الگوریتم با عالمت گذاری نشده P1و P2به پایان می رسد ،که نشان می دهد این فرآیندها به وقفه رسیده اند.
بهبود
هنگامی که وقفه شناسایی شد ،برخی استراتژی ها برای بازیابی مورد نیاز است .روشهای زیر به ترتیب افزایش پیچیدگی
فهرست شدهاند:
.1تمام فرآیندهای وقفه را لغو کنید .این ،باور کنید یا نه ،یکی از رایج ترین ،اگر نگوییم رایج ترین راه حل های اتخاذ شده در
سیستم عامل ها است.
.2از هر فرآیند وقفه در برخی از نقاط بازرسی از قبل تعریف شده نسخه پشتیبان تهیه کنید و همه فرآیندها را مجدداً راه اندازی
کنید .این امر مستلزم آن است که مکانیسم های بازگشت و راه اندازی مجدد در سیستم تعبیه شود .خطر در این رویکرد این
است که وقفه اصلی ممکن است دوباره عود کند .با این حال ،عدم تعیین پردازش همزمان ممکن است تضمین کند که این اتفاق
نمی افتد.
.3فرآیندهای وقفه را به طور متوالی متوقف کنید تا زمانی که دیگر وقفه وجود نداشته باشد .ترتیب انتخاب فرآیندهای سقط
جنین باید بر اساس معیار حداقل هزینه باشد .پس از هر سقط جنین ،الگوریتم تشخیص باید دوباره فراخوانی شود تا ببینیم آیا
وقفه هنوز وجود دارد یا خیر.
.4منابع را تا زمانی که دیگر وقفه وجود نداشته باشد ،پیش دستی کنید .همانطور که در ،3یک انتخاب مبتنی بر هزینه باید
استفاده شود ،و فراخوانی مجدد از الگوریتم تشخیص پس از هر پیشگیری الزم است .فرآیندی که منبعی از آن پیشی گرفته
است ،باید قبل از دستیابی به آن منبع ،به نقطه ای برگردد.
برای 3و ،4معیارهای انتخاب می تواند یکی از موارد زیر باشد .فرآیند را با کمترین مقدار زمان پردازنده تا کنون مصرف شده
است
-کمترین اولویت
اندازه گیری برخی از این مقادیر آسان تر از بقیه است .زمان تخمینی باقی مانده به ویژه مشکوک است .همچنین ،به غیر از معیار
اولویت ،هیچ نشانه ای از "هزینه" برای کاربر وجود ندارد ،برخالف هزینه کل سیستم.
342
سیستم عامل های داخلی و اصول طراحی343.........................................................................................................................
همانطور که جدول 6.1نشان می دهد ،تمام استراتژی ها برای مقابله با وقفه دارای نقاط قوت و ضعف هستند .به جای تالش
برای طراحی یک سیستم عامل که تنها یکی از این استراتژی ها را به کار می گیرد ،ممکن است استفاده از استراتژی های
مختلف در موقعیت های مختلف کارآمدتر باشد HOWA73 .یک رویکرد را پیشنهاد میکند:
-برای جلوگیری از انتظار دایره ای برای جلوگیری از وقفه بین کالس های منبع ،از استراتژی ترتیب خطی که قبال تعریف شده
است استفاده کنید.
-در یک کالس منبع ،از الگوریتمی استفاده کنید که برای آن کالس مناسبتر است .به عنوان نمونه ای از این تکنیک ،کالس
های منابع زیر را در نظر بگیرید:
-فضای قابل تعویض :بلوک های حافظه در حافظه ثانویه برای استفاده در فرآیندهای مبادله
-منابع پردازش :دستگاه های قابل تخصیص ،مانند درایوهای نوار ،و فایل ها
-حافظه اصلی :قابل تخصیص به پردازش های موجود در صفحات یا بخش ها
ترتیب فهرست قبلی نشان دهنده ترتیب تخصیص منابع است .با توجه به توالی مراحلی که ممکن است یک فرآیند در طول عمر
خود طی کند ،دستور معقول است .در هر کالس می توان از استراتژی های زیر استفاده کرد:
فضای قابل تعویض :پیشگیری از وقفه ها با الزام به تخصیص همه منابع مورد نیاز که ممکن است مورد استفاده قرار گیرد ،مانند
استراتژی پیشگیری از نگه داشتن و انتظار .این استراتژی در صورتی معقول است که حداکثر نیازهای ذخیره سازی شناخته شده
باشند ،که اغلب چنین است .اجتناب از وقفه نیز یک امکان است.
-منابع فرآیندی :اجتناب اغلب در این دسته موثر خواهد بود ،زیرا منطقی است که انتظار داشته باشیم فرآیندها منابعی را که در
این کالس نیاز دارند ،زودتر اعالم کنند .پیشگیری از طریق سفارش منابع در این کالس نیز امکان پذیر است.
-حافظه اصلی :به نظر می رسد پیشگیری از طریق پیشگیرانه مناسب ترین استراتژی برای حافظه اصلی باشد .هنگامی که یک
فرآیند از پیش گرفته می شود ،به سادگی به حافظه ثانویه مبادله می شود و فضا برای رفع وقفه آزاد می شود .منابع داخلی :می
توان از پیشگیری از طریق سفارش منابع استفاده کرد.
343
سیستم عامل های داخلی و اصول طراحی344.........................................................................................................................
اکنون به مسئله فیلسوفان ناهار خوری می پردازیم که توسط Dijkstra DIJK71معرفی شده است .پنج فیلسوف در خانه ای
زندگی می کنند که برای آنها سفره ای می چینند .زندگی هر فیلسوف اصوالً شامل اندیشیدن و خوردن است ،و طی سالها
تفکر ،همه فیلسوفان توافق کردند که تنها غذایی که به تالشهای فکری آنها کمک میکند اسپاگتی است .به دلیل عدم مهارت
دستی ،هر فیلسوف برای خوردن اسپاگتی به دو چنگال نیاز دارد.
ترتیب غذا خوردن ساده است شکل :6.11یک میز گرد که روی آن یک کاسه بزرگ اسپاگتی ،پنج بشقاب ،یک عدد برای هر
فیلسوف ،و پنج چنگال قرار دارد .فیلسوفی که میخواهد غذا بخورد ،به محل تعیین شدهاش سر میز میرود و با استفاده از دو
چنگال در دو طرف بشقاب ،مقداری اسپاگتی میگیرد و میخورد .مشکل :تشریفاتی الگوریتمی ابداع کنید که به فیلسوفان اجازه
غذا خوردن بدهد .الگوریتم باید طرد متقابل را برآورده کند هیچ دو فیلسوف نمی توانند همزمان از یک چنگال استفاده کنند در
حالی که از وقفه و گرسنگی اجتناب می کند در این مورد ،این اصطالح دارای معنای تحت اللفظی و همچنین معنای الگوریتمی
است! .این مشکل ممکن است به خودی خود مهم یا مرتبط به نظر نرسد .با این حال ،مشکالت اساسی در وقفه و گرسنگی را
نشان می دهد .عالوه بر این ،تالشها برای توسعه راهحلها بسیاری از مشکالت را در برنامهنویسی همزمان آشکار میکنند به
عنوان مثال GING90 ،را ببینید .عالوه بر این ،مسئله فیلسوفان ناهار خوری را می توان به عنوان نماینده مشکالت مربوط به
هماهنگی منابع مشترک در نظر گرفت ،که ممکن است زمانی رخ دهد که یک برنامه شامل رشته های اجرایی همزمان باشد .بر
این اساس ،این مشکل یک مورد آزمون استاندارد برای ارزیابی رویکردهای همگام سازی است.
344
سیستم عامل های داخلی و اصول طراحی345.........................................................................................................................
شکل 6.12راه حلی را با استفاده از سمافورها پیشنهاد می کند .هر فیلسوف ابتدا چنگال سمت چپ و سپس چنگال سمت
راست را برمی دارد .بعد از اینکه فیلسوف غذا خوردن را تمام کرد ،دو چنگال روی میز عوض می شوند .این راه حل ،افسوس ،به
وقفه می انجامد :اگر همه فیلسوفان در یک زمان گرسنه باشند ،همه می نشینند ،همگی چنگال سمت چپ خود را برمی دارند و
همه دستشان را به سمت چنگال دیگر دراز می کنند که آنجا نیست . .در این موقعیت ناپسند ،همه فیلسوفان از گرسنگی می
میرند.
برای غلبه بر خطر وقفه ،می توانیم پنج چنگال اضافی بخریم راه حل بهداشتی تر! یا به فیلسوفان یاد دهیم که اسپاگتی را فقط
با یک چنگال بخورند .به عنوان یک رویکرد دیگر ،میتوانیم یک خدمتکار اضافه کنیم که تنها به چهار فیلسوف در یک زمان
اجازه ورود به اتاق غذاخوری را میدهد .با حداکثر چهار فیلسوف نشسته ،حداقل یک فیلسوف به دو چنگال دسترسی خواهد
داشت .شکل 6.13چنین راه حلی را با استفاده از سمافورها نشان می دهد .این راه حل عاری از وقفه و گرسنگی است.
شکل 6.14راه حلی برای مشکل فیلسوفان ناهار خوری با استفاده از مانیتور نشان می دهد .یک بردار از پنج متغیر شرط تعریف
شده است ،یک متغیر شرط در هر . forkاز این متغیرهای شرط استفاده میشود تا فیلسوف را قادر میسازد تا منتظر در
دسترس بودن چنگال بماند .عالوه بر این ،یک بردار Booleanوجود دارد که وضعیت در دسترس بودن هر forkرا ثبت می
کند درست به این معنی است که forkدر دسترس است .مانیتور از دو رویه تشکیل شده است .روش get_forksتوسط یک
فیلسوف برای گرفتن چنگال چپ و راست خود استفاده می شود .اگر هر دو forkدر دسترس نباشد ،فرآیند فیلسوف در متغیر
شرایط مناسب در صف قرار می گیرد .این فرآیند فیلسوف دیگری را قادر می سازد تا وارد مانیتور شود .روش آزاد کردن چنگال
345
سیستم عامل های داخلی و اصول طراحی346.........................................................................................................................
برای در دسترس قرار دادن دو چنگال استفاده می شود .توجه داشته باشید که ساختار این راه حل شبیه به راه حل سمافور ارائه
شده در شکل 6.12است .در هر دو مورد ،فیلسوف ابتدا چنگال چپ و سپس چنگال راست را می گیرد .بر خالف راه حل
سمافور ،این راه حل مانیتور از وقفه رنج نمی برد ،زیرا ممکن است تنها یک فرآیند در هر زمان در مانیتور باشد .به عنوان مثال،
اولین فرآیند فیلسوفی که وارد مانیتور می شود تضمین می کند که می تواند چنگال سمت راست را پس از برداشتن چنگال
چپ قبل از اینکه فیلسوف بعدی در سمت راست فرصتی برای گرفتن چنگال چپ خود که همان چنگال راست این فیلسوف
است را بگیرد ،بردارد.
یونیکس مکانیسمهای مختلفی را برای ارتباطات بین پردازنده و همگامسازی فراهم میکند .در اینجا به مهمترین آنها می
پردازیم:
-لوله ها
-پیام ها
-حافظه مشترک
-سمافورها
-سیگنال ها
346
سیستم عامل های داخلی و اصول طراحی347.........................................................................................................................
لولهها ،پیامها و حافظه مشترک را میتوان برای برقراری ارتباط دادهها بین فرآیندها استفاده کرد ،در حالی که سمافورها و
سیگنالها برای تحریک اقدامات توسط سایر فرآیندها استفاده میشوند.
pipesها
یکی از مهم ترین کمک های یونیکس در توسعه سیستم های عامل لوله است .با الهام از مفهوم کوروتین ها ،RITC84یک لوله
یک بافر دایره ای است که به دو فرآیند اجازه می دهد تا در مدل تولید کننده-مصرف کننده با هم ارتباط برقرار کنند .بنابراین،
این یک صف اول در اول است که توسط یک فرآیند نوشته شده و توسط فرآیند دیگر خوانده می شود.
347
سیستم عامل های داخلی و اصول طراحی348.........................................................................................................................
هنگامی که یک لوله ایجاد می شود ،اندازه ثابت در بایت به آن داده می شود .هنگامی که یک فرآیند سعی می کند در لوله
بنویسد ،در صورت وجود فضای کافی ،درخواست نوشتن بالفاصله اجرا می شود .در غیر این صورت فرآیند مسدود می شود .به
طور مشابه ،اگر بخواهد بایت های بیشتری از آنچه در حال حاضر در لوله وجود دارد بخواند ،فرآیند خواندن مسدود می شود .در
غیر این صورت درخواست خواندن بالفاصله اجرا می شود .سیستم عامل حذف متقابل را اعمال می کند :یعنی فقط یک فرآیند
می تواند در یک زمان به یک لوله دسترسی داشته باشد.
دو نوع لوله وجود دارد :نامدار و بدون نام .فقط فرآیندهای مرتبط می توانند لوله های بدون نام را به اشتراک بگذارند ،در حالی
که فرآیندهای مرتبط یا غیرمرتبط می توانند لوله های نامگذاری شده را به اشتراک بگذارند.
پیام ها
یک پیام بلوکی از بایت ها با یک نوع همراه است .یونیکس فراخوانی های سیستمی msgsndو msgrcvرا برای فرآیندها
برای درگیر شدن در ارسال پیام فراهم می کند .مرتبط با هر فرآیند یک صف پیام است که مانند یک صندوق پستی عمل می
کند.
فرستنده پیام با هر پیام ارسالی نوع پیام را مشخص می کند و این می تواند به عنوان معیار انتخاب توسط گیرنده استفاده شود.
گیرنده می تواند پیام ها را به ترتیب اول به اول یا بر اساس نوع بازیابی کند .هنگام تالش برای ارسال پیام به یک صف کامل،
یک فرآیند مسدود می شود .هنگام تالش برای خواندن از یک صف خالی ،یک فرآیند نیز مسدود می شود .اگر فرآیندی بخواهد
پیامی از نوع خاصی را بخواند و به دلیل وجود هیچ پیامی از آن نوع با شکست مواجه شود ،فرآیند مسدود نمی شود.
حافظه مشترک
سریعترین شکل ارتباط بین فرآیندی ارائه شده در یونیکس حافظه مشترک است .این یک بلوک مشترک از حافظه مجازی است
که توسط چندین فرآیند مشترک است .فرآیند خواندن و نوشتن حافظه مشترک با استفاده از همان دستورالعملهای ماشینی
که برای خواندن و نوشتن سایر بخشهای فضای حافظه مجازی خود استفاده میکنند .مجوز برای یک فرآیند فقط خواندنی یا
خواندنی است که بر اساس هر فرآیند تعیین می شود .محدودیتهای حذف متقابل بخشی از تسهیالت حافظه مشترک نیستند،
بلکه باید توسط فرآیندهایی که از حافظه مشترک استفاده میکنند ارائه شوند.
سمافورها
فراخوانی های سیستم سمافور در UNIX System Vتعمیم اولیه semWaitو semSignalتعریف شده در فصل 5است.
چندین عملیات را می توان به طور همزمان انجام داد و عملیات افزایش و کاهش می تواند مقادیری بیشتر از 1باشد .هسته همه
348
سیستم عامل های داخلی و اصول طراحی349.........................................................................................................................
عملیات درخواستی را به صورت اتمی انجام می دهد .هیچ فرآیند دیگری نمی تواند به سمافور دسترسی داشته باشد تا زمانی که
تمام عملیات ها تکمیل شود.
-تعداد فرآیندهایی که منتظر هستند تا مقدار سمافور از مقدار فعلی آن بیشتر شود
سمافورها در واقع به صورت مجموعههایی ساخته میشوند که یک مجموعه سمافور از یک یا چند سمافور تشکیل شده است.
یک فراخوانی سیستم semctlوجود دارد که اجازه می دهد تمام مقادیر سمافور در مجموعه به طور همزمان تنظیم شوند.
عالوه بر این ،یک فراخوانی سیستم sem_opوجود دارد که به عنوان آرگومان فهرستی از عملیات سمافور را می گیرد که هر
کدام بر روی یکی از سمافورهای یک مجموعه تعریف شده اند .هنگامی که این فراخوانی انجام می شود ،هسته عملیات مشخص
شده را یکی یکی انجام می دهد .برای هر عملیات ،تابع واقعی با مقدار sem_opمشخص می شود .موارد زیر احتماالت است:
-اگر sem_opمثبت باشد ،هسته مقدار سمافور را افزایش میدهد و تمام فرآیندهایی را که منتظر افزایش ارزش سمافور
هستند ،بیدار میکند.
-اگر sem_op 0باشد ،هسته مقدار سمافور را بررسی می کند .اگر مقدار سمافور برابر با 0باشد ،هسته با سایر عملیات موجود
در لیست ادامه میدهد .در غیر این صورت ،هسته تعداد فرآیندهای منتظر این سمافور را 0افزایش می دهد و فرآیند را به حالت
تعلیق در می آورد تا منتظر رویدادی باشد که مقدار سمافور برابر با 0باشد.
-اگر sem_opمنفی باشد و مقدار مطلق آن کمتر یا مساوی با مقدار سمافور باشد ،هسته sem_opیک عدد منفی را به
مقدار سمافور اضافه میکند .اگر نتیجه 0باشد ،هسته تمام فرآیندهایی را که منتظر هستند تا مقدار سمافور برابر با 0باشد،
بیدار می کند.
-اگر sem_opمنفی باشد و قدر مطلق آن بزرگتر از مقدار سمافور باشد ،در صورت افزایش مقدار سمافور ،هسته فرآیند را به
حالت تعلیق در می آورد .این تعمیم سمافور انعطاف پذیری قابل توجهی را در انجام هماهنگ سازی و هماهنگی فرآیند فراهم
می کند.
349
سیستم عامل های داخلی و اصول طراحی350.........................................................................................................................
سیگنال ها
سیگنال مکانیزم نرم افزاری است که فرآیندی را از وقوع رویدادهای ناهمزمان اطالع می دهد .سیگنال مشابه وقفه سخت افزاری
است اما اولویت ها را به کار نمی گیرد .یعنی با همه سیگنال ها به طور مساوی رفتار می شود .سیگنال هایی که در همان زمان
رخ می دهند ،بدون ترتیب خاصی به یک فرآیند ارائه می شوند.
فرآیندها ممکن است سیگنال هایی برای یکدیگر ارسال کنند ،یا هسته ممکن است سیگنال ها را به صورت داخلی ارسال کند.
یک سیگنال با به روز رسانی یک زمینه در جدول فرآیند برای فرآیندی که سیگنال به آن ارسال می شود ،تحویل داده می شود.
از آنجا که هر سیگنال به عنوان یک بیت واحد نگهداری می شود ،سیگنال های یک نوع معین را نمی توان در صف قرار داد .یک
سیگنال درست پس از بیدار شدن یک فرآیند برای اجرا یا هر زمان که فرآیند آماده بازگشت از یک تماس سیستمی است،
پردازش می شود .یک فرآیند ممکن است با انجام برخی اقدامات پیشفرض مثالً خاتمه ،اجرای یک تابع کنترل کننده سیگنال،
یا نادیده گرفتن سیگنال به سیگنال پاسخ دهد.
جدول 6.2سیگنال های تعریف شده برای UNIX SVR4را فهرست می کند.
350
سیستم عامل های داخلی و اصول طراحی351.........................................................................................................................
L
10 SIGBU خطای اتوبوس
S
11 SIGSEG نقض تقسیم بندی؛ فرآیند تالش می کند به مکان خارج از فضای آدرس
V مجازی خود دسترسی پیدا کند
12 SIGSYS استدالل بد برای فراخوانی سیستم
13 SIGPIP روی لوله ای بنویسید که هیچ خواننده ای به آن متصل نیست
E
14 SIGAL ساعت زنگدار؛ زمانی صادر می شود که فرآیندی بخواهد پس از مدتی سیگنال
RM دریافت کند
15 SIGTER خاتمه نرم افزار
M
16 SIGUS سیگنال تعریف شده توسط کاربر 1
R1
17 SIGUS سیگنال تعریف شده توسط کاربر 2
R2
18 SIGCH مرگ یک کودک
LD
19 SIGPW قطع برق
R
لینوکس شامل تمام مکانیسم های همزمانی موجود در سایر سیستم های یونیکس مانند ،SVR4از جمله لوله ها ،پیام ها،
حافظه مشترک و سیگنال ها است .لینوکس همچنین از نوع خاصی از سیگنالینگ به نام سیگنال های بالدرنگ RTپشتیبانی
می کند .اینها بخشی از ویژگی POSIX.1b Real-time Extensionsهستند .سیگنالهای RTبا سیگنالهای استاندارد
یونیکس یا POSIX.1از سه طریق اصلی متفاوت هستند:
351
سیستم عامل های داخلی و اصول طراحی352.........................................................................................................................
-با سیگنال های استاندارد ،هیچ مقدار یا پیامی نمی تواند به فرآیند هدف ارسال شود .این فقط یک اطالعیه است با سیگنال
های RTامکان ارسال یک مقدار یک عدد صحیح یا یک اشاره گر به همراه سیگنال وجود دارد.
لینوکس همچنین شامل مجموعهای غنی از مکانیسمهای همزمانی است که بهطور خاص برای استفاده در هنگام اجرای یک
رشته در حالت هسته در نظر گرفته شده است .یعنی اینها مکانیسم هایی هستند که در هسته برای ایجاد همزمانی در اجرای کد
هسته استفاده می شوند .این بخش مکانیسم های همزمانی هسته لینوکس را بررسی می کند.
عملیات اتمی
لینوکس مجموعه ای از عملیات را ارائه می دهد که عملیات اتمی روی یک متغیر را تضمین می کند .از این عملیات می توان
برای جلوگیری از شرایط مسابقه ساده استفاده کرد .یک عملیات اتمی بدون وقفه و بدون تداخل اجرا می شود .در یک سیستم
تک پردازنده ،رشته ای که یک عملیات اتمی را انجام می دهد نمی تواند پس از شروع عملیات تا پایان عملیات قطع شود .عالوه
بر این ،در یک سیستم چند پردازنده ،متغیری که روی آن کار میشود ،تا زمانی که این عملیات تکمیل شود ،از دسترسی
رشتههای دیگر قفل میشود.
دو نوع عملیات اتمی در لینوکس تعریف شده است :عملیات عدد صحیح که بر روی یک متغیر عدد صحیح عمل می کند و
عملیات بیت مپ که بر روی یک بیت در یک بیت مپ عمل می کند جدول .6.3این عملیات باید بر روی هر معماری که
لینوکس را پیاده سازی می کند ،اجرا شود .برای برخی از معماری ها ،دستورالعمل های زبان اسمبلی مربوطه برای عملیات اتمی
وجود دارد .در معماری های دیگر ،عملیاتی که گذرگاه حافظه را قفل می کند برای تضمین اتمی بودن عملیات استفاده می شود.
352
سیستم عامل های داخلی و اصول طراحی353.........................................................................................................................
void clear_bitint nr, void *addr پاک کردن بیت nrدر نقشه بیتی که
توسط adrبه آن اشاره شده است
void change_bitint nr, void *addr بیت nrرا در نقشه بیتی که توسط addr
به آن اشاره شده است ،معکوس کنید
int test_and_set_bitint بیت nrرا در نقشه بیتی که توسط addr
nr,void *addr به آن اشاره شده است تنظیم کنید .مقدار
بیت قدیمی را برگردانید
int test_and_clear_bitint پاک کردن بیت nrدر bitmapکه
nr,void *addr توسط addrبه آن اشاره شده است .مقدار
بیت قبلی را برگردانید
int test_and_change_bitint معکوس کردن بیت nrدر نقشه بیتی که
nr,void *addr توسط addrبه آن اشاره شده است .مقدار
بیت قبلی را برگردانید
int test_bitint nr, void *addr مقدار بیت nrرا در bitmapکه توسط
addrبه آن اشاره شده است ،برگردانید
برای عملیات اعداد صحیح اتمی ،از یک نوع داده خاص ،استفاده می شود .عملیات عدد صحیح اتمی فقط در این نوع داده قابل
استفاده است و هیچ عملیات دیگری در این نوع داده مجاز نیست LOVE04 .مزایای زیر را برای این محدودیت ها فهرست می
کند:
.1عملیات اتمی هرگز روی متغیرهایی که ممکن است در برخی شرایط از شرایط مسابقه محافظت نشده باشند استفاده نمی
شود.
.2متغیرهای این نوع داده در برابر استفاده نادرست توسط عملیات غیر اتمی محافظت می شوند.
.3اجرار نمی تواند به اشتباه دسترسی به مقدار را بهینه کند به عنوان مثال ،با استفاده از نام مستعار به جای آدرس صحیح
حافظه.
.4این نوع داده برای پنهان کردن تفاوت های خاص معماری در اجرای آن عمل می کند.
354
سیستم عامل های داخلی و اصول طراحی355.........................................................................................................................
یک استفاده معمولی از نوع داده عدد صحیح اتمی ،پیاده سازی شمارنده است.
عملیات بیت مپ اتمی بر روی یکی از دنباله ای از بیت ها در یک مکان حافظه دلخواه که با یک متغیر اشاره گر نشان داده شده
است ،عمل می کند .بنابراین ،هیچ معادلی برای نوع داده مورد نیاز برای عملیات عدد صحیح اتمی وجود ندارد.
عملیات اتمی ساده ترین روش برای همگام سازی هسته است.
یون .مکانیسم های قفل پیچیده تری را می توان در باالی آنها ساخت.
spinlock
متداول ترین تکنیکی که برای محافظت از یک بخش مهم در لینوکس استفاده می شود spinlockاست .فقط یک رشته در
یک زمان می تواند یک spinlockبدست آورد .هر رشته دیگری که تالش می کند قفل مشابه را بدست آورد به تالش چرخش
ادامه می دهد تا زمانی که بتواند قفل را بدست آورد .در اصل یک spinlockبر روی یک مکان صحیح در حافظه ساخته شده
است که توسط هر رشته قبل از ورود به بخش بحرانی خود بررسی می شود .اگر مقدار 0باشد ،رشته مقدار را 1می کند و وارد
بخش بحرانی خود می شود .اگر مقدار غیر صفر باشد ،رشته به طور مداوم مقدار را بررسی می کند تا زمانی که صفر شود .اجرای
اسپینالک آسان است ،اما این عیب را دارد که رشتههای قفلشده در حالت انتظار مشغول اجرا میشوند .بنابراین ،اسپینالکها
در موقعیتهایی که انتظار میرود زمان انتظار برای به دست آوردن قفل بسیار کوتاه باشد ،مثالً به ترتیب کمتر از دو سوئیچ
زمینه ،بسیار مؤثر هستند.
اسپینالکهای اساسی اسپینالک اصلی برخالف اسپینالک خواننده-نویسنده که بعداً توضیح داده شد در چهار رنگ ارائه
میشود جدول :6.4
:Plain-اگر بخش بحرانی کد توسط کنترل کننده های وقفه اجرا نشود یا وقفه ها در حین اجرای بخش بحرانی غیرفعال شوند،
می توان از spinlockساده استفاده کرد .بر وضعیت وقفه در پردازنده ای که روی آن اجرا می شود تأثیر نمی گذارد.
:_irq-اگر وقفه ها همیشه فعال هستند ،باید از این اسپینالک استفاده کرد.
355
سیستم عامل های داخلی و اصول طراحی356.........................................................................................................................
:_irqsave-اگر معلوم نیست که در صورت وجود کدام وقفه در زمان اجرا فعال یا غیرفعال می شود ،باید از این نسخه استفاده
شود .هنگامی که یک قفل به دست می آید ،وضعیت فعلی وقفه ها در پردازنده محلی ذخیره می شود تا با آزاد شدن قفل دوباره
ذخیره شود.
:_bh-هنگامی که یک وقفه رخ می دهد ،حداقل مقدار کار الزم توسط کنترل کننده وقفه مربوطه انجام می شود .یک قطعه
کد ،به نام نیمه پایین ،بقیه کار مربوط به وقفه را انجام می دهد و اجازه می دهد وقفه فعلی در اسرع وقت فعال شود .قفل
چرخشی _ bhبرای غیرفعال کردن و سپس فعال کردن نیمه های پایین برای جلوگیری از تضاد با بخش حیاتی محافظت شده
استفاده می شود.
در صورتی که برنامه نویس بداند که اطالعات محافظت شده توسط یک کنترل کننده وقفه یا نیمه پایینی قابل دسترسی نیست
از spinlockساده استفاده می شود .در غیر این صورت از اسپینالک غیر ساده مناسب استفاده می شود.
اسپینالکها بر روی یک سیستم تکپردازندهای در مقابل یک سیستم چند پردازندهای ،بهطور متفاوتی اجرا میشوند .برای یک
سیستم تک پردازنده ،مالحظات زیر اعمال می شود .اگر Preemptionکرنل خاموش باشد ،به طوری که یک رشته در حال
اجرا در حالت هسته نمی تواند قطع شود ،قفل ها در زمان اجرا حذف می شوند .آنها مورد نیاز نیستند .اگر پیشپرداخت هسته
فعال باشد ،که اجازه وقفهها را میدهد ،آنگاه قفلهای چرخشی دوباره جمعآوری میشوند یعنی هیچ آزمایشی برای مکان حافظه
اسپینالک انجام نمیشود اما به سادگی به عنوان کدی که وقفهها را فعال/غیرفعال میکند پیادهسازی میشوند .در یک سیستم
چند پردازنده spinlock ،در کدی اجرا میشود که در واقع مکان اسپینالک را آزمایش میکند .استفاده از مکانیسم
spinlockدر یک برنامه به آن اجازه می دهد تا مستقل از اجرای آن بر روی یک سیستم تک پردازنده یا چند پردازنده باشد.
356
سیستم عامل های داخلی و اصول طراحی357.........................................................................................................................
SPINLOCK READER-WRITERچرخش خواننده-نویسنده مکانیزمی است که اجازه می دهد تا درجه بیشتری از
همزمانی در هسته نسبت به اسپینالک اصلی وجود داشته باشد .اسپینالک خواننده-نویسنده به چندین رشته اجازه میدهد تا
دسترسی همزمان به ساختار داده یکسان را فقط برای خواندن داشته باشند ،اما برای رشتهای که قصد بهروزرسانی ساختار داده
را دارد ،دسترسی انحصاری به اسپینالک میدهد .هر اسپینالک خواننده-نویسنده از یک شمارنده خواننده 24بیتی و یک پرچم
باز کردن قفل با تفسیر زیر تشکیل شده است:
357
سیستم عامل های داخلی و اصول طراحی358.........................................................................................................................
همانند اسپینالک اصلی ،نسخه های ساده irq_ ،و _ irqsaveاسپینالک خواننده-نویسنده وجود دارد .توجه داشته باشید که
چرخش خواننده-نویسنده خوانندگان را بر نویسنده ها ترجیح می دهد .اگر چرخش برای خوانندگان نگه داشته شود ،تا زمانی
که حداقل یک خواننده وجود داشته باشد ،یک نویسنده نمی تواند جلوی چرخش را بگیرد .عالوه بر این ،حتی زمانی که
نویسنده منتظر است ،ممکن است خوانندگان جدیدی به قفل اسپینالک اضافه شوند.
سمافورها
در سطح کاربر ،لینوکس یک رابط سمافور مطابق با آن در UNIX SVR4فراهم می کند .در داخل ،لینوکس پیاده سازی
سمافورها را برای استفاده خود فراهم می کند .یعنی کدی که بخشی از هسته است می تواند سمافورهای هسته را فراخوانی کند.
این سمافورهای هسته نمی توانند مستقیماً توسط برنامه کاربر از طریق فراخوانی سیستم قابل دسترسی باشند .آنها به عنوان
توابعی در هسته پیاده سازی می شوند و بنابراین کارآمدتر از سمافورهای قابل مشاهده توسط کاربر هستند.
لینوکس سه نوع تسهیالت سمافور را در هسته فراهم می کند :سمافورهای باینری ،سمافورهای شمارش و سمافورهای خواننده-
نویسنده.
سمافورهای باینری و شمارش سمافورهای باینری و شمارش تعریف شده در لینوکس 2.6جدول 6.5همان عملکردی را دارند
که برای این سمافورها در فصل 5توضیح داده شد .نام تابع پایین و باال برای توابع ذکر شده در فصل 5به عنوان semWaitو
semSignalاستفاده می شود.به ترتیب.
358
سیستم عامل های داخلی و اصول طراحی359.........................................................................................................................
یک سمافور شمارش با استفاده از تابع sema_initمقداردهی اولیه می شود که به سمافور یک نام می دهد و مقدار اولیه را به
سمافور اختصاص می دهد .سمافورهای باینری که در لینوکس MUTEXنامیده می شوند ،با استفاده از توابع
init_MUTEXو init_ MUTEX_LOCKEDمقداردهی اولیه می شوند که سمافور را به ترتیب به 1یا 0مقداردهی
می کنند.
.1تابع downمربوط به عملیات semWaitسنتی است .یعنی threadسمافور را آزمایش می کند و اگر سمافور در دسترس
نباشد مسدود می شود .زمانی که یک عملیات باال بر روی این سمافور اتفاق می افتد ،موضوع بیدار می شود .توجه داشته باشید
که این نام تابع برای عملیات بر روی یک سمافور شمارش یا یک سمافور باینری استفاده می شود.
.2تابع down_interruptibleبه threadاجازه می دهد تا سیگنال هسته را دریافت کند و به آن پاسخ دهد در حالی که در
عملیات downمسدود شده است .اگر threadتوسط یک سیگنال بیدار شود ،تابع down_interruptibleمقدار شمارش
سمافور را افزایش میدهد و یک کد خطا که در لینوکس به نام EINTR-شناخته میشود ،برمیگرداند .این موضوع به رشته
هشدار می دهد که تابع سمافور فراخوانی شده قطع شده است .در واقع ،رشته مجبور شده است که سمافور را «دست بکشد».
این ویژگی برای درایورهای دستگاه و سایر سرویس هایی که در آنها به راحتی می توان عملیات سمافور را نادیده گرفت مفید
است.
.3تابع down_trylockاین امکان را فراهم می کند که سعی کنید یک سمافور را بدون مسدود شدن به دست آورید .اگر
سمافور موجود باشد ،اکتسابی است .در غیر این صورت ،این تابع یک مقدار غیر صفر را بدون مسدود کردن threadبرمی
گرداند.
سمافورهای خواننده-نویسنده سمافور خواننده-نویسنده کاربران را به خوانندگان و نویسنده ها تقسیم می کند .چندین خواننده
همزمان بدون نویسنده اما فقط یک نویسنده واحد بدون خواننده همزمان اجازه می دهد .در واقع ،سمافور به عنوان یک سمافور
شمارش برای خوانندگان اما یک سمافور باینری MUTEXبرای نویسندگان عمل می کند .جدول 6.5عملیات اصلی سمافور
خواننده-نویسنده را نشان می دهد .سمافور خواننده-نویسنده از خواب بی وقفه استفاده می کند ،بنابراین تنها یک نسخه از هر
یک از عملیات پایین وجود دارد.
359
سیستم عامل های داخلی و اصول طراحی360.........................................................................................................................
سمافورهای سنتی
void sema_initstruct semaphore سمافور ایجاد شده به صورت پویا را به
*sem,int count تعداد داده شده اولیه می کند
void init_MUTEXstruct سمافور ایجاد شده به صورت پویا را با تعداد
semaphore *sem 1راه اندازی می کند در ابتدا قفل آن باز
شده است
void سمافور ایجاد شده به صورت پویا را با تعداد
init_MUTEX_LOCKEDstruc 0راه اندازی می کند در ابتدا قفل شده است
t sema-phore *sem
void downstruct semaphore *sem تالش برای بدست آوردن سمافور داده
شده ،در صورت در دسترس نبودن سمافور،
وارد خواب بی وقفه می شود
int تالش برای به دست آوردن سمافور داده
down_interruptiblestruct شده ،در صورت در دسترس نبودن سمافور،
semaphore *sem
وارد خواب وقفهای میشود .اگر سیگنالی غیر
از نتیجه عملیات upدریافت شود ،مقدار
EINTRرا برمی گرداند
int down_trylockstruct تالش برای بدست آوردن سمافور داده
semaphore شده ،و در صورت در دسترس نبودن
*sem
سمافور ،مقدار غیر صفر را برمی گرداند.
void upstruct semaphore *sem سمافور داده شده را آزاد می کند
سمافورهای خواننده-
نویسنده
void init_rwsemstruct سمافور ایجاد شده به صورت پویا را با تعداد
rw_semaphore, 1راه اندازی می کند
*rwsem
360
سیستم عامل های داخلی و اصول طراحی361.........................................................................................................................
موانع
در برخی از معماریها ،اجرارها و/یا سختافزار پردازنده ممکن است برای بهینهسازی عملکرد ،دسترسیهای حافظه را در کد
منبع تغییر ترتیب دهند .این ترتیببندی مجدد برای بهینهسازی استفاده از خط لوله دستورالعمل در پردازنده انجام میشود.
الگوریتمهای مرتبسازی مجدد شامل بررسیهایی هستند تا اطمینان حاصل شود که وابستگیهای دادهها نقض نمیشوند .به
عنوان مثال ،کد:
; b = a; a = 1
دوباره سفارش داده نخواهد شد با این حال ،مواردی وجود دارد که مهم است که خواندن یا نوشتن به ترتیب مشخص شده به
دلیل استفاده از اطالعاتی که توسط رشته دیگر یا یک دستگاه سخت افزاری ایجاد می شود ،اجرا شود.
لینوکس برای اجرای ترتیبی که دستورالعملها اجرا میشوند ،تسهیالت مانع حافظه را فراهم میکند .جدول 6.6مهمترین توابع
تعریف شده برای این تسهیالت را فهرست می کند .عملیات rmbتضمین می کند که هیچ خواندنی در سرتاسر مانعی که توسط
361
سیستم عامل های داخلی و اصول طراحی362.........................................................................................................................
محل rmbدر کد تعریف شده است ،رخ نمی دهد .به طور مشابه ،عملیات wmbتضمین می کند که هیچ نوشته ای در سرتاسر
مانعی که توسط محل wmbدر کد تعریف شده است ،رخ نمی دهد .عملیات mbهم یک بار و هم یک مانع ذخیره می کند.
.1موانع مربوط به دستورالعمل های ماشین ،یعنی بارها و انبارها است .بنابراین ،دستور زبان سطح باالتر a = bشامل یک بار
خواندن از مکان bو یک ذخیره نوشتن به مکان aاست.
.2عملیات wmb ،rmbو mbرفتار اجرار و پردازنده را دیکته می کنند .در مورد اجرار ،عملیات مانع حکم می کند که اجرار
دستورات را در طول فرآیند اجرا دوباره ترتیب ندهد .در مورد پردازنده ،عملیات مانع حکم می کند که هر دستورالعملی که در
خط لوله قبل از مانع وجود دارد ،باید قبل از هر دستورالعملی که بعد از مانع با آن مواجه می شود ،برای اجرا متعهد شود.
rmb از مرتب شدن مجدد بارها در سراسر مانع جلوگیری می کند
wmb از سفارش مجدد فروشگاه ها در سراسر مانع جلوگیری می کند
mb از مرتب شدن مجدد بارها و انبارها در سراسر مانع جلوگیری می کند
Barrier از اجرار از ترتیب مجدد بارها یا ذخیره در سراسر مانع جلوگیری می کند
smp_rmb در ، SMPیک rmbو در UPیک barrierارائه می دهد.
smp_wmb در ، SMPیک wmbو در UPیک مانع ارائه می کند.
smp_mb در ، SMPیک mbو در UPیک مانع ارائه می دهد.
عملیات barrierیک نسخه سبک تر از عملیات mbاست که فقط رفتار اجرار را کنترل می کند .اگر بدانیم که پردازنده
سفارشهای مجدد نامطلوب را انجام نمیدهد ،مفید خواهد بود .به عنوان مثال ،پردازنده های x86اینتل ترتیب نوشتن را تغییر
نمی دهند.
عملیات smp_wmb ،smp_rmbو smp_mbیک بهینه سازی برای کد ارائه می کنند که ممکن است بر روی یک تک
پردازنده UPیا یک چند پردازنده متقارن SMPاجرا شود .این دستورالعمل ها به عنوان موانع حافظه معمولی برای یک SMP
تعریف می شوند ،اما برای یک ،UPهمه آنها فقط به عنوان موانع اجرار در نظر گرفته می شوند .عملیات smpدر شرایطی مفید
هستند که در آن وابستگی های داده مورد توجه فقط در یک زمینه SMPبوجود می آیند.
362
سیستم عامل های داخلی و اصول طراحی363.........................................................................................................................
عالوه بر مکانیسمهای همزمانی یونیکس ،SVR4سوالریس از چهار حالت اولیه همگامسازی رشته پشتیبانی میکند:
-سمافورها
-متغیرهای شرط
سوالریس این موارد اولیه را در هسته برای رشتههای هسته پیادهسازی میکند .آنها همچنین در کتابخانه threadsبرای
موضوعات سطح کاربر ارائه شده اند .شکل 6.15ساختارهای داده را برای این نمونه های اولیه نشان می دهد .توابع اولیه برای
اولیه ها برخی از اعضای داده را پر می کنند .هنگامی که یک شی همگام سازی ایجاد می شود ،اساساً تنها دو عملیات وجود دارد
که می توان انجام داد enter :قفل گرفتن و آزاد کردن باز کردن قفل .هیچ مکانیزمی در هسته یا کتابخانه رشته ها برای تحمیل
طرد متقابل یا جلوگیری از وقفه وجود ندارد .اگر یک رشته سعی کند به یک قطعه داده یا کدی که قرار است محافظت شود اما
از اولیه همگام سازی مناسب استفاده نمی کند ،دسترسی پیدا کند ،چنین دسترسی رخ می دهد .اگر یک رشته یک شی را قفل
کند و سپس قفل آن را باز نکند ،هیچ اقدامی برای هسته انجام نمی شود.
همه اصول اولیه همگام سازی به وجود یک دستورالعمل سخت افزاری نیاز دارند که به یک شی اجازه می دهد تا در یک عملیات
اتمی آزمایش و تنظیم شود.
یک mutexبرای اطمینان از اینکه فقط یک رشته در یک زمان می تواند به منبع محافظت شده توسط mutexدسترسی
داشته باشد استفاده می شود .رشته ای که mutexرا قفل می کند باید همان رشته ای باشد که قفل آن را باز می کند .یک
threadبا اجرای mutex_enterاولیه تالش می کند تا قفل mutexرا بدست آورد .اگر mutex_enterنتواند قفل را
تنظیم کند چون قبالً توسط رشته دیگری تنظیم شده است ،عمل مسدود کردن به اطالعات نوع خاصی که در شی mutex
ذخیره شده است بستگی دارد .سیاست مسدودسازی پیشفرض یک spinlockاست :یک رشته مسدود شده وضعیت قفل را در
حین اجرا در یک حلقه انتظار مشغول بررسی میکند .مکانیزم مسدودسازی مبتنی بر وقفه اختیاری است .در این مورد اخیر،
mutexشامل یک شناسه گردان است که صفی از رشتههای خوابیده روی این قفل را مشخص میکند.
363
سیستم عامل های داخلی و اصول طراحی364.........................................................................................................................
mutex_tryenterاولیه یک روش غیر مسدود کننده برای اجرای تابع طرد متقابل ارائه می دهد .این برنامهنویس را قادر
میسازد تا از یک رویکرد انتظار اشغالی برای رشتههای سطح کاربر استفاده کند ،که از مسدود کردن کل فرآیند به دلیل مسدود
شدن یک رشته جلوگیری میکند.
سمافورها
قفل خواننده/نویسنده
قفل خواننده/نویسنده به چندین رشته اجازه می دهد تا به طور همزمان به یک شی محافظت شده توسط قفل دسترسی فقط
خواندنی داشته باشند .همچنین به یک رشته اجازه می دهد تا در یک زمان به شی برای نوشتن دسترسی داشته باشد ،در حالی
که همه خوانندگان را حذف می کند .وقتی قفل برای نوشتن به دست میآید ،وضعیت قفل نوشتن را به خود میگیرد :همه
364
سیستم عامل های داخلی و اصول طراحی365.........................................................................................................................
رشتههایی که سعی در دسترسی برای خواندن یا نوشتن دارند باید منتظر بمانند .اگر یک یا چند خواننده قفل را دریافت کرده
باشند ،وضعیت آن قفل خوانده شده است .ابتدایی ها به شرح زیر است:
متغیرهای شرط
یک متغیر شرط برای صبر کردن تا زمانی که یک شرط خاص درست باشد استفاده می شود .متغیرهای شرط باید همراه با قفل
mutexاستفاده شوند .این یک مانیتور از نوع نشان داده شده در شکل 6.14را پیاده سازی می کند .ابتدایی ها به شرح زیر
است:
آن را قبل از بازگشت از آنجایی که ممکن است دریافت مجدد mutexتوسط رشته های دیگری که منتظر mutexهستند
مسدود شود ،شرایطی که باعث انتظار می شود باید دوباره آزمایش شود .بنابراین ،استفاده معمولی به شرح زیر است:
این اجازه می دهد تا شرط یک عبارت پیچیده باشد ،زیرا توسط mutexمحافظت می شود.
ویندوز همگام سازی بین رشته ها را به عنوان بخشی از معماری شی فراهم می کند .مهمترین روشهای همگامسازی عبارتند از
اشیاء توزیعکننده اجرایی ،بخشهای حیاتی حالت کاربر ،قفلهای باریک خواننده-نویسنده ،متغیرهای شرط ،و عملیات بدون
365
سیستم عامل های داخلی و اصول طراحی366.........................................................................................................................
قفل .اشیاء Dispatcherاز توابع انتظار استفاده می کنند .ابتدا توابع انتظار را شرح می دهیم و سپس به روش های همگام
سازی نگاه می کنیم.
توابع انتظار
توابع انتظار به یک رشته اجازه می دهد تا اجرای خود را مسدود کند .توابع انتظار تا زمانی که معیارهای مشخص شده برآورده
نشده باشند باز نمی گردند .نوع تابع انتظار مجموعه معیارهای مورد استفاده را تعیین می کند .هنگامی که یک تابع انتظار
فراخوانی می شود ،بررسی می کند که آیا معیارهای انتظار برآورده شده اند یا خیر .اگر معیارها برآورده نشده باشند ،رشته
فراخوان وارد حالت انتظار می شود .در حالی که منتظر برآورده شدن معیارها است ،از زمان پردازشگر استفاده نمی کند .ساده
ترین نوع تابع انتظار ،تابعی است که روی یک شی منتظر می ماند .تابع WaitForSingleObjectبه یک دسته برای یک
-synchroniنیاز دارد
شیء زاسیون تابع زمانی که یکی از موارد زیر رخ می دهد برمی گردد:
-فاصله زمانی سپری می شود .بازه وقفه را می توان روی INFINITEتنظیم کرد تا مشخص شود که زمان انتظار تمام نمی
شود.
مکانیزمی که توسط Windows Executiveبرای پیاده سازی تسهیالت همگام سازی استفاده می شود ،خانواده اشیاء توزیع
کننده است که با توضیحات مختصری در جدول 6.7فهرست شده است.
366
سیستم عامل های داخلی و اصول طراحی367.........................................................................................................................
367
سیستم عامل های داخلی و اصول طراحی368.........................................................................................................................
رشته یک موجودیت اجرایی موضوع خاتمه می همه آزاد شدند
در یک فرآیند یابد
پنج نوع شیء اول در جدول به طور خاص برای پشتیبانی از همگام سازی طراحی شده اند .انواع شیء باقی مانده کاربردهای
دیگری نیز دارند اما ممکن است برای همگام سازی نیز استفاده شوند.
هر نمونه شی توزیع کننده می تواند در حالت سیگنال یا بدون عالمت باشد .یک رشته می تواند روی یک شی در حالت بدون
عالمت مسدود شود .زمانی که جسم وارد حالت سیگنال شده شود ،رشته آزاد می شود .مکانیسم ساده است :یک رشته با
استفاده از دسته شی همگامسازی ،یک درخواست انتظار برای Windows Executiveصادر میکند .هنگامی که یک شی
وارد وضعیت سیگنال شده می شود Windows Executive ،یک یا همه اشیاء رشته ای را که در آن شیء توزیع کننده
منتظر هستند ،آزاد می کند.
شی رویداد در ارسال سیگنال به یک رشته که نشان می دهد یک رویداد خاص رخ داده است مفید است .به عنوان مثال ،در
ورودی و خروجی همپوشانی ،سیستم یک شی رویداد مشخص را در حالت سیگنال قرار می دهد که عملیات همپوشانی کامل
شده است .شی mutexبرای تحمیل دسترسی انحصاری متقابل به یک منبع استفاده می شود ،که اجازه می دهد تنها یک شی
threadدر یک زمان دسترسی داشته باشد .بنابراین به عنوان یک سمافور باینری عمل می کند .هنگامی که شی mutexوارد
حالت سیگنال شده می شود ،تنها یکی از رشته های منتظر در mutexآزاد می شود Mutexe .ها را می توان برای همگام
سازی رشته های در حال اجرا در فرآیندهای مختلف استفاده کرد .مانند mutexeها ،اشیاء سمافور ممکن است توسط رشته ها
در چندین فرآیند به اشتراک گذاشته شوند .سمافور ویندوز یک سمافور شمارش کننده است .در اصل ،شی تایمر قابل انتظار در
زمان معین و/یا در فواصل زمانی معین سیگنال می دهد.
بخشهای بحرانی مکانیزم همگامسازی مشابهی را ارائه میکنند که توسط اشیاء mutexارائه میشود ،با این تفاوت که
بخشهای بحرانی را میتوان تنها توسط رشتههای یک فرآیند استفاده کرد .اشیاء رویداد mutex ،و سمافور نیز میتوانند در
یک برنامه کاربردی تک فرآیندی مورد استفاده قرار گیرند ،اما بخشهای حیاتی مکانیسم بسیار سریعتر و کارآمدتری را برای
همگامسازی حذف متقابل ارائه میکنند.
368
سیستم عامل های داخلی و اصول طراحی369.........................................................................................................................
این فرآیند مسئول تخصیص حافظه مورد استفاده توسط یک بخش بحرانی است .معموالً این کار با اعالن یک متغیر از نوع
CRITICAL_SECTIONانجام می شود .قبل از اینکه رشتههای فرآیند بتوانند از آن استفاده کنند ،بخش بحرانی را با
استفاده از تابع Initialize Critical Sectionمقداردهی اولیه کنید.
یک رشته از تابع Enter Critical Sectionیا Try Enter Critical Sectionبرای درخواست مالکیت یک بخش مهم
استفاده می کند .از تابع Leave Critical Sectionبرای آزادسازی مالکیت یک بخش حیاتی استفاده می کند .اگر بخش
مهم در حال حاضر متعلق به رشته دیگری باشد Enter Critical Section ،به طور نامحدود برای مالکیت منتظر می ماند .در
مقابل ،هنگامی که یک شی mutexبرای حذف متقابل استفاده می شود ،توابع انتظار یک بازه زمانی مشخص را می پذیرند.
تابع Try Enter Critical Sectionسعی می کند بدون مسدود کردن رشته فراخوان وارد بخش مهمی شود.
بخش های بحرانی هنگام تالش برای به دست آوردن mutexاز یک الگوریتم پیچیده استفاده می کنند .اگر سیستم یک چند
پردازنده باشد ،کد سعی می کند یک قفل اسپین را بدست آورد .این در شرایطی که بخش بحرانی فقط برای مدت کوتاهی به
دست می آید ،به خوبی کار می کند .عمالً spinlockبرای مواردی بهینه میشود که رشتهای که در حال حاضر مالک بخش
حیاتی است روی پردازنده دیگری اجرا میشود .اگر spinlockرا نتوان در تعداد معقولی از تکرارها بدست آورد ،از یک شی
توزیع کننده برای مسدود کردن رشته استفاده می شود تا هسته بتواند رشته دیگری را به پردازنده ارسال کند.
شیء توزیع کننده فقط به عنوان آخرین راه حل اختصاص داده می شود .بیشتر بخشهای مهم برای درستی مورد نیاز هستند،
اما در عمل به ندرت مورد بحث قرار میگیرند .با تخصیص تنبلی شی دیسپچر ،سیستم مقادیر قابل توجهی از حافظه مجازی
هسته را ذخیره می کند.
ویندوز ویستا یک خواننده-نویسنده حالت کاربر اضافه کرد .مانند بخشهای حیاتی ،قفل خواننده-نویسنده تنها پس از تالش
برای استفاده از قفل چرخشی وارد هسته میشود تا مسدود شود .باریک است به این معنا که معموالً فقط به تخصیص یک تکه
حافظه به اندازه اشاره گر نیاز دارد.
برای استفاده از یک قفل ،SRWیک فرآیند یک متغیر از نوع SRWLOCKرا اعالم میکند و یک
InitializeSRWLockرا فراخوانی میکند تا آن را اولیه کند.
ویندوز نیز دارای متغیرهای شرطی است .این فرآیند باید یک CONDITION_VARIABLEرا اعالم کند و با فراخوانی
InitializeConditionVariableآن را در یک رشته مقداردهی اولیه کند .متغیرهای Conditionرا میتوان با بخشهای
بحرانی یا قفلهای SRWاستفاده کرد ،بنابراین دو روش وجود دارد SleepConditionVariableCS ،و
369
سیستم عامل های داخلی و اصول طراحی370.........................................................................................................................
دو روش wakeوجود دارد WakeConditionVariable ،و Wake AllConditionVariableکه به ترتیب یک یا همه
رشته های خواب را بیدار می کنند .متغیرهای شرط به صورت زیر استفاده می شوند:
ویندوز همچنین برای همگام سازی به شدت به عملیات در هم قفل شده متکی است .عملیات در هم قفل شده از امکانات سخت
افزاری استفاده می کند تا تضمین کند که مکان های حافظه را می توان در یک عملیات اتمی خواند ،اصالح کرد و نوشت .به
عنوان مثال می توان به InterlockedIncrementو InterlockedCompareExchangeاشاره کرد .دومی اجازه می
دهد تا یک مکان حافظه فقط در صورتی به روز شود که از زمان خواندن مقادیر آن تغییر نکرده باشد.
بسیاری از اولیههای همگامسازی از عملیات به هم پیوسته در پیادهسازی خود استفاده میکنند ،اما این عملیات برای
برنامهنویسان برای موقعیتهایی که میخواهند بدون گرفتن قفل نرمافزاری همگامسازی شوند نیز در دسترس هستند .این به
اصطالح اولیههای همگامسازی بدون قفل این مزیت را دارند که یک رشته هرگز نمیتواند از پردازنده جدا شود ،مثالً در پایان
زمانش ،در حالی که هنوز یک قفل را نگه داشته است .بنابراین آنها نمی توانند از اجرای رشته دیگری جلوگیری کنند.
بدوی پیچیدهتر بدون قفل را میتوان از عملیاتهای درهمبسته ،بهویژه ،Windows SListsکه یک صف LIFOبدون قفل
ایجاد میکند ،ساخت .لیست های SLبا استفاده از توابعی مانند InterlockedPushEntrySListو
InterlockedPopEntrySListمدیریت می شوند.
هسته لینوکس شامل تعدادی ویژگی است که می تواند برای ارتباطات بین فرآیندی IPCاستفاده شود ،از جمله لوله ها ،حافظه
مشترک ،پیام ها ،سوکت ها ،سمافورها و سیگنال ها .اندروید از این ویژگی ها برای IPCاستفاده نمی کند ،بلکه قابلیت جدیدی
370
سیستم عامل های داخلی و اصول طراحی371.........................................................................................................................
به نام Binderرا به هسته اضافه می کند Binder .یک قابلیت فراخوانی روش از راه دور RPCسبک وزن را ارائه می دهد که
هم از نظر حافظه و هم نیازهای پردازش کارآمد است و به خوبی برای نیازهای یک سیستم تعبیه شده مناسب است.
بایندر برای میانجی گری تمام تعامل بین دو فرآیند استفاده می شود .یک جزء در یک فرآیند مشتری یک تماس صادر می کند.
این فراخوانی به Binderدر هسته هدایت می شود که در فرآیند مقصد سرویس تماس را به مؤلفه مقصد ارسال می کند.
بازگشت از مقصد از طریق Binderانجام می شود و در فرآیند فراخوانی به مؤلفه فراخوان تحویل داده می شود.
به طور سنتی ،اصطالح RPCبه تعامل تماس/بازگشت بین یک فرآیند مشتری در یک ماشین و یک فرآیند سرور در ماشین
دیگر اشاره دارد .در مورد اندروید ،مکانیسم RPCبین دو فرآیند در یک سیستم اما در ماشینهای مجازی متفاوت اجرا میشود.
روش مورد استفاده برای برقراری ارتباط با Binderفراخوانی سیستم ioctlاست .فراخوانی ioctlیک فراخوانی سیستمی همه
منظوره برای عملیات ورودی/خروجی خاص دستگاه است .می توان از آن برای دسترسی به درایورهای دستگاه و همچنین
درایورهای شبه دستگاه استفاده کرد که Binderنمونه ای از آن است .درایور شبه دستگاه از رابط عمومی مشابه درایور دستگاه
استفاده می کند ،اما برای کنترل برخی از عملکردهای هسته استفاده می شود .فراخوانی ioctlشامل پارامترهایی است که باید
انجام شود و آرگومان های مناسب.
شکل 6.16استفاده معمولی از Binderرا نشان می دهد .خطوط عمودی بریده شده نشان دهنده رشته ها در یک فرآیند
هستند .قبل از اینکه فرآیند بتواند از یک سرویس استفاده کند ،آن سرویس باید شناخته شود .فرآیندی که یک سرویس را
میزبانی می کند ،چندین رشته ایجاد می کند تا بتواند چندین درخواست را به طور همزمان مدیریت کند .هر رشته با یک ioctl
مسدود کننده خود را به Binderمی شناسد.
371
سیستم عامل های داخلی و اصول طراحی372.........................................................................................................................
.1یک جزء مشتری ،مانند یک اکتیویتی ،یک سرویس را به صورت فراخوانی با داده های آرگومان فراخوانی می کند.
.2تماس یک پروکسی را فراخوانی می کند که می تواند تماس را به تراکنش با درایور Binderتبدیل کند .پروکسی رویه ای به
نام مارشالینگ را انجام می دهد که ساختارهای داده برنامه های کاربردی سطح باالتر یعنی پارامترهای درخواست/پاسخ را به
یک بسته تبدیل می کند .بسته محفظه ای برای یک پیام مرجع داده ها و شی است که می تواند از طریق درایور Binder
ارسال شود .سپس پروکسی تراکنش را با یک تماس مسدود کننده ioctlبه بایندر ارسال می کند.
Binder .3سیگنالی را به رشته هدف می فرستد که رشته را از تماس مسدود کننده ioctlبیدار می کند .بسته در فرآیند
هدف به یک جزء خرد تحویل داده می شود.
.4خرد رویهای به نام unmarshallingرا انجام میدهد که ساختارهای داده برنامههای سطح باالتر را از بستههای دریافتشده
از طریق تراکنشهای بایندر بازسازی میکند .سپس پروکسی مؤلفه سرویس را با تماسی که با تماس صادر شده توسط مؤلفه
مشتری یکسان است فراخوانی می کند.
.6خرد ،داده های برگشتی را در یک بسته پاسخ قرار می دهد و سپس بسته پاسخ را از طریق یک ioctlبه Binderارسال می
کند.
Binder ioctl .7فراخوانی را در پروکسی مشتری بیدار می کند ،که داده های پاسخ تراکنش را دریافت می کند.
.8پروکسی نتیجه را از بسته پاسخ جدا می کند و نتیجه را به مؤلفه مشتری که تماس سرویس را صادر کرده است برمی گرداند.
6.12خالصه
وقفه مسدود کردن مجموعه ای از فرآیندها است که یا برای منابع سیستم رقابت می کنند یا با یکدیگر ارتباط برقرار می کنند.
انسداد دائمی است مگر اینکه سیستمعامل اقدامات خارقالعادهای مانند از بین بردن یک یا چند فرآیند یا مجبور کردن یک یا
چند فرآیند به عقب نشینی انجام دهد .وقفه ممکن است شامل منابع قابل استفاده مجدد یا منابع قابل مصرف باشد .منبع قابل
استفاده مجدد منبعی است که در اثر استفاده از بین نمی رود ،مانند کانال I/Oیا ناحیه ای از حافظه .یک منبع مصرفی منبعی
است که در صورت به دست آوردن آن توسط یک فرآیند از بین می رود .مثالها شامل پیامها و اطالعات در بافرهای
ورودی/خروجی است.
372
سیستم عامل های داخلی و اصول طراحی373.........................................................................................................................
سه رویکرد کلی برای مقابله با وقفه وجود دارد :پیشگیری ،تشخیص و اجتناب .پیشگیری از وقفه با اطمینان از برآورده نشدن
یکی از شرایط الزم برای وقفه ،عدم وقوع وقفه را تضمین می کند .اگر سیستم عامل همیشه مایل به اعطای درخواست های
منابع باشد ،تشخیص وقفه مورد نیاز است .به طور دوره ای ،سیستم عامل باید وقفه را بررسی کند و برای رفع وقفه اقدام کند.
اجتناب از وقفه شامل تجزیه و تحلیل هر درخواست منبع جدید برای تعیین اینکه آیا می تواند منجر به وقفه شود یا خیر ،و
اعطای آن تنها در صورت عدم امکان وقفه است.
مقاله کالسیک در مورد وقفه ها ،HOLT72 ،همچنان ارزش خواندن را دارد ،مانند .COFF71نظرسنجی خوب دیگر
ISLO80است CORB96 .یک درمان کامل برای تشخیص وقفه است DIMI98 .نمای کلی خوبی از وقفه ها است .دو مقاله
توسط لوین LEVI03a, LEVI03bبرخی از مفاهیم مورد استفاده در بحث وقفه را روشن می کند SHUB03 .یک نمای
کلی مفید از وقفه است ABRA06 .یک بسته تشخیص وقفه را توصیف می کند.
مکانیسم های همزمانی در ،Linux ،UNIX SVR4و Solaris 2به ترتیب در LOVE10 ،GRAY97و MCDO07
به خوبی پوشش داده شده اند HALL10 .یک درمان کامل از همزمانی یونیکس و مکانیسم های ارتباطی بین فرآیندی است.
ABRA06آبرامسون" .T ،تشخیص وقفه های بالقوه ".مجله دکتر داب ،ژانویه .2006
COFF71کافمن ،ای .الفیک ،م .و شوشانی ،ع« .وقفه های سیستم» .بررسی های محاسباتی ،ژوئن .1971
" .CORB96 Corbett, Jارزیابی روش های تشخیص وقفه برای نرم افزار همزمان ".معامالت IEEEدر مهندسی نرم افزار،
مارس .1996
" .G ،DIMI98 Dimitoglouوقفه ها و روش هایی برای تشخیص ،پیشگیری و بازیابی آنها در سیستم عامل های مدرن".
بررسی سیستم عامل ها ،جوالی .1998
" .R ،HOLT72 Holtبرخی از ویژگی های وقفه سیستم های کامپیوتری ".بررسی های محاسباتی ،سپتامبر .1972
373
سیستم عامل های داخلی و اصول طراحی374.........................................................................................................................
" .ISLO80 Isloor, S., and Marsland, Tمشکل وقفه :یک مرور کلی ".کامپیوتر ،سپتامبر .1980
LEVI03aلوین ،جی« .تعریف وقفه » .بررسی سیستم عامل ها ،ژانویه .2003
LEVI03bلوین ،جی" .تعریف وقفه با منابع قابل تعویض ".بررسی سیستم عامل ها ،جوالی .2003
.R ،LOVE10 Loveتوسعه هسته لینوکس .رودخانه فوقانی زین ،نیوجرسی :ادیسون -وسلی.2010 ،
MCDO07 McDougall, R., and Mauro, J. Solaris Internals: Solaris 10 and OpenSolaris Kernel
.2007 ،CA: Sun Microsystems Press ،Architecture. Palo Alto
".T. "Android Binder: Android Interprocess Communication ،SCHR11 Schreiberپایان نامه سمینار،
دانشگاه روهر بوخوم 5 ،اکتبر www.nds.rub.de/ media/attachments/files/2012/03/binder.pdf .2011؟
« .C ،SHUB03 Shubدرمان یکپارچه بنبست» .مجله محاسبات در کالج های کوچک ،اکتبر .2003در دسترس از طریق
کتابخانه دیجیتال .ACM
تصاویر متحرک
انیمیشنی که وقفه را نشان می دهد در وب سایت Premiumموجود است .خواننده تشویق می شود که انیمیشن را برای
تقویت مفاهیم این فصل مشاهده کند.
شرایط کلیدی
374
سیستم عامل های داخلی و اصول طراحی375.........................................................................................................................
بررسی سواالت
.6.2سه شرطی که باید وجود داشته باشد تا امکان وقفه وجود داشته باشد چیست؟
.6.5دو راه را فهرست کنید که از طریق آنها می توان از شرط عدم پیش گیری جلوگیری کرد.
چالش ها و مسائل
.6.2نشان دهید که چگونه هر یک از تکنیک های پیشگیری ،اجتناب ،و تشخیص را می توان در شکل 6.1به کار برد.
.6.3برای شکل ،6.3یک شرح روایی از هر یک از شش مسیر به تصویر کشیده شده ،مشابه شرح مسیرهای شکل 6.2ارائه شده
در بخش 6.1ارائه دهید.
.6.4بیان شد که وقفه نمی تواند برای وضعیت منعکس شده در شکل 6.3رخ دهد .آن جمله را توجیه کنید.
.6.5با توجه به حالت زیر برای الگوریتم Banker. 6پردازش P0تا P5
375
سیستم عامل های داخلی و اصول طراحی376.........................................................................................................................
ج نشان دهید که وضعیت فعلی ایمن است ،یعنی یک توالی امن از فرآیندها را نشان دهید .عالوه بر این ،به دنباله نشان می دهد
که چگونه در دسترس آرایه کاری با پایان هر فرآیند تغییر می کند.
د با توجه به درخواست 3،2،3،3از فرآیند .P5آیا این درخواست باید پذیرفته شود؟ چرا و چرا نه؟
.6.6در کد زیر ،سه فرآیند برای شش منبع با برچسب Aتا Fرقابت می کنند.
آ .با استفاده از نمودار تخصیص منابع شکل های 6.5و ،6.6امکان وقفه در این پیاده سازی را نشان می دهد.
ب ترتیب برخی از درخواست های دریافت را برای جلوگیری از احتمال هر گونه وقفه تغییر دهید .شما نمی توانید درخواست ها
را بین رویه ها جابه جا کنید ،فقط ترتیب داخل هر رویه را تغییر دهید .برای توجیه پاسخ خود از نمودار تخصیص منابع استفاده
کنید.
.6.7یک سیستم اسپولینگ شکل 6.17شامل یک فرآیند ورودی ،Iیک فرآیند کاربر Pو یک فرآیند خروجی Oاست که
توسط دو بافر متصل شده اند .فرآیندها داده ها را در بلوک هایی با اندازه مساوی مبادله می کنند .این بلوک ها با استفاده از یک
مرز شناور بین دیسک بافر می شوند
376
سیستم عامل های داخلی و اصول طراحی377.........................................................................................................................
بافرهای ورودی و خروجی بسته به سرعت فرآیندها .اولیه های ارتباطی استفاده شده تضمین می کنند که محدودیت منابع زیر
برآورده می شود :موارد زیر در مورد فرآیندها شناخته شده است:
.1تا زمانی که محیط داده ها را تامین می کند ،پردازش من در نهایت آن را به دیسک وارد می کنم به شرطی که فضای دیسک
در دسترس باشد.
.2تا زمانی که ورودی روی دیسک در دسترس باشد ،فرآیند Pدر نهایت آن را مصرف می کند و برای هر ورودی بلوک مقدار
محدودی از داده را روی دیسک خروجی می دهد به شرطی که فضای دیسک در دسترس باشد.
.3تا زمانی که خروجی روی دیسک موجود باشد ،فرآیند Oدر نهایت آن را مصرف می کند.
.6.8یک محدودیت منبع اضافی را پیشنهاد کنید که از وقفه در مشکل جلوگیری می کند
6.7اما همچنان اجازه می دهد که مرز بین بافرهای ورودی و خروجی مطابق با نیازهای فعلی فرآیندها متفاوت باشد.
.6.9در سیستم چندبرنامهنویسی ،THE DIJK68یک درام پیشساز دیسک برای ذخیرهسازی ثانویه به بافرهای ورودی،
مناطق پردازش و بافرهای خروجی ،با مرزهای شناور ،بسته به سرعت فرآیندهای درگیر ،تقسیم میشود .وضعیت فعلی درام را
می توان با پارامترهای زیر مشخص کرد:
محدودیت های منابع الزم را تدوین کنید که تضمین می کند از ظرفیت درام تجاوز نمی شود و حداقل تعداد صفحات به طور
دائم برای خروجی و پردازش رزرو می شود.
.6.10در سیستم چندبرنامهنویسی ،THEیک صفحه میتواند تغییر حالتهای زیر را انجام دهد:
ب اگر مفروضات مطرح شده در مسئله 6.6در مورد فرآیندهای ورودی ،فرآیندهای کاربر و فرآیندهای خروجی برقرار باشد ،آیا
هر یک از آنها می تواند منجر به وقفه شود؟
.6.11سیستمی را در نظر بگیرید که مجموعاً 150واحد حافظه دارد که به سه فرآیند تخصیص داده شده است:
الگوریتم بانکدار را برای تعیین اینکه آیا اعطای هر یک از درخواست های زیر ایمن است یا خیر ،اعمال کنید .اگر بله ،دنباله ای
از خاتمه هایی را که می توان تضمین کرد مشخص کنید .اگر نه ،کاهش جدول تخصیص حاصل را نشان دهید.
آ .فرآیند چهارم با حداکثر نیاز به حافظه 60و نیاز اولیه 25واحد وارد می شود.
ب فرآیند چهارم با حداکثر نیاز به حافظه 60و نیاز اولیه 35واحد وارد می شود.
378
سیستم عامل های داخلی و اصول طراحی379.........................................................................................................................
.6.13یک الگوریتم خط لوله به گونه ای پیاده سازی می شود که جریانی از عناصر داده از نوع Tکه توسط یک فرآیند P0
تولید می شود از طریق دنباله ای از فرآیندهای Pn - 1 ،... ،P2 ،P1عبور می کند که بر روی عناصر به ترتیب عمل می کند.
آ .یک بافر پیام تعمیمیافته را تعریف کنید که حاوی تمام عناصر دادهای است که تا حدی مصرف شده است و یک الگوریتم برای
فرآیند Pi 0 i n 1به شکل بنویسید.
دریافت از سلف؛ عنصر مصرف ارسال به جانشین :برای همیشه فرض کنید P0عناصر ورودی ارسال شده توسط Pn - 1را
دریافت می کند .الگوریتم باید فرآیندها را قادر سازد تا مستقیماً روی پیام های ذخیره شده در بافر عمل کنند تا کپی کردن غیر
ضروری باشد.
ب نشان دهید که فرآیندها را نمی توان با توجه به بافر مشترک به وقفه رساند.
.6.14فرض کنید دو فرآیند زیر foo ،و ،barبه طور همزمان اجرا میشوند و متغیرهای سمافور Sو Rهر کدام به 1
مقداردهی اولیه شدهاند و متغیر عدد صحیح xبا 0اولیه به اشتراک گذاشته میشوند.
آ .آیا اجرای همزمان این دو فرآیند می تواند منجر به مسدود شدن یک یا هر دو برای همیشه شود؟ اگر بله ،یک دنباله اجرا
بدهید که در آن یکی یا هر دو برای همیشه مسدود می شوند.
ب آیا اجرای همزمان این دو فرآیند می تواند منجر به تعویق نامحدود یکی از آنها شود؟ اگر بله ،یک دنباله اجرا را ارائه دهید که
در آن قطعاً به تعویق افتاده است.
.6.15سیستمی متشکل از چهار فرآیند و یک منبع را در نظر بگیرید .وضعیت فعلی ماتریس های ادعا و تخصیص عبارتند از:
حداقل تعداد واحدهای منبع مورد نیاز برای در دسترس بودن برای ایمن بودن این حالت چقدر است؟
379
سیستم عامل های داخلی و اصول طراحی380.........................................................................................................................
.6.16روش های زیر را برای مدیریت وقفه در نظر بگیرید 1 :الگوریتم بانکدار 2 ،تشخیص وقفه و کشش رشه ،آزاد کردن همه
منابع 3 ،رزرو همه منابع از قبل 4،رشته را مجدداً راه اندازی کنید و در صورتی که رشته نیاز به صبر داشته باشد ،همه منابع را
آزاد کنید 5 ،ترتیب منابع ،و 6وقفه را شناسایی کنید و اقدامات رشته را به عقب برگردانید.
آ .یکی از معیارهای مورد استفاده در ارزیابی رویکردهای مختلف به وقفه این است که کدام رویکرد بیشترین همزمانی را می
دهد .به عبارت دیگر ،کدام رویکرد اجازه می دهد تا در زمانی که وقفه وجود ندارد ،بدون انتظار پیشرفت کنند؟ برای هر یک از
روشهای مدیریت بنبست که فهرست شدهاند ،یک ترتیب رتبهبندی از 1تا 6بدهید ،جایی که 1بیشترین میزان همزمانی را
میدهد .در مورد سفارش خود نظر دهید
ب معیار دیگر کارایی است .به عبارت دیگر ،که به کمترین سربار پردازنده نیاز دارد .رتبه بندی رویکردها از 1تا ،6که 1
کارآمدترین است ،با این فرض که وقفه یک رویداد بسیار نادر است .در مورد سفارش خود نظر دهید اگر به طور مکرر وقفه رخ
دهد ،سفارش شما تغییر می کند؟
.6.17در مورد راه حل زیر برای مسئله فیلسوفان ناهار خوری نظر دهید .یک فیلسوف گرسنه ابتدا چنگال چپ خود را برمی
دارد .اگر چنگال سمت راستش هم موجود باشد ،چنگال سمت راستش را برمی دارد و شروع به خوردن می کند .در غیر این
صورت دوباره چنگال چپ خود را می گذارد و این چرخه را تکرار می کند.
.6.18فرض کنید دو نوع فیلسوف وجود دارد .یک نوع همیشه ابتدا چنگال چپ خود را برمی دارد "چپ" ،و نوع دیگر همیشه
اول چنگال سمت راست خود را برمی دارد "راست" .رفتار چپ در شکل 6.12تعریف شده است .رفتار یک حق به شرح زیر
است:
آ .هر گونه چیدمان صندلی چپ و راست با حداقل یکی از هر کدام از وقفه جلوگیری می کند.
ب هر گونه چیدمان صندلی چپ و راست با حداقل یکی از هر کدام از گرسنگی جلوگیری می کند.
380
سیستم عامل های داخلی و اصول طراحی381.........................................................................................................................
.6.19شکل 6.18راه حل دیگری را برای مشکل فیلسوفان غذاخوری با استفاده از مانیتور نشان می دهد .با شکل 6.14مقایسه
کنید و نتیجه گیری خود را گزارش کنید.
.6.20در جدول ،6.3برخی از عملیات اتمی لینوکس شامل دو دسترسی به یک متغیر ،مانند atomic_readatomic_t *v
نمی شود .یک عملیات خواندن ساده به وضوح در هر معماری اتمی است .بنابراین ،چرا این عملیات به مجموعه عملیات اتمی
اضافه شده است؟
.6.22دو متغیر aو bبه ترتیب دارای مقادیر اولیه 1و 2هستند .کد زیر برای سیستم لینوکس است:
381
سیستم عامل های داخلی و اصول طراحی382.........................................................................................................................
382
سیستم عامل های داخلی و اصول طراحی383.........................................................................................................................
قسمت 3حافظه
فصل 7
مدیریت حافظه
7.3صفحه بندی
7.4تقسیم بندی
7.5خالصه
7.7واژههای کلیدی ،سؤاالت مروری ،و مشکالت پیوست A7بارگیری و پیوند دادن
اهداف یادگیری
-دلیل پارتیشن بندی حافظه را درک کنید و تکنیک های مختلفی را که استفاده می شود توضیح دهید.
383
سیستم عامل های داخلی و اصول طراحی384.........................................................................................................................
در یک سیستم برنامه نویسی تک ،حافظه اصلی به دو بخش تقسیم می شود :یک بخش برای سیستم عامل مانیتور مقیم ،هسته
و بخش دیگر برای برنامه در حال اجرا .در یک سیستم چندبرنامهنویسی ،بخش «کاربر» حافظه باید بیشتر تقسیم شود تا چندین
فرآیند را در خود جای دهد .وظیفه تقسیم به صورت پویا توسط سیستم عامل انجام می شود و به عنوان مدیریت حافظه شناخته
می شود.
مدیریت موثر حافظه در یک سیستم چندبرنامهنویسی حیاتی است .اگر فقط تعداد کمی از پردازش ها در حافظه باشند ،در
بسیاری از زمان ها همه پردازش ها منتظر I/Oورودی/خروجی خواهند بود و پردازنده بیکار خواهد بود .بنابراین باید حافظه
اختصاص داده شود تا از عرضه منطقی فرآیندهای آماده برای مصرف زمان پردازنده در دسترس اطمینان حاصل شود.
ما با الزاماتی شروع می کنیم که مدیریت حافظه در نظر گرفته شده است تا آنها را برآورده کند .در مرحله بعد ،ما در مورد انواع
طرح های ساده ای که برای مدیریت حافظه استفاده شده اند صحبت می کنیم.
در حین بررسی مکانیسمها و سیاستهای مختلف مرتبط با مدیریت حافظه ،در نظر گرفتن الزاماتی که مدیریت حافظه برای
برآورده کردن آنها در نظر گرفته شده است مفید است .این الزامات شامل موارد زیر است:
-جابجایی
-حفاظت
-اشتراک گذاری
-سازماندهی منطقی
-سازماندهی فیزیکی
384
سیستم عامل های داخلی و اصول طراحی385.........................................................................................................................
صفحه یک بلوک داده با طول ثابت که در حافظه ثانویه مانند دیسک قرار دارد .یک
صفحه از داده ها ممکن است به طور موقت در یک فریم از حافظه اصلی کپی
شود.
بلوک داده با طول متغیر که در حافظه ثانویه قرار دارد .کل بخش ممکن است به بخش
طور موقت در یک منطقه موجود از حافظه اصلی تقسیم بندی کپی شود یا بخش
ممکن است به صفحاتی تقسیم شود که می توانند به صورت جداگانه در حافظه
اصلی کپی شوند بخش بندی و صفحه بندی ترکیبی.
جابجایی
در یک سیستم چندبرنامهنویسی ،حافظه اصلی موجود معموالً بین تعدادی از فرآیندها به اشتراک گذاشته میشود .معموالً برنامه
نویس نمی تواند از قبل بداند که کدام برنامه های دیگر در زمان اجرای برنامه او در حافظه اصلی قرار می گیرند .عالوه بر این،
مایلیم بتوانیم فرآیندهای فعال را در داخل و خارج از حافظه اصلی مبادله کنیم تا با ارائه مجموعه بزرگی از فرآیندهای آماده
برای اجرا ،استفاده از پردازنده را به حداکثر برسانیم .هنگامی که یک برنامه به دیسک مبادله می شود ،مشخص کردن این
موضوع که در زمان تعویض بعدی مجدداً ،باید در همان منطقه حافظه اصلی قبلی قرار گیرد ،کامالً محدود خواهد بود .در عوض،
ممکن است الزم باشد فرآیند را به ناحیه دیگری از حافظه منتقل کنیم.
بنابراین ،ما نمیتوانیم از قبل بدانیم که یک برنامه در کجا قرار میگیرد ،و باید امکان جابهجایی برنامه در حافظه اصلی را به
دلیل جابجایی فراهم کنیم .همانطور که در شکل 7.1نشان داده شده است ،این حقایق برخی از نگرانی های فنی مربوط به
پرداختن را ایجاد می کند .شکل یک تصویر فرآیند را نشان می دهد .برای سادگی ،اجازه دهید فرض کنیم که تصویر فرآیند یک
منطقه پیوسته از حافظه اصلی را اشغال می کند .واضح است که سیستم عامل باید مکان اطالعات کنترل فرآیند و پشته اجرا و
همچنین نقطه ورود را برای شروع اجرای برنامه برای این فرآیند بداند .از آنجایی که سیستم عامل حافظه را مدیریت می کند و
مسئول وارد کردن این فرآیند به حافظه اصلی است ،دسترسی به این آدرس ها آسان است .عالوه بر این ،با این حال ،پردازنده
باید با مراجع حافظه در داخل برنامه سروکار داشته باشد .دستورالعمل های شعبه حاوی آدرسی برای ارجاع به دستورالعملی
است که در مرحله بعد اجرا می شود .دستورالعمل های مرجع داده حاوی آدرس بایت یا کلمه داده ارجاع شده است .به نحوی،
385
سیستم عامل های داخلی و اصول طراحی386.........................................................................................................................
سخت افزار پردازنده و نرم افزار سیستم عامل باید بتوانند مراجع حافظه موجود در کد برنامه را به آدرس های حافظه فیزیکی
واقعی ترجمه کنند و مکان فعلی برنامه را در حافظه اصلی منعکس کنند.
اطالعات کنترل
فرآیند
نقطه ورود
به برنامه دستورالعمل
شعبه
افزایش مقادیر
آدرس
ارجاع به داده ها
باالی پشته
فعلی
حفاظت
هر فرآیند باید در برابر تداخل ناخواسته سایر فرآیندها ،خواه تصادفی یا عمدی ،محافظت شود .بنابراین ،برنامههای موجود در
فرآیندهای دیگر نباید قادر به ارجاع مکانهای حافظه در یک فرآیند برای اهداف خواندن یا نوشتن بدون اجازه باشند .از یک
جهت ،ارضای الزامات جابجایی ،دشواری برآوردن الزامات حفاظتی را افزایش میدهد .از آنجایی که مکان یک برنامه در حافظه
اصلی غیرقابل پیش بینی است ،بررسی آدرس های مطلق در زمان اجرا برای اطمینان از حفاظت غیرممکن است .عالوه بر این،
اکثر زبان های برنامه نویسی امکان محاسبه پویا آدرس ها را در زمان اجرا به عنوان مثال ،با محاسبه یک آرایه یا یک اشاره گر
در یک ساختار داده می دهند .از این رو تمام مراجع حافظه تولید شده توسط یک فرآیند باید در زمان اجرا بررسی شوند تا
اطمینان حاصل شود که آنها فقط به فضای حافظه اختصاص داده شده به آن فرآیند اشاره دارند .خوشبختانه ،خواهیم دید که
مکانیسم هایی که جابجایی را پشتیبانی می کنند ،از الزامات حفاظتی نیز پشتیبانی می کنند.
به طور معمول ،یک فرآیند کاربر نمی تواند به هیچ بخشی از سیستم عامل ،نه برنامه و نه داده ،دسترسی داشته باشد .باز هم،
معموالً یک برنامه در یک فرآیند نمی تواند به یک دستورالعمل در فرآیند دیگر منشعب شود .بدون ترتیب خاصی ،یک برنامه در
386
سیستم عامل های داخلی و اصول طراحی387.........................................................................................................................
یک فرآیند نمی تواند به ناحیه داده یک فرآیند دیگر دسترسی داشته باشد .پردازنده باید بتواند چنین دستوراتی را در نقطه اجرا
لغو کند.
توجه داشته باشید که الزامات حفاظت از حافظه باید توسط پردازنده سخت افزار به جای سیستم عامل نرم افزار برآورده شود.
این به این دلیل است که سیستم عامل نمی تواند تمام مراجع حافظه را که یک برنامه ایجاد می کند پیش بینی کند .حتی اگر
چنین پیشبینیهایی امکانپذیر بود ،غربال کردن هر برنامه از قبل برای نقض احتمالی مرجع حافظه بسیار زمانبر خواهد بود.
بنابراین ،ارزیابی مجاز بودن یک مرجع حافظه دسترسی به داده یا شاخه تنها در زمان اجرای دستورالعملی که مرجع است،
امکان پذیر است .برای انجام این کار ،سخت افزار پردازنده باید این قابلیت را داشته باشد.
اشتراک گذاری
هر مکانیزم حفاظتی باید انعطاف پذیری داشته باشد که به چندین فرآیند اجازه دهد به همان بخش حافظه اصلی دسترسی
داشته باشند .به عنوان مثال ،اگر تعدادی از فرآیندها یک برنامه را اجرا می کنند ،بهتر است به هر فرآیند اجازه داده شود تا به
همان نسخه برنامه دسترسی داشته باشد تا اینکه نسخه جداگانه خود را داشته باشد .ممکن است فرآیندهایی که در برخی کارها
همکاری می کنند نیاز به اشتراک گذاری دسترسی به ساختار داده یکسان داشته باشند .بنابراین ،سیستم مدیریت حافظه باید
اجازه دسترسی کنترل شده به مناطق مشترک حافظه را بدون به خطر انداختن حفاظت ضروری بدهد .باز هم خواهیم دید که
مکانیسم های مورد استفاده برای پشتیبانی از جابجایی از قابلیت های اشتراک گذاری پشتیبانی می کنند.
سازمان منطقی
تقریباً همیشه ،حافظه اصلی در یک سیستم رایانه ای به صورت یک فضای آدرس خطی یا تک بعدی سازماندهی می شود که
متشکل از دنباله ای از بایت ها یا کلمات است .حافظه ثانویه ،در سطح فیزیکی آن ،به همین ترتیب سازماندهی شده است .در
حالی که این سازمان از نزدیک سخت افزار واقعی ماشین را منعکس می کند ،با روشی که برنامه ها معموالً در آن ساخته می
شوند مطابقت ندارد .اکثر برنامهها در ماژولهایی سازماندهی شدهاند که برخی از آنها غیرقابل تغییر هستند فقط خواندنی ،فقط
اجرا میشوند و برخی از آنها حاوی دادههایی هستند که ممکن است اصالح شوند .اگر سیستم عامل و سخت افزار کامپیوتر
بتوانند به طور موثر با برنامه ها و داده های کاربر در قالب ماژول هایی برخورد کنند ،آنگاه می توان به تعدادی از مزیت ها پی
برد:
.1ماژول ها را می توان به طور مستقل نوشت و اجرا کرد ،با تمام ارجاعات از یک ماژول به ماژول دیگر توسط سیستم در زمان
اجرا حل می شود.
.2با سربار اضافی متوسط ،درجات مختلف حفاظت فقط خواندن ،فقط اجرا می تواند به ماژول های مختلف داده شود.
387
سیستم عامل های داخلی و اصول طراحی388.........................................................................................................................
.3می توان مکانیسم هایی را معرفی کرد که به وسیله آنها می توان ماژول ها را در بین فرآیندها به اشتراک گذاشت .مزیت ارائه
اشتراک گذاری در سطح ماژول این است که با نحوه مشاهده مشکل توسط کاربر مطابقت دارد و از این رو برای کاربر آسان است
که به اشتراک گذاری مورد نظر را مشخص کند.
ابزاری که به راحتی این الزامات را برآورده می کند ،بخش بندی است که یکی از تکنیک های مدیریت حافظه است که در این
فصل بررسی شده است.
سازمان فیزیکی
همانطور که در بخش 1.5بحث کردیم ،حافظه کامپیوتر حداقل در دو سطح سازماندهی شده است که به آنها حافظه اصلی و
حافظه ثانویه گفته می شود .حافظه اصلی دسترسی سریع را با هزینه نسبتاً باال فراهم می کند .عالوه بر این ،حافظه اصلی فرار
است .یعنی ذخیره سازی دائمی فراهم نمی کند .حافظه ثانویه کندتر و ارزانتر از حافظه اصلی است و معموالً فرار نیست .بنابراین
حافظه ثانویه با ظرفیت زیاد می تواند برای ذخیره سازی طوالنی مدت برنامه ها و داده ها فراهم شود ،در حالی که یک حافظه
اصلی کوچکتر برنامه ها و داده های در حال استفاده را در خود نگه می دارد.
در این طرح دو سطحی ،سازماندهی جریان اطالعات بین حافظه اصلی و ثانویه یک نگرانی عمده سیستم است .مسئولیت این
جریان را می توان به هر برنامه نویس اختصاص داد ،اما این امر به دو دلیل غیرعملی و نامطلوب است:
.1حافظه اصلی موجود برای یک برنامه به اضافه داده های آن ممکن است ناکافی باشد .در آن صورت ،برنامه نویس باید در
عملی به نام همپوشانی شرکت کند ،که در آن برنامه و داده ها به گونه ای سازماندهی می شوند که بتوان به ماژول های مختلف
یک ناحیه از حافظه اختصاص داد ،با یک برنامه اصلی که وظیفه تعویض ماژول ها را بر عهده دارد .در صورت نیاز خارج شود.
حتی با کمک ابزارهای اجرار ،برنامه نویسی همپوشانی زمان برنامه نویس را تلف می کند.
.2در یک محیط چندبرنامهنویسی ،برنامهنویس در زمان کدنویسی نمیداند چقدر فضا در دسترس خواهد بود یا آن فضا کجا
خواهد بود .پس واضح است که وظیفه انتقال اطالعات بین دو سطح حافظه باید یک مسئولیت سیستم باشد .این وظیفه جوهره
مدیریت حافظه است.
عملیات اصلی مدیریت حافظه ،آوردن فرآیندها به حافظه اصلی برای اجرا توسط پردازنده است .تقریباً در تمام سیستمهای
چندبرنامهنویسی مدرن ،این شامل یک طرح پیچیده به نام حافظه مجازی است .حافظه مجازی نیز به نوبه خود مبتنی بر
استفاده از یک یا هر دو تکنیک اساسی است :بخشبندی و صفحهبندی .قبل از اینکه بتوانیم به این تکنیک های حافظه مجازی
388
سیستم عامل های داخلی و اصول طراحی389.........................................................................................................................
نگاهی بیندازیم ،باید با نگاه کردن به تکنیک های ساده تری که شامل حافظه مجازی نمی شوند ،زمینه را آماده کنیم جدول
7.2تمام تکنیک های بررسی شده در این فصل و فصل بعدی را خالصه می کند .یکی از این تکنیک ها ،پارتیشن بندی ،در
برخی از سیستم های عامل که در حال حاضر منسوخ شده اند ،در چندین تغییر استفاده شده است .دو تکنیک دیگر ،صفحه
بندی ساده و تقسیم بندی ساده ،به تنهایی مورد استفاده قرار نمی گیرند .با این حال ،اگر ابتدا به این دو تکنیک در غیاب
مالحظات حافظه مجازی نگاه کنیم ،بحث حافظه مجازی روشن خواهد شد.
در بیشتر طرحهای مدیریت حافظه ،میتوانیم فرض کنیم که سیستمعامل بخش ثابتی از حافظه اصلی را اشغال میکند و بقیه
حافظه اصلی برای استفاده توسط چندین فرآیند در دسترس است .ساده ترین طرح برای مدیریت این حافظه موجود ،تقسیم آن
به مناطق با مرزهای ثابت است.
اندازه های پارتیشن شکل 7.2نمونه هایی از دو گزینه برای پارتیشن بندی ثابت را نشان می دهد .یک امکان استفاده از
پارتیشن های با اندازه مساوی است .در این حالت ،هر فرآیندی که اندازه آن کمتر یا برابر با اندازه پارتیشن باشد ،می تواند در هر
پارتیشن موجود بارگذاری شود .اگر همه پارتیشنها پر باشند و هیچ فرآیندی در حالت آماده یا در حال اجرا نباشد ،سیستم
عامل میتواند یک فرآیند را از هر یک از پارتیشنها جابجا کند و در یک فرآیند دیگر بارگذاری کند تا مقداری کار برای پردازنده
وجود داشته باشد .استفاده از پارتیشن های ثابت با اندازه مساوی دو مشکل دارد:
-ممکن است یک برنامه خیلی بزرگ باشد که در یک پارتیشن قرار بگیرد .در این حالت ،برنامه نویس باید برنامه را با استفاده از
همپوشانی طراحی کند تا تنها بخشی از برنامه در هر لحظه در حافظه اصلی باشد .هنگامی که به ماژولی نیاز است که وجود
ندارد ،برنامه کاربر باید آن ماژول را در پارتیشن برنامه بارگذاری کند و هر برنامه یا داده ای را که در آنجا وجود دارد ،پوشش
دهد.
-استفاده از حافظه اصلی بسیار ناکارآمد است .هر برنامه ای ،هر چقدر هم که کوچک باشد ،یک پارتیشن کامل را اشغال می
کند .در مثال ما ،ممکن است برنامه ای وجود داشته باشد که طول آن کمتر از 2مگابایت باشد .با این حال هر پارتیشن 8
مگابایتی را اشغال میکند .این پدیده که در آن فضای داخلی یک پارتیشن تلف میشود به دلیل این واقعیت که بلوک دادههای
بارگذاری شده کوچکتر از پارتیشن است ،به عنوان داخلی نامیده میشود .تکه تکه شدن هر دوی این مشکالت را می توان با
استفاده از پارتیشن هایی با اندازه نابرابر کاهش داد ،اگرچه حل نشد شکل b. 7.2در این مثال ،برنامه هایی به بزرگی 16
مگابایت را می توان بدون همپوشانی جای داد .پارتیشنهای کوچکتر از 8مگابایت به برنامههای کوچکتر اجازه میدهند تا با
پراکندگی داخلی کمتری جاسازی شوند.
389
سیستم عامل های داخلی و اصول طراحی390.........................................................................................................................
پیاده سازی ساده؛ سربار حافظه اصلی در زمان تولید پارتیشن بندی استفاده ناکارآمد از
ثابت سیستم به تعدادی حافظه به دلیل تکه تکه سیستم عامل کمی
پارتیشن ثابت تقسیم می شدن داخلی .حداکثر
شود. تعداد فرآیندهای فعال
ثابت است.
یک فرآیند ممکن است در پارتیشن بندی عدم تکه تکه شدن استفاده ناکارآمد از
دینامیک پردازنده به دلیل نیاز به داخلی؛ استفاده کارآمدتر یک پارتیشن با اندازه
مساوی یا بزرگتر بارگذاری تراکم برای مقابله با تکه از حافظه اصلی
شود. تکه شدن خارجی.
پارتیشن ها به صورت پویا صفحه بندی مقدار کمی از تکه تکه بدون تکه تکه شدن
ایجاد می شوند ،به طوری ساده خارجی شدن داخلی.
که هر فرآیند
در پارتیشنی با همان اندازه تقسیم بندی تکه تکه شدن خارجی عدم تکه تکه شدن
ساده داخلی؛ بهبود استفاده از آن فرآیند بارگذاری می
حافظه و کاهش سربار در شود.
مقایسه با پارتیشن بندی
پویا.
صفحه بندی حافظه اصلی به تعدادی بدون تکه تکه شدن سربار مدیریت حافظه
حافظه مجازی خارجی؛ درجه باالتری از فریم با اندازه مساوی پیچیده
چندبرنامه ریزی؛ فضای تقسیم می شود .هر فرآیند
به تعدادی صفحه با اندازه آدرس مجازی بزرگ
مساوی با طول فریم ها
تقسیم می شود .یک
390
سیستم عامل های داخلی و اصول طراحی391.........................................................................................................................
هر فرآیند به تعدادی بخش تقسیم بندی بدون تکه تکه شدن سربار مدیریت حافظه
حافظه مجازی داخلی ،درجه باالتری از تقسیم می شود .یک پیچیده
چندبرنامه ریزی .فضای فرآیند با بارگذاری تمام
بخش های آن در پارتیشن بزرگ آدرس مجازی؛
حفاظت و پشتیبانی به های پویا که نیازی به
پیوستگی ندارند ،بارگذاری اشتراک گذاری
می شود.
الگوریتم قرار دادن با پارتیشن های با اندازه مساوی ،قرار دادن فرآیندها در حافظه بی اهمیت است .تا زمانی که هر پارتیشن
موجود باشد ،می توان یک فرآیند را در آن پارتیشن بارگذاری کرد .از آنجایی که همه پارتیشن ها اندازه یکسانی دارند ،فرقی
نمی کند که از کدام پارتیشن استفاده شود .اگر تمام پارتیشنها با فرآیندهایی اشغال شدهاند که آماده اجرا نیستند ،باید یکی از
این فرآیندها تعویض شود تا فضا برای یک فرآیند جدید باز شود .اینکه کدام یک را عوض کنیم یک تصمیم زمان بندی است.
این موضوع در قسمت چهارم بررسی شده است.
با پارتیشنهایی با اندازه نابرابر ،دو راه ممکن برای تخصیص فرآیندها به پارتیشنها وجود دارد .سادهترین راه این است که هر
فرآیند را به کوچکترین پارتیشنی که در آن قرار میگیرد اختصاص دهیم 1.در این مورد ،یک صف زمانبندی برای هر پارتیشن
مورد نیاز است تا فرآیندهای مبادلهشده را برای آن پارتیشن نگهداری کند شکل a. 7.3مزیت این رویکرد این است که فرآیندها
همیشه به گونه ای تخصیص داده می شوند که حافظه هدر رفته در یک پارتیشن به حداقل برسد تجزیه داخلی.
اگرچه این تکنیک از دیدگاه یک پارتیشن فردی بهینه به نظر می رسد ،اما از نظر سیستم به عنوان یک کل بهینه نیست.
391
سیستم عامل های داخلی و اصول طراحی392.........................................................................................................................
به عنوان مثال ،در شکل ،b7.2موردی را در نظر بگیرید که در آن هیچ فرآیندی با اندازه بین 12تا M16در یک نقطه زمانی
خاص وجود ندارد .در این صورت ،پارتیشن M16بدون استفاده باقی میماند ،حتی اگر میتوانست فرآیند کوچکتری به آن
اختصاص داده شود .بنابراین ،یک رویکرد ترجیحی استفاده از یک صف واحد برای همه فرآیندها خواهد بود شکل b. 7.3هنگامی
که زمان بارگذاری یک فرآیند در حافظه اصلی فرا می رسد ،کوچکترین پارتیشن موجود که فرآیند را نگه می دارد انتخاب می
شود .اگر همه پارتیشن ها اشغال شده باشند ،باید تصمیم مبادله گرفته شود .ممکن است به جابجایی از کوچکترین پارتیشنی
که فرآیند ورودی را نگه می دارد ،اولویت داده شود .همچنین میتوان عوامل دیگری مانند اولویت و ترجیح جایگزین کردن
فرآیندهای مسدود شده در مقابل فرآیندهای آماده را در نظر گرفت.
392
سیستم عامل های داخلی و اصول طراحی393.........................................................................................................................
استفاده از پارتیشن های با اندازه نابرابر درجه ای از انعطاف پذیری را برای پارتیشن بندی ثابت فراهم می کند .عالوه بر این ،می
توان گفت که طرح های پارتیشن بندی ثابت نسبتا ساده هستند و به حداقل نرم افزار سیستم عامل و سربار پردازش نیاز دارند.
با این حال ،معایبی وجود دارد:
-تعداد پارتیشن های مشخص شده در زمان تولید سیستم ،تعداد فرآیندهای فعال نه معلق در سیستم را محدود می کند.
-از آنجا که اندازه پارتیشن در زمان تولید سیستم از پیش تعیین شده است ،کارهای کوچک از فضای پارتیشن به طور موثر
استفاده نمی کنند .در محیطی که نیاز اصلی ذخیره سازی همه کارها از قبل مشخص است ،این ممکن است معقول باشد ،اما در
بیشتر موارد ،یک تکنیک ناکارآمد است.
امروزه استفاده از پارتیشن بندی ثابت تقریبا ناشناخته است .یکی از نمونههای یک سیستم عامل موفق که از این تکنیک استفاده
کرد ،یک سیستم عامل اصلی OS/MFT ،IBMچند برنامهنویسی با تعداد ثابت وظایف بود.
برای غلبه بر برخی از مشکالت پارتیشن بندی ثابت ،رویکردی به نام پارتیشن بندی پویا توسعه داده شد .باز هم ،این رویکرد با
تکنیک های پیچیده تری مدیریت حافظه جایگزین شده است .سیستم عامل مهمی که از این تکنیک استفاده کرد ،سیستم
عامل اصلی OS/MVT ،IBMچند برنامهنویسی با تعداد متغیر وظایف بود.
با پارتیشن بندی پویا ،پارتیشن ها دارای طول و تعداد متغیر هستند .هنگامی که یک فرآیند به حافظه اصلی وارد می شود،
دقیقاً به همان اندازه که نیاز دارد حافظه اختصاص می یابد و نه بیشتر .یک مثال ،با استفاده از 64مگابایت حافظه اصلی ،در
شکل 7.4نشان داده شده است .در ابتدا ،حافظه اصلی به جز سیستم عامل aخالی است .سه فرآیند اول بارگذاری می شوند ،از
جایی که سیستم عامل به پایان می رسد و فضای کافی را برای هر فرآیند اشغال می کند d. ،c ،bاین یک "سوراخ" در انتهای
حافظه ایجاد می کند که برای فرآیند چهارم بسیار کوچک است .در برخی موارد ،هیچ یک از فرآیندهای موجود در حافظه آماده
نیست .سیستم عامل فرآیند e 2را تعویض می کند ،که فضای کافی برای بارگذاری یک فرآیند جدید ،فرآیند f 4باقی می
گذارد .از آنجایی که فرآیند 4کوچکتر از فرآیند 2است ،سوراخ کوچک دیگری ایجاد می شود .بعداً به نقطه ای می رسد که در
آن هیچ یک از پردازش های حافظه اصلی آماده نیست ،اما پردازش 2در حالت آماده -تعلیق در دسترس است .از آنجا که فضای
کافی در حافظه برای پردازش 2وجود ندارد ،سیستم عامل فرآیند 1را به gو پردازش 2را به hتعویض می کند.
393
سیستم عامل های داخلی و اصول طراحی394.........................................................................................................................
همانطور که این مثال نشان می دهد ،این روش به خوبی شروع می شود ،اما در نهایت منجر به وضعیتی می شود که در آن حفره
های کوچک زیادی در حافظه وجود دارد .با گذشت زمان ،حافظه بیشتر و بیشتر تکه تکه می شود و استفاده از حافظه کاهش
می یابد .این پدیده به عنوان تکه تکه شدن خارجی نامیده می شود ،که نشان می دهد حافظه ای که خارج از همه پارتیشن ها
است به طور فزاینده ای تکه تکه می شود .این برخالف تقسیم داخلی است که قبالً به آن اشاره شد.
یکی از تکنیکهای غلبه بر تکه تکه شدن خارجی ،فشردهسازی است :هر از گاهی ،سیستمعامل فرآیندها را بهگونهای تغییر
میدهد که به هم پیوسته باشند و به طوری که تمام حافظه آزاد با هم در یک بلوک باشد .به عنوان مثال ،در شکل ،h7.4
فشرده سازی منجر به یک بلوک حافظه آزاد به طول M16می شود .این ممکن است برای بارگیری در یک فرآیند اضافی کافی
باشد .مشکل تراکم این است که یک روش وقت گیر و اتالف وقت پردازنده است .توجه داشته باشید که تراکم نیاز به قابلیت
جابجایی پویا را نشان می دهد .یعنی باید امکان جابجایی یک برنامه از یک منطقه به منطقه دیگر در حافظه اصلی وجود داشته
باشد بدون اینکه منابع حافظه در برنامه باطل شود به پیوست A7مراجعه کنید.
الگوریتم قرار دادن از آنجایی که فشرده سازی حافظه زمان بر است ،طراح سیستم عامل باید در تصمیم گیری در مورد نحوه
تخصیص فرآیندها به حافظه نحوه بستن سوراخ ها باهوش باشد .هنگامی که زمان بارگیری یا تعویض یک فرآیند در حافظه
اصلی فرا می رسد ،و اگر بیش از یک بلوک آزاد حافظه با اندازه کافی وجود داشته باشد ،سیستم عامل باید تصمیم بگیرد که
کدام بلوک رایگان را اختصاص دهد.
394
سیستم عامل های داخلی و اصول طراحی395.........................................................................................................................
سه الگوریتم قرارگیری که ممکن است در نظر گرفته شوند عبارتند از بهترین تناسب ،اولین تناسب و تناسب بعدی .البته ،همه
محدود به انتخاب از بین بلوکهای آزاد حافظه اصلی هستند که برابر یا بزرگتر از فرآیندی هستند که باید وارد شوندBest- .
fitبلوکی را انتخاب میکند که از نظر اندازه به درخواست نزدیکترین باشد First-fit .از ابتدا شروع به اسکن حافظه می کند و
اولین بلوک موجود را انتخاب می کند که به اندازه کافی بزرگ باشد Next-fit .شروع به اسکن حافظه از محل آخرین مکان می
کند و بلوک موجود بعدی را که به اندازه کافی بزرگ است انتخاب می کند.
شکل a7.5نمونه ای از پیکربندی حافظه را پس از تعدادی عملیات قرار دادن و تعویض نشان می دهد .آخرین بلوکی که
استفاده شد یک بلوک 22مگابایتی بود که از آن یک پارتیشن 14مگابایتی ایجاد شد .شکل b7.5تفاوت بین الگوریتمهای
جایگذاری بهترین ،اول و بعدی را در برآورده کردن درخواست تخصیص 16مگابایت نشان میدهد Best-fit .کل لیست بلوک
های موجود را جستجو می کند و از بلوک 18مگابایتی استفاده می کند و یک قطعه 2مگابایتی باقی می گذارد .اولین برازش
یک قطعه 6مگابایتی را به همراه می آورد و با تناسب بعدی یک قطعه 20مگابایتی ایجاد می کند.
اینکه کدام یک از این رویکردها بهتر است به ترتیب دقیق مبادله فرآیندها و اندازه آن فرآیندها بستگی دارد .با این حال ،برخی
از نظرات کلی را می توان بیان کرد همچنین به SHOR75 ،BREN89و BAYS77مراجعه کنید .الگوریتم برازش اول نه
تنها سادهترین ،بلکه معموالً بهترین و سریعترین است .الگوریتم بعدی برازش تمایل دارد نتایج کمی بدتر از برازش اول ایجاد
کند .الگوریتم برازش بعدی اغلب منجر به تخصیص از یک بلوک آزاد در انتهای حافظه می شود .نتیجه این است که بزرگترین
بلوک حافظه آزاد که معموالً در انتهای فضای حافظه ظاهر می شود ،به سرعت به قطعات کوچک تقسیم می شود .بنابراین،
تراکم ممکن است بیشتر با next fitمورد نیاز باشد .از سوی دیگر ،الگوریتم اولین تناسب ممکن است قسمت جلویی را با
پارتیشنهای آزاد کوچکی که باید در هر پاس اول مناسب بعدی جستجو شوند ،پر کند .الگوریتم مناسب ،علی رغم نامش،
معموالً بدترین عملکرد را دارد .از آنجا که این الگوریتم به دنبال کوچکترین بلوکی است که نیاز را برآورده می کند ،تضمین می
کند که قطعه باقی مانده تا حد امکان کوچک باشد .اگرچه هر درخواست حافظه همیشه کمترین مقدار حافظه را هدر می دهد،
نتیجه این است که حافظه اصلی به سرعت توسط بلوک های بسیار کوچک برای برآورده کردن درخواست های تخصیص حافظه
پر می شود .بنابراین ،فشرده سازی حافظه باید بیشتر از سایر الگوریتم ها انجام شود.
395
سیستم عامل های داخلی و اصول طراحی396.........................................................................................................................
الگوریتم جایگزینی در یک سیستم چندبرنامهنویسی با استفاده از پارتیشنبندی پویا ،زمانی فرا میرسد که تمام فرآیندهای
حافظه اصلی در حالت مسدود هستند و حتی پس از فشردهسازی ،حافظه کافی برای یک فرآیند اضافی وجود ندارد .برای
جلوگیری از اتالف وقت پردازنده در انتظار رفع انسداد یک فرآیند فعال ،سیستم عامل یکی از فرآیندها را از حافظه اصلی تعویض
می کند تا فضا را برای یک فرآیند جدید یا برای یک فرآیند در حالت آماده به حالت تعلیق باز کند .بنابراین ،سیستم عامل باید
انتخاب کند که کدام فرآیند را جایگزین کند .از آنجایی که مبحث الگوریتمهای جایگزینی با توجه به طرحهای حافظه مجازی
مختلف با جزئیات پرداخته خواهد شد ،بحث الگوریتمهای جایگزین را به آن زمان موکول میکنیم.
سیستم Buddy
هر دو طرح پارتیشن بندی ثابت و پویا دارای اشکاالتی هستند .یک طرح پارتیشن بندی ثابت تعداد فرآیندهای فعال را محدود
می کند و ممکن است در صورت عدم تطابق ضعیف بین اندازه های پارتیشن موجود و اندازه فرآیند ،از فضا به طور ناکارآمد
استفاده کند .یک طرح پارتیشن بندی پویا برای نگهداری پیچیده تر است و شامل سربار تراکم است .یک مصالحه جالب ،سیستم
PETE77 ،KNUT97 Buddyاست .در یک سیستم ،Buddyبلوک های حافظه با اندازه K2کلمه ،L K U ،در دسترس
هستند
U2بزرگترین بلوک اندازه که اختصاص داده شده است .به طور کلی U2اندازه کل حافظه موجود برای تخصیص است
396
سیستم عامل های داخلی و اصول طراحی397.........................................................................................................................
برای شروع ،کل فضای موجود برای تخصیص به عنوان یک بلوک واحد به اندازه U2در نظر گرفته می شود .اگر درخواستی با
اندازه sبه گونه ای که U-1 s 2U2انجام شود ،کل بلوک تخصیص داده می شود .در غیر این صورت ،بلوک به دو Buddy
مساوی با اندازه U-12تقسیم می شود .اگر U-2 s 2U-12باشد ،آنگاه درخواست به یکی از دو Buddyاختصاص داده می
شود .در غیر این صورت ،یکی از Buddyدوباره به دو نیم تقسیم می شود .این فرآیند تا زمانی ادامه می یابد که کوچکترین
بلوک بزرگتر یا مساوی sتولید و به درخواست تخصیص داده شود .در هر زمان ،سیستم Buddyفهرستی از سوراخ ها بلوک
های تخصیص نیافته با هر اندازه i2را حفظ می کند .ممکن است یک سوراخ از لیست i 1با تقسیم آن به نصف برای ایجاد دو
Buddyبه اندازه i2در لیست iحذف شود.
هر زمان که یک جفت از Buddyدر لیست iهر دو تخصیص داده نمی شوند ،از آن لیست حذف می شوند و در یک بلوک در
لیست i 1ادغام می شوند .با درخواستی برای تخصیص اندازه kبه گونه ای که i-1 k2i2ارائه می شود ،الگوریتم بازگشتی زیر
برای یافتن حفره ای به اندازه i2استفاده می شود:
شکل 7.6مثالی را با استفاده از یک بلوک اولیه 1مگابایتی نشان می دهد .اولین درخواست ،A ،برای 100کیلوبایت است که
برای آن یک بلوک K128مورد نیاز است .بلوک اولیه به دو K512 Buddyتقسیم شده است .اولین مورد به دو Buddy
K256و اولین مورد به دو K128 Buddyتقسیم می شود که یکی از آنها به Aاختصاص دارد .درخواست بعدی ،B ،به یک
بلوک K256نیاز دارد .چنین بلوکی در حال حاضر موجود است و اختصاص داده شده است .این روند با تقسیم و ادغام در
صورت لزوم ادامه می یابد .توجه داشته باشید که وقتی Eمنتشر می شود ،دو K128 Buddyدر یک بلوک K256ادغام می
شوند ،که بالفاصله با Buddyخود ادغام می شود .شکل 7.7یک نمایش درخت دودویی از تخصیص Buddyرا بالفاصله پس
از درخواست Release Bنشان می دهد .گره های برگ نشان دهنده پارتیشن بندی فعلی حافظه هستند .اگر دو Buddyگره
برگ هستند ،حداقل یکی باید اختصاص داده شود .در غیر این صورت آنها در یک بلوک بزرگتر ادغام می شوند .سیستم
Buddyیک مصالحه معقول برای غلبه بر معایب طرح های پارتیشن بندی ثابت و متغیر است ،اما در سیستم عامل های معاصر،
حافظه مجازی مبتنی بر صفحه بندی و تقسیم بندی برتر است .با این حال ،سیستم Buddyدر سیستم های موازی به عنوان
وسیله ای کارآمد برای تخصیص و انتشار برای برنامه های موازی کاربرد پیدا کرده است به عنوان مثالJOHN92 ،را ببینید.
یک شکل اصالح شده از سیستم Buddyبرای تخصیص حافظه هسته یونیکس استفاده می شود شرح شده در فصل .8
397
سیستم عامل های داخلی و اصول طراحی398.........................................................................................................................
جابجایی
قبل از اینکه راههای مقابله با کاستیهای پارتیشنبندی را در نظر بگیریم ،باید یک پایان ضعیف را که مربوط به قرار دادن
فرآیندها در حافظه است ،پاک کنیم .هنگامی که از طرح پارتیشن ثابت شکل a7.3استفاده می شود ،می توانیم انتظار داشته
باشیم که یک فرآیند همیشه به همان پارتیشن اختصاص داده شود .یعنی هر پارتیشنی که هنگام بارگیری یک فرآیند جدید
انتخاب شود ،همیشه برای تعویض آن فرآیند به حافظه پس از تعویض آن استفاده می شود .در آن صورت ،میتوان از یک لودر
جابجایی ساده ،مانند آنچه در ضمیمه A7توضیح داده شده است ،استفاده کرد :هنگامی که فرآیند برای اولین بار بارگذاری
میشود ،تمام مراجع حافظه نسبی در کد با آدرسهای حافظه اصلی مطلق جایگزین میشوند که توسط آدرس پایه تعیین
میشود .فرآیند بارگذاری شده
گره برگ برای گره برگ برای بلوک گره غیر برگ
بلوک اختصاص تخصیص نیافته
داده شده
شکل 7.7نمایش درختی از سیستم Buddy
398
سیستم عامل های داخلی و اصول طراحی399.........................................................................................................................
در مورد پارتیشنهای با اندازه مساوی شکل 7.2و در مورد یک صف پردازش واحد برای پارتیشنهای با اندازه نابرابر شکل
،b7.3یک فرآیند ممکن است در طول عمر خود پارتیشنهای مختلفی را اشغال کند .هنگامی که یک تصویر فرآیند برای اولین
بار ایجاد می شود ،در برخی از پارتیشن ها در حافظه اصلی بارگذاری می شود .بعداً ،این فرآیند ممکن است جایگزین شود.
هنگامی که متعاقباً مجدداً جایگزین می شود ،ممکن است به پارتیشن متفاوتی نسبت به دفعه قبل اختصاص داده شود.
همین امر در مورد پارتیشن بندی پویا نیز صادق است .در شکل c7.4و شکل h7.4مشاهده کنید که فرآیند 2در دو نوبت
زمانی که وارد می شود ،دو ناحیه متفاوت از حافظه را اشغال می کند .بنابراین ،مکانها دستورالعملها و دادهها که توسط یک
فرآیند ارجاع میشوند ،ثابت نیستند .هر بار که فرآیندی مبادله یا جابجا می شود ،آنها تغییر می کنند .برای حل این مشکل ،بین
چندین نوع آدرس تمایز قائل شده است .آدرس منطقی ارجاع به مکان حافظه مستقل از تخصیص فعلی داده ها به حافظه است.
قبل از دستیابی به دسترسی به حافظه ،باید یک ترجمه به یک آدرس فیزیکی انجام شود .آدرس نسبی نمونه خاصی از آدرس
منطقی است که در آن آدرس به عنوان یک مکان نسبت به یک نقطه شناخته شده ،معموالً یک مقدار در یک ثبات پردازنده
بیان می شود .آدرس فیزیکی یا آدرس مطلق ،یک مکان واقعی در حافظه اصلی است .برنامه هایی که از آدرس های نسبی در
حافظه استفاده می کنند با استفاده از بارگذاری پویا در زمان اجرا بارگذاری می شوند برای بحث به پیوست A7مراجعه کنید .به
طور معمول ،تمام مراجع حافظه در فرآیند بارگذاری شده نسبت به مبدا برنامه هستند .بنابراین ،مکانیزم سخت افزاری برای
ترجمه آدرس های نسبی به آدرس های حافظه اصلی فیزیکی در زمان اجرای دستورالعمل مورد نیاز است که حاوی مرجع است.
شکل 7.8روشی را نشان می دهد که این ترجمه آدرس معموالً انجام می شود .هنگامی که یک فرآیند به حالت Running
اختصاص داده می شود ،یک رجیستر پردازنده ویژه ،که گاهی اوقات ثبات پایه نامیده می شود ،با آدرس شروع در حافظه اصلی
برنامه بارگذاری می شود .همچنین یک رجیستر " "boundsوجود دارد که مکان پایان برنامه را نشان می دهد .این مقادیر باید
399
سیستم عامل های داخلی و اصول طراحی400.........................................................................................................................
زمانی که برنامه در حافظه بارگذاری میشود یا زمانی که تصویر فرآیند تعویض میشود ،تنظیم شوند .در طول اجرای فرآیند،
آدرسهای نسبی مشاهده میشوند .اینها شامل محتویات ثبت دستورالعمل ،آدرسهای دستورالعملی است که در
دستورالعملهای شاخه و فراخوانی ،و آدرسهای دادهای که در دستورالعملهای بارگذاری و ذخیرهسازی رخ میدهند .هر یک از
این آدرس های نسبی از طریق دو مرحله دستکاری توسط پردازنده انجام می شود .ابتدا مقدار موجود در ثبات پایه به آدرس
نسبی اضافه می شود تا یک آدرس مطلق تولید شود .دوم ،آدرس حاصل با مقدار موجود در ثبات کران مقایسه می شود .اگر
آدرس در محدوده باشد ،اجرای دستورالعمل ممکن است ادامه یابد .در غیر این صورت ،یک وقفه برای سیستم عامل ایجاد می
شود که باید به نحوی به خطا پاسخ دهد.
طرح شکل 7.8اجازه می دهد تا برنامه ها در حین اجرا به داخل و خارج از حافظه مبادله شوند .همچنین معیاری از محافظت را
فراهم می کند :هر تصویر فرآیند توسط محتویات پایه و رجیسترهای مرزی جدا شده و از دسترسی های ناخواسته توسط سایر
فرآیندها در امان است.
7.3صفحه بندی
هر دو پارتیشن با اندازه ثابت و اندازه متغیر نابرابر در استفاده از حافظه ناکارآمد هستند .اولی منجر به تکه تکه شدن داخلی و
دومی در تکه تکه شدن خارجی می شود.
با این حال ،فرض کنید که حافظه اصلی به تکههای با اندازه ثابت مساوی که نسبتاً کوچک هستند ،تقسیم میشود و هر فرآیند
نیز به تکههای کوچک با اندازه ثابت با همان اندازه تقسیم میشود .سپس تکههای یک فرآیند ،که به عنوان صفحات شناخته
میشوند ،میتوانند به تکههای حافظه موجود ،به عنوان فریم یا فریم صفحه ،اختصاص داده شوند .در این بخش نشان میدهیم
که فضای تلف شده در حافظه برای هر فرآیند به دلیل تکه تکه شدن داخلی است که تنها از کسری از آخرین صفحه یک فرآیند
تشکیل شده است .تکه تکه شدن خارجی وجود ندارد.
شکل 7.9استفاده از صفحات و فریم ها را نشان می دهد .در یک زمان معین ،برخی از فریم های حافظه در حال استفاده هستند
و برخی آزاد هستند .لیستی از فریم های رایگان توسط سیستم عامل نگهداری می شود .فرآیند ،Aذخیره شده روی دیسک،
شامل چهار صفحه است .هنگامی که زمان بارگیری این فرآیند فرا می رسد ،سیستم عامل چهار فریم آزاد را پیدا می کند و چهار
صفحه فرآیند Aرا در چهار فریم بارگذاری می کند شکل b. 7.9فرآیند ،Bمتشکل از سه صفحه ،و فرآیند ،Cمتشکل از چهار
صفحه ،متعاقباً بارگذاری می شوند .سپس فرآیند Bبه حالت تعلیق درآمده و از حافظه اصلی خارج می شود .بعداً ،تمام
فرآیندهای موجود در حافظه اصلی مسدود می شوند و سیستم عامل باید یک فرآیند جدید به نام پردازش Dرا وارد کند که
شامل پنج صفحه است.
400
سیستم عامل های داخلی و اصول طراحی401.........................................................................................................................
اکنون ،مانند این مثال ،فرض کنید که فریمهای مجاور استفاده نشده کافی برای نگهداری فرآیند وجود ندارد .آیا این مانع از
بارگذاری سیستم عامل Dمی شود؟ پاسخ منفی است ،زیرا می توانیم بار دیگر از مفهوم آدرس منطقی استفاده کنیم .یک ثبت
آدرس پایه ساده دیگر کافی نخواهد بود .در عوض ،سیستم عامل یک جدول صفحه برای هر فرآیند نگهداری می کند .جدول
صفحه مکان قاب را برای هر صفحه از فرآیند نشان می دهد .در داخل برنامه ،هر آدرس منطقی از یک شماره صفحه و یک
افست درون صفحه تشکیل شده است .به یاد بیاورید که در مورد پارتیشن ساده ،آدرس منطقی محل یک کلمه نسبت به ابتدای
برنامه است .پردازنده آن را به یک آدرس فیزیکی ترجمه می کند .با صفحه بندی ،ترجمه آدرس منطقی به فیزیکی هنوز توسط
سخت افزار پردازنده انجام می شود .حال پردازنده باید بداند که چگونه به جدول صفحه فرآیند جاری دسترسی داشته باشد.
پردازنده با یک آدرس منطقی شماره صفحه ،افست ،از جدول صفحه برای تولید یک آدرس فیزیکی شماره فریم ،افست استفاده
می کند.
در ادامه مثال ما ،پنج صفحه فرآیند Dدر فریم های 11 ،6 ،5 ،4و 12بارگذاری می شوند .شکل 7.10جداول صفحات مختلف
را در این زمان نشان می دهد .یک جدول صفحه شامل یک ورودی برای هر صفحه از فرآیند است ،به طوری که جدول به راحتی
با شماره صفحه از صفحه 0شروع می شود نمایه می شود .هر ورودی جدول صفحه حاوی تعداد فریم در حافظه اصلی است ،در
صورت وجود ،که صفحه مربوطه را نگه می دارد .عالوه بر این ،سیستم عامل یک لیست فریم آزاد واحد از تمام فریمهای موجود
در حافظه اصلی که در حال حاضر خالی هستند و برای صفحات موجود هستند ،نگهداری میکند.
بنابراین می بینیم که صفحه بندی ساده ،همانطور که در اینجا توضیح داده شده است ،شبیه به پارتیشن بندی ثابت است .تفاوت
این است که ،با صفحه بندی ،پارتیشن ها نسبتا کوچک هستند .یک برنامه ممکن است بیش از یک پارتیشن را اشغال کند .و
الزم نیست این پارتیشن ها به هم پیوسته باشند.
برای اینکه این طرح صفحهبندی راحت باشد ،اجازه دهید دیکته کنیم که اندازه صفحه ،در نتیجه اندازه فریم ،باید توان 2باشد.
با استفاده از اندازه صفحه که توان 2است ،نشان دادن آدرس نسبی آسان است ، .که با اشاره به مبدا برنامه تعریف می شود و
آدرس منطقی که به صورت شماره صفحه و افست بیان می شود ،یکسان است .یک مثال در شکل 7.11نشان داده شده است.
در این مثال از آدرس های 16بیتی استفاده شده است و اندازه صفحه K 10241بایت است .آدرس نسبی 1502به صورت
باینری 0000010111011110است .با اندازه صفحه ،K1یک زمینه افست 10بیتی مورد نیاز است و 6بیت برای شماره
صفحه باقی می ماند .بنابراین یک برنامه می تواند حداکثر از 4<<2صفحه هر کدام یک کیلوبایت تشکیل شده باشد .همانطور
که شکل b7.11نشان می دهد ،آدرس نسبی 1502مربوط به افست 0111011110 478در صفحه 000001 1است که
همان عدد 16بیتی 0000010111011110 ،را به دست می دهد.
401
سیستم عامل های داخلی و اصول طراحی402.........................................................................................................................
شکل 7.10ساختارهای داده برای مثال شکل 7.9در دوره زمانی f
عواقب استفاده از اندازه صفحه که توان 2است دوچندان است .اول ،طرح آدرس دهی منطقی برای برنامه نویس ،اسمبلر و پیوند
دهنده شفاف است .هر آدرس منطقی شماره صفحه ،افست یک برنامه با آدرس نسبی آن یکسان است .دوم ،اجرای یک تابع در
سخت افزار برای انجام ترجمه پویا آدرس در زمان اجرا ،کار نسبتاً آسانی است .آدرسی متشکل از n mبیت را در نظر بگیرید،
که در آن nبیت سمت چپ ،شماره صفحه و سمت راست ترین mبیت ،آفست است .در مثال ما شکل n 6 ،b7.11و m 10.
مراحل زیر برای ترجمه آدرس مورد نیاز است:
402
سیستم عامل های داخلی و اصول طراحی403.........................................................................................................................
-از شماره صفحه به عنوان نمایه در جدول صفحه فرآیند برای یافتن شماره فریم k ،استفاده کنید.
-آدرس فیزیکی شروع قاب k 2mاست و آدرس فیزیکی بایت ارجاع شده همان عدد به اضافه افست است .این آدرس فیزیکی
نیازی به محاسبه نیست .با اضافه کردن شماره فریم به افست به راحتی ساخته می شود.
403
سیستم عامل های داخلی و اصول طراحی404.........................................................................................................................
در مثال ما ،آدرس منطقی 0000010111011110را داریم که شماره صفحه 1است ،افست .478فرض کنید این صفحه در
فریم حافظه اصلی 6باینری 000110قرار دارد .سپس آدرس فیزیکی فریم شماره ،6آفست 000111001110 478است. .
به طور خالصه ،با صفحه بندی ساده ،حافظه اصلی به بسیاری از فریم های کوچک با اندازه مساوی تقسیم می شود .هر فرآیند به
صفحاتی با اندازه فریم تقسیم می شود .فرآیندهای کوچکتر به صفحات کمتری نیاز دارند .فرآیندهای بزرگتر نیاز بیشتری دارند.
هنگامی که یک فرآیند وارد می شود ،تمام صفحات آن در فریم های موجود بارگذاری می شوند و یک جدول صفحه تنظیم می
شود .این رویکرد بسیاری از مشکالت ذاتی در پارتیشن بندی را حل می کند.
7.4قطعه بندی
یک برنامه کاربر را می توان با استفاده از تقسیم بندی تقسیم کرد ،که در آن برنامه و داده های مرتبط با آن به تعدادی بخش
تقسیم می شوند .الزم نیست که تمام بخشهای همه برنامهها دارای طول یکسان باشند ،اگرچه حداکثر طول بخش وجود دارد.
همانند صفحهبندی ،یک آدرس منطقی با استفاده از بخشبندی از دو بخش تشکیل شده است ،در این مورد یک شماره قطعه و
یک افست.
به دلیل استفاده از قطعات با اندازه نابرابر ،تقسیم بندی مشابه پارتیشن بندی دینامیک است .در غیاب طرح همپوشانی یا
استفاده از حافظه مجازی ،الزم است که تمام بخش های برنامه برای اجرا در حافظه بارگذاری شوند .تفاوت در مقایسه با
پارتیشن بندی پویا این است که با تقسیم بندی یک برنامه ممکن است بیش از یک پارتیشن را اشغال کند و این پارتیشن ها
نیازی به پیوستگی ندارند .تقسیم بندی ،تکه تکه شدن داخلی را حذف می کند ،اما مانند پارتیشن بندی پویا ،از تکه تکه شدن
خارجی رنج می برد .با این حال ،از آنجایی که یک فرآیند به تعدادی قطعات کوچکتر تقسیم می شود ،تکه تکه شدن خارجی
باید کمتر باشد.
در حالی که صفحهبندی برای برنامهنویس نامرئی است ،بخشبندی معموالً قابل مشاهده است و به عنوان یک راحتی برای
سازماندهی برنامهها و دادهها ارائه میشود .به طور معمول ،برنامه نویس یا اجرار برنامه ها و داده ها را به بخش های مختلف
اختصاص می دهد .برای اهداف برنامهنویسی مدوالر ،برنامه یا دادهها ممکن است به بخشهای متعددی تقسیم شوند .ناراحتی
اصلی این سرویس این است که برنامه نویس باید از حداکثر محدودیت اندازه بخش آگاه باشد.
یکی دیگر از پیامدهای قطعات با اندازه نابرابر این است که هیچ رابطه ساده ای بین آدرس های منطقی و آدرس های فیزیکی
وجود ندارد .مشابه صفحه بندی ،یک طرح تقسیم بندی ساده از یک جدول بخش برای هر فرآیند و لیستی از بلوک های آزاد
حافظه اصلی استفاده می کند .هر ورودی جدول بخش باید آدرس شروع را در حافظه اصلی بخش مربوطه بدهد .ورودی
همچنین باید طول بخش را برای اطمینان از عدم استفاده از آدرسهای نامعتبر ارائه کند .هنگامی که یک فرآیند وارد حالت
404
سیستم عامل های داخلی و اصول طراحی405.........................................................................................................................
Runningمی شود ،آدرس جدول بخش آن در یک ثبات خاص که توسط سخت افزار مدیریت حافظه استفاده می شود
بارگذاری می شود .آدرسی متشکل از n mبیت را در نظر بگیرید ،که در آن nبیت سمت چپ ،عدد قطعه و سمت راست ترین
mبیت ،آفست است .در مثال ما شکل n 4 ،c7.11و m 12.بنابراین حداکثر اندازه بخش 4096 212است .مراحل زیر برای
ترجمه آدرس مورد نیاز است:
-از شماره بخش به عنوان یک شاخص در جدول بخش فرآیند برای یافتن آدرس فیزیکی شروع بخش استفاده کنید.
-افست را که در سمت راست ترین بیت بیان می شود ،با طول بخش مقایسه کنید .اگر افست بزرگتر یا مساوی طول باشد،
آدرس نامعتبر است.
-آدرس فیزیکی مورد نظر مجموع آدرس فیزیکی ابتدایی بخش به اضافه مقدار افست است.
در مثال ما ،ما آدرس منطقی 0001001011110000را داریم ،که بخش 1شماره Offset 752 ،1است .فرض کنید که این
بخش در Main Memberyشروع به کار در آدرس فیزیکی 0010000000100000می باشد .سپس آدرس فیزیکی
. 0010001000100000000000000000000000000 001011110000 0010000000100000
به طور خالصه ،با تقسیم بندی ساده ،یک فرآیند به تعدادی بخش تقسیم می شود که نیازی به اندازه مساوی ندارند .هنگامی که
یک فرآیند وارد می شود ،تمام بخش های آن در مناطق در دسترس حافظه بارگذاری می شوند و یک جدول بخش تنظیم می
شود.
7.5خالصه
یکی از مهمترین و پیچیده ترین وظایف یک سیستم عامل مدیریت حافظه است .مدیریت حافظه شامل تلقی حافظه اصلی به
عنوان منبعی است که باید به تعدادی از فرآیندهای فعال تخصیص داده شود و به اشتراک گذاشته شود .برای استفاده کارآمد از
پردازنده و امکانات ورودی/خروجی ،حفظ هر چه بیشتر فرآیندها در حافظه اصلی مطلوب است .عالوه بر این ،مطلوب است که
برنامه نویسان از محدودیت های اندازه در توسعه برنامه رها شوند .ابزارهای اساسی مدیریت حافظه صفحه بندی و بخش بندی
هستند .با صفحه بندی ،هر فرآیند به صفحات نسبتاً کوچک و با اندازه ثابت تقسیم می شود .تقسیم بندی استفاده از قطعات با
اندازه های مختلف را فراهم می کند .همچنین امکان ترکیب بخش بندی و صفحه بندی در یک طرح مدیریت حافظه واحد
وجود دارد.
405
سیستم عامل های داخلی و اصول طراحی406.........................................................................................................................
یک بحث کامل در مورد استراتژی های پارتیشن بندی در KNUT97یافت می شودPRES72 .یک درمان کالسیک از
لینکرها و بارگذارها است که هنوز ارزش خواندن داردBEAZ01 .مقدمه ای مفید برای پیوند دهنده ها ،کتابخانه های مشترک،
و ماژول های افزونه قابل بارگذاری پویا ارائه می دهد .بحث عملی پیوند و بارگذاری ،با مثالهای متعدد سیستمعامل،
LEVI00است.
تصاویر متحرک
مجموعه ای از انیمیشن که مفاهیم این فصل را نشان می دهد در وب سایت Premiumموجود است .خواننده تشویق می شود
که انیمیشن ها را برای تقویت مفاهیم این فصل مشاهده کند.
406
سیستم عامل های داخلی و اصول طراحی407.........................................................................................................................
شرایط کلیدی
سیستم رفیق بارگذاری مطلق پیوند پویا فشرده سازی پارتیشن بندی پویا بارگذاری زمان
اجرا پویا
بررسی سواالت
.7.4دالیلی برای اجازه دادن به دو یا چند فرآیند برای دسترسی به یک منطقه خاص از حافظه چیست؟
.7.5در طرح پارتیشن بندی ثابت ،استفاده از پارتیشن های با اندازه نابرابر چه مزایایی دارد؟
407
سیستم عامل های داخلی و اصول طراحی408.........................................................................................................................
چالش ها و مسائل
.7.1در بخش ،2.3ما پنج هدف از مدیریت حافظه را فهرست کردیم و در بخش ،7.1پنج الزام را فهرست کردیم .استدالل کنید
که هر فهرست شامل همه نگرانیهایی است که در لیست دیگر مطرح شده است.
.7.2یک طرح پارتیشن بندی ثابت با پارتیشن های مساوی 216بایت و مجموع حجم حافظه اصلی 224بایت را در نظر بگیرید.
یک جدول فرآیند نگهداری می شود که شامل یک اشاره گر به یک پارتیشن برای هر فرآیند مقیم است .چند بیت برای نشانگر
مورد نیاز است؟
.7.3یک طرح پارتیشن بندی پویا را در نظر بگیرید .نشان دهید که به طور متوسط ،حافظه دارای نصف تعداد حفره های قطعه
است.
.7.4برای پیادهسازی الگوریتمهای مختلف قرارگیری مورد بحث برای پارتیشنبندی پویا بخش ،7.2فهرستی از بلوکهای آزاد
حافظه باید نگهداری شود .برای هر یک از سه روش مورد بحث بهترین مناسب ،اول مناسب ،بعدی ،میانگین طول جستجو چقدر
است؟
.7.5یکی دیگر از الگوریتم های قرارگیری برای پارتیشن بندی پویا به عنوان بدترین تناسب نامیده می شود .در این حالت،
بزرگترین بلوک آزاد حافظه برای وارد کردن یک فرآیند استفاده می شود.
آ .در مورد مزایا و معایب این روش در مقایسه با روش اول ،بعدی و بهترین روش بحث کنید.
.7.6این نمودار نمونه ای از پیکربندی حافظه را تحت پارتیشن بندی پویا ،پس از انجام تعدادی عملیات قرار دادن و تعویض
نشان می دهد .آدرس ها از چپ به راست می روند .مناطق خاکستری بلوک های اشغال شده توسط فرآیندها را نشان می دهد.
مناطق سفید نشان دهنده بلوک های حافظه آزاد است .آخرین پردازش قرار داده شده 2مگابایت است و با Xمشخص شده
است .پس از آن فقط یک پردازش جایگزین شد.
408
سیستم عامل های داخلی و اصول طراحی409.........................................................................................................................
ب اندازه بلوک آزاد درست قبل از اینکه توسط Xتقسیم شود چقدر بود؟
ج یک درخواست تخصیص جدید 3مگابایتی باید در مرحله بعد برآورده شود .فواصل حافظه را که در آن یک پارتیشن برای
فرآیند جدید تحت چهار الگوریتم قرارگیری زیر ایجاد می شود ،نشان دهید :بهترین تناسب ،اولین تناسب ،بعدی مناسب و
بدترین تناسب .برای هر الگوریتم ،یک بخش افقی زیر نوار حافظه بکشید و آن را به وضوح برچسب گذاری کنید.
آ .نتایج دنباله زیر را در شکلی مشابه شکل 7.6نشان دهید :درخواست ;70درخواست ;35درخواست ;80بازگشت ;A
درخواست ;60بازگشت ;Bبازگشت ;Dبازگشت C.
.7.8یک سیستم Buddyه را در نظر بگیرید که در آن یک بلوک خاص تحت تخصیص فعلی دارای آدرس 011011110000
است.
.7.9اجازه دهید buddykxآدرس Buddyبلوک با اندازه k2که آدرس آن xاست .یک عبارت کلی برای buddykx
بنویسید.
آ .آیا می توان از این دنباله برای ایجاد یک سیستم Buddyاستفاده کرد؟
ب مزیت این سیستم نسبت به سیستم Buddyباینری توضیح داده شده در این فصل چیست؟
409
سیستم عامل های داخلی و اصول طراحی410.........................................................................................................................
.7.11در طول اجرای یک برنامه ،پردازنده پس از هر بار واکشی دستورالعمل ،محتویات رجیستر دستورالعمل شمارگر برنامه را
یک کلمه افزایش می دهد ،اما در صورت برخورد با یک شاخه یا تماس ،محتوای آن ثبات را تغییر می دهد .ساختاری که باعث
می شود اجرا در جای دیگری از برنامه ادامه یابد .حال شکل 7.8را در نظر بگیرید .با توجه به آدرس های دستورالعمل دو گزینه
وجود دارد:
-یک آدرس نسبی را در رجیستر دستورالعمل حفظ کنید و با استفاده از ثبت دستورالعمل به عنوان ورودی ،ترجمه آدرس پویا را
انجام دهید .هنگامی که با یک شعبه یا فراخوان موفق مواجه می شوید ،آدرس نسبی ایجاد شده توسط آن شعبه یا فراخوان در
ثبت دستورالعمل بارگذاری می شود.
-یک آدرس مطلق را در ثبت دستورالعمل حفظ کنید .هنگامی که با یک شعبه یا تماس موفق مواجه می شوید ،از ترجمه پویا
آدرس استفاده می شود و نتایج در ثبت دستورالعمل ذخیره می شود.
.7.12یک سیستم صفحه بندی ساده با پارامترهای زیر را در نظر بگیرید 232 :بایت حافظه فیزیکی .اندازه صفحه 210بایت;
216صفحه فضای آدرس منطقی.
ه .چند بیت در هر ورودی جدول صفحه وجود دارد؟ فرض کنید هر ورودی جدول صفحه حاوی یک بیت معتبر/نامعتبر است.
.7.13ترجمه باینری آدرس منطقی 0001010010111010را در طرحهای مدیریت حافظه فرضی زیر بنویسید و پاسخ خود را
توضیح دهید:
آ .یک سیستم صفحهبندی با اندازه صفحه 256آدرس ،با استفاده از جدول صفحه که در آن تعداد فریم چهار برابر کوچکتر از
شماره صفحه است.
ب یک سیستم تقسیم بندی با حداکثر اندازه بخش K1آدرس ،با استفاده از جدول بخش که در آن پایه ها به طور منظم در
آدرس های واقعی قرار می گیرند 4،096 22 :بخش #
410
سیستم عامل های داخلی و اصول طراحی411.........................................................................................................................
.7.14یک سیستم تقسیم بندی ساده را در نظر بگیرید که دارای جدول بخش زیر است:
برای هر یک از آدرس های منطقی زیر ،آدرس فیزیکی را تعیین کنید یا نشان دهید که آیا یک خطای بخش رخ می دهد:
آ198 .0 .
ب 156 ،2
ج 530 .1
د 444 ،3
ه222 .0 .
.7.15حافظه ای را در نظر بگیرید که در آن بخش های به هم پیوسته Sn ،... ،S2 ،S1به ترتیب ایجاد از یک سر فروشگاه به
سمت دیگر قرار می گیرند ،همانطور که در شکل زیر نشان داده شده است:
هنگامی که بخش Sn+1ایجاد می شود ،بالفاصله پس از بخش Snقرار می گیرد ،حتی اگر برخی از بخش های ،... ،S2 ،S1
Snقبالً حذف شده باشند .هنگامی که مرز بین بخش ها در حال استفاده یا حذف شده و سوراخ به انتهای دیگر حافظه می
رسد ،بخش های مورد استفاده فشرده می شوند.
آ .نشان دهید که کسری از زمانی که Fبرای فشرده سازی صرف می شود از نابرابری زیر پیروی می کند
411
سیستم عامل های داخلی و اصول طراحی412.........................................................................................................................
راهنمایی :میانگین سرعت عبور مرز از حافظه را پیدا کنید و فرض کنید که کپی کردن یک کلمه به حداقل دو مرجع حافظه نیاز
دارد.
اولین مرحله در ایجاد یک فرآیند فعال ،بارگذاری یک برنامه در حافظه اصلی و ایجاد یک تصویر فرآیند است شکل .7.13شکل
7.14یک سناریوی معمولی برای اکثر سیستم ها را نشان می دهد .برنامه شامل تعدادی ماژول اجرا شده یا مونتاژ شده به شکل
شی کد است .اینها برای حل هر گونه ارجاعات بین ماژول ها مرتبط هستند .در همان زمان ،ارجاع به روال های کتابخانه حل
می شود .روال های کتابخانه خود ممکن است در برنامه گنجانده شوند یا به عنوان کد مشترک ارجاع داده شوند که باید توسط
سیستم عامل در زمان اجرا ارائه شود .در این پیوست ،ویژگی های کلیدی لینکرها و لودرها را خالصه می کنیم .برای وضوح در
ارائه ،ما با شرح وظایف بارگذاری هنگامی که یک ماژول برنامه درگیر است شروع می کنیم .هیچ پیوندی الزم نیست
412
سیستم عامل های داخلی و اصول طراحی413.........................................................................................................................
بارگذاری
در شکل ،7.14لودر ماژول بار را در حافظه اصلی با شروع مکان xقرار می دهد .در بارگذاری برنامه ،نیاز آدرس دهی نشان داده
شده در شکل 7.1باید برآورده شود .به طور کلی می توان از سه رویکرد استفاده کرد:
-بارگذاری مطلق
ABSOLUTE LOADINGیک بارگذار مطلق نیاز دارد که یک ماژول بار معین همیشه در همان مکان در حافظه اصلی
بارگذاری شود .بنابراین ،در ماژول بار ارائه شده به لودر ،تمام ارجاعات آدرس باید به آدرس های حافظه اصلی خاص یا مطلق
باشد .به عنوان مثال ،اگر xدر شکل 7.14مکان 1024باشد ،اولین کلمه در ماژول بارگذاری که برای آن ناحیه از حافظه تعیین
شده است دارای آدرس 1024است.
تخصیص مقادیر آدرس خاص به مراجع حافظه در یک برنامه می تواند توسط برنامه نویس یا در زمان اجرا یا مونتاژ انجام شود
جدول a. 7.3چندین معایب برای رویکرد قبلی وجود دارد .اول ،هر جدول Address Binding 7.3
413
سیستم عامل های داخلی و اصول طراحی414.........................................................................................................................
الف لودر
عملکرد
زمان صحافی
زمان برنامه نویسی تمام آدرس های فیزیکی واقعی به طور مستقیم توسط برنامه نویس در خود
برنامه مشخص می شود.
زمان اجرا یا مونتاژ این برنامه حاوی ارجاعات نشانی نمادین است و توسط اجرار یا اسمبلر به آدرس
های فیزیکی واقعی تبدیل می شود.
زمان بارگذاری اجرار یا اسمبلر آدرس های نسبی را تولید می کند .لودر این ها را در زمان
بارگذاری برنامه به آدرس های مطلق ترجمه می کند.
زمان اجرا برنامه بارگذاری شده آدرس های نسبی را حفظ می کند .اینها به صورت پویا
توسط سخت افزار پردازنده به آدرس های مطلق تبدیل می شوند.
ب پیوند دهنده
زمان برنامه نویسی هیچ برنامه خارجی یا ارجاع داده مجاز نیست .برنامه نویس باید کد منبع همه
زیربرنامه هایی را که به آنها ارجاع داده شده است در برنامه قرار دهد.
زمان اجرا یا مونتاژ اسمبلر باید کد منبع هر زیر برنامه ای را که به آن ارجاع داده شده است
واکشی کند و آنها را به عنوان یک واحد جمع کند.
بارگذاری ایجاد ماژول همه ماژول های شی با استفاده از آدرس های نسبی مونتاژ شده اند .این ماژول
ها به هم مرتبط شده اند و همه مراجع نسبت به مبدا ماژول بار نهایی مجدداً
بیان می شوند.
414
سیستم عامل های داخلی و اصول طراحی415.........................................................................................................................
زمان بارگذاری تا زمانی که ماژول بارگذاری در حافظه اصلی بارگذاری نشود ،مراجع خارجی
حل نمی شوند .در آن زمان ،ماژول های پیوند پویا مرجع به ماژول بار اضافه
می شوند و کل بسته در حافظه اصلی یا مجازی بارگذاری می شود.
زمان اجرا ارجاعات خارجی تا زمانی که فراخوانی خارجی توسط پردازنده اجرا نشود حل
نمی شوند .در آن زمان ،فرآیند قطع می شود و ماژول مورد نظر به برنامه
فراخوانی متصل می شود.
برنامه نویس باید استراتژی تخصیص مورد نظر را برای قرار دادن ماژول ها در حافظه اصلی بداند .ثانیاً ،اگر تغییراتی در برنامه
انجام شود که شامل درج یا حذف در بدنه ماژول باشد ،تمام آدرسها باید تغییر کنند .بر این اساس ،ترجیح داده می شود که
منابع حافظه در برنامه ها به صورت نمادین بیان شوند و سپس آن ارجاعات نمادین در زمان اجرا یا مونتاژ حل شوند .این در
شکل 7.15نشان داده شده است .هر ارجاع به یک دستورالعمل یا آیتم داده در ابتدا با یک نماد نشان داده می شود .در آماده
سازی ماژول برای ورودی به یک لودر مطلق ،اسمبلر یا اجرار تمام این ارجاعات را به آدرس های خاصی تبدیل می کند در این
مثال ،برای بارگذاری یک ماژول با شروع از مکان ،1024همانطور که در شکل b7.15نشان داده شده است.
بارگذاری قابل تغییر نقطه ضعف اتصال مراجع حافظه به آدرس های خاص قبل از بارگذاری این است که ماژول بار حاصل تنها
می تواند در یک منطقه از حافظه اصلی قرار گیرد .با این حال ،هنگامی که بسیاری از برنامه ها حافظه اصلی را به اشتراک می
گذارند ،ممکن است تصمیم گیری قبل از زمان در کدام منطقه از حافظه یک ماژول خاص بارگذاری شود ،مطلوب نباشد .بهتر
است این تصمیم را در زمان بارگیری بگیرید .بنابراین ،ما به یک ماژول بار نیاز داریم که بتواند در هر جایی از حافظه اصلی قرار
گیرد.
415
سیستم عامل های داخلی و اصول طراحی416.........................................................................................................................
برای ارضای این نیاز جدید ،اسمبلر یا اجرار آدرسهای حافظه اصلی واقعی آدرسهای مطلق را تولید نمیکند ،بلکه آدرسهایی
را تولید میکند که نسبت به نقطهای شناختهشده ،مانند شروع برنامه ،هستند .این تکنیک در شکل c7.15نشان داده شده
است .به شروع ماژول بار آدرس نسبی 0اختصاص داده می شود و سایر مراجع حافظه در ماژول نسبت به ابتدای ماژول بیان می
شوند.
با بیان تمام مراجع حافظه در قالب نسبی ،قرار دادن ماژول در محل مورد نظر برای لودر به یک کار ساده تبدیل می شود .اگر
قرار است ماژول از محل xبارگذاری شود ،آنگاه لودر باید به سادگی xرا به هر مرجع حافظه اضافه کند زیرا ماژول را در حافظه
بارگذاری می کند .برای کمک به این کار ،ماژول بارگذاری باید شامل اطالعاتی باشد که به لودر بگوید مراجع آدرس کجا هستند
و چگونه باید تفسیر شوند معموالً نسبت به مبدأ برنامه ،اما احتماالً نسبت به نقطه دیگری در برنامه ،مانند مکان فعلی .این
مجموعه اطالعات توسط اجرار یا اسمبلر تهیه می شود و معموالً به آن دیکشنری جابجایی می گویند.
بارگذاری دینامیک زمان اجرا لودرهای قابل جابجایی رایج هستند و مزایای آشکاری نسبت به لودرهای مطلق دارند .با این حال،
در یک محیط چندبرنامهنویسی ،حتی محیطی که به حافظه مجازی وابسته نیست ،طرح بارگذاری قابل جابجایی ناکافی است .ما
به نیاز به جابجایی تصاویر پردازش در داخل و خارج از حافظه اصلی برای به حداکثر رساندن استفاده از پردازنده اشاره کرده ایم.
برای به حداکثر رساندن استفاده از حافظه اصلی ،مایلیم بتوانیم تصویر فرآیند را در زمانهای مختلف به مکانهای مختلف
برگردانیم .بنابراین ،یک برنامه ،پس از بارگیری ،ممکن است به دیسک مبادله شود و سپس در مکان دیگری جایگزین شود .اگر
مراجع حافظه در زمان بارگذاری اولیه به آدرس های مطلق متصل شده باشند ،این غیرممکن خواهد بود.
جایگزین این است که محاسبه یک آدرس مطلق را تا زمانی که واقعاً در زمان اجرا مورد نیاز باشد به تعویق بیندازید .برای این
منظور ،ماژول بار در حافظه اصلی با تمام مراجع حافظه به صورت نسبی بارگذاری می شود شکل c. 7.15تا زمانی که یک
دستور عمالً اجرا نشود آدرس مطلق محاسبه نمی شود .برای اطمینان از اینکه این عملکرد عملکرد را کاهش نمی دهد ،باید به
جای نرم افزار ،توسط سخت افزار پردازنده خاص انجام شود .این سخت افزار در بخش 7.2توضیح داده شده است.
محاسبه آدرس پویا انعطاف پذیری کامل را فراهم می کند .یک برنامه را می توان در هر ناحیه ای از حافظه اصلی بارگذاری کرد.
متعاقباً ،اجرای برنامه می تواند قطع شود و برنامه می تواند از حافظه اصلی خارج شود تا بعداً در مکان دیگری تعویض شود.
ربط دادن
عملکرد یک پیوند دهنده این است که مجموعه ای از ماژول های شی را به عنوان ورودی دریافت کند و یک ماژول بار تولید کند
که از مجموعه یکپارچه ای از ماژول های برنامه و داده تشکیل شده است تا به لودر ارسال شود .در هر ماژول شی ،ممکن است
ارجاع آدرس به مکانهای ماژولهای دیگر وجود داشته باشد .هر مرجعی از این قبیل فقط می تواند به صورت نمادین در یک
416
سیستم عامل های داخلی و اصول طراحی417.........................................................................................................................
ماژول شی غیرپیونده بیان شود .پیوند دهنده یک ماژول بار واحد ایجاد می کند که به طور پیوسته به همه ماژول های شی
متصل می شود .هر مرجع درون ماژول باید از یک آدرس نمادین به یک مرجع به یک مکان در ماژول بار کلی تغییر یابد .به
عنوان مثال ،ماژول Aدر شکل a7.16شامل فراخوانی رویه ای از ماژول Bاست .هنگامی که این ماژول ها در ماژول بار ترکیب
می شوند ،این ارجاع نمادین به ماژول Bبه یک مرجع خاص به محل نقطه ورودی Bدر داخل مدول تغییر می کند.
LINKAGE EDITORماهیت این پیوند آدرس به نوع ماژول باری که باید ایجاد شود و زمان وقوع پیوند بستگی دارد
جدول b. 7.3اگر همانطور که معموالً اتفاق میافتد ،یک ماژول بار قابل جابجایی مورد نظر باشد ،اتصال معموالً به روش زیر
انجام میشود .هر ماژول شی اجرا شده یا مونتاژ شده با ارجاعاتی نسبت به ابتدای ماژول شی ایجاد می شود .همه این ماژول ها
در یک ماژول بار قابل جابجایی واحد با همه ارجاعات نسبت به مبدا ماژول بار کنار هم قرار می گیرند .این ماژول می تواند به
عنوان ورودی برای بارگذاری قابل جابجایی یا بارگذاری پویا در زمان اجرا استفاده شود.
پیوند دهنده ای که یک ماژول بار قابل جابجایی تولید می کند اغلب به عنوان ویرایشگر پیوند نامیده می شود .شکل 7.16
عملکرد ویرایشگر پیوند را نشان می دهد.
DYNAMIC LINKERمانند بارگذاری ،امکان به تعویق انداختن برخی از عملکردهای پیوند وجود دارد .اصطالح پیوند پویا
برای اشاره به عمل به تعویق انداختن پیوند برخی از ماژول های خارجی تا پس از ایجاد ماژول بار استفاده می شود .بنابراین،
ماژول بار شامل ارجاعات حل نشده به برنامه های دیگر است .این مراجع می توانند در زمان بارگذاری یا زمان اجرا حل شوند.
برای پیوند پویا در زمان بارگذاری شامل کتابخانه پویای باالیی در شکل ،7.14مراحل زیر انجام می شود .ماژول بار ماژول برنامه
که باید بارگذاری شود در حافظه خوانده می شود .هرگونه ارجاع به یک ماژول خارجی ماژول هدف باعث می شود که لودر ماژول
417
سیستم عامل های داخلی و اصول طراحی418.........................................................................................................................
هدف را پیدا کند ،آن را بارگذاری کند و ارجاع به یک آدرس نسبی در حافظه را از ابتدای ماژول برنامه تغییر دهد .چندین مزیت
برای این رویکرد نسبت به آنچه که می توان پیوند استاتیک نامید ،وجود دارد:
-ترکیب نسخه های تغییر یافته یا ارتقا یافته ماژول هدف ،که ممکن است یک ابزار سیستم عامل یا یک برنامه معمولی دیگر
باشد ،آسان تر می شود .با پیوند استاتیک ،تغییر به چنین ماژول پشتیبانی نیاز به پیوند مجدد کل ماژول برنامه دارد .این نه تنها
ناکارآمد است ،بلکه ممکن است در برخی شرایط غیرممکن باشد در زمینه ،اکثر نرم افزارهای تجاری به صورت ماژول بار منتشر
می شوند .نسخه منبع و شی منتشر نشده است.
-داشتن کد هدف در یک فایل پیوند پویا راه را برای اشتراک گذاری خودکار کد هموار می کند .سیستم عامل می تواند
تشخیص دهد که بیش از یک برنامه از کد هدف یکسان استفاده می کنند زیرا آن کد را بارگیری و پیوند داده است .میتواند از
این اطالعات برای بارگیری یک نسخه از کد هدف و پیوند آن به هر دو برنامه استفاده کند ،نه اینکه مجبور باشد برای هر برنامه
یک نسخه بارگذاری کند.
-برای توسعه دهندگان نرم افزار مستقل توسعه عملکرد یک سیستم عامل پرکاربرد مانند لینوکس آسان تر می شود .یک توسعه
دهنده می تواند عملکرد جدیدی ارائه دهد که ممکن است برای برنامه های مختلف مفید باشد و آن را به عنوان یک ماژول پیوند
پویا بسته بندی کند.
با پیوند پویا در زمان اجرا شامل کتابخانه پویا پایین تر در شکل ،7.14برخی از پیوندها تا زمان اجرا به تعویق می افتد .ارجاعات
خارجی به ماژول های هدف در برنامه بارگذاری شده باقی می مانند .هنگامی که تماسی با ماژول موجود برقرار می شود ،سیستم
عامل ماژول را مکان یابی می کند ،آن را بارگیری می کند و آن را به ماژول فراخوان پیوند می دهد .چنین ماژول هایی معموالً
قابل اشتراک گذاری هستند .در محیط ویندوز ،اینها کتابخانههای پیوند پویا DLLهستند .بنابراین ،اگر یک فرآیند در حال
حاضر از یک ماژول مشترک پیوند شده پویا استفاده می کند ،آن ماژول در حافظه اصلی است و یک فرآیند جدید می تواند به
سادگی به ماژول از قبل بارگذاری شده پیوند داده شود.
استفاده از DLLها می تواند منجر به مشکلی شود که معموالً از آن به عنوان جهنم DLLیاد می شود .جهنم DLLزمانی
اتفاق میافتد که دو یا چند فرآیند یک ماژول DLLرا به اشتراک بگذارند اما نسخههای متفاوتی از ماژول را انتظار داشته
باشند .به عنوان مثال ،یک برنامه کاربردی یا عملکرد سیستم ممکن است دوباره نصب شود و یک نسخه قدیمی از یک فایل
DLLرا با خود بیاورد.
دیدهایم که بارگذاری پویا اجازه میدهد تا کل ماژول بار جابجا شود .با این حال ،ساختار ماژول ثابت است و در طول اجرای
فرآیند و از یک اجرا به اجرای بعدی بدون تغییر باقی می ماند .با این حال ،در برخی موارد ،نمی توان قبل از اجرا تعیین کرد که
کدام ماژول های شی مورد نیاز هستند .این وضعیت با برنامه های پردازش تراکنش ،مانند سیستم رزرو خطوط هوایی یا برنامه
418
سیستم عامل های داخلی و اصول طراحی419.........................................................................................................................
های بانکی مشخص می شود .ماهیت تراکنش تعیین میکند که کدام ماژولهای برنامه مورد نیاز هستند ،و بهصورت مناسب
بارگذاری میشوند و با برنامه اصلی مرتبط میشوند .مزیت استفاده از چنین پیوند دهنده پویا این است که نیازی به تخصیص
حافظه برای واحدهای برنامه نیست مگر اینکه به آن واحدها ارجاع داده شود .این قابلیت در پشتیبانی از سیستم های تقسیم
بندی استفاده می شود.
یک اصالح اضافی ممکن است :یک برنامه نیازی به دانستن نام همه ماژولها یا نقاط ورودی که ممکن است فراخوانی شوند،
نباشد .به عنوان مثال ،یک برنامه نموداری ممکن است برای کار با انواع پالترها نوشته شود ،که هر کدام توسط بسته درایور
متفاوتی هدایت می شوند .برنامه می تواند نام پالتری را که در حال حاضر روی سیستم نصب شده است از طریق فرآیند دیگری
یا با جستجوی آن در یک فایل پیکربندی یاد بگیرد .این به کاربر برنامه اجازه می دهد تا پالتر جدیدی را نصب کند که در زمان
نوشتن برنامه وجود نداشته است.
419
سیستم عامل های داخلی و اصول طراحی420.........................................................................................................................
فصل 8
حافظه مجازی
8.1ساختارهای سخت افزاری و کنترلی محل و صفحه بندی حافظه مجازی /تقسیم بندی
8.2نرم افزار سیستم عامل واکشی خط مشی سیاست جایگزینی سیاست /سیاست تمیز کردن مدیریت مجموعه مقیم /کنترل
بار
8.3مدیریت حافظه یونیکس و سوالریس /سیستم پیجینگ /تخصیص دهنده حافظه هسته
8.5مدیریت حافظه ویندوز نقشه آدرس مجازی ویندوز صفحه بندی ویندوز /تعویض ویندوز 8
8.7خالصه
اهداف یادگیری
-سخت افزار و ساختارهای کنترلی که از حافظه مجازی پشتیبانی می کنند را توضیح دهید.
-مکانیسم های مختلف سیستم عامل مورد استفاده برای پیاده سازی حافظه مجازی را توضیح دهید.
420
سیستم عامل های داخلی و اصول طراحی421.........................................................................................................................
-مکانیسم های مدیریت حافظه مجازی را در یونیکس ،لینوکس و ویندوز 7توضیح دهید.
فصل هفتم به معرفی مفاهیم صفحه بندی و تقسیم بندی و تحلیل کاستی های آنها پرداخت .اکنون به بحث حافظه مجازی می
پردازیم .تجزیه و تحلیل این موضوع با این واقعیت پیچیده است که مدیریت حافظه یک رابطه متقابل پیچیده بین سخت افزار
پردازنده و نرم افزار سیستم عامل است .ما ابتدا روی جنبه سخت افزاری حافظه مجازی تمرکز می کنیم و به استفاده از صفحه
بندی ،بخش بندی ،و صفحه بندی و تقسیم بندی ترکیبی می پردازیم .سپس به مسائل مربوط به طراحی یک حافظه مجازی در
سیستم عامل ها نگاه می کنیم.
با مقایسه صفحه بندی ساده و تقسیم بندی ساده ،از یک سو ،با پارتیشن بندی ثابت و پویا ،از سوی دیگر ،پایه و اساس یک
پیشرفت اساسی در مدیریت حافظه را می بینیم .دو ویژگی صفحه بندی و تقسیم بندی ،کلیدهای این پیشرفت هستند:
.1تمام مراجع حافظه در یک فرآیند آدرس های منطقی هستند که در زمان اجرا به صورت پویا به آدرس های فیزیکی ترجمه
می شوند .این به این معنی است که یک فرآیند ممکن است در حافظه اصلی و یا خارج از آن جابجا شود به طوری که مناطق
مختلف حافظه اصلی را در زمان های مختلف در طول دوره اجرا اشغال کند.
حافظه مجازی یک طرح تخصیص ذخیره سازی که در آن حافظه ثانویه می تواند به
گونه ای مورد خطاب قرار گیرد که انگار بخشی از حافظه اصلی است.
آدرسهایی که یک برنامه ممکن است برای مرجع حافظه استفاده کند
از آدرسهایی که سیستم حافظه برای شناسایی مکانهای ذخیره
فیزیکی استفاده میکند متمایز میشوند و آدرسهای تولید شده توسط
برنامه بهطور خودکار به آدرسهای ماشین مربوطه ترجمه میشوند.
اندازه فضای ذخیره سازی مجازی توسط طرح آدرس دهی سیستم
کامپیوتری و مقدار حافظه ثانویه موجود محدود می شود و نه با تعداد
واقعی مکان های ذخیره سازی اصلی.
421
سیستم عامل های داخلی و اصول طراحی422.........................................................................................................................
آدرسی که به یک مکان در حافظه مجازی اختصاص داده شده است تا آدرس مجازی
به آن مکان دسترسی داشته باشید ،انگار که بخشی از حافظه اصلی
است.
.2یک فرآیند ممکن است به تعدادی از قطعات صفحات یا بخشها تقسیم شود و الزم نیست این قطعات در حین اجرا به طور
پیوسته در حافظه اصلی قرار گیرند .ترکیبی از ترجمه آدرس پویا در زمان اجرا و استفاده از جدول صفحه یا بخش این اجازه را
می دهد.
اکنون به موفقیت می رسیم .اگر دو مشخصه قبلی وجود داشته باشد ،الزم نیست که تمام صفحات یا تمام بخشهای یک فرآیند
در حین اجرا در حافظه اصلی باشند .اگر قطعه قطعه یا صفحه که دستور بعدی را برای واکشی نگه می دارد و قطعه ای که مکان
داده بعدی را نگه می دارد که باید به آن دسترسی داشته باشید در حافظه اصلی باشند ،حداقل برای مدتی ممکن است اجرا
ادامه یابد.
بیایید در نظر بگیریم که چگونه ممکن است این کار انجام شود .در حال حاضر ،میتوانیم به صورت کلی صحبت کنیم ،و بسته به
اینکه صفحهبندی یا بخشبندی به کار میرود ،از اصطالح قطعه برای اشاره به صفحه یا بخش استفاده میکنیم .فرض کنید زمان
وارد کردن یک فرآیند جدید به حافظه فرا رسیده است .سیستمعامل با وارد کردن تنها یک یا چند قطعه شروع میشود ،تا قطعه
برنامه اولیه و قطعه داده اولیه را که آن دستورالعملها به آن ارجاع میدهند ،شامل شود .بخشی از یک فرآیند که در واقع در هر
زمان در حافظه اصلی است ،مجموعه مقیم فرآیند نامیده می شود .همانطور که فرآیند اجرا می شود ،تا زمانی که تمام مراجع
حافظه به مکان هایی که در مجموعه ساکن هستند ،کارها به آرامی پیش می رود .با استفاده از بخش یا جدول صفحه ،پردازنده
همیشه می تواند تعیین کند که آیا این چنین است یا خیر .اگر پردازنده با یک آدرس منطقی روبرو شود که در حافظه اصلی
نیست ،یک وقفه ایجاد می کند که نشان دهنده خطای دسترسی به حافظه است .سیستم عامل فرآیند قطع شده را در حالت
مسدود کردن قرار می دهد .برای اینکه اجرای این فرآیند بعداً ادامه یابد ،سیستم عامل باید بخشی از فرآیند را که حاوی آدرس
منطقی است که باعث خطای دسترسی شده است را به حافظه اصلی بیاورد .برای این منظور ،سیستم عامل یک درخواست
خواندن ورودی/خروجی دیسک ورودی/خروجی صادر می کند .پس از اینکه درخواست I/Oصادر شد ،سیستم عامل می تواند
422
سیستم عامل های داخلی و اصول طراحی423.........................................................................................................................
فرآیند دیگری را برای اجرا در حین انجام I/Oدیسک ارسال کند .هنگامی که قطعه مورد نظر به حافظه اصلی وارد شد ،یک
وقفه ورودی/خروجی صادر میشود که کنترل را به سیستمعامل باز میگرداند ،که فرآیند آسیبدیده را به حالت آماده
برمیگرداند.
ممکن است فوراً به ذهنتان خطور کند که کارآیی این مانور را زیر سوال ببرید ،که در آن فرآیندی ممکن است در حال اجرا باشد
و مجبور نباشید به دلیل دیگری به جز اینکه در بارگذاری همه قطعات مورد نیاز فرآیند شکست خورده اید ،قطع شود .در حال
حاضر ،اجازه دهید بررسی این سوال را با اطمینان از اینکه کارایی ممکن است به تعویق بیندازیم .در عوض ،اجازه دهید در مورد
پیامدهای استراتژی جدید خود فکر کنیم .دو مفهوم وجود دارد ،دومی شگفتانگیزتر از اولی ،و هر دو منجر به بهبود استفاده از
سیستم میشوند:
.1ممکن است فرآیندهای بیشتری در حافظه اصلی نگهداری شوند .از آنجایی که ما فقط برخی از قطعات هر فرآیند خاصی را
بارگذاری می کنیم ،فضای بیشتری برای فرآیندهای بیشتر وجود دارد .این منجر به استفاده کارآمدتر از پردازنده می شود ،زیرا
احتمال بیشتری وجود دارد که حداقل یکی از فرآیندهای متعدد در هر زمان خاص در حالت آماده باشد.
.2یک پردازش ممکن است بزرگتر از تمام حافظه اصلی باشد .یکی از اساسی ترین محدودیت ها در برنامه نویسی برداشته شده
است .بدون طرحی که ما در مورد آن بحث کردیم ،یک برنامه نویس باید کامالً از مقدار حافظه موجود آگاه باشد .اگر برنامه ای
که نوشته می شود خیلی بزرگ باشد ،برنامه نویس باید راه هایی را برای ساختاربندی برنامه به قطعاتی که می توانند به طور
جداگانه در نوعی استراتژی همپوشانی بارگذاری شوند ،ابداع کند .با حافظه مجازی مبتنی بر صفحه بندی یا بخش بندی ،این
کار به سیستم عامل و سخت افزار واگذار می شود .تا آنجا که به برنامه نویس مربوط می شود ،او با یک حافظه بزرگ ،به اندازه
ای که با ذخیره سازی دیسک مرتبط است ،سروکار دارد .سیستم عامل به طور خودکار قطعات یک فرآیند را در صورت لزوم در
حافظه اصلی بارگذاری می کند.
از آنجا که یک فرآیند فقط در حافظه اصلی اجرا می شود ،به آن حافظه به عنوان حافظه حقیقی گفته می شود .اما یک برنامه
نویس یا کاربر یک حافظه بالقوه بسیار بزرگتر را درک می کند -حافظه ای که روی دیسک تخصیص داده می شود .این دومی
به عنوان حافظه مجازی شناخته می شود .حافظه مجازی امکان چندبرنامهنویسی بسیار مؤثر را فراهم میکند و کاربر را از
محدودیتهای غیرضروری سخت حافظه اصلی خالص میکند .جدول 8.2خصوصیات صفحه بندی و تقسیم بندی با و بدون
استفاده از حافظه مجازی را خالصه می کند.
423
سیستم عامل های داخلی و اصول طراحی424.........................................................................................................................
مزایای حافظه مجازی جذاب است ،اما آیا این طرح کاربردی است؟ زمانی بحث های قابل توجهی در این مورد وجود داشت ،اما
تجربه با سیستم عامل های متعدد بدون شک نشان داده است که حافظه مجازی کار می کند.
صفحه بندی ساده صفحه بندی حافظه تقسیم بندی ساده تقسیم بندی حافظه
مجازی مجازی
حافظه اصلی به قطعات کوچک با اندازه ثابت حافظه اصلی پارتیشن بندی نشده است.
به نام فریم تقسیم می شود.
بخش های برنامه مشخص شده توسط برنامه برنامه ای که توسط اجرار یا سیستم مدیریت
حافظه به صفحات تقسیم می شود. نویس برای اجرار یعنی تصمیم توسط برنامه
نویس گرفته می شود.
تکه تکه شدن داخلی در فریم ها بدون تکه تکه شدن داخلی
سیستم عامل باید یک جدول بخش برای هر سیستم عامل باید برای هر فرآیند یک جدول
صفحه داشته باشد که نشان دهد هر صفحه فرآیند داشته باشد که آدرس بار و طول هر
کدام فریم را اشغال می کند. بخش را نشان دهد.
سیستم عامل باید لیستی از حفره های آزاد در سیستم عامل باید یک لیست فریم آزاد داشته
باشد. حافظه اصلی داشته باشد.
پردازنده برای محاسبه آدرس مطلق از شماره پردازنده برای محاسبه آدرس مطلق از عدد
صفحه استفاده می کند. قطعه استفاده می کند.
تمام صفحات یک الزم نیست همه بخش تمام بخشهای یک الزم نیست همه
فرآیند باید در حافظه صفحات یک فرآیند در فرآیند باید در حافظه های یک فرآیند در
فریم های حافظه اصلی اصلی برای اجرای اصلی برای اجرای حافظه اصلی برای
424
سیستم عامل های داخلی و اصول طراحی425.........................................................................................................................
فرآیند باشند ،مگر باشند تا فرآیند اجرا فرآیند باشند ،مگر اجرای فرآیند باشند.
بخش ها ممکن است اینکه از همپوشانی شود .صفحات ممکن اینکه از همپوشانی
استفاده شود. است در صورت نیاز در صورت نیاز خوانده استفاده شود.
خوانده شوند. شوند.
بر این اساس ،حافظه مجازی ،مبتنی بر صفحهبندی یا صفحهبندی به عالوه بخشبندی ،به جزء ضروری سیستم عامل های
معاصر تبدیل شده است.
برای درک موضوع کلیدی و اینکه چرا حافظه مجازی موضوع بحث زیادی بود ،اجازه دهید دوباره وظایف سیستم عامل را در
رابطه با حافظه مجازی بررسی کنیم .یک فرآیند بزرگ را در نظر بگیرید که شامل یک برنامه طوالنی به اضافه تعدادی آرایه داده
است .در هر دوره زمانی کوتاهی ،اجرا ممکن است به بخش کوچکی از برنامه مثالً یک برنامه فرعی محدود شود و شاید فقط به
یک یا دو آرایه از داده ها دسترسی داشته باشد .اگر اینطور باشد ،بارگذاری دهها قطعه برای آن فرآیند به وضوح بیهوده خواهد
بود ،در حالی که فقط چند قطعه قبل از تعلیق و تعویض برنامه استفاده میشوند .تنها با بارگذاری در چند قطعه می توانیم از
حافظه بهتر استفاده کنیم .سپس ،اگر برنامه به یک دستورالعمل منشعب شود یا به یک آیتم داده در قطعه ای که در حافظه
اصلی نیست ارجاع دهد ،یک خطا ایجاد می شود .این به سیستم عامل می گوید که قطعه مورد نظر را وارد کند.
بنابراین ،در هر زمان ،تنها چند قطعه از هر فرآیند معین در حافظه است ،و بنابراین فرآیندهای بیشتری را می توان در حافظه
نگه داشت .عالوه بر این ،در زمان صرفه جویی می شود زیرا قطعات استفاده نشده در حافظه جابجا نمی شوند و یا خارج نمی
شوند .با این حال ،سیستم عامل باید در مورد نحوه مدیریت این طرح هوشمندانه عمل کند .در حالت ثابت ،عمالً تمام حافظه
اصلی با قطعات پردازشی اشغال میشود ،به طوری که پردازنده و سیستمعامل تا حد امکان به بسیاری از پردازشها دسترسی
مستقیم دارند .بنابراین ،هنگامی که سیستم عامل یک قطعه را وارد می کند ،باید قطعه دیگری را بیرون بیاندازد .اگر درست قبل
از استفاده یک قطعه را بیرون بیاندازد ،تقریباً بالفاصله باید دوباره آن قطعه را دریافت کند .بیش از حد این منجر به شرایطی می
شود که به نام thrashingشناخته می شود :سیستم بیشتر وقت خود را صرف تعویض قطعات به جای اجرای دستورالعمل ها
425
سیستم عامل های داخلی و اصول طراحی426.........................................................................................................................
می کند .اجتناب از کوبیدن یک حوزه تحقیقاتی عمده در دهه 1970بود و منجر به الگوریتمهای پیچیده اما مؤثر مختلفی شد.
در اصل ،سیستم عامل بر اساس تاریخ اخیر تالش می کند حدس بزند که کدام قطعات در آینده نزدیک کمتر مورد استفاده قرار
می گیرند.
این استدالل مبتنی بر اعتقاد به اصل محلی بودن است که در فصل 1معرفی شد به ویژه پیوست A1را ببینید .به طور خالصه،
اصل محلی بودن بیان می کند که ارجاعات برنامه و داده در یک فرآیند تمایل به خوشه بندی دارند .از این رو ،این فرض که تنها
چند قطعه از یک فرآیند در یک دوره زمانی کوتاه مورد نیاز خواهد بود معتبر است .همچنین ،باید بتوان حدسهای
هوشمندانهای در مورد قطعاتی از یک فرآیند در آینده نزدیک انجام داد ،که از کوبیدن جلوگیری میکند.
اصل محلی بودن نشان می دهد که یک طرح حافظه مجازی ممکن است موثر باشد .برای اینکه حافظه مجازی کاربردی و موثر
باشد ،دو عنصر الزم است .اول ،باید پشتیبانی سخت افزاری برای طرح صفحه بندی و/یا تقسیم بندی به کار گرفته شود .دوم،
سیستم عامل باید دارای نرم افزاری برای مدیریت حرکت صفحات و/یا بخش ها بین حافظه ثانویه و حافظه اصلی باشد .در این
بخش ،جنبه سخت افزاری را بررسی می کنیم و ساختارهای کنترلی الزم را که توسط سیستم عامل ایجاد و نگهداری می شوند،
اما توسط سخت افزار مدیریت حافظه استفاده می شوند ،بررسی می کنیم .بررسی مشکالت سیستم عامل در بخش بعدی ارائه
شده است.
صفحه بندی
اصطالح حافظه مجازی معموالً با سیستم هایی مرتبط است که از صفحه بندی استفاده می کنند ،اگرچه حافظه مجازی مبتنی
بر تقسیم بندی نیز مورد استفاده قرار می گیرد و در ادامه مورد بحث قرار می گیرد .استفاده از صفحه بندی برای دستیابی به
حافظه مجازی برای اولین بار برای کامپیوتر Atlas KILB62گزارش شد و به زودی مورد استفاده تجاری گسترده قرار گرفت.
426
سیستم عامل های داخلی و اصول طراحی427.........................................................................................................................
در بحث صفحه بندی ساده اشاره کردیم که هر فرآیند جدول صفحه مخصوص به خود را دارد و زمانی که تمام صفحات آن در
حافظه اصلی بارگذاری می شوند ،جدول صفحه یک فرآیند ایجاد شده و در حافظه اصلی بارگذاری می شود .هر ورودی جدول
صفحه PTEشامل شماره فریم صفحه مربوطه در حافظه اصلی است .یک جدول صفحه نیز برای طرح حافظه مجازی مبتنی بر
صفحه بندی مورد نیاز است .باز هم ،معمول است که یک جدول صفحه منحصر به فرد را با هر فرآیند مرتبط کنیم .با این حال،
در این مورد ،ورودی های جدول صفحه پیچیده تر می شوند شکل a. 8.1از آنجایی که ممکن است فقط برخی از صفحات یک
فرآیند در حافظه اصلی باشند ،در هر ورودی جدول صفحه به بیتی نیاز است تا نشان دهد آیا صفحه مربوطه Pدر حافظه اصلی
وجود دارد یا خیر .اگر بیت نشان می دهد که صفحه در حافظه است ،ورودی شامل شماره فریم آن صفحه نیز می شود.
ورودی جدول صفحه شامل یک بیت اصالح Mاست که نشان می دهد آیا محتوای صفحه مربوطه از آخرین بارگذاری صفحه در
حافظه اصلی تغییر کرده است یا خیر .اگر تغییری صورت نگرفته باشد ،الزم نیست وقتی زمان تعویض صفحه در کادری که در
حال حاضر آن را اشغال کرده است ،صفحه را بنویسید .بیت های کنترل دیگری نیز ممکن است وجود داشته باشد .به عنوان
مثال ،اگر حفاظت یا اشتراک گذاری در سطح صفحه مدیریت شود ،بیت هایی برای این منظور مورد نیاز خواهند بود.
427
سیستم عامل های داخلی و اصول طراحی428.........................................................................................................................
ساختار جدول صفحه مکانیسم اصلی برای خواندن یک کلمه از حافظه شامل ترجمه یک آدرس مجازی یا منطقی ،متشکل از
شماره صفحه و افست ،به یک آدرس فیزیکی ،متشکل از شماره فریم و افست ،با استفاده از جدول صفحه است .از آنجایی که
جدول صفحه دارای طول متغیر است ،بسته به اندازه فرآیند ،نمی توان انتظار داشت که آن را در ثبات ها نگهداری کنیم .در
عوض ،برای دسترسی باید در حافظه اصلی باشد .شکل 8.2اجرای سخت افزاری را نشان می دهد .هنگامی که یک فرآیند خاص
در حال اجرا است ،یک ثبات آدرس شروع جدول صفحه را برای آن فرآیند نگه می دارد .شماره صفحه یک آدرس مجازی برای
نمایه سازی آن جدول و جستجوی شماره فریم مربوطه استفاده می شود .این با قسمت افست آدرس مجازی ترکیب می شود تا
آدرس واقعی مورد نظر را ایجاد کند .به طور معمول ،زمینه شماره صفحه طوالنی تر از زمینه شماره قاب n mاست.
در اکثر سیستم ها ،یک جدول صفحه در هر فرآیند وجود دارد .اما هر فرآیند می تواند حجم عظیمی از حافظه مجازی را اشغال
کند .به عنوان مثال ،در معماری ،VAX Virtual Address Extensionهر فرآیند می تواند تا 2 231گیگابایت حافظه
مجازی داشته باشد .استفاده از 29صفحه 512بایتی به این معنی است که در هر فرآیند به 222صفحه ورودی جدول نیاز
است .واضح است که مقدار حافظه اختصاص داده شده به جداول صفحه به تنهایی می تواند به طور غیرقابل قبولی زیاد باشد.
برای غلبه بر این مشکل ،اکثر طرح های حافظه مجازی جداول صفحه را به جای حافظه حقیقی در حافظه مجازی ذخیره می
کنند .این بدان معناست که جداول صفحه نیز مانند سایر صفحات در معرض صفحه بندی هستند .هنگامی که یک فرآیند در
حال اجرا است ،حداقل بخشی از جدول صفحه آن باید در حافظه اصلی باشد ،از جمله ورودی جدول صفحه صفحه در حال اجرا.
برخی از پردازنده ها از یک طرح دو سطحی برای سازماندهی جداول صفحات بزرگ استفاده می کنند .در این طرح ،یک
دایرکتوری صفحه وجود دارد که در آن هر ورودی به یک جدول صفحه اشاره می کند .بنابراین ،اگر طول دایرکتوری صفحه X
باشد ،و اگر حداکثر طول جدول صفحه Yباشد ،یک فرآیند می تواند حداکثر از صفحات X Yتشکیل شود .به طور معمول،
428
سیستم عامل های داخلی و اصول طراحی429.........................................................................................................................
حداکثر طول جدول صفحه برابر با یک صفحه محدود می شود .به عنوان مثال ،پردازنده Pentiumاز این روش استفاده می
کند.
شکل 8.3نمونه ای از یک طرح دو سطحی معمولی برای استفاده با آدرس 32بیتی را نشان می دهد .اگر آدرس دهی در سطح
بایت و صفحات 4کیلوبایتی 212را فرض کنیم 4 ،گیگابایت 232فضای آدرس مجازی از 220صفحه تشکیل شده است .اگر
هر یک از این صفحات نقشه برداری شده باشد .با یک ورودی جدول صفحه 4بایتی ،می توانیم یک جدول صفحه کاربر متشکل
از PTE 220ایجاد کنیم که به 4مگابایت نیاز دارد .222این جدول صفحه کاربر بزرگ ،که 210صفحه را اشغال می کند ،می
تواند در حافظه مجازی نگهداری شود و توسط یک جدول صفحه اصلی با PTE 210که 4کیلوبایت اشغال می کند ،نقشه
برداری شود.
212حافظه اصلی .شکل 8.4مراحل مربوط به ترجمه آدرس را نشان می دهد .این طرح صفحه اصلی همیشه در حافظه اصلی
باقی می ماند 10 .بیت اول یک آدرس مجازی برای ایندکس کردن در صفحه اصلی برای یافتن PTEبرای صفحه ای از جدول
صفحه کاربر استفاده می شود .اگر آن صفحه در حافظه اصلی نباشد ،خطای صفحه رخ می دهد .اگر آن صفحه در حافظه اصلی
است 10 ،بیت بعدی از نمایه آدرس مجازی را در صفحه PTEکاربر قرار دهید تا PTEرا برای صفحه ای که توسط آدرس
مجازی ارجاع داده شده است ،پیدا کنید.
جدول صفحه معکوس یکی از اشکاالت نوع جداول صفحه که در مورد آن بحث کردیم این است که اندازه آنها با فضای آدرس
مجازی متناسب است .یک رویکرد جایگزین برای استفاده از جداول صفحه یک یا چند سطحی ،استفاده از ساختار جدول صفحه
معکوس است .تغییرات این رویکرد در UltraSPARC ،PowerPCو معماری IA-64استفاده می شود .پیاده سازی سیستم
عامل Machدر RT-PCنیز از این تکنیک استفاده می کند.
در این رویکرد ،بخش شماره صفحه یک آدرس مجازی با استفاده از یک تابع درهم سازی ساده به یک مقدار هش نگاشت می
شود 1.مقدار هش یک اشاره گر به جدول صفحه معکوس است که حاوی ورودی های جدول صفحه است .یک ورودی در جدول
429
سیستم عامل های داخلی و اصول طراحی430.........................................................................................................................
صفحه معکوس برای هر فریم صفحه حافظه حقیقی به جای یک ورودی در هر صفحه مجازی وجود دارد .بنابراین ،صرف نظر از
تعداد فرآیندها یا صفحات مجازی پشتیبانی شده ،نسبت ثابتی از حافظه حقیقی برای جداول مورد نیاز است .از آنجا که ممکن
است بیش از یک آدرس مجازی در یک ورودی جدول هش نگاشت شوند ،از تکنیک زنجیرهای برای مدیریت سرریز استفاده
میشود .تکنیک هش کردن منجر به زنجیرههایی میشود که معموالً کوتاه هستند -بین یک تا دو ورودی .ساختار جدول صفحه
معکوس نامیده می شود زیرا ورودی های جدول صفحه را با شماره فریم نمایه می کند نه با شماره صفحه مجازی.
شکل 8.5یک پیاده سازی معمولی از رویکرد جدول صفحه معکوس را نشان می دهد .برای اندازه حافظه فیزیکی 2متر فریم،
جدول صفحه معکوس حاوی 2متر ورودی است ،به طوری که ورودی iبه فریم iاشاره دارد .هر ورودی در جدول صفحه شامل
موارد زیر است:
-شناسه فرآیند :فرآیندی که مالک این صفحه است .ترکیبی از شماره صفحه و شناسه فرآیند ،صفحه ای را در فضای آدرس
مجازی یک فرآیند خاص شناسایی می کند.
-بیت های کنترل :این زمینه شامل پرچم هایی مانند معتبر ،ارجاع شده و اصالح شده است .و اطالعات حفاظت و قفل.
-نشانگر زنجیره ای :اگر هیچ ورودی زنجیره ای برای این ورودی وجود نداشته باشد ،این زمینه خالی است شاید با یک بیت
جداگانه نشان داده شود .در غیر این صورت ،زمینه حاوی مقدار شاخص عدد بین 0و m − 1 2ورودی بعدی در زنجیره است.
430
سیستم عامل های داخلی و اصول طراحی431.........................................................................................................................
در این مثال ،آدرس مجازی شامل یک شماره صفحه nبیتی با n mاست .تابع هش شماره صفحه nبیتی را به یک کمیت m-
bitترسیم می کند که برای فهرست کردن در جدول صفحه معکوس استفاده می شود.
TRANSLATION LOOKASIDE BUFFERدر اصل ،هر مرجع حافظه مجازی می تواند باعث دو دسترسی به
حافظه فیزیکی شود :یکی برای واکشی ورودی جدول صفحه مناسب و دیگری برای واکشی داده های مورد نظر .بنابراین ،یک
طرح حافظه مجازی ساده می تواند زمان دسترسی به حافظه را دو برابر کند .برای غلبه بر این مشکل ،اکثر طرحهای حافظه
مجازی از یک حافظه پنهان با سرعت باال برای ورودیهای جدول صفحه استفاده میکنند که معموالً بافر نگاهبانی ترجمه
TLBنامیده میشود .این کش مانند حافظه نهان به فصل 1مراجعه کنید عمل می کند و شامل ورودی های جدول صفحه
است که اخیراً استفاده شده است .سازماندهی سخت افزار صفحه بندی به دست آمده در شکل 8.6نشان داده شده است .با دادن
یک آدرس مجازی ،پردازنده ابتدا TLBرا بررسی می کند .اگر ورودی جدول صفحه مورد نظر وجود داشته باشد ،TLB hit
سپس شماره فریم بازیابی می شود و آدرس واقعی تشکیل می شود .اگر ورودی جدول صفحه مورد نظر پیدا نشد ،TLB miss
سپس پردازنده از شماره صفحه برای فهرست کردن جدول صفحه پردازش و بررسی ورودی جدول صفحه مربوطه استفاده می
کند .اگر "بیت فعلی" تنظیم شود ،صفحه در حافظه اصلی است و پردازنده می تواند شماره فریم را از ورودی جدول صفحه
بازیابی کند تا آدرس واقعی را تشکیل دهد .پردازنده همچنین TLBرا به روز می کند تا این ورودی جدول صفحه جدید را
شامل شود .در نهایت اگر بیت فعلی تنظیم نشده باشد ،صفحه مورد نظر در حافظه اصلی نیست و یک خطای دسترسی به
حافظه به نام خطای صفحه صادر می شود .در این مرحله از حوزه سخت افزار خارج می شویم و سیستم عامل را فراخوانی می
کنیم که صفحه مورد نیاز را بارگیری می کند و جدول صفحه را به روز می کند.
431
سیستم عامل های داخلی و اصول طراحی432.........................................................................................................................
شکل 8.7فلوچارتی است که استفاده از TLBرا نشان می دهد .فلوچارت نشان می دهد که اگر صفحه مورد نظر در حافظه
اصلی نباشد ،یک وقفه خطای صفحه باعث می شود تا روال رسیدگی به خطای صفحه فراخوانی شود .برای ساده نگه داشتن
فلوچارت ،این واقعیت که سیستم عامل ممکن است فرآیند دیگری را در حالی که ورودی/خروجی دیسک در حال انجام است
ارسال کند ،نشان داده نشده است .بر اساس اصل محلی بودن ،بیشتر ارجاعات حافظه مجازی به مکان هایی در صفحات اخیرا
استفاده شده خواهد بود .بنابراین ،بیشتر مراجع شامل ورودیهای جدول صفحه در حافظه پنهان هستند .مطالعات VAX
TLBنشان داده است که این طرح می تواند به طور قابل توجهی عملکرد را بهبود بخشد SATY81. ،CLAR85
تعدادی جزئیات اضافی در مورد سازماندهی واقعی TLBوجود دارد .از آنجایی که TLBفقط شامل برخی از ورودیهای یک
جدول کامل صفحه است ،نمیتوانیم به سادگی بر اساس شماره صفحه در TLBفهرست کنیم .در عوض ،هر ورودی در TLB
باید شامل شماره صفحه و همچنین ورودی جدول صفحه کامل باشد .پردازنده مجهز به سخت افزاری است که به آن امکان می
دهد همزمان تعدادی از ورودی های TLBرا بررسی کند تا مشخص کند که آیا با شماره صفحه مطابقت دارد یا خیر .این
تکنیک به عنوان نقشه برداری انجمنی نامیده می شود و با نگاشت مستقیم یا نمایه سازی که برای جستجو در جدول صفحه در
شکل 8.8استفاده می شود ،در تضاد است.
طراحی TLBهمچنین باید نحوه سازماندهی ورودی ها در TLBو جایگزینی با ورود ورودی جدید را در نظر بگیرد .این
مسائل باید در هر طراحی کش سخت افزاری در نظر گرفته شوند .این موضوع در اینجا دنبال نمی شود .خواننده ممکن است
برای جزئیات بیشتر از روش طراحی کش استفاده کند به عنوان مثالSTAL13. ،
432
سیستم عامل های داخلی و اصول طراحی433.........................................................................................................................
در نهایت ،مکانیسم حافظه مجازی باید با سیستم کش نه کش ،TLBبلکه کش حافظه اصلی تعامل داشته باشد .این در شکل
8.9نشان داده شده است .یک آدرس مجازی عموماً به شکل شماره صفحه ،افست خواهد بود .ابتدا ،سیستم حافظه با TLB
مشورت می کند تا ببیند آیا ورودی جدول صفحه منطبق وجود دارد یا خیر .اگر چنین باشد ،آدرس واقعی فیزیکی با ترکیب
عدد فریم با افست ایجاد می شود .اگر نه ،ورودی از یک جدول صفحه قابل دسترسی است .پس از ایجاد آدرس واقعی ،که به
صورت برچسب 2و باقیمانده است ،از حافظه پنهان استفاده می شود تا ببینیم آیا بلوک حاوی آن کلمه وجود دارد یا خیر .اگر
چنین است ،به CPUبرگردانده می شود .اگر نه ،کلمه از حافظه اصلی بازیابی می شود
433
سیستم عامل های داخلی و اصول طراحی434.........................................................................................................................
خواننده باید بتواند پیچیدگی سخت افزار CPUدرگیر در یک مرجع حافظه را درک کند .آدرس مجازی به آدرس واقعی ترجمه
می شود .این شامل ارجاع به ورودی جدول صفحه است که ممکن است در ،TLBدر حافظه اصلی یا روی دیسک باشد .کلمه
ارجاع شده ممکن است در حافظه پنهان ،حافظه اصلی یا روی دیسک باشد .اگر کلمه ارجاع شده فقط روی دیسک باشد ،صفحه
حاوی کلمه باید در حافظه اصلی بارگذاری شود و بلوک آن در حافظه نهان بارگذاری شود .عالوه بر این ،ورودی جدول صفحه
برای آن صفحه باید به روز شود.
اندازه صفحه یک تصمیم مهم در طراحی سخت افزار اندازه صفحه مورد استفاده است .چندین عامل وجود دارد که باید در نظر
گرفته شود .یکی پراکندگی داخلی است .واضح است که هرچه اندازه صفحه کوچکتر باشد ،میزان پراکندگی داخلی کمتر است.
434
سیستم عامل های داخلی و اصول طراحی435.........................................................................................................................
برای بهینهسازی استفاده از حافظه اصلی ،میخواهیم تکه تکه شدن داخلی را کاهش دهیم .از طرف دیگر ،هرچه صفحه کوچکتر
باشد ،تعداد صفحات مورد نیاز برای هر فرآیند بیشتر است .صفحات بیشتر در هر فرآیند به معنی جداول صفحات بزرگتر است.
برای برنامه های بزرگ در یک محیط به شدت چندبرنامه ای ،این ممکن است به این معنی باشد که بخشی از جداول صفحه
فرآیندهای فعال باید در حافظه مجازی باشد ،نه در حافظه اصلی.
بنابراین ،ممکن است یک خطای دو صفحه ای برای یک مرجع واحد به حافظه وجود داشته باشد :اول وارد کردن بخش مورد
نیاز جدول صفحه و دوم برای آوردن صفحه فرآیند .عامل دیگر این است که ویژگیهای فیزیکی اکثر دستگاههای حافظه ثانویه،
که چرخشی هستند ،به اندازه صفحه بزرگتر برای انتقال بلوک کارآمدتر دادهها کمک میکند.
پیچیدهتر کردن این مسائل ،تأثیر اندازه صفحه بر سرعت رخ دادن خطاهای صفحه است .این رفتار ،به طور کلی ،در شکل
a8.10نشان داده شده است و بر اساس اصل محلی بودن است .اگر اندازه صفحه بسیار کوچک باشد ،معموالً تعداد نسبتاً زیادی
از صفحات برای یک فرآیند در حافظه اصلی موجود خواهد بود .پس از مدتی ،صفحات موجود در حافظه همه شامل بخشهایی
از فرآیند نزدیک به مراجع اخیر خواهند بود .بنابراین ،نرخ خطای صفحه باید کم باشد .همانطور که اندازه صفحه افزایش می
یابد ،هر صفحه جداگانه حاوی مکان هایی بیشتر و دورتر از هر مرجع خاص اخیر است .بنابراین ،اثر اصل محلی بودن ضعیف می
شود و نرخ خطای صفحه شروع به افزایش می کند .با این حال ،در نهایت ،با نزدیک شدن اندازه یک صفحه به اندازه کل فرآیند
نقطه Pدر نمودار ،نرخ خطای صفحه شروع به کاهش خواهد کرد .هنگامی که یک صفحه تمام فرآیند را در بر می گیرد ،هیچ
خطای صفحه وجود نخواهد داشت.
یک پیچیدگی دیگر این است که نرخ خطای صفحه نیز با تعداد فریم های اختصاص داده شده به یک فرآیند تعیین می شود.
شکل b8.10نشان می دهد که برای اندازه صفحه ثابت ،با افزایش تعداد صفحات نگهداری شده در حافظه اصلی ،نرخ خطا
کاهش می یابد .اندازه صفحه.
جدول 8.3اندازه صفحات مورد استفاده در برخی از ماشین ها را فهرست می کند .در نهایت ،موضوع طراحی اندازه صفحه به
اندازه حافظه اصلی فیزیکی و اندازه برنامه مربوط می شود .همزمان با بزرگتر شدن حافظه اصلی ،فضای آدرس مورد استفاده
برنامه ها نیز در حال افزایش است .این روند در رایانههای شخصی و ایستگاههای کاری آشکار است ،جایی که برنامهها به طور
فزایندهای پیچیده میشوند .عالوه بر این ،تکنیکهای برنامهنویسی معاصر که در برنامههای بزرگ استفاده میشوند ،تمایل به
کاهش محلی بودن مراجع در یک فرآیند دارند HUCK93.مثال ،تکنیک های شی گرا استفاده از بسیاری از برنامه های
کوچک و ماژول های داده را با ارجاعات پراکنده در تعداد نسبتاً زیادی از اشیاء در مدت زمان نسبتاً کوتاه تشویق می کنند.
-برنامه های چند رشته ای ممکن است منجر به تغییرات ناگهانی در جریان دستورالعمل ها و منابع حافظه پراکنده شوند.
435
سیستم عامل های داخلی و اصول طراحی436.........................................................................................................................
برای اندازه معینی از ،TLBبا افزایش اندازه حافظه فرآیندها و با کاهش محلی ،نسبت ضربه در دسترسیهای TLBکاهش
مییابد .تحت این شرایط TLB ،می تواند به یک گلوگاه عملکرد تبدیل شود به عنوان مثالCHEN92 ،را ببینید.
یکی از راه های بهبود عملکرد TLBاستفاده از TLBبزرگتر با ورودی های بیشتر است .با این حال ،اندازه TLBبا دیگر
جنبههای طراحی سختافزار ،مانند حافظه پنهان اصلی و تعداد دسترسیهای حافظه در هر چرخه دستورالعمل ،تعامل دارد
TALL92.نتیجه این است که اندازه TLBبعید است که به سرعت اندازه حافظه اصلی رشد کند .یک جایگزین این است که
از اندازه صفحات بزرگتر استفاده کنید تا هر ورودی جدول صفحه در TLBبه بلوک بزرگتری از حافظه اشاره کند .اما ما به
تازگی دیدیم که استفاده از اندازه صفحات بزرگ می تواند منجر به کاهش عملکرد شود .بر این اساس ،تعدادی از طراحان
436
سیستم عامل های داخلی و اصول طراحی437.........................................................................................................................
استفاده از چندین اندازه صفحه KHAL93 ،TALL92را بررسی کردهاند و چندین معماری ریزپردازنده از اندازههای چند
صفحه ،از جمله Pentium ،UltraSPARC ،Alpha ،MIPS R4000و IA-64پشتیبانی میکنند .اندازه های متعدد
صفحه انعطاف پذیری الزم برای استفاده موثر از TLBرا فراهم می کند .به عنوان مثال ،مناطق بزرگ به هم پیوسته در فضای
آدرس یک فرآیند ،مانند دستورالعمل های برنامه ،ممکن است با استفاده از تعداد کمی از صفحات بزرگ به جای تعداد زیادی
صفحات کوچک نگاشت شوند ،در حالی که پشته های رشته ممکن است با استفاده از صفحه کوچک نگاشت شوند .اندازه .با این
حال ،اکثر سیستمعاملهای تجاری صرفنظر از توانایی سختافزار زیربنایی ،هنوز تنها از یک اندازه صفحه پشتیبانی میکنند.
دلیل این امر این است که اندازه صفحه بر بسیاری از جنبه های سیستم عامل تأثیر می گذارد .بنابراین ،تغییر به اندازههای چند
صفحه یک کار پیچیده است برای بحث به GANA98مراجعه کنید.
تقسیم بندی
پیامدهای حافظه مجازی تقسیم بندی به برنامه نویس اجازه می دهد تا حافظه را متشکل از فضاهای آدرس یا بخش های متعدد
ببیند .بخش ها ممکن است دارای اندازه نابرابر و در واقع پویا باشند .ارجاعات حافظه از یک فرم آدرس شماره قطعه ،افست
تشکیل شده است.
این سازمان چندین مزیت برای برنامه نویس نسبت به فضای آدرس غیربخش دارد:
.1مدیریت ساختارهای داده در حال رشد را ساده می کند .اگر برنامه نویس از قبل نداند که یک ساختار داده خاص چقدر بزرگ
می شود ،حدس زدن ضروری است مگر اینکه اندازه بخش های پویا مجاز باشد .با حافظه مجازی تقسیمبندی شده ،ساختار داده
را میتوان بخش خاص خود را تخصیص داد و سیستمعامل در صورت لزوم بخش را گسترش یا کوچک میکند .اگر بخشی که
نیاز به گسترش دارد در حافظه اصلی باشد و فضای کافی وجود نداشته باشد ،سیستم عامل ممکن است بخش را در صورت وجود
به منطقه بزرگتری از حافظه اصلی منتقل کند یا آن را تعویض کند .در مورد دوم ،بخش بزرگ شده در فرصت بعدی دوباره
تعویض می شود.
.2اجازه می دهد تا برنامه ها به طور مستقل تغییر و اجرا شوند ،بدون اینکه نیازی به پیوند مجدد و بارگذاری مجدد کل
مجموعه برنامه ها باشد .باز هم ،این با استفاده از چندین بخش انجام می شود.
.3به اشتراک گذاری بین فرآیندها کمک می کند .یک برنامه نویس می تواند یک برنامه کاربردی یا یک جدول مفید از داده ها
را در قسمتی قرار دهد که می تواند توسط فرآیندهای دیگر ارجاع داده شود.
437
سیستم عامل های داخلی و اصول طراحی438.........................................................................................................................
.4خود را به محافظت می رساند .از آنجایی که یک بخش می تواند به گونه ای ساخته شود که شامل مجموعه ای از برنامه ها یا
داده ها به خوبی تعریف شده باشد ،برنامه نویس یا مدیر سیستم می توانند امتیازات دسترسی را به شیوه ای مناسب اختصاص
دهند.
ORGANIZATIONدر بحث تقسیم بندی ساده ،نشان دادیم که هر فرآیند جدول بخش مخصوص به خود را دارد و زمانی
که همه بخش های آن در حافظه اصلی بارگذاری می شوند ،جدول بخش برای یک فرآیند ایجاد شده و در حافظه اصلی
بارگذاری می شود .هر ورودی جدول بخش شامل آدرس شروع بخش مربوطه در حافظه اصلی و همچنین طول قطعه است.
هنگامی که ما یک طرح حافظه مجازی را بر اساس تقسیم بندی در نظر می گیریم ،به همان دستگاه ،یک جدول بخش ،نیاز
است .باز هم ،معمول است که یک جدول بخش منحصر به فرد را با هر فرآیند مرتبط کنیم .با این حال ،در این مورد ،ورودی
های جدول بخش پیچیده تر می شوند شکل b. 8.1از آنجایی که ممکن است فقط برخی از بخشهای یک فرآیند در حافظه
اصلی باشند ،در هر ورودی جدول بخش به یک بیت نیاز است تا نشان دهد آیا قطعه مربوطه در حافظه اصلی وجود دارد یا خیر.
اگر بیت نشان می دهد که بخش در حافظه است ،ورودی همچنین شامل آدرس شروع و طول آن بخش است.
یک بیت کنترل دیگر در ورودی جدول تقسیم بندی ،یک بیت اصالح است که نشان می دهد آیا محتوای بخش مربوطه از
آخرین بارگذاری قطعه در حافظه اصلی تغییر کرده است یا خیر .اگر تغییری رخ نداده باشد ،الزم نیست که قطعه را در زمانی که
زمان تعویض قطعه در فریمی که در حال حاضر اشغال کرده است ،بنویسید .بیت های کنترل دیگری نیز ممکن است وجود
داشته باشد .به عنوان مثال ،اگر حفاظت یا اشتراک گذاری در سطح بخش مدیریت شود ،بیت هایی برای این منظور مورد نیاز
خواهند بود.
مکانیسم اصلی برای خواندن یک کلمه از حافظه شامل ترجمه یک آدرس مجازی یا منطقی ،متشکل از شماره قطعه و افست ،به
یک آدرس فیزیکی با استفاده از جدول بخش است .از آنجایی که جدول بخش دارای طول متغیر است ،بسته به اندازه فرآیند،
نمیتوان انتظار داشت که آن را در ثباتها نگهداری کنیم .در عوض ،برای دسترسی باید در حافظه اصلی باشد .شکل 8.11
اجرای سخت افزاری این طرح را پیشنهاد می کند به شباهت شکل 8.2توجه کنید .هنگامی که یک فرآیند خاص در حال اجرا
است ،یک ثبات آدرس شروع جدول بخش را برای آن فرآیند نگه می دارد .شماره بخش یک آدرس مجازی برای نمایه سازی آن
جدول و جستجوی آدرس حافظه اصلی مربوطه برای شروع بخش استفاده می شود .این به قسمت افست آدرس مجازی اضافه
می شود تا آدرس واقعی مورد نظر را ایجاد کند.
438
سیستم عامل های داخلی و اصول طراحی439.........................................................................................................................
هم صفحه بندی و هم تقسیم بندی نقاط قوت خود را دارند .صفحه بندی که برای برنامه نویس شفاف است ،تکه تکه شدن
خارجی را حذف می کند و در نتیجه استفاده کارآمد از حافظه اصلی را فراهم می کند .بعالوه ،از آنجایی که قطعاتی که به داخل
و خارج از حافظه اصلی منتقل میشوند ،اندازه ثابت و مساوی دارند ،میتوان الگوریتمهای مدیریت حافظه پیچیدهای را توسعه
داد که از رفتار برنامهها بهرهبرداری میکنند ،همانطور که خواهیم دید .بخش بندی ،که برای برنامه نویس قابل مشاهده است،
دارای نقاط قوتی است که قبال ذکر شد ،از جمله توانایی مدیریت ساختارهای داده در حال رشد ،مدوالر بودن ،و پشتیبانی از
اشتراک گذاری و حفاظت .برای ترکیب مزایای هر دو ،برخی از سیستم ها به سخت افزار پردازنده و نرم افزار سیستم عامل برای
ارائه هر دو مجهز شده اند.
در یک سیستم صفحه بندی/بخش بندی ترکیبی ،فضای آدرس کاربر به صالحدید برنامه نویس به تعدادی بخش تقسیم می
شود .هر بخش به نوبه خود به تعدادی صفحه با اندازه ثابت تقسیم می شود که طول آنها برابر با یک فریم حافظه اصلی است .اگر
طول یک بخش کمتر از طول یک صفحه باشد ،آن بخش فقط یک صفحه را اشغال می کند .از دیدگاه برنامه نویس ،یک آدرس
منطقی همچنان از یک شماره بخش و یک قطعه افست تشکیل شده است .از نقطه نظر سیستم ،افست بخش به عنوان شماره
صفحه و افست صفحه برای یک صفحه در بخش مشخص شده مشاهده می شود.
شکل 8.12ساختاری را برای پشتیبانی از صفحه بندی/بخش بندی ترکیبی پیشنهاد می کند به شباهت با شکل 8.4توجه
کنید .با هر فرآیند یک جدول بخش و تعدادی جداول صفحه ،یکی در هر بخش فرآیند مرتبط است .هنگامی که یک فرآیند
خاص در حال اجرا است ،یک ثبات آدرس شروع جدول بخش را برای آن فرآیند نگه می دارد .پردازنده که با یک آدرس مجازی
ارائه میشود ،از قسمت شماره بخش برای فهرست کردن جدول بخش فرآیند برای یافتن جدول صفحه برای آن بخش استفاده
439
سیستم عامل های داخلی و اصول طراحی440.........................................................................................................................
میکند .سپس از قسمت شماره صفحه آدرس مجازی برای نمایه سازی جدول صفحه و جستجوی شماره فریم مربوطه استفاده
می شود .این با قسمت افست آدرس مجازی ترکیب می شود تا آدرس واقعی مورد نظر را ایجاد کند.
شکل c8.1فرمت های ورودی جدول بخش و ورود جدول صفحه را نشان می دهد .مانند قبل ،ورودی جدول بخش شامل طول
قطعه است .همچنین حاوی یک زمینه پایه است که اکنون به جدول صفحه اشاره می کند .بیت های فعلی و اصالح شده مورد
نیاز نیستند زیرا این مسائل در سطح صفحه انجام می شود .سایر بیت های کنترل ممکن است برای اهداف اشتراک گذاری و
حفاظت استفاده شوند .ورودی جدول صفحه اساساً همان چیزی است که در یک سیستم صفحه بندی خالص استفاده می شود.
اگر صفحه در حافظه اصلی وجود داشته باشد ،هر شماره صفحه در یک شماره فریم مربوطه نگاشت می شود .بیت اصالح شده
نشان میدهد که آیا این صفحه باید هنگام تخصیص فریم به صفحه دیگری بازنویسی شود یا خیر .ممکن است بیت های کنترل
دیگری نیز وجود داشته باشد که با حفاظت یا سایر جنبه های مدیریت حافظه سروکار دارند.
تقسیم بندی به اجرای سیاست های حفاظتی و اشتراک گذاری کمک می کند .از آنجا که هر ورودی جدول بخش شامل یک
طول و همچنین یک آدرس پایه است ،یک برنامه نمی تواند به طور ناخواسته به یک مکان حافظه اصلی فراتر از محدودیت های
یک بخش دسترسی پیدا کند .برای دستیابی به اشتراک گذاری ،این امکان وجود دارد که یک بخش در جداول بخش بیش از
یک فرآیند ارجاع داده شود .البته مکانیسمهای مشابهی در سیستم صفحهبندی نیز وجود دارد.
با این حال ،در این مورد ،ساختار صفحه برنامهها و دادهها برای برنامهنویس قابل مشاهده نیست ،و این باعث میشود که
مشخصات حفاظت و نیازهای اشتراکگذاری ناخوشایندتر شود .شکل 8.13انواع روابط حفاظتی را نشان می دهد که می توانند
در چنین سیستمی اعمال شوند.
440
سیستم عامل های داخلی و اصول طراحی441.........................................................................................................................
مکانیسم های پیچیده تری نیز می توانند ارائه شوند .یک طرح متداول استفاده از ساختار محافظ حلقه ای است ،از نوعی که در
فصل 3به آن اشاره کردیم شکل .3.18در این طرح ،حلقههای با شماره پایینتر یا داخلی از امتیاز بیشتری نسبت به حلقههای
با شمارههای باالتر یا بیرونی برخوردار هستند .به طور معمول ،حلقه 0برای توابع هسته سیستم عامل با برنامه های کاربردی در
سطح باالتر رزرو می شود .برخی از خدمات یا خدمات سیستم عامل ممکن است یک حلقه میانی را اشغال کنند .اصول اولیه
سیستم حلقه به شرح زیر است:
.1یک برنامه ممکن است فقط به داده هایی دسترسی داشته باشد که در همان حلقه یا یک حلقه با امتیاز کمتر قرار دارند.
.2یک برنامه ممکن است خدماتی را که در همان حلقه یا یک حلقه ممتازتر هستند فراخوانی کند.
طراحی بخش مدیریت حافظه یک سیستم عامل به سه حوزه اساسی انتخاب بستگی دارد:
-الگوریتم های مورد استفاده برای جنبه های مختلف مدیریت حافظه
441
سیستم عامل های داخلی و اصول طراحی442.........................................................................................................................
انتخاب های انجام شده در دو حوزه اول به پلتفرم سخت افزاری موجود بستگی دارد .بنابراین ،پیادهسازیهای قبلی یونیکس
حافظه مجازی را فراهم نمیکردند ،زیرا پردازندههایی که سیستم روی آنها اجرا میشد ،صفحهبندی یا بخشبندی را پشتیبانی
نمیکردند .هیچ یک از این تکنیک ها بدون پشتیبانی سخت افزاری برای ترجمه آدرس و سایر عملکردهای اساسی عملی نیست.
دو نظر اضافی در مورد دو مورد اول در لیست قبلی :اول ،به استثنای سیستمعاملهای برخی از رایانههای شخصی قدیمیتر،
مانند MS-DOSو سیستمهای تخصصی ،همه سیستمعاملهای مهم حافظه مجازی ارائه میدهند .دوم ،سیستم های تقسیم
بندی خالص به طور فزاینده ای نادر می شوند .هنگامی که بخش بندی با صفحه بندی ترکیب می شود ،بیشتر مسائل مدیریت
حافظه که طراح سیستم عامل با آن مواجه است در حوزه صفحه بندی است.
انتخاب های مربوط به مورد سوم حوزه نرم افزار سیستم عامل و موضوع این قسمت می باشد .جدول 8.4عناصر کلیدی طراحی
را که بررسی می کنیم فهرست می کند .در هر مورد ،مسئله کلیدی یکی از عملکردها است :ما می خواهیم سرعت رخ دادن
خطاهای صفحه را به حداقل برسانیم ،زیرا خطاهای صفحه باعث سربار قابل توجه نرم افزار می شود .حداقل ،سربار شامل تصمیم
گیری برای جایگزینی کدام صفحه یا صفحات مقیم و I/Oصفحات مبادله می شود .همچنین ،سیستم عامل باید فرآیند دیگری
را برنامه ریزی کند تا در طول صفحه ورودی/خروجی اجرا شود که باعث تغییر فرآیند می شود .بر این اساس ،ما می خواهیم
موارد را طوری ترتیب دهیم که در طول مدت اجرای یک فرآیند ،احتمال ارجاع یک کلمه در صفحه گم شده به حداقل برسد.
در تمام زمینه های ذکر شده در جدول ،8.4هیچ خط مشی قطعی وجود ندارد که بهترین کار را داشته باشد.
همانطور که خواهیم دید ،وظیفه مدیریت حافظه در یک محیط صفحه بندی بسیار پیچیده است .عالوه بر این ،عملکرد هر
مجموعه خاصی از سیاست ها به اندازه حافظه اصلی ،سرعت نسبی حافظه اصلی و ثانویه ،اندازه و تعداد فرآیندهایی که برای
منابع رقابت می کنند ،و رفتار اجرای برنامه های فردی بستگی دارد .این ویژگی اخیر به ماهیت برنامه ،زبان برنامه نویسی و
اجرار مورد استفاده ،سبک برنامه نویسی که آن را نوشته ،و برای یک برنامه تعاملی ،رفتار پویا کاربر بستگی دارد .بنابراین،
442
سیستم عامل های داخلی و اصول طراحی443.........................................................................................................................
خواننده نباید در اینجا یا هیچ کجا انتظار پاسخ نهایی را داشته باشد .برای سیستمهای کوچکتر ،طراح سیستمعامل باید تالش
کند مجموعهای از خطمشیها را انتخاب کند که در طیف وسیعی از شرایط «خوب» به نظر میرسند ،بر اساس وضعیت فعلی
دانش .برای سیستمهای بزرگتر ،بهویژه مینفریمها ،سیستم عامل باید مجهز به ابزارهای نظارت و کنترل باشد که به مدیر
سایت اجازه میدهد تا سیستم عامل را تنظیم کند تا نتایج «خوب» بر اساس شرایط سایت به دست آید.
سیاست واکشی
خط مشی واکشی تعیین می کند که چه زمانی یک صفحه باید به حافظه اصلی آورده شود .دو گزینه رایج عبارتند از
صفحهبندی تقاضا و پیشپیجینگ .با صفحهبندی تقاضا ،یک صفحه تنها زمانی به حافظه اصلی وارد میشود که به مکانی در آن
صفحه ارجاع داده شود .اگر سایر عناصر خط مشی مدیریت حافظه خوب باشند ،موارد زیر باید اتفاق بیفتد .هنگامی که یک
فرآیند برای اولین بار شروع می شود ،انبوهی از خطاهای صفحه وجود خواهد داشت .همانطور که صفحات بیشتر و بیشتر وارد
می شوند ،اصل محلی بودن نشان می دهد که بیشتر ارجاعات بعدی به صفحاتی خواهد بود که اخیراً وارد شده اند .بنابراین ،پس
از مدتی ،مسائل باید حل شود و تعداد خطاهای صفحه باید به مقدار بسیار زیادی کاهش یابد .سطح پایین
با پیشپیجنگاری ،صفحاتی غیر از صفحه درخواست شده توسط خطای صفحه وارد میشوند .پیشپینگ از ویژگیهای بیشتر
دستگاههای حافظه ثانویه ،مانند دیسکها ،که زمانهای جستجو و تأخیر چرخشی دارند ،بهرهبرداری میکند .اگر صفحات یک
فرآیند به طور پیوسته در حافظه ثانویه ذخیره شوند ،در آن صورت به جای آوردن آنها در یک زمان در یک دوره طوالنی،
کارآمدتر است که تعدادی از صفحات به هم پیوسته را در یک زمان وارد کنید .البته در صورتی که به اکثر صفحات اضافی که
وارد می شوند ارجاع داده نشود ،این سیاست بی اثر است.
خطمشی پیشپیجنگاری میتواند زمانی که یک فرآیند برای اولین بار راهاندازی میشود به کار گرفته شود ،در این صورت
برنامهنویس باید به نحوی صفحات مورد نظر را تعیین کند ،یا هر بار که خطای صفحه رخ میدهد .این دوره دوم ترجیح داده می
شود زیرا برای برنامه نویس نامرئی است .با این حال ،ابزار پیشپیجینگ ایجاد نشده است MAEK87.
پیش آماده سازی نباید با تعویض اشتباه گرفته شود .هنگامی که یک فرآیند از حافظه جابجا می شود و در حالت تعلیق قرار می
گیرد ،تمام صفحات ساکن آن خارج می شوند .هنگامی که فرآیند از سر گرفته می شود ،تمام صفحاتی که قبالً در حافظه اصلی
بودند به حافظه اصلی بازگردانده می شوند.
خط مشی جایگذاری تعیین می کند که یک قطعه فرآیند در کجای حافظه حقیقی قرار گیرد .در یک سیستم تقسیم بندی
خالص ،خط مشی قرار دادن یک موضوع طراحی مهم است .سیاست هایی مانند بهترین تناسب ،اولین تناسب و غیره که در فصل
443
سیستم عامل های داخلی و اصول طراحی444.........................................................................................................................
7مورد بحث قرار گرفت ،جایگزین های احتمالی هستند .با این حال ،برای سیستمی که از صفحهبندی خالص یا صفحهبندی
همراه با تقسیمبندی استفاده میکند ،قرار دادن معموالً بیربط است ،زیرا سختافزار ترجمه آدرس و سختافزار دسترسی به
حافظه اصلی میتوانند وظایف خود را برای هر ترکیب صفحه-فریم با کارایی یکسان انجام دهند.
یک زمینه وجود دارد که قرار دادن در آن به یک نگرانی تبدیل می شود ،و این موضوع تحقیق و توسعه است .در چند پردازنده
به اصطالح دسترسی غیریکنواخت به حافظه ،NUMAحافظه مشترک و توزیع شده دستگاه می تواند توسط هر پردازنده روی
دستگاه ارجاع داده شود ،اما زمان دسترسی به یک مکان فیزیکی خاص با فاصله بین پردازنده و حافظه متفاوت است .مدول.
بنابراین ،عملکرد به شدت به میزان قرار گرفتن داده ها در نزدیکی پردازنده هایی که از آنها استفاده می کنند بستگی دارد
COX89. ،BOLO89 ،LARO92برای سیستمهای ،NUMAیک استراتژی قرار دادن خودکار برای تخصیص صفحات به
ماژول حافظه که بهترین عملکرد را ارائه میکند ،مطلوب است.
سیاست جایگزینی
در اکثر متون سیستم عامل ،درمان مدیریت حافظه شامل بخشی با عنوان "سیاست جایگزینی" است که به انتخاب صفحه ای در
حافظه اصلی برای جایگزینی در هنگام وارد کردن صفحه جدید می پردازد .توضیح این موضوع گاهی اوقات دشوار است .زیرا
چندین مفهوم مرتبط با هم درگیر هستند:
-باید چند فریم صفحه به هر فرآیند فعال اختصاص داده شود؟ آیا مجموعه صفحاتی که باید برای جایگزینی در نظر گرفته
شوند باید به صفحاتی که باعث خطای صفحه شده اند محدود شود یا همه فریم های صفحه در حافظه اصلی را در برگیرد.
-در میان مجموعه صفحات در نظر گرفته شده ،کدام صفحه خاص باید برای جایگزینی انتخاب شود
ما به دو مفهوم اول به عنوان مدیریت مجموعه مقیم اشاره خواهیم کرد که در قسمت بعدی به آن پرداخته می شود و اصطالح
سیاست جایگزینی را برای مفهوم سوم که در این بخش مورد بحث قرار می گیرد ،رزرو می کنیم.
حوزه سیاست جایگزینی احتماالً بیشترین مطالعه در بین هر حوزه مدیریت حافظه است .هنگامی که تمام فریم های حافظه
اصلی اشغال شده است و الزم است صفحه جدیدی وارد شود تا خطای صفحه برطرف شود ،سیاست جایگزینی تعیین می کند
که کدام صفحه در حافظه فعلی جایگزین شود .هدف همه سیاستها این است که صفحهای که حذف میشود باید صفحهای
باشد که در آینده نزدیک کمتر به آن ارجاع داده شود .به دلیل اصل محلی بودن ،اغلب همبستگی باالیی بین تاریخچه ارجاع
اخیر و الگوهای ارجاع در آینده نزدیک وجود دارد .بنابراین ،بیشتر سیاست ها سعی می کنند رفتار آینده را بر اساس رفتار
گذشته پیش بینی کنند .یکی از معاوضه هایی که باید در نظر گرفته شود این است که هرچه سیاست جایگزینی پیچیده تر و
پیچیده تر باشد ،هزینه سخت افزاری و نرم افزاری برای اجرای آن بیشتر خواهد بود.
444
سیستم عامل های داخلی و اصول طراحی445.........................................................................................................................
قفل فریم قبل از بررسی الگوریتمهای مختلف باید یک محدودیت در سیاست جایگزینی ذکر شود :ممکن است برخی از
فریمهای حافظه اصلی قفل شده باشند .هنگامی که یک فریم قفل است ،ممکن است صفحه ای که در حال حاضر در آن قاب
ذخیره شده است جایگزین نشود .بخش اعظم هسته سیستم عامل و همچنین ساختارهای کنترل کلیدی در قاب های قفل شده
نگهداری می شوند .عالوه بر این ،بافرهای ورودی/خروجی و سایر مناطق حساس زمانی ممکن است در فریم های حافظه اصلی
قفل شوند .قفل کردن با مرتبط کردن یک بیت قفل با هر فریم به دست می آید .این بیت ممکن است در یک جدول فریم و
همچنین در جدول صفحه فعلی گنجانده شود.
الگوریتمهای اساسی صرفنظر از استراتژی مدیریت مجموعه مقیم که در بخش بعدی مورد بحث قرار میگیرد ،الگوریتمهای
اساسی خاصی وجود دارند که برای انتخاب صفحه مورد استفاده قرار میگیرند .الگوریتم های جایگزینی که در ادبیات مورد بحث
قرار گرفته اند عبارتند از
-بهینه
-ساعت
خط مشی بهینه صفحه ای را برای جایگزینی انتخاب می کند که زمان رسیدن به مرجع بعدی طوالنی ترین است .می توان
نشان داد که این سیاست منجر به کمترین تعداد خطاهای صفحه می شود BELA66.بدیهی است که اجرای این سیاست
غیرممکن است ،زیرا به سیستم عامل نیاز دارد که اطالعات کاملی از رویدادهای آینده داشته باشد .با این حال ،به عنوان یک
استاندارد برای قضاوت در مورد الگوریتم های دنیای واقعی عمل می کند.
445
سیستم عامل های داخلی و اصول طراحی446.........................................................................................................................
شکل 8.14نمونه ای از سیاست بهینه را نشان می دهد .این مثال یک تخصیص فریم ثابت اندازه مجموعه ساکن ثابت را برای
این فرآیند سه فریم فرض می کند .اجرای فرآیند نیاز به ارجاع به پنج صفحه مجزا دارد .جریان آدرس صفحه که با اجرای برنامه
تشکیل می شود
به این معنی که صفحه اول ارجاع شده ،2صفحه دوم ارجاع داده شده 3است و غیره .سیاست بهینه پس از پر شدن تخصیص
فریم ،سه خطای صفحه ایجاد می کند.
خط مشی کمترین استفاده اخیر LRUجایگزین صفحه ای در حافظه می شود که برای طوالنی ترین زمان به آن ارجاع داده
نشده است .طبق اصل محلی بودن ،این صفحه باید کمترین احتمال ارجاع را در آینده نزدیک داشته باشد .و در واقع ،سیاست
LRUتقریباً به خوبی سیاست بهینه را انجام می دهد .مشکل این رویکرد ،مشکل در اجراست .یک روش این است که هر صفحه
را با زمان آخرین مرجع آن برچسب گذاری کنید .این باید در هر مرجع حافظه انجام شود ،هم دستورالعمل و هم داده .حتی اگر
سخت افزار از چنین طرحی پشتیبانی کند ،سربار فوق العاده خواهد بود .از طرف دیگر ،میتوان مجموعهای از ارجاعات صفحه را
حفظ کرد ،که دوباره یک چشمانداز گران قیمت است.
شکل 8.14نمونه ای از رفتار LRUرا نشان می دهد که از همان جریان آدرس صفحه برای مثال سیاست بهینه استفاده می
کند .در این مثال ،چهار خطای صفحه وجود دارد.
خط مشی first-in-first-out FIFOبا فریم های صفحه تخصیص داده شده به یک فرآیند به عنوان یک بافر دایره ای
برخورد می کند و صفحات به سبک گردی حذف می شوند .تنها چیزی که مورد نیاز است یک اشاره گر است که در فریم های
446
سیستم عامل های داخلی و اصول طراحی447.........................................................................................................................
صفحه فرآیند بچرخد .بنابراین این یکی از ساده ترین سیاست های جایگزینی صفحه برای پیاده سازی است .منطق پشت این
انتخاب ،به غیر از سادگی آن ،این است که صفحهای را جایگزین میکنید که طوالنیترین مدت در حافظه بوده است :صفحهای
که مدتها پیش در حافظه واکشی شده بود ممکن است اکنون از کار افتاده باشد .این استدالل اغلب اشتباه خواهد بود ،زیرا
اغلب مناطقی از برنامه یا داده وجود دارد که در طول عمر یک برنامه به شدت مورد استفاده قرار می گیرند .این صفحات بارها و
بارها توسط الگوریتم FIFOوارد و خارج می شوند .در ادامه مثال ما در شکل ،8.14خط مشی FIFOمنجر به خطای شش
صفحه می شود .توجه داشته باشید که LRUتشخیص می دهد که صفحات 2و 5بیشتر از سایر صفحات ارجاع داده می شوند،
در حالی که FIFOاینطور نیست .اگرچه سیاست LRUتقریباً به همان اندازه یک سیاست بهینه عمل می کند ،اما اجرای آن
دشوار است و هزینه های سربار قابل توجهی را تحمیل می کند .از سوی دیگر ،اجرای سیاست FIFOبسیار ساده است اما
عملکرد نسبتاً ضعیفی دارد.
در طول سالها ،طراحان سیستمعامل تعدادی الگوریتم دیگر را امتحان کردهاند تا عملکرد LRUرا تقریبی کنند و در عین حال
هزینه کمی را تحمیل کنند .بسیاری از این الگوریتمها انواعی از طرحی هستند که به آن سیاست ساعت گفته میشود.
ساده ترین شکل خط مشی ساعت مستلزم ارتباط یک بیت اضافی با هر فریم است که به آن بیت استفاده می گویند .هنگامی که
یک صفحه برای اولین بار در یک فریم در حافظه بارگذاری می شود ،بیت استفاده برای آن فریم روی 1تنظیم می شود .هر
زمان که صفحه متعاقباً ارجاع داده شد پس از مرجعی که خطای صفحه را ایجاد کرد ،بیت استفاده از آن بر روی 1تنظیم می
شود .برای الگوریتم جایگزینی صفحه ،مجموعه فریم هایی که کاندید جایگزینی هستند این فرآیند :محدوده محلی ،تمام حافظه
اصلی :دامنه جهانی 5به عنوان یک بافر دایره ای در نظر گرفته می شود که یک اشاره گر با آن مرتبط است .هنگامی که یک
صفحه جایگزین می شود ،نشانگر تنظیم می شود تا فریم بعدی را در بافر بعد از فریمی که به تازگی به روز شده است نشان
دهد .هنگامی که زمان تعویض صفحه فرا می رسد ،سیستم عامل بافر را اسکن می کند تا فریمی را پیدا کند که بیت استفاده آن
روی 0تنظیم شده است .هر بار که با فریمی با بیت استفاده 1مواجه می شود ،آن بیت را به 0بازنشانی می کند و ادامه می
دهد .اگر هر یک از فریمهای بافر در ابتدای این فرآیند بیت استفاده 0داشته باشد ،اولین فریمی که با آن مواجه میشوید برای
جایگزینی انتخاب میشود .اگر همه فریمها بیت استفاده 1داشته باشند ،نشانگر یک چرخه کامل در بافر ایجاد میکند و تمام
بیتهای استفاده را روی 0تنظیم میکند و در موقعیت اصلی خود متوقف میشود و صفحه را در آن قاب قرار میدهد .می بینیم
که این خط مشی مشابه FIFOاست ،با این تفاوت که در خط مشی ساعت ،هر فریمی با بیت استفاده از 1توسط الگوریتم
منتقل می شود .از این خط مشی به عنوان یک خط مشی ساعت یاد می شود زیرا می توانیم فریم های صفحه را به صورت دایره
ای تجسم کنیم .تعدادی از سیستمعاملها برخی از تغییرات این خط مشی ساعت ساده را به کار گرفتهاند مانند Multics
CORB68.
447
سیستم عامل های داخلی و اصول طراحی448.........................................................................................................................
شکل 8.15نمونه ای از مکانیسم سیاست ساعت ساده را ارائه می دهد .یک بافر دایره ای از nفریم حافظه اصلی برای جایگزینی
صفحه موجود است .درست قبل از جایگزینی صفحه ای از بافر با صفحه ورودی ،727نشانگر فریم بعدی به فریم 2اشاره می
کند که حاوی صفحه 45است .سیاست ساعت اکنون اجرا می شود .چون بیت استفاده برای صفحه 45در فریم 2برابر با 1
است ،این صفحه جایگزین نمی شود.
در عوض ،بیت استفاده روی 0تنظیم می شود و نشانگر پیشرفت می کند .به همین ترتیب ،صفحه 191در فریم 3جایگزین
نشده است .بیت استفاده از آن روی 0تنظیم می شود و نشانگر پیشرفت می کند .در فریم بعدی ،فریم ،4بیت استفاده روی 0
تنظیم می شود .بنابراین ،صفحه 556با صفحه 727جایگزین می شود .بیت استفاده برای این فریم روی 1تنظیم می شود و
نشانگر به فریم 5می رود و مراحل جایگزینی صفحه را تکمیل می کند.
رفتار خط مشی ساعت در شکل 8.14نشان داده شده است .وجود یک ستاره نشان می دهد که بیت استفاده مربوطه برابر با 1
است و فلش موقعیت فعلی اشاره گر را نشان می دهد .توجه داشته باشید که خط مشی ساعت در محافظت از فریم های 2و 5
در برابر تعویض ماهر است.
448
سیستم عامل های داخلی و اصول طراحی449.........................................................................................................................
شکل 8.16نتایج یک آزمایش گزارش شده در BAER80را نشان می دهد که چهار الگوریتم مورد بحث ما را با هم مقایسه
می کند .فرض بر این است که تعداد فریم های صفحه اختصاص داده شده به یک فرآیند ثابت است .نتایج بر اساس اجرای 0.25
× 106مرجع در یک برنامه ، FORTRANبا استفاده از اندازه صفحه 256کلمه است Baer .آزمایش را با تخصیص فریم های
12 ،10 ،8 ،6و 14فریم اجرا کرد .تفاوت بین چهار سیاست در تخصیص های کوچک بسیار چشمگیر است ،به طوری که
FIFOبیش از ضریب 2بدتر از حد مطلوب است .هر چهار منحنی شکل مشابهی با رفتار ایده آل نشان داده شده در شکل
b8.10دارند .برای اجرای کارآمد ،میخواهیم در سمت راست زانوی منحنی با نرخ خطای صفحه کوچک باشیم و در عین حال
449
سیستم عامل های داخلی و اصول طراحی450.........................................................................................................................
یک تخصیص فریم کوچک در سمت چپ زانوی منحنی داشته باشیم .این دو محدودیت نشان می دهد که یک حالت عملکرد
مطلوب در زانوی منحنی خواهد بود.
نتایج تقریباً یکسانی در FINK88گزارش شده است که باز هم حداکثر گسترش حدود ضریب 2را نشان میدهد .رویکرد
فینکل شبیهسازی اثرات سیاستهای مختلف بر روی یک رشته مرجع صفحه ترکیبی از 10000مرجع انتخاب شده از یک
فضای مجازی بود .از 100صفحه برای تقریب اثرات اصل محلّی ،یک توزیع نمایی برای احتمال ارجاع به یک صفحه خاص اعمال
شد .فینکل مشاهده میکند که ممکن است برخی به این نتیجه برسند که وقتی فقط ضریب 2در خطر باشد ،الگوریتمهای
پیچیده جایگزینی صفحه مفید نیست.
اما او خاطرنشان می کند که این تفاوت یا بر نیازهای حافظه اصلی برای جلوگیری از کاهش عملکرد سیستم عامل یا عملکرد
سیستم عامل برای جلوگیری از بزرگ شدن حافظه اصلی تأثیر قابل توجهی خواهد داشت.
الگوریتم ساعت همچنین با این الگوریتمهای دیگر مقایسه شده است که از یک تخصیص متغیر و دامنه جایگزینی جهانی یا
محلی استفاده میشود به بحث زیر در مورد سیاست جایگزینی مراجعه کنید CARR81.الگوریتم ساعت تقریباً عملکرد
LRUرا تقریب میکند.
الگوریتم ساعت را میتوان با افزایش تعداد بیتهایی که استفاده میکند قویتر کرد 6.در همه پردازندههایی که صفحهبندی را
پشتیبانی میکنند ،یک بیت اصالح با هر صفحه در حافظه اصلی و بنابراین با هر فریم از حافظه اصلی مرتبط است .این بیت
مورد نیاز است تا زمانی که صفحه ای اصالح می شود ،تا زمانی که دوباره در حافظه ثانویه نوشته نشده است ،جایگزین نشود .ما
می توانیم از این بیت در الگوریتم ساعت به روش زیر بهره برداری کنیم .اگر بیت های استفاده و اصالح را در نظر بگیریم ،هر
فریم در یکی از چهار دسته قرار می گیرد:
-اخیراً دسترسی پیدا کرده است ،تغییر نکرده است u = 1؛ m = 0 rاخیراً دسترسی نداشته است ،تغییر یافته است u = 0؛
m = 1 -اخیراً دسترسی یافته است ،تغییر یافته است u = 1؛ m = 1
با این طبقه بندی ،الگوریتم ساعت به صورت زیر عمل می کند:
.1با شروع از موقعیت فعلی نشانگر ،بافر فریم را اسکن کنید .در طول این اسکن ،هیچ تغییری در بیت استفاده ایجاد نکنید.
اولین فریمی که با u = 0؛ m = 0مواجه شد برای جایگزینی انتخاب می شود.
450
سیستم عامل های داخلی و اصول طراحی451.........................................................................................................................
.2اگر مرحله 1ناموفق بود ،دوباره اسکن کنید و به دنبال قاب با u = 0؛ m = 1بگردید .اولین چنین فریمی که با آن مواجه
می شود برای جایگزینی انتخاب می شود .در طول این اسکن ،بیت استفاده را روی هر فریمی که دور زده می شود ،روی 0
تنظیم کنید.
.3اگر مرحله 2ناموفق بود ،نشانگر باید به موقعیت اولیه خود بازگردد و تمام فریم های مجموعه دارای بیت استفاده 0خواهند
بود .مرحله 1و در صورت لزوم مرحله 2را تکرار کنید .این بار یک فریم خواهد بود .برای جایگزین پیدا شد
به طور خالصه ،الگوریتم جایگزینی صفحه در تمام صفحات در بافر به دنبال صفحهای میگردد که از زمان ورود تغییر نکرده و
اخیراً به آن دسترسی پیدا نکرده است .چنین صفحهای شرط خوبی برای جایگزینی است و این مزیت را دارد که چون اصالح
نشده است ،نیازی به بازنویسی در حافظه ثانویه نیست .اگر هیچ صفحه کاندیدایی در اولین جابجایی یافت نشد ،الگوریتم دوباره
در بافر چرخه میزند و به دنبال صفحه تغییر یافتهای میگردد که اخیراً به آن دسترسی پیدا نکرده است .حتی اگر چنین
صفحهای باید نوشته شود تا جایگزین شود ،به دلیل اصل محلی بودن ،ممکن است به این زودیها دیگر مورد نیاز نباشد .اگر این
گذر دوم ناموفق باشد ،همه فریمهای بافر بهعنوان عدم دسترسی اخیر عالمتگذاری میشوند و جابجایی سوم انجام میشود.
این استراتژی در نسخه قبلی از طرح حافظه مجازی مکینتاش GOLD89استفاده شد .مزیت این الگوریتم نسبت به الگوریتم
ساعت ساده این است که صفحاتی که بدون تغییر هستند برای جایگزینی اولویت دارند .از آنجا که صفحه ای که اصالح شده
است باید قبل از جایگزینی نوشته شود ،بالفاصله در زمان صرفه جویی می شود.
بافر کردن صفحه اگرچه LRUو سیاست های ساعت برتر از FIFOهستند ،اما هر دو شامل پیچیدگی و سربار هستند که با
FIFOمتضرر نمی شوند .عالوه بر این ،این موضوع مرتبط است که هزینه جایگزینی صفحه ای که اصالح شده است بیشتر از
صفحه ای است که اصالح نشده است ،زیرا صفحه اول باید دوباره در حافظه ثانویه نوشته شود.
یک استراتژی جالب که می تواند عملکرد صفحه بندی را بهبود بخشد و امکان استفاده از سیاست جایگزینی صفحه ساده تر را
فراهم کند ،بافر صفحه است .رویکرد VAX VMSنماینده است .الگوریتم جایگزینی صفحه FIFOساده است .برای بهبود
عملکرد ،یک صفحه جایگزین شده گم نمی شود ،بلکه به یکی از دو لیست اختصاص داده می شود :لیست صفحه رایگان اگر
صفحه تغییر نکرده است ،یا لیست صفحه اصالح شده اگر تغییر کرده است .توجه داشته باشید که صفحه به طور فیزیکی در
حافظه اصلی جابجا نمی شود .در عوض ،ورودی جدول صفحه برای این صفحه حذف شده و در لیست صفحه آزاد یا اصالح شده
قرار می گیرد.
لیست صفحات رایگان فهرستی از فریم های صفحه است که برای خواندن در صفحات موجود است VMS .سعی می کند تعداد
کمی از فریم ها را همیشه آزاد نگه دارد .هنگامی که صفحه ای قرار است در آن خوانده شود ،از کادر صفحه در سر لیست
استفاده می شود و صفحه ای را که در آنجا بود از بین می برد .هنگامی که یک صفحه اصالح نشده قرار است جایگزین شود ،در
451
سیستم عامل های داخلی و اصول طراحی452.........................................................................................................................
حافظه باقی می ماند و فریم صفحه آن به انتهای لیست صفحه آزاد اضافه می شود .به همین ترتیب ،هنگامی که یک صفحه
تغییر یافته باید نوشته شود و جایگزین شود ،فریم صفحه آن به انتهای لیست صفحه اصالح شده اضافه می شود.
جنبه مهم این مانورها این است که صفحه ای که باید جایگزین شود در حافظه باقی می ماند .بنابراین اگر فرآیند به آن صفحه
ارجاع دهد ،با هزینه کمی به مجموعه مقیم آن فرآیند بازگردانده می شود .در واقع ،لیست های صفحه رایگان و اصالح شده به
عنوان یک کش از صفحات عمل می کنند .لیست صفحات اصالح شده عملکرد مفید دیگری را ارائه می دهد :صفحات اصالح
شده به جای یکی در یک زمان ،به صورت خوشه ای نوشته می شوند .این به میزان قابل توجهی تعداد عملیات I/Oو در نتیجه
میزان زمان دسترسی به دیسک را کاهش می دهد.
یک نسخه ساده تر از بافر صفحه در سیستم عامل Mach RASH88پیاده سازی شده است .در این مورد ،هیچ تمایزی بین
صفحات تغییر یافته و اصالح نشده صورت نمی گیرد.
سیاست جایگزینی و اندازه حافظه پنهان همانطور که قبالً بحث شد ،اندازه حافظه اصلی بزرگتر می شود و محل برنامه ها در
حال کاهش است .در جبران ،اندازه کش افزایش یافته است .اندازههای کش بزرگ ،حتی چند مگابایتی ،اکنون جایگزینهای
طراحی قابل اجرا هستند BORG90.با یک کش بزرگ ،جایگزینی صفحات حافظه مجازی می تواند تاثیری بر عملکرد داشته
باشد .اگر فریم صفحه انتخاب شده برای جایگزینی در حافظه پنهان باشد ،آن بلوک کش و همچنین صفحه ای که در آن
نگهداری می شود از بین می رود.
در سیستمهایی که از نوعی بافر صفحه استفاده میکنند ،میتوان با تکمیل سیاست جایگزینی صفحه با خطمشی برای قرار دادن
صفحه در بافر صفحه ،عملکرد کش را بهبود بخشید .اکثر سیستم عامل ها صفحات را با انتخاب یک فریم صفحه دلخواه از بافر
صفحه قرار می دهند.
معموالً از رشته اول در اول استفاده می شود .مطالعه ای که در KESS92گزارش شده است نشان می دهد که یک استراتژی
دقیق قرار دادن صفحه می تواند منجر به 10تا ٪20کمتر از دست رفتن حافظه پنهان نسبت به قرار دادن ساده باشد.
چندین الگوریتم قرار دادن صفحه در KESS92بررسی شده است .جزئیات فراتر از محدوده این کتاب است ،زیرا به جزئیات
ساختار حافظه پنهان و سیاست ها بستگی دارد .ماهیت این استراتژی ها آوردن صفحات متوالی به حافظه اصلی است به گونه ای
که تعداد فریم های صفحه ای را که در همان اسالت های کش نگاشت می شوند به حداقل برسانند.
452
سیستم عامل های داخلی و اصول طراحی453.........................................................................................................................
مدیریت مجموعه مقیم با حافظه مجازی صفحه شده ،الزم نیست و در واقع ممکن است امکان آوردن تمام صفحات یک فرآیند
به حافظه اصلی برای آماده سازی آن برای اجرا وجود نداشته باشد .بنابراین ،سیستم عامل باید تصمیم بگیرد که چند صفحه وارد
کند ،یعنی چه مقدار حافظه اصلی را به یک فرآیند خاص اختصاص دهد .عوامل متعددی دخیل هستند:
-هر چه مقدار حافظه اختصاص داده شده به یک فرآیند کمتر باشد ،فرآیندهای بیشتری می توانند در هر زمان در حافظه اصلی
باقی بمانند .این احتمال را افزایش می دهد که سیستم عامل حداقل یک فرآیند آماده را در هر زمان مشخص پیدا کند و از این
رو زمان از دست رفته به دلیل تعویض را کاهش می دهد.
-اگر تعداد نسبتاً کمی از صفحات یک فرآیند در حافظه اصلی باشد ،با وجود اصل محلی بودن ،نرخ خطاهای صفحه نسبتاً زیاد
خواهد بود شکل b8.10را ببینید.
-فراتر از اندازه معین ،تخصیص اضافی حافظه اصلی به یک فرآیند خاص ،به دلیل اصل محلی بودن ،تأثیر قابل توجهی بر نرخ
خطای صفحه برای آن فرآیند نخواهد داشت.
با در نظر گرفتن این عوامل ،دو نوع خط مشی را می توان در سیستم عامل های امروزی یافت .یک خط مشی تخصیص ثابت به
یک فرآیند تعداد ثابتی فریم در حافظه اصلی می دهد که در آن اجرا شود .این عدد در زمان بارگذاری اولیه زمان ایجاد فرآیند
تعیین می شود و ممکن است بر اساس نوع فرآیند تعاملی ،دسته ای ،نوع برنامه یا ممکن است بر اساس راهنمایی برنامه نویس
یا مدیر سیستم تعیین شود .با یک خط مشی تخصیص ثابت ،هرگاه خطای صفحه در اجرای یک فرآیند رخ دهد ،یکی از
صفحات آن فرآیند باید با صفحه مورد نیاز جایگزین شود.
یک خط مشی تخصیص متغیر اجازه می دهد تا تعداد فریم های صفحه تخصیص داده شده به یک فرآیند در طول عمر فرآیند
تغییر کند .در حالت ایدهآل ،به فرآیندی که دائماً از سطوح باالیی از خطاهای صفحه رنج میبرد ،که نشان میدهد اصل محلی
بودن فقط در شکل ضعیفی برای آن فرآیند وجود دارد ،فریمهای صفحه اضافی برای کاهش نرخ خطای صفحه داده میشود .در
حالی که به فرآیندی با نرخ خطای صفحه فوقالعاده پایین ،که نشان میدهد فرآیند از نقطه نظر محلی کامالً خوب رفتار میکند،
تخصیص کاهش مییابد ،با این امید که این امر نرخ خطای صفحه را بهطور محسوسی افزایش ندهد .استفاده از یک خط مشی
تخصیص متغیر به مفهوم دامنه جایگزینی ،همانطور که در بخش فرعی بعدی توضیح داده شد ،مربوط می شود.
به نظر می رسد سیاست تخصیص متغیر قدرتمندتر باشد .با این حال ،مشکل این رویکرد این است که سیستم عامل را ملزم
میکند تا رفتار فرآیندهای فعال را ارزیابی کند .این امر به ناچار نیاز به سربار نرم افزار در سیستم عامل دارد و به مکانیزم های
سخت افزاری ارائه شده توسط پلت فرم پردازنده وابسته است.
453
سیستم عامل های داخلی و اصول طراحی454.........................................................................................................................
محدوده جایگزینی دامنه یک استراتژی جایگزین را می توان به عنوان جهانی یا محلی طبقه بندی کرد .هر دو نوع خط مشی
زمانی که هیچ فریم صفحه رایگان وجود نداشته باشد با خطای صفحه فعال می شوند .یک خط مشی جایگزینی محلی تنها از
بین صفحات ساکن فرآیندی که خطای صفحه را در انتخاب صفحه ای برای جایگزینی ایجاد کرده اند ،انتخاب می کند .یک خط
مشی جایگزینی جهانی ،تمام صفحات قفل نشده در حافظه اصلی را به عنوان کاندیدای جایگزینی در نظر می گیرد ،صرف نظر از
اینکه کدام فرآیند مالک یک صفحه خاص است .در حالی که تحلیل سیاستهای محلی آسانتر است ،اما هیچ مدرک
قانعکنندهای وجود ندارد که نشان دهد آنها بهتر از سیاستهای جهانی ،که به دلیل سادگی اجرا و حداقل هزینههای باال جذاب
هستند ،عملکرد بهتری دارند CARR81, MAEK87.
بین دامنه جایگزینی و اندازه مجموعه مقیم همبستگی وجود دارد جدول .8.5یک مجموعه ساکن ثابت مستلزم یک سیاست
جایگزینی محلی است :برای ثابت نگه داشتن اندازه یک مجموعه مقیم ،صفحه ای که از حافظه اصلی حذف می شود باید با
صفحه دیگری از همان فرآیند جایگزین شود .یک خط مشی تخصیص متغیر به وضوح می تواند یک خط مشی جایگزینی جهانی
را به کار گیرد :جایگزینی یک صفحه از یک فرآیند در حافظه اصلی با دیگری باعث می شود که تخصیص یک فرآیند یک صفحه
افزایش یابد و دیگری یک صفحه کوچک شود .صفحه همچنین خواهیم دید که تخصیص متغیر و جایگزینی محلی یک ترکیب
معتبر است .اکنون این سه ترکیب را بررسی می کنیم.
rصفحه ای که باید جایگزین شود از بین rصفحه ای که باید جایگزین شود از میان
فریم های اختصاص داده شده به آن فرآیند تمام فریم های موجود در حافظه اصلی
انتخاب می شود .این باعث می شود که انتخاب می شود.
اندازه مجموعه فرآیندهای مقیم متفاوت
باشد.
454
سیستم عامل های داخلی و اصول طراحی455.........................................................................................................................
تخصیص ثابت ،محدوده محلی برای این مورد ،ما یک فرآیند داریم که در حافظه اصلی با تعداد ثابتی فریم در حال اجرا است.
هنگامی که یک خطای صفحه رخ می دهد ،سیستم عامل باید انتخاب کند که کدام صفحه از بین صفحات ساکن فعلی برای این
فرآیند جایگزین شود .می توان از الگوریتم های جایگزینی مانند مواردی که در قسمت زیر بحث شد استفاده کرد.
با یک سیاست تخصیص ثابت ،الزم است که از قبل در مورد میزان تخصیص به یک فرآیند تصمیم گیری شود .این می تواند بر
اساس نوع درخواست و مقدار درخواست شده توسط برنامه تصمیم گیری شود .اشکال این رویکرد دو مورد است :اگر تخصیصها
خیلی کوچک باشد ،نرخ خطای صفحه باال خواهد بود و باعث میشود کل سیستم چندبرنامهنویسی کند اجرا شود .اگر تخصیص
ها به طور غیر ضروری زیاد باشد ،برنامه های بسیار کمی در حافظه اصلی وجود خواهد داشت و یا زمان قابل توجهی در بیکاری
پردازنده یا زمان قابل توجهی صرف تعویض خواهد شد.
تخصیص متغیر ،دامنه جهانی این ترکیب شاید ساده ترین برای پیاده سازی باشد و در تعدادی از سیستم عامل ها به کار گرفته
شده است .در هر زمان ،تعدادی فرآیند در حافظه اصلی وجود دارد که هر کدام تعداد مشخصی فریم به آن اختصاص داده شده
است .به طور معمول ،سیستم عامل لیستی از فریم های رایگان را نیز حفظ می کند .هنگامی که یک خطای صفحه رخ می دهد،
یک فریم رایگان به مجموعه مقیم یک فرآیند اضافه می شود و صفحه وارد می شود .بنابراین ،اندازه فرآیندی که خطاهای صفحه
را تجربه می کند ،به تدریج افزایش می یابد ،که باید به کاهش کل خطاهای صفحه در سیستم کمک کند.
مشکل این رویکرد در انتخاب جایگزین است .هنگامی که هیچ فریم رایگان در دسترس نیست ،سیستم عامل باید صفحه ای را
که در حال حاضر در حافظه است برای جایگزینی انتخاب کند .انتخاب از بین تمام فریم های موجود در حافظه انجام می شود،
به جز فریم های قفل شده مانند فریم های هسته .با استفاده از هر یک از خط مشی های مورد بحث در بخش فرعی قبل ،صفحه
انتخاب شده برای جایگزینی می تواند به هر یک از فرآیندهای مقیم تعلق داشته باشد .هیچ نظمی برای تعیین اینکه کدام فرآیند
باید یک صفحه از مجموعه مقیم خود را از دست بدهد وجود ندارد .بنابراین ،فرآیندی که با کاهش اندازه مجموعه مقیم مواجه
می شود ممکن است بهینه نباشد.
یکی از راههای مقابله با مشکالت عملکرد بالقوه سیاست تخصیص متغیر و دامنه جهانی ،استفاده از بافر صفحه است .به این
ترتیب ،انتخاب اینکه کدام صفحه جایگزین شود اهمیت کمتری پیدا میکند ،زیرا اگر قبل از دفعه بعدی که یک بلوک از
صفحات بازنویسی میشود ،به آن ارجاع داده شود ،ممکن است آن صفحه بازیابی شود .تخصیص متغیر ،دامنه محلی استراتژی
تخصیص متغیر ،محدوده محلی تالش می کند تا با یک استراتژی با دامنه جهانی بر مشکالت غلبه کند .می توان آن را به صورت
زیر خالصه کرد:
455
سیستم عامل های داخلی و اصول طراحی456.........................................................................................................................
.1هنگامی که یک فرآیند جدید در حافظه اصلی بارگذاری می شود ،بر اساس نوع برنامه ،درخواست برنامه یا سایر معیارها،
تعداد معینی از فریم های صفحه را به عنوان مجموعه مقیم آن به آن اختصاص دهید .برای پر کردن تخصیص از پیشپیجینگ
یا صفحهبندی تقاضا استفاده کنید.
.2هنگامی که خطای صفحه رخ می دهد ،صفحه ای را برای جایگزینی از بین مجموعه مقیم فرآیندی که دچار خطا می شود
انتخاب کنید.
.3هر از گاهی ،تخصیص ارائه شده به فرآیند را مجدداً ارزیابی کنید و آن را افزایش یا کاهش دهید تا عملکرد کلی بهبود یابد.
با این استراتژی ،تصمیم برای افزایش یا کاهش اندازه مجموعه مقیم تصمیمی عمدی است و بر اساس ارزیابی تقاضاهای احتمالی
آینده فرآیندهای فعال است .به دلیل این ارزیابی ،چنین استراتژی پیچیده تر از یک سیاست جایگزین جهانی ساده است .با این
حال ،ممکن است عملکرد بهتری داشته باشد.
عناصر کلیدی استراتژی تخصیص متغیر و محدوده محلی معیارهایی هستند که برای تعیین اندازه مجموعه ساکنان و زمانبندی
تغییرات استفاده میشوند .یک استراتژی خاص که در ادبیات مورد توجه زیادی قرار گرفته است ،به عنوان استراتژی مجموعه
کاری شناخته می شود .اگرچه اجرای یک استراتژی مجموعه کاری واقعی دشوار است ،اما بررسی آن به عنوان یک خط پایه
برای مقایسه مفید است.
مجموعه کاری مفهومی است که توسط دنینگ DENN68, DENN70, DENN80bمعرفی و رایج شده است .تاثیر
عمیقی بر طراحی مدیریت حافظه مجازی داشته است .مجموعه کاری با پارامتر ∆ برای یک فرآیند در زمان مجازی ،tکه ما آن
را به عنوان ∆ ،Wtتعیین میکنیم ،مجموعهای از صفحات آن فرآیند است که در آخرین واحدهای زمان مجازی ∆ ارجاع
شدهاند.
زمان مجازی به صورت زیر تعریف می شود .دنباله ای از مراجع حافظه …. ،r2 ،r1 ،را در نظر بگیرید ،که در آن riصفحه ای
است که حاوی iامین آدرس مجازی تولید شده توسط یک فرآیند معین است .زمان در مراجع حافظه اندازه گیری می شود.
بنابراین .. ،3 ،2 ،t = 1زمان مجازی داخلی فرآیند را اندازه گیری می کند.
اجازه دهید هر یک از دو متغیر Wرا در نظر بگیریم .متغیر ∆ پنجرهای از زمان مجازی است که فرآیند روی آن مشاهده
میشود .اندازه مجموعه کاری تابعی بدون کاهش اندازه پنجره خواهد بود .نتیجه در شکل 8.17نشان داده شده است بر اساس
،BACH86که دنباله ای از مراجع صفحه را برای یک فرآیند نشان می دهد .نقطه ها واحدهای زمانی را نشان می دهند که
مجموعه کاری در آنها تغییر نمی کند .توجه داشته باشید که هر چه اندازه پنجره بزرگتر باشد ،مجموعه کار بزرگتر است .این را
می توان در رابطه زیر بیان کرد.:
456
سیستم عامل های داخلی و اصول طراحی457.........................................................................................................................
مجموعه کاری نیز تابع زمان است .اگر فرآیندی در واحدهای زمانی ∆ اجرا شود و فقط از یک صفحه استفاده کند ،آنگاه | ،W1t
∆ 2 | = 1.یک مجموعه کاری همچنین می تواند به اندازه تعداد صفحات Nفرآیند رشد کند اگر صفحات مختلف به سرعت
آدرس دهی شوند و اندازه پنجره اجازه دهد .بدین ترتیب،
شکل 8.18روشی را نشان می دهد که در آن اندازه مجموعه کاری می تواند در طول زمان برای مقدار ثابت Δتغییر کند .برای
بسیاری از برنامهها ،دورههای اندازههای مجموعه کاری نسبتاً پایدار با دورههای تغییر سریع متناوب میشوند .هنگامی که یک
فرآیند برای اولین بار شروع به اجرا می کند ،به تدریج به یک مجموعه کاری تبدیل می شود که به صفحات جدید ارجاع می
دهد .در نهایت ،بر اساس اصل محلی بودن ،فرآیند باید در مجموعه خاصی از صفحات تثبیت شود .دوره های گذرای بعدی نشان
دهنده تغییر برنامه به یک محل جدید است .در طول مرحله انتقال ،برخی از صفحات از محل قدیمی در داخل پنجره Δباقی
میمانند که باعث افزایش اندازه مجموعه کاری میشود که صفحات جدید ارجاع داده میشوند .همانطور که پنجره از کنار این
ارجاعات صفحه عبور می کند ،اندازه مجموعه کاری کاهش می یابد تا زمانی که فقط آن صفحات را از محل جدید داشته باشد.
توالی مراجع
اندازه پنجره∆ ،
صفحه
شکل 8.17مجموعه فرآیندهای کاری که توسط اندازه پنجره تعریف شده است
457
سیستم عامل های داخلی و اصول طراحی458.........................................................................................................................
این مفهوم از مجموعه کاری را می توان برای راهنمایی یک استراتژی برای اندازه مجموعه مقیم استفاده کرد:
.2به طور دوره ای صفحاتی را که در مجموعه کاری آن نیستند از مجموعه مقیم یک فرآیند حذف کنید .این اساساً یک سیاست
LRUاست.
.3یک فرآیند تنها در صورتی ممکن است اجرا شود که مجموعه کاری آن در حافظه اصلی باشد به عنوان مثال ،اگر مجموعه
مقیم آن شامل مجموعه کاری آن باشد.
این استراتژی جذاب است زیرا از یک اصل پذیرفته شده استفاده می کند ،اصل محلی بودن ،و از آن برای دستیابی به یک
استراتژی مدیریت حافظه استفاده می کند که باید خطاهای صفحه را به حداقل برساند .متأسفانه ،تعدادی از مشکالت در راهبرد
مجموعه کاری وجود دارد:
.1گذشته همیشه آینده را پیش بینی نمی کند .هم اندازه و هم عضویت مجموعه کاری در طول زمان تغییر خواهد کرد به
عنوان مثال ،شکل 8.18را ببینید.
.2اندازه گیری واقعی مجموعه کاری برای هر فرآیند غیرعملی است .الزم است هر مرجع صفحه را برای هر فرآیند با استفاده از
زمان مجازی آن فرآیند ،مهر زمانی تعیین کنید و سپس برای هر فرآیند ،صفی از صفحات به ترتیب زمان نگه دارید.
با این وجود ،روح این استراتژی معتبر است و تعدادی از سیستم های عامل تالش می کنند تا یک استراتژی مجموعه کاری را
تقریب بزنند .یکی از راههای انجام این کار این است که روی ارجاعات دقیق صفحه تمرکز نکنید ،بلکه روی نرخ خطای صفحه
458
سیستم عامل های داخلی و اصول طراحی459.........................................................................................................................
یک فرآیند تمرکز کنید .همانطور که شکل b8.10نشان می دهد ،با افزایش اندازه مجموعه مقیم یک فرآیند ،نرخ خطای صفحه
کاهش می یابد .اندازه مجموعه کاری باید در نقطهای از این منحنی باشد که با Wدر شکل نشان داده شده است .بنابراین ،به
جای نظارت مستقیم بر اندازه مجموعه کاری ،میتوانیم با نظارت بر نرخ خطای صفحه به نتایج مشابهی دست یابیم .خط
استدالل به شرح زیر است:
اگر نرخ خطای صفحه برای یک فرآیند کمتر از حداقل آستانه باشد ،سیستم به عنوان یک کل میتواند با اختصاص اندازه
مجموعه مقیم کوچکتر به این فرآیند زیرا فریمهای صفحه بیشتری برای سایر فرآیندها در دسترس است بدون آسیب رساندن به
فرآیند با ایجاد آن منتفع شود .برای افزایش خطاهای صفحه .اگر نرخ خطای صفحه برای یک فرآیند باالتر از حد آستانه حداکثر
باشد ،فرآیند می تواند از افزایش اندازه مجموعه مقیم با ایجاد خطاهای کمتر بدون تخریب سیستم بهره مند شود.
الگوریتمی که از این استراتژی پیروی می کند ،الگوریتم فرکانس خطای صفحه GUPT78 ،PFF CHU72است .به یک بیت
استفاده نیاز دارد که با هر صفحه در حافظه مرتبط شود .وقتی به آن صفحه دسترسی پیدا کرد بیت روی 1تنظیم می شود.
هنگامی که یک خطای صفحه رخ می دهد ،سیستم عامل زمان مجازی را از آخرین خطای صفحه برای آن فرآیند یادداشت می
کند .این را می توان با نگهداری شمارنده از مراجع صفحه انجام داد .یک آستانه Fتعریف شده است .اگر مقدار زمان از آخرین
خطای صفحه کمتر از Fباشد ،یک صفحه به مجموعه ساکن فرآیند اضافه می شود .در غیر این صورت ،تمام صفحات با بیت
استفاده 0را دور بیندازید و مجموعه ساکن را بر این اساس کوچک کنید .در همان زمان ،بیت استفاده را در صفحات باقیمانده
فرآیند به 0بازنشانی کنید .استراتژی را میتوان با استفاده از دو آستانه اصالح کرد :یک آستانه باال که برای ایجاد رشد در اندازه
مجموعه مقیم استفاده میشود ،و یک آستانه پایینتر که برای ایجاد انقباض در اندازه مجموعه مقیم استفاده می شود.
زمان بین خطاهای صفحه ،متقابل نرخ خطای صفحه است .اگرچه به نظر می رسد بهتر است میانگین جاری نرخ خطای صفحه
حفظ شود ،استفاده از یک اندازه گیری زمانی یک سازش منطقی است که اجازه می دهد تصمیمات در مورد اندازه مجموعه
مقیم براساس نرخ خطای صفحه باشد .اگر چنین استراتژی با بافر صفحه تکمیل شود ،عملکرد حاصل باید کامالً خوب باشد.
با این وجود ،یک نقص عمده در رویکرد PFFوجود دارد ،و آن این است که در طول دورههای گذرا که جابجایی به یک محل
جدید وجود دارد ،عملکرد خوبی ندارد .با ،PFFهیچ صفحهای از مجموعه مقیم خارج نمیشود قبل از اینکه واحدهای زمان
مجازی Fاز آخرین باری که به آن ارجاع شده است سپری شود .در طول انتقال بین محلی ،پیاپی سریع خطاهای صفحه باعث
می شود که مجموعه ساکن یک فرآیند قبل از بیرون راندن صفحات محلی قدیمی متورم شود .پیکهای ناگهانی تقاضای حافظه
ممکن است باعث غیرفعالسازی و فعالسازی مجدد فرآیند غیرضروری ،با سوئیچینگ و تعویض سربار نامطلوب مربوطه شود.
459
سیستم عامل های داخلی و اصول طراحی460.........................................................................................................................
رویکردی که تالش میکند با پدیده انتقال بینمحلی با سربار نسبتاً کم مشابه با PFFمقابله کند ،خطمشی مجموعه کاری
نمونهبرداری شده با فاصله متغیر VSWS FERR83است .خط مشی VSWSمجموعه کاری یک فرآیند را در نمونه های
نمونه بر اساس زمان مجازی سپری شده ارزیابی می کند.
در ابتدای یک بازه نمونهبرداری ،بیتهای استفاده از تمام صفحات ساکن برای فرآیند بازنشانی میشوند .در پایان ،فقط صفحاتی
که در طول بازه به آنها ارجاع داده شده اند ،بیت استفاده خود را دارند .این صفحات در طول بازه بعدی در مجموعه مقیم فرآیند
حفظ می شوند ،در حالی که بقیه دور انداخته می شوند .بنابراین اندازه مجموعه مقیم فقط می تواند در پایان یک بازه کاهش
یابد .در طول هر بازه ،هر صفحه خطا به مجموعه ساکن اضافه می شود .بنابراین مجموعه ساکن ثابت می ماند یا در طول بازه
رشد می کند .خط مشی VSWSتوسط سه پارامتر هدایت می شود:
س :تعداد خطاهای صفحه ای که مجاز است بین نمونه های نمونه گیری رخ دهد ،خط مشی VSWSبه شرح زیر است:
.1اگر زمان مجازی از آخرین نمونه نمونه برداری به Lرسید ،فرآیند را به حالت تعلیق درآورید و بیت های استفاده را اسکن
کنید.
.2اگر قبل از سپری شدن زمان مجازی ،Lخطاهای صفحه Qرخ دهد،
آ .اگر زمان مجازی از آخرین نمونه نمونه برداری کمتر از Mباشد ،منتظر بمانید تا زمان مجازی سپری شده به Mبرسد تا
فرآیند به حالت تعلیق درآید و بیت های استفاده را اسکن کنید.
ب اگر زمان مجازی از آخرین نمونه نمونه برداری بزرگتر یا مساوی باشد
مقادیر پارامتر باید به گونه ای انتخاب شوند که نمونه برداری معموالً با وقوع خطای صفحه Qthپس از آخرین اسکن مورد b 2
آغاز شود .دو پارامتر دیگر Mو Lحفاظت مرزی را برای شرایط استثنایی فراهم می کنند .خط مشی VSWSتالش میکند تا
با افزایش فرکانس نمونهبرداری ،تقاضای حافظه اوج ناشی از انتقال ناگهانی بین محلی را کاهش دهد ،و از این رو نرخی که در
آن صفحات استفاده نشده از مجموعه ساکن خارج میشوند ،زمانی که نرخ خطای صفحه افزایش مییابد .تجربه با این تکنیک در
سیستم عامل اصلی ،GCOS 8 ،Bullنشان میدهد که اجرای این روش به اندازه PFFساده و مؤثرتر است PIZZ89.
460
سیستم عامل های داخلی و اصول طراحی461.........................................................................................................................
سیاست پاک کردن مخالف سیاست واکشی است .مربوط به تعیین زمانی است که یک صفحه اصالح شده باید در حافظه ثانویه
نوشته شود .دو جایگزین رایج عبارتند از تمیز کردن تقاضا و تمیز کردن اولیه .با پاکسازی تقاضا ،یک صفحه تنها زمانی در
حافظه ثانویه نوشته می شود که برای جایگزینی انتخاب شده باشد .یک خط مشی پیش تمیز کردن ،صفحات اصالح شده را قبل
از نیاز به فریم صفحه می نویسد تا بتوان صفحات را به صورت دسته ای نوشت.
پیروی کامل از هر یک از این سیاست ها خطر دارد .با پیش تمیز کردن ،یک صفحه نوشته می شود اما تا زمانی که الگوریتم
جایگزینی صفحه حکم به حذف آن بدهد ،در حافظه اصلی باقی می ماند .پیش تمیز کردن امکان نوشتن صفحات را به صورت
دستهای فراهم میکند ،اما نوشتن صدها یا هزاران صفحه فقط برای اینکه بیشتر آنها قبل از جایگزینی مجدداً اصالح شدهاند،
منطقی نیست .ظرفیت انتقال حافظه ثانویه محدود است و نباید با عملیات تمیز کردن غیرضروری تلف شود.
از سوی دیگر ،با پاکسازی تقاضا ،نوشتن یک صفحه کثیف همراه و مقدم بر خواندن در یک صفحه جدید است .این تکنیک
ممکن است نوشتن صفحه را به حداقل برساند ،اما به این معنی است که فرآیندی که دچار خطای صفحه میشود ،ممکن است
قبل از رفع انسداد ،برای دو انتقال صفحه منتظر بماند .این ممکن است استفاده از پردازنده را کاهش دهد.
یک رویکرد بهتر شامل بافر صفحه است .این اجازه می دهد تا سیاست زیر را اتخاذ کنید :فقط صفحاتی را که قابل تعویض
هستند تمیز کنید ،اما عملیات تمیز کردن و تعویض را جدا کنید .با بافر صفحه ،صفحات جایگزین شده را می توان در دو لیست
قرار داد :اصالح شده و اصالح نشده .صفحات موجود در لیست اصالح شده را می توان به صورت دوره ای به صورت دسته ای
نوشت و به لیست اصالح نشده منتقل کرد .یک صفحه در لیست اصالح نشده در صورت ارجاع به آن بازیابی می شود یا زمانی
که فریم آن به صفحه دیگری اختصاص داده می شود از بین می رود.
کنترل بار
کنترل بار مربوط به تعیین تعداد فرآیندهایی است که در حافظه اصلی ساکن هستند ،که به عنوان سطح چندبرنامهنویسی
شناخته میشود .سیاست کنترل بار در مدیریت موثر حافظه حیاتی است .اگر تعداد کمی از فرآیندها در هر زمان ساکن باشند،
در آن صورت موارد زیادی وجود خواهد داشت که همه فرآیندها مسدود می شوند و زمان زیادی صرف مبادله می شود .از سوی
دیگر ،اگر تعداد زیادی از فرآیندها ساکن باشند ،به طور متوسط ،اندازه مجموعه مقیم هر فرآیند ناکافی خواهد بود و خطاهای
مکرر رخ می دهد .نتیجه کوبیدن است.
کوبیدن در سطح چندبرنامهنویسی در شکل 8.19نشان داده شده است .همانطور که سطح چندبرنامهنویسی از یک مقدار
کوچک افزایش مییابد ،انتظار میرود که استفاده از پردازنده افزایش یابد ،زیرا احتمال مسدود شدن همه فرآیندهای مقیم کمتر
461
سیستم عامل های داخلی و اصول طراحی462.........................................................................................................................
است .با این حال ،به نقطه ای رسیده است که در آن مجموعه ساکنان متوسط ناکافی است .در این مرحله ،تعداد خطاهای صفحه
به طور چشمگیری افزایش می یابد و استفاده از پردازنده از بین می رود.
روش های مختلفی برای برخورد با این مشکل وجود دارد .یک مجموعه کاری یا الگوریتم PFFبه طور ضمنی کنترل بار را در بر
می گیرد .فقط آن دسته از فرآیندهایی که مجموعه مقیم آنها به اندازه کافی بزرگ است مجاز به اجرا هستند .در ارائه اندازه
مجموعه مقیم مورد نیاز برای هر فرآیند فعال ،خط مشی به طور خودکار و پویا تعداد برنامه های فعال را تعیین می کند.
روش دیگری که توسط دنینگ و همکارانش DENN80bپیشنهاد شده است ،به عنوان معیار L = Sشناخته میشود که
سطح چندبرنامهنویسی را طوری تنظیم میکند که میانگین زمان بین خطاها برابر با میانگین زمان الزم برای پردازش خطای
صفحه باشد .مطالعات عملکرد نشان می دهد که این نقطه ای است که در آن استفاده از پردازنده به حداکثر رسیده است .یک
سیاست با اثر مشابه ،پیشنهاد شده در ،LERO76معیار %50است که تالش میکند استفاده از دستگاه پیجینگ را تقریباً %50
نگه دارد .باز هم ،مطالعات عملکرد نشان می دهد که این نقطه حداکثر استفاده از پردازنده است.
روش دیگر تطبیق الگوریتم جایگزینی صفحه ساعت است که قبال توضیح داده شد شکل CARR81 .8.15تکنیکی را با
استفاده از یک دامنه جهانی توصیف میکند که شامل نظارت بر سرعتی است که نشانگر بافر دایرهای فریمها را اسکن میکند.
اگر نرخ کمتر از یک آستانه پایین معین باشد ،این یک یا هر دو مورد از دو حالت را نشان می دهد:
.1تعداد کمی خطا در صفحه رخ می دهد که منجر به درخواست های کمی برای پیشبرد اشاره گر می شود.
.2برای هر درخواست ،میانگین تعداد فریم های اسکن شده توسط نشانگر کم است ،که نشان می دهد بسیاری از صفحات ساکن
وجود دارند که به آنها ارجاع داده نمی شود و به راحتی قابل تعویض هستند.
462
سیستم عامل های داخلی و اصول طراحی463.........................................................................................................................
در هر دو مورد ،سطح چندبرنامهنویسی را میتوان با خیال راحت افزایش داد .از طرف دیگر ،اگر نرخ اسکن اشاره گر از آستانه
باالیی فراتر رود ،این نشان دهنده نرخ خطا یا مشکل در مکان یابی صفحات قابل تعویض است ،که نشان می دهد سطح
چندبرنامه ریزی بسیار باال است.
تعلیق فرآیند اگر قرار است درجه چندبرنامهنویسی کاهش یابد ،یک یا چند مورد از فرآیندهای ساکن فعلی باید به حالت تعلیق
درآیندCARR81 .شش احتمال را فهرست می کند:
-فرآیند با کمترین اولویت :این یک تصمیم سیاست زمانبندی را اجرا میکند و به مسائل عملکرد مرتبط نیست.
-فرآیند خطا :استدالل این است که احتمال بیشتری وجود دارد که کار خطای مجموعه کاری خود را ثابت نداشته باشد و
عملکرد با تعلیق آن کمترین آسیب را ببیند .عالوه بر این ،این انتخاب بازدهی فوری دارد زیرا فرآیندی را که به هر حال در
شرف مسدود شدن است مسدود میکند و هزینههای سربار جایگزینی صفحه و عملیات I/Oرا حذف میکند.
-آخرین فرآیند فعال شده :این فرآیندی است که کمترین احتمال را دارد که مجموعه کاری آن ساکن باشد.
-فرآیند با کوچکترین مجموعه ساکن :این کار به کمترین تالش آینده برای بارگیری مجدد نیاز دارد .با این حال ،برنامه هایی با
محلی قوی را جریمه می کند.
-بزرگترین فرآیند :این بیشترین فریم های رایگان را در یک حافظه بیش از حد متعهد به دست می آورد و غیرفعال کردن
اضافی را به زودی بعید می کند.
-فرآیند با بزرگترین پنجره اجرای باقیمانده :در اکثر طرحهای زمانبندی فرآیند ،یک فرآیند ممکن است قبل از قطع شدن و
قرار گرفتن در انتهای صف آماده ،فقط برای مدت زمان مشخصی اجرا شود .این تقریباً یک رشته زمانبندی کوتاهترین زمان
پردازش و اول است.
مانند بسیاری دیگر از حوزههای طراحی سیستمعامل ،انتخاب خطمشی یک موضوع قضاوتی است و به بسیاری دیگر از عوامل
طراحی در سیستمعامل و همچنین ویژگیهای برنامههای در حال اجرا بستگی دارد.
از آنجایی که یونیکس قرار است مستقل از ماشین باشد ،طرح مدیریت حافظه آن از یک سیستم به سیستم دیگر متفاوت خواهد
بود .نسخه های قبلی یونیکس به سادگی از پارتیشن بندی متغیر بدون طرح حافظه مجازی استفاده می کردند .پیاده سازی های
فعلی یونیکس و سوالریس از حافظه مجازی صفحه شده استفاده می کنند.
463
سیستم عامل های داخلی و اصول طراحی464.........................................................................................................................
در SVR4و ،Solarisدر واقع دو طرح مدیریت حافظه مجزا وجود دارد .سیستم صفحه بندی قابلیت حافظه مجازی را فراهم
می کند که فریم های صفحه را در حافظه اصلی به پردازش ها اختصاص می دهد و همچنین فریم های صفحه را به بافرهای
بلوک دیسک اختصاص می دهد.
اگرچه این یک طرح مدیریت حافظه موثر برای فرآیندهای کاربر و ورودی/خروجی دیسک است ،اما یک طرح حافظه مجازی
صفحهدار برای مدیریت تخصیص حافظه برای هسته مناسب نیست .برای این منظور اخیر ،از یک تخصیص دهنده حافظه هسته
استفاده می شود .ما به نوبه خود این دو مکانیسم را بررسی می کنیم.
سیستم پیجینگ
ساختارهای داده برای حافظه مجازی صفحه شده ،یونیکس از تعدادی ساختار داده استفاده می کند که با تنظیمات جزئی،
مستقل از ماشین هستند شکل 8.20و جدول :8.6
-جدول صفحه :به طور معمول ،یک جدول صفحه در هر فرآیند وجود دارد ،با یک ورودی برای هر صفحه در حافظه مجازی
برای آن فرآیند.
-توصیفگر بلوک دیسک :مرتبط با هر صفحه از یک فرآیند ،ورودی در این جدول است که کپی دیسک صفحه مجازی را توصیف
می کند.
-جدول داده قاب صفحه :هر فریم از حافظه حقیقی را توصیف می کند و با شماره فریم نمایه می شود .این جدول توسط
الگوریتم جایگزینی استفاده می شود.
-جدول استفاده تعویض :برای هر دستگاه تعویض یک جدول استفاده تعویض وجود دارد که برای هر صفحه روی دستگاه یک
ورودی وجود دارد.
464
سیستم عامل های داخلی و اصول طراحی465.........................................................................................................................
بسیاری از زمینه های تعریف شده در جدول 8.6خود توضیحی هستند .چند مورد نظر بیشتر را تضمین می کند .زمینه Age
در ورودی جدول صفحه نشان دهنده مدت زمانی است که یک برنامه به این فریم ارجاع داده است .با این حال ،تعداد بیت ها و
دفعات به روز رسانی این زمینه به پیاده سازی بستگی دارد .بنابراین ،هیچ استفاده جهانی یونیکس از این زمینه برای سیاست
جایگزینی صفحه وجود ندارد.
زمینه Type of Storageدر توصیفگر بلوک دیسک به دالیل زیر مورد نیاز است :هنگامی که یک فایل اجرایی برای اولین بار
برای ایجاد یک فرآیند جدید استفاده می شود ،تنها بخشی از برنامه و داده های آن فایل ممکن است در حافظه حقیقی
بارگذاری شود .بعداً با رخ دادن خطاهای صفحه ،بخشهای جدیدی از برنامه و دادهها بارگذاری میشوند.
تنها در زمان بارگیری اول است که صفحات حافظه مجازی ایجاد میشوند و به مکانهایی در یکی از دستگاهها اختصاص
مییابند تا برای تعویض استفاده شوند .در آن زمان ،به سیستمعامل گفته میشود که آیا باید قبل از اولین بارگیری یک بلوک از
برنامه یا داده ،مکانهای قاب صفحه را پاک کند بر روی 0تنظیم کنید.
PAGE REPLACEMENTجدول داده قاب صفحه برای جایگزینی صفحه استفاده می شود .چندین اشاره گر برای ایجاد
لیست در این جدول استفاده می شود .همه فریمهای موجود در فهرستی از فریمهای رایگان موجود برای وارد کردن صفحات به
یکدیگر پیوند داده شدهاند .هنگامی که تعداد فریم های موجود به زیر یک آستانه خاص کاهش می یابد ،هسته برای جبران،
تعدادی فریم را می دزدد.
465
سیستم عامل های داخلی و اصول طراحی466.........................................................................................................................
الگوریتم جایگزینی صفحه مورد استفاده در SVR4اصالحی از الگوریتم خط مشی ساعت شکل 8.15است که به الگوریتم
ساعت دو دستی معروف است شکل .8.21الگوریتم از بیت مرجع در ورودی جدول صفحه برای هر صفحه در حافظه استفاده می
کند که واجد شرایط قفل نشده برای تعویض است .هنگامی که صفحه برای اولین بار وارد می شود ،این بیت روی 0تنظیم می
شود و زمانی که صفحه برای خواندن یا نوشتن ارجاع داده می شود ،روی 1تنظیم می شود .یک عقربه در الگوریتم ساعت،
جلودست ،صفحات موجود در لیست صفحات واجد شرایط را مرور می کند و بیت مرجع را در هر صفحه روی 0تنظیم می کند.
مدتی بعد ،پشتیبان همان لیست را مرور می کند و بیت مرجع را بررسی می کند .اگر بیت روی 1تنظیم شده باشد ،آن صفحه
از زمانی که صفحه جلویی جاروب شده است ،ارجاع داده شده است .این فریم ها نادیده گرفته می شوند .اگر بیت همچنان روی
0تنظیم شود ،در این صورت صفحه در فاصله زمانی بین بازدید از طریق جلو و بک هند ارجاع داده نشده است .این صفحات در
لیستی قرار می گیرند تا صفحه بندی شوند.
Scanrate: -سرعتی که دو دست در فهرست صفحات ،بر حسب صفحات در ثانیه اسکن می کنند
Handspread: -فاصله بین جلو و بک هند این دو پارامتر دارای مقادیر پیش فرض هستند که در زمان بوت بر اساس مقدار
حافظه فیزیکی تنظیم شده اند .پارامتر scanrateرا می توان برای برآورده کردن شرایط در حال تغییر تغییر داد .پارامتر به
صورت خطی بین مقادیر slowscanو fastscanتنظیم شده در زمان پیکربندی متفاوت است زیرا مقدار حافظه آزاد بین
مقادیر lotsfreeو minfreeمتفاوت است.
466
سیستم عامل های داخلی و اصول طراحی467.........................................................................................................................
به عبارت دیگر ،با کاهش مقدار حافظه آزاد ،عقربه های ساعت با سرعت بیشتری حرکت می کنند تا صفحات بیشتری آزاد شوند.
پارامتر handspreadشکاف بین جلو و بک هند را تعیین می کند و بنابراین ،همراه با ،scanrateپنجره فرصت استفاده از
یک صفحه را قبل از تعویض آن به دلیل عدم استفاده مشخص می کند.
کرنل جداول کوچک و بافرها را به طور مکرر در طول اجرا تولید و از بین می برد که هر کدام به تخصیص حافظه پویا نیاز دارند.
VAHA96نمونههای زیر را فهرست میکند:
-مسیریابی ترجمه نام مسیر ممکن است یک بافر برای کپی نام مسیر از فضای کاربر اختصاص دهد.
-بسیاری از پیاده سازی های یونیکس ساختارهای زامبی را برای حفظ وضعیت خروج و اطالعات استفاده از منابع در مورد
فرآیندهای مرده اختصاص می دهند.
-در SVR4و ،Solarisهسته بسیاری از اشیاء مانند ساختارهای ،vnodes ،procو بلوکهای توصیفگر فایل را به صورت
پویا در صورت نیاز اختصاص میدهد.
اکثر این بلوک ها به طور قابل توجهی کوچکتر از اندازه صفحه ماشین معمولی هستند و بنابراین مکانیسم صفحه بندی برای
تخصیص حافظه هسته پویا ناکارآمد است .برای ،SVR4از اصالح سیستم ،Buddyکه در بخش 7.2توضیح داده شده است،
استفاده می شود.
در سیستم های ،Buddyهزینه تخصیص و آزادسازی یک بلوک حافظه در مقایسه با سیاست های بهترین تناسب یا اولین
تناسب KNUT97پایین است .با این حال ،در مورد مدیریت حافظه هسته ،عملیات تخصیص و آزاد باید با بیشترین سرعت
ممکن انجام شود .اشکال سیستم Buddyزمان مورد نیاز برای تکه تکه شدن و ادغام بلوک ها است.
بارکلی و لی در AT&Tیک تغییر به نام سیستم Buddyتنبل BARK89را پیشنهاد کردند ،و این تکنیکی است که برای
SVR4به کار گرفته شده است .نویسندگان مشاهده کردند که یونیکس اغلب رفتار حالت پایدار را در تقاضای حافظه هسته
نشان می دهد .یعنی میزان تقاضا برای بلوکهای یک اندازه خاص در زمان به کندی تغییر میکند .بنابراین ،اگر یک بلوک با
اندازه i2آزاد شود و بالفاصله با Buddyخود در یک بلوک ادغام شود .با اندازه ،i + 12هسته ممکن است بعداً یک بلوک با
اندازه i2درخواست کند ،که ممکن است نیاز به تقسیم مجدد بلوک بزرگتر داشته باشد .برای جلوگیری از این ادغام و تقسیم
غیر ضروری،
467
سیستم عامل های داخلی و اصول طراحی468.........................................................................................................................
سیستم رفیق تنبل ادغام شدن را تا زمانی که احتمال نیاز به نظر برسد به تعویق می اندازد و سپس تا آنجا که ممکن است بلوک
ها را با هم ترکیب می کند.
Aiتعداد بلوکهای فعلی با اندازه i2که تخصیص داده شدهاند اشغال شدهاند.
تعداد بلوکهای فعلی با اندازه i2که در سطح جهانی رایگان هستند را مشخص کنید .اینها بلوک هایی هستند که واجد شرایط
ادغام هستند .اگر Buddyچنین بلوکی در سطح جهانی آزاد شود ،آنگاه دو بلوک در یک بلوک آزاد جهانی به اندازه i + 12
ادغام میشوند .همه بلوکهای آزاد حفرهها در سیستم Buddyاستاندارد میتوانند در سطح جهانی آزاد در نظر گرفته شوند.
تعداد فعلی بلوکهای با اندازه i2که به صورت محلی رایگان هستند .اینها بلوک هایی هستند که واجد شرایط ادغام نیستند.
حتی اگر Buddyچنین بلوکی آزاد شود ،این دو بلوک با هم ادغام نمی شوند .در عوض ،بلوکهای آزاد محلی با پیشبینی
تقاضای آینده برای بلوکی با آن اندازه حفظ میشوند .رابطه زیر برقرار است:
به طور کلی ،سیستم Buddyتنبل سعی میکند مجموعهای از بلوکهای آزاد محلی را حفظ کند و تنها زمانی ادغام را
فراخوانی میکند که تعداد بلوکهای آزاد محلی از یک آستانه فراتر رود .اگر بلوکهای رایگان محلی بیش از حد وجود داشته
باشد ،این احتمال وجود دارد که بلوکهای رایگان در سطح بعدی برای برآورده کردن تقاضا وجود نداشته باشد.
اغلب اوقات ،زمانی که یک بلوک آزاد می شود ،ادغام اتفاق نمی افتد ،بنابراین حداقل هزینه های حسابداری و عملیاتی وجود
دارد .هنگامی که یک بلوک قرار است تخصیص داده شود ،هیچ تمایزی بین بلوک های رایگان محلی و جهانی ایجاد نمی شود.
دوباره ،این امر حسابداری را به حداقل می رساند .معیاری که برای ادغام استفاده می شود این است که تعداد بلوک های آزاد
محلی با اندازه معین نباید از تعداد بلوک های اختصاص داده شده در آن اندازه تجاوز کند یعنی باید Li Aiداشته باشیم .این
یک دستورالعمل منطقی برای محدود کردن رشد بلوکهای آزاد محلی است ،و آزمایشها در BARK89تأیید میکنند که این
طرح منجر به صرفهجویی قابلتوجهی میشود ..برای پیاده سازی این طرح ،نویسندگان یک متغیر تاخیر را به صورت زیر تعریف
می کنند:
468
سیستم عامل های داخلی و اصول طراحی469.........................................................................................................................
لینوکس بسیاری از ویژگی های طرح های مدیریت حافظه سایر پیاده سازی های یونیکس را به اشتراک می گذارد ،اما ویژگی
های منحصر به فرد خود را دارد .به طور کلی ،طرح مدیریت حافظه لینوکس بسیار پیچیده است DUBE98.در این بخش،
مروری کوتاه بر دو جنبه اصلی مدیریت حافظه لینوکس ارائه می کنیم :حافظه مجازی پردازش و تخصیص حافظه هسته.
آدرس دهی حافظه مجازی لینوکس از ساختار جدول صفحه سه سطحی استفاده می کند که از انواع جداول زیر تشکیل شده
است هر جدول به اندازه یک صفحه است:
-دایرکتوری صفحه :یک فرآیند فعال دارای یک دایرکتوری صفحه است که به اندازه یک صفحه است .هر ورودی در دایرکتوری
صفحه به یک صفحه از دایرکتوری میانی صفحه اشاره می کند .دایرکتوری صفحه باید در حافظه اصلی برای یک فرآیند فعال
باشد.
469
سیستم عامل های داخلی و اصول طراحی470.........................................................................................................................
-دایرکتوری میانی صفحه :دایرکتوری میانی صفحه ممکن است چندین صفحه را شامل شود .هر ورودی در فهرست میانی
صفحه به یک صفحه در جدول صفحه اشاره می کند.
-جدول صفحه :جدول صفحه همچنین ممکن است چندین صفحه را شامل شود .هر ورودی جدول صفحه به یک صفحه مجازی
از فرآیند اشاره دارد.
برای استفاده از این ساختار جدول صفحه سه سطحی ،یک آدرس مجازی در لینوکس به صورت متشکل از چهار زمینه مشاهده
می شود شکل .8.23سمت چپ ترین مهم ترین زمینه به عنوان یک فهرست در فهرست صفحه استفاده می شود .زمینه بعدی
به عنوان نمایه ای در دایرکتوری میانی صفحه عمل می کند .زمینه سوم به عنوان یک نمایه در جدول صفحه عمل می کند.
قسمت چهارم مقدار افست را در صفحه انتخاب شده از حافظه نشان می دهد.
ساختار جدول صفحه لینوکس مستقل از پلتفرم است و برای سازگاری با پردازنده 64بیتی آلفا طراحی شده است که پشتیبانی
سخت افزاری را برای سه سطح صفحه بندی فراهم می کند .با آدرس های 64بیتی ،استفاده از تنها دو سطح از صفحات در آلفا
منجر به ایجاد جداول و فهرست های صفحه بسیار بزرگ می شود .معماری 32بیتی Pentium/x86دارای مکانیزم صفحه
بندی سخت افزاری دو سطحی است .نرمافزار لینوکس طرح دو سطحی را با تعریف اندازه فهرست راهنمای میانی صفحه به
عنوان یک تنظیم میکند .توجه داشته باشید که تمام ارجاعات به سطح اضافی غیرمستقیم در زمان اجرا بهینه می شوند ،نه در
زمان اجرا .بنابراین ،برای استفاده از طراحی سه سطحی عمومی بر روی پلتفرم هایی که تنها از دو سطح سخت افزاری پشتیبانی
می کنند ،هزینه سربار عملکردی وجود ندارد.
تخصیص صفحه برای افزایش کارایی خواندن و نوشتن صفحات به حافظه اصلی و از حافظه اصلی ،لینوکس مکانیزمی را برای
برخورد با بلوک های پیوسته از صفحات که در بلوک های به هم پیوسته از فریم های صفحه نگاشت شده اند ،تعریف می کند.
برای این منظور از سیستم buddyاستفاده می شود .هسته فهرستی از گروه های فریم صفحه به هم پیوسته با اندازه ثابت را
حفظ می کند.
470
سیستم عامل های داخلی و اصول طراحی471.........................................................................................................................
یک گروه ممکن است از 16 ،8 ،4 ،2 ،1یا 32فریم صفحه تشکیل شده باشد .همانطور که صفحات در حافظه اصلی تخصیص
داده می شوند ،گروه های موجود با استفاده از الگوریتم buddyتقسیم و ادغام می شوند.
الگوریتم جایگزینی صفحه قبل از انتشار لینوکس ،2.6.28الگوریتم جایگزینی صفحه لینوکس بر اساس الگوریتم ساعت توضیح
داده شده در بخش 8.2بود شکل 8.15را ببینید .در الگوریتم ساعت ساده ،یک بیت استفاده و یک بیت اصالح با هر صفحه در
حافظه اصلی مرتبط است .در طرح لینوکس ،بیت استفاده با یک متغیر سنی 8بیتی جایگزین شد .هر بار که به یک صفحه
دسترسی پیدا می کنید ،متغیر سن افزایش می یابد .در پسزمینه ،لینوکس بهطور دورهای از میان استخر صفحه سراسری عبور
میکند و متغیر سن را برای هر صفحه کاهش میدهد ،زیرا در تمام صفحات حافظه اصلی میچرخد .صفحه ای با سن 0یک
صفحه قدیمی است که مدتی است به آن ارجاع داده نشده است و بهترین کاندید برای جایگزینی است .هر چه مقدار سن بیشتر
باشد ،در زمانهای اخیر بیشتر از یک صفحه استفاده شده است و کمتر واجد شرایط برای جایگزینی است .بنابراین ،الگوریتم
لینوکس شکلی از سیاست های کم استفاده بود.
با شروع نسخه 2.6.28لینوکس ،الگوریتم جایگزینی صفحه که در پاراگراف قبل توضیح داده شد حذف شد و یک الگوریتم
جدید ،به نام الگوریتم تقسیم ،LRUدر هسته ادغام شد .یکی از مشکالت الگوریتم قدیمیتر این است که جاروهای دورهای از
طریق استخر صفحه ،مقدار فزایندهای از زمان پردازنده را برای حافظههای بزرگتر مصرف میکند.
الگوریتم جدید از دو پرچم اضافه شده به هر ورودی جدول صفحه استفاده می کند PG_active :و PG_referenced.کل
حافظه فیزیکی در لینوکس بر اساس آدرس آنها به "مناطق" مختلف تقسیم می شود .دو لیست پیوندی ،یعنی لیست های فعال
و غیرفعال ،در هر منطقه برای بازیابی صفحه توسط مدیر حافظه استفاده می شود .یک کرنل دیمون kswapdبه صورت
دورهای در پسزمینه اجرا میشود تا اصالح دورهای صفحه را در هر ناحیه انجام دهد .این دیمون ورودیهای جدول صفحه را که
فریمهای صفحه سیستم به آنها نگاشت میشوند ،مرور میکند .برای تمام ورودی های جدول صفحه که به عنوان دسترسی
مشخص شده اند ،بیت PG_referencedتنظیم شده است .این بیت در اولین باری که به یک صفحه دسترسی پیدا می کند
توسط پردازنده تنظیم می شود .برای هر تکرار ،kswapdبررسی میکند که آیا بیت مورد دسترسی به صفحه در ورودی جدول
صفحه تنظیم شده است یا خیر .هر بار که بیت صفحه مورد دسترسی را می خواند kswapd ،بیت را پاک می کند .ما می توانیم
مراحل مربوط به مدیریت صفحه را به صورت زیر خالصه کنیم شکل :8.24
.1اولین باری که به صفحه ای در لیست غیرفعال دسترسی پیدا می کند ،پرچم PG_referencedتنظیم می شود.
.2دفعه بعد که به آن صفحه دسترسی پیدا کرد ،به لیست فعال منتقل می شود .یعنی برای اینکه یک صفحه فعال اعالم شود دو
دسترسی الزم است .به طور دقیق تر ،برای فعال شدن یک صفحه ،دو دسترسی در اسکن های مختلف الزم است.
.4به همین ترتیب ،برای صفحات فعال ،دو تایم اوت برای انتقال صفحه به لیست غیرفعال مورد نیاز است.
سپس صفحات موجود در لیست غیرفعال برای جایگزینی صفحه با استفاده از یک نوع الگوریتم LRUدر دسترس هستند.
قابلیت حافظه هسته لینوکس فریم های صفحه حافظه اصلی فیزیکی را مدیریت می کند .وظیفه اصلی آن تخصیص و تخصیص
فریم ها برای استفاده های خاص است .صاحبان احتمالی یک فریم شامل فرآیندهای فضای کاربر به عنوان مثال ،فریم بخشی از
حافظه مجازی یک فرآیند است که در حال حاضر در حافظه حقیقی ساکن است ،دادههای هسته به صورت پویا ،کد هسته
استاتیک و حافظه پنهان صفحه است.
اساس تخصیص حافظه هسته برای لینوکس مکانیسم تخصیص صفحه است که برای مدیریت حافظه مجازی کاربر استفاده می
شود .همانطور که در طرح حافظه مجازی ،یک الگوریتم Buddyاستفاده می شود تا حافظه برای هسته را بتوان در واحدهای
یک یا چند صفحه تخصیص داد و تخصیص داد.
از آنجایی که حداقل مقدار حافظه ای که می توان به این روش اختصاص داد یک صفحه است ،تخصیص دهنده صفحه به تنهایی
ناکارآمد خواهد بود زیرا هسته به تکه های کوچک حافظه کوتاه مدت در اندازه های فرد نیاز دارد .برای جا دادن این تکه های
کوچک ،لینوکس از طرحی به نام تخصیص اسلب BONW94در یک صفحه اختصاص داده شده استفاده می کند .در دستگاه
،Pentium/x86اندازه صفحه 4کیلوبایت است و تکه های داخل صفحه ممکن است در اندازه های ،508 ،252 ،128 ،64 ،32
2040و 4080بایت تخصیص داده شوند.
تخصیص دهنده دال نسبتاً پیچیده است و در اینجا به تفصیل بررسی نشده است .یک توصیف خوب را می توان در
VAHA96یافت .در اصل ،لینوکس مجموعهای از لیستهای پیوندی را نگه میدارد ،یکی برای هر اندازه تکه .تکه ها ممکن
است به روشی مشابه الگوریتم Buddyتقسیم و جمع شوند و بر این اساس بین لیست ها جابجا شوند.
472
سیستم عامل های داخلی و اصول طراحی473.........................................................................................................................
مدیر حافظه مجازی ویندوز نحوه تخصیص حافظه و نحوه انجام صفحه بندی را کنترل می کند .مدیر حافظه برای کار بر روی
پلتفرم های مختلف و استفاده از اندازه های صفحه از 4کیلوبایت تا 64کیلوبایت طراحی شده است .پلتفرم های Intelو
AMD64دارای 4کیلوبایت در هر صفحه و پلتفرم های Intel Itaniumدارای 8کیلوبایت در هر صفحه هستند.
در پلتفرمهای 32بیتی ،هر فرآیند کاربر ویندوز یک فضای آدرس جداگانه 32بیتی را میبیند که به هر فرآیند 4گیگابایت
حافظه مجازی اجازه میدهد .به طور پیش فرض ،نیمی از این حافظه برای سیستم عامل رزرو شده است ،بنابراین هر کاربر در
واقع 2گیگابایت فضای آدرس مجازی در دسترس دارد و تمام فرآیندها هنگام اجرا در حالت هسته ،بیشتر 2گیگابایت فضای
سیستم را به اشتراک می گذارند .برنامه های کاربردی با حافظه فشرده ،هم در کالینت ها و هم در سرورها ،می توانند با استفاده
از ویندوز 64بیتی به طور موثرتری اجرا شوند .به غیر از نتبوکها ،اکثر رایانههای شخصی مدرن از معماری پردازنده
AMD64استفاده میکنند که میتواند به عنوان یک سیستم 32بیتی یا 64بیتی اجرا شود.
شکل 8.25فضای آدرس مجازی پیش فرض را نشان می دهد که توسط یک فرآیند کاربر معمولی 32بیتی مشاهده می شود .از
چهار منطقه تشکیل شده است:
r 0x00000000تا x0000FFFF: 0برای کمک به برنامه نویسان در گرفتن تکالیف اشاره گر NULLکنار بگذارید.
r 0x00010000تا x7FFEFFFF: 0فضای آدرس کاربر موجود است .این فضا به صفحاتی تقسیم می شود که ممکن است
در حافظه اصلی بارگذاری شوند.
473
سیستم عامل های داخلی و اصول طراحی474.........................................................................................................................
r 0x7FFF0000تا x7FFFFFFF: 0یک صفحه محافظ غیرقابل دسترسی برای کاربر .این صفحه بررسی مراجع اشاره گر
خارج از محدوده را برای سیستم عامل آسان تر می کند.
منطقه 64کیلوبایتی
برای تخصیص نشانگر
بد (غیرقابل دسترسی)
r 0x80000000تا xFFFFFFFF: 0فضای آدرس سیستم .این فرآیند 2گیگابایتی برای درایورهای اجرایی ویندوز ،کرنل،
HALو دستگاه استفاده می شود.
در سیستم عامل های 64بیتی 8 ،ترابایت فضای آدرس کاربر در ویندوز 7موجود است.
هنگامی که یک فرآیند ایجاد می شود ،در اصل می تواند از کل فضای کاربر تقریباً 2گیگابایت یا 8ترابایت در ویندوز 64بیتی
استفاده کند .این فضا به صفحات با اندازه ثابت تقسیم می شود که هر کدام را می توان به حافظه اصلی آورد ،اما سیستم عامل
آدرس ها را در مناطق به هم پیوسته تخصیص داده شده در مرزهای 64کیلوبایتی مدیریت می کند .یک منطقه می تواند در
یکی از سه حالت باشد:
474
سیستم عامل های داخلی و اصول طراحی475.........................................................................................................................
-رزرو شده :آدرس هایی که مدیر حافظه مجازی برای یک فرآیند کنار گذاشته است تا نتوان آنها را به استفاده دیگری اختصاص
داد به عنوان مثال ،صرفه جویی در فضای پیوسته برای رشد یک پشته.
Committed: -آدرس هایی که مدیر حافظه مجازی برای استفاده توسط فرآیند برای دسترسی به صفحات حافظه مجازی
مقداردهی اولیه کرده است .این صفحات می توانند روی دیسک یا حافظه فیزیکی قرار گیرند .هنگامی که روی دیسک هستند،
میتوانند در فایلها صفحات نقشهبرداری شده نگهداری شوند یا فضایی را در فایل صفحهبندی اشغال کنند یعنی فایل دیسکی
که هنگام حذف آنها از حافظه اصلی ،صفحات را روی آن مینویسد .تمایز بین حافظه ذخیره شده و متعهد به این دلیل مفید
است
1مقدار کل فضای حافظه مجازی مورد نیاز سیستم را کاهش می دهد و به فایل صفحه اجازه می دهد کوچکتر شود .و 2به
برنامهها اجازه میدهد تا آدرسها را بدون دسترسی به آنها برای برنامه یا هزینهکردن آنها در برابر سهمیه منابع خود رزرو
کنند.
طرح مدیریت مجموعه مقیم مورد استفاده ویندوز تخصیص متغیر ،محدوده محلی است جدول 8.5را ببینید .هنگامی که یک
فرآیند برای اولین بار فعال می شود ،ساختارهای داده ای برای مدیریت مجموعه کاری آن به آن اختصاص داده می شود.
همانطور که صفحات مورد نیاز فرآیند به حافظه فیزیکی وارد می شوند ،مدیر حافظه از ساختارهای داده برای پیگیری صفحات
اختصاص داده شده به فرآیند استفاده می کند .مجموعههای کاری فرآیندهای فعال با استفاده از قراردادهای کلی زیر تنظیم
میشوند:
هنگامی که حافظه اصلی فراوان است ،مدیر حافظه مجازی اجازه می دهد تا مجموعه های ساکن فرآیندهای فعال رشد کنند.
برای انجام این کار ،هنگامی که یک خطای صفحه رخ می دهد ،یک صفحه فیزیکی جدید به فرآیند اضافه می شود اما هیچ
صفحه قدیمی تری تعویض نمی شود و در نتیجه مجموعه ساکن آن فرآیند یک صفحه افزایش می یابد.
-هنگامی که حافظه کمیاب می شود ،مدیر حافظه مجازی با حذف صفحات کمتر استفاده شده از مجموعه های کاری
فرآیندهای فعال ،حافظه را برای سیستم بازیابی می کند و اندازه آن مجموعه های ساکن را کاهش می دهد.
حتی زمانی که حافظه فراوان است ،ویندوز فرآیندهای بزرگی را که به سرعت در حال افزایش استفاده از حافظه هستند ،بررسی
می کند .سیستم شروع به حذف صفحاتی می کند که اخیراً استفاده نشده اند از فرآیند .این خط مشی سیستم را پاسخگوتر می
کند زیرا یک برنامه جدید به طور ناگهانی باعث کمبود حافظه نمی شود و کاربر را مجبور نمی کند تا زمانی که سیستم سعی
می کند مجموعه های ساکن فرآیندهایی را که قبالً در حال اجرا هستند کاهش دهد صبر کند.
475
سیستم عامل های داخلی و اصول طراحی476.........................................................................................................................
با Metro UIیک سیستم حافظه مجازی جدید برای رسیدگی به درخواستهای وقفه از برنامههای فروشگاه ویندوز ارائه
میشود Swapfile.sys .به همتای آشنای ویندوز خود pagefile.sysمی پیوندد تا دسترسی به حافظه موقت روی هارد
دیسک را فراهم کند .صفحهبندی مواردی را نگه میدارد که برای مدت طوالنی به آنها دسترسی نداشتهاند ،در حالی که مبادله
مواردی را که اخیراً از حافظه حذف شدهاند نگهداری میکند .ممکن است برای مدت طوالنی به آیتم های موجود در پیجینگ
فایل دیگر دسترسی نیابید ،در حالی که موارد موجود در فایل swapممکن است خیلی زودتر قابل دسترسی باشند .فقط
برنامههای Storeاز فایل swapfile.sysاستفاده میکنند و به دلیل حجم نسبتاً کوچک برنامههای ،Storeاندازه ثابت آن
تنها 256مگابایت است .فایل pagefile.sysتقریباً یک تا دو برابر مقدار RAMفیزیکی موجود در سیستم خواهد بود.
Swapfile.sysبا تعویض کل فرآیند از حافظه سیستم به فایل swapعمل می کند .این بالفاصله حافظه را برای سایر برنامه
ها آزاد می کند .در مقابل ،فایل های صفحه بندی با انتقال "صفحات" یک برنامه از حافظه سیستم به فایل پیجینگ کار می
کنند .حجم این صفحات 4کیلوبایت می باشد .کل برنامه به صورت عمده در فایل صفحه بندی تعویض نمی شود.
اندروید شامل تعدادی افزونه برای تسهیالت مدیریت حافظه هسته لینوکس معمولی است .این موارد شامل موارد زیر است:
ASHMem: -این ویژگی حافظه مشترک ناشناس را فراهم می کند که حافظه را به عنوان توصیف کننده فایل خالصه می
کند .یک توصیفگر فایل می تواند برای اشتراک گذاری حافظه به فرآیند دیگری منتقل شود.
Pmem: -این ویژگی حافظه مجازی را به گونه ای اختصاص می دهد که از نظر فیزیکی به هم پیوسته باشد .این ویژگی برای
سخت افزارهایی که از حافظه مجازی پشتیبانی نمی کنند مفید است.
-حافظه کم :اکثر دستگاه های تلفن همراه قابلیت تعویض ندارند به دلیل مالحظات طول عمر حافظه فلش .هنگامی که حافظه
اصلی تمام می شود ،برنامه یا برنامه هایی که بیشترین حافظه را استفاده می کنند باید یا از استفاده خود از حافظه صرف نظر
کنند یا به پایان برسند .این ویژگی سیستم را قادر میسازد تا به برنامه یا برنامههایی که برای آزاد کردن حافظه نیاز دارند اطالع
دهد .اگر برنامه ای همکاری نکند ،خاتمه می یابد.
8.7خالصه
برای استفاده کارآمد از پردازنده و امکانات ورودی/خروجی ،حفظ هر چه بیشتر فرآیندها در حافظه اصلی مطلوب است .عالوه بر
این ،مطلوب است که برنامه نویسان از محدودیت های اندازه در توسعه برنامه رها شوند.
476
سیستم عامل های داخلی و اصول طراحی477.........................................................................................................................
راه حل هر دوی این نگرانی ها حافظه مجازی است .با حافظه مجازی ،همه مراجع آدرس ،مراجع منطقی هستند که در زمان
اجرا به آدرس های واقعی ترجمه می شوند .این اجازه می دهد تا یک فرآیند در هر نقطه از حافظه اصلی قرار گیرد و آن مکان
در طول زمان تغییر کند .حافظه مجازی همچنین اجازه می دهد تا یک فرآیند به قطعات تقسیم شود .الزم نیست این قطعات در
حین اجرا به طور پیوسته در حافظه اصلی قرار گیرند و در واقع ،حتی الزم نیست که تمام قطعات فرآیند در حین اجرا در حافظه
اصلی باشند.
دو رویکرد اساسی برای ارائه حافظه مجازی صفحه بندی و تقسیم بندی هستند .با صفحه بندی ،هر فرآیند به صفحات نسبتاً
کوچک و با اندازه ثابت تقسیم می شود .تقسیم بندی استفاده از قطعات با اندازه های مختلف را فراهم می کند .همچنین امکان
ترکیب تقسیم بندی و صفحه بندی در یک طرح مدیریت حافظه واحد وجود دارد.
یک طرح مدیریت حافظه مجازی به پشتیبانی سخت افزاری و نرم افزاری نیاز دارد .پشتیبانی سخت افزاری توسط پردازنده ارائه
می شود .پشتیبانی شامل ترجمه پویا آدرس های مجازی به آدرس های فیزیکی و ایجاد وقفه زمانی است که صفحه یا بخش
ارجاع شده در حافظه اصلی نباشد .چنین وقفه ای باعث فعال شدن نرم افزار مدیریت حافظه در سیستم عامل می شود.
تعدادی از مسائل طراحی مربوط به پشتیبانی سیستم عامل برای مدیریت حافظه است:
-واکشی خطمشی :صفحات فرآیند را میتوان در صورت تقاضا وارد کرد ،یا میتوان از یک خطمشی پیشصفحهسازی استفاده
کرد که فعالیت ورودی را با وارد کردن چند صفحه بهصورت همزمان خوشهبندی میکند.
-خطمشی قرارگیری :با یک سیستم تقسیمبندی خالص ،یک بخش ورودی باید در فضای موجود در حافظه قرار گیرد.
-سیاست تعویض :وقتی حافظه پر است ،باید تصمیم گیری شود که کدام صفحه یا صفحات جایگزین شوند.
-مدیریت مجموعه مقیم :سیستم عامل باید تصمیم بگیرد که چه مقدار حافظه اصلی را به یک فرآیند خاص تخصیص دهد که
آن فرآیند در آن جابجا می شود.
-خطمشی پاکسازی :صفحات فرآیند اصالحشده را میتوان در زمان جایگزینی نوشت ،یا میتوان از یک خطمشی پیش تمیز
کردن استفاده کرد ،که فعالیت خروجی را با نوشتن تعدادی صفحه بهطور همزمان خوشهبندی میکند.
کنترل بار :کنترل بار مربوط به تعیین تعداد فرآیندهایی است که در هر زمان معین در حافظه اصلی ساکن خواهند بود.
477
سیستم عامل های داخلی و اصول طراحی478.........................................................................................................................
CARR81یک بررسی عمیق عالی از مسائل عملکرد ارائه می دهد .مقاله کالسیک DENN70هنوز ارزش خواندن دارد.
JACO98aیک بررسی خوب از مسائل در طراحی حافظه مجازی است .شامل بحث جداول صفحه معکوس است.
JACO98bبه سازمانهای سختافزار حافظه مجازی در ریزپردازندههای مختلف نگاه میکند.
VAHA96یکی از بهترین درمانهای طرحهای مدیریت حافظه است که در طعمهای مختلف یونیکس استفاده میشود.
GORM04درمان کاملی برای مدیریت حافظه لینوکس است.
تصاویر متحرک
مجموعه ای از انیمیشن که مفاهیم این فصل را نشان می دهد در وب سایت Premiumموجود است .خواننده تشویق می شود
که انیمیشن ها را برای تقویت مفاهیم این فصل مشاهده کند.
478
سیستم عامل های داخلی و اصول طراحی479.........................................................................................................................
شرایط کلیدی
تکه تکه شدن خارجی سیاست قرار دادن صفحه جدول بخش
بررسی سواالت
.8.1تفاوت بین صفحه بندی ساده و صفحه بندی حافظه مجازی چیست؟
.8.3چرا اصل محلی بودن برای استفاده از حافظه مجازی بسیار مهم است؟
.8.4چه عناصری معموالً در ورودی جدول صفحه یافت می شوند؟ هر عنصر را به طور خالصه تعریف کنید.
.8.6به طور خالصه سیاست های واکشی صفحه جایگزین را تعریف کنید.
479
سیستم عامل های داخلی و اصول طراحی480.........................................................................................................................
.8.10چرا ترکیب سیاست جایگزینی جهانی و سیاست تخصیص ثابت ممکن نیست؟
چالش ها و مسائل
.8.1فرض کنید جدول صفحه برای فرآیندی که در حال حاضر روی پردازنده اجرا می شود به شکل زیر باشد .همه اعداد
اعشاری هستند ،همه چیز از صفر شروع می شود و همه آدرس ها آدرس بایت حافظه هستند .حجم صفحه 1024بایت است.
شماره شماره
صفحه بیت معتبر بیت مرجع بیت اصالح فریم
مجازی صفحه
0 1 1 0 4
1 1 1 1 7
2 0 0 0 —
3 1 0 0 2
4 0 0 0 —
5 1 0 1 0
آ .به طور کلی ،دقیقاً توضیح دهید که چگونه یک آدرس مجازی تولید شده توسط CPUبه یک آدرس حافظه اصلی فیزیکی
ترجمه می شود.
ب در صورت وجود ،هر یک از آدرس های مجازی زیر با کدام آدرس فیزیکی مطابقت دارد؟ در صورت وجود هرگونه خطای
صفحه ،سعی نکنید به آن رسیدگی کنید.
i 1052
II 2221
480
سیستم عامل های داخلی و اصول طراحی481.........................................................................................................................
iii 5,499
.8.2برنامه زیر را در نظر بگیرید.
فرض کنید برنامه روی سیستمی با استفاده از صفحهبندی تقاضا اجرا میشود و اندازه صفحه 1کیلوبایت است .هر عدد صحیح 4
بایت است .واضح است که هر آرایه به فضای 16صفحه ای نیاز دارد .به عنوان مثال،A2 ،63 ،-A10 ،A1 ،63 ،-A00 ،A0 ،
،63 ،- A20و A3 , 0-A3, 63در اولین صفحه داده ذخیره می شود .یک الگوی ذخیره سازی مشابه را می توان برای بقیه
آرایه Aو برای آرایه های Bو Cبه دست آورد .فرض کنید که سیستم یک مجموعه کاری 4صفحه ای را برای این فرآیند
اختصاص می دهد .یکی از صفحات توسط برنامه استفاده می شود و از سه صفحه می توان برای داده استفاده کرد .همچنین ،دو
رجیستر شاخص برای iو jاختصاص داده شده است بنابراین ،برای ارجاع به این دو متغیر نیازی به دسترسی حافظه نیست.
آ .بحث کنید که خطای صفحه چند بار رخ می دهد از نظر تعداد دفعات
j ،j + Bi ،j = Ai ،Ciاجرا می شوند.
ب آیا می توانید برنامه را تغییر دهید تا فرکانس خطای صفحه به حداقل برسد؟
.8.3آ .چه مقدار فضای حافظه برای جدول صفحه کاربر شکل 8.3مورد نیاز است؟
ب فرض کنید می خواهید یک جدول صفحه معکوس هش شده را برای همان طرح آدرس دهی که در شکل 8.3نشان داده
شده است ،با استفاده از یک تابع درهم سازی که شماره صفحه 20بیتی را به یک مقدار هش 6بیتی ترسیم می کند ،پیاده
سازی کنید .ورودی جدول شامل شماره صفحه ،شماره قاب و نشانگر زنجیره ای است .اگر جدول صفحه برای هر ورودی هش
شده حداکثر 3ورودی سرریز شده فضا اختصاص دهد ،جدول صفحه وارونه هش شده چقدر فضای حافظه را اشغال می کند؟
ج ساعت
ه .تعداد کل خطاهای صفحه و میزان خطا را برای هر خط مشی فهرست کنید .شمارش خطاهای صفحه فقط پس از اینکه همه
فریم ها مقداردهی اولیه شدند.
.8.5یک فرآیند به پنج صفحه D ،C ،B ،Aو Eبه ترتیب زیر ارجاع میدهد:
فرض کنید که الگوریتم جایگزینی اول به اول است و تعداد نقل و انتقاالت صفحه را در طول این دنباله از مراجع که با یک
حافظه اصلی خالی با سه فریم صفحه شروع می شود ،پیدا کنید .برای چهار فریم صفحه تکرار کنید.
.8.6یک فرآیند شامل هشت صفحه مجازی روی دیسک است و یک تخصیص ثابت از چهار فریم صفحه در حافظه اصلی به آن
اختصاص داده می شود .ردیابی صفحه زیر رخ می دهد:
آ .صفحات متوالی ساکن در چهار فریم را با استفاده از سیاست جایگزینی LRUنشان دهید .نسبت ضربه را در حافظه اصلی
محاسبه کنید .فرض کنید فریم ها در ابتدا خالی هستند.
ج دو نسبت ضربه را مقایسه کنید و در مورد اثربخشی استفاده از FIFOبرای تقریب LRUبا توجه به این ردیابی خاص اظهار
نظر کنید.
.8.7در ،VAXجداول صفحات کاربر در آدرس های مجازی در فضای سیستم قرار دارند .مزیت وجود جداول صفحات کاربر در
حافظه مجازی به جای حافظه اصلی چیست؟ چه ضرری دارد؟
482
سیستم عامل های داخلی و اصول طراحی483.........................................................................................................................
در حافظه ای با اندازه صفحه 1000کلمه اجرا می شود .بگذارید 1000نفر باشد .با استفاده از ماشینی که دارای طیف کاملی از
دستورالعملهای ثبت به ثبت است و از ثبتکنندههای فهرست استفاده میکند ،یک برنامه فرضی برای اجرای عبارت فوق
بنویسید .سپس ترتیب ارجاعات صفحه را در حین اجرا نشان دهید.
.8.9معماری IBM System/370از ساختار حافظه دو سطحی استفاده میکند و به دو سطح به عنوان بخشها و صفحات
اشاره میکند ،اگرچه رویکرد تقسیمبندی فاقد بسیاری از ویژگیهایی است که قبالً در این فصل توضیح داده شد .برای معماری
پایه ،370اندازه صفحه ممکن است 2کیلوبایت یا 4کیلوبایت باشد و اندازه بخش در 64کیلوبایت یا 1مگابایت ثابت است.
برای معماری های XA/370و ،ESA/370اندازه صفحه 4کیلوبایت و اندازه بخش 1مگابایت است .این طرح فاقد کدام
مزایای تقسیم بندی است؟ مزیت تقسیم بندی برای 370چیست؟
.8.10با فرض اندازه صفحه 4کیلوبایت و اینکه ورودی جدول صفحه 4بایت طول می کشد ،اگر جدول صفحه سطح باال در یک
صفحه قرار می گیرد ،چند سطح از جداول صفحه برای ترسیم فضای آدرس 64بیتی مورد نیاز است؟
.8.11سیستمی را در نظر بگیرید که نقشه برداری حافظه بر اساس صفحه و با استفاده از جدول صفحه تک سطح انجام شده
است .فرض کنید جدول صفحه ضروری همیشه در حافظه است.
آ .اگر یک مرجع حافظه ns 200طول می کشد ،یک مرجع حافظه صفحه شده چقدر طول می کشد؟
ب اکنون یک MMUاضافه می کنیم که ns 20سربار را در یک ضربه یا اشتباه تحمیل می کند .اگر فرض کنیم که ٪85از
تمام مراجع حافظه در MMU TLBقرار می گیرند ،زمان دسترسی موثر به حافظه EMATچقدر است؟
.8.12یک رشته مرجع صفحه را برای یک فرآیند با مجموعه کاری از Mفریم در نظر بگیرید که در ابتدا همه آنها خالی هستند.
رشته مرجع صفحه به طول Pبا Nشماره صفحه مجزا در آن است .برای هر الگوریتم جایگزینی صفحه
.8.13در بحث الگوریتم جایگزینی صفحه ،یک نویسنده با یک برف روب که در اطراف یک مسیر دایره ای حرکت می کند،
قیاس می کند .برف به طور یکنواخت در مسیر می بارد و یک برف روب تنها به طور مداوم با سرعت ثابت مسیر را می چرخد.
برفی که در مسیر شخم زده می شود از سیستم ناپدید می شود.
آ .برای کدام یک از الگوریتمهای جایگزینی صفحه که در بخش 8.2بحث شد ،این یک قیاس مفید است؟
483
سیستم عامل های داخلی و اصول طراحی484.........................................................................................................................
ب این قیاس در مورد رفتار الگوریتم جایگزینی صفحه مورد نظر چه چیزی را پیشنهاد می کند؟
.8.14در معماری ،S/370یک کلید ذخیره سازی یک زمینه کنترلی است که با هر فریم به اندازه صفحه حافظه حقیقی
مرتبط است .دو بیت از آن کلید که برای جایگزینی صفحه مرتبط هستند ،بیت مرجع و بیت تغییر هستند .بیت مرجع زمانی که
به هر آدرسی در فریم برای خواندن یا نوشتن دسترسی پیدا میشود روی 1تنظیم میشود و زمانی که صفحه جدیدی در فریم
بارگذاری میشود روی 0تنظیم میشود .هنگامی که عملیات نوشتن در هر مکانی در فریم انجام می شود ،بیت تغییر روی 1
تنظیم می شود .با استفاده از بیت مرجع ،روشی را برای تعیین اینکه کدام فریمهای صفحه اخیراً کمتر استفاده شدهاند ،پیشنهاد
کنید.
.8.15دنباله ارجاع صفحه زیر را در نظر بگیرید هر عنصر در دنباله نشان دهنده یک شماره صفحه است:
.8.16یک کلید برای عملکرد سیاست مدیریت مجموعه مقیم ،VSWSارزش است
Q.تجربه نشان داده است که با مقدار ثابت Qبرای یک فرآیند ،تفاوت های قابل توجهی در فرکانس خطاهای صفحه در مراحل
مختلف اجرا وجود دارد .عالوه بر این ،اگر یک مقدار Qبرای فرآیندهای مختلف استفاده شود ،فرکانسهای متفاوتی از خطاهای
صفحه رخ میدهد .این تفاوت ها به شدت نشان می دهد که مکانیزمی که به صورت پویا مقدار Qرا در طول عمر یک فرآیند
تنظیم می کند ،رفتار الگوریتم را بهبود می بخشد .یک مکانیسم ساده برای این منظور پیشنهاد کنید.
.8.17فرض کنید یک کار به چهار بخش با اندازه مساوی تقسیم شده است و سیستم یک جدول توصیفگر صفحه هشت ورودی
برای هر بخش می سازد .بنابراین ،سیستم دارای ترکیبی از بخش بندی و صفحه بندی است .همچنین فرض کنید که اندازه
صفحه 2کیلوبایت است.
ج فرض کنید یک عنصر در مکان فیزیکی ABC00021توسط این کار قابل دسترسی است .فرمت آدرس منطقی که وظیفه
برای آن ایجاد می کند چگونه است؟ حداکثر فضای آدرس فیزیکی برای سیستم چقدر است؟
.8.18یک فضای آدرس منطقی صفحه بندی شده متشکل از 32صفحه هر کدام 2کیلوبایت را در نظر بگیرید که در یک فضای
حافظه فیزیکی 1مگابایتی نگاشت شده است.
484
سیستم عامل های داخلی و اصول طراحی485.........................................................................................................................
ب طول و عرض جدول صفحه بدون توجه به بیت های «حق دسترسی» چقدر است؟
ج اگر فضای فیزیکی حافظه به نصف کاهش یابد ،چه تأثیری بر جدول صفحه خواهد داشت؟
.8.19هسته یونیکس به صورت پویا پشته یک فرآیند را در حافظه مجازی در صورت نیاز رشد می دهد ،اما هرگز سعی نمی کند
آن را کوچک کند .موردی را در نظر بگیرید که در آن یک برنامه یک زیربرنامه Cرا فراخوانی می کند که یک آرایه محلی را در
پشته اختصاص می دهد که K 10را مصرف می کند .وقتی زیر روال برمی گردد ،نشانگر پشته تنظیم می شود و این فضا می
تواند توسط هسته آزاد شود ،اما آزاد نمی شود .توضیح دهید که چرا می توان پشته را در این نقطه کوچک کرد و چرا هسته
یونیکس آن را کوچک نمی کند.
485
سیستم عامل های داخلی و اصول طراحی486.........................................................................................................................
فصل 9
برنامه ریزی بلند مدت برنامه ریزی میان مدت برنامه ریزی کوتاه مدت
معیارهای برنامه ریزی کوتاه مدت استفاده از اولویت ها مقایسه عملکرد سیاست های زمان بندی جایگزین
9.4خالصه
اهداف یادگیری
-تفاوت بین برنامه ریزی بلند مدت ،میان مدت و کوتاه مدت را توضیح دهید.
486
سیستم عامل های داخلی و اصول طراحی487.........................................................................................................................
در یک سیستم چندبرنامهنویسی ،چندین فرآیند به طور همزمان در حافظه اصلی وجود دارند .هر فرآیند به طور متناوب بین
استفاده از یک پردازنده و انتظار برای رخ دادن رویدادی مانند تکمیل یک عملیات I/Oانجام می شود .پردازنده یا پردازنده ها با
اجرای یک فرآیند در حالی که بقیه منتظر هستند مشغول نگه داشته می شوند.
کلید برنامه نویسی چندگانه ،زمان بندی است .در واقع ،چهار نوع زمانبندی معموالً درگیر هستند جدول .9.1یکی از اینها،
زمانبندی ورودی/خروجی ،در فصل ،11جایی که I/Oمورد بحث قرار میگیرد ،راحتتر به آن پرداخته شده است .سه نوع
زمانبندی باقیمانده ،که انواع زمانبندی پردازنده هستند ،در این فصل و فصل بعدی مورد بررسی قرار میگیرند.
این فصل با بررسی سه نوع زمانبندی پردازنده آغاز میشود و نحوه ارتباط آنها را نشان میدهد .ما می بینیم که برنامه ریزی
بلندمدت و برنامه ریزی میان مدت عمدتاً ناشی از نگرانی های عملکرد مربوط به درجه چندبرنامه ریزی است .این مسائل تا
حدی در فصل 3و با جزئیات بیشتر در فصل های 7و 8مورد بررسی قرار می گیرند.
بنابراین ،بقیه این فصل بر زمان بندی کوتاه مدت متمرکز است و به بررسی زمان بندی در یک سیستم تک پردازنده محدود می
شود .از آنجایی که استفاده از چندین پردازنده پیچیدگی بیشتری میافزاید ،بهتر است ابتدا روی مورد تکپردازنده تمرکز کنید
تا تفاوتهای بین الگوریتمهای زمانبندی به وضوح دیده شود.
بخش 9.2به الگوریتم های مختلفی می پردازد که ممکن است برای تصمیم گیری های زمان بندی کوتاه مدت استفاده شوند.
هدف از زمانبندی پردازنده ،تخصیص فرآیندهایی است که باید توسط پردازنده یا پردازندهها در طول زمان اجرا شوند ،به نحوی
که اهداف سیستم ،مانند زمان پاسخ ،توان عملیاتی و کارایی پردازنده را برآورده کند .در بسیاری از سیستمها ،این فعالیت
زمانبندی به سه عملکرد مجزا تقسیم میشود :زمانبندی بلندمدت ،میانمدت و کوتاهمدت .نام ها نشان دهنده مقیاس های
زمانی نسبی است که این عملکردها با آن انجام می شوند.
487
سیستم عامل های داخلی و اصول طراحی488.........................................................................................................................
جدید
خروج
برنامه برنامه
ریزی میان ریزی کوتاه
مدت مدت
برنامه ریزی
میان مدت
شکل 9.1زمانبندی و انتقال وضعیت فرآیند
شکل 9.1توابع زمان بندی را به نمودار انتقال وضعیت فرآیند مرتبط می کند برای اولین بار در شکل b3.9نشان داده شده
است .زمانبندی بلندمدت زمانی انجام میشود که فرآیند جدیدی ایجاد شود .این تصمیمی است که آیا یک فرآیند جدید به
مجموعه فرآیندهایی که در حال حاضر فعال هستند اضافه شود یا خیر .برنامه ریزی میان مدت بخشی از عملکرد مبادله است.
این تصمیمی است که آیا باید فرآیندی را به مواردی اضافه کرد که حداقل تا حدی در حافظه اصلی هستند و بنابراین برای اجرا
در دسترس هستند .زمانبندی کوتاهمدت تصمیم واقعی است که کدام فرآیند آماده اجرا میشود .شکل 9.2نمودار انتقال حالت
شکل b3.9را مجددا سازماندهی می کند تا توابع توابع زمان بندی را نشان دهد.
زمانبندی بر عملکرد سیستم تأثیر میگذارد ،زیرا تعیین میکند کدام فرآیندها منتظر بمانند و کدام پیشرفت کنند .این دیدگاه
در شکل 9.3ارائه شده است که صفهای دخیل در انتقال حالت یک فرآیند را نشان میدهد .اساساً ،زمانبندی یک موضوع
مدیریت صفها برای به حداقل رساندن تأخیر صف و بهینهسازی عملکرد در یک محیط صف است.
زمانبندی بلند مدت تعیین می کند که کدام برنامه ها برای پردازش در سیستم پذیرفته می شوند .بنابراین ،درجه
چندبرنامهنویسی را کنترل میکند .پس از پذیرش ،یک برنامه شغلی یا کاربری به یک فرآیند تبدیل می شود و به صف زمانبندی
کوتاه مدت اضافه می شود .در برخی از سیستم ها ،یک فرآیند جدید ایجاد شده در یک شرایط تعویض شده آغاز می شود ،در
این صورت به یک صف برای زمانبندی میان مدت اضافه می شود.
در یک سیستم دسته ای یا برای بخش دسته ای یک سیستم عامل ،کارهای ارسالی جدید به دیسک هدایت می شوند و در یک
صف دسته ای نگهداری می شوند .زمانبندی بلندمدت زمانی که بتواند فرآیندهایی را از صف ایجاد می کند .دو تصمیم درگیر
488
سیستم عامل های داخلی و اصول طراحی489.........................................................................................................................
است .زمانبند باید تصمیم بگیرد که چه زمانی سیستم عامل می تواند یک یا چند فرآیند اضافی را انجام دهد .و برنامهریز باید
تصمیم بگیرد که کدام شغل یا مشاغل را بپذیرد و به فرآیند تبدیل کند .این دو تصمیم را به اختصار بررسی می کنیم.
تصمیم در مورد زمان ایجاد یک فرآیند جدید عموماً توسط درجه مطلوب چندبرنامهنویسی هدایت میشود .هرچه فرآیندهای
بیشتری ایجاد شوند ،درصد زمانی که هر فرآیند میتواند اجرا شود کمتر است یعنی ،فرآیندهای بیشتری برای مدت زمان یکسان
پردازنده رقابت میکنند .بنابراین ،زمانبندی بلندمدت ممکن است درجه چندبرنامهنویسی را برای ارائه خدمات رضایتبخش به
مجموعه فعلی فرآیندها محدود کند .هر بار که یک کار خاتمه می یابد ،زمانبندی ممکن است تصمیم بگیرد که یک یا چند کار
جدید اضافه کند .عالوه بر این ،اگر کسری از زمانی که پردازنده بیکار است از یک آستانه خاص فراتر رود ،ممکن است زمانبندی
بلندمدت فراخوانی شود .تصمیم گیری در مورد اینکه کدام شغل بعدی پذیرفته شود ،می تواند بر اساس اولین خدمت اولیه
FCFSباشد ،یا می تواند ابزاری برای مدیریت عملکرد سیستم باشد .معیارهای مورد استفاده ممکن است شامل اولویت ،زمان
اجرای مورد انتظار و الزامات I/Oباشد.
جدید خروج
489
سیستم عامل های داخلی و اصول طراحی490.........................................................................................................................
برای مثال ،اگر اطالعات در دسترس باشد ،زمانبند ممکن است سعی کند ترکیبی از فرآیندهای محدود به پردازنده و
ورودی/خروجی را حفظ کند .برای متعادل کردن استفاده I/Oبرای برنامههای تعاملی در یک سیستم اشتراکگذاری زمانی ،یک
درخواست ایجاد فرآیند میتواند با اقدام یک کاربر برای اتصال به سیستم ایجاد شود .کاربران اشتراک زمان به سادگی در صف
قرار نمی گیرند و منتظر می مانند تا سیستم بتواند آنها را بپذیرد .در عوض ،سیستم عامل تا زمانی که سیستم اشباع نشده باشد،
با استفاده از معیارهای از پیش تعریف شده اشباع ،تمامی کاربران مجاز را می پذیرد .در آن مرحله ،یک درخواست اتصال با
پیامی مواجه می شود که نشان می دهد سیستم پر است و کاربر باید بعداً دوباره امتحان کند.
برنامه ریزی میان مدت بخشی از عملکرد مبادله است .مسائل مربوط در فصل های 7 ،3و 8مورد بحث قرار می گیرند .معموالً،
تصمیم مبادله بر اساس نیاز به مدیریت درجه چندبرنامه ریزی است .در سیستمی که از حافظه مجازی استفاده نمی کند،
مدیریت حافظه نیز یک مشکل است .بنابراین ،تصمیم مبادله ،الزامات حافظه فرآیندهای مبادله شده را در نظر می گیرد.
از نظر فراوانی اجرا ،زمانبندیکننده بلندمدت نسبتاً مکرر اجرا میکند و تصمیم میگیرد که آیا فرآیند جدیدی را انجام دهد یا
نه و کدام یک را اتخاذ کند .زمانبندی میانمدت برای تصمیمگیری مبادله به دفعات بیشتر اجرا میشود .زمانبندی کوتاهمدت،
که به عنوان توزیعکننده نیز شناخته میشود ،اغلب اجرا میشود و تصمیم میگیرد که کدام فرآیند بعدی را اجرا کند.
490
سیستم عامل های داخلی و اصول طراحی491.........................................................................................................................
زمانی که رویدادی رخ می دهد که ممکن است منجر به مسدود شدن فرآیند جاری شود یا ممکن است فرصتی برای جلوگیری
از یک فرآیند در حال اجرا به نفع دیگری فراهم کند ،زمانبندی کوتاه مدت فراخوانی می شود .نمونه هایی از چنین رویدادهایی
عبارتند از:
I/O-قطع می شود
هدف اصلی برنامه ریزی کوتاه مدت تخصیص زمان پردازنده به گونه ای است که یک یا چند جنبه از رفتار سیستم را بهینه کند.
به طور کلی ،مجموعهای از معیارها ایجاد میشود که براساس آنها میتوان سیاستهای زمانبندی مختلف را ارزیابی کرد.
معیارهای رایج مورد استفاده را می توان در دو بعد دسته بندی کرد .اول ،ما می توانیم بین معیارهای کاربر محور و سیستم
محور تمایز قائل شویم .معیارهای کاربرمدار به رفتار سیستم که توسط کاربر یا فرآیند منفرد درک می شود ،مربوط می شود.
یک مثال زمان پاسخگویی در یک سیستم تعاملی است .زمان پاسخ ،زمان سپری شده بین ارسال درخواست تا زمانی که پاسخ به
عنوان خروجی ظاهر شود .این مقدار برای کاربر قابل مشاهده است و طبیعتاً برای کاربر جالب است .ما یک خطمشی زمانبندی
میخواهیم که خدمات "خوب" را به کاربران مختلف ارائه دهد .در مورد زمان پاسخ ،ممکن است یک آستانه تعریف شود ،مثالً
دو ثانیه .سپس هدف مکانیسم زمانبندی باید به حداکثر رساندن تعداد کاربرانی باشد که میانگین زمان پاسخگویی دو ثانیه یا
کمتر را تجربه میکنند.
معیارهای دیگر سیستم گرا هستند .یعنی تمرکز بر استفاده موثر و کارآمد از پردازنده است .یک مثال توان عملیاتی است که
سرعت تکمیل فرآیندها است .این مطمئناً معیار ارزشمندی از عملکرد سیستم است و ما می خواهیم آن را به حداکثر برسانیم .با
این حال ،به جای خدمات ارائه شده به کاربر ،بر عملکرد سیستم تمرکز دارد .بنابراین ،توان عملیاتی برای یک مدیر سیستم
نگران کننده است اما برای جمعیت کاربر نه.
491
سیستم عامل های داخلی و اصول طراحی492.........................................................................................................................
در حالی که معیارهای کاربر محور تقریباً در همه سیستم ها مهم هستند ،معیارهای سیستم گرا معموالً در سیستم های تک
کاربره اهمیت کمی دارند .در یک سیستم تک کاربره ،تا زمانی که پاسخگویی سیستم به برنامه های کاربر قابل قبول باشد،
احتماالً دستیابی به استفاده از پردازنده یا توان عملیاتی باال مهم نیست.
بعد دیگری که معیارها را می توان بر اساس آن طبقه بندی کرد ،آنهایی است که به عملکرد مرتبط هستند و آنهایی که مستقیماً
به عملکرد مرتبط نیستند .معیارهای مربوط به عملکرد کمی هستند و عموماً به راحتی قابل اندازه گیری هستند .به عنوان مثال
می توان به زمان پاسخگویی و توان عملیاتی اشاره کرد .معیارهایی که مربوط به عملکرد نیستند یا ماهیت کیفی دارند یا به
راحتی به اندازه گیری و تجزیه و تحلیل نمی رسند .نمونه ای از چنین معیاری قابل پیش بینی است .ما می خواهیم خدمات ارائه
شده به کاربران در طول زمان ،مستقل از سایر کارهایی که توسط سیستم انجام می شود ،همان ویژگی ها را نشان دهد .تا حدی،
این معیار را می توان با محاسبه واریانس به عنوان تابعی از حجم کار اندازه گیری کرد .با این حال ،این تقریباً به اندازه اندازه
گیری توان عملیاتی یا زمان پاسخ به عنوان تابعی از حجم کار ساده نیست.
جدول 9.2معیارهای کلیدی زمان بندی را خالصه می کند .اینها به یکدیگر وابسته هستند و بهینه سازی همه آنها به طور
همزمان غیرممکن است .به عنوان مثال ،ارائه زمان پاسخ خوب ممکن است به یک الگوریتم زمان بندی نیاز داشته باشد که بین
فرآیندها سوئیچ کند
492
سیستم عامل های داخلی و اصول طراحی493.........................................................................................................................
اهمیت این نیاز ،و از آنجایی که تعریف کفایت از یک کاربرد به برنامه دیگر متفاوت است ،موضوع در پیوست Gبیشتر مورد
بررسی قرار گرفته است.
493
سیستم عامل های داخلی و اصول طراحی494.........................................................................................................................
در بسیاری از سیستمها ،به هر فرآیند یک اولویت اختصاص داده میشود و زمانبندیکننده همیشه یک فرآیند با اولویت باالتر را
نسبت به یکی از اولویتهای پایینتر انتخاب میکند .شکل 9.4استفاده از اولویت ها را نشان می دهد .برای وضوح ،نمودار صف
ساده شده است و وجود صف های مسدود شده متعدد و حالت های معلق را نادیده می گیرد شکل a3.8را مقایسه کنید .به
جای یک صف آماده ،مجموعه ای از صف ها را به ترتیب اولویت نزولی ارائه می دهیم. . . , RQn, ،RQ1 ،RQ0 :با
اولویت RQiاولویت RQjبرای i j.3هنگامی که یک انتخاب زمانبندی قرار است انجام شود ،زمانبندی از صف آماده با باالترین
اولویت RQ0شروع می شود .اگر یک یا چند فرآیند در صف وجود داشته باشد ،یک فرآیند با استفاده از برخی از سیاست های
زمان بندی انتخاب می شود .اگر RQ0خالی باشد RQ1 ،بررسی می شود و غیره.
یکی از مشکالت طرح زمانبندی اولویت خالص این است که فرآیندهای با اولویت پایینتر ممکن است دچار گرسنگی شوند .این
در صورتی اتفاق میافتد که همیشه یک منبع ثابت از فرآیندهای آماده با اولویت باالتر وجود داشته باشد .اگر این رفتار مطلوب
نباشد ،اولویت یک فرآیند می تواند با سن یا سابقه اجرای آن تغییر کند .در ادامه یکی از این موارد را بیان خواهیم کرد.
جدول 9.3اطالعات خالصه ای را در مورد سیاست های زمان بندی مختلف ارائه می کند که در این بخش فرعی بررسی می
شوند .تابع انتخاب تعیین می کند که کدام فرآیند ،از بین فرآیندهای آماده ،بعداً برای اجرا انتخاب می شود .تابع ممکن است بر
اساس اولویت ،منابع مورد نیاز ،یا ویژگی های اجرای فرآیند باشد .در مورد دوم ،سه مقدار قابل توجه است:
494
سیستم عامل های داخلی و اصول طراحی495.........................................................................................................................
زمان صرف شده در سیستم تا کنون ،در انتظار زمان صرف شده در اجرا تا کنون کل زمان خدمات مورد نیاز فرآیند ،از جمله ;e
به طور کلی ،این مقدار باید توسط کاربر برآورد یا عرضه شود به عنوان مثال ،تابع انتخاب maxwیک رشته FCFSرا نشان
می دهد
درخواست
FCFS SPN SRT HRR Feedba
کتبی N ck
یم کوانتومی
گیری
توان پیشگیرانه در تاکید نشده تاکید نشده
عملیاتی است زمان است
کوانتومی
495
سیستم عامل های داخلی و اصول طراحی496.........................................................................................................................
گرسنگی فرآیندهای می تواند باال کمترین زمان تاکید نشده زمان
کوتاه را پاسخگویی باشد پاسخگویی است
جریمه می خوبی را فراهم خوبی را
کند. فراهم می می کند
فرآیندهای کند
محدود I/O
را جریمه می
کند
حالت تصمیم گیری ،لحظه های زمانی را که در آن عملکرد انتخاب اعمال می شود ،مشخص می کند .دو دسته کلی وجود دارد:
Nonpreemptive: -در این حالت ،هنگامی که یک فرآیند در حالت Runningقرار دارد ،به اجرا ادامه میدهد تا زمانی که
الف خاتمه یابد یا ب خود را مسدود کند تا منتظر I/Oباشد یا درخواست برخی از سرویسهای سیستم عامل را بکند.
Preemptive: -فرآیند در حال اجرا ممکن است قطع شود و توسط سیستم عامل به حالت آماده منتقل شود .تصمیم به پیش
گرفتن ممکن است زمانی انجام شود که یک فرآیند جدید وارد شود .هنگامی که یک وقفه رخ می دهد که یک فرآیند مسدود
شده را در حالت آماده قرار می دهد .یا به صورت دوره ای ،بر اساس وقفه ساعت .خطمشیهای پیشگیرانه هزینههای سربار
بیشتری را نسبت به سیاستهای غیرپیشگیرانه متحمل میشوند ،اما ممکن است خدمات بهتری را به کل جمعیت فرآیندها ارائه
دهند ،زیرا از انحصار هر یک از فرآیندها برای مدت طوالنی جلوگیری میکنند .عالوه بر این ،ممکن است با استفاده از
مکانیسمهای کارآمد تعویض فرآیند تا حد ممکن کمک سختافزاری و با ارائه یک حافظه اصلی بزرگ برای نگهداری درصد
باالیی از برنامهها در حافظه اصلی ،هزینه پیشپرداخت نسبتاً پایین نگه داشته شود.
496
سیستم عامل های داخلی و اصول طراحی497.........................................................................................................................
همانطور که ما سیاست های زمان بندی مختلف را توضیح می دهیم ،از مجموعه فرآیندهای جدول 9.4به عنوان مثال در حال
اجرا استفاده خواهیم کرد .میتوانیم اینها را بهعنوان کارهای دستهای در نظر بگیریم ،که زمان سرویس کل زمان اجرای مورد
نیاز است .از طرف دیگر ،میتوانیم اینها را فرآیندهای مداومی در نظر بگیریم که نیاز به استفاده متناوب از پردازنده و I/Oبه
شیوهای تکراری دارند .در این مورد اخیر ،زمان های سرویس نشان دهنده زمان مورد نیاز پردازنده در یک چرخه است .در هر
صورت ،از نظر یک مدل صف ،این مقدار با زمان سرویس مطابقت دارد.
برای مثال جدول ،9.4شکل 9.5الگوی اجرای هر خط مشی را برای یک چرخه نشان می دهد و جدول 9.5برخی از نتایج
کلیدی را خالصه می کند .ابتدا زمان پایان هر فرآیند مشخص می شود .از این طریق می توانیم زمان چرخش را تعیین کنیم .از
نظر مدل صف ،زمان چرخش TATزمان اقامت Trیا کل زمانی است که آیتم در سیستم صرف می کند زمان انتظار به اضافه
زمان سرویس .یک رقم مفیدتر زمان چرخش نرمال شده است که نسبت زمان چرخش به زمان سرویس است .این مقدار تاخیر
نسبی تجربه شده توسط یک فرآیند را نشان می دهد .به طور معمول ،هر چه زمان اجرای فرآیند طوالنیتر باشد ،میزان تأخیر
قابل تحمل بیشتر است .حداقل مقدار ممکن برای این نسبت 1.0است .افزایش مقادیر با کاهش سطح خدمات مطابقت دارد.
497
سیستم عامل های داخلی و اصول طراحی498.........................................................................................................................
FIRST-COME-FIRST-SERVEDساده ترین خط مشی زمان بندی ،اولین خدمت اولیه FCFSاست که به عنوان
اولین در اولین خروج FIFOیا یک طرح صف بندی دقیق نیز شناخته می شود .با آماده شدن هر فرآیند ،به صف آماده می
پیوندد .هنگامی که فرآیند در حال اجرا متوقف می شود ،فرآیندی که طوالنی ترین مدت در صف آماده بوده برای اجرا انتخاب
می شود.
RR q
=1
Finish Time 4 18 17 20 15
Turnaround 4 16 13 14 7 10.80
Time Tr
Tr/Ts 1.33 2.67 3.25 2.80 3.50 2.71
RR q
=4
Finish Time 3 17 11 20 19
Turnaround 3 15 7 14 11 10.00
Time Tr
Tr/Ts 1.00 2.5 1.75 2.80 5.50 2.71
SPN
Finish Time 3 9 15 20 11
Turnaround 3 7 11 14 3 7.60
Time Tr
Tr/Ts 1.00 1.17 2.75 2.80 1.50 1.84
SRT
Finish Time 3 15 8 20 10
Turnaround 3 13 4 14 2 7.20
Time Tr
Tr/Ts 1.00 2.17 1.00 2.80 1.00 1.59
HR
RN
Finish Time 3 9 13 20 15
Turnaround 3 7 9 14 7 8.00
Time Tr
Tr/Ts 1.00 1.17 2.25 2.80 3.5 2.14
FB q
=1
Finish Time 4 20 16 19 11
Turnaround 4 18 12 13 3 10.00
499
سیستم عامل های داخلی و اصول طراحی500.........................................................................................................................
Time Tr
Tr/Ts 1.33 3.00 3.00 2.60 1.5 2.29
FB q
= 2i
Finish Time 4 17 18 20 14
Turnaround 4 15 14 14 6 10.60
Time Tr
Tr/Ts 1.33 2.50 3.50 2.80 3.00 2.63
FCFSبرای فرآیندهای طوالنی بسیار بهتر از فرآیندهای کوتاه عمل می کند .مثال زیر را بر اساس یکی از FINK88در نظر
بگیرید:
ن Ts
W 0 1 0 1 1 1
X 1 100 1 101 100 1
Y 2 1 10 102 100 100
1
Z 3 100 10 202 199 1.99
2
میانگین 100 26
زمان چرخش نرمال شده برای فرآیند Yدر مقایسه با سایر فرآیندها بسیار خارج از خط است :کل زمانی که در سیستم است
100برابر زمان پردازش مورد نیاز است .هر زمان که یک فرآیند کوتاه درست پس از یک فرآیند طوالنی وارد شود ،این اتفاق می
افتد .از سوی دیگر ،حتی در این مثال شدید ،فرآیندهای طوالنی عملکرد ضعیفی ندارند .فرآیند Zزمان چرخشی دارد که تقریباً
دو برابر Yاست ،اما زمان اقامت عادی آن کمتر از 2.0است.
یکی دیگر از مشکالت FCFSاین است که فرآیندهای محدود به پردازنده را نسبت به فرآیندهای I/O-boundترجیح می
دهد .در نظر بگیرید که مجموعهای از پردازشها وجود دارد که یکی از آنها بیشتر از پردازنده استفاده میکند processor
500
سیستم عامل های داخلی و اصول طراحی501.........................................................................................................................
boundو تعدادی از آنها به نفع I/O I/O Boundهستند .هنگامی که یک فرآیند محدود به پردازنده در حال اجرا است ،تمام
فرآیندهای محدود به I/Oباید منتظر بمانند .برخی از اینها ممکن است در صف های ورودی/خروجی وضعیت مسدود باشند اما
ممکن است در حین اجرای فرآیند محدود به پردازنده به صف آماده برگردند .در این مرحله ،بیشتر یا همه دستگاه های
ورودی/خروجی ممکن است بیکار باشند ،حتی اگر به طور بالقوه کاری برای انجام دادن آنها وجود داشته باشد .هنگامی که
فرآیند در حال اجرا از حالت Runningخارج می شود ،فرآیندهای I/O-Boundآماده به سرعت در حالت Running
حرکت می کنند و در رویدادهای I/Oمسدود می شوند .اگر فرآیند محدود به پردازنده نیز مسدود شود ،پردازنده بیکار می شود.
بنابراین FCFS ،ممکن است منجر به استفاده ناکارآمد از پردازنده و دستگاه های ورودی/خروجی شود.
FCFSبه تنهایی یک جایگزین جذاب برای یک سیستم تک پردازنده نیست .با این حال ،اغلب با یک طرح اولویت ترکیب
میشود تا یک زمانبندی مؤثر ارائه کند .بنابراین ،زمانبندیکننده ممکن است تعدادی صف را حفظ کند ،یکی برای هر سطح
اولویت ،و در هر صف بر اساس اولویت اول ارسال شود .نمونهای از چنین سیستمی را بعداً در بحث زمانبندی بازخورد میبینیم.
ROUND ROBINیک راه ساده برای کاهش مجازاتی که مشاغل کوتاه مدت با FCFSمتحمل می شوند ،استفاده از پیش
گرفتن بر اساس ساعت است .ساده ترین چنین سیاستی ،دور روبین است .یک وقفه ساعت در فواصل دوره ای ایجاد می شود.
هنگامی که وقفه رخ می دهد ،فرآیند در حال اجرا در صف آماده قرار می گیرد و کار آماده بعدی بر اساس FCFSانتخاب می
شود .این تکنیک به عنوان برش زمان نیز شناخته می شود ،زیرا به هر فرآیند قبل از انجام یک برش زمان داده می شود.
در مورد رابین دور ،مسئله اصلی طراحی ،طول کوانتوم زمانی یا برش مورد استفاده است .اگر کوانتوم بسیار کوتاه باشد،
فرآیندهای کوتاه نسبتاً سریع در سیستم حرکت خواهند کرد .از سوی دیگر ،سربار پردازش درگیر مدیریت وقفه ساعت و انجام
عملکرد زمانبندی و ارسال است .بنابراین ،باید از کوانتاهای زمان بسیار کوتاه اجتناب شود .یک راهنمای مفید این است که
کوانتوم زمانی باید کمی بیشتر از زمان مورد نیاز برای یک برهمکنش معمولی یا تابع فرآیند باشد .اگر کمتر باشد ،اکثر فرآیندها
حداقل به دو کوانتای زمان نیاز دارند .شکل 9.6تأثیر این امر بر زمان پاسخ را نشان می دهد .توجه داشته باشید که در مورد
محدود یک کوانتوم زمانی که طوالنیتر از طوالنیترین فرآیند است ،دور رابین به FCFSتبدیل میشود.
شکل 9.5و جدول 9.5نتایج را برای مثال ما با استفاده از کوانتای زمان qاز 1و 4واحد زمانی نشان می دهد .توجه داشته
باشید که فرآیند Eکه کوتاه ترین کار است ،برای کوانتوم زمانی 1از بهبود قابل توجهی برخوردار است.
Robin Robinبه ویژه در یک سیستم اشتراک زمانی عمومی یا سیستم پردازش تراکنش موثر است .یکی از ایرادات دور
رابین ،برخورد نسبی آن با فرآیندهای محدود به پردازنده و ورودی/خروجی است .به طور کلی ،یک فرآیند محدود به
ورودی/خروجی نسبت به یک فرآیند محدود به پردازنده ،یک انفجار پردازنده کوتاهتر میزان زمان صرف شده برای اجرای بین
عملیات ورودی/خروجی دارد .اگر ترکیبی از فرآیندهای محدود به پردازنده و ورودی/خروجی وجود داشته باشد ،موارد زیر اتفاق
501
سیستم عامل های داخلی و اصول طراحی502.........................................................................................................................
میافتد :یک فرآیند I/O-boundاز یک پردازنده برای مدت کوتاهی استفاده میکند و سپس برای I/Oمسدود میشود .منتظر
می ماند تا عملیات I/Oتکمیل شود و سپس به صف آماده می پیوندد .از سوی دیگر ،یک فرآیند محدود به پردازنده معموالً از
یک کوانتوم زمانی کامل در حین اجرا استفاده می کند و بالفاصله به صف آماده باز می گردد .بنابراین ،فرآیندهای محدود به
پردازنده تمایل دارند بخش ناعادالنه ای از زمان پردازنده را دریافت کنند ،که منجر به عملکرد ضعیف برای فرآیندهای محدود به
،I/Oاستفاده ناکارآمد از دستگاه های I/Oو افزایش واریانس زمان پاسخ می شود.
HALD91اصالحاتی را برای دور روبین پیشنهاد میکند که از آن به عنوان یک گردونه مجازی VRRیاد میکند و از این
بیعدالتی جلوگیری میکند .شکل 9.7این طرح را نشان می دهد .فرآیندهای جدید وارد می شوند و به صف آماده می پیوندند
که بر اساس FCFSمدیریت می شود .زمانی که یک فرآیند در حال اجرا به پایان برسد ،به صف آماده بازگردانده می شود.
هنگامی که یک فرآیند برای I/Oمسدود می شود ،به صف I/Oمی پیوندد .تا اینجای کار طبق معمول است.
502
سیستم عامل های داخلی و اصول طراحی503.........................................................................................................................
ویژگی جدید یک صف کمکی FCFSاست که فرآیندها پس از آزاد شدن از یک بلوک I/Oبه آن منتقل می شوند .زمانی که
قرار است تصمیمی برای دیسپاچینگ گرفته شود ،فرآیندهای موجود در صف کمکی نسبت به آنهایی که در صف آماده اصلی
هستند اولویت دارند .هنگامی که یک فرآیند از صف کمکی ارسال می شود ،بیش از زمانی برابر با کوانتوم اولیه منهای کل زمان
صرف شده در اجرا از آخرین باری که از صف آماده اصلی انتخاب شده است ،اجرا نمی شود .مطالعات عملکرد توسط نویسندگان
نشان میدهد که این رویکرد واقعاً از نظر انصاف برتر از دور روبین است.
کوتاهترین فرآیند بعدی رویکرد دیگری برای کاهش تعصب به نفع فرآیندهای طوالنی ذاتی در ،FCFSخطمشی کوتاهترین
فرآیند بعدی SPNاست .این یک خط مشی غیر پیشگیرانه است که در آن فرآیند با کمترین زمان پردازش مورد انتظار در
مرحله بعدی انتخاب می شود .بنابراین ،یک فرآیند کوتاه به سر صف از کارهای طوالنیتر میپرد.
شکل 9.5و جدول 9.5نتایج را برای مثال ما نشان می دهد .توجه داشته باشید که فرآیند Eخدمات را خیلی زودتر از FCFS
دریافت می کند .عملکرد کلی نیز از نظر زمان پاسخ به طور قابل توجهی بهبود یافته است .با این حال ،تنوع زمان پاسخ ،به ویژه
برای فرآیندهای طوالنی تر افزایش می یابد ،و بنابراین قابلیت پیش بینی کاهش می یابد.
یکی از مشکالت سیاست SPNنیاز به دانستن یا حداقل تخمین زمان پردازش مورد نیاز هر فرآیند است .برای کارهای دسته
ای ،سیستم ممکن است از برنامه نویس بخواهد که مقدار را تخمین بزند و آن را به سیستم عامل عرضه کند .اگر تخمین برنامه
نویس به میزان قابل توجهی کمتر از زمان اجرای واقعی باشد ،سیستم ممکن است کار را لغو کند .در یک محیط تولید ،مشاغل
503
سیستم عامل های داخلی و اصول طراحی504.........................................................................................................................
مشابه به طور مکرر اجرا می شوند و ممکن است آمار جمع آوری شود .برای فرآیندهای تعاملی ،سیستمعامل ممکن است
میانگین در حال اجرا هر « »burstرا برای هر فرآیند نگه دارد .ساده ترین محاسبه به صورت زیر خواهد بود:
زمان اجرای پردازنده Tiبرای نمونه دوم این فرآیند زمان اجرای کل برای کار دسته ای؛ زمان انفجار پردازنده برای کار تعاملی
Siمقدار را برای مثال iپیش بینی کرد .مقدار پیش بینی شده S1برای نمونه اول .محاسبه نشده است .برای جلوگیری از
محاسبه مجدد کل جمع در هر بار ،می توانیم معادله 9.1را به صورت بازنویسی کنیم.
توجه داشته باشید که به هر عبارت در این جمع وزن برابر داده می شود .یعنی هر جمله در همان ثابت n /1ضرب می شود .به
طور معمول ،ما میخواهیم به نمونههای اخیر اهمیت بیشتری بدهیم ،زیرا این موارد احتماالً رفتارهای آینده را منعکس میکنند.
یک تکنیک رایج برای پیشبینی یک مقدار آینده بر اساس یک سری زمانی از مقادیر گذشته ،میانگینگیری نمایی است:
که در آن aیک ضریب وزنی ثابت a 1 0است که وزن نسبی داده شده به مشاهدات اخیر را نسبت به مشاهدات قدیمی تر
تعیین می کند .با معادله 9.2مقایسه کنید .با استفاده از مقدار ثابت ،aمستقل از تعداد مشاهدات گذشته ،معادله 9.3تمام
مقادیر گذشته را در نظر می گیرد ،اما مقادیر کمتر اخیر را در نظر می گیرد.
وزن کمتری دارند برای اینکه این موضوع را واضح تر ببینید ،بسط زیر از معادله 9.3را در نظر بگیرید:
از آنجا که هر دو aو a 1کمتر از 1هستند ،هر جمله متوالی در معادله قبلی کوچکتر است .به عنوان مثال ،برای ،0.8معادله
9.4می شود
اندازه ضریب به عنوان تابعی از موقعیت آن در انبساط در شکل 9.8نشان داده شده است .هر چه مقدار aبزرگتر باشد ،وزن داده
شده به مشاهدات اخیر بیشتر است .برای ،0.8تقریباً تمام وزن به چهار مشاهدات اخیر داده می شود ،در حالی که برای ،0.2
504
سیستم عامل های داخلی و اصول طراحی505.........................................................................................................................
میانگین به طور موثر بر روی هشت یا بیشتر مشاهدات اخیر پخش می شود .مزیت استفاده از مقدار نزدیک به 1این است که
میانگین به سرعت تغییر سریع در کمیت مشاهده شده را منعکس می کند .درعیب آن این است که اگر یک موج کوتاه در مقدار
کمیت مشاهده شده وجود داشته باشد و سپس به مقداری متوسط برگردد ،استفاده از مقدار زیاد aمنجر به تغییرات ناگهانی در
میانگین می شود.
شکل 9.9میانگین گیری ساده را با میانگین نمایی برای دو مقدار متفاوت aمقایسه می کند .در شکل ،a9.9مقدار مشاهده
شده از 1شروع می شود ،به تدریج تا مقدار 10رشد می کند و سپس در آنجا باقی می ماند .در شکل ،b9.9مقدار مشاهده شده
از 20شروع می شود ،به تدریج به 10کاهش می یابد و سپس در آنجا باقی می ماند .در هر دو مورد ،ما با تخمین S1 0شروع
می کنیم .این به فرآیندهای جدید اولویت بیشتری می دهد .توجه داشته باشید که توان -میانگینگیری تغییرات رفتار فرآیند را
سریعتر از میانگینگیری ساده دنبال میکند و این که مقدار بزرگتر یک واکنش سریعتر به تغییر مقدار مشاهدهشده منجر
میشود.
خطر با SPNامکان گرسنگی برای فرآیندهای طوالنی تر است ،تا زمانی که یک منبع ثابت از فرآیندهای کوتاهتر وجود داشته
باشد .از سوی دیگر ،اگرچه SPNتعصب به نفع مشاغل طوالنیتر را کاهش میدهد ،اما به دلیل عدم وجود پیشپرداخت ،هنوز
برای یک محیط اشتراک زمانی یا پردازش تراکنش مطلوب نیست .با نگاهی به تحلیل بدترین حالت ما که در زیر FCFS
توضیح داده شد ،فرآیندهای Y ،X ،Wو Zهمچنان به همان ترتیب اجرا میشوند و فرآیند کوتاه Yرا به شدت جریمه
میکنند.
کوتاهترین زمان باقیمانده خط مشی کوتاهترین زمان باقیمانده SRTنسخه پیشگیرانه SPNاست .در این حالت،
زمانبندیکننده همیشه فرآیندی را انتخاب میکند که کمترین زمان مورد انتظار پردازش باقیمانده را داشته باشد .هنگامی که
یک فرآیند جدید به صف آماده می پیوندد ،در واقع ممکن است زمان باقی مانده کمتری نسبت به فرآیند در حال اجرا داشته
باشد .بر این اساس ،زمانبندیکننده ممکن است زمانی که یک فرآیند جدید آماده میشود ،از فرآیند فعلی جلوگیری کند .مانند
،SPNزمانبند باید تخمینی از زمان پردازش برای انجام عملکرد انتخاب داشته باشد و خطر گرسنگی فرآیندهای طوالنیتر
وجود دارد.
505
سیستم عامل های داخلی و اصول طراحی506.........................................................................................................................
SRTبه نفع فرآیندهای طوالنی موجود در FCFSتعصب ندارد .بر خالف دور رابین ،هیچ وقفه اضافی ایجاد نمی شود ،که
سربار را کاهش می دهد .از سوی دیگر ،زمانهای سرویس سپری شده باید ثبت شود که به سربار کمک میکندSRT .
همچنین باید عملکرد بهتری در زمان چرخش به SPNبدهد ،زیرا یک کار کوتاه به یک کار طوالنی تر ترجیح فوری داده می
شود.
توجه داشته باشید که در مثال ما جدول ،9.5سه کوتاهترین فرآیند ،همگی خدمات فوری دریافت میکنند ،که یک زمان
چرخش عادی برای هر یک از 1.0را ایجاد میکند.
506
سیستم عامل های داخلی و اصول طراحی507.........................................................................................................................
باالترین نسبت پاسخ بعدی در جدول ،9.5ما از زمان چرخش نرمال شده ،که نسبت زمان چرخش به زمان خدمات واقعی است،
به عنوان یک رقم شایستگی استفاده کرده ایم .برای هر فرآیند جداگانه ،ما میخواهیم این نسبت را به حداقل برسانیم ،و
میخواهیم مقدار متوسط را در تمام فرآیندها به حداقل برسانیم .به طور کلی ،ما نمیتوانیم از قبل بدانیم زمان سرویس چقدر
خواهد بود ،اما میتوانیم آن را بر اساس تاریخچه گذشته یا برخی ورودیهای کاربر یا یک مدیر پیکربندی تقریبی کنیم .نسبت
زیر را در نظر بگیرید:
اگر فرآیند با این مقدار فوراً ارسال شود R ،برابر با زمان چرخش عادی شده است .توجه داشته باشید که حداقل مقدار R 1.0
است که زمانی اتفاق می افتد که یک فرآیند برای اولین بار وارد سیستم می شود.
بنابراین ،قانون زمانبندی ما به صورت زیر میشود :هنگامی که فرآیند فعلی کامل شد یا مسدود شد ،فرآیند آماده را با بیشترین
مقدار Rانتخاب کنید .این رویکرد جذاب است زیرا سن فرآیند را محاسبه میکند .در حالی که مشاغل کوتاهتر مورد عالقه
هستند مخرج کوچکتر نسبت بیشتری را به همراه دارد ،پیری بدون خدمات این نسبت را افزایش میدهد به طوری که یک
فرآیند طوالنیتر در نهایت از مشاغل کوتاهتر رقابتی عبور میکند.
مانند SRTو ،SPNزمان خدمات مورد انتظار باید برای استفاده از باالترین نسبت پاسخ بعدی HRRNتخمین زده شود.
بازخورد اگر هیچ نشانه ای از طول نسبی فرآیندهای مختلف نداشته باشیم ،هیچ یک از SRT ،SPNو HRRNرا نمی توان
استفاده کرد .راه دیگر برای ایجاد اولویت برای مشاغل کوتاه تر ،جریمه کردن مشاغلی است که مدت طوالنی تری داشته اند .به
عبارت دیگر ،اگر نمیتوانیم روی زمان باقیمانده برای اجرا تمرکز کنیم ،بگذارید روی زمان صرف شده در اجرا تا کنون تمرکز
کنیم.
روش انجام این کار به شرح زیر است .زمانبندی بر مبنای پیشگیرانه در زمان کوانتومی انجام میشود و از مکانیزم اولویت پویا
استفاده میشود .هنگامی که یک فرآیند برای اولین بار وارد سیستم می شود ،در RQ0قرار می گیرد شکل 9.4را ببینید .پس
از اولین پیشپرداخت ،وقتی به حالت آماده برمیگردد ،در RQ1قرار میگیرد .هر بار بعدی که از قبل انتخاب می شود ،به صف
507
سیستم عامل های داخلی و اصول طراحی508.........................................................................................................................
با اولویت پایین بعدی تنزل می یابد .یک فرآیند کوتاه به سرعت تکمیل می شود ،بدون اینکه در سلسله مراتب صف های آماده
مهاجرت کند .یک فرآیند طوالنیتر به تدریج به سمت پایین حرکت میکند .بنابراین ،فرآیندهای جدیدتر و کوتاهتر بر
فرآیندهای قدیمیتر و طوالنیتر ترجیح داده میشوند .در هر صف ،به جز صف با کمترین اولویت ،یک مکانیسم ساده FCFS
استفاده می شود .هنگامی که در صف با کمترین اولویت قرار می گیرد ،یک فرآیند نمی تواند پایین تر برود ،اما به طور مکرر به
این صف بازگردانده می شود تا زمانی که اجرا کامل شود .بنابراین ،این صف به صورت گردونه رفتار می شود.
شکل 9.10مکانیسم زمانبندی بازخورد را با نشان دادن مسیری که یک فرآیند از طریق صفهای مختلف دنبال میکند ،نشان
میدهد .آن را به یکی از چندین صف اولویت باز می گرداند.
تعدادی از تغییرات در این طرح وجود دارد .یک نسخه ساده این است که پیشپرداخت را به همان روشی که برای دور روبین
انجام میشود انجام دهید :در فواصل دورهای .مثال ما این را نشان می دهد شکل 9.5و جدول 9.5برای کوانتوم یک واحد زمان.
توجه داشته باشید که در این مورد ،رفتار شبیه به دور رابین با کوانتوم زمانی q 1است.
یکی از مشکالت طرح ساده ای که اکنون به آن اشاره شد این است که زمان چرخش فرآیندهای طوالنی تر می تواند به طور
نگران کننده ای طوالنی شود .در واقع ،اگر مشاغل جدید به طور مکرر وارد سیستم شوند ،ممکن است گرسنگی رخ دهد .برای
جبران این ،میتوانیم زمانهای preemptionرا با توجه به صف تغییر دهیم :یک فرآیند برنامهریزیشده از RQ0مجاز است
برای یک واحد زمانی اجرا شود و سپس از پیش گرفته میشود .یک فرآیند برنامه ریزی شده از RQ1مجاز به اجرای دو واحد
زمانی و غیره است .به طور کلی ،یک فرآیند برنامه ریزی شده از RQiمجاز است که واحدهای زمانی q 2iرا قبل از
preemptionاجرا کند .این طرح برای مثال ما در شکل 9.5و جدول 9.5نشان داده شده است.
508
سیستم عامل های داخلی و اصول طراحی509.........................................................................................................................
حتی با توجه به تخصیص زمان بیشتر در اولویت کمتر ،یک فرآیند طوالنی تر ممکن است همچنان از گرسنگی رنج ببرد .یک راه
حل ممکن این است که یک فرآیند را پس از صرف زمان معینی در انتظار خدمات در صف فعلی خود ،به یک صف با اولویت
باالتر ارتقا دهید.
مقایسه عملکرد
واضح است که عملکرد سیاستهای زمانبندی مختلف یک عامل مهم در انتخاب یک سیاست زمانبندی است .با این حال ،انجام
مقایسه قطعی غیرممکن است زیرا عملکرد نسبی به عوامل مختلفی بستگی دارد ،از جمله توزیع احتمال زمانهای سرویس
فرآیندهای مختلف ،کارایی مکانیسمهای زمانبندی و تغییر زمینه ،و ماهیت I.تقاضای O/و عملکرد زیرسیستم I/O.با این
وجود ،در آنچه در ادامه میآید تالش میکنیم تا به برخی از نتایج کلی دست یابیم.
تجزیه و تحلیل صف در این بخش ،ما از فرمول های صف بندی اولیه ،با مفروضات رایج ورود پواسون و زمان خدمات نمایی
استفاده می کنیم.
ابتدا ،مشاهده میکنیم که هر رشته برنامهریزی که مورد بعدی را برای ارائه مستقل از زمان خدمات انتخاب میکند ،از رابطه زیر
تبعیت میکند:
Trزمان گردش یا زمان اقامت .کل زمان در سیستم ،انتظار به عالوه اجرا
استفاده از پردازنده
به طور خاص ،یک زمانبندی مبتنی بر اولویت ،که در آن اولویت هر فرآیند مستقل از زمان خدمات مورد انتظار تخصیص داده
میشود ،همان میانگین زمان چرخش و متوسط زمان چرخش عادی شده را به عنوان یک رشته ساده FCFSارائه میکند.
عالوه بر این ،وجود یا عدم وجود حق تقدم تفاوتی در این میانگین ها ایجاد نمی کند .به استثنای دوره گرد و ،FCFSرشتههای
زمانبندی مختلفی که تاکنون در نظر گرفته شدهاند ،بر اساس زمان خدمات مورد انتظار انتخاب میکنند .متأسفانه ،به نظر می
رسد که توسعه مدل های تحلیلی بسته از این رشته ها بسیار دشوار است .با این حال ،میتوانیم با در نظر گرفتن زمانبندی
اولویت که در آن اولویت بر اساس زمان سرویس است ،ایدهای از عملکرد نسبی چنین الگوریتمهای زمانبندی در مقایسه با
FCFSبه دست آوریم .اگر زمانبندی بر اساس اولویت انجام شود و اگر فرآیندها بر اساس زمان سرویس به یک کالس اولویت
509
سیستم عامل های داخلی و اصول طراحی510.........................................................................................................................
اختصاص داده شوند ،تفاوتها ظاهر میشوند .جدول 9.6فرمول هایی را نشان می دهد که وقتی دو کالس اولویت را با زمان
های مختلف سرویس برای هر کالس فرض می کنیم ،به دست می آیند .در جدول λ ،به نرخ ورود اشاره دارد .این نتایج را می
توان به هر تعداد از کالس های اولویت تعمیم داد .توجه داشته باشید که فرمول ها برای برنامه ریزی غیر پیشگیرانه در مقابل
برنامه ریزی پیشگیرانه متفاوت است .در مورد دوم ،فرض بر این است که یک فرآیند با اولویت پایینتر بالفاصله با آماده شدن
یک فرآیند با اولویت باالتر قطع میشود.
5. .5هیچ موردی از صف خارج نمی شود تماس های از دست رفته با تاخیر.
aفرمول های عمومی
l = l1 + l2
r1 = l1Ts1; r2 = l2Ts2
r = r1 + r2
l2 l1
Ts = l Ts1 + l Ts2
l2
l1
Tr = l Tr1 + l Tr2
بدون وقفه؛ زمان خدمات نمایی b نظم و انضباط صف پیشگیرانه-رزومه؛ زمان c
خدمات نمایی
r1Ts1 + r2Ts2 r1Ts1
Tr1 = Ts1 + 1+r Tr1 = Ts1 + 1 - r
1 1
Tr1 - Ts1
Tr2 = Ts2 + 1 - r T =T + 1 ar T + rTs b
510
سیستم عامل های داخلی و اصول طراحی511.........................................................................................................................
1-r
به عنوان مثال ،اجازه دهید مورد دو کالس اولویت را در نظر بگیریم ،با تعداد مساوی ورود فرآیند در هر کالس و با میانگین زمان
سرویس برای کالس با اولویت پایین تر ،پنج برابر کالس اولویت باال .بنابراین ،ما می خواهیم به فرآیندهای کوتاه تر اولویت
دهیم .شکل 9.11نتیجه کلی را نشان می دهد .با ارجحیت دادن به مشاغل کوتاهتر ،متوسط زمان چرخش عادی شده در سطوح
باالتر استفاده بهبود مییابد .همانطور که ممکن است انتظار می رود ،بهبود با استفاده از preemptionبیشتر است .با این حال
توجه داشته باشید که عملکرد کلی چندان تحت تأثیر قرار نمی گیرد.
با این حال ،زمانی که دو کالس اولویت را جداگانه در نظر می گیریم ،تفاوت های قابل توجهی ظاهر می شود .شکل 9.12نتایج
را برای فرآیندهای با اولویت باالتر و کوتاهتر نشان می دهد .برای مقایسه ،خط باالیی در نمودار فرض میکند که اولویتها
استفاده نمیشوند ،بلکه ما صرفاً به عملکرد نسبی نیمی از تمام فرآیندهایی که زمان پردازش کوتاهتری دارند ،نگاه میکنیم .دو
خط دیگر فرض می کنند که این فرآیندها اولویت بیشتری دارند .هنگامی که سیستم با استفاده از زمانبندی اولویت بدون
پیشپرداخت اجرا میشود ،پیشرفتها قابل توجه هستند .زمانی که از پیشپرداخت استفاده میشود ،اهمیت بیشتری دارند.
511
سیستم عامل های داخلی و اصول طراحی512.........................................................................................................................
شکل 9.13همان تحلیل را برای فرآیندهای با اولویت پایین تر و طوالنی تر نشان می دهد .همانطور که انتظار می رود ،چنین
فرآیندهایی تحت برنامه ریزی اولویت ها دچار افت عملکرد می شوند.
مدلسازی شبیهسازی برخی از مشکالت مدلسازی تحلیلی با استفاده از شبیهسازی رویداد گسسته ،که امکان مدلسازی طیف
وسیعی از سیاستها را فراهم میکند ،برطرف میشوند .عیب شبیهسازی این است که نتایج برای یک «اجرای» معین فقط برای
مجموعه خاصی از فرآیندها تحت آن مجموعه مفروضات خاص اعمال میشود .با این وجود ،می توان به بینش های مفیدی دست
یافت.
نتایج یکی از این مطالعات در FINK88گزارش شده است .این شبیه سازی شامل 50000فرآیند با نرخ رسیدن λ 0.8و
میانگین زمان سرویس Ts 1بود .بنابراین ،فرض این است که استفاده از پردازنده r = lTs 0.8است .بنابراین توجه داشته
باشید که ما فقط یک نقطه استفاده را اندازه گیری می کنیم.
512
سیستم عامل های داخلی و اصول طراحی513.........................................................................................................................
برای ارائه نتایج ،فرآیندها در صدکهای زمان خدمت دستهبندی میشوند که هر کدام دارای 500فرآیند است .بنابراین500 ،
فرآیند با کمترین زمان خدمات در صدک اول قرار دارند .با حذف این موارد 500 ،فرآیند باقی مانده با کمترین زمان خدمات در
صدک دوم قرار دارند .و غیره این به ما اجازه می دهد تا تأثیر سیاست های مختلف بر فرآیندها را به عنوان تابعی از طول فرآیند
مشاهده کنیم.
شکل 9.14زمان چرخش عادی شده را نشان می دهد و شکل 9.15میانگین زمان انتظار را نشان می دهد .با نگاهی به زمان
چرخش ،میتوانیم ببینیم که عملکرد FCFSبسیار نامطلوب است ،به طوری که یک سوم فرآیندها دارای زمان چرخش عادی
بیش از 10برابر زمان سرویس هستند .عالوه بر این ،اینها کوتاه ترین فرآیندها هستند .از سوی دیگر ،زمان انتظار مطلق
یکنواخت است ،همانطور که انتظار می رود زیرا زمان بندی مستقل از زمان خدمات است .شکلها دور رابین را با استفاده از
کوانتوم واحد زمان نشان میدهند .بهجز کوتاهترین فرآیندها ،که در کمتر از یک کوانتومی اجرا میشوند ،دور رابین زمان
چرخش نرمالشدهای در حدود پنج را برای همه فرآیندها به دست میآورد که با همه آنها منصفانه رفتار میکندShortest .
Processبعدی بهتر از دور رابین عمل می کند ،به جز کوتاه ترین فرآیندها .کوتاهترین زمان باقیمانده ،نسخه پیشگیرانه
،SPNبهتر از SPNعمل میکند به جز طوالنیترین 7درصد از تمام فرآیندها .دیدهایم که در میان سیاستهای غیر
پیشگیرانه FCFS ،از فرآیندهای طوالنی و SPNاز فرآیندهای کوتاه حمایت میکند .باالترین نسبت پاسخ بعدی به عنوان
مصالحه بین این دو اثر در نظر گرفته شده است و این در واقع در ارقام تأیید شده است .در نهایت ،شکل ،زمانبندی بازخورد با
کوانتومهای ثابت و یکنواخت در هر صف اولویت را نشان میدهد .همانطور که انتظار می رود FB ،برای فرآیندهای کوتاه بسیار
خوب عمل می کند.
513
سیستم عامل های داخلی و اصول طراحی514.........................................................................................................................
همه الگوریتمهای زمانبندی که تاکنون مورد بحث قرار گرفتهاند ،مجموعه فرآیندهای آماده را به عنوان یک مجموعه واحد از
فرآیندها در نظر میگیرند که از میان آنها میتوان فرآیند در حال اجرا بعدی را انتخاب کرد .این مجموعه ممکن است بر اساس
اولویت شکسته شود ،اما در غیر این صورت همگن است.
با این حال ،در یک سیستم چندکاربره ،اگر برنامهها یا کارهای کاربر فردی ممکن است بهعنوان چندین فرآیند یا رشتهها
سازماندهی شوند ،ساختاری برای مجموعهای از فرآیندها وجود دارد که توسط یک زمانبندی سنتی تشخیص داده نمیشود .از
دیدگاه کاربر ،نگرانی این نیست که یک فرآیند خاص چگونه انجام می شود ،بلکه این نگرانی است که چگونه مجموعه فرآیندهای
او که یک برنامه کاربردی را تشکیل می دهند ،انجام می شود .بنابراین ،اتخاذ تصمیمات زمانبندی بر اساس این مجموعه
فرآیندها جذاب خواهد بود .این رویکرد به طور کلی به عنوان زمان بندی سهام منصفانه شناخته می شود .عالوه بر این ،این
مفهوم را می توان به گروه هایی از کاربران تعمیم داد ،حتی اگر هر کاربر توسط یک فرآیند واحد نمایش داده شود .برای مثال،
در یک سیستم اشتراک زمانی ،ممکن است بخواهیم همه کاربران یک بخش معین را اعضای یک گروه در نظر بگیریم .سپس می
توان تصمیمات زمان بندی را اتخاذ کرد که سعی شود به هر گروه خدمات مشابهی ارائه شود .بنابراین ،اگر تعداد زیادی از افراد
از یک بخش وارد سیستم شوند ،مایلیم شاهد کاهش زمان پاسخگویی در درجه اول بر اعضای آن بخش باشیم تا کاربران سایر
بخشها.
اصطالح سهم منصفانه نشان دهنده فلسفه پشت چنین زمانبندی است .به هر کاربر یک نوع وزن اختصاص داده می شود که
سهم آن کاربر از منابع سیستم را به عنوان کسری از کل استفاده از آن منابع تعریف می کند .به طور خاص ،به هر کاربر سهمی
از پردازنده اختصاص داده می شود .چنین طرحی باید به شکلی کم و بیش خطی عمل کند ،به طوری که اگر وزن کاربر Aدو
برابر کاربر Bباشد ،در دراز مدت کاربر Aباید بتواند دو برابر کاربر Bکار کند .یک زمانبندی اشتراک منصفانه ،نظارت بر
514
سیستم عامل های داخلی و اصول طراحی515.........................................................................................................................
استفاده است تا منابع کمتری را به کاربرانی که بیشتر از سهم منصفانه خود داشتهاند و بیشتر به کسانی که کمتر از سهم
منصفانه خود داشتهاند ،بدهد.
تعدادی پیشنهاد برای زمانبندی های سهام منصفانه WOOD86 ،KAY88 ،HENR84ارائه شده است .در این بخش ،طرح
پیشنهادی در HENR84و پیادهسازی شده در تعدادی از سیستمهای یونیکس را شرح میدهیم .این طرح به سادگی به عنوان
زمانبندی سهم منصفانه FSSنامیده می شود FSS .تاریخچه اجرای یک گروه مرتبط از فرآیندها را به همراه تاریخچه اجرای
فردی هر فرآیند در تصمیم گیری های زمان بندی در نظر می گیرد .این سیستم جامعه کاربران را به مجموعهای از گروههای
دارای اشتراک منصفانه تقسیم میکند و کسری از منابع پردازنده را به هر گروه اختصاص میدهد .بنابراین ،ممکن است چهار
گروه وجود داشته باشد که هر کدام 25درصد از پردازنده را مصرف می کنند .در واقع ،هر گروه دارای سهم منصفانه دارای یک
سیستم مجازی است که نسبتاً کندتر از یک سیستم کامل اجرا می شود.
زمانبندی بر اساس اولویت انجام میشود ،که اولویت اصلی فرآیند ،استفاده اخیر پردازنده آن ،و استفاده اخیر پردازنده گروهی
که فرآیند به آن تعلق دارد را در نظر میگیرد .هر چه مقدار عددی اولویت بیشتر باشد ،اولویت کمتر است .فرمول های زیر برای
فرآیند jدر گروه kاعمال می شود:
CPUj1i2اندازه گیری استفاده از پردازنده توسط فرآیند jتا بازه i GCPUk1i2اندازه گیری استفاده از پردازنده گروه kتا
بازه Pj1i2 iاولویت فرآیند jدر ابتدای بازه i.مقادیر کمتر اولویت های باالتر برابر Basejاولویت پایه فرآیند Wk j
اولویت هر فرآیند یک بار در ثانیه محاسبه می شود و در آن زمان یک تصمیم زمان بندی جدید گرفته می شود .هدف از اولویت
پایه تقسیم تمام فرآیندها به باندهای ثابت سطوح اولویت است CPU .و اجزای خوب برای جلوگیری از مهاجرت یک فرآیند به
خارج از باند اختصاص داده شده تخصیص یافته توسط سطح اولویت پایه محدود شده اند .این باندها برای بهینهسازی دسترسی
به دستگاههای مسدود مانند دیسک و اجازه دادن به سیستم عامل برای پاسخ سریع به تماسهای سیستم استفاده میشوند .به
ترتیب اولویت ،باندها عبارتند از:
-مبادله کننده
515
سیستم عامل های داخلی و اصول طراحی516.........................................................................................................................
-دستکاری فایل
-فرآیندهای کاربر
این سلسله مراتب باید کارآمدترین استفاده را از دستگاه های ورودی/خروجی فراهم کند .در باند فرآیند کاربر ،استفاده از
تاریخچه اجرا باعث جریمه کردن فرآیندهای محدود به پردازشگر به قیمت فرآیندهای I/O-Boundمی شود .باز هم ،این باید
کارایی را بهبود بخشد .همراه با طرح پیشگیرانه دور رفت ،استراتژی زمانبندی به خوبی مجهز است تا الزامات اشتراک زمانی همه
منظوره را برآورده کند.
نمونه ای از زمان بندی فرآیند در شکل 9.17نشان داده شده است .فرآیندهای B ،Aو Cهمزمان با اولویت های پایه 60ایجاد
می شوند مقدار خوب را نادیده می گیریم .ساعت سیستم را 60بار در ثانیه قطع می کند و یک شمارنده برای فرآیند در حال
اجرا افزایش می دهد .مثال فرض می کند که هیچ یک از فرآیندها خود را مسدود نمی کنند و هیچ فرآیند دیگری آماده اجرا
نیست .این را با شکل 9.16مقایسه کنید.وزن دادن به گروه ،kبا محدودیت که و 6 0هفته 1 ...و هفته = 1به هر فرآیند یک
اولویت پایه اختصاص داده شده است .با استفاده از پردازشگر و گروهی که فرآیند به آن تعلق دارد از پردازنده استفاده می کند،
اولویت یک فرآیند کاهش می یابد .در مورد استفاده از گروه ،میانگین با تقسیم بر وزن آن گروه نرمال می شود .هر چه وزن
تخصیص داده شده به گروه بیشتر باشد ،میزان استفاده از آن کمتر بر اولویت آن تأثیر می گذارد.
شکل 9.16مثالی است که در آن فرآیند Aدر یک گروه و فرآیندهای Bو Cدر گروه دوم قرار دارند که وزن هر گروه 0.5
است .فرض کنید همه فرآیندها محدود به پردازنده هستند و معموالً آماده اجرا هستند .همه فرآیندها دارای اولویت پایه 60
هستند .استفاده از پردازنده به صورت زیر اندازه گیری می شود :پردازنده 60بار در ثانیه قطع می شود .در طول هر وقفه ،زمینه
استفاده از پردازنده در فرآیند در حال اجرا ،همانند زمینه پردازشگر گروه مربوطه ،افزایش مییابد .یک بار در ثانیه ،اولویت ها
دوباره محاسبه می شوند.
در شکل ،فرآیند Aابتدا برنامه ریزی شده است .در پایان یک ثانیه ،از پیش گرفته می شود .فرآیندهای Bو Cاکنون اولویت
باالتری دارند و فرآیند Bبرنامه ریزی شده است .در پایان واحد زمان دوم ،فرآیند Aباالترین اولویت را دارد .توجه داشته باشید
که الگو تکرار می شود :هسته فرآیندها را به ترتیب برنامه ریزی می کند B ،A ،C ،A ،B ،A :و غیره .بنابراین 50درصد
پردازنده به پردازش Aکه یک گروه را تشکیل می دهد و 50درصد به فرآیندهای Bو Cکه گروه دیگری را تشکیل می دهند
اختصاص می یابد.
516
سیستم عامل های داخلی و اصول طراحی517.........................................................................................................................
در این بخش به بررسی زمانبندی سنتی یونیکس میپردازیم که در یونیکس SVR3و BSD 4.3استفاده میشود .این
سیستم ها در درجه اول در محیط تعاملی اشتراک گذاری زمانی هدف قرار می گیرند .الگوریتم زمانبندی به گونهای طراحی
شده است که زمان پاسخگویی خوبی را برای کاربران تعاملی فراهم کند و در عین حال اطمینان حاصل کند که کارهای
پسزمینه با اولویت پایین گرسنه نمیمانند .اگرچه این الگوریتم در سیستمهای یونیکس مدرن جایگزین شده است ،ارزش
بررسی این رویکرد را دارد زیرا نشاندهنده الگوریتمهای زمانبندی اشتراک زمانی عملی است .طرح زمانبندی برای SVR4
شامل یک تطبیق برای نیازمندیهای زمان حقیقی است ،و بنابراین بحث آن به فصل 10موکول میشود.
زمانبندی سنتی یونیکس از بازخورد چند سطحی با استفاده از روش گرد در هر یک از صفهای اولویتدار استفاده میکند .این
سیستم از پیشپرداخت یک ثانیهای استفاده میکند .به این معنا که اگر یک فرآیند در حال اجرا در عرض یک ثانیه مسدود یا
کامل نشود ،از قبل جلوگیری می شود .اولویت بر اساس نوع فرآیند و سابقه اجرا است .فرمول های زیر اعمال می شود:
517
سیستم عامل های داخلی و اصول طراحی518.........................................................................................................................
CPUj1i2اندازه گیری استفاده از پردازنده توسط فرآیند jتا بازه Pj1i2 iاولویت فرآیند jدر ابتدای بازه i.مقادیر کمتر برابر
با اولویت های باالتر Basejاولویت پایه فرآیند nicej jضریب تنظیم قابل کنترل توسط کاربر اولویت هر فرآیند یک بار در
ثانیه محاسبه می شود و در آن زمان یک تصمیم زمان بندی جدید گرفته می شود .هدف از اولویت پایه تقسیم تمام فرآیندها به
باندهای ثابت سطوح اولویت است CPU .و اجزای خوب برای جلوگیری از مهاجرت یک فرآیند به خارج از باند اختصاص داده
شده تخصیص یافته توسط سطح اولویت پایه محدود شده اند .این باندها برای بهینهسازی دسترسی به دستگاههای مسدود مانند
دیسک و اجازه دادن به سیستم عامل برای پاسخ سریع به تماسهای سیستم استفاده میشوند .به ترتیب اولویت ،باندها عبارتند
از:
-مبادله کننده
-دستکاری فایل
-فرآیندهای کاربر
این سلسله مراتب باید کارآمدترین استفاده را از دستگاه های ورودی/خروجی فراهم کند .در باند فرآیند کاربر ،استفاده از
تاریخچه اجرا باعث جریمه کردن فرآیندهای محدود به پردازشگر به قیمت فرآیندهای I/O-Boundمی شود .باز هم ،این باید
کارایی را بهبود بخشد .همراه با طرح پیشگیرانه دور رفت ،استراتژی زمانبندی به خوبی مجهز است تا الزامات اشتراک زمانی همه
منظوره را برآورده کند.
نمونه ای از زمان بندی فرآیند در شکل 9.17نشان داده شده است .فرآیندهای B ،Aو Cهمزمان با اولویت های پایه 60ایجاد
می شوند مقدار خوب را نادیده می گیریم .ساعت سیستم را 60بار در ثانیه قطع می کند و یک شمارنده برای فرآیند در حال
اجرا افزایش می دهد .مثال فرض می کند که هیچ یک از فرآیندها خود را مسدود نمی کنند و هیچ فرآیند دیگری آماده اجرا
نیست .این را با شکل 9.16مقایسه کنید.
518
سیستم عامل های داخلی و اصول طراحی519.........................................................................................................................
9.4خالصه
سیستم عامل باید سه نوع تصمیم زمان بندی را در رابطه با اجرای فرآیندها اتخاذ کند .زمانبندی بلندمدت تعیین میکند که
چه زمانی فرآیندهای جدید در سیستم پذیرفته میشوند .زمانبندی میانمدت بخشی از تابع مبادله است و تعیین میکند که
یک برنامه به طور جزئی یا کامل در حافظه اصلی آورده شود تا بتوان آن را اجرا کرد .زمانبندی کوتاهمدت تعیین میکند که
کدام فرآیند آماده بعدی توسط پردازنده اجرا شود .این فصل بر روی مسائل مربوط به برنامه ریزی کوتاه مدت تمرکز دارد.
معیارهای مختلفی در طراحی زمانبندی کوتاه مدت استفاده می شود .برخی از این معیارها مربوط به رفتار سیستم است که
توسط کاربر فردی کاربر محور درک می شود ،در حالی که برخی دیگر اثربخشی کلی سیستم را در برآوردن نیازهای همه
کاربران سیستم محور می بینند .برخی از معیارها به طور خاص به معیارهای کمی عملکرد مربوط می شوند ،در حالی که برخی
دیگر ماهیت کیفی دارند .از دیدگاه کاربر ،زمان پاسخ به طور کلی مهمترین ویژگی یک سیستم است ،در حالی که از دیدگاه
سیستم ،توان عملیاتی یا استفاده از پردازنده مهم است.
الگوریتمهای مختلفی برای تصمیمگیری برنامهریزی کوتاهمدت در بین تمام فرآیندهای آماده توسعه داده شده است:
First-Come-First-served: -فرآیندی را انتخاب کنید که طوالنی ترین زمان را برای سرویس دهی منتظر بوده است.
519
سیستم عامل های داخلی و اصول طراحی520.........................................................................................................................
Round Robin: -از برش زمان استفاده کنید تا هر فرآیند در حال اجرا را به مدت کوتاهی از زمان پردازنده محدود کنید و
بین تمام فرآیندهای آماده بچرخید.
-کوتاهترین فرآیند بعدی :فرآیندی را با کوتاهترین زمان پردازش مورد انتظار انتخاب کنید و از انجام فرآیند جلوگیری نکنید.
-کوتاهترین زمان باقیمانده :فرآیندی را با کمترین زمان باقیمانده مورد انتظار انتخاب کنید .هنگامی که فرآیند دیگری آماده
می شود ،ممکن است از یک فرآیند جلوگیری شود.
-باالترین نسبت پاسخ بعدی :تصمیم برنامه ریزی را بر اساس تخمین زمان چرخش نرمال شده قرار دهید.
-بازخورد :مجموعه ای از صف های زمان بندی را ایجاد کنید و فرآیندها را بر اساس تاریخچه اجرا و سایر معیارها به صف ها
تخصیص دهید.
انتخاب الگوریتم زمانبندی به عملکرد مورد انتظار و پیچیدگی اجرا بستگی دارد.
تصاویر متحرک
مجموعه ای از انیمیشن که مفاهیم این فصل را نشان می دهد در وب سایت Premiumموجود است .خواننده تشویق می شود
که انیمیشن ها را برای تقویت مفاهیم این فصل مشاهده کند.
520
سیستم عامل های داخلی و اصول طراحی521.........................................................................................................................
کلمات کلیدی
بررسی سواالت
.9.4برای زمانبندی فرآیند ،آیا یک مقدار با اولویت پایین نشاندهنده اولویت کم است یا یک اولویت باال؟
چالش ها و مسائل
آ .برنامه را با استفاده از کوتاهترین زمان باقیمانده ،اولویت غیر پیشگیرانه تعداد اولویت کوچکتر نشاندهنده اولویت باالتر و دور
دور با کوانتومی 30میلیثانیه نشان دهید .از نمودار مقیاس زمانی همانطور که در زیر نشان داده شده است برای مثال FCFS
برای نشان دادن زمانبندی برای هر خط مشی زمانبندی درخواستی استفاده کنید.
ب میانگین زمان انتظار سیاست های زمان بندی فوق چقدر است؟
.9.3ثابت کنید که در بین الگوریتمهای زمانبندی غیرپیشگیرانه SPN ،حداقل میانگین زمان انتظار را برای دستهای از
کارهایی که در همان زمان میرسند ارائه میکند .فرض کنید که زمانبندی باید همیشه یک کار را در صورت در دسترس بودن
اجرا کند.
.9.4الگوی زمان پشت سر هم زیر را برای یک فرآیند فرض کنید ،13 ،13 ،13 ،4 ،6 ،4 ،6 :و فرض کنید که حدس اولیه 10
است .نموداری شبیه به نمودار 9.9تولید کنید.
.9.5جفت معادله زیر را به عنوان جایگزینی برای معادله 9.3در نظر بگیرید:
که در آن Uboundو Lboundکران های باال و پایین از قبل بر روی مقدار تخمینی Tانتخاب شده اند .مقدار Xn + 1به
جای مقدار Sn + 1در الگوریتم کوتاهترین فرآیند بعدی استفاده می شود a .و bچه توابعی را انجام می دهند ، .و مقادیر باالتر
و پایین تر چه تأثیری بر هر کدام دارد؟
.9.6در مثال پایین در شکل ،9.5فرآیند Aبرای دو واحد زمانی اجرا می شود قبل از اینکه کنترل به پردازش Bداده شود.
سناریوی قابل قبول دیگر این است که Aبرای سه واحد زمانی اجرا شود قبل از اینکه کنترل به پردازش Bمنتقل شود .آیا
الگوریتم زمانبندی دو سناریو مختلف را محاسبه می کند؟
.9.7در یک سیستم تک پردازنده غیر پیشگیرانه ،صف آماده شامل سه کار در زمان tبالفاصله پس از اتمام یک کار است .این
کارها به ترتیب در زمانهای t2 ،t1و t3با زمانهای اجرای تخمینی r2 ،r1و r3وارد شدند .شکل 9.18افزایش خطی نسبت
پاسخ آنها را در طول زمان نشان می دهد .از این مثال برای یافتن گونهای از زمانبندی نسبت پاسخ ،معروف به زمانبندی نسبت
پاسخ حداقلی ،استفاده کنید که حداکثر نسبت پاسخ را برای یک دسته معین از کارها به حداقل میرساند ،بدون توجه به
ورودیهای بعدی .نکته :ابتدا تصمیم بگیرید که کدام کار را به عنوان آخرین کار برنامه ریزی کنید.
523
سیستم عامل های داخلی و اصول طراحی524.........................................................................................................................
.9.8ثابت کنید که الگوریتم نسبت پاسخ حداکثری مسئله قبل ،حداکثر نسبت پاسخ را برای یک دسته معین از کارها به حداقل
می رساند .نکته :توجه را روی کاری متمرکز کنید که باالترین نسبت پاسخ را به دست میآورد و تمام کارهایی که قبل از آن
اجرا شدهاند .همان زیرمجموعه کارهایی را که به ترتیب دیگر برنامهریزی شدهاند در نظر بگیرید و نسبت پاسخ کاری را که به
عنوان آخرین کار اجرا شده در میان آنها مشاهده کنید .توجه داشته باشید که این زیر مجموعه اکنون ممکن است با کارهای
دیگر از کل مجموعه ترکیب شود.
.9.9زمان اقامت Trرا به عنوان میانگین کل زمانی که یک فرآیند صرف انتظار و ارائه خدمات می کند ،تعریف کنید .نشان
دهید که برای ،FIFOبا میانگین زمان سرویس Tr Ts/11 - r2 ،Tsرا داریم ،که rاستفاده است.
.9.10یک پردازنده با سرعت بی نهایت در بین تمام فرآیندهای موجود در یک صف آماده و بدون سربار مالتی پلکس می شود.
این یک مدل ایدهآل از زمانبندی چرخشی در میان فرآیندهای آماده با استفاده از برشهای زمانی است که در مقایسه با
میانگین زمان سرویس بسیار کوچک هستند .نشان دهید که برای ورودی پواسون از یک منبع نامتناهی با زمانهای سرویس
نمایی ،میانگین زمان پاسخ Rxیک فرآیند با زمان سرویس xداده شده است
توسط Rx = x/11 - r2.نکته :معادالت اولیه صف را در ضمیمه Hیا فصل 20مرور کنید .سپس تعداد آیتم های منتظرw ،
را در سیستم در هنگام ورود در نظر بگیرید.
.9.11گونه ای از الگوریتم زمان بندی RRرا در نظر بگیرید که در آن ورودی های صف آماده نشانگر PCBها هستند.
آ .قرار دادن دو اشاره گر برای یک فرآیند در صف آماده چه تاثیری خواهد داشت؟
ج چگونه می توانید الگوریتم اصلی RRرا برای دستیابی به همان اثر بدون اشاره گرهای تکراری تغییر دهید؟
524
سیستم عامل های داخلی و اصول طراحی525.........................................................................................................................
.9.12در سیستم نوبت دهی ،مشاغل جدید قبل از ارائه خدمات باید مدتی منتظر بمانند .در حالی که یک کار منتظر می ماند،
اولویت آن به صورت خطی با زمان از صفر با نرخ aافزایش می یابد .یک شغل صبر می کند تا اولویت آن به اولویت مشاغل در
خدمت برسد .سپس ،شروع به اشتراک گذاری یکسان پردازشگر با سایر مشاغل در سرویس با استفاده از دور دور می کند در
حالی که اولویت آن با سرعت کمتری افزایش می یابد .این الگوریتم به عنوان دور خودخواه نامیده می شود ،زیرا
مشاغل در سرویس بیهوده سعی می کنند با افزایش پیشین خود پردازنده را در انحصار خود در آورند.
به طور مداوم از شکل 9.19استفاده کنید تا نشان دهید که میانگین زمان پاسخ Rxبرای یک کار از زمان سرویس xبه صورت
زیر داده می شود:
با فرض اینکه زمان رسیدن و سرویس به ترتیب با میانگین های λ/1و sبه صورت نمایی توزیع شده اند .نکته :کل سیستم و دو
زیرسیستم را جداگانه در نظر بگیرید.
.9.13یک سیستم تعاملی با استفاده از زمانبندی و مبادله دورهای سعی میکند به درخواستهای بیاهمیت پاسخ تضمینی
بدهد :پس از تکمیل یک چرخه دور برگشتی در بین تمام فرآیندهای آماده ،سیستم برش زمانی را برای تخصیص به هر فرآیند
آماده برای فرآیند بعدی تعیین میکند .چرخه با تقسیم حداکثر زمان پاسخ بر تعداد فرآیندهایی که نیاز به سرویس دارند .آیا
این یک سیاست معقول است؟
525
سیستم عامل های داخلی و اصول طراحی526.........................................................................................................................
.9.14کدام نوع فرآیند معموالً توسط یک زمانبندی صف بازخورد چندسطحی ترجیح داده میشود -یک فرآیند محدود به
پردازنده یا یک فرآیند محدود به I/O؟ به طور خالصه دلیل آن را توضیح دهید.
.9.15در زمانبندی فرآیند مبتنی بر اولویت ،زمانبند تنها در صورتی به فرآیند خاصی کنترل میکند که هیچ فرآیند دیگری با
اولویت باالتر در حال حاضر در حالت آماده نباشد .فرض کنید هیچ اطالعات دیگری در تصمیم گیری زمان بندی فرآیند استفاده
نمی شود .همچنین فرض کنید که اولویت های فرآیند در زمان ایجاد فرآیند ایجاد می شوند و تغییر نمی کنند .در سیستمی که
با چنین مفروضاتی کار می کند ،چرا استفاده از راه حل دکر به بخش A.1مراجعه کنید برای مشکل محرومیت متقابل
"خطرناک" است؟ این را با بیان اینکه چه رویداد نامطلوبی ممکن است رخ دهد و چگونه ممکن است رخ دهد ،توضیح دهید.
.9.16پنج کار دسته ای ،از Aتا ،Eاساساً در یک زمان به مرکز رایانه می رسند .زمان اجرای آنها به ترتیب 6 ،3 ،9 ،15و 12
دقیقه برآورد شده است .اولویتهای آنها تعریفشده خارجی به ترتیب 9 ،7 ،3 ،6و 4است که مقدار کمتری مطابق با اولویت
باالتر است .برای هر یک از الگوریتمهای زمانبندی زیر ،زمان چرخش را برای هر فرآیند و میانگین چرخش را برای همه کارها
تعیین کنید .سربار تعویض فرآیند را نادیده بگیرید .توضیح دهید که چگونه به پاسخ های خود رسیده اید .در سه مورد آخر،
فرض کنید که تنها یک کار در هر زمان اجرا می شود تا زمانی که تمام شود و همه کارها کامالً به پردازشگر محدود می شوند.
آ .دور رابین با کوانتوم زمانی 1دقیقه /ب برنامه ریزی اولویت /ج FCFSاجرا به ترتیب 6 ،3 ،9 ،15و /12د اول کوتاه ترین
کار
526
سیستم عامل های داخلی و اصول طراحی527.........................................................................................................................
فصل 10
ویژگی های سیستم عامل های بالدرنگ زمان بندی زمان حقیقی
527
سیستم عامل های داخلی و اصول طراحی528.........................................................................................................................
10.7خالصه
اهداف یادگیری
-در مورد مسائل طراحی کلیدی در زمانبندی رشته چندپردازنده و برخی از رویکردهای کلیدی زمانبندی بحث کنید.
-روش های زمان بندی مورد استفاده در لینوکس ،یونیکس SVR4و ویندوز 7را توضیح دهید.
این فصل به بررسی ما در مورد زمانبندی فرآیند و موضوع ادامه میدهد .ما با بررسی مسائل ناشی از در دسترس بودن بیش از
یک پردازنده شروع می کنیم .تعدادی از مسائل طراحی بررسی شده است .به دنبال آن نگاهی به زمان بندی فرآیندها در یک
سیستم چند پردازنده ای خواهیم داشت .سپس مالحظات طراحی تا حدودی متفاوت برای زمانبندی رشته چندپردازنده بررسی
میشوند .بخش دوم این فصل به زمانبندی بالدرنگ میپردازد .این بخش با بحث در مورد ویژگی های فرآیندهای بالدرنگ
شروع می شود و سپس به ماهیت فرآیند زمان بندی می پردازد .دو رویکرد به زمانبندی بالدرنگ ،زمانبندی مهلت و زمانبندی
یکنواخت نرخ ،بررسی میشوند.
هنگامی که یک سیستم کامپیوتری شامل بیش از یک پردازنده باشد ،چندین مسئله جدید در طراحی تابع زمانبندی مطرح می
شود .ما با یک مرور مختصر از چند پردازنده شروع می کنیم و سپس به مالحظات نسبتاً متفاوت زمانی که زمان بندی در سطح
فرآیند و در سطح رشته انجام می شود نگاه می کنیم.
ما می توانیم سیستم های چند پردازنده ای را به صورت زیر طبقه بندی کنیم:
-چند پردازنده یا خوشه با جفت یا توزیع آزاد :از مجموعه ای از سیستم های نسبتاً مستقل تشکیل شده است که هر پردازنده
حافظه اصلی و کانال های ورودی/خروجی خود را دارد .ما به این نوع پیکربندی در فصل 16می پردازیم.
528
سیستم عامل های داخلی و اصول طراحی529.........................................................................................................................
-پردازنده های تخصصی کاربردی :به عنوان مثال یک پردازنده I/Oاست .در این مورد ،یک پردازنده اصلی و همه منظوره وجود
دارد .پردازنده های تخصصی توسط پردازنده اصلی کنترل می شوند و به آن خدمات ارائه می دهند .مسائل مربوط به پردازنده
های ورودی/خروجی در فصل 11بررسی شده است.
-چندپردازنده محکم جفت شده :از مجموعه ای از پردازنده ها تشکیل شده است که یک حافظه اصلی مشترک دارند و تحت
کنترل یکپارچه یک سیستم عامل هستند.
نگرانی ما در این بخش مربوط به آخرین دسته و به طور خاص در مورد مسائل مربوط به زمان بندی است.
یک راه خوب برای مشخص کردن چند پردازنده ها و قرار دادن آنها در زمینه با معماری های دیگر ،در نظر گرفتن دانه بندی
همگام سازی یا فرکانس همگام سازی بین فرآیندهای یک سیستم است .ما می توانیم پنج دسته موازی را که در درجه دانه
بندی متفاوت هستند تشخیص دهیم .این موارد در جدول 10.1خالصه شده است.
پردازش توزیع شده در گره های شبکه برای تشکیل خیلی درشت –2,000
یک محیط محاسباتی واحد 1M
529
سیستم عامل های داخلی و اصول طراحی530.........................................................................................................................
موازی سازی مستقل با موازی سازی مستقل ،هیچ هماهنگی صریحی بین فرآیندها وجود ندارد .هر یک نشان دهنده یک برنامه
یا شغل مستقل و جداگانه است .یک استفاده معمولی از این نوع موازی سازی در سیستم اشتراک زمانی است .هر کاربر در حال
انجام یک برنامه خاص مانند پردازش کلمه یا استفاده از صفحه گسترده است .چند پردازنده همان خدماتی را ارائه می دهد که
یک تک پردازنده چندبرنامه شده است .از آنجایی که بیش از یک پردازنده در دسترس است ،میانگین زمان پاسخگویی به
کاربران کمتر خواهد بود.
می توان با ارائه یک رایانه شخصی یا ایستگاه کاری برای هر کاربر به افزایش عملکرد مشابهی دست یافت .اگر قرار است هر فایل
یا اطالعاتی به اشتراک گذاشته شود ،سیستمهای جداگانه باید به یک سیستم توزیعشده که توسط شبکه پشتیبانی میشود
متصل شوند .این رویکرد در فصل 16مورد بررسی قرار می گیرد .از سوی دیگر ،یک سیستم مشترک تک پردازنده ای در
بسیاری از موارد مقرون به صرفه تر از یک سیستم توزیع شده است و امکان صرفه جویی در مقیاس در دیسک ها و سایر
تجهیزات جانبی را فراهم می کند.
موازی سازی درشت و بسیار درشت دانه با موازی سازی درشت و بسیار درشت ،هماهنگی بین فرآیندها وجود دارد ،اما در سطح
بسیار ناخالص .این نوع وضعیت به راحتی به عنوان مجموعه ای از فرآیندهای همزمان اجرا می شود که بر روی یک تک پردازنده
چندبرنامه ای اجرا می شوند و می توان آنها را با تغییرات کم یا بدون تغییر در نرم افزار کاربر روی یک پردازنده چندگانه
پشتیبانی کرد.
یک مثال ساده از یک برنامه کاربردی که می تواند از وجود یک پردازنده چندگانه بهره برداری کند در WOOD89آورده شده
است .نویسندگان برنامه ای توسعه داده اند که مشخصات فایل هایی را که نیاز به اجرا مجدد دارند برای بازسازی یک نرم افزار
می گیرد و تعیین می کند که کدام یک از این اجرا ها معموالً همه آنها می توانند به طور همزمان اجرا شوند .سپس برنامه برای
هر اجرا موازی یک فرآیند ایجاد می کند .نویسندگان گزارش می دهند که به دلیل هم افزایی در حافظه پنهان دیسک موضوع
بررسی شده در فصل 11و به اشتراک گذاری کد اجرار ،سرعت در یک چند پردازنده در واقع از آن چیزی که صرفاً با جمع
کردن تعداد پردازنده های مورد استفاده انتظار می رود بیشتر است .که فقط یک بار در حافظه بارگذاری می شود.
به طور کلی ،هر مجموعه ای از فرآیندهای همزمان که نیاز به ارتباط یا همگام سازی دارند ،می توانند از استفاده از معماری چند
پردازنده بهره ببرند .در مورد تعامل بسیار نادر بین فرآیندها ،یک سیستم توزیع شده می تواند پشتیبانی خوبی ارائه دهد .با این
حال ،اگر تعامل تا حدودی مکرر باشد ،آنگاه سربار ارتباط در سراسر شبکه ممکن است برخی از افزایش سرعت بالقوه را نفی
کند .در آن صورت ،سازمان چندپردازنده مؤثرترین پشتیبانی را ارائه می دهد.
530
سیستم عامل های داخلی و اصول طراحی531.........................................................................................................................
توازی با دانه متوسط در فصل 4دیدیم که یک برنامه کاربردی می تواند به طور موثر به عنوان مجموعه ای از رشته ها در یک
فرآیند واحد پیاده سازی شود .در این مورد ،برنامه نویس باید به صراحت موازی بالقوه یک برنامه کاربردی را مشخص کند .به
طور معمول ،نیاز به درجه باالیی از هماهنگی و تعامل بین رشتههای یک برنامه وجود دارد که منجر به همگامسازی با دانه
متوسط میشود .در حالی که موازیسازی مستقل ،بسیار درشت و درشت را میتوان بر روی یک تکپردازنده چندبرنامهای یا
چندپردازنده با تأثیر کم یا بدون تأثیر بر عملکرد زمانبندی پشتیبانی کرد ،در زمانبندی رشتهها باید زمانبندی را دوباره
بررسی کنیم .از آنجایی که رشته های مختلف یک برنامه به طور مکرر با هم تعامل دارند ،تصمیمات زمان بندی مربوط به یک
رشته ممکن است بر
موازیسازی ریزدانه ،موازیسازی ریزدانه نشاندهنده استفاده بسیار پیچیدهتر از موازیسازی است که در استفاده از رشته ها
یافت میشود .اگرچه کارهای زیادی روی کاربردهای بسیار موازی انجام شده است ،اما تاکنون این یک حوزه تخصصی و پراکنده
است ،با رویکردهای مختلف.
مسائل طراحی
در بررسی این سه موضوع ،مهم است که در نظر داشته باشید که رویکرد اتخاذ شده ،به طور کلی ،به درجه جزئیات برنامه ها و
تعداد پردازنده های موجود بستگی دارد.
تخصیص فرآیندها به پردازنده ها اگر فرض کنیم که معماری چند پردازنده یکنواخت است ،به این معنا که هیچ پردازنده ای
مزیت فیزیکی خاصی از نظر دسترسی به حافظه اصلی یا دستگاه های ورودی/خروجی ندارد ،ساده ترین رویکرد زمان بندی،
درمان است .پردازنده ها به عنوان یک منبع ادغام شده و فرآیندها را در صورت تقاضا به پردازنده ها اختصاص می دهند .سپس
این سوال مطرح می شود که آیا انتساب باید ایستا باشد یا پویا.
531
سیستم عامل های داخلی و اصول طراحی532.........................................................................................................................
اگر فرآیندی از زمان فعالسازی تا تکمیل آن بهطور دائم به یک پردازنده اختصاص داده شود ،یک صف کوتاهمدت اختصاصی
برای هر پردازنده حفظ میشود .مزیت این رویکرد این است که ممکن است در تابع زمان بندی سربار کمتری وجود داشته باشد،
زیرا تخصیص پردازنده یک بار برای همیشه انجام می شود .همچنین ،استفاده از پردازندههای اختصاصی اجازه میدهد تا
استراتژی شناخته شده به عنوان زمانبندی گروهی یا گروهی ،همانطور که بعداً مورد بحث قرار گرفت.
یک نقطه ضعف تخصیص استاتیک این است که یک پردازنده می تواند بیکار باشد ،با یک صف خالی ،در حالی که پردازنده دیگر
دارای یک بک الگ است .برای جلوگیری از این وضعیت ،می توان از یک صف مشترک استفاده کرد .همه فرآیندها در یک صف
جهانی قرار می گیرند و برای هر پردازنده موجود برنامه ریزی می شوند .بنابراین ،در طول عمر یک فرآیند ،ممکن است فرآیند
در زمانهای مختلف بر روی پردازندههای مختلف اجرا شود .در یک معماری حافظه مشترک به طور فشرده ،اطالعات زمینه برای
همه فرآیندها در دسترس همه پردازندهها خواهد بود و بنابراین هزینه زمانبندی یک فرآیند مستقل از هویت پردازندهای است
که روی آن برنامهریزی شده است .با این حال ،گزینه دیگر تعادل بار پویا است ،که در آن رشته ها از یک صف برای یک پردازنده
به یک صف برای پردازنده دیگر منتقل می شوند .لینوکس از این روش استفاده می کند.
صرف نظر از اینکه آیا فرآیندها به پردازندهها اختصاص داده شدهاند ،ابزارهایی برای تخصیص فرآیندها به پردازندهها مورد نیاز
است .دو رویکرد استفاده شده است master/slave :و peer.با معماری ،master/slaveتوابع هسته کلیدی سیستم عامل
همیشه بر روی یک پردازنده خاص اجرا می شوند .سایر پردازنده ها فقط می توانند برنامه های کاربر را اجرا کنند .استاد مسئول
برنامه ریزی مشاغل است .هنگامی که یک فرآیند فعال است ،اگر Slaveنیاز به سرویس داشته باشد به عنوان مثال ،یک تماس
،I/Oباید درخواستی را به masterارسال کند و منتظر انجام سرویس بماند .این رویکرد بسیار ساده است و نیاز به بهبود کمی
در سیستم عامل چندبرنامهنویسی تک پردازنده دارد .حل تضاد ساده شده است زیرا یک پردازنده کنترل تمام حافظه و منابع
ورودی/خروجی را دارد .دو نقطه ضعف برای این رویکرد وجود دارد 1 :شکست Masterکل سیستم را خراب می کند ،و 2
Masterمی تواند به یک گلوگاه عملکرد تبدیل شود.
در معماری همتا ،هسته می تواند روی هر پردازنده ای اجرا شود و هر پردازنده از مجموعه فرآیندهای موجود برنامه ریزی خود را
انجام می دهد .این رویکرد سیستم عامل را پیچیده می کند .سیستم عامل باید اطمینان حاصل کند که دو پردازنده یک فرآیند
را انتخاب نمی کنند و فرآیندها به نحوی از صف گم نمی شوند .برای حل و فصل و همگام سازی ادعاهای رقیب با منابع باید از
تکنیک ها استفاده کرد.
البته طیفی از رویکردها بین این دو افراط وجود دارد .یک رویکرد این است که به جای تنها یک زیرمجموعه از پردازشگرها به
پردازش هسته اختصاص داده شود .رویکرد دیگر صرفاً مدیریت تفاوت بین نیازهای فرآیندهای هسته و سایر فرآیندها بر اساس
اولویت و تاریخچه اجرا است.
532
سیستم عامل های داخلی و اصول طراحی533.........................................................................................................................
استفاده از چندبرنامه نویسی در پردازنده های فردی زمانی که هر فرآیند به طور ایستا در طول عمر یک پردازنده به آن اختصاص
داده می شود ،یک سوال جدید مطرح می شود :آیا آن پردازنده باید چند برنامه ای باشد؟ اولین واکنش خواننده ممکن است
تعجب باشد که چرا این سوال باید پرسیده شود .بهنظر میرسد که اتصال یک پردازنده به یک فرآیند واحد ،زمانی که آن فرآیند
اغلب در انتظار I/Oیا به دلیل مالحظات همزمانی/همگامسازی مسدود میشود ،بسیار بیهوده به نظر میرسد .در چند پردازنده
سنتی ،که با دانه بندی درشت دانه یا مستقل از همگام سازی سروکار دارد به جدول 10.1مراجعه کنید ،واضح است که هر
پردازنده جداگانه باید بتواند بین تعدادی از فرآیندها سوئیچ کند تا به استفاده باال و در نتیجه عملکرد بهتر دست یابد .با این
حال ،برای برنامه های با دانه متوسط در حال اجرا بر روی یک چند پردازنده با تعداد زیادی پردازنده ،وضعیت کمتر روشن است.
وقتی تعداد زیادی پردازنده در دسترس هستند ،دیگر مهم نیست که تک تک پردازنده ها تا حد امکان مشغول باشند .در عوض،
ما نگران ارائه بهترین عملکرد ،به طور متوسط ،برای برنامه ها هستیم .برنامهای که از تعدادی رشته تشکیل شده است ممکن
است ضعیف اجرا شود مگر اینکه همه رشتههای آن برای اجرای همزمان در دسترس باشند.
ارسال فرآیند موضوع طراحی نهایی مربوط به زمانبندی چند پردازنده ،انتخاب واقعی یک فرآیند برای اجرا است .دیدهایم که در
تکپردازندههای چندبرنامهای ،استفاده از اولویتها یا الگوریتمهای زمانبندی پیچیده بر اساس استفادههای گذشته ممکن است
عملکرد را نسبت به یک استراتژی سادهاندیشی که اول میآید ،بهبود بخشد .وقتی چند پردازنده را در نظر می گیریم ،این
پیچیدگی ها ممکن است غیر ضروری یا حتی معکوس باشند ،و یک رویکرد ساده تر ممکن است با هزینه های اضافی کمتر
موثرتر باشد .در مورد زمانبندی رشته ،موضوعات جدیدی مطرح میشوند که ممکن است مهمتر از اولویتها یا تاریخچههای
اجرا باشند .ما به نوبه خود به هر یک از این موضوعات می پردازیم.
زمانبندی فرآیند
در اکثر سیستمهای چند پردازندهای سنتی ،فرآیندها به پردازندهها اختصاص داده نمیشوند .در عوض یک صف واحد برای همه
پردازنده ها وجود دارد ،یا اگر از نوعی طرح اولویت استفاده می شود ،صف های متعددی بر اساس اولویت وجود دارد که همه به
مجموعه مشترک پردازنده ها وارد می شوند .در هر صورت ،ما می توانیم سیستم را به عنوان یک معماری صف چند سروری
ببینیم .مورد یک سیستم دو پردازنده را در نظر بگیرید که در آن هر پردازنده از سیستم دو پردازنده نیمی از نرخ پردازش یک
پردازنده در سیستم تک پردازنده را داردSAUE81 .یک تجزیه و تحلیل صف را گزارش میکند که زمانبندی FCFSرا با
دور برگشتی و کوتاهترین زمان باقیمانده مقایسه میکند.
این مطالعه به زمان سرویس فرآیند مربوط می شود ،که میزان زمان مورد نیاز یک فرآیند را اندازه گیری می کند ،چه برای کل
کار یا مقدار زمان مورد نیاز هر بار که فرآیند برای استفاده از پردازنده آماده است .در مورد دور روبین ،فرض می شود که کوانتوم
533
سیستم عامل های داخلی و اصول طراحی534.........................................................................................................................
زمانی در مقایسه با سربار تعویض متن بزرگ و در مقایسه با میانگین زمان سرویس کوچک است .نتایج به تنوعی که در زمان
های سرویس دیده می شود بستگی دارد .معیار متداول تنوع ،ضریب تغییرات ،مقدار Cs.1 Aاست
Cs = 0مربوط به حالتی است که هیچ تغییری وجود ندارد :زمان سرویس همه فرآیندها برابر است .افزایش مقادیر Cها با
افزایش تنوع در بین زمانهای سرویس مطابقت دارد .به این معنا که هر چه مقدار Cها بیشتر باشد ،مقادیر زمان های سرویس
به طور گسترده تری تغییر می کند .مقادیر Cهای 5یا بیشتر برای توزیع زمان سرویس پردازنده غیرعادی نیست.
شکل a10.1توان عملیاتی را با توان عملیاتی FCFSبه عنوان تابعی از Cssمقایسه می کند .توجه داشته باشید که تفاوت در
الگوریتم های زمان بندی در مورد دو پردازنده بسیار کمتر است .با دو پردازنده ،یک فرآیند واحد با زمان خدمات طوالنی در
مورد FCFSبسیار کمتر مخرب است .سایر فرآیندها می توانند از پردازنده دیگر استفاده کنند .نتایج مشابه در شکل b10.1
نشان داده شده است.
مطالعه در SAUE81این تحلیل را تحت تعدادی از مفروضات در مورد درجه چندبرنامهنویسی ،ترکیبی از فرآیندهای محدود
I/Oدر مقابل CPUو استفاده از اولویتها تکرار کرد .نتیجه گیری کلی این است که رشته زمان بندی خاص با دو پردازنده
بسیار کمتر از یک پردازنده اهمیت دارد .بدیهی است که این نتیجه گیری با افزایش تعداد پردازنده ها حتی قوی تر است.
بنابراین ،یک رشته ساده FCFSیا استفاده از FCFSدر یک طرح اولویت ثابت ممکن است برای یک سیستم چند پردازنده
کافی باشد.
534
سیستم عامل های داخلی و اصول طراحی535.........................................................................................................................
همانطور که دیدیم ،با رشته ها ،مفهوم اجرا از بقیه تعریف یک فرآیند جدا می شود .یک برنامه کاربردی را می توان به عنوان
مجموعه ای از رشته ها پیاده سازی کرد که با هم همکاری می کنند و در فضای آدرس یکسانی اجرا می شوند.
در یک تک پردازنده thread ،ها می توانند به عنوان کمک ساختار برنامه و همپوشانی I/Oبا پردازش استفاده شوند .به دلیل
حداقل جریمه در انجام سوئیچ رشته در مقایسه با سوئیچ فرآیند ،این مزایا با هزینه کمی محقق می شوند .با این حال ،قدرت
کامل threadها در یک سیستم چند پردازنده آشکار می شود .در این محیط می توان از رشته ها برای بهره برداری از موازی
سازی واقعی در یک برنامه استفاده کرد .اگر رشته های مختلف یک برنامه به طور همزمان بر روی پردازنده های جداگانه اجرا
شوند ،دستاوردهای چشمگیری در عملکرد ممکن است .با این حال ،میتوان نشان داد که برای برنامههایی که نیاز به تعامل
قابلتوجهی بین رشتهها دارند موازی دانههای متوسط ،تفاوتهای کوچک در مدیریت رشته و زمانبندی میتواند تأثیر عملکرد
قابلتوجهی داشته باشد ANDE89.
در میان بسیاری از پیشنهادها برای زمانبندی رشتههای چند پردازندهای و تخصیص پردازنده ،چهار رویکرد کلی برجسته
هستند:
-اشتراک گذاری بار :فرآیندها به پردازنده خاصی اختصاص داده نمی شوند .یک صف سراسری از رشتههای آماده حفظ میشود
و هر پردازنده در حالت بیکار ،یک رشته را از صف انتخاب میکند .اصطالح اشتراک بار برای تمایز این استراتژی از طرحهای
متعادلسازی بار استفاده میشود که در آن کار بر مبنای دائمیتر تخصیص داده میشود به عنوان مثالFEIT90a ،را ببینید.
535
سیستم عامل های داخلی و اصول طراحی536.........................................................................................................................
-برنامهریزی گروهی :مجموعهای از رشتههای مرتبط برنامهریزی شده است تا روی مجموعهای از پردازندهها به صورت همزمان
اجرا شوند.
-تخصیص پردازنده اختصاصی :این برعکس رویکرد اشتراک بار است و زمانبندی ضمنی تعریف شده توسط تخصیص رشته ها به
پردازنده ها را ارائه می دهد .به هر برنامه در طول مدت اجرای خود ،تعدادی پردازنده برابر تعداد رشته های موجود در برنامه
اختصاص می یابد .هنگامی که برنامه خاتمه می یابد ،پردازنده ها برای تخصیص احتمالی به برنامه دیگر به مجموعه عمومی باز
می گردند.
-زمانبندی پویا :تعداد رشتهها در یک فرآیند را میتوان در طول اجرا تغییر داد.
اشتراک بار اشتراک گذاری بار شاید ساده ترین رویکرد باشد و به طور مستقیم از یک محیط تک پردازنده منتقل می شود.
چندین مزیت دارد:
-بار به طور مساوی در بین پردازنده ها توزیع می شود ،و این اطمینان را می دهد که هیچ پردازنده ای بیکار نباشد در حالی که
کار برای انجام دادن در دسترس است.
-هیچ زمانبندی متمرکزی مورد نیاز نیست .هنگامی که یک پردازنده در دسترس است ،روال برنامه ریزی سیستم عامل بر روی
آن پردازنده اجرا می شود تا رشته بعدی انتخاب شود.
صف جهانی را می توان با استفاده از هر یک از طرح های مورد بحث در فصل ،9از جمله طرح های مبتنی بر اولویت و طرح
هایی که تاریخچه اجرا یا تقاضاهای پردازش پیش بینی شده را در نظر می گیرند ،سازماندهی و به آن دسترسی پیدا کرد.
First Come-First-served FCFS: -وقتی یک کار می رسد ،هر یک از رشته های آن به طور متوالی در انتهای صف
مشترک قرار می گیرد .هنگامی که یک پردازنده بیکار می شود ،رشته آماده بعدی را انتخاب می کند که تا تکمیل یا مسدود
شدن آن را اجرا می کند.
-ابتدا کوچکترین تعداد رشته ها :صف آماده مشترک به عنوان یک صف اولویت سازماندهی می شود ،با باالترین اولویت به رشته
هایی از کارهای با کمترین تعداد رشته های برنامه ریزی نشده است .مشاغل با اولویت مساوی بر اساس اینکه شغل اول می رسد
ترتیب داده می شود .مانند ،FCFSیک رشته زمانبندی شده تا تکمیل یا مسدود شدن اجرا میشود.
536
سیستم عامل های داخلی و اصول طراحی537.........................................................................................................................
-پیشگیرانه کوچکترین تعداد رشته ها ابتدا :بیشترین اولویت به کارهایی با کمترین تعداد رشته های برنامه ریزی نشده داده می
شود .یک کار در حال ورود با تعداد رشتههای کمتر از یک کار در حال اجرا ،رشتههای متعلق به کار زمانبندیشده را از پیش
میگیرد.
با استفاده از مدلهای شبیهسازی ،نویسندگان گزارش میدهند که در طیف وسیعی از ویژگیهای شغلی FCFS ،نسبت به دو
سیاست دیگر در فهرست قبلی برتری دارد .عالوه بر این ،نویسندگان دریافتند که نوعی از زمانبندی باند ،که در بخش فرعی
بعدی مورد بحث قرار گرفت ،به طور کلی بر اشتراک بار برتری دارد.
-صف مرکزی منطقه ای از حافظه را اشغال می کند که باید به روشی دسترسی داشته باشید که محرومیت متقابل را اعمال
کند .بنابراین ،اگر بسیاری از پردازنده ها به طور همزمان به دنبال کار باشند ،ممکن است به یک گلوگاه تبدیل شود .هنگامی که
تعداد کمی از پردازنده ها وجود دارد ،بعید است که این یک مشکل قابل توجه باشد .با این حال ،زمانی که چند پردازنده از ده ها
یا حتی صدها پردازنده تشکیل شده باشد ،پتانسیل ایجاد گلوگاه واقعی است.
-بعید است که رشته های از پیش تعیین شده در همان پردازنده اجرا شوند .اگر هر پردازنده به یک حافظه نهان محلی مجهز
باشد ،کش کردن کارآمدتر می شود.
-اگر همه رشتهها بهعنوان یک مجموعه مشترک از رشتهها در نظر گرفته شوند ،بعید است که همه رشتههای یک برنامه به طور
همزمان به پردازندهها دسترسی پیدا کنند .اگر درجه باالیی از هماهنگی بین رشته های یک برنامه مورد نیاز باشد ،سوئیچ های
فرآیند درگیر ممکن است به طور جدی عملکرد را به خطر بیندازند.
با وجود معایب احتمالی ،اشتراک بار یکی از رایج ترین طرح های مورد استفاده در چند پردازنده های فعلی است.
اصالح تکنیک اشتراک بار در سیستم عامل ماخ BLAC90, WEND89استفاده می شود .سیستم عامل یک صف اجرای
محلی برای هر پردازنده و یک صف اجرای عمومی مشترک را حفظ می کند .صف اجرای محلی توسط رشته هایی استفاده می
شود که به طور موقت به یک پردازنده خاص متصل شده اند .یک پردازنده ابتدا صف اجرای محلی را بررسی میکند تا رشتههای
محدود را بر رشتههای بیپیوند ترجیح مطلق بدهد .به عنوان نمونه ای از استفاده از رشته های محدود ،یک یا چند پردازنده را
می توان به اجرای فرآیندهایی که بخشی از سیستم عامل هستند اختصاص داد .مثال دیگر این است که رشته های یک برنامه
خاص می توانند بین تعدادی از پردازنده ها توزیع شوند .با نرمافزار اضافی مناسب ،از برنامهریزی باند پشتیبانی میکند ،که در
ادامه مورد بحث قرار خواهد گرفت.
537
سیستم عامل های داخلی و اصول طراحی538.........................................................................................................................
زمانبندی گروهی مفهوم زمانبندی مجموعهای از فرآیندها به طور همزمان بر روی مجموعهای از پردازندهها قبل از استفاده از
رشتهها استJONE80 .به این مفهوم به عنوان زمان بندی گروهی اشاره می کند .این رویکرد دارای مزایای عملکرد زیر است:
-اگر فرآیندهای گروه به روشی مرتبط یا هماهنگ باشند ،مسدود کردن همگامسازی ممکن است کاهش یابد ،تغییر فرآیند
کمتری الزم باشد و عملکرد افزایش یابد.
-یک تصمیم زمانبندی واحد بر تعدادی از پردازندهها و فرآیندها در یک زمان تأثیر میگذارد و هزینههای سربار زمانبندی را
کاهش میدهد.
در چند پردازنده * ،Cmاز اصطالح coschedulingاستفاده می شود GEHR87.برنامه ریزی همزمان بر اساس مفهوم
زمان بندی مجموعه ای از وظایف مرتبط است که گروه کاری نامیده می شود .عناصر فردی یک گروه کاری بسیار کوچک
هستند و از این رو به ایده یک موضوع نزدیک هستند.
اصطالح زمانبندی گروهی برای زمانبندی همزمان رشتههایی که یک فرآیند واحد را تشکیل میدهند به کار میرود
FEIT90b.زمانبندی گروهی برای برنامههای موازی با دانهبندی متوسط تا ریزدانه مفید است که عملکرد آنها زمانی که هر
بخشی از برنامه اجرا نمیشود در حالی که قسمتهای دیگر آماده اجرا هستند ،به شدت کاهش مییابد .همچنین برای هر برنامه
موازی مفید است ،حتی برنامهای که چندان به عملکرد حساس نیست .نیاز به برنامه ریزی گروهی به طور گسترده ای شناخته
شده است و پیاده سازی ها بر روی انواع سیستم عامل های چند پردازنده ای وجود دارد.
یکی از راههای واضحی که در آن زمانبندی باند عملکرد یک برنامه را بهبود میبخشد این است که سوئیچهای فرآیند به حداقل
میرسد .فرض کنید یک رشته از یک فرآیند در حال اجرا است و به نقطه ای می رسد که باید با رشته دیگری از همان فرآیند
همگام شود .اگر آن رشته دیگر در حال اجرا نباشد ،اما در یک صف آماده باشد ،اولین رشته قطع میشود تا زمانی که بتوان یک
فرآیند سوئیچ روی پردازنده دیگری انجام داد تا رشته مورد نیاز را وارد کند .در برنامهای با هماهنگی فشرده بین رشتهها ،چنین
سوئیچهایی عملکرد را بهطور چشمگیری کاهش میدهند .زمانبندی همزمان رشتههای همکار نیز میتواند باعث صرفهجویی در
زمان در تخصیص منابع شود .به عنوان مثال ،چندین رشته برنامهریزی شده توسط گروه میتوانند بدون هزینه اضافی قفل کردن
در طول عملیات جستجو ،خواندن/نوشتن به یک فایل دسترسی داشته باشند.
استفاده از زمانبندی باند ،الزامی برای تخصیص پردازنده ایجاد میکند .یکی از احتماالت زیر است .فرض کنید که ما Nپردازنده
و Mبرنامه داریم که هر کدام Nیا کمتر رشته دارند .سپس به هر برنامه می توان M/1از زمان موجود در پردازنده های Nرا با
استفاده از برش زمان دادFEIT90a .خاطرنشان می کند که این استراتژی می تواند ناکارآمد باشد .مثالی را در نظر بگیرید که
در آن دو کاربرد وجود دارد ،یکی با چهار رشته و دیگری با یک رشته .استفاده از تخصیص یکنواخت زمان 37.5درصد از منابع
پردازش را هدر می دهد ،زیرا زمانی که برنامه تک رشته ای اجرا می شود ،سه پردازنده بیکار می مانند شکل 10.2را ببینید .اگر
538
سیستم عامل های داخلی و اصول طراحی539.........................................................................................................................
چندین برنامه یک رشته وجود داشته باشد ،همه آنها می توانند برای افزایش استفاده از پردازنده با هم هماهنگ شوند .اگر آن
گزینه در دسترس نباشد ،یک جایگزین برای زمانبندی یکنواخت ،زمانبندی است که با تعداد رشتهها وزن میشود .بنابراین،
برنامه چهار رشته ای را می توان چهار پنجم مواقع و به برنامه یک رشته ای تنها یک پنجم مواقع داده می شود و ضایعات
پردازنده را به 15درصد کاهش می دهد.
تخصیص پردازنده اختصاصی یک شکل افراطی از زمانبندی گروهی ،که در TUCK89پیشنهاد شده است ،اختصاص گروهی
از پردازندهها به یک برنامه برای مدت زمان برنامه است .یعنی زمانی که یک برنامه برنامه ریزی می شود ،به هر یک از رشته های
آن یک پردازنده اختصاص داده می شود که تا زمانی که برنامه کامل شود ،به آن رشته اختصاص داده می شود.
به نظر می رسد این رویکرد به شدت اتالف وقت پردازنده باشد .اگر رشتهای از یک برنامه در انتظار I/Oیا برای همگامسازی با
رشتهای دیگر مسدود شود ،پردازشگر آن رشته بیکار میماند :هیچ چندبرنامهنویسی پردازندهها وجود ندارد .در دفاع از این
استراتژی می توان دو مشاهدات را انجام داد:
.1در یک سیستم بسیار موازی ،با دهها یا صدها پردازنده ،که هر کدام بخش کوچکی از هزینه سیستم را نشان میدهند ،استفاده
از پردازنده دیگر به اندازه معیاری برای اثربخشی یا عملکرد مهم نیست.
.2اجتناب کامل از تغییر فرآیند در طول عمر یک برنامه باید منجر به افزایش سرعت قابل توجه آن برنامه شود.
گزارش هر دو TUCK89و ZAHO90بیانیه 2را پشتیبانی می کند .جدول 10.2نتایج یک آزمایش TUCK89را نشان
می دهد .نویسندگان دو برنامه را به طور همزمان با اجرای همزمان ،یک ضرب ماتریس و یک محاسبه تبدیل فوریه سریع FFT
روی یک سیستم با 16پردازنده اجرا کردند .هر برنامه مشکل خود را به تعدادی کار تقسیم می کند که بر روی رشته هایی که
آن برنامه را اجرا می کنند نگاشت می شوند .برنامه ها به گونه ای نوشته شده اند که اجازه می دهد تعداد رشته ها متفاوت باشد.
539
سیستم عامل های داخلی و اصول طراحی540.........................................................................................................................
در اصل ،تعدادی از وظایف توسط یک برنامه تعریف شده و در صف قرار می گیرند .وظایف از صف گرفته شده و توسط برنامه بر
روی موضوعات موجود نگاشت می شوند .اگر رشتهها کمتر از وظایف باشد ،وظایف باقیمانده در صف باقی میمانند و در حین
انجام وظایف محول شده توسط رشتهها انتخاب میشوند .واضح است که همه برنامه ها را نمی توان به این شکل ساختار داد ،اما
بسیاری از مشکالت عددی و برخی از برنامه های کاربردی دیگر را می توان به این روش حل کرد.
جدول 10.2سرعت برنامه ها را نشان می دهد زیرا تعداد رشته هایی که وظایف را در هر برنامه اجرا می کنند از 1تا 24متغیر
است .به عنوان مثال ،می بینیم که وقتی هر دو برنامه به طور همزمان با 24رشته شروع می شوند ،سرعت به دست آمده در
مقایسه با استفاده از یک رشته برای هر برنامه 2.8 ،برای ضرب ماتریس و 2.4برای FFTاست .جدول نشان می دهد که
عملکرد هر دو برنامه به طور قابل توجهی بدتر می شود زمانی که تعداد رشته ها در هر برنامه از 8تجاوز کند و بنابراین تعداد
کل فرآیندهای سیستم از تعداد پردازنده ها بیشتر شود .عالوه بر این ،هرچه تعداد رشته ها بیشتر باشد ،عملکرد بدتر میشود،
زیرا فرکانس بیشتری از پیشپرداخت رشته ها و زمانبندی مجدد وجود دارد .این پیشگیری بیش از حد منجر به ناکارآمدی
بسیاری از منابع میشود ،از جمله زمان صرف شده برای خروج یک رشته معلق برای خروج از بخش بحرانی ،زمان تلف شده در
تعویض فرآیند و رفتار حافظه پنهان ناکارآمد .نویسندگان نتیجه می گیرند که یک استراتژی موثر محدود کردن تعداد رشته های
فعال به تعداد پردازنده های سیستم است .اگر اکثر برنامهها یا یک رشته باشند یا بتوانند از ساختار صف-تسک استفاده کنند،
این کار استفاده مؤثر و نسبتاً کارآمدی از منابع پردازنده را فراهم میکند.
540
سیستم عامل های داخلی و اصول طراحی541.........................................................................................................................
هم تخصیص پردازنده اختصاصی و هم زمانبندی گروهی با پرداختن به موضوع تخصیص پردازنده به مشکل زمانبندی حمله
میکنند .می توان مشاهده کرد که مشکل تخصیص پردازنده در یک چند پردازنده بیشتر شبیه مشکل تخصیص حافظه در یک
تک پردازنده است تا مشکل زمان بندی روی یک پردازنده .مسئله این است که در هر زمان معین چند پردازنده به یک برنامه
اختصاص دهیم ،که مشابه این است که در هر زمان چند فریم صفحه را به یک فرآیند معین اختصاص دهیمGEHR87 .
اصطالح مجموعه کاری فعالیت را ،مشابه مجموعه کاری حافظه مجازی ،به عنوان حداقل تعداد فعالیت ها رشته ها پیشنهاد می
کند که باید به طور همزمان روی پردازنده ها برنامه ریزی شود تا برنامه پیشرفت قابل قبولی داشته باشد .مانند طرحهای
مدیریت حافظه ،شکست در برنامهریزی تمام عناصر یک مجموعه کاری فعالیت میتواند منجر به شکست پردازنده شود.
این زمانی اتفاق میافتد که زمانبندی رشتههایی که خدمات آنها مورد نیاز است ،باعث حذف زمانبندی رشتههای دیگری
میشود که خدمات آنها به زودی مورد نیاز خواهد بود .به طور مشابه ،تکه تکه شدن پردازنده به وضعیتی اشاره دارد که در آن
برخی از پردازندهها با تخصیص سایرین باقی میمانند و پردازندههای باقیمانده یا از نظر تعداد کافی نیستند یا بهطور نامناسب
برای پشتیبانی از الزامات برنامههای انتظار سازماندهی شدهاند .برنامه ریزی گروه و تخصیص پردازنده اختصاصی برای جلوگیری
از این مشکالت است.
زمانبندی پویا برای برخی از برنامهها ،امکان ارائه زبان و ابزارهای سیستمی وجود دارد که اجازه میدهد تعداد رشتهها در فرآیند
به صورت پویا تغییر یابد .این به سیستم عامل اجازه می دهد تا بار را برای بهبود استفاده تنظیم کند.
ZAHO90رویکردی را پیشنهاد میکند که در آن هم سیستم عامل و هم برنامه کاربردی در تصمیمگیری زمانبندی دخیل
هستند .سیستم عامل وظیفه پارتیشن بندی پردازنده ها در بین مشاغل را بر عهده دارد .هر کار از پردازندههای موجود در
پارتیشن خود استفاده میکند تا با نگاشت این وظایف به رشتهها ،زیرمجموعهای از وظایف قابل اجرا را اجرا کند .تصمیم مناسب
در مورد اینکه کدام زیرمجموعه اجرا شود ،و همچنین اینکه کدام رشته زمانی که یک فرآیند از پیش تعیین شده است به حالت
تعلیق درآید ،به برنامه های کاربردی اختصاص داده می شود شاید از طریق مجموعه ای از روال های کتابخانه زمان اجرا .این
رویکرد ممکن است برای همه برنامه ها مناسب نباشد .با این حال ،برخی از برنامهها میتوانند بهطور پیشفرض روی یک رشته
قرار گیرند ،در حالی که برخی دیگر میتوانند برای استفاده از این ویژگی خاص سیستم عامل برنامهریزی شوند.
در این رویکرد ،مسئولیت برنامه ریزی سیستم عامل در درجه اول به تخصیص پردازنده محدود می شود و طبق خط مشی زیر
پیش می رود .هنگامی که یک شغل یک یا چند پردازنده درخواست می کند چه زمانی که کار برای اولین بار می رسد یا به دلیل
تغییر نیازهای آن،
.1اگر پردازنده های بیکار وجود دارد ،از آنها برای برآورده کردن درخواست استفاده کنید.
541
سیستم عامل های داخلی و اصول طراحی542.........................................................................................................................
.2در غیر این صورت ،اگر شغلی که درخواست ارائه میکند ،تازه وارد است ،آن را با حذف یک پردازنده از هر شغلی که در حال
حاضر بیش از یک پردازنده اختصاص داده شده است ،اختصاص دهید.
.3اگر بخشی از درخواست برآورده نشود ،تا زمانی که یک پردازشگر برای آن در دسترس نباشد یا این کار درخواست را لغو کند،
باقی می ماند به عنوان مثال ،اگر دیگر نیازی به پردازنده های اضافی نباشد.
.4صف فعلی درخواست های برآورده نشده برای پردازنده ها را اسکن کنید .به هر شغل موجود در لیست که در حال حاضر هیچ
پردازنده ای ندارد یعنی برای همه افراد منتظر جدید یک پردازنده اختصاص دهید .سپس لیست را دوباره اسکن کنید و بقیه
پردازنده ها را بر اساس FCFSتخصیص دهید.
تحلیلهای گزارششده در ZAHO90و MAJU88نشان میدهد که برای برنامههایی که میتوانند از زمانبندی پویا بهره
ببرند ،این رویکرد نسبت به زمانبندی گروهی یا تخصیص پردازنده اختصاصی برتر است .با این حال ،سربار این رویکرد ممکن
است این مزیت عملکرد ظاهری را نفی کند .برای اثبات ارزش زمانبندی پویا ،به تجربه با سیستمهای واقعی نیاز است.
پرکاربردترین سیستمعاملهای معاصر ،مانند ویندوز و لینوکس ،اساساً برنامهریزی در سیستمهای چند هستهای را به همان
روشی که یک سیستم چند پردازندهای انجام میدهند ،تلقی میکنند .چنین زمانبندیهایی بر روی مشغول نگه داشتن
پردازندهها از طریق متعادل کردن بار تمرکز دارند تا رشتههای آماده برای اجرا به طور مساوی بین پردازندهها توزیع شوند .با این
حال ،بعید است که این استراتژی مزایای عملکرد مطلوب معماری چند هسته ای را ایجاد کند.
با افزایش تعداد هسته ها در هر تراشه ،نیاز به به حداقل رساندن دسترسی به حافظه خارج از تراشه بر تمایل به حداکثر کردن
استفاده از پردازنده ارجحیت دارد .روش سنتی و هنوز اصلی برای به حداقل رساندن دسترسی به حافظه خارج از تراشه ،استفاده
از کش برای استفاده از موقعیت مکانی است .این رویکرد به دلیل برخی از معماریهای کش مورد استفاده در تراشههای چند
هستهای پیچیده میشود ،بهویژه زمانی که یک کش توسط برخی از هستهها به اشتراک گذاشته میشود ،اما نه همه هستهها.
یک مثال خوب تراشه بولدوزر AMDاست که در سیستم Operton FX-8000استفاده شده است که در شکل 10.3نشان
داده شده است .در این معماری ،هر هسته دارای یک کش L1اختصاصی است .هر جفت هسته یک حافظه نهان L2را به
اشتراک می گذارد .و همه هسته ها یک کش L3مشترک دارند .این را با Intel Core i7-990Xمقایسه کنید شکل ،1.20
که در آن هر دو کش L1و L2به یک هسته اختصاص داده شده اند.
542
سیستم عامل های داخلی و اصول طراحی543.........................................................................................................................
وقتی برخی از هستهها اما نه همه یک حافظه پنهان مشترک دارند ،نحوه تخصیص رشتهها به هستهها در طول زمانبندی تأثیر
قابلتوجهی بر عملکرد دارد .اجازه دهید دو هسته را تعریف کنیم که حافظه نهان L2یکسان را به صورت مجاور و در غیر این
صورت غیر مجاور به اشتراک میگذارند .بنابراین ،هسته های 0و 1در شکل 10.3مجاور هستند ،اما هسته های 1و 2غیر
مجاور هستند .در حالت ایدهآل ،اگر دو رشته قرار است منابع حافظه را به اشتراک بگذارند ،باید به هستههای مجاور تخصیص
داده شوند تا تأثیرات محلی را بهبود بخشند ،و اگر منابع حافظه مشترکی ندارند ،ممکن است برای دستیابی به تعادل بار به
هستههای غیر مجاور تخصیص داده شوند.
در واقع دو جنبه مختلف از اشتراک کش وجود دارد که باید در نظر گرفته شود :اشتراک منابع مشارکتی و اختالف منابع .با
اشتراکگذاری منابع مشترک ،چندین رشته به مجموعه یکسانی از مکانهای حافظه اصلی دسترسی دارند .مثالها برنامههایی
هستند که چند رشتهای هستند و تعامل رشته تولیدکننده-مصرفکننده هستند .در هر دو این موارد ،دادههایی که توسط یک
رشته به حافظه کش آورده میشوند باید توسط یک رشته همکار قابل دسترسی باشند .برای این مورد ،برنامه ریزی رشته های
همکار در هسته های مجاور مطلوب است.
مورد دیگر زمانی است که threadها ،اگر روی هسته های مجاور کار می کنند ،برای مکان های حافظه کش رقابت می کنند.
هر تکنیکی که برای جایگزینی کش استفاده می شود ،مانند کمترین استفاده اخیر ،LRUاگر مقدار بیشتری از حافظه نهان به
صورت پویا به یک رشته تخصیص داده شود ،رشته رقیب لزوما فضای کش کمتری در دسترس دارد و در نتیجه دچار افت
عملکرد می شود .هدف از زمانبندی آگاهانه اختالف ،تخصیص رشتهها به هستهها به گونهای است که اثربخشی حافظه پنهان
مشترک را به حداکثر برساند و بنابراین نیاز به دسترسیهای حافظه خارج از تراشه را به حداقل برساند .طراحی الگوریتمها برای
این منظور حوزهای از تحقیقات در حال انجام و موضوعی با پیچیدگیهایی است .بر این اساس ،این حوزه خارج از محدوده ما
است .برای نظرسنجی اخیر ZHUR12را ببینید.
543
سیستم عامل های داخلی و اصول طراحی544.........................................................................................................................
پیش زمینه
محاسبات بالدرنگ در حال تبدیل شدن به یک رشته مهم است .سیستم عامل ،و به ویژه زمانبندی ،شاید مهمترین جزء یک
سیستم بالدرنگ باشد .نمونه هایی از کاربردهای فعلی سیستم های بالدرنگ شامل کنترل آزمایش های آزمایشگاهی ،کنترل
فرآیند در کارخانه های صنعتی ،روباتیک ،کنترل ترافیک هوایی ،مخابرات و سیستم های فرماندهی و کنترل نظامی است.
سیستمهای نسل بعدی شامل زمیننورد مستقل ،کنترلکنندههای روباتهای با مفاصل االستیک ،سیستمهای موجود در تولید
هوشمند ،ایستگاه فضایی و اکتشافات زیردریایی خواهند بود.
محاسبات بالدرنگ ممکن است به عنوان آن نوع محاسباتی تعریف شود که در آن صحت سیستم نه تنها به نتیجه منطقی
محاسبات بلکه به زمان تولید نتایج نیز بستگی دارد .ما میتوانیم یک سیستم بالدرنگ را با تعریف اینکه منظور از یک فرآیند یا
وظیفه بالدرنگ تعریف میکنیم 3 .به طور کلی ،در یک سیستم بالدرنگ ،برخی از وظایف ،وظایف بالدرنگ هستند و اینها درجه
خاصی دارند .فوریت برای آنها چنین وظایفی تالش برای کنترل یا واکنش به رویدادهایی است که در دنیای بیرون رخ می دهد.
از آنجایی که این رویدادها در «زمان حقیقی» رخ میدهند ،یک کار بالدرنگ باید بتواند با رویدادهایی که مربوط به آن است،
هماهنگی داشته باشد .بنابراین ،معموالً می توان یک ضرب االجل را با یک کار خاص مرتبط کرد ،جایی که ضرب االجل زمان
شروع یا زمان تکمیل را مشخص می کند .چنین کاری ممکن است به عنوان سخت یا نرم طبقه بندی شود .یک کار بالدرنگ
سخت کاری است که باید ضرب االجل خود را رعایت کند .در غیر این صورت باعث آسیب غیرقابل قبول یا خطای مهلک به
سیستم می شود .یک کار بالدرنگ نرم دارای مهلتی است که مطلوب است اما اجباری نیست .حتی اگر ضرب االجل خود را
پشت سر گذاشته باشد ،هنوز برنامه ریزی و تکمیل کار منطقی است.
یکی دیگر از ویژگی های کارهای بالدرنگ این است که دوره ای یا دوره ای هستند .یک کار غیر پریودیک دارای ضرب االجلی
است که باید در آن پایان یا شروع شود ،یا ممکن است محدودیتی در زمان شروع و پایان داشته باشد .در مورد یک کار دوره ای،
نیاز ممکن است به صورت "یک بار در هر دوره "Tیا "دقیقا Tواحدها از هم جدا" بیان شود.
544
سیستم عامل های داخلی و اصول طراحی545.........................................................................................................................
سیستم عامل های بالدرنگ را میتوان به عنوان دارای الزامات منحصربهفرد در پنج حوزه کلی توصیف کرد MORG92:
-جبر
-پاسخگویی
-کنترل کاربر
-قابلیت اطمینان
یک سیستم عامل تا حدی قطعی است که عملیات را در زمان های ثابت ،از پیش تعیین شده یا در بازه های زمانی از پیش
تعیین شده انجام دهد .هنگامی که چندین فرآیند برای منابع و زمان پردازشگر رقابت می کنند ،هیچ سیستمی کامالً قطعی
نخواهد بود .در یک سیستم عامل بالدرنگ ،درخواستهای فرآیند برای سرویس توسط رویدادها و زمانبندیهای خارجی دیکته
میشوند .میزانی که یک سیستم عامل می تواند به طور قطعی درخواست ها را برآورده کند اول به سرعت پاسخگویی به وقفه ها
بستگی دارد و دوم اینکه آیا سیستم ظرفیت کافی برای رسیدگی به تمام درخواست ها در زمان مورد نیاز را دارد یا خیر.
یکی از معیارهای مفید توانایی یک سیستم عامل برای عملکرد قطعی ،حداکثر تأخیر از ورود یک دستگاه با اولویت باال تا شروع
سرویس است .در سیستمعاملهای بیدرنگ ،این تأخیر ممکن است بین دهها تا صدها میلیثانیه باشد ،در حالی که در
سیستمعاملهای بالدرنگ ،این تأخیر ممکن است حد باالیی از چند میکروثانیه تا یک میلیثانیه داشته باشد.
یک ویژگی مرتبط اما متمایز ،پاسخگویی است .جبرگرایی به مدت زمان تأخیر یک سیستم عامل قبل از تأیید یک وقفه مربوط
می شود .پاسخگویی مربوط به مدت زمانی است که پس از تایید ،یک سیستم عامل برای سرویس وقفه نیاز دارد .جنبه های
پاسخگویی شامل موارد زیر است:
.1مقدار زمان الزم برای رسیدگی اولیه به وقفه و شروع اجرای روال سرویس وقفه ISR.اگر اجرای ISRبه یک سوئیچ فرآیند
نیاز داشته باشد ،آنگاه تأخیر بیشتر از زمانی خواهد بود که ISRبتواند در چارچوب فرآیند جاری اجرا شود.
.2مدت زمان الزم برای انجام ISR.این به طور کلی به پلت فرم سخت افزاری بستگی دارد.
.3اثر تودرتوی وقفه ای .اگر یک ISRبتواند با ورود یک وقفه دیگر قطع شود ،در این صورت سرویس به تاخیر می افتد.
545
سیستم عامل های داخلی و اصول طراحی546.........................................................................................................................
جبرگرایی و پاسخگویی با هم زمان واکنش به رویدادهای خارجی را تشکیل می دهند .الزامات زمان پاسخگویی برای سیستمهای
بالدرنگ حیاتی است ،زیرا چنین سیستمهایی باید الزامات زمانبندی تحمیلشده توسط افراد ،دستگاهها و جریانهای داده
خارج از سیستم را برآورده کنند.
کنترل کاربر به طور کلی در یک سیستم عامل بالدرنگ بسیار گسترده تر از سیستم عامل های معمولی است .در یک سیستم
عامل معمولی غیر واقعی ،کاربر یا کنترلی بر عملکرد زمانبندی سیستم عامل ندارد یا فقط می تواند راهنمایی های گسترده ای
مانند گروه بندی کاربران در بیش از یک کالس اولویت ارائه دهد .با این حال ،در یک سیستم بالدرنگ ،این امر ضروری است که
به کاربر اجازه کنترل دقیق بر اولویت کار داده شود .کاربر باید بتواند بین وظایف سخت و نرم تمایز قائل شود و اولویت های
نسبی را در هر کالس مشخص کند .یک سیستم بالدرنگ همچنین ممکن است به کاربر اجازه دهد تا ویژگی هایی مانند استفاده
از صفحه بندی یا مبادله فرآیند ،اینکه چه فرآیندهایی باید همیشه در حافظه اصلی باشند ،از چه الگوریتم های انتقال دیسک
استفاده می شود ،فرآیندها در انواع مختلف با چه حقوقی را مشخص کند .باندهای اولویت دارند و غیره.
قابلیت اطمینان معموالً برای سیستم های بالدرنگ بسیار مهم تر از سیستم های غیر زمان حقیقی است .یک نقص گذرا در یک
سیستم غیر واقعی ممکن است با راه اندازی مجدد سیستم حل شود .خرابی پردازنده در یک سیستم غیرحقیقی چند پردازنده
ای ممکن است منجر به کاهش سطح خدمات شود تا زمانی که پردازنده خراب تعمیر یا جایگزین شود .اما یک سیستم بالدرنگ
در حال پاسخگویی و کنترل رویدادها در زمان حقیقی است .از دست دادن یا کاهش عملکرد ممکن است عواقب فاجعه باری
داشته باشد ،از ضرر مالی تا آسیب های عمده تجهیزات و حتی از دست دادن جان.
مانند سایر زمینه ها ،تفاوت بین یک سیستم عامل بالدرنگ و یک سیستم عامل غیرحقیقی یک درجه است .حتی یک سیستم
بالدرنگ باید برای پاسخگویی به حالت های مختلف خرابی طراحی شود .عملکرد نرمافزار خراب ،مشخصهای است که به توانایی
یک سیستم برای از کار افتادن بهگونهای اشاره میکند که تا حد امکان توانایی و داده را حفظ کند .به عنوان مثال ،یک سیستم
معمولی یونیکس ،زمانی که خرابی داده ها را در هسته شناسایی می کند ،یک پیام خرابی در کنسول سیستم صادر می کند،
محتویات حافظه را برای تجزیه و تحلیل خرابی بعدی به دیسک می ریزد و اجرای سیستم را خاتمه می دهد .در مقابل ،یک
سیستم بالدرنگ تالش میکند یا مشکل را اصالح کند یا اثرات آن را در حین ادامه کار به حداقل برساند .به طور معمول،
سیستم به کاربر یا فرآیند کاربر اطالع میدهد که باید اقدام اصالحی انجام دهد و سپس احتماالً در سطح پایینتری از خدمات
به عملیات ادامه میدهد .در صورت لزوم خاموش شدن ،سعی می شود فایل و داده ها سازگاری داشته باشند.
یکی از جنبه های مهم عملیات شکست-نرم به عنوان پایداری نامیده می شود .یک سیستم بالدرنگ در صورتی پایدار است که
در مواردی که انجام تمام ضرباالجلهای وظایف غیرممکن باشد ،سیستم به ضرباالجلهای حیاتیترین و با اولویتترین وظایف
خود عمل کند ،حتی اگر برخی از ضرباالجلهای کمتر بحرانی همیشه رعایت نشده باشند.
546
سیستم عامل های داخلی و اصول طراحی547.........................................................................................................................
اگرچه طیف گسترده ای از طرح های سیستم عامل بالدرنگ برای پاسخگویی به طیف گسترده ای از برنامه های کاربردی
بالدرنگ وجود دارد ،ویژگی های زیر در اکثر سیستم عامل های بالدرنگ مشترک است:
-استفاده دقیق تر از اولویت ها نسبت به یک سیستم عامل معمولی ،با برنامه ریزی پیشگیرانه که برای برآوردن نیازهای
بالدرنگ طراحی شده است.
-تأخیر وقفه مدت زمانی بین زمانی که دستگاه یک وقفه ایجاد می کند و زمانی که آن دستگاه سرویس می شود محدود و
نسبتاً کوتاه است.
-مشخصه های زمان بندی دقیق تر و قابل پیش بینی تر از سیستم عامل های عمومی
قلب یک سیستم بالدرنگ ،زمانبندی وظایف کوتاه مدت است .در طراحی چنین زمانبندی ،انصاف و به حداقل رساندن میانگین
زمان پاسخ اهمیتی ندارد .آنچه مهم است این است که تمام کارهای بالدرنگ سخت در آخرین مهلت خود کامل شوند یا شروع
شوند و تا حد امکان کارهای بالدرنگ نرم نیز تا مهلت تعیین شده تکمیل شوند یا شروع شوند.
اکثر سیستمعاملهای بالدرنگ معاصر قادر به مقابله مستقیم با مهلتها نیستند .در عوض ،آنها طوری طراحی شدهاند که تا حد
امکان پاسخگوی وظایف بالدرنگ باشند ،به طوری که وقتی یک ضرب االجل نزدیک میشود ،یک کار به سرعت برنامهریزی
شود .از این منظر ،برنامههای بالدرنگ معموالً به زمانهای پاسخ قطعی در بازههای چند میلیثانیه تا زیر میلیثانیه تحت
مجموعه وسیعی از شرایط نیاز دارند .کاربردهای پیشرو -برای مثال در شبیه سازهای هواپیماهای نظامی -اغلب دارای
محدودیت هایی در محدوده 10-10میکرو ثانیه هستند ATLA89.
شکل 10.4طیفی از احتماالت را نشان می دهد .در یک زمانبندی پیشگیرانه که از زمانبندی ساده دورگرد استفاده میکند،
یک کار بالدرنگ به صف آماده اضافه میشود تا در انتظار بازه زمانی بعدی آن باشد ،همانطور که در شکل a10.4نشان داده
شده است .در این حالت ،زمان برنامه ریزی به طور کلی برای برنامه های بالدرنگ غیرقابل قبول خواهد بود .روش دیگر ،در یک
زمانبندی غیر پیشگیرانه ،میتوانیم از مکانیسم زمانبندی اولویت استفاده کنیم و به وظایف بالدرنگ اولویت بیشتری بدهیم .در
این مورد ،یک کار بالدرنگ که آماده است ،به محض اینکه فرآیند جاری مسدود شود یا تا اتمام کامل شود ،برنامه ریزی می شود
شکل b. 10.4اگر یک کار آهسته و با اولویت پایین در یک زمان حیاتی اجرا شود ،میتواند منجر به تأخیر چند ثانیهای شود .باز
هم ،این رویکرد قابل قبول نیست .یک رویکرد امیدوارکننده تر ترکیب اولویت ها با وقفه های مبتنی بر ساعت است.
نقاط پیشگیرانه در فواصل منظم رخ می دهد .هنگامی که یک نقطه preemptionرخ می دهد ،اگر یک کار با اولویت باالتر در
انتظار باشد ،وظیفه فعلی از پیش گرفته می شود .این شامل پیش گرفتن وظایفی است که بخشی از هسته سیستم عامل هستند.
چنین تاخیری ممکن است در حدود چند میلی ثانیه باشد شکل c. 10.4در حالی که این رویکرد آخر ممکن است برای برخی از
547
سیستم عامل های داخلی و اصول طراحی548.........................................................................................................................
برنامه های کاربردی بالدرنگ کافی باشد ،اما برای برنامه های کاربردی تر کافی نخواهد بود .در این موارد ،رویکردی که در پیش
گرفته شده است ،گاهی اوقات به عنوان پیشگیرانه فوری شناخته می شود .در این حالت ،سیستم عامل تقریباً بالفاصله به وقفه
پاسخ می دهد ،مگر اینکه سیستم در بخش قفل کد بحرانی باشد .تاخیرهای زمانبندی برای یک کار بالدرنگ میتواند به 100
میکرو ثانیه یا کمتر کاهش یابد.
زمانبندی بالدرنگ یکی از فعالترین حوزههای تحقیقاتی در علوم کامپیوتر است .در این بخش فرعی ،مروری بر رویکردهای
مختلف برای زمانبندی بالدرنگ ارائه میکنیم و به دو کالس محبوب الگوریتمهای زمانبندی نگاه میکنیم.
در بررسی الگوریتمهای زمانبندی بالدرنگRAMA94 ،مشاهده میکند که رویکردهای زمانبندی مختلف به 1اینکه آیا یک
سیستم تجزیه و تحلیل زمانبندی را انجام میدهد 2 ،اگر انجام میدهد ،آیا به صورت ایستا یا پویا انجام میشود ،بستگی دارد.
3آیا نتیجه تجزیه و تحلیل به خودی خود یک برنامه زمان بندی یا برنامه ای را ایجاد می کند که طبق آن وظایف در زمان اجرا
ارسال می شوند .بر اساس این مالحظات ،نویسندگان کالس های زیر از الگوریتم ها را شناسایی می کنند:
-رویکردهای مبتنی بر جدول استاتیک :اینها یک تجزیه و تحلیل استاتیک از زمانبندیهای امکانپذیر ارسال را انجام میدهند.
نتیجه تجزیه و تحلیل یک برنامه زمانی است که تعیین می کند ،در زمان اجرا ،چه زمانی یک کار باید شروع به اجرا شود.
رویکردهای پیشگیرانه مبتنی بر اولویت استاتیک :مجدداً ،یک تجزیه و تحلیل استاتیک انجام می شود ،اما هیچ برنامه زمانی
تنظیم نمی شود .در عوض ،تجزیه و تحلیل برای تعیین اولویت ها به وظایف استفاده می شود ،به طوری که می توان از یک زمان
بندی پیشگیرانه مبتنی بر اولویت سنتی استفاده کرد.
-رویکردهای مبتنی بر برنامه ریزی پویا :امکان سنجی در زمان اجرا به صورت پویا به جای آفالین قبل از شروع اجرا به صورت
ایستا تعیین می شود.
548
سیستم عامل های داخلی و اصول طراحی549.........................................................................................................................
فرآیند بالدرنگ
زمان بندی
نقطه
پیشدستی
(ج) زمانبندی پیشگیرانه مبتنی بر اولویت در نقاط پیشگیرانه
یک کار در حال رسیدن فقط در صورتی برای اجرا پذیرفته می شود که امکان برآورده کردن محدودیت های زمانی آن وجود
داشته باشد .یکی از نتایج تحلیل امکان سنجی ،برنامه یا برنامه ای است که برای تصمیم گیری در مورد زمان اعزام این کار
استفاده می شود.
-رویکردهای بهترین تالش پویا :هیچ تحلیل امکان سنجی انجام نشده است .این سیستم سعی می کند تمام ضرب االجل ها را
رعایت کند و هر فرآیند شروع شده ای را که مهلت آن از دست رفته است ،لغو می کند.
549
سیستم عامل های داخلی و اصول طراحی550.........................................................................................................................
برنامه ریزی جدول ایستا برای کارهایی که دوره ای هستند قابل استفاده است .ورودی تجزیه و تحلیل شامل زمان رسیدن دوره
ای ،زمان اجرا ،مهلت پایان دوره ای و اولویت نسبی هر کار است .برنامهریز تالش میکند تا برنامهای ایجاد کند که بتواند الزامات
همه وظایف دورهای را برآورده کند .این یک رویکرد قابل پیشبینی است ،اما غیرقابل انعطاف است ،زیرا هر تغییری در هر یک از
الزامات کار مستلزم آن است که زمانبندی دوباره انجام شود Earliest-Deadline-First .یا سایر تکنیک های مهلت دوره ای
که بعداً مورد بحث قرار می گیرد نمونه ای از این دسته از الگوریتم های زمان بندی هستند.
زمانبندی پیشگیرانه مبتنی بر اولویت استاتیک از مکانیسم زمانبندی پیشگیرانه مبتنی بر اولویت استفاده میکند که در اکثر
سیستمهای چندبرنامهنویسی غیرحقیقی رایج است .در یک سیستم غیر واقعی ،عوامل مختلفی ممکن است برای تعیین اولویت
استفاده شود .به عنوان مثال ،در یک سیستم اشتراک زمانی ،اولویت یک فرآیند بسته به اینکه آیا محدود به پردازنده باشد یا
محدود به I/Oتغییر می کند .در یک سیستم بالدرنگ ،انتساب اولویت با محدودیت های زمانی مرتبط با هر کار مرتبط است.
یکی از نمونههای این رویکرد ،الگوریتم یکنواخت نرخ است که در ادامه مورد بحث قرار گرفت ،که اولویتهای ایستا را بر اساس
طول دورههای آنها به وظایف اختصاص میدهد.
با برنامه ریزی مبتنی بر برنامه ریزی پویا ،پس از رسیدن یک کار ،اما قبل از شروع اجرای آن ،تالش می شود تا برنامه ای ایجاد
شود که شامل وظایف برنامه ریزی شده قبلی و همچنین ورود جدید باشد .اگر بتوان ورود جدید را به گونهای برنامهریزی کرد
که ضرباالجلهای آن برآورده شود و هیچ وظیفهای که در حال حاضر برنامهریزی شده است ،ضرباالجل را از دست ندهد،
برنامه برای تطبیق با کار جدید بازنگری میشود .زمانبندی بهترین تالش پویا رویکردی است که توسط بسیاری از سیستمهای
بالدرنگ که در حال حاضر به صورت تجاری در دسترس هستند ،استفاده میشود .هنگامی که یک کار وارد می شود ،سیستم
اولویتی را بر اساس ویژگی های کار تعیین می کند .نوعی زمانبندی ضرباالجل ،مانند زمانبندی زودهنگام ،معموالً استفاده
میشود.
به طور معمول ،وظایف غیر دوره ای هستند و بنابراین هیچ تحلیل زمان بندی ایستا امکان پذیر نیست .با این نوع برنامه ریزی ،تا
زمانی که یک ضرب االجل فرا برسد یا تا زمانی که کار تکمیل شود ،نمی دانیم که آیا محدودیت زمانی برآورده خواهد شد یا
خیر .این عیب عمده این شکل از زمانبندی است .مزیت آن این است که اجرای آن آسان است.
بیشتر سیستمعاملهای بالدرنگ معاصر با هدف شروع کارهای بالدرنگ در سریعترین زمان ممکن طراحی شدهاند و از این رو بر
مدیریت سریع وقفه و ارسال کار تأکید دارند .در واقع ،این معیار مفیدی در ارزیابی سیستم عامل های بالدرنگ نیست .برنامههای
بالدرنگ معموالً به سرعت محض توجه نمیکنند ،بلکه به تکمیل یا شروع کارها در با ارزشترین زمانها ،نه خیلی زود و نه
خیلی دیر ،توجه دارند ،علیرغم تقاضاها و تضادهای پویای منابع ،بارگذاری بیش از حد پردازش ،و خطاهای سختافزاری یا
550
سیستم عامل های داخلی و اصول طراحی551.........................................................................................................................
نرمافزاری . .نتیجه این است که اولویتها ابزار خامی را ارائه میکنند و نیاز تکمیل یا شروع را در با ارزشترین زمان در بر
نمیگیرند.
تعدادی پیشنهاد برای رویکردهای قدرتمندتر و مناسبتر برای زمانبندی کار در زمان حقیقی ارائه شده است .همه اینها بر
اساس داشتن اطالعات اضافی در مورد هر کار است .در کلی ترین شکل آن ،اطالعات زیر در مورد هر کار ممکن است استفاده
شود:
-زمان آماده :زمانی که کار برای اجرا آماده می شود .در مورد یک کار تکراری یا دوره ای ،این در واقع یک توالی از زمان است
که از قبل شناخته شده است .در مورد یک کار دوره ای ،این زمان ممکن است از قبل مشخص باشد ،یا سیستم عامل ممکن
است تنها زمانی آگاه باشد که کار واقعاً آماده باشد.
-مهلت تکمیل :زمانی که یک کار باید در آن تکمیل شود .برنامه معمولی بالدرنگ یا مهلت شروع یا مهلت تکمیل خواهد داشت،
اما نه هر دو.
-زمان پردازش :زمان مورد نیاز برای اجرای کار تا تکمیل .در برخی موارد ،این عرضه می شود .در برخی دیگر ،سیستم عامل
میانگین نمایی را اندازه گیری می کند همانطور که در فصل 9تعریف شده است .برای سیستم های زمان بندی دیگر ،از این
اطالعات استفاده نمی شود.
-منابع مورد نیاز :مجموعه ای از منابع غیر از پردازنده مورد نیاز کار در حین اجرا
-اولویت :اهمیت نسبی کار را می سنجد .وظایف بالدرنگ سخت ممکن است دارای اولویت "مطلق" باشند ،در صورت از دست
دادن مهلت ،سیستم از کار می افتد .اگر قرار است سیستم بدون توجه به هر اتفاقی به کار خود ادامه دهد ،در آن صورت ممکن
است هر دو وظایف زمان حقیقی سخت و نرم به عنوان راهنما به زمانبندی اولویتهای نسبی اختصاص داده شوند.
-ساختار زیرکار :یک کار ممکن است به یک کار فرعی اجباری و یک کار فرعی اختیاری تجزیه شود .فقط وظیفه فرعی اجباری
دارای مهلت سخت است.
وقتی ضرباالجلها در نظر گرفته میشوند ،ابعاد مختلفی برای عملکرد زمانبندی بالدرنگ وجود دارد :کدام کار بعدی باید
برنامهریزی شود و چه نوع پیشگیری مجاز است .برای یک استراتژی پیشگیرانه معین و با استفاده از مهلتهای شروع یا تکمیل،
میتوان نشان داد که سیاست برنامهریزی کار با اولین مهلت ،کسری از وظایفی را که ضرباالجل خود را از دست میدهند ،به
حداقل میرساند PANW88. ،HONG89 ،BUTT99این نتیجه برای هر دو پیکربندی تک پردازنده و چند پردازنده صدق
می کند .مسئله مهم دیگر طراحی ،پیش دستی است .زمانی که ضرباالجلهای شروع مشخص میشوند ،یک زمانبندی غیر
551
سیستم عامل های داخلی و اصول طراحی552.........................................................................................................................
پیشگیرانه منطقی است .در این مورد ،وظیفه بالدرنگ این مسئولیت خواهد بود که پس از تکمیل بخش اجباری یا حیاتی اجرای
آن ،خود را مسدود کند و اجازه میدهد تا سایر مهلتهای شروع بالدرنگ برآورده شوند .این با الگوی شکل b10.4مطابقت
دارد .برای سیستمی با مهلت های تکمیل ،یک استراتژی پیشگیرانه شکل c10.4یا d 10.4مناسب ترین است.
به عنوان مثال ،اگر وظیفه Xدر حال اجرا است و وظیفه Yآماده است ،ممکن است شرایطی وجود داشته باشد که در آن تنها
راه برای اجازه دادن به Xو Yبرای رسیدن به مهلتهای تکمیلی خود این باشد که Xرا از قبل اجرا کنید Y ،را تا اتمام اجرا
کنید ،و سپس Xرا به اتمام برسانید. .
به عنوان نمونه ای از زمان بندی وظایف دوره ای با مهلت های تکمیل ،سیستمی را در نظر بگیرید که داده ها را از دو حسگر A
و Bجمع آوری و پردازش می کند.
مهلت جمع آوری داده ها از حسگر Aباید هر 20میلی ثانیه و برای Bهر 50میلی ثانیه انجام شود .برای پردازش هر نمونه از
دادهها از 10 ،Aمیلیثانیه ،از جمله سربار سیستمعامل ،و برای پردازش هر نمونه از دادهها از 25 ،Bمیلیثانیه طول میکشد.
جدول 10.3نمایه اجرای دو وظیفه را خالصه میکند .شکل 10.5سه تکنیک زمان بندی را با استفاده از نمایه اجرای جدول
10.3مقایسه می کند .ردیف اول شکل 10.6اطالعات جدول 10.3را تکرار می کند .سه ردیف باقی مانده سه تکنیک زمان
بندی را نشان می دهد.
552
سیستم عامل های داخلی و اصول طراحی553.........................................................................................................................
کامپیوتر میتواند هر 10میلیثانیه یک تصمیم زمانبندی بگیرد .فرض کنید ،در این شرایط ،ما سعی کردهایم از یک طرح
زمانبندی اولویت استفاده کنیم .دو نمودار زمان بندی اول در شکل 10.5نتیجه را نشان می دهد .اگر Aاولویت باالتری داشته
باشد ،اولین نمونه از کار Bتنها 20میلیثانیه زمان پردازش ،در دو تکه 10میلیثانیهای ،تا زمانی که مهلت آن به پایان برسد
داده میشود ،و در نتیجه با شکست مواجه میشود .اگر به Bاولویت بیشتری داده شود A ،اولین مهلت خود را از دست خواهد
داد .نمودار زمان بندی نهایی گرم استفاده از زمانبندی زودهنگام را نشان میدهد .در زمان ،t = 0هر دو A1و B1می رسند.
از آنجایی که A1زودترین مهلت را دارد ،ابتدا برنامه ریزی می شود .وقتی A1تکمیل شد B1 ،به پردازنده داده می شود .در t
A2 ،= 20می رسد .از آنجایی که A2مهلتی زودتر از B1دارد B1 ،قطع می شود تا A2بتواند تا پایان اجرا شود .سپس B1
در t = 30از سر گرفته می شود .در A3 ،t = 40می رسد .با این حال B1 ،یک مهلت پایان زودتر دارد و مجاز است تا در t
= 45اجرا شود .سپس A3به پردازنده داده می شود و در t = 55به پایان می رسد.
در این مثال ،با برنامه ریزی برای اولویت دادن در هر نقطه پیش دستی به کار با نزدیکترین مهلت ،تمام نیازهای سیستم را می
توان برآورده کرد .از آنجایی که وظایف دوره ای و قابل پیش بینی هستند ،از یک رویکرد زمان بندی جدول محور استاتیک
استفاده می شود.
553
سیستم عامل های داخلی و اصول طراحی554.........................................................................................................................
شکل 10.5برنامه ریزی دوره ای وظایف زمان حقیقی با مهلت های تکمیل براساس جدول 10.3
اکنون طرحی را برای پرداختن به وظایف دوره ای با مهلت های شروع در نظر بگیرید .قسمت باالی شکل 10.6زمان رسیدن و
مهلت های شروع را برای مثالی متشکل از پنج کار نشان می دهد که هر کدام دارای زمان اجرای 20میلی ثانیه هستند .جدول
10.4نمایه اجرای پنج وظیفه را خالصه می کند.
یک طرح ساده این است که همیشه کار آماده را با اولین ضرب االجل برنامه ریزی کنید و اجازه دهید آن کار تا تکمیل شود.
هنگامی که از این رویکرد در مثال شکل 10.6استفاده می شود ،توجه داشته باشید که اگرچه وظیفه Bنیاز به سرویس فوری
دارد ،اما این سرویس رد می شود .این خطر در مواجهه با وظایف دوره ای ،به ویژه با شروع ضرب االجل است .اگر بتوان از قبل از
زمان آماده شدن یک کار ،ضرب االجل ها را مشخص کرد ،اصالح خط مشی عملکرد را بهبود می بخشد .این خطمشی ،که به
عنوان زودترین مهلت با زمانهای بیکاری غیراجباری نامیده میشود ،به شرح زیر عمل میکند :همیشه کار واجد شرایط را با
اولین مهلت زمانبندی کنید و اجازه دهید آن کار تا تکمیل شود .یک کار واجد شرایط ممکن است آماده نباشد ،و این ممکن
است منجر به بیکار ماندن پردازنده شود ،حتی اگر کارهای آماده وجود داشته باشد .توجه داشته باشید که در مثال ما ،سیستم از
برنامه ریزی کار Aخودداری می کند ،حتی اگر این تنها کار آماده باشد .نتیجه این است که ،حتی اگر پردازنده به حداکثر
بازدهی استفاده نمی شود ،تمام الزامات زمان بندی برآورده شده است .در نهایت ،برای مقایسه ،سیاست FCFSنشان داده شده
است .در این صورت ،وظایف Bو Eبه ضرب االجل خود نمی رسند.
554
سیستم عامل های داخلی و اصول طراحی555.........................................................................................................................
زمان ورود
الزامات
مهلت شروع
زمان ورود
زودترین مهلت
سرویس
مهلت شروع
زمان ورود
زودترین مهلت
سرویس
با اوقات بیکاری
مهلت شروع
غیر اجباری
زمان ورود
اولین خدمت
سرویس
)(FCFS
مهلت شروع
شکل 10.6برنامه ریزی وظایف زمان حقیقی متناوب با مهلت های شروع
یکی از روشهای امیدوارکنندهتر برای حل تعارضهای زمانبندی چند وظیفهای برای وظایف دورهای ،زمانبندی یکنواخت نرخ
RMSاست SHA94. RMS ،BRIA99 ،LIU73اولویت ها را به وظایف بر اساس دوره های آنها اختصاص می دهد.
برای ،RMSکار با باالترین اولویت کاری است که کوتاه ترین دوره را داشته باشد ،وظیفه دوم با باالترین اولویت کاری است که
دومین کوتاه ترین دوره را دارد و غیره .زمانی که بیش از یک کار برای اجرا در دسترس باشد ،ابتدا کاری که کوتاهترین دوره را
دارد سرویس میشود .اگر اولویت وظایف را به عنوان تابعی از نرخ آنها رسم کنیم ،نتیجه یک تابع افزایشی یکنواخت خواهد بود
شکل ،10.7از این رو به آن "زمان بندی یکنواخت نرخ" می گویند.
باالترین نرخ و
باالترین اولویت
کار
کمترین نرخ و
کمترین اولویت
کار
شکل 10.8پارامترهای مربوطه را برای وظایف دوره ای نشان می دهد .دوره وظیفه ،T ،مقدار زمان بین رسیدن یک نمونه از کار
و رسیدن نمونه بعدی از کار است .نرخ یک کار به هرتز به سادگی معکوس دوره آن بر حسب ثانیه است .به عنوان مثال ،یک کار
با دوره 50میلی ثانیه با نرخ 20هرتز انجام می شود .به طور معمول ،پایان دوره یک کار ،مهلت سخت کار نیز است ،اگرچه
ممکن است برخی از کارها مهلت های زودتر داشته باشند .زمان اجرا یا محاسبه ،C ،مقدار زمان پردازش مورد نیاز برای هر وقوع
کار است .باید واضح باشد که در یک سیستم تک پردازنده ،زمان اجرا نباید بیشتر از دوره باشد باید C≤ Tداشته باشد .اگر یک
کار دوره ای همیشه تا تکمیل انجام شود ،یعنی اگر هیچ نمونه ای از کار به دلیل نارسایی از خدمت رد نشود.
منابع کارآمد ،پس استفاده از پردازنده توسط این وظیفه U = C/Tاست .به عنوان مثال ،اگر یک کار دارای دوره زمانی 80
میلیثانیه و زمان اجرای آن 55میلیثانیه باشد ،میزان استفاده از پردازنده آن 0.6875 = 55/80است.
یکی از معیارهای اثربخشی الگوریتم زمان بندی دوره ای این است که آیا یا نه ،تضمین می کند که تمام ضرب االجل های
سخت رعایت شده است .فرض کنید nوظیفه داریم که هر کدام یک دوره و زمان اجرای ثابت دارند .سپس برای اینکه بتوان
تمام مهلتها را رعایت کرد ،نابرابری زیر باید برقرار باشد:
556
سیستم عامل های داخلی و اصول طراحی557.........................................................................................................................
مجموع استفادههای پردازشگر از تکالیف تکی نمیتواند از مقدار 1تجاوز کند که مربوط به استفاده کل پردازنده است .معادله
10.1محدودیتی را بر تعداد وظایفی که یک الگوریتم زمانبندی کامل می تواند با موفقیت برنامه ریزی کند ،ارائه می دهد .برای
هر الگوریتم خاصی ،کران ممکن است کمتر باشد .برای ،RMSمی توان نشان داد که نابرابری زیر برقرار است:
جدول 10.5مقادیری را برای این کران باال نشان می دهد .با افزایش تعداد کارها ،کران زمان بندی به ln 2 ≈ 0.693همگرا
می شود .به عنوان مثال ،مورد سه کار دوره ای را در نظر بگیرید ،که در آن Ui Ci/Ti:
مجموع استفاده از این سه کار 0.753 0.286 0.267 0.2است .حد باالیی برای زمانبندی این سه کار با استفاده از RMS
است
از آنجایی که کل استفاده مورد نیاز برای سه کار کمتر از حد باالیی برای RMS 0.753 0.779است ،می دانیم که در صورت
استفاده از ،RMSهمه وظایف با موفقیت برنامه ریزی می شوند.
557
سیستم عامل های داخلی و اصول طراحی558.........................................................................................................................
.1تفاوت عملکرد در عمل کم است .حد باالیی معادله 10.2یک مرز محافظه کارانه است و در عمل ،استفاده تا %90اغلب به
دست می آید.
.2اکثر سیستمهای بالدرنگ سخت دارای اجزای نرمافزار بالدرنگ هستند ،مانند نمایشگرهای غیر بحرانی خاص و
خودآزماییهای داخلی که میتوانند در سطوح اولویت پایینتر اجرا شوند تا زمان پردازشگر را که با زمانبندی RMSاستفاده
نمیشود ،جذب کنند .وظایف زمان حقیقی
.3دستیابی به ثبات با RMSآسانتر است .هنگامی که یک سیستم به دلیل اضافه بار یا خطاهای گذرا نمی تواند تمام ضرب
االجل ها را برآورده کند ،ضرب االجل وظایف ضروری باید تضمین شود مشروط بر اینکه این زیرمجموعه وظایف قابل برنامه
ریزی باشد.
در رویکرد تخصیص اولویت ایستا ،تنها باید اطمینان حاصل شود که وظایف اساسی دارای اولویت های نسبتاً باالیی هستند .این
را می توان در RMSبا ساختاردهی وظایف ضروری برای داشتن دوره های کوتاه مدت یا با اصالح اولویت های RMSبرای در
نظر گرفتن وظایف ضروری انجام داد .با برنامه ریزی زودهنگام ،اولویت یک کار دوره ای از یک دوره به دوره دیگر تغییر می کند.
این امر اطمینان از اینکه وظایف اساسی به ضرب االجل خود می رسند دشوارتر می شود.
وارونگی اولویت
وارونگی اولویت پدیدهای است که میتواند در هر طرح زمانبندی پیشگیرانه مبتنی بر اولویت رخ دهد ،اما به ویژه در زمینه
زمانبندی بالدرنگ مرتبط است .شناخته شده ترین نمونه وارونگی اولویت شامل مأموریت رهیاب مریخ بود .این ربات مریخ نورد
در 4جوالی 1997بر روی مریخ فرود آمد و شروع به جمع آوری و انتقال داده های حجیم به زمین کرد .اما چند روز پس از
مأموریت ،نرمافزار فرودگر شروع به بازنشانی کلی سیستم کرد که هر کدام منجر به از دست رفتن دادهها میشد .پس از تالش
زیاد توسط تیم آزمایشگاه پیشرانه جت JPLکه Pathfinderرا ساخت ،مشکل در وارونگی اولویت JONE97ردیابی شد.
در هر طرح زمانبندی اولویت ،سیستم باید همیشه وظیفه را با باالترین اولویت اجرا کند .وارونگی اولویت زمانی اتفاق میافتد که
شرایط درون سیستم یک کار با اولویت باالتر را مجبور میکند تا برای یک کار با اولویت پایینتر منتظر بماند .یک مثال ساده از
558
سیستم عامل های داخلی و اصول طراحی559.........................................................................................................................
وارونگی اولویت زمانی رخ میدهد که یک کار با اولویت پایینتر یک منبع را قفل کرده باشد مانند یک دستگاه یا یک سمافور
باینری و یک کار با اولویت باالتر سعی کند همان منبع را قفل کند .تا زمانی که منبع در دسترس باشد ،وظیفه با اولویت باالتر
در حالت مسدود قرار می گیرد .اگر کار با اولویت پایین به زودی با منبع تمام شود و آن را آزاد کند ،کار با اولویت باالتر ممکن
است به سرعت از سر گرفته شود و این امکان وجود دارد که هیچ محدودیتی در زمان حقیقی نقض نشود.
یک وضعیت جدی تر به عنوان وارونگی اولویت نامحدود نامیده می شود ،که در آن مدت زمان وارونگی اولویت نه تنها به زمان
مورد نیاز برای مدیریت یک منبع مشترک ،بلکه به اقدامات غیرقابل پیش بینی سایر وظایف نامرتبط بستگی دارد .وارونگی
اولویت تجربه شده در نرم افزار Pathfinderنامحدود بود و نمونه خوبی از این پدیده است .بحث ما از TIME02پیروی می
کند .نرم افزار Pathfinderسه وظیفه زیر را به ترتیب اولویت شامل می شود:
T1:به طور دوره ای سالمت سیستم ها و نرم افزار فضاپیما را بررسی می کند T2:داده های تصویر را پردازش می کند
پس از اجرای ،T1یک تایمر را مجدداً به حداکثر مقدار خود راه اندازی می کند .اگر این تایمر منقضی شود ،فرض بر این است
که یکپارچگی نرم افزار فرودگر به نوعی به خطر افتاده است .پردازنده متوقف میشود ،همه دستگاهها ریست میشوند ،نرمافزار
بهطور کامل بارگیری میشود ،سیستمهای فضاپیما آزمایش میشوند و سیستم دوباره شروع به کار میکند .این توالی بهبودی تا
روز بعد کامل نمی شود T1 .و T3یک ساختار داده مشترک دارند که توسط یک سمافور باینری محافظت می شود .شکل
a10.9دنباله ای را نشان می دهد که باعث وارونگی اولویت شده است:
t3: T1که اولویت باالتری نسبت به T3دارد ،از T3جلوگیری می کند و اجرا را آغاز می کند.
t4: T1سعی می کند وارد بخش حیاتی خود شود اما مسدود می شود زیرا سمافور توسط T3قفل شده است T3 .اجرا را در
بخش بحرانی خود از سر می گیرد.
t5: T2که اولویت باالتری نسبت به T3دارد ،از T3جلوگیری می کند و اجرا را آغاز می کند.
t6: T2به دالیلی غیر مرتبط با T1و T3معلق است T3 .از سر گرفته می شود.
t7: T3بخش مهم خود را ترک می کند و سمافور را باز می کند T1 .از T3جلوگیری می کند ،سمافور را قفل می کند و وارد
بخش حیاتی آن می شود.
559
سیستم عامل های داخلی و اصول طراحی560.........................................................................................................................
در این مجموعه شرایط T1 ،باید منتظر بماند تا T3و T2تکمیل شوند و تایمر را قبل از انقضای آن بازنشانی کند.
در سیستم های عملی ،دو رویکرد جایگزین برای جلوگیری از وارونگی اولویت نامحدود استفاده می شود :پروتکل وراثت اولویت و
پروتکل سقف اولویت.
ایده اصلی وراثت با اولویت این است که یک کار با اولویت پایین اولویت هر کار با اولویت باالتر را در انتظار منبعی که آنها به
اشتراک می گذارند به ارث می برد .این تغییر اولویت به محض مسدود شدن وظیفه با اولویت باالتر روی منبع انجام می شود.
باید زمانی پایان یابد که منبع توسط وظیفه با اولویت پایینتر آزاد شود .شکل b10.9نشان می دهد که وراثت اولویت مشکل
وارونگی اولویت نامحدود نشان داده شده در شکل a10.9را حل می کند .توالی رویدادهای مربوطه به شرح زیر است:
t3: T1که اولویت باالتری نسبت به T3دارد ،از T3جلوگیری می کند و اجرا را آغاز می کند t4: T1 .سعی می کند وارد
بخش بحرانی خود شود اما به دلیل سمافور مسدود می شود
توسط T3قفل شده است .به T3فورا و به طور موقت همان اولویت T1اختصاص داده می شود T3 .اجرا را در بخش بحرانی
خود از سر می گیرد.
t5: T2آماده اجرا است ،اما از آنجایی که T3اکنون اولویت بیشتری دارد T2 ،نمی تواند از T3جلوگیری کند.
560
سیستم عامل های داخلی و اصول طراحی561.........................................................................................................................
t6: T3بخش بحرانی خود را ترک می کند و قفل سمافور را باز می کند :سطح اولویت آن به سطح پیش فرض قبلی کاهش می
یابد T1 .از T3جلوگیری می کند ،سمافور را قفل می کند و وارد بخش بحرانی آن می شود.
t7: T1به دالیلی غیر مرتبط با T2به حالت تعلیق درآمده و T2شروع به اجرا می کند .این رویکردی بود که برای حل مشکل
Pathfinderاتخاذ شد .در رویکرد سقف اولویت ،یک اولویت با هر منبع مرتبط است .اولویت اختصاص داده شده به یک منبع
یک سطح باالتر از اولویت کاربر با باالترین اولویت آن است .سپس زمانبند به صورت پویا این اولویت را به هر کاری که به منبع
دسترسی دارد اختصاص می دهد .پس از اتمام کار با منبع ،اولویت آن به حالت عادی باز می گردد.
برای لینوکس 2.4و پیش از آن ،لینوکس یک قابلیت زمانبندی بیدرنگ همراه با یک زمانبندی برای فرآیندهای غیرحقیقی
ارائه کرد که از الگوریتم زمانبندی سنتی یونیکس که در بخش 9.3توضیح داده شد ،استفاده میکرد .لینوکس 2.6اساساً دارای
همان قابلیت زمانبندی بالدرنگ نسخههای قبلی و یک زمانبندی اصالحشده اساسی برای فرآیندهای غیرحقیقی است .این دو
حوزه را به ترتیب بررسی می کنیم.
561
سیستم عامل های داخلی و اصول طراحی562.........................................................................................................................
در هر کالس ،چندین اولویت ممکن است استفاده شود ،با اولویتهای کالسهای همزمان باالتر از اولویتهای کالس
SCHED_OTHER.مقادیر پیشفرض به شرح زیر است :کالسهای اولویت بالدرنگ از 0تا 99شامل ،و کالسهای
SCHED_ OTHERاز 100تا 139متغیر هستند .عدد کمتر برابر با اولویت باالتر است.
.1سیستم یک رشته FIFOدر حال اجرا را قطع نمی کند مگر در موارد زیر:
ج رشته FIFOدر حال اجرا به دنبال فراخوانی به sched_yieldاولیه به طور داوطلبانه پردازنده را رها می کند.
.2هنگامی که یک رشته FIFOدر حال اجرا قطع می شود ،در صف مرتبط با اولویت آن قرار می گیرد.
.3هنگامی که یک رشته FIFOآماده می شود و اگر آن رشته اولویت باالتری نسبت به رشته در حال اجرای فعلی داشته باشد،
رشته در حال اجرا از قبل انتخاب می شود و رشته FIFOآماده با باالترین اولویت اجرا می شود .اگر بیش از یک رشته دارای
باالترین اولویت باشد ،موضوعی انتخاب میشود که طوالنیترین مدت در انتظار آن بوده است.
خط مشی SCHED_RRمشابه خط مشی SCHED_FIFOاست ،به جز اضافه کردن یک تایم الیس مربوط به هر رشته.
هنگامی که یک رشته SCHED_RRبرای تایمالیس خود اجرا میشود ،به حالت تعلیق در میآید و یک رشته زمان حقیقی با
اولویت برابر یا باالتر برای اجرا انتخاب میشود.
شکل 10.10نمونه ای است که تمایز بین زمان بندی FIFOو RRرا نشان می دهد .فرض کنید یک فرآیند دارای چهار رشته
با سه اولویت نسبی است که در شکل a10.10نشان داده شده است .فرض کنید همه رشتههای منتظر زمانی که رشته فعلی
منتظر میماند یا خاتمه مییابد آماده اجرا هستند و هیچ رشته با اولویت باالتری در حین اجرای یک رشته فعال نمیشود .شکل
562
سیستم عامل های داخلی و اصول طراحی563.........................................................................................................................
b10.10جریانی را نشان می دهد که در آن همه رشته ها در کالس SCHED_FIFOهستند Thread D .تا زمانی که
منتظر بماند یا خاتمه یابد اجرا می شود .در مرحله بعد ،گرچه رشتههای Bو Cاولویت یکسانی دارند ،رشته Bشروع میشود
زیرا بیشتر از رشته Cمنتظر بوده است .در نهایت thread Aاجرا می شود.
شکل c10.10یک جریان نمونه را نشان می دهد اگر همه رشته ها در کالس SCHED_RRباشند Thread D .تا زمانی که
منتظر بماند یا خاتمه یابد اجرا می شود .در مرحله بعد ،رشته های Bو Cزمان برش داده می شوند ،زیرا هر دو دارای اولویت
یکسانی هستند .در نهایت thread Aاجرا می شود .کالس زمانبندی نهایی SCHED_OTHERاست .یک رشته در این
کالس تنها در صورتی می تواند اجرا شود که هیچ رشته ای در زمان حقیقی آماده اجرا نباشد.
زمانبندی لینوکس 2.4برای کالس SCHED_OTHERبا افزایش تعداد پردازندهها و افزایش تعداد فرآیندها به خوبی
مقیاسپذیر نبود .از معایب این زمانبندی می توان به موارد زیر اشاره کرد:
-زمانبند لینوکس 2.4از یک صف اجرا برای همه پردازنده ها در یک سیستم چند پردازشی متقارن SMPاستفاده می کند.
این به این معنی است که می توان یک کار را روی هر پردازنده ای برنامه ریزی کرد که می تواند برای متعادل کردن بار خوب
باشد اما برای کش حافظه بد است .به عنوان مثال ،فرض کنید یک وظیفه بر روی CPU-1اجرا شده است و داده های آن در
حافظه پنهان آن پردازنده قرار دارد .اگر کار دوباره به CPU-2برنامه ریزی شود ،داده های آن باید در CPU-1باطل شود و به
CPU-2آورده شود.
563
سیستم عامل های داخلی و اصول طراحی564.........................................................................................................................
-زمانبند لینوکس 2.4از یک قفل در صف اجرا استفاده میکند .بنابراین ،در یک سیستم ،SMPعمل انتخاب یک کار برای
اجرا ،هر پردازنده دیگری را از دستکاری صفهای متوالی قفل میکند .نتیجه این است که پردازندههای بیکار در انتظار انتشار
قفل runqueueو کاهش کارایی هستند.
r Preemptionدر زمانبندی لینوکس 2.4امکان پذیر نیست .این بدان معنی است که یک کار با اولویت پایین تر می تواند
اجرا شود در حالی که یک کار با اولویت باالتر منتظر تکمیل آن است.
برای اصالح این مشکالت ،لینوکس 2.6از یک زمانبندی اولویت کامالً جدید به نام زمانبند O1استفاده میکند .زمانبندی به
گونهای طراحی شده است که زمان انتخاب فرآیند مناسب و اختصاص آن به یک پردازنده ،بدون توجه به بار روی آن ،ثابت باشد.
سیستم یا تعداد پردازنده ها هسته دو ساختار داده زمانبندی را برای هر پردازنده در سیستم به شکل زیر حفظ می کند شکل
:10.11
یک صف جداگانه برای هر سطح اولویت نگهداری می شود .تعداد کل صفها در ساختار MAX_PRIOاست که دارای مقدار
پیشفرض 140است .این ساختار همچنین شامل یک آرایه بیت مپ با اندازه کافی برای ارائه یک بیت در هر سطح اولویت
است .بنابراین ،با 140سطح اولویت و کلمات 32بیتی BITMAP_SIZE ،دارای ارزش 5است .این یک بیت مپ از 160
564
سیستم عامل های داخلی و اصول طراحی565.........................................................................................................................
بیت ایجاد می کند که 20بیت نادیده گرفته می شود .بیت مپ نشان می دهد که کدام صف ها خالی نیستند .در نهایت،
nr_activeتعداد کل وظایف موجود در تمام صف ها را نشان می دهد .دو ساختار حفظ می شود :یک ساختار صف فعال و یک
ساختار صف منقضی شده.
در ابتدا ،هر دو بیت مپ روی صفر تنظیم می شوند و تمام صف ها خالی هستند .هنگامی که یک فرآیند آماده می شود ،به صف
اولویت مناسب در ساختار صف های فعال اختصاص داده می شود و زمانی مناسب به آن اختصاص می یابد .اگر یک کار قبل از
تکمیل بازه زمانی خود از قبل انتخاب شود ،به یک صف فعال بازگردانده می شود .هنگامی که یک کار ،تایمالیس خود را تکمیل
میکند ،به صف مناسب در ساختار صفهای منقضی شده میرود و یک تایمالیس جدید به آن اختصاص مییابد .تمام
زمانبندیها از میان وظایف موجود در ساختار صفهای فعال انجام میشود .هنگامی که ساختار صف های فعال خالی است ،یک
انتساب نشانگر ساده منجر به تغییر صف های فعال و منقضی شده می شود و زمان بندی ادامه می یابد .برنامه ریزی ساده و
کارآمد است .در یک پردازنده معین ،زمانبندیکننده صف بدون خالی با باالترین اولویت را انتخاب میکند .اگر چندین کار در
آن صف باشد ،وظایف به صورت دوره ای برنامه ریزی می شوند.
لینوکس همچنین دارای مکانیزمی برای انتقال وظایف از لیست صف یک پردازنده به پردازنده دیگر است .به طور دورهای،
زمانبند بررسی میکند که آیا عدم تعادل اساسی در بین تعداد وظایف محول شده به هر پردازنده وجود دارد یا خیر .برای
متعادل کردن بار ،برنامه می تواند برخی از وظایف را منتقل کند .وظایف فعال با باالترین اولویت برای انتقال انتخاب می شوند،
زیرا توزیع عادالنه وظایف با اولویت باال اهمیت بیشتری دارد.
محاسبه اولویتها و زمانبندیها به هر کار غیرحقیقی یک اولویت اولیه در محدوده 100تا 139با پیشفرض 120اختصاص
داده میشود .این اولویت ثابت کار است و توسط کاربر مشخص میشود .همانطور که کار اجرا می شود ،یک اولویت پویا به عنوان
تابعی از اولویت ثابت کار و رفتار اجرای آن محاسبه می شود .زمانبندی لینوکس به گونه ای طراحی شده است که وظایف I/O-
boundرا نسبت به وظایف محدود به پردازنده ترجیح دهد .این اولویت تمایل به ارائه پاسخ تعاملی خوبی دارد .تکنیکی که
لینوکس برای تعیین اولویت پویا استفاده میکند این است که یک برگه در حال اجرا در مورد مدت زمان خواب یک فرآیند
انتظار برای یک رویداد در مقابل مدت زمان اجرای فرآیند نگهداری میشود .در اصل ،کاری که بیشتر وقت خود را صرف خواب
می کند ،اولویت بیشتری دارد .تایم اسالیس ها در محدوده 10تا 200میلی ثانیه اختصاص داده می شوند .به طور کلی ،به
وظایف با اولویت باالتر ،بازه های زمانی بزرگ تری اختصاص داده می شود .ارتباط با وظایف بیدرنگ وظایف بیدرنگ به روشی
متفاوت از کارهای غیر همزمان در صفهای اولویتدار انجام میشود .مالحظات زیر اعمال می شود:
.1همه کارهای بالدرنگ فقط دارای اولویت ثابت هستند .هیچ تغییری در اولویت پویا ایجاد نمی شود.
565
سیستم عامل های داخلی و اصول طراحی566.........................................................................................................................
.2وظایف SCHED_FIFOدارای بازه زمانی اختصاصی نیستند .چنین وظایفی در رشته FIFOبرنامه ریزی شده اند .اگر
یک کار SHED_FIFOمسدود شود ،هنگامی که رفع انسداد شود به همان صف اولویت در لیست صف فعال باز می گردد.
.3اگرچه وظایف SCHED_RRدارای تایم الیسنس هستند ،اما هرگز به لیست صف منقضی شده منتقل نمی شوند .وقتی
یک کار SCHED_RRتایمالیس خود را تمام میکند ،با همان مقدار تایمالیس به صف اولویت خود بازگردانده میشود.
مقادیر Timesliceهرگز تغییر نمی کنند.
اثر این قوانین این است که جابجایی بین لیست صف فعال و لیست صف منقضی شده تنها زمانی اتفاق می افتد که هیچ کار
بالدرنگ آماده ای در انتظار اجرا نباشد.
الگوریتم زمانبندی مورد استفاده در UNIX SVR4یک بازنگری کامل از الگوریتم زمانبندی مورد استفاده در سیستمهای
یونیکس قبلی است شرح شده در بخش .9.3الگوریتم جدید به گونهای طراحی شده است که باالترین اولویت را به فرآیندهای
بالدرنگ ،باالترین اولویت را به فرآیندهای حالت هسته ،و کمترین اولویت را به سایر فرآیندهای حالت کاربر ،که فرآیندهای
اشتراک زمانی نامیده میشوند ،بدهد.
.1اضافه شدن یک برنامه زمانبندی اولویت ایستا پیشگیرانه و معرفی مجموعه ای از 160سطح اولویت تقسیم شده به سه کالس
اولویت.
.2درج امتیازهای پیش دستی .از آنجایی که هسته اصلی پیشگیرانه نیست ،فقط می تواند به مراحل پردازشی تقسیم شود که
باید بدون وقفه کامل شوند .در بین مراحل پردازش ،مکانهای امنی که به عنوان نقاط preemptionشناخته میشوند،
شناسایی شدهاند که هسته میتواند با خیال راحت پردازش را قطع کند و یک فرآیند جدید را برنامهریزی کند .مکان امن به
عنوان منطقه ای از کد تعریف می شود که در آن تمام ساختارهای داده هسته یا به روز و سازگار هستند یا از طریق یک سمافور
قفل شده اند .شکل 160 10.12سطح اولویت تعریف شده در SVR4را نشان می دهد .هر فرآیند به یکی از سه کالس اولویت
تعلق دارد و یک سطح اولویت در آن کالس به آن اختصاص داده می شود .کالس ها به شرح زیر است:
-زمان حقیقی :100-159فرآیندهای این سطوح اولویت تضمین می شوند که قبل از هر هسته یا فرآیند اشتراک زمانی انتخاب
شوند .عالوه بر این ،فرآیندهای بالدرنگ می توانند از نقاط preemptionبرای جلوگیری از فرآیندهای هسته و فرآیندهای
کاربر استفاده کنند.
566
سیستم عامل های داخلی و اصول طراحی567.........................................................................................................................
r Kernel 99-60:فرآیندهای این سطوح اولویت تضمین شده برای اجرا قبل از هر فرآیند اشتراک زمانی انتخاب می شوند،
اما باید به فرآیندهای زمان حقیقی موکول شوند.
-زمان اشتراک گذاری :0-59فرآیندهای با کمترین اولویت ،در نظر گرفته شده برای برنامه های کاربر به غیر از برنامه های
زمان حقیقی.
شکل 10.13نحوه اجرای زمان بندی در SVR4را نشان می دهد .یک صف اعزام با هر سطح اولویت مرتبط است و فرآیندها
در یک سطح اولویت معین به صورت دور برگشتی اجرا می شوند .یک بردار ،dqactmap ،bit-mapحاوی یک بیت برای هر
سطح اولویت است .بیت برای هر سطح اولویت با یک صف غیر خالی روی یک تنظیم می شود .هر زمان که یک فرآیند در حال
اجرا به دلیل بلوک ،انقضای زمان یا پیشپرداخت از حالت Runningخارج میشود ،توزیعکننده dqactmapرا بررسی
میکند و یک فرآیند آماده را از صف غیر خالی با باالترین اولویت ارسال میکند .عالوه بر این ،هر زمان که به یک نقطه
preemptionتعریف شده رسید ،هسته پرچمی به نام kprunrunرا بررسی می کند .اگر تنظیم شود ،این نشان میدهد که
567
سیستم عامل های داخلی و اصول طراحی568.........................................................................................................................
حداقل یک فرآیند بالدرنگ در حالت آماده است ،و هسته فرآیند فعلی را در صورتی که اولویت کمتری نسبت به فرآیند آماده
بالدرنگ با باالترین اولویت داشته باشد ،پیشی میگیرد.
در کالس اشتراک زمانی ،اولویت یک فرآیند متغیر است .زمانبند هر بار که از یک کوانتوم زمانی استفاده می کند ،اولویت یک
فرآیند را کاهش می دهد و اگر روی یک رویداد یا منبع مسدود شود ،اولویت آن را افزایش می دهد .کوانتوم زمانی تخصیص
یافته به یک فرآیند اشتراک زمانی به اولویت آن بستگی دارد ،از 100میلی ثانیه برای اولویت 0تا 10میلی ثانیه برای اولویت
.59هر فرآیند بالدرنگ دارای یک اولویت ثابت و یک کوانتوم زمان ثابت است.
زمانبند یونیکس FreeBSDبه گونهای طراحی شده است که عملکرد کارآمدتری نسبت به زمانبندیهای قبلی یونیکس در
زیر بار سنگین و زمانی که روی یک پلتفرم چند پردازنده یا چند هستهای استفاده میشود ،ارائه دهد .زمانبندی بسیار پیچیده
است و در اینجا مروری بر مهم ترین ویژگی های طراحی ارائه می دهیم .برای جزئیات بیشترMCKU05 ،و ROBE03را
ببینید.
مکانیسم اولویت اساسی در زمانبندی FreeBSD 5.1مشابه مکانیسم UNIX SVR4است .برای ،FreeBSDپنج کالس
اولویت تعریف شده است جدول .10.6دو کالس اول برای رشتههای حالت هسته و کالسهای باقیمانده برای رشتههای حالت
کاربر هستند .رشتههای هسته کدی را اجرا میکنند که در تصویر بارگذاری هسته اجرا شده و با کد اجرای ممتاز هسته کار
میکند.
موضوعات با باالترین اولویت به عنوان هسته نیمه پایین نامیده می شوند .موضوعات این کالس که در هسته اجرا می شوند بر
اساس اولویت های وقفه برنامه ریزی می شوند .این اولویتها زمانی تنظیم میشوند که دستگاههای مربوطه پیکربندی شدهاند و
تغییر نمیکنند .رشته های نیمه باالی هسته نیز در هسته اجرا می شوند و توابع مختلف هسته را اجرا می کنند .این اولویت ها
بر اساس اولویت های از پیش تعریف شده تنظیم می شوند و هرگز تغییر نمی کنند.
کالس بعدی با اولویت پایین تر ،کاربر بالدرنگ نامیده می شود .موضوعی با اولویت بالدرنگ در معرض تخریب اولویت نیست.
یعنی یک موضوع بالدرنگ اولویتی را که با آن شروع شده است حفظ میکند و در نتیجه استفاده از منابع به اولویت پایینتری
سقوط نمیکند .در مرحله بعدی کالس اولویت کاربر اشتراک زمانی می آید .برای رشتههای این کالس ،اولویت بهطور دورهای بر
اساس تعدادی پارامتر ،از جمله میزان زمان استفادهشده پردازنده ،مقدار منابع حافظه نگهداری شده ،و سایر پارامترهای مصرف
568
سیستم عامل های داخلی و اصول طراحی569.........................................................................................................................
منابع ،دوباره محاسبه میشود .پایین ترین محدوده اولویت ها به عنوان کالس کاربر بیکار نامیده می شود .این کالس برای برنامه
هایی در نظر گرفته شده است که تنها زمانی زمان پردازشگر را مصرف می کنند که هیچ رشته دیگری آماده اجرا نباشد.
آخرین نسخه زمانبندی FreeBSDکه با FreeBSD 5.0معرفی شد ،برای ارائه زمانبندی موثر برای یک سیستم SMPیا
چند هسته ای طراحی شده است .زمانبندی جدید سه هدف طراحی را برآورده می کند:
-به نیاز به میل پردازنده در سیستم های SMPو چند هسته ای توجه کنید .اصطالح Craft Affinityبه زمانبندی اشاره
دارد که فقط در صورت لزوم یک رشته را منتقل میکند رشته را از یک پردازنده به پردازنده دیگر منتقل میکند تا از داشتن
یک پردازنده بیکار جلوگیری کند.
-پشتیبانی بهتری برای چند رشته ای در سیستم های چند هسته ای ارائه دهید.
-عملکرد الگوریتم زمانبندی را بهبود بخشید ،به طوری که دیگر تابعی از تعداد رشتههای موجود در سیستم نباشد.
در این بخش فرعی ،ما به سه ویژگی کلیدی زمانبندی جدید نگاه می کنیم :ساختار صف ،امتیازدهی تعاملی ،و مهاجرت رشته.
0–63 با وقفه برنامه ریزی شده است .می تواند برای منتظر ماندن منبع هسته نیمه پایین
مسدود شود
64–127 هسته نیمه باالیی اجرا می شود تا زمانی که مسدود یا تمام شود .می تواند برای
منتظر ماندن منبع مسدود شود
128–159 مجاز به اجرا تا زمانی که مسدود شود یا تا زمانی که یک رشته با کاربر بالدرنگ
اولویت باالتر در دسترس قرار گیرد .برنامه ریزی پیشگیرانه
160–223 کاربر اشتراک زمان اولویت ها را بر اساس استفاده از پردازنده تنظیم می کند
224–255 کاربر بیکار فقط زمانی اجرا شود که اشتراکگذاری زمانی یا رشتههای
بالدرنگ برای اجرا وجود نداشته باشد
569
سیستم عامل های داخلی و اصول طراحی570.........................................................................................................................
ساختار صف نسخه قبلی زمانبندی FreeBSDاز یک صف زمانبندی جهانی برای همه پردازنده ها استفاده می کرد که یک بار
در ثانیه برای محاسبه مجدد اولویت های آنها از آن عبور می کرد .استفاده از یک لیست واحد برای همه رشتهها به این معنی
است که عملکرد زمانبند به تعداد وظایف سیستم بستگی دارد و با افزایش تعداد وظایف ،زمان پردازشگر بیشتری باید در
زمانبندی برای حفظ لیست صرف شود.
زمانبند جدید برنامه ریزی را به طور مستقل برای هر پردازنده انجام می دهد .برای هر پردازنده ،سه صف نگهداری می شود .هر
یک از صف ها دارای ساختاری هستند که در شکل 10.14برای SVR4نشان داده شده است .دو ردیف ،کالسهای زمانبندی
هسته ،بالدرنگ و اشتراک زمانی را پیادهسازی میکنند اولویتهای 0تا .223صف سوم فقط برای کالس بیکار است اولویت
های 224تا .255
دو ران صف فعلی و بعدی تعیین می شوند .هر رشته ای که به آن یک تایم الیس محل در حالت آماده اعطا می شود ،در صف
فعلی یا صف بعدی ،همانطور که در ادامه توضیح داده شد ،در اولویت مناسب برای آن رشته قرار می گیرد .زمانبند برای یک
پردازنده رشته ها را از صف فعلی به ترتیب اولویت انتخاب می کند تا زمانی که صف فعلی خالی شود .هنگامی که صف فعلی
خالی است ،زمانبندیکننده صف فعلی و بعدی را تعویض میکند و شروع به زمانبندی رشتهها از صف فعلی جدید میکند.
استفاده از دو صف را تضمین می کند که به هر رشته حداقل یک بار در هر دو سوئیچ صف بدون توجه به اولویت زمان پردازش
داده می شود و از گرسنگی جلوگیری می کند .چندین قانون تخصیص یک رشته را به صف فعلی یا صف بعدی تعیین می کند:
570
سیستم عامل های داخلی و اصول طراحی571.........................................................................................................................
.2یک رشته اشتراک زمانی به صف فعلی اختصاص داده می شود اگر تعاملی باشد در بخش فرعی بعدی توضیح داده شد یا در
غیر این صورت به صف بعدی .قرار دادن رشتههای بینفعال در صف فعلی منجر به زمان پاسخ تعاملی پایینی برای چنین
رشتههایی میشود ،در مقایسه با سایر رشتههای اشتراکگذاری زمانی که درجه باالیی از تعامل را نشان نمیدهند.
امتیازدهی تعاملی اگر نسبت زمان خواب داوطلبانه آن به زمان اجرای آن کمتر از یک آستانه معین باشد ،رشته ای تعاملی در
نظر گرفته می شود .رشته های تعاملی معموالً زمانی که منتظر ورودی کاربر هستند ،زمان خواب باالیی دارند .این فواصل خواب
با انبوهی از فعالیت های پردازنده دنبال می شود زیرا رشته درخواست کاربر را پردازش می کند.
آستانه تعامل در کد زمانبندی تعریف شده است و قابل تنظیم نیست .زمانبند از دو معادله برای محاسبه امتیاز تعاملی یک رشته
استفاده می کند .ابتدا یک ضریب مقیاس بندی را تعریف می کنیم:
برای رشته هایی که زمان خواب آنها از زمان اجرای آنها بیشتر است ،از معادله زیر استفاده می شود:
زمانی که زمان اجرای یک رشته از زمان خواب آن بیشتر شود ،به جای آن از معادله زیر استفاده می شود:
نتیجه این است که رشتههایی که زمان خواب آنها بیشتر از زمان اجرای آنها است ،در نیمه پایین دامنه امتیازات تعاملی ،و
رشتههایی که زمان اجرای آنها از زمان خواب آنها بیشتر است ،در نیمه باالیی محدوده امتیاز میگیرند.
THREAD MIGRATIONبه طور کلی ،مطلوب است که یک Threadآماده بر روی آخرین پردازنده ای که روی آن
اجرا شده است ،برنامه ریزی شود .به این میل پردازنده می گویند .گزینه جایگزین این است که اجازه دهید یک رشته برای برش
زمان اجرای بعدی خود به پردازنده دیگری مهاجرت کند .وابستگی پردازنده به دلیل حافظه پنهان محلی اختصاص داده شده به
یک پردازنده قابل توجه است .هنگامی که یک رشته اجرا می شود ،ممکن است هنوز اطالعاتی در حافظه پنهان آخرین پردازنده
خود داشته باشد .تغییر به پردازنده دیگر به این معنی است که داده های الزم باید در حافظه پنهان در پردازنده جدید بارگذاری
شوند و خطوط کش از پردازنده قبلی باید باطل شوند .از سوی دیگر ،مهاجرت پردازنده ممکن است به تعادل بار بهتر اجازه دهد
571
سیستم عامل های داخلی و اصول طراحی572.........................................................................................................................
و ممکن است از دورههای بیکاری در برخی پردازندهها جلوگیری کند ،در حالی که سایر پردازندهها بیش از آن چیزی که
میتوانند به موقع کار کنند ،کار میکنند.
زمانبندی FreeBSDاز دو مکانیسم برای انتقال رشته برای متعادل کردن بار پشتیبانی می کند :کشیدن و فشار دادن .با
مکانیزم کشش ،یک پردازنده بیکار ،رشته ای را از یک پردازنده غیر فعال می رباید .هنگامی که یک پردازنده کاری برای انجام
دادن ندارد ،یک بیت را در یک بیت ماسک جهانی تنظیم می کند که نشان می دهد بیکار است .هنگامی که یک پردازنده فعال
می خواهد کار را به صف اجرای خود اضافه کند ،ابتدا این بیت های بیکار را بررسی می کند و اگر بیت بیکار مجموعه ای پیدا
شد ،رشته را به پردازنده بیکار ارسال می کند .در درجه اول زمانی مفید است که بار سبک یا پراکنده وجود داشته باشد ،یا در
شرایطی که فرآیندها به طور مکرر شروع و خارج می شوند.
مکانیسم کشش در جلوگیری از هدر رفتن یک پردازنده به دلیل بیکاری موثر است .اما در شرایطی که هر پردازنده باید کاری
انجام دهد ،اما بار به شکلی ناهموار توسعه یافته است ،موثر نیست ،یا در واقع مرتبط نیست .با مکانیزم فشار ،یک کار زمانبندی
دوره ای وضعیت بار فعلی را ارزیابی می کند و آن را یکسان می کند .دو بار در ثانیه ،این کار پربارترین و کمبارترین پردازندههای
سیستم را انتخاب میکند و صفهای اجرای آنها را برابر میکند .مهاجرت فشاری عدالت را در بین رشتههای قابل اجرا تضمین
میکند.
ویندوز به گونه ای طراحی شده است که تا حد امکان به نیازهای یک کاربر در یک محیط بسیار تعاملی یا در نقش یک سرور
پاسخگو باشد .ویندوز یک زمانبندی پیشگیرانه را با یک سیستم انعطافپذیر از سطوح اولویت پیادهسازی میکند که شامل
زمانبندی دورهای در هر سطح و ،برای برخی سطوح ،تغییرات اولویت پویا بر اساس فعالیت رشته فعلی آنها است Thread .ها
واحد زمان بندی در ویندوز هستند تا فرآیندها.
اولویت ها در ویندوز به دو باند یا کالس سازماندهی می شوند :زمان حقیقی و متغیر .هر یک از این باندها از 16سطح اولویت
تشکیل شده است .موضوعاتی که نیاز به توجه فوری دارند در کالس بالدرنگ هستند که شامل عملکردهایی مانند ارتباطات و
وظایف بالدرنگ میشود.
به طور کلی ،از آنجا که ویندوز از یک زمانبندی پیشگیرانه مبتنی بر اولویت استفاده میکند ،رشتههایی با اولویتهای همزمان
نسبت به رشتههای دیگر اولویت دارند .هنگامی که یک رشته آماده می شود که اولویت آن باالتر از رشته در حال اجرا است،
رشته با اولویت پایین تر از قبل انتخاب می شود و پردازنده به رشته با اولویت باالتر داده می شود.
572
سیستم عامل های داخلی و اصول طراحی573.........................................................................................................................
اولویت ها در دو کالس تا حدودی متفاوت مدیریت می شوند شکل .10.14در کالس اولویت بالدرنگ ،همه رشته ها دارای
اولویت ثابت هستند که هرگز تغییر نمی کند .همه رشتههای فعال در یک سطح اولویت معین در یک صف دورگرد قرار دارند .در
کالس اولویت متغیر ،اولویت threadیک مقدار اولویت اولیه را شروع می کند و سپس ممکن است به طور موقت در طول عمر
threadتقویت شود افزایش یابد .در هر سطح اولویت یک صف FIFOوجود دارد .یک رشته با تغییر اولویت خود ،صفها را در
بین کالسهای اولویت متغیر تغییر میدهد .با این حال ،یک رشته در سطح اولویت 15یا پایین تر هرگز به سطح 16یا هر
سطح دیگری در کالس بالدرنگ ارتقا نمی یابد.
اولویت اولیه یک رشته در کالس اولویت متغیر با دو کمیت تعیین می شود :اولویت پایه فرآیند و اولویت پایه نخ .اولویت پایه
فرآیند یک ویژگی شی فرآیند است و میتواند هر مقداری از 1تا 15را به خود بگیرد اولویت 0برای رشتههای بیکار اجرایی
برای هر پردازنده محفوظ است .هر شی threadمرتبط با یک شی فرآیند دارای یک ویژگی اولویت پایه رشته است که اولویت
پایه رشته را نسبت به فرآیند نشان می دهد .اولویت پایه رشته می تواند برابر با فرآیند آن یا در دو سطح باالتر یا پایین تر از
فرآیند باشد .بنابراین ،برای مثال ،اگر یک فرآیند دارای اولویت پایه 4و یکی از رشته های آن دارای اولویت پایه -1باشد ،اولویت
اولیه آن رشته 3است.
هنگامی که یک رشته در کالس اولویت متغیر ایجاد شد ،اولویت واقعی آن ،که به عنوان اولویت فعلی رشته از آن یاد میشود،
ممکن است در محدودههای مشخص شده نوسان کند .اولویت فعلی ممکن است هرگز کمتر از اولویت پایه رشته نباشد و ممکن
است هرگز از 15تجاوز نکند .شکل 10.15مثالی را نشان می دهد .شی فرآیند دارای ویژگی اولویت پایه 4است .هر شی
threadمرتبط با این شی فرآیند باید اولویت اولیه بین 2و 6داشته باشد .فرض کنید اولویت پایه برای thread 4باشد .سپس
اولویت فعلی برای آن رشته ممکن است نوسان داشته باشد .در محدوده 4تا 15بسته به تقویت هایی که داده شده است .اگر
یک رشته برای انتظار در یک رویداد I/Oقطع شود ،هسته اولویت خود را تقویت می کند .اگر یک رشته تقویت شده به دلیل
استفاده از کوانتوم زمانی فعلی خود قطع شود ،هسته اولویت خود را کاهش می دهد .بنابراین ،رشتههای محدود به پردازشگر به
سمت اولویتهای پایینتر و رشتههای محدود به I/Oبه اولویتهای باالتر تمایل دارند .در مورد رشتههای ورودی/خروجی،
هسته اولویت را برای انتظارهای تعاملی مثالً انتظار روی صفحهکلید یا ماوس نسبت به سایر انواع ورودی/خروجی مثالً
ورودی/خروجی دیسک افزایش میدهد .بنابراین ،رشتههای تعاملی باالترین اولویتها را در کالس اولویت متغیر دارند.
573
سیستم عامل های داخلی و اصول طراحی574.........................................................................................................................
ویندوز از تنظیمات سخت افزاری چند پردازنده ای و چند هسته ای پشتیبانی می کند .رشته های هر فرآیند ،از جمله موارد
اجرایی ،می توانند روی هر پردازنده ای اجرا شوند .در صورت عدم وجود محدودیت های وابستگی ،که در پاراگراف بعدی توضیح
داده شد ،توزیع کننده هسته یک رشته آماده را به پردازنده موجود بعدی اختصاص می دهد .این تضمین میکند که هیچ
پردازندهای بیحرکت نباشد یا رشتهای با اولویت پایینتر را زمانی که رشته با اولویت باالتر آماده است ،اجرا نمیکند .چندین
رشته از یک فرآیند می توانند به طور همزمان روی چندین پردازنده اجرا شوند.
بهعنوان پیشفرض ،توزیعکننده هسته از سیاست قرابت نرم در تخصیص رشتهها به پردازندهها استفاده میکند :توزیعکننده
سعی میکند یک رشته آماده را به همان پردازندهای که آخرین بار روی آن کار کرده است اختصاص دهد .این به استفاده مجدد
از دادههای موجود در حافظه پنهان پردازنده از اجرای قبلی رشته کمک میکند .این امکان برای یک برنامه وجود دارد که اجرای
رشته خود را فقط به پردازنده های خاصی محدود کند همبستگی سخت.
هنگامی که ویندوز روی یک پردازنده اجرا می شود ،رشته با باالترین اولویت همیشه فعال است مگر اینکه در انتظار یک رویداد
باشد .اگر بیش از یک رشته وجود داشته باشد که دارای باالترین اولویت یکسانی باشد ،آنگاه پردازنده ،در میان تمام رشتههای
موجود در آن سطح اولویت ،به اشتراک گذاشته میشود .در یک سیستم چند پردازندهای با Nپردازنده ،هسته سعی میکند N
پردازندهها را به Nرشتههای با اولویت باالتری که آماده اجرا هستند بدهد .رشته های باقی مانده با اولویت پایین تر باید منتظر
بمانند تا رشته های دیگر مسدود شوند یا اولویت آنها کاهش یابد .رشتههای با اولویت پایینتر نیز ممکن است برای مدت
کوتاهی اولویت خود را به 15افزایش دهند ،اگر گرسنه باشند ،صرفاً برای تصحیح موارد وارونگی اولویت.
574
سیستم عامل های داخلی و اصول طراحی575.........................................................................................................................
نظم زمانبندی فوق تحت تأثیر ویژگی میل پردازشگر یک رشته است .اگر رشته ای آماده اجرا باشد اما تنها پردازنده های موجود
در مجموعه وابستگی پردازنده آن نباشد ،آن رشته مجبور می شود منتظر بماند و هسته رشته موجود بعدی را برنامه ریزی می
کند.
10.7خالصه
با یک مولتی پردازنده محکم ،چندین پردازنده به یک حافظه اصلی دسترسی دارند .در این پیکربندی ،ساختار زمان بندی تا
حدودی پیچیده تر است .به عنوان مثال ،ممکن است یک فرآیند معین برای کل عمر خود به همان پردازنده اختصاص داده شود
یا هر بار که وارد حالت Runningمی شود به هر پردازنده ای ارسال شود .مطالعات عملکرد نشان میدهد که تفاوتهای بین
الگوریتمهای زمانبندی مختلف در یک سیستم چند پردازندهای کمتر قابل توجه است.
یک فرآیند یا وظیفه بالدرنگ فرآیندی است که در ارتباط با برخی از فرآیندها یا عملکردها یا مجموعه ای از رویدادهای خارج از
سیستم کامپیوتری اجرا می شود و باید یک یا چند ضرب االجل را رعایت کند تا به طور مؤثر و صحیح با محیط خارجی تعامل
داشته باشد .یک سیستم عامل بالدرنگ سیستمی است که قادر به مدیریت فرآیندهای بالدرنگ باشد .در این زمینه ،معیارهای
سنتی برای یک الگوریتم زمان بندی اعمال نمی شود .بلکه عامل کلیدی رعایت ضرب االجل هاست .الگوریتمهایی که به شدت
بر پیشدستی و واکنش به مهلتهای نسبی متکی هستند در این زمینه مناسب هستند.
WEND89بحث جالبی از رویکردهای زمانبندی چند پردازنده استZHUR12 .یک بررسی جامع از مسائل مربوط به
زمانبندی رشتههای چند هستهای ارائه میکند .مجموعههای مقاالت زیر همگی حاوی مقاالت مهمی در مورد سیستم عامل
های بیدرنگ و زمانبندی هستند LEE93 ،STAN93 ،KRIS94 :و TILB91. SHA90توضیح خوبی در مورد وارونگی
اولویت ،وراثت اولویت و سقف اولویت ارائه می دهدZEAD97 .عملکرد زمانبندی زمان حقیقی SVR4را تجزیه و تحلیل می
کندLIND04 .یک نمای کلی از زمانبندی لینوکس 2.6ارائه می دهدLOVE10 .شامل بحث مفصل تری است.
575
سیستم عامل های داخلی و اصول طراحی576.........................................................................................................................
کلمات کلیدی
بررسی سواالت
.10.1پنج دسته مختلف از دانه بندی همگام سازی را فهرست کرده و به طور خالصه تعریف کنید.
.10.2چهار تکنیک برای زمانبندی رشته را فهرست کرده و به طور خالصه تعریف کنید.
.10.3سه نسخه اشتراک بار را فهرست کرده و به طور خالصه تعریف کنید.
576
سیستم عامل های داخلی و اصول طراحی577.........................................................................................................................
.10.6پنج حوزه کلی از الزامات یک سیستم عامل بالدرنگ را فهرست کرده و به طور خالصه تعریف کنید.
.10.7چهار کالس از الگوریتمهای زمانبندی بالدرنگ را فهرست کرده و به طور خالصه تعریف کنید.
.10.8چه مواردی از اطالعات در مورد یک کار ممکن است در زمانبندی بالدرنگ مفید باشد؟
چالش ها و مسائل
.10.1مجموعه ای از سه کار دوره ای را با نمایه های اجرای جدول 10.7در نظر بگیرید .نمودارهای زمان بندی مشابه شکل
10.5را برای این مجموعه وظایف ایجاد کنید.
.10.2مجموعه ای از پنج کار دوره ای را با نمایه های اجرای جدول 10.8در نظر بگیرید .نمودارهای زمانبندی مشابه شکل
10.6را برای این مجموعه وظایف ایجاد کنید.
.10.3حداقل سستی اول LLFیک الگوریتم زمانبندی بالدرنگ برای کارهای دورهای است .زمان سستی یا سستی ،مدت
زمانی است که بین زمانی که یک کار در صورت شروع شروع میشد تا مهلت بعدی آن تکمیل میشد .این اندازه پنجره
زمانبندی موجود است .سستی را می توان به صورت بیان کرد سستی = 1زمان مهلت1 - 2زمان جاری 1 - 2زمان پردازنده مورد
نیاز2
LLFکار را با حداقل سستی برای اجرای بعدی انتخاب می کند .اگر دو یا چند کار دارای حداقل مقدار سستی یکسان باشند ،بر
اساس FCFSسرویس میشوند.
آ .فرض کنید یک کار در حال حاضر دارای سستی Tاست .تا چه مدت زمانبندیکننده ممکن است شروع این کار را به تأخیر
بیندازد و همچنان مهلت آن را رعایت کند؟
ب فرض کنید یک وظیفه در حال حاضر دارای ضعف 0است .این به چه معناست؟
د مجموعه ای از سه کار دوره ای را با نمایه های اجرای جدول a 10.9در نظر بگیرید .نمودارهای زمانبندی مشابه شکل 10.5
را برای این مجموعه از وظایف ایجاد کنید که نرخ یکنواخت ،زودترین مهلت اول و LLFرا با هم مقایسه می کند .فرض کنید
پیش گرفتن ممکن است در فواصل 5میلی ثانیه رخ دهد .در مورد نتایج نظر دهید.
.10.4مسئله d10.3را برای نمایه های اجرای جدول b10.9تکرار کنید .در مورد نتایج نظر دهید.
.10.5حداکثر فوریت اول MUFیک الگوریتم زمانبندی بالدرنگ برای کارهای دورهای است .به هر کار یک فوریت اختصاص
داده می شود که به عنوان ترکیبی از دو اولویت ثابت و یک اولویت پویا تعریف می شود .یکی از اولویت های ثابت ،بحرانی بودن،
بر اولویت پویا ارجحیت دارد .در این میان اولویت پویا بر اولویت ثابت دیگر که اولویت کاربر نامیده می شود تقدم دارد .اولویت
578
سیستم عامل های داخلی و اصول طراحی579.........................................................................................................................
پویا به طور معکوس با سستی یک کار متناسب است MUF .را می توان به صورت زیر توضیح داد .ابتدا ،وظایف از کوتاه ترین به
طوالنی ترین دوره مرتب می شوند.
مجموعه وظایف حیاتی را به عنوان اولین وظایف Nتعریف کنید به طوری که در بدترین حالت استفاده از پردازنده از %100
تجاوز نکند .در میان وظایف مجموعه حیاتی که آماده هستند ،زمانبندی کار را با کمترین سستی انتخاب می کند .اگر هیچ
مجموعه حیاتی آماده نباشد ،برنامه از بین وظایف غیر بحرانی ،یکی را انتخاب می کند که کمترین سستی را داشته باشد.
پیوندها از طریق یک اولویت کاربر اختیاری و سپس توسط FCFSشکسته می شوند .مشکل d10.3را تکرار کنید و MUFرا
به نمودارها اضافه کنید .فرض کنید اولویت های تعریف شده توسط کاربر Aباالترین B ،بعدی C ،کمترین هستند .در مورد
نتایج نظر دهید.
.10.6مشکل 10.4را تکرار کنید و MUFرا به نمودارها اضافه کنید .در مورد نتایج نظر دهید.
.10.7این مشکل نشان میدهد که اگرچه معادله 10.2برای زمانبندی یکنواخت نرخ ،شرط کافی برای زمانبندی موفق است،
اما شرط الزم نیست یعنی گاهی اوقات برنامهریزی موفق ممکن است حتی اگر معادله 10.2برآورده نشود.
579
سیستم عامل های داخلی و اصول طراحی580.........................................................................................................................
آیا می توان این وظایف را با استفاده از زمان بندی یکنواخت نرخ با موفقیت برنامه ریزی کرد؟
ج فرض کنید که اولین نمونه از سه کار قبلی در زمان می رسد .فرض کنید اولین مهلت برای هر کار به شرح زیر است:
با استفاده از زمانبندی یکنواخت نرخ ،آیا هر سه مهلت برآورده میشوند؟ در مورد ضرباالجلهای تکرار هر کار در آینده چطور؟
.10.8نموداری شبیه به شکل b10.9رسم کنید که توالی رویدادها را برای همین مثال با استفاده از سقف اولویت نشان می
دهد.
580
سیستم عامل های داخلی و اصول طراحی581.........................................................................................................................
فصل 11
11.4بافر I/O
RAID 11.6
11.7کش دیسک
11.9لینوکس I/O
581
سیستم عامل های داخلی و اصول طراحی582.........................................................................................................................
اهداف یادگیری
-برخی از مسائل کلیدی در طراحی پشتیبانی سیستم عامل برای I/Oرا توضیح دهید.
-مفاهیم عملکرد جایگزین های مختلف بافر ورودی/خروجی را تجزیه و تحلیل کنید.
شاید آشفته ترین جنبه طراحی سیستم عامل ورودی/خروجی باشد .از آنجایی که دستگاهها و برنامههای کاربردی این دستگاهها
بسیار متنوع هستند ،ایجاد یک راهحل کلی و سازگار دشوار است.
ما با بحث مختصری در مورد دستگاه های I/Oو سازماندهی عملکرد I/Oشروع می کنیم .این موضوعات ،که عموماً در محدوده
معماری کامپیوتر قرار می گیرند ،زمینه را برای بررسی I/Oاز دیدگاه سیستم عامل فراهم می کنند.
582
سیستم عامل های داخلی و اصول طراحی583.........................................................................................................................
بخش بعدی به بررسی مسائل طراحی سیستم عامل ،از جمله اهداف طراحی ،و روشی که عملکرد I/Oرا می توان ساختار داد،
می پردازد .سپس بافر I/Oمورد بررسی قرار می گیرد .یکی از خدمات اولیه ورودی/خروجی ارائه شده توسط سیستم عامل یک
تابع بافر است که عملکرد کلی را بهبود می بخشد.
بخش های بعدی این فصل به ورودی/خروجی دیسک مغناطیسی اختصاص دارد .در سیستمهای معاصر ،این شکل از
ورودی/خروجی مهمترین است و کلید عملکردی است که توسط کاربر درک میشود .ما با توسعه یک مدل از عملکرد
ورودی/خروجی دیسک شروع می کنیم و سپس چندین تکنیک را بررسی می کنیم که می توانند برای بهبود عملکرد مورد
استفاده قرار گیرند.
ضمیمه Jویژگی های دستگاه های ذخیره سازی ثانویه ،از جمله دیسک مغناطیسی و حافظه نوری را خالصه می کند.
همانطور که در فصل 1ذکر شد ،دستگاه های خارجی که با سیستم های کامپیوتری درگیر I/Oمی شوند را می توان به طور
تقریبی به سه دسته تقسیم کرد:
-قابل خواندن توسط انسان :مناسب برای برقراری ارتباط با کاربر کامپیوتر .به عنوان مثال می توان به چاپگرها و پایانه ها اشاره
کرد که مورد دوم شامل نمایشگر ویدئو ،صفحه کلید و شاید دستگاه های دیگری مانند ماوس است.
به عنوان مثال درایوهای دیسک ،کلیدهای ،USBحسگرها ،کنترلکنندهها و محرکها هستند.
-ارتباط :مناسب برای برقراری ارتباط با دستگاه های راه دور .به عنوان مثال درایورهای خط دیجیتال و مودم ها هستند.
583
سیستم عامل های داخلی و اصول طراحی584.........................................................................................................................
اهداف یادگیری
-برخی از مسائل کلیدی در طراحی پشتیبانی سیستم عامل برای I/Oرا توضیح دهید.
-مفاهیم عملکرد جایگزین های مختلف بافر ورودی/خروجی را تجزیه و تحلیل کنید.
شاید آشفته ترین جنبه طراحی سیستم عامل ورودی/خروجی باشد .از آنجایی که دستگاهها و برنامههای کاربردی این دستگاهها
بسیار متنوع هستند ،ایجاد یک راهحل کلی و سازگار دشوار است.
ما با بحث مختصری در مورد دستگاه های I/Oو سازماندهی عملکرد I/Oشروع می کنیم .این موضوعات ،که عموماً در محدوده
معماری کامپیوتر قرار می گیرند ،زمینه را برای بررسی I/Oاز دیدگاه سیستم عامل فراهم می کنند.
بخش بعدی به بررسی مسائل طراحی سیستم عامل ،از جمله اهداف طراحی ،و روشی که عملکرد I/Oرا می توان ساختار داد،
می پردازد .سپس بافر I/Oمورد بررسی قرار می گیرد .یکی از خدمات اولیه ورودی/خروجی ارائه شده توسط سیستم عامل یک
تابع بافر است که عملکرد کلی را بهبود می بخشد.
بخش های بعدی این فصل به ورودی/خروجی دیسک مغناطیسی اختصاص دارد .در سیستمهای معاصر ،این شکل از
ورودی/خروجی مهمترین است و کلید عملکردی است که توسط کاربر درک میشود .ما با توسعه یک مدل از عملکرد
ورودی/خروجی دیسک شروع می کنیم و سپس چندین تکنیک را بررسی می کنیم که می توانند برای بهبود عملکرد مورد
استفاده قرار گیرند.
584
سیستم عامل های داخلی و اصول طراحی585.........................................................................................................................
-ورودی/خروجی برنامه ریزی شده :پردازنده یک فرمان I/Oرا از طرف یک فرآیند به یک ماژول I/Oصادر می کند .سپس آن
فرآیند مشغول منتظر می ماند تا عملیات قبل از ادامه تکمیل شود.
I/O-مبتنی بر وقفه :پردازنده یک فرمان I/Oرا از طرف یک فرآیند صادر می کند .سپس دو احتمال وجود دارد .اگر دستور
I/Oاز فرآیند غیرمسدود کننده باشد ،پردازنده به اجرای دستورات از فرآیندی که دستور I/Oرا صادر کرده است ادامه می
دهد .اگر دستور ورودی/خروجی مسدود می شود ،دستور بعدی که پردازنده اجرا می کند از سیستم عامل است که فرآیند فعلی
را در حالت مسدود قرار می دهد و فرآیند دیگری را برنامه ریزی می کند.
-دسترسی مستقیم به حافظه DMA:یک ماژول DMAتبادل داده بین حافظه اصلی و یک ماژول I/Oرا کنترل می کند.
پردازنده درخواستی برای انتقال بلوک داده به ماژول DMAارسال می کند و تنها پس از انتقال کل بلوک قطع می شود.
جدول 11.1رابطه بین این سه تکنیک را نشان می دهد .در اکثر سیستم های کامپیوتری DMA ،شکل غالب انتقال است که
باید توسط سیستم عامل پشتیبانی شود.
همانطور که سیستم های کامپیوتری تکامل یافته اند ،الگویی از افزایش پیچیدگی و پیچیدگی اجزای جداگانه وجود داشته است.
این در هیچ کجا به اندازه تابع I/Oمشهود نیست .مراحل تکامل را می توان به صورت زیر خالصه کرد:
.1پردازنده به طور مستقیم یک دستگاه جانبی را کنترل می کند .این امر در دستگاه های ساده کنترل شده با ریز پردازنده دیده
می شود.
.2یک کنترلر یا ماژول I/Oاضافه شده است .پردازنده از I/Oبرنامه ریزی شده بدون وقفه استفاده می کند .با این مرحله،
پردازنده تا حدودی از جزئیات خاص رابط های دستگاه خارجی جدا می شود.
585
سیستم عامل های داخلی و اصول طراحی586.........................................................................................................................
.3همان پیکربندی مرحله 2استفاده می شود ،اما اکنون از وقفه ها استفاده می شود .پردازنده نیازی به صرف زمان برای انتظار
برای انجام عملیات I/Oندارد ،بنابراین کارایی را افزایش می دهد.
.4به ماژول I/Oکنترل مستقیم حافظه از طریق DMAداده می شود .اکنون میتواند بلوکی از دادهها را بدون دخالت پردازنده
به حافظه یا از حافظه منتقل کند ،مگر در ابتدا و انتهای انتقال.
.5ماژول I/Oبرای تبدیل شدن به یک پردازنده جداگانه ،با مجموعه دستورالعمل های تخصصی که برای I/Oطراحی شده
است ،ارتقا یافته است .واحد پردازش مرکزی CPUپردازنده ورودی/خروجی را برای اجرای یک برنامه ورودی/خروجی در حافظه
اصلی هدایت می کند .پردازنده I/Oاین دستورالعمل ها را بدون دخالت پردازنده واکشی و اجرا می کند .این به پردازنده اجازه
میدهد تا دنبالهای از فعالیتهای ورودی/خروجی را مشخص کند و تنها زمانی که کل دنباله انجام شده است ،قطع شود.
.6ماژول I/Oیک حافظه محلی مخصوص به خود دارد و در واقع یک کامپیوتر برای خودش است .با این معماری ،مجموعه
بزرگی از دستگاه های ورودی/خروجی را می توان با حداقل دخالت پردازنده کنترل کرد .یک کاربرد رایج برای چنین معماری
کنترل ارتباطات با پایانه های تعاملی بوده است .پردازنده ورودی/خروجی بیشتر وظایف مربوط به کنترل پایانه ها را بر عهده می
گیرد.
همانطور که شخص در این مسیر تکاملی پیش می رود ،عملکرد بیشتر و بیشتر I/Oبدون دخالت پردازنده انجام می شود.
پردازنده مرکزی به طور فزاینده ای از وظایف مربوط به I/Oخالص می شود و عملکرد را بهبود می بخشد .با دو مرحله آخر 5و
،6با معرفی مفهوم یک ماژول I/Oکه قادر به اجرای یک برنامه است ،یک تغییر عمده رخ می دهد.
نکته ای در مورد اصطالحات :برای همه ماژول های شرح داده شده در مراحل 4تا ،6عبارت دسترسی مستقیم به حافظه
مناسب است ،زیرا همه این انواع شامل کنترل مستقیم حافظه اصلی توسط ماژول I/Oمی شود .همچنین ،ماژول I/Oدر
586
سیستم عامل های داخلی و اصول طراحی587.........................................................................................................................
مرحله 5اغلب به عنوان یک کانال I/Oو در مرحله 6به عنوان یک پردازنده I/Oشناخته می شود .با این حال ،هر اصطالح،
گاهی اوقات ،برای هر دو موقعیت اعمال می شود .در قسمت آخر این بخش ،از عبارت کانال ورودی/خروجی برای اشاره به هر دو
نوع ماژول ورودی/خروجی استفاده خواهیم کرد.
شکل 11.2به طور کلی منطق DMAرا نشان می دهد .واحد DMAقادر به تقلید از پردازنده و در واقع کنترل گذرگاه
سیستم مانند یک پردازنده است .برای انتقال داده ها از طریق گذرگاه سیستم به حافظه و از حافظه باید این کار را انجام دهد.
تکنیک DMAبه شرح زیر عمل می کند .هنگامی که پردازنده بخواهد بلوکی از داده ها را بخواند یا بنویسد ،با ارسال اطالعات
زیر به ماژول DMAفرمانی را به ماژول DMAصادر می کند:
-چه خواندن یا نوشتن درخواست شود ،با استفاده از خط کنترل خواندن یا نوشتن بین پردازنده و ماژول DMA
-آدرس دستگاه ورودی/خروجی درگیر ،که در خطوط داده مخابره شده است
-محل شروع در حافظه برای خواندن یا نوشتن ،که بر روی خطوط داده ارتباط برقرار می کند و توسط ماژول DMAدر ثبات
آدرس خود ذخیره می شود.
-تعداد کلماتی که باید خوانده یا نوشته شوند ،دوباره از طریق خطوط داده ارسال شده و در ثبت شمارش دادهها ذخیره
میشوند.
587
سیستم عامل های داخلی و اصول طراحی588.........................................................................................................................
سپس پردازنده به کارهای دیگر ادامه می دهد .این عملیات I/Oرا به ماژول DMAواگذار کرده است .ماژول DMAکل
بلوک داده را ،یک کلمه در یک زمان ،مستقیماً یا از حافظه بدون عبور از پردازنده منتقل می کند .هنگامی که انتقال کامل شد،
ماژول DMAیک سیگنال وقفه به پردازنده ارسال می کند .بنابراین ،پردازنده فقط در ابتدا و انتهای انتقال درگیر است شکل
C.4c.مکانیزم DMAرا می توان به روش های مختلفی پیکربندی کرد .برخی از احتماالت در شکل 11.3نشان داده شده
است .در مثال اول ،همه ماژول ها از یک گذرگاه سیستم مشترک استفاده می کنند .ماژول DMAکه به عنوان یک پردازنده
جایگزین عمل می کند ،از I/Oبرنامه ریزی شده برای تبادل داده بین حافظه و یک ماژول I/Oاز طریق ماژول DMAاستفاده
می کند .این پیکربندی ،اگرچه ممکن است ارزان باشد ،به وضوح ناکارآمد است :مانند ورودی/خروجی برنامه ریزی شده با کنترل
پردازنده ،هر انتقال یک کلمه دو چرخه اتوبوس را مصرف می کند درخواست انتقال و سپس انتقال .تعداد چرخه های باس مورد
نیاز را می توان با ادغام توابع DMAو I/Oبه میزان قابل توجهی کاهش داد .همانطور که شکل b11.3نشان می دهد ،این
بدان معنی است که مسیری بین ماژول DMAو یک یا چند ماژول ورودی/خروجی وجود دارد که شامل گذرگاه سیستم نمی
شود .منطق DMAممکن است در واقع بخشی از یک ماژول I/Oباشد ،یا ممکن است یک ماژول جداگانه باشد که یک یا چند
ماژول I/Oرا کنترل می کند .این مفهوم را می توان با اتصال ماژول های I/Oبه ماژول DMAبا استفاده از یک گذرگاه I/O
یک قدم جلوتر برد شکل c. 11.3این تعداد رابط های ورودی/خروجی در ماژول DMAرا به یک کاهش می دهد و پیکربندی
به راحتی قابل ارتقا را فراهم می کند .در تمام این موارد شکل b11.3و ،c11.3گذرگاه سیستمی که ماژول DMAبا پردازنده
و حافظه اصلی به اشتراک می گذارد توسط ماژول DMAفقط برای تبادل داده با حافظه و تبادل سیگنال های کنترلی با
پردازنده استفاده می شود . .تبادل داده بین ماژول های DMAو I/Oخارج از گذرگاه سیستم انجام می شود.
588
سیستم عامل های داخلی و اصول طراحی589.........................................................................................................................
اهداف طراحی
دو هدف در طراحی تسهیالت ورودی/خروجی مهم هستند :کارایی و عمومیت .کارایی مهم است زیرا عملیات I/Oاغلب یک
گلوگاه در یک سیستم محاسباتی ایجاد می کند .با نگاهی دوباره به شکل ،11.1می بینیم که اکثر دستگاه های ورودی/خروجی
در مقایسه با حافظه اصلی و پردازنده بسیار کند هستند .یکی از راههای مقابله با این مشکل ،چندبرنامهنویسی است ،که همانطور
که دیدیم ،به برخی از فرآیندها اجازه میدهد در عملیات ورودی/خروجی منتظر بمانند ،در حالی که فرآیند دیگری در حال اجرا
است .با این حال ،حتی با وجود حجم وسیع حافظه اصلی در ماشینهای امروزی ،اغلب اوقات I/Oبا فعالیتهای پردازنده
هماهنگ نیست Swapping .برای وارد کردن فرآیندهای آماده اضافی برای مشغول نگه داشتن پردازنده استفاده می شود ،اما
این خود یک عملیات I/Oاست .بنابراین ،یک تالش عمده در طراحی ،I/Oطرح هایی برای بهبود کارایی I/Oبوده است.
منطقه ای که به دلیل اهمیت آن بیشترین توجه را به خود جلب کرده است ،ورودی/خروجی دیسک است و بیشتر این فصل به
مطالعه کارایی ورودی/خروجی دیسک اختصاص خواهد داشت.
هدف اصلی دیگر عمومیت است .به منظور سادگی و رهایی از خطا ،مطلوب است که همه دستگاه ها به صورت یکنواخت اداره
شوند .این امر هم در مورد روشی که در آن فرآیندها دستگاههای ورودی/خروجی را مشاهده میکنند و هم برای روشی که
سیستمعامل دستگاهها و عملیات ورودی/خروجی را مدیریت میکند ،صدق میکند .به دلیل تنوع ویژگی های دستگاه ،دستیابی
به کلیت واقعی در عمل دشوار است .کاری که می توان انجام داد استفاده از یک رویکرد سلسله مراتبی و مدوالر برای طراحی
تابع I/Oاست .این رویکرد بیشتر جزئیات ورودی/خروجی دستگاه را در روتینهای سطح پایین پنهان میکند تا فرآیندهای
کاربر و سطوح باالی سیستمعامل دستگاهها را از نظر عملکردهای کلی مانند خواندن ،نوشتن ،باز کردن ،بستن ،قفل کردن و باز
کردن قفل ببینند .اکنون به بحث در مورد این رویکرد می پردازیم.
در فصل ،2در بحث ساختار سیستم ،بر ماهیت سلسله مراتبی سیستم عامل های مدرن تاکید کردیم .فلسفه سلسله مراتبی این
است که عملکردهای سیستم عامل باید بر اساس پیچیدگی ،مقیاس زمانی مشخصه و سطح انتزاع آنها از هم جدا شوند .استفاده
از این فلسفه به طور خاص برای تسهیالت I/Oمنجر به نوع سازمانی می شود که در شکل 11.4پیشنهاد شده است .جزئیات
سازمان به نوع دستگاه و کاربرد بستگی دارد .سه ساختار منطقی مهم در شکل ارائه شده است .البته ممکن است یک سیستم
عامل خاص دقیقاً با این ساختارها مطابقت نداشته باشد .با این حال ،اصول کلی معتبر هستند ،و اکثر سیستم عامل ها به I/O
تقریباً به این روش برخورد می کنند.
589
سیستم عامل های داخلی و اصول طراحی590.........................................................................................................................
اجازه دهید ابتدا ساده ترین مورد را در نظر بگیریم ،مورد یک دستگاه جانبی محلی که به شیوه ای ساده ارتباط برقرار می کند،
مانند جریانی از بایت ها یا رکوردها شکل a. 11.4الیه های زیر درگیر هستند:
Logical I/O: -ماژول I/Oمنطقی با دستگاه به عنوان یک منبع منطقی سروکار دارد و به جزئیات کنترل واقعی دستگاه
مربوط نمی شود .ماژول منطقی I/Oمربوط به مدیریت عملکردهای ورودی/خروجی عمومی از طرف فرآیندهای کاربر است که
به آنها اجازه می دهد تا با دستگاه از نظر شناسه دستگاه و دستورات ساده مانند باز کردن ،بستن ،خواندن ،و نوشتن.
-ورودی/خروجی دستگاه :عملیات و داده های درخواستی کاراکترهای بافر ،رکوردها و غیره به دنباله های مناسبی از
دستورالعمل های ورودی/خروجی ،دستورات کانال و دستورات کنترل کننده تبدیل می شوند .تکنیک های بافر ممکن است برای
بهبود استفاده استفاده شود.
-زمانبندی و کنترل :صفبندی و زمانبندی واقعی عملیات ورودی/خروجی و همچنین کنترل عملیات در این الیه رخ میدهد.
بنابراین ،وقفه ها در این الیه مدیریت می شوند و وضعیت I/Oجمع آوری و گزارش می شود .این الیه نرم افزاری است که در
واقع با ماژول I/Oو در نتیجه سخت افزار دستگاه تعامل دارد.
برای یک دستگاه ارتباطی ،ساختار ورودی/خروجی شکل b 11.4تقریباً مشابه آنچه که توضیح داده شد ،به نظر می رسد .تفاوت
اصلی این است که ماژول I/Oمنطقی با یک معماری ارتباطی جایگزین شده است که ممکن است خود از تعدادی الیه تشکیل
شده باشد .یک مثال TCP/IPاست که در فصل 17مورد بحث قرار گرفته است.
شکل c11.4یک ساختار معرف برای مدیریت I/Oدر یک دستگاه ذخیره سازی ثانویه که از یک سیستم فایل پشتیبانی می
کند را نشان می دهد .سه الیه که قبال مورد بحث قرار نگرفته اند به شرح زیر است:
-مدیریت دایرکتوری :در این الیه ،نام فایلهای نمادین به شناسههایی تبدیل میشوند که مستقیماً یا غیرمستقیم از طریق یک
توصیفگر یا جدول فهرست به فایل ارجاع میدهند .این الیه همچنین مربوط به عملیات کاربر است که بر دایرکتوری فایل ها
تأثیر می گذارد ،مانند افزودن ،حذف و سازماندهی مجدد.
590
سیستم عامل های داخلی و اصول طراحی591.........................................................................................................................
File system: -این الیه با ساختار منطقی فایل ها و با عملیاتی که کاربران می توانند مشخص کنند ،مانند باز کردن ،بستن،
خواندن و نوشتن سر و کار دارد .حقوق دسترسی نیز در این الیه مدیریت می شود.
-سازماندهی فیزیکی :همانطور که آدرسهای حافظه مجازی باید به آدرسهای حافظه اصلی فیزیکی تبدیل شوند ،با در نظر
گرفتن ساختار تقسیمبندی و صفحهبندی ،ارجاعات منطقی به فایلها و رکوردها نیز باید با در نظر گرفتن مسیر و بخش فیزیکی
به آدرسهای ذخیرهسازی ثانویه فیزیکی تبدیل شوند .ساختار دستگاه ذخیره سازی ثانویه تخصیص فضای ذخیره سازی ثانویه و
بافرهای ذخیره سازی اصلی به طور کلی در این الیه نیز انجام می شود.
به دلیل اهمیت سیستم فایل ،در این فصل و فصل بعدی ،مدتی را صرف بررسی اجزای مختلف آن خواهیم کرد .بحث در این
فصل بر روی سه الیه پایین متمرکز است ،در حالی که دو الیه باالیی در فصل 12مورد بررسی قرار گرفته است.
فرض کنید که یک فرآیند کاربر می خواهد بلوک های داده را از روی یک دیسک در یک زمان بخواند ،با طول هر بلوک 512
بایت .داده ها باید در یک ناحیه داده در فضای آدرس فرآیند کاربر در مکان مجازی 1000تا 1511خوانده شوند .ساده ترین
راه اجرای یک دستور I/Oچیزی مانند ،Read_ Block1000دیسک در واحد دیسک و سپس منتظر بمانید تا داده ها در
دسترس قرار گیرند .انتظار می تواند مشغول انتظار باشد به طور مداوم وضعیت دستگاه را آزمایش کنید یا به طور عملی تر،
فرآیند تعلیق در یک وقفه.
دو مشکل با این روش وجود دارد .ابتدا ،برنامه در انتظار کامل شدن ورودی/خروجی نسبتاً کند قطع میشود .مشکل دوم این
است که این رویکرد به I/Oبا تصمیمات مبادله ای توسط سیستم عامل تداخل دارد .مکان های مجازی 1000تا 1511باید در
591
سیستم عامل های داخلی و اصول طراحی592.........................................................................................................................
طول انتقال بلوک در حافظه اصلی باقی بمانند .در غیر این صورت ممکن است برخی از داده ها از بین بروند .اگر صفحهبندی
استفاده میشود ،حداقل صفحه حاوی مکانهای هدف باید در حافظه اصلی قفل شود.
بنابراین ،اگرچه ممکن است بخشهایی از فرآیند بر روی دیسک صفحه نمایش داده شود ،تعویض فرآیند به طور کامل غیرممکن
است ،حتی اگر سیستم عامل آن را بخواهد .همچنین توجه داشته باشید که خطر وقفه تک فرآیندی وجود دارد .اگر یک فرآیند
یک فرمان I/Oصادر کند ،در انتظار نتیجه معلق شود ،و سپس قبل از شروع عملیات تعویض شود ،فرآیند در انتظار رویداد I/O
مسدود می شود و عملیات I/Oدر انتظار مسدود می شود .برای جلوگیری از این وقفه ،حافظه کاربر درگیر در عملیات I/O
باید بالفاصله قبل از صدور درخواست I/Oدر حافظه اصلی قفل شود ،حتی اگر عملیات I/Oدر صف باشد و ممکن است برای
مدتی اعدام نشود
همین مالحظات در مورد عملیات خروجی اعمال می شود .اگر یک بلوک مستقیماً از یک منطقه فرآیند کاربر به یک ماژول I/O
منتقل شود ،در این صورت فرآیند در حین انتقال مسدود می شود و ممکن است فرآیند تعویض نشود.
برای جلوگیری از این هزینهها و ناکارآمدیها ،گاهی اوقات انجام انتقال ورودی قبل از درخواستها و انجام انتقال خروجی مدتی
پس از درخواست راحت است .این تکنیک به بافر معروف است .در این بخش ،به برخی از طرحهای بافری که توسط سیستم
عامل های برای بهبود عملکرد سیستم پشتیبانی میشوند ،نگاه میکنیم.
در بحث در مورد رویکردهای مختلف برای بافر ،گاهی اوقات مهم است که بین دو نوع دستگاه ورودی/خروجی تمایز قائل شویم:
بلوک گرا و جریان گرا .یک دستگاه بلوک گرا اطالعات را در بلوک هایی که معموالً اندازه ثابتی دارند ذخیره می کند و انتقاالت
هر بار یک بلوک انجام می شود .به طور کلی ،ارجاع داده ها با شماره بلوک آن امکان پذیر است .دیسک ها و کلیدهای USB
نمونه هایی از دستگاه های بلوک گرا هستند .یک دستگاه جریان گرا داده ها را به صورت جریانی از بایت ها به داخل و خارج
منتقل می کند ،بدون ساختار بلوکی .پایانهها ،چاپگرها ،پورتهای ارتباطی ،ماوس و سایر دستگاههای اشارهگر ،و اکثر
دستگاههای دیگری که ذخیرهسازی ثانویه نیستند ،جریان گرا هستند.
تک بافر
سادهترین نوع پشتیبانی که سیستمعامل میتواند ارائه کند ،تک بافر است شکل b. 11.5هنگامی که یک پردازش کاربر یک
درخواست I/Oصادر می کند ،سیستم عامل یک بافر در قسمت سیستم حافظه اصلی به عملیات اختصاص می دهد.
592
سیستم عامل های داخلی و اصول طراحی593.........................................................................................................................
برای دستگاه های بلوک گرا ،طرح تک بافر را می توان به صورت زیر توصیف کرد :انتقال ورودی به بافر سیستم انجام می شود.
هنگامی که انتقال کامل شد ،فرآیند بلوک را به فضای کاربر منتقل می کند و بالفاصله بلوک دیگری را درخواست می کند .به
این کار خواندن پیشرو یا ورودی پیشبینیشده گفته میشود .با این انتظار انجام می شود که در نهایت بلوک مورد نیاز باشد.
برای بسیاری از انواع محاسبات ،این یک فرض معقول در اکثر مواقع است زیرا معموالً داده ها به صورت متوالی قابل دسترسی
هستند .فقط در پایان یک توالی پردازش ،یک بلوک به صورت غیر ضروری خوانده می شود.
این رویکرد به طور کلی در مقایسه با فقدان بافر سیستم افزایش سرعت می دهد .فرآیند کاربر می تواند یک بلوک از داده ها را
پردازش کند در حالی که بلوک بعدی در حال خواندن است .سیستم عامل می تواند فرآیند را جابجا کند زیرا عملیات ورودی به
جای حافظه پردازش کاربر در حافظه سیستم انجام می شود .با این حال ،این تکنیک منطق سیستم عامل را پیچیده می کند.
سیستم عامل باید تخصیص بافرهای سیستم به فرآیندهای کاربر را پیگیری کند .منطق جابجایی نیز تحت تأثیر قرار میگیرد:
اگر عملیات I/Oشامل همان دیسکی باشد که برای تعویض استفاده میشود ،به سختی منطقی به نظر میرسد که نوشتههای
دیسک در همان دستگاه برای جابجایی فرآیند در صف قرار گیرد .این تالش برای تعویض فرآیند و آزادسازی حافظه اصلی تا
زمانی که عملیات ورودی/خروجی به پایان برسد آغاز نمیشود ،در این زمان ممکن است تعویض فرآیند به دیسک دیگر مناسب
نباشد.
مالحظات مشابهی برای خروجی بلوک گرا اعمال می شود .هنگامی که داده ها به یک دستگاه منتقل می شوند ،ابتدا از فضای
کاربر در بافر سیستم کپی می شوند و در نهایت از آنجا نوشته می شوند .روند درخواست اکنون برای ادامه یا تعویض در صورت
لزوم آزاد است.
593
سیستم عامل های داخلی و اصول طراحی594.........................................................................................................................
KNUT97یک مقایسه عملکرد خام اما آموزنده بین تک بافر و بدون بافر را پیشنهاد می کند .فرض کنید Tزمان مورد نیاز
برای وارد کردن یک بلوک و Cزمان محاسباتی است که بین درخواستهای ورودی مداخله میکند .بدون بافر ،زمان اجرا در هر
بلوک اساساً T Cاست .با یک بافر ،زمان حداکثر C, T Mاست ،که در آن Mزمان الزم برای انتقال داده ها از بافر سیستم به
حافظه کاربر است .در بیشتر موارد ،زمان اجرا در هر بلوک با یک بافر در مقایسه با بدون بافر به طور قابل مالحظه ای کمتر
است .برای ورودی/خروجی جریان محور ،طرح بافر تک را می توان به صورت خطی در یک زمان یا بایت در یک زمان استفاده
کرد .عملیات خط در یک زمان برای پایانه های حالت اسکرول که گاهی اوقات ترمینال های گنگ نامیده می شود مناسب است.
با این شکل از ترمینال ،ورودی کاربر یک خط در یک زمان است ،با یک کالسکه بازگشت سیگنال پایان یک خط ،و خروجی به
ترمینال به طور مشابه یک خط در یک زمان است .چاپگر خطی نمونه دیگری از چنین دستگاه هایی است .عملیات بایت در یک
زمان در پایانه های حالت فرم ،زمانی که هر ضربه کلید قابل توجه است ،و برای بسیاری از تجهیزات جانبی دیگر مانند سنسورها
و کنترلرها استفاده می شود.
در مورد I/Oخط در یک زمان ،بافر می تواند برای نگه داشتن یک خط استفاده شود .فرآیند کاربر در طول ورودی به حالت
تعلیق در می آید و در انتظار رسیدن کل خط است .برای خروجی ،فرآیند کاربر می تواند یک خط خروجی را در بافر قرار دهد و
پردازش را ادامه دهد .نیازی به تعلیق نیست مگر اینکه خط دوم خروجی برای ارسال قبل از تخلیه بافر از اولین عملیات خروجی
داشته باشد .در مورد I/Oبایت در یک زمان ،تعامل بین سیستم عامل و فرآیند کاربر از مدل تولید کننده/مصرف کننده که در
فصل 5بحث شد پیروی می کند.
دو بافر
با تخصیص دو بافر سیستم به عملیات می توان نسبت به بافر منفرد پیشرفت کرد شکل c. 11.5یک فرآیند اکنون داده ها را به
یا از یک بافر منتقل می کند در حالی که سیستم عامل دیگری را خالی یا پر می کند .این تکنیک به عنوان دو بافر یا تعویض
بافر شناخته می شود.
برای انتقال بلوکگرا ،میتوانیم تقریباً زمان اجرا را حداکثر C, Tتخمین بزنیم .بنابراین ،اگر C ≤ Tباشد ،می توان دستگاه
بلوک گرا را با سرعت کامل کار کرد .از سوی دیگر ،اگر ،C > Tبافر دوگانه تضمین می کند که فرآیند نیازی به انتظار در I/O
نخواهد بود .در هر صورت ،بهبودی نسبت به بافرینگ منفرد حاصل می شود .باز هم ،این بهبود به قیمت افزایش پیچیدگی است.
برای ورودی جریان محور ،ما دوباره با دو حالت عملیاتی جایگزین روبرو هستیم .برای ورودی/خروجی خط در یک زمان ،فرآیند
کاربر نیازی به تعلیق برای ورودی یا خروجی ندارد ،مگر اینکه فرآیند جلوتر از بافرهای دوگانه اجرا شود .برای عملیات بایت در
594
سیستم عامل های داخلی و اصول طراحی595.........................................................................................................................
یک زمان ،بافر دوگانه هیچ مزیت خاصی نسبت به یک بافر دو برابر طول ندارد .در هر دو مورد ،از مدل تولید کننده/مصرف
کننده پیروی می شود.
یک طرح دو بافر باید جریان داده بین یک دستگاه I/Oو یک فرآیند را صاف کند .اگر عملکرد یک فرآیند خاص کانون توجه ما
باشد ،پس مایلیم که عملیات ورودی/خروجی بتواند با فرآیند همگام شود .بافر مضاعف ممکن است ناکافی باشد اگر فرآیند
انفجارهای سریع ورودی/خروجی را انجام دهد .در این مورد ،اغلب می توان با استفاده از بیش از دو بافر مشکل را کاهش داد.
هنگامی که بیش از دو بافر استفاده می شود ،مجموعه بافرها خود به عنوان یک بافر دایره ای نامیده می شود شکل ،d11.5که
هر بافر مجزا یک واحد در بافر دایره ای است .این به سادگی مدل تولیدکننده/مصرف کننده بافر محدود است که در فصل 5
مورد مطالعه قرار گرفته است.
کاربرد بافرینگ
بافرینگ تکنیکی است که پیک های تقاضای ورودی/خروجی را هموار می کند .با این حال ،هیچ مقدار بافری به دستگاه
ورودی/خروجی اجازه نمیدهد تا زمانی که میانگین تقاضای فرآیند بیشتر از آن چیزی است که دستگاه ورودی/خروجی میتواند
سرویس دهد ،بهطور نامحدودی با فرآیند همگام شود .حتی با وجود چند بافر ،تمام بافرها در نهایت پر می شوند و فرآیند باید
پس از پردازش هر تکه داده منتظر بماند .با این حال ،در یک محیط چندبرنامهنویسی ،زمانی که انواع فعالیتهای I/Oو
فعالیتهای فرآیندی متنوعی برای سرویس وجود دارد ،بافر یکی از ابزارهایی است که میتواند کارایی سیستمعامل و عملکرد
فرآیندهای فردی را افزایش دهد.
در طول 40سال گذشته ،افزایش سرعت پردازنده ها و حافظه اصلی بسیار بیشتر از سرعت دسترسی به دیسک بوده است ،به
طوری که سرعت پردازنده و حافظه اصلی حدود دو مرتبه در مقایسه با یک مرتبه بزرگی برای دیسک افزایش یافته است .نتیجه
این است که دیسک ها در حال حاضر حداقل چهار مرتبه قدر کندتر از حافظه اصلی هستند .انتظار می رود این شکاف در آینده
قابل پیش بینی ادامه یابد .بنابراین ،عملکرد زیرسیستم ذخیره سازی دیسک یک نگرانی حیاتی است و تحقیقات زیادی روی
طرح هایی برای بهبود عملکرد انجام شده است .در این بخش ،برخی از مسائل کلیدی را برجسته میکنیم و به مهمترین
رویکردها نگاه میکنیم .از آنجایی که عملکرد سیستم دیسک با مسائل طراحی سیستم فایل ارتباط نزدیکی دارد ،بحث در فصل
12ادامه می یابد.
595
سیستم عامل های داخلی و اصول طراحی596.........................................................................................................................
جزئیات واقعی عملیات ورودی/خروجی دیسک به سیستم کامپیوتر ،سیستم عامل و ماهیت کانال ورودی/خروجی و سخت افزار
کنترل کننده دیسک بستگی دارد .نمودار زمان بندی کلی انتقال ورودی/خروجی دیسک در شکل 11.6نشان داده شده است.
هنگامی که درایو دیسک کار می کند ،دیسک با سرعت ثابت در حال چرخش است .برای خواندن یا نوشتن ،هد باید در مسیر
مورد نظر و در ابتدای بخش مورد نظر در آن مسیر قرار گیرد .انتخاب مسیر شامل حرکت دادن سر در یک سیستم هد متحرک
یا انتخاب الکترونیکی یک هد بر روی یک سر ثابت است .سیستم سر در یک سیستم هد متحرک ،زمان الزم برای قرار دادن سر
در مسیر به عنوان زمان جستجو شناخته می شود.
در هر صورت ،هنگامی که آهنگ انتخاب شد ،کنترل کننده دیسک منتظر می ماند تا بخش مناسب بچرخد تا با هد هماهنگ
شود .مدت زمانی که طول می کشد تا ابتدای بخش به سر برسد به عنوان تاخیر چرخشی یا تاخیر چرخشی شناخته می شود.
مجموع زمان جستجو ،در صورت وجود ،و تأخیر چرخشی برابر با زمان دسترسی است ،یعنی زمانی که برای قرار گرفتن در
موقعیت خواندن یا نوشتن الزم است .هنگامی که هد در موقعیت خود قرار گرفت ،عملیات خواندن یا نوشتن سپس با حرکت
بخش در زیر هد انجام می شود .این بخش انتقال داده از عملیات است .زمان مورد نیاز برای انتقال ،زمان انتقال است.
عالوه بر زمان دسترسی و زمان انتقال ،چندین تاخیر در صف معموالً با عملیات ورودی/خروجی دیسک مرتبط است .هنگامی که
یک فرآیند یک درخواست I/Oصادر می کند ،ابتدا باید در یک صف منتظر بماند تا دستگاه در دسترس باشد .در آن زمان،
دستگاه به فرآیند اختصاص داده می شود .اگر دستگاه یک کانال ورودی/خروجی یا مجموعهای از کانالهای ورودی/خروجی را با
درایوهای دیسک دیگر به اشتراک بگذارد ،ممکن است منتظر ماندن بیشتری برای در دسترس بودن کانال باشد .در آن نقطه،
جستجو برای شروع دسترسی به دیسک انجام می شود.
در برخی از سیستم های پیشرفته برای سرورها ،تکنیکی به نام سنجش موقعیت چرخشی RPSاستفاده می شود .این کار به
شرح زیر است :هنگامی که فرمان جستجو صادر شد ،کانال برای انجام سایر عملیات I/Oآزاد می شود .هنگامی که جستجو به
پایان رسید ،دستگاه تعیین می کند که چه زمانی داده ها در زیر سر بچرخند .با نزدیک شدن آن بخش به سر ،دستگاه سعی می
کند مسیر ارتباطی را دوباره به میزبان بازگرداند .اگر واحد کنترل یا کانال با ورودی/خروجی دیگری مشغول باشد ،تالش برای
596
سیستم عامل های داخلی و اصول طراحی597.........................................................................................................................
اتصال مجدد با شکست مواجه میشود و دستگاه باید یک دور کامل بچرخد تا بتواند دوباره وصل شود ،که به آن خطا RPS
میگویند .این یک عنصر تاخیر اضافی است که باید به خط زمانی شکل 11.6اضافه شود.
زمان جستجو زمان جستجو زمان مورد نیاز برای حرکت بازوی دیسک به مسیر مورد نیاز است .به نظر می رسد که تعیین این
مقدار دشوار است .زمان جستجو از دو جزء کلیدی تشکیل شده است :زمان راه اندازی اولیه و زمان الزم برای عبور از مسیرهایی
که پس از باال آمدن سرعت بازوی دسترسی باید از آنها عبور کرد .متأسفانه ،زمان پیمایش یک تابع خطی از تعداد مسیرها
نیست ،بلکه شامل یک زمان ته نشینی است زمان پس از قرار دادن سر بر روی مسیر هدف تا زمانی که شناسایی مسیر تأیید
شود.
بهبود زیادی از اجزای دیسک کوچکتر و سبکتر حاصل می شود .چند سال پیش ،قطر یک دیسک معمولی 14اینچ 36
سانتیمتر بود ،در حالی که رایجترین اندازه امروزی آن 3.5اینچ 8.9سانتیمتر است که مسافتی را که بازو باید طی کند کاهش
میدهد .میانگین زمان جستجو در هارد دیسک های امروزی کمتر از 10میلی ثانیه است.
تأخیر چرخشی تأخیر چرخشی زمان مورد نیاز برای چرخش ناحیه آدرسدهی شده دیسک به موقعیتی است که توسط هد
خواندن/نوشتن قابل دسترسی باشد .دیسکها با سرعتهای 3600دور در دقیقه برای دستگاههای دستی مانند دوربینهای
دیجیتال تا 15000دور در دقیقه میچرخند .در این سرعت اخیر ،یک دور در هر 4میلی ثانیه وجود دارد .بنابراین ،به طور
متوسط ،تاخیر چرخشی 2میلی ثانیه خواهد بود.
زمان انتقال زمان انتقال به یا از دیسک به سرعت چرخش دیسک به شکل زیر بستگی دارد:
597
سیستم عامل های داخلی و اصول طراحی598.........................................................................................................................
مقایسه زمان بندی با تعریف پارامترهای فوق ،اجازه دهید به دو عملیات ورودی/خروجی متفاوت نگاه کنیم که خطر تکیه بر
مقادیر متوسط را نشان می دهد .دیسکی را با میانگین زمان جستجوی 4میلی ثانیه ،سرعت چرخش 7500دور در دقیقه و
بخش های 512بایتی با 500سکتور در هر آهنگ در نظر بگیرید .فرض کنید که میخواهیم فایلی متشکل از 2500بخش را
بخوانیم که مجموعاً 1.28مگابایت است .ما می خواهیم کل زمان انتقال را تخمین بزنیم .ابتدا فرض می کنیم که فایل تا حد
امکان فشرده روی دیسک ذخیره می شود .یعنی فایل تمام سکتورها را در 5تراک مجاور اشغال می کند 5تراک 500سکتور/
مسیر 2500سکتور .این به عنوان سازماندهی متوالی شناخته می شود .زمان خواندن آهنگ اول به شرح زیر است:
فرض کنید که اکنون می توان آهنگ های باقی مانده را بدون زمان جستجو خواند .به این معنی که عملیات I/Oمی تواند با
جریان دیسک هماهنگی داشته باشد .سپس ،حداکثر باید با تاخیر چرخشی برای هر مسیر بعدی مقابله کنیم .بنابراین ،هر آهنگ
متوالی در ms 12 12 = 8 + 4خوانده می شود .برای خواندن کل فایل،
اکنون اجازه دهید زمان الزم برای خواندن همان داده ها را با استفاده از دسترسی تصادفی به جای دسترسی متوالی محاسبه
کنیم .یعنی دسترسی به بخش ها به صورت تصادفی روی دیسک توزیع می شود .برای هر بخش ،ما داریم:
واضح است که ترتیب خواندن سکتورها از دیسک تأثیر شگرفی بر عملکرد ورودی/خروجی دارد .در مورد دسترسی به فایلی که
در آن بخش های متعدد خوانده یا نوشته می شوند ،ما تا حدودی بر نحوه استقرار بخش های داده کنترل داریم و در فصل بعدی
در مورد این موضوع چیزی برای گفتن خواهیم داشت .با این حال ،حتی در مورد دسترسی به فایل ،در یک محیط
چندبرنامهنویسی ،درخواستهای I/Oوجود خواهد داشت که برای همان دیسک رقابت میکنند .بنابراین ،بررسی روشهایی که
میتوان عملکرد ورودی/خروجی دیسک را نسبت به عملکردی که با دسترسی کامال تصادفی به دیسک به دست میآید ،بهبود
بخشید ،ارزشمند است.
598
سیستم عامل های داخلی و اصول طراحی599.........................................................................................................................
در مثالی که توضیح داده شد ،دلیل تفاوت عملکرد را می توان در جستجوی زمان جستجو کرد .اگر درخواست های دسترسی
بخش شامل انتخاب آهنگ ها به صورت تصادفی باشد ،عملکرد سیستم ورودی/خروجی دیسک تا حد امکان ضعیف خواهد بود.
برای بهبود اوضاع ،باید میانگین زمان صرف شده برای جستجوها را کاهش دهیم.
وضعیت معمولی را در یک محیط چندبرنامهنویسی در نظر بگیرید ،که در آن سیستمعامل یک صف از درخواستها را برای هر
دستگاه ورودی/خروجی نگه میدارد .بنابراین ،برای یک دیسک ،تعدادی درخواست I/Oخواندن و نوشتن از فرآیندهای مختلف
در صف وجود خواهد داشت .اگر موارد را از صف به ترتیب تصادفی انتخاب کنیم ،میتوان انتظار داشت که مسیرهایی که باید
بازدید شوند بهطور تصادفی رخ دهند و عملکرد ضعیفی داشته باشند .این زمانبندی تصادفی بهعنوان معیاری برای ارزیابی
تکنیکهای دیگر مفید است.
شکل 11.7عملکرد الگوریتمهای زمانبندی مختلف را برای نمونهای از درخواستهای ورودی/خروجی مقایسه میکند .محور
عمودی مربوط به مسیرهای روی دیسک است .محور افقی مربوط به زمان یا به طور معادل تعداد مسیرهای پیموده شده است.
برای این شکل ،فرض می کنیم که سر دیسک ابتدا در مسیر 100قرار دارد .در این مثال ،دیسکی با 200تراک فرض می کنیم
و صف درخواست دیسک دارای درخواست های تصادفی در آن است .تراک های درخواستی ،به ترتیب دریافت شده توسط
زمانبندی دیسک 184 ،38 ،150 ،160 ،90 ،18 ،39 ،58 ،55 ،هستند .جدول a11.2نتایج را جدول بندی می کند.
FIRST IN FIRST OUTسادهترین شکل زمانبندی ،برنامهریزی first-in-first-out FIFOاست که موارد را از صف
به ترتیب متوالی پردازش میکند.
این استراتژی دارای مزیت منصفانه بودن است ،زیرا هر درخواستی مورد احترام قرار می گیرد و درخواست ها به ترتیب دریافت
شده مورد احترام قرار می گیرند .شکل a11.7حرکت بازوی دیسک را با FIFOنشان می دهد .این نمودار مستقیماً از داده
های جدول a11.2تولید شده است .همانطور که مشاهده می شود ،دسترسی ها به دیسک به همان ترتیبی است که درخواست
ها در ابتدا دریافت شده اند.
با ،FIFOاگر فقط چند فرآیند وجود داشته باشد که نیاز به دسترسی دارند و اگر بسیاری از درخواستها مربوط به بخشهای
فایل خوشهای باشد ،میتوان به عملکرد خوب امیدوار بود .با این حال ،اگر فرآیندهای زیادی برای دیسک رقابت کنند ،این
تکنیک اغلب زمانبندی تصادفی را در عملکرد تقریبی میکند .بنابراین ،ممکن است در نظر گرفتن یک سیاست زمانبندی
پیچیدهتر سودآور باشد .تعدادی از این موارد در جدول 11.3فهرست شده اند و اکنون مورد بررسی قرار خواهند گرفت.
599
سیستم عامل های داخلی و اصول طراحی600.........................................................................................................................
اولویت با یک سیستم مبتنی بر اولویت ،PRIکنترل زمان بندی خارج از کنترل نرم افزار مدیریت دیسک است .چنین رویکردی
برای بهینه سازی استفاده از دیسک نیست ،بلکه برای دستیابی به اهداف دیگر در سیستم عامل در نظر گرفته شده است .اغلب
کارهای دسته ای کوتاه و کارهای تعاملی اولویت بیشتری نسبت به کارهای طوالنی تری دارند که به محاسبات طوالنی تری نیاز
دارند .این اجازه می دهد تا بسیاری از کارهای کوتاه به سرعت از طریق سیستم شسته شوند و ممکن است زمان پاسخ تعاملی
خوبی را فراهم کند .با این حال ،مشاغل طوالنی تر ممکن است مجبور باشند زمان زیادی را منتظر بمانند .عالوه بر این ،چنین
سیاستی میتواند منجر به اقدامات متقابل از سوی کاربران شود که مشاغل خود را به قطعات کوچکتر تقسیم میکنند تا
سیستم را شکست دهند .این نوع سیاست برای سیستم های پایگاه داده ضعیف است.
600
601.........................................................................................................................سیستم عامل های داخلی و اصول طراحی
c SCAN d C-SCAN
starting at starting at
a FIFO b SSTF track 100, track 100, in
starting starting in the the
at track at track direction of direction of
100 100 increasing increasing
track track
number number
Num Num Num Num
Next ber Next ber Next ber Next ber
track of track of track of track of
access track access track access track access track
ed s ed s ed s ed s
55 trave 90 trave 150 trave 150 trave
rsed rsed rsed rsed
58 58 160 160
45 10 50 50
39 55 184 184
3 32 10 10
18 39 90 18
19 3 24 24
90 38 58 38
21 16 94 166
160 18 55 39
72 1 32 20
150 150 39 55
70 20 3 1
38 160 38 58
10 132 16 16
184 184 18 90
112 10 1 3
Ave Ave Ave Ave
rage 146 rage 24 rage 20 rage 32
seek seek seek seek
leng 55.3 leng 27.5 leng 27.8 leng 35.8
th th th th
601
سیستم عامل های داخلی و اصول طراحی602.........................................................................................................................
آخرین در اولین خروجی با کمال تعجب ،یک خط مشی که همیشه آخرین درخواست را انجام می دهد ،شایستگی دارد .در
سیستمهای پردازش تراکنش ،دادن دستگاه به آخرین کاربر باید باعث حرکت کم یا بدون حرکت بازو برای حرکت در یک فایل
متوالی شود .استفاده از این موقعیت باعث بهبود توان عملیاتی و کاهش طول صف می شود .تا زمانی که یک کار بتواند به طور
فعال از سیستم فایل استفاده کند ،با بیشترین سرعت ممکن پردازش می شود .با این حال ،اگر دیسک به دلیل حجم کاری زیاد
مشغول نگه داشته شود ،احتمال گرسنگی مشخص وجود دارد .هنگامی که یک کار وارد یک درخواست I/Oدر صف شد و از سر
خط عقب افتاد ،کار هرگز نمی تواند سر خط را به دست آورد مگر اینکه صف جلوی آن خالی شود.
602
سیستم عامل های داخلی و اصول طراحی603.........................................................................................................................
زمانبندی ،FIFOاولویت ،و LIFOآخرین در اولین خروج صرفاً بر اساس ویژگیهای صف یا درخواستکننده است .اگر
موقعیت مسیر فعلی برای زمانبند شناخته شده باشد ،میتوان از زمانبندی بر اساس آیتم درخواستی استفاده کرد .در ادامه این
سیاست ها را بررسی می کنیم.
SHORTEST SERVICE TIME FIRSTسیاست کوتاهترین زمان سرویس اول SSTFانتخاب درخواست
ورودی/خروجی دیسک است که به کمترین حرکت بازوی دیسک از موقعیت فعلی آن نیاز دارد .بنابراین ،ما همیشه انتخاب می
کنیم که حداقل زمان جستجو را متحمل شویم .البته همیشه انتخاب حداقل زمان جستجو تضمین نمی کند که میانگین زمان
جستجو در تعدادی از حرکات بازو حداقل باشد .با این حال ،این باید عملکرد بهتری نسبت به FIFOارائه دهد .از آنجایی که
بازو می تواند در دو جهت حرکت کند ،ممکن است از یک الگوریتم تصادفی شکستن برای حل موارد با فواصل مساوی استفاده
شود.
شکل b11.7و جدول b11.2عملکرد SSTFرا در همان مثالی که برای FIFOاستفاده شد نشان می دهد .اولین مسیری که
به آن دسترسی دارید 90است ،زیرا این مسیر نزدیکترین مسیر درخواستی به موقعیت شروع است .آهنگ بعدی که به آن
دسترسی دارید 58است زیرا این نزدیکترین آهنگ درخواستی باقی مانده به موقعیت فعلی 90است .آهنگ های بعدی بر این
اساس انتخاب می شوند.
SCANبه استثنای ،FIFOتمام خط مشی هایی که تاکنون شرح داده شده اند می توانند برخی از درخواست ها را تا زمانی
که کل صف خالی نشود ،انجام ندهند .یعنی همیشه ممکن است درخواست های جدیدی وارد شود که قبل از درخواست موجود
انتخاب شوند .یک جایگزین ساده که از این نوع گرسنگی جلوگیری می کند ،الگوریتم SCANاست که به عنوان الگوریتم
آسانسور نیز شناخته می شود زیرا بسیار شبیه به آسانسور عمل می کند.
با ،SCANبازو باید فقط در یک جهت حرکت کند و تمام درخواستهای معوق در مسیر را برآورده کند ،تا زمانی که به آخرین
مسیر در آن جهت برسد یا تا زمانی که دیگر درخواستی در آن جهت وجود نداشته باشد .این اصالح اخیر گاهی اوقات به عنوان
سیاست LOOKشناخته می شود .سپس جهت سرویس معکوس می شود و اسکن در جهت مخالف ادامه می یابد و دوباره
همه درخواست ها را به ترتیب انتخاب می کند.
شکل c11.7و جدول c11.2سیاست SCANرا نشان می دهد .با فرض اینکه جهت اولیه افزایش تعداد مسیر باشد ،اولین
مسیر انتخاب شده 150است ،زیرا این مسیر نزدیکترین مسیر به مسیر شروع 100در جهت افزایش است.
همانطور که مشاهده می شود ،سیاست SCANتقریباً مشابه سیاست SSTFعمل می کند .در واقع ،اگر فرض میکردیم که
بازو در جهت اعداد مسیر پایینتر در ابتدای مثال حرکت میکند ،الگوی زمانبندی برای SSTFو SCANیکسان بود .با این
603
سیستم عامل های داخلی و اصول طراحی604.........................................................................................................................
حال ،این یک مثال ثابت است که در آن هیچ مورد جدیدی به صف اضافه نمی شود .حتی زمانی که صف به صورت پویا در حال
تغییر است SCAN ،مشابه SSTFخواهد بود مگر اینکه الگوی درخواست غیرعادی باشد.
توجه داشته باشید که خطمشی SCANنسبت به منطقهای که اخیراً از آن عبور کردهاید مغرضانه است.بنابراین از محلی بودن
به خوبی SSTFاستفاده نمی کند .دیدن اینکه خط مشی SCANمشاغلی را که درخواست آنها برای نزدیکترین مسیرها به
درونی ترین و بیرونی ترین مسیرها است و مشاغل تازه وارد را ترجیح می دهد دشوار نیست .اولین مشکل را می توان از طریق
خط مشی C-SCANاجتناب کرد ،در حالی که مشکل دوم توسط خط مشی N-step-SCANحل می شود.
C-SCANخط مشی C-SCAN SCANدایره ای اسکن را فقط به یک جهت محدود می کند .بنابراین ،هنگامی که آخرین
آهنگ در یک جهت بازدید شد ،بازو به انتهای مقابل دیسک بازگردانده می شود و اسکن دوباره آغاز می شود.
این حداکثر تأخیر ایجاد شده در درخواستهای جدید را کاهش میدهد .با ،SCANاگر زمان مورد انتظار برای اسکن از مسیر
داخلی به مسیر بیرونی tباشد ،فاصله سرویس مورد انتظار برای بخشهای حاشیه 2تن است .با ،C-SCANفاصله به ترتیب t
smaxاست ،که در آن smaxحداکثر زمان جستجو است.
شکل d11.7و جدول d11.2رفتار C-SCANرا نشان می دهد .در این مورد ،سه تراک درخواستی اولی که با آن مواجه
میشوید عبارتند از 160 ،150و .184سپس اسکن از کمترین شماره آهنگ شروع میشود و آهنگ درخواستی بعدی که با آن
مواجه میشوید 18است.
N-STEP-SCANو FSCANبا ،SCAN ،SSTFو ،C-SCANممکن است بازو برای مدت زمان قابل توجهی حرکت
نکند .به عنوان مثال ،اگر یک یا چند فرآیند نرخ دسترسی باالیی به یک مسیر داشته باشند ،می توانند کل دستگاه را با
درخواست های مکرر به آن مسیر در انحصار خود درآورند .دیسکهای چند سطحی با چگالی باال بیشتر از دیسکهای با چگالی
کمتر و/یا دیسکهایی که فقط یک یا دو سطح دارند تحت تأثیر این ویژگی قرار میگیرند .برای جلوگیری از این "چسبندگی
بازو" ،صف درخواست دیسک را می توان بخش بندی کرد ،با یک بخش در یک زمان به طور کامل پردازش می شود .دو نمونه از
این رویکرد N-step-SCANو FSCANهستند.
خط مشی N-step-SCANصف درخواست دیسک را به صف های فرعی به طول Nتقسیم می کند .صف های فرعی با
استفاده از SCANیکی یکی پردازش می شوند .در حالی که یک صف در حال پردازش است ،درخواست های جدید باید به یک
صف دیگر اضافه شوند .اگر در پایان یک اسکن کمتر از Nدرخواست موجود باشد ،همه آنها با اسکن بعدی پردازش می شوند .با
مقادیر زیاد ،Nعملکرد N-step-SCANبه عملکرد SCANنزدیک می شود .با مقدار ،N = 1سیاست FIFOاتخاذ می
شود.
604
سیستم عامل های داخلی و اصول طراحی605.........................................................................................................................
FSCANخط مشی ای است که از دو صف فرعی استفاده می کند .وقتی اسکن شروع می شود ،همه درخواست ها در یکی از
صف ها قرار می گیرند و دیگری خالی است .در طول اسکن ،تمام درخواست های جدید در صف دیگر قرار می گیرند .بنابراین،
سرویس درخواستهای جدید تا زمانی که تمام درخواستهای قدیمی پردازش نشود ،به تعویق میافتد.
RAID 11.6
همانطور که قبالً بحث شد ،نرخ بهبود عملکرد ذخیره سازی ثانویه به طور قابل توجهی کمتر از نرخ پردازنده ها و حافظه اصلی
بوده است .این عدم تطابق سیستم ذخیره سازی دیسک را به تمرکز اصلی در بهبود عملکرد کلی سیستم کامپیوتر تبدیل کرده
است.
مانند سایر زمینههای عملکرد رایانه ،طراحان ذخیرهسازی دیسک تشخیص میدهند که اگر تنها بتوان یک مؤلفه را تا آنجا پیش
برد ،با استفاده از مؤلفههای موازی متعدد ،دستاوردهای بیشتری در عملکرد حاصل میشود .در مورد ذخیره سازی دیسک ،این
منجر به توسعه آرایه هایی از دیسک ها می شود که به طور مستقل و موازی عمل می کنند .با چندین دیسک ،درخواستهای
ورودی/خروجی جداگانه را میتوان به صورت موازی انجام داد ،تا زمانی که دادههای مورد نیاز روی دیسکهای جداگانه قرار
داشته باشند .عالوه بر این ،اگر بلوک داده ای که باید به آن دسترسی داشت در چندین دیسک توزیع شده باشد ،یک درخواست
I/Oمی تواند به صورت موازی اجرا شود.
با استفاده از دیسک های متعدد ،روش های بسیار متنوعی وجود دارد که در آنها می توان داده ها را سازماندهی کرد و در آنها
می توان افزونگی را برای بهبود قابلیت اطمینان اضافه کرد .این می تواند توسعه طرح های پایگاه داده را که در تعدادی از پلتفرم
ها و سیستم عامل ها قابل استفاده هستند ،دشوار کند .خوشبختانه ،صنعت بر روی یک طرح استاندارد شده برای طراحی پایگاه
داده چند دیسک ،به نام RAIDآرایه اضافی از دیسک های مستقل به توافق رسیده است .طرح RAIDاز هفت سطح 2صفر
تا شش تشکیل شده است .این سطوح داللت بر یک رابطه سلسله مراتبی ندارند بلکه معماری های طراحی متفاوتی را مشخص
می کنند که سه ویژگی مشترک دارند:
RAID .1مجموعه ای از درایوهای دیسک فیزیکی است که توسط سیستم عامل به عنوان یک درایو منطقی واحد مشاهده می
شود.
.2داده ها در درایوهای فیزیکی یک آرایه در طرحی به نام stripingتوزیع می شوند که در ادامه توضیح داده شد.
.3ظرفیت اضافی دیسک برای ذخیره اطالعات برابری استفاده می شود که بازیابی اطالعات را در صورت خرابی دیسک تضمین
می کند.
605
سیستم عامل های داخلی و اصول طراحی606.........................................................................................................................
جزئیات ویژگی های دوم و سوم برای سطوح مختلف RAIDمتفاوت است RAID 0 .و RAID 1از ویژگی سوم پشتیبانی
نمی کنند .اصطالح RAIDدر ابتدا در مقاله ای توسط گروهی از محققان دانشگاه کالیفرنیا در برکلی PATT88ابداع شد.
این مقاله پیکربندی ها و برنامه های مختلف RAIDرا تشریح کرد و تعاریف سطوح RAIDرا که هنوز استفاده می شوند
معرفی کرد.
استراتژی RAIDاز چندین درایو دیسک استفاده می کند و داده ها را به گونه ای توزیع می کند که امکان دسترسی همزمان
به داده ها از چندین درایو را فراهم می کند ،در نتیجه عملکرد ورودی/خروجی را بهبود می بخشد و امکان افزایش تدریجی
آسان تر ظرفیت را فراهم می کند.
سهم منحصر به فرد پیشنهاد ،RAIDرسیدگی موثر به نیاز به افزونگی است .اگرچه اجازه دادن به چندین هد و محرک برای
کار همزمان باعث دستیابی به نرخ I/Oو انتقال باالتر می شود ،استفاده از چندین دستگاه احتمال خرابی را افزایش می دهد.
برای جبران این کاهش قابلیت اطمینان RAID ،از اطالعات برابری ذخیره شده استفاده می کند که امکان بازیابی اطالعات از
دست رفته به دلیل خرابی دیسک را فراهم می کند.
اکنون هر یک از سطوح RAIDرا بررسی می کنیم .جدول 11.4یک راهنمای تقریبی برای هفت سطح ارائه می دهد .در
جدول ،عملکرد I/Oهم از نظر ظرفیت انتقال داده ،یا توانایی انتقال داده ،و نرخ درخواست ورودی/خروجی ،یا توانایی برآوردن
درخواستهای ورودی/خروجی نشان داده شده است ،زیرا این سطوح RAIDذاتاً نسبت به این سطوح متفاوت عمل میکنند.
دو معیار نقطه قوت هر سطح RAIDبا رنگ مشخص شده است .شکل 11.8مثالی است که استفاده از هفت طرح RAIDرا
برای پشتیبانی از ظرفیت داده ای که به چهار دیسک بدون نیاز به افزونگی نیاز دارد ،نشان می دهد .شکل ،طرح داده های کاربر
و داده های اضافی را برجسته می کند و نیازهای ذخیره سازی نسبی سطوح مختلف را نشان می دهد .در طول بحث زیر به این
شکل اشاره می کنیم .از هفت سطح RAIDشرح داده شده ،تنها چهار سطح معموالً مورد استفاده قرار می گیرند :سطوح
،5 ،1 ،RAID 0و .6
606
سیستم عامل های داخلی و اصول طراحی607.........................................................................................................................
دسته سطح شرح در دسترس بودن داده دیسک ظرفیت انتقال نرخ درخواست
بندی های ها داده I/Oبزرگ ورودی/خروجی کوچک
مورد
نیاز
راه راه 0 غیر زائد N پایین تر از یک خیلی باال بسیار باال هم برای خواندن
زدن دیسک و هم برای نوشتن
آینه 1 آینه شده 2N باالتر از، RAID 2 باالتر از یک تا دو برابر دیسک واحد برای
کاری ،4 ،3یا 5؛ کمتر از دیسک برای خواندن .مشابه دیسک تک
خواندن .مشابه برای نوشتن
دیسک تک برای
نوشتن
دسترس 2 اضافی از طریق m N RAID 6 باالترین از تقریباً دو برابر یک دیسک
ی کدHamming همه منفرد
موازی جایگزین
های
فهرست
شده
3 برابری در هم 1 N بسیار باالتر از تک باالترین از تقریباً دو برابر یک دیسک
آمیخته با دیسک .قابل مقایسه همه منفرد
بیت با 4 ، RAID 3یا جایگزین
5 های
فهرست
شده
دسترس 4 برابری در هم 1 N بسیار باالتر از تک مشابه RAID 0 مشابه RAID 0برای
ی آمیخته با بلوک دیسک .قابل مقایسه برای خواندن .به خواندن .به طور قابل
مستقل با 4 ، RAID 2یا طور قابل توجهی توجهی کمتر از یک
607
سیستم عامل های داخلی و اصول طراحی608.........................................................................................................................
608
سیستم عامل های داخلی و اصول طراحی609.........................................................................................................................
RAIDسطح
سطح RAID 0یک عضو واقعی از خانواده RAIDنیست ،زیرا شامل افزونگی برای بهبود عملکرد یا ارائه حفاظت از داده نمی
شود .با این حال ،برنامههای کاربردی کمی وجود دارد ،مانند برخی از آنها در ابررایانهها که در آنها کارایی و ظرفیت دغدغه
اصلی است و هزینه پایین مهمتر از بهبود قابلیت اطمینان است.
برای ،RAID 0داده های کاربر و سیستم در تمام دیسک های موجود در آرایه توزیع می شود .این مزیت قابل توجهی نسبت
به استفاده از یک دیسک بزرگ دارد :اگر دو درخواست ورودی/خروجی متفاوت برای دو بلوک مختلف داده در انتظار باشند،
احتمال زیادی وجود دارد که بلوکهای درخواستی روی دیسکهای مختلف باشند .بنابراین ،دو درخواست را می توان به صورت
موازی صادر کرد و زمان صف I/Oرا کاهش داد.
609
سیستم عامل های داخلی و اصول طراحی610.........................................................................................................................
اما ،RAID 0مانند تمام سطوح ،RAIDفراتر از توزیع ساده داده ها در یک آرایه دیسک است :داده ها در سراسر دیسک های
موجود راه راه هستند .این به بهترین شکل با در نظر گرفتن شکل 11.8قابل درک است .همه داده های کاربر و سیستم به
صورت ذخیره شده در یک دیسک منطقی مشاهده می شوند .دیسک منطقی به نوارها تقسیم می شود .این نوارها ممکن است
بلوک های فیزیکی ،بخش ها یا واحدهای دیگری باشند .نوارها به دیسک های فیزیکی متوالی در آرایه RAIDنگاشت می
شوند .مجموعه ای از نوارهای منطقی متوالی که دقیقاً یک نوار را به هر عضو آرایه نگاشت می کند ،نوار نامیده می شود .در یک
آرایه دیسک ،nاولین نوار منطقی nبه صورت فیزیکی به عنوان اولین نوار روی هر یک از nدیسک ذخیره می شود و اولین نوار
را تشکیل می دهد n .نوار دوم به عنوان نوار دوم روی هر دیسک توزیع می شود .و غیره مزیت این طرح این است که اگر یک
درخواست I/Oمنفرد از چندین نوار منطقی به هم پیوسته تشکیل شده باشد ،می توان تا nنوار برای آن درخواست را به صورت
موازی انجام داد و زمان انتقال I/Oرا تا حد زیادی کاهش داد.
RAID 0برای ظرفیت انتقال داده باال عملکرد هر یک از سطوح RAIDبه طور اساسی به الگوهای درخواست سیستم میزبان
و به طرح داده ها بستگی دارد .این مسائل را می توان به وضوح در RAID 0مورد بررسی قرار داد ،جایی که تأثیر افزونگی در
تجزیه و تحلیل تداخلی ندارد .ابتدا ،اجازه دهید استفاده از RAID 0را برای دستیابی به سرعت انتقال داده باال در نظر بگیریم.
برای اینکه برنامه ها نرخ انتقال باالیی را تجربه کنند ،دو شرط باید رعایت شود .اول ،یک ظرفیت انتقال باال باید در کل مسیر
بین حافظه میزبان و درایوهای دیسک جداگانه وجود داشته باشد .این شامل گذرگاههای کنترلکننده داخلی ،گذرگاههای
ورودی/خروجی سیستم میزبان ،آداپتورهای ورودی/خروجی و گذرگاههای حافظه میزبان است.
شرط دوم این است که برنامه باید درخواست های ورودی/خروجی کند که آرایه دیسک را به طور موثر هدایت کند .این الزام در
صورتی برآورده می شود که درخواست معمولی برای مقادیر زیادی از داده های منطقی به هم پیوسته در مقایسه با اندازه یک
نوار باشد .در این مورد ،یک درخواست I/Oمنفرد شامل انتقال موازی داده ها از چندین دیسک است که نرخ انتقال موثر را در
مقایسه با انتقال تک دیسک افزایش می دهد.
RAID 0برای نرخ درخواست I/Oباال در یک محیط تراکنش گرا ،کاربر معموالً بیشتر نگران زمان پاسخگویی است تا نرخ
انتقال .برای یک درخواست I/Oفردی برای مقدار کمی داده ،زمان I/Oتحت سلطه حرکت سرهای دیسک زمان جستجو و
حرکت دیسک تأخیر چرخشی است .در یک محیط تراکنش ،ممکن است صدها درخواست ورودی/خروجی در هر ثانیه وجود
داشته باشد.
بعد یک آرایه دیسک می تواند با متعادل کردن بار ورودی/خروجی در چندین دیسک ،نرخ اجرای I/Oباالیی را ارائه دهد .تعادل
بار موثر تنها در صورتی حاصل می شود که معموالً چندین درخواست I/Oمعوق وجود داشته باشد .این به نوبه خود به این
معنی است که چندین برنامه مستقل یا یک برنامه کاربردی تراکنش گرا وجود دارد که قادر به چندین درخواست
610
سیستم عامل های داخلی و اصول طراحی611.........................................................................................................................
ورودی/خروجی ناهمزمان است .عملکرد نیز تحت تأثیر اندازه نوار خواهد بود .اگر اندازه نوار نسبتاً بزرگ باشد ،به طوری که یک
درخواست ورودی/خروجی تنها شامل یک دسترسی به دیسک میشود ،در این صورت میتوان چندین درخواست ورودی/خروجی
را به صورت موازی بررسی کرد و زمان صف برای هر درخواست را کاهش داد.
RAIDسطح 1
RAID 1با سطوح RAID 2تا 6در نحوه دستیابی به افزونگی متفاوت است .در این طرحهای RAIDدیگر ،نوعی محاسبه
برابری برای معرفی افزونگی استفاده میشود ،در حالی که در ،RAID 1افزونگی با استفاده از یک مصلحت ساده از کپی کردن
همه دادهها به دست میآید .شکل b11.8نشان می دهد که از نوار داده استفاده می شود ،مانند RAID 0.اما در این مورد ،هر
نوار منطقی به دو دیسک فیزیکی جداگانه نگاشت می شود به طوری که هر دیسک در آرایه دارای یک دیسک آینه ای است که
حاوی داده های یکسان است RAID 1 .همچنین می تواند بدون نوار داده ها پیاده سازی شود ،اگرچه کمتر رایج است.
.1یک درخواست خواندن می تواند توسط هر یک از دو دیسکی که حاوی داده های درخواستی است ،سرویس شود ،هر کدام که
شامل حداقل زمان جستجو به عالوه تاخیر چرخشی باشد.
.2یک درخواست نوشتن مستلزم آن است که هر دو نوار متناظر به روز شوند ،اما این می تواند به صورت موازی انجام شود.
بنابراین ،عملکرد نوشتن توسط کندتر از این دو نوشتن دیکته می شود یعنی زمانی که شامل زمان جستجوی بزرگتر به اضافه
تأخیر چرخشی است .با این حال ،هیچ "جریمه نوشتن" در RAID 1وجود ندارد .سطوح RAID 2تا 6شامل استفاده از
بیت های برابری است .بنابراین ،هنگامی که یک نوار به روز می شود ،نرم افزار مدیریت آرایه باید ابتدا بیت های برابری را
محاسبه و به روز کند و همچنین نوار واقعی مورد نظر را به روز کند.
.3بازیابی از یک شکست ساده است .هنگامی که یک درایو از کار می افتد ،ممکن است هنوز از درایو دوم به داده ها دسترسی
داشته باشید.
نقطه ضعف اصلی RAID 1هزینه است .به دو برابر فضای دیسک منطقی دیسکی که پشتیبانی می کند نیاز دارد .به همین
دلیل ،پیکربندی RAID 1احتماالً محدود به درایوهایی است که نرمافزار و دادههای سیستم و سایر فایلهای بسیار حیاتی را
ذخیره میکنند .در این موارد RAID 1 ،یک نسخه پشتیبان در زمان حقیقی از تمام داده ها فراهم می کند تا در صورت خرابی
دیسک ،تمام داده های حیاتی همچنان فوراً در دسترس باشند.
در یک محیط تراکنشمحور RAID 1 ،میتواند به نرخهای درخواست ورودی/خروجی باالیی دست یابد ،در صورتی که اکثر
درخواستها خوانده شوند .در این شرایط ،عملکرد RAID 1میتواند دو برابر RAID 0باشد .با این حال ،اگر بخش قابل
611
سیستم عامل های داخلی و اصول طراحی612.........................................................................................................................
توجهی از درخواستهای ،I/Oدرخواستهای نوشتن باشند ،ممکن است افزایش عملکرد قابل توجهی نسبت به RAID 0
وجود نداشته باشد RAID 1 .همچنین ممکن است عملکرد بهبود یافته ای را نسبت به RAID 0برای برنامه های کاربردی
انتقال داده فشرده با درصد باالیی از خواندن ارائه دهد .اگر برنامه بتواند هر درخواست خواندن را به گونه ای تقسیم کند که هر
دو عضو دیسک مشارکت کنند ،بهبود اتفاق می افتد.
RAIDسطح 2
سطوح 2و RAID 3از تکنیک دسترسی موازی استفاده می کنند .در یک آرایه دسترسی موازی ،همه دیسک های عضو در
اجرای هر درخواست I/Oشرکت می کنند .به طور معمول ،دوک های درایوهای جداگانه به گونه ای هماهنگ می شوند که هر
سر دیسک در هر زمان معین در موقعیت یکسانی روی هر دیسک باشد.
همانطور که در دیگر طرح های ،RAIDاز نوار داده استفاده می شود .در مورد RAID 2و ،3نوارها بسیار کوچک هستند،
اغلب به کوچکی یک بایت یا کلمه هستند .با ،RAID 2یک کد تصحیح کننده خطا در بیت های مربوطه در هر دیسک داده
محاسبه می شود و بیت های کد در موقعیت های بیت مربوطه در دیسک های برابری چندگانه ذخیره می شوند .معموالً از کد
Hammingاستفاده می شود که قادر به تصحیح خطاهای تک بیتی و تشخیص خطاهای دو بیتی است.
اگرچه RAID 2به دیسک های کمتری نسبت به RAID 1نیاز دارد ،اما هنوز نسبتاً پرهزینه است .تعداد دیسک های اضافی
متناسب با گزارش تعداد دیسک های داده است .در یک خواندن واحد ،همه دیسک ها به طور همزمان قابل دسترسی هستند.
داده های درخواستی و کد تصحیح خطا مربوطه به کنترل کننده آرایه تحویل داده می شود .اگر خطای تک بیتی وجود داشته
باشد ،کنترلر می تواند خطا را فورا تشخیص داده و تصحیح کند تا زمان دسترسی خواندن کند نشود .در یک نوشتن ،همه
دیسک های داده و دیسک های برابری برای عملیات نوشتن باید دسترسی داشته باشند.
RAID 2تنها در محیطی که خطاهای دیسک زیادی در آن رخ می دهد یک انتخاب موثر است .با توجه به قابلیت اطمینان
باالی دیسک ها و درایوهای دیسک RAID 2 ،بیش از حد است و اجرا نمی شود.
RAIDسطح 3
RAID 3به روشی مشابه RAID 2سازماندهی شده است .تفاوت این است که RAID 3تنها به یک دیسک اضافی نیاز
دارد ،مهم نیست که آرایه دیسک چقدر بزرگ باشد RAID 3 .از دسترسی موازی ،با توزیع داده ها در نوارهای کوچک استفاده
می کند .به جای یک کد تصحیح کننده خطا ،یک بیت برابری ساده برای مجموعه بیت های مجزا در موقعیت یکسان روی همه
دیسک های داده محاسبه می شود.
612
سیستم عامل های داخلی و اصول طراحی613.........................................................................................................................
افزونگی در صورت خرابی درایو ،درایو برابری قابل دسترسی است و داده ها از دستگاه های باقی مانده بازسازی می شوند .پس از
تعویض درایو خراب ،داده های از دست رفته را می توان در درایو جدید بازیابی کرد و عملیات از سر گرفته شد.
بازسازی داده ها ساده است .آرایه ای از پنج درایو را در نظر بگیرید که در آنها X0تا X3حاوی داده است و X4دیسک برابری
است .برابری بیت ithبه صورت زیر محاسبه می شود:
فرض کنید درایو X1از کار افتاده است .اگر X41i2 ⊕ X11i2را به دو طرف معادله قبلی اضافه کنیم ،به دست می آید
بنابراین ،محتویات هر نوار داده در X1را می توان از محتویات نوارهای مربوطه در دیسک های باقی مانده در آرایه بازسازی کرد.
این اصل برای سطوح RAID 3تا 6صادق است.
در صورت خرابی دیسک ،همه داده ها همچنان در حالتی که به آن حالت کاهش یافته گفته می شود ،در دسترس هستند .در
این حالت ،برای خواندن ،داده های از دست رفته در پرواز با استفاده از محاسبه انحصاری OR-دوباره تولید می شوند .وقتی
دادهها در یک آرایه RAID 3کاهش یافته نوشته میشوند ،سازگاری برابری باید برای بازسازی بعدی حفظ شود .بازگشت به
عملکرد کامل مستلزم این است که دیسک خراب جایگزین شود و کل محتویات دیسک خراب در دیسک جدید دوباره تولید
شود.
عملکرد از آنجا که داده ها در نوارهای بسیار کوچک راه راه هستند RAID 3 ،می تواند به سرعت انتقال داده بسیار باالیی
دست یابد .هر درخواست I/Oشامل انتقال موازی داده از تمام دیسک های داده می شود .برای نقل و انتقاالت بزرگ ،بهبود
عملکرد به ویژه قابل توجه است .از سوی دیگر ،تنها یک درخواست I/Oرا می توان در هر زمان اجرا کرد .بنابراین ،در یک
محیط تراکنش گرا ،عملکرد آسیب می بیند.
RAIDسطح 4
سطوح 4تا RAID 6از یک تکنیک دسترسی مستقل استفاده می کنند .در یک آرایه دسترسی مستقل ،هر دیسک عضو به
طور مستقل عمل میکند ،به طوری که درخواستهای ورودی/خروجی جداگانه میتوانند به صورت موازی برآورده شوند .به
همین دلیل ،آرایههای دسترسی مستقل برای برنامههایی که به نرخ درخواست ورودی/خروجی باالیی نیاز دارند ،مناسبتر
هستند و برای برنامههایی که به سرعت انتقال داده باال نیاز دارند ،نسبتاً کمتر مناسب هستند.
613
سیستم عامل های داخلی و اصول طراحی614.........................................................................................................................
همانطور که در دیگر طرح های ،RAIDاز نوار داده استفاده می شود .در مورد RAID 4تا ،6نوارها نسبتا بزرگ هستند .با
،RAID 4یک نوار برابری بیت به بیت در نوارهای مربوطه در هر دیسک داده محاسبه می شود و بیت های برابری در نوار
مربوطه در دیسک برابری ذخیره می شوند.
RAID 4شامل جریمه نوشتن زمانی است که یک درخواست نوشتن ورودی/خروجی با اندازه کوچک انجام شود .هر بار که
نوشتن اتفاق می افتد ،نرم افزار مدیریت آرایه باید نه تنها داده های کاربر ،بلکه بیت های برابری مربوطه را نیز به روز کند .آرایه
ای از پنج درایو را در نظر بگیرید که در آنها X0تا X3حاوی داده است و X4دیسک برابری است .فرض کنید نوشتنی انجام
می شود که فقط شامل یک نوار روی دیسک X1است .در ابتدا برای هر بیت iرابطه زیر را داریم:
پس از بهروزرسانی ،با بیتهای بالقوه تغییر یافته که با نماد اول نشان داده میشوند:
مجموعه معادالت قبلی به صورت زیر مشتق شده است .خط اول نشان می دهد که تغییر در X1بر دیسک برابری X4نیز تأثیر
می گذارد .در خط دوم عبارت های X11i2 ⊕ X11i24 ⊕ 3را اضافه می کنیم .از آنجا که انحصاری OR-هر کمیتی با
خودش 0است ،این معادله را تحت تأثیر قرار نمی دهد .با این حال ،این یک راحتی است که برای ایجاد خط سوم ،با مرتب
کردن مجدد استفاده می شود .در نهایت ،معادله 11.1جایگزین چهار مورد اول می شود.
برای محاسبه برابری جدید ،نرم افزار مدیریت آرایه باید نوار کاربر قدیمی و نوار برابری قدیمی را بخواند .سپس می تواند این دو
نوار را با داده های جدید و برابری محاسبه شده جدید به روز کند .بنابراین ،هر نوشتن نواری شامل دو خواندن و دو نوشتن است.
در مورد یک نوشتار ورودی/خروجی با اندازه بزرگتر که شامل نوارهایی در تمام درایوهای دیسک است ،برابری به راحتی با
محاسبه تنها با استفاده از بیت های داده جدید محاسبه می شود .بنابراین ،درایو برابری را می توان به صورت موازی با درایوهای
داده به روز کرد و هیچ خواندن یا نوشتن اضافی وجود ندارد.
در هر صورت ،هر عملیات نوشتن باید شامل دیسک برابری باشد ،که در نتیجه می تواند به یک گلوگاه تبدیل شود.
614
سیستم عامل های داخلی و اصول طراحی615.........................................................................................................................
RAIDسطح 5
RAID 5به روشی مشابه RAID 4سازماندهی شده است .تفاوت این است که RAID 5نوارهای برابری را در تمام دیسک
ها توزیع می کند .همانطور که در شکل f11.8نشان داده شده است ،یک تخصیص معمولی یک طرح گرد است .برای یک آرایه
دیسک ،nنوار برابری برای nنوار اول روی یک دیسک متفاوت قرار دارد و سپس الگو تکرار می شود.
توزیع نوارهای برابری در همه درایوها از باتالق ورودی/خروجی بالقوه دیسک برابری منفرد موجود در RAID 4جلوگیری
میکند.
RAIDسطح 6
RAID 6در مقاله بعدی توسط محققان برکلی KATZ89معرفی شد .در طرح ،RAID 6دو محاسبه برابری مختلف انجام
شده و در بلوک های جداگانه روی دیسک های مختلف ذخیره می شود .بنابراین ،یک آرایه RAID 6که اطالعات کاربر آن به
Nدیسک نیاز دارد ،از N 2دیسک تشکیل شده است
شکل g11.8این طرح را نشان می دهد P .و Qدو الگوریتم بررسی داده های مختلف هستند .یکی از این دو ،محاسبه انحصاری
ORاست که در RAID 4و 5استفاده می شود .اما دیگری یک الگوریتم مستقل بررسی داده ها است .این امکان تولید مجدد
داده ها را حتی در صورت خرابی دو دیسک حاوی داده های کاربر فراهم می کند.
مزیت RAID 6این است که در دسترس بودن اطالعات بسیار باالیی را فراهم می کند .سه دیسک باید در فاصله زمانی
MTTRمیانگین زمان تعمیر از کار بیفتند تا باعث از بین رفتن داده ها شوند .از سوی دیگر RAID 6 ،با جریمه نوشتن قابل
توجهی مواجه می شود ،زیرا هر نوشتن بر دو بلوک برابری تأثیر می گذارد .معیارهای عملکرد EISC07نشان میدهند که یک
کنترلکننده RAID 6در مقایسه با پیادهسازی RAID 5میتواند بیش از 30درصد در عملکرد کلی نوشتن افت کند.
عملکرد خواندن RAID 5و RAID 6قابل مقایسه است.
در بخش 1.6و ضمیمه ،A1اصول حافظه کش را خالصه کردیم .اصطالح حافظه نهان معموالً برای به کار بردن حافظهای که
کوچکتر و سریعتر از حافظه اصلی است و بین حافظه اصلی و پردازنده قرار دارد ،به کار میرود .چنین حافظه کشی با استفاده
از اصل محلی بودن ،میانگین زمان دسترسی به حافظه را کاهش می دهد.
615
سیستم عامل های داخلی و اصول طراحی616.........................................................................................................................
همین اصل را می توان برای حافظه دیسک اعمال کرد .به طور خاص ،کش دیسک یک بافر در حافظه اصلی برای بخش های
دیسک است .کش حاوی یک کپی از برخی از بخش های روی دیسک است .هنگامی که یک درخواست I/Oبرای یک بخش
خاص انجام می شود ،بررسی می شود تا مشخص شود آیا این سکتور در حافظه پنهان دیسک است یا خیر .اگر چنین است،
درخواست از طریق حافظه پنهان برآورده می شود .در غیر این صورت ،بخش درخواستی در حافظه پنهان دیسک از دیسک
خوانده می شود .به دلیل پدیده محلی بودن مرجع ،زمانی که یک بلوک از داده ها برای برآورده کردن یک درخواست
ورودی/خروجی به حافظه پنهان واکشی می شود ،این احتمال وجود دارد که ارجاعاتی در آینده به همان بلوک وجود داشته
باشد.
مالحظات طراحی
چندین موضوع طراحی مورد توجه است .ابتدا ،زمانی که یک درخواست I/Oاز حافظه پنهان دیسک برآورده شد ،داده های
موجود در کش دیسک باید به فرآیند درخواست تحویل داده شود .این کار را می توان با انتقال بلوک داده در حافظه اصلی از
حافظه پنهان دیسک به حافظه اختصاص داده شده به فرآیند کاربر یا به سادگی با استفاده از قابلیت حافظه مشترک و ارسال
یک اشاره گر به شکاف مناسب در حافظه پنهان دیسک انجام داد .روش دوم در زمان انتقال حافظه به حافظه صرفه جویی می
کند و همچنین امکان دسترسی مشترک سایر فرآیندها را با استفاده از مدل خواننده/نویسنده شرح داده شده در فصل 5فراهم
می کند.
موضوع دوم طراحی مربوط به استراتژی جایگزینی است .هنگامی که یک بخش جدید به کش دیسک وارد می شود ،یکی از
بلوک های موجود باید جایگزین شود .این همان مشکل ارائه شده در فصل 8است .در آنجا نیاز به الگوریتم جایگزینی صفحه
بود .تعدادی از الگوریتم ها امتحان شده است .متداولترین الگوریتمی که اخیراً مورد استفاده قرار گرفته است LRU:بلوکی را
جایگزین کنید که طوالنیترین زمان در حافظه پنهان بوده است و هیچ اشارهای به آن وجود ندارد .به طور منطقی ،حافظه پنهان
از پشته ای از بلوک ها تشکیل شده است که آخرین بلوک مورد اشاره در باالی پشته قرار دارد .هنگامی که یک بلوک در کش
ارجاع داده می شود ،از موقعیت موجود خود در پشته به باالی پشته منتقل می شود .هنگامی که یک بلوک از حافظه ثانویه وارد
می شود ،بلوکی را که در پایین پشته قرار دارد بردارید و بلوک ورودی را به باالی پشته فشار دهید .به طور طبیعی ،نیازی به
جابجایی این بلوک ها در حافظه اصلی نیست .یک پشته از اشاره گرها را می توان با حافظه پنهان مرتبط کرد.
امکان دیگری که کمتر مورد استفاده قرار می گیرد LFU:آن بلوک را در مجموعه ای که کمترین مراجع را تجربه کرده است،
جایگزین کنید LFU .را می توان با مرتبط کردن یک شمارنده با هر بلوک پیاده سازی کرد .هنگامی که یک بلوک وارد می
شود ،تعداد 1به آن اختصاص داده می شود .با هر ارجاع به بلوک ،تعداد آن 1افزایش می یابد .هنگامی که نیاز به جایگزینی
باشد ،بلوکی با کوچکترین تعداد انتخاب می شود .به طور شهودی ،ممکن است به نظر برسد که LFUمناسب تر از LRUاست
616
سیستم عامل های داخلی و اصول طراحی617.........................................................................................................................
زیرا LFUاز اطالعات مرتبط تری در مورد هر بلوک در فرآیند انتخاب استفاده می کند .یک الگوریتم ساده LFUمشکل زیر را
دارد .ممکن است به طور کلی به بلوکهای خاصی به ندرت ارجاع داده شود ،اما زمانی که به آنها ارجاع داده میشوند ،فواصل
کوتاهی از ارجاعات مکرر به دلیل محلی بودن وجود دارد ،بنابراین تعداد مراجع باالیی ایجاد میشود .پس از پایان چنین فاصله
ای ،تعداد مراجع ممکن است گمراه کننده باشد و احتمال اینکه بالک به زودی دوباره ارجاع داده شود را منعکس نمی کند.
بنابراین ،تأثیر محل در واقع ممکن است باعث شود که الگوریتم LFUانتخاب های جایگزینی ضعیفی داشته باشد .برای غلبه بر
این مشکل با ،LFUتکنیکی به نام جایگزینی مبتنی بر فرکانس در ROBI90پیشنهاد شده است .برای وضوح ،اجازه دهید
ابتدا یک نسخه ساده شده را در نظر بگیریم ،که در شکل a11.9نشان داده شده است .بلوک ها به طور منطقی در یک پشته
سازماندهی می شوند ،مانند الگوریتم LRU.بخش خاصی از قسمت باالی پشته به عنوان بخش جدید تعیین می شود .هنگامی
که یک ضربه کش وجود دارد ،بلوک ارجاع شده به باالی پشته منتقل می شود .اگر بلوک قبالً در بخش جدید بود ،تعداد مراجع
آن افزایش نمییابد .در غیر این صورت 1افزایش می یابد .با توجه به یک بخش جدید به اندازه کافی بزرگ ،این منجر به تعداد
مراجع برای بلوک هایی می شود که به طور مکرر در یک فاصله زمانی کوتاه بدون تغییر باقی می مانند .در یک اشتباه ،بلوک با
کوچکترین تعداد مرجع که در بخش جدید نیست برای جایگزینی انتخاب می شود .در صورت تساوی ،چنین بلوکی که اخیراً
کمتر استفاده شده است ،انتخاب می شود.
نویسندگان گزارش می دهند که این استراتژی نسبت به LRUفقط اندکی بهبود یافته است .مشکل از این قرار است:
.1در هنگام از دست دادن حافظه پنهان ،یک بلوک جدید با تعداد 1وارد بخش جدید می شود.
.2تا زمانی که بلوک در بخش جدید باقی بماند ،تعداد آن 1باقی می ماند.
.3در نهایت بلوک از بخش جدید پیر می شود و تعداد آن هنوز 1است.
617
سیستم عامل های داخلی و اصول طراحی618.........................................................................................................................
.4اگر بلوک اکنون نسبتاً سریع مجدداً ارجاع داده نشود ،به احتمال زیاد جایگزین می شود زیرا لزوماً دارای کمترین تعداد مرجع
در بین بلوک هایی است که در بخش جدید نیستند .به عبارت دیگر ،به نظر نمیرسد فاصله زمانی کافی طوالنی برای بلوکهایی
که از بخش جدید پیر میشوند تا تعداد مراجع خود را ایجاد کنند ،حتی اگر به طور نسبتاً مکرر به آنها ارجاع داده شده باشد.
یک اصالح بیشتر به این مشکل می پردازد :پشته را به سه بخش تقسیم کنید :جدید ،میانی و قدیمی شکل b. 11.9مانند قبل،
تعداد مراجع در بلوک های بخش جدید افزایش نمی یابد .با این حال ،فقط بلوکهای موجود در بخش قدیمی برای جایگزینی
واجد شرایط هستند .با فرض یک بخش میانی به اندازه کافی بزرگ ،این به بلوک های نسبتاً مکرر این فرصت را می دهد تا قبل
از واجد شرایط شدن برای جایگزینی ،تعداد مرجع خود را ایجاد کنند .مطالعات شبیه سازی توسط نویسندگان نشان می دهد که
این خط مشی تصفیه شده به طور قابل توجهی بهتر از LRUیا LFUساده است.
صرف نظر از استراتژی جایگزینی خاص ،جایگزینی می تواند در صورت تقاضا یا از قبل برنامه ریزی شده انجام شود .در حالت
اول ،یک بخش تنها زمانی جایگزین می شود که شکاف مورد نیاز باشد .در مورد دوم ،تعدادی اسالت در یک زمان آزاد می شود.
دلیل این رویکرد اخیر به نیاز به نوشتن سکتورها مربوط می شود .اگر سکتوری وارد حافظه پنهان شود و فقط خوانده شود ،پس
از جایگزینی آن ،نیازی به بازنویسی آن در دیسک نیست .با این حال ،اگر بخش به روز شده است ،الزم است قبل از جایگزینی
آن را دوباره بنویسید .در این مورد آخر ،منطقی است که نوشتهها را خوشهبندی کنیم و به نوشتن نظم دهیم تا زمان جستجو را
به حداقل برسانیم.
مالحظات عملکرد
همان مالحظات عملکردی که در ضمیمه A1مورد بحث قرار گرفت در اینجا نیز اعمال می شود .موضوع عملکرد حافظه پنهان
خود را به این سؤال کاهش می دهد که آیا می توان به یک نسبت از دست دادن معین دست یافت .این به رفتار محلی مراجع
دیسک ،الگوریتم جایگزینی و سایر عوامل طراحی بستگی دارد .با این حال ،در اصل ،نسبت خطا تابعی از اندازه حافظه پنهان
دیسک است .شکل 11.10نتایج حاصل از چندین مطالعه با استفاده از LRUرا خالصه می کند ،یکی برای یک سیستم
یونیکس در حال اجرا بر روی VAX OUST85و دیگری برای سیستم عامل های اصلی IBM SMIT85.شکل 11.11
نتایج مطالعات شبیه سازی الگوریتم جایگزینی مبتنی بر فرکانس را نشان می دهد .مقایسه این دو رقم به یکی از خطرات این
نوع ارزیابی عملکرد اشاره می کند.
به نظر می رسد شکل ها نشان می دهد که LRUاز الگوریتم جایگزینی مبتنی بر فرکانس بهتر عمل می کند .با این حال،
هنگامی که الگوهای مرجع یکسان با استفاده از ساختار حافظه پنهان مشابه مقایسه می شوند ،الگوریتم جایگزینی مبتنی بر
فرکانس برتر است .بنابراین ،توالی دقیق الگوهای مرجع ،به عالوه مسائل مربوط به طراحی مانند اندازه بلوک ،تأثیر عمیقی بر
عملکرد به دست آمده خواهد داشت.
618
سیستم عامل های داخلی و اصول طراحی619.........................................................................................................................
در یونیکس ،هر دستگاه ورودی/خروجی جداگانه با یک فایل خاص مرتبط است .اینها توسط سیستم فایل مدیریت می شوند و به
همان روشی که فایل های داده کاربر خوانده و نوشته می شوند .این یک رابط تمیز و یکنواخت برای کاربران و فرآیندها فراهم
می کند .برای خواندن یا نوشتن در یک دستگاه ،درخواست های خواندن و نوشتن برای فایل ویژه مرتبط با دستگاه انجام می
شود.
شکل 11.12ساختار منطقی تسهیالت I/Oرا نشان می دهد .زیرسیستم فایل فایل ها را روی دستگاه های ذخیره سازی ثانویه
مدیریت می کند .عالوه بر این ،به عنوان رابط فرآیند برای دستگاه ها عمل می کند ،زیرا آنها به عنوان فایل در نظر گرفته می
شوند.
619
سیستم عامل های داخلی و اصول طراحی620.........................................................................................................................
دو نوع I/Oدر یونیکس وجود دارد :بافر و بدون بافر .ورودی/خروجی بافر از میان بافرهای سیستم عبور می کند ،در حالی که
ورودی/خروجی بافر نشده معموالً تسهیالت DMAرا در بر می گیرد و انتقال مستقیماً بین ماژول I/Oو ناحیه I/Oفرآیند
انجام می شود .برای ورودی/خروجی بافر ،از دو نوع بافر استفاده می شود :کش های بافر سیستم و صف های کاراکتر.
بافر کش
کش بافر در یونیکس اساساً یک کش دیسک است .عملیات ورودی/خروجی با دیسک از طریق کش بافر انجام می شود .انتقال
داده بین کش بافر و فضای پردازش کاربر همیشه با استفاده از DMAانجام می شود .از آنجایی که هم حافظه پنهان بافر و هم
ناحیه ورودی/خروجی فرآیند در حافظه اصلی قرار دارند ،در این مورد از تسهیالت DMAبرای انجام یک کپی از حافظه به
حافظه استفاده می شود .این هیچ چرخه پردازنده را مصرف نمی کند ،اما چرخه های اتوبوس را مصرف می کند.
-لیست رایگان :فهرستی از تمام اسالت ها در حافظه نهان یک اسالت در یونیکس بافر نامیده می شود ،هر شکاف دارای یک
بخش دیسک است که برای تخصیص در دسترس هستند.
Device list: -فهرست تمام بافرهایی که در حال حاضر با هر دیسک مرتبط هستند
Driver I/O queue: -فهرست بافرهایی که در یک دستگاه خاص در حال انجام یا در انتظار I/Oهستند.
همه بافرها باید در لیست رایگان یا در لیست صف ورودی/خروجی راننده قرار داشته باشند .یک بافر ،زمانی که با یک دستگاه
مرتبط شود ،حتی اگر در لیست رایگان باشد ،با دستگاه همراه میماند ،تا زمانی که واقعاً دوباره استفاده شود و با دستگاه دیگری
مرتبط شود .این فهرستها بهعنوان نشانگرهای مرتبط با هر بافر بهجای فهرستهای مجزای فیزیکی نگهداری میشوند.
620
سیستم عامل های داخلی و اصول طراحی621.........................................................................................................................
هنگامی که به یک شماره بلوک فیزیکی در یک دستگاه خاص اشاره می شود ،سیستم عامل ابتدا بررسی می کند که آیا بلوک
در حافظه نهان بافر قرار دارد یا خیر .برای به حداقل رساندن زمان جستجو ،لیست دستگاه به عنوان یک جدول هش سازماندهی
می شود ،با استفاده از تکنیکی شبیه به روش سرریز با زنجیره ای که در پیوست Fشکل F.1bبحث شده است .شکل 11.13
سازماندهی کلی حافظه پنهان بافر را نشان می دهد.
یک جدول هش با طول ثابت وجود دارد که حاوی نشانگرهایی در حافظه پنهان بافر است .هر ارجاع به یک دستگاه ،#بلوک #به
یک ورودی خاص در جدول هش نگاشت می شود .اشاره گر در آن ورودی به اولین بافر در زنجیره اشاره می کند .یک اشاره گر
هش مرتبط با هر بافر به بافر بعدی در زنجیره برای ورودی جدول هش اشاره می کند .بنابراین ،برای همه ارجاعات دستگاه،#
بلوک #که در یک ورودی جدول هش نگاشت می شوند ،اگر بلوک مربوطه در حافظه پنهان بافر باشد ،آن بافر در زنجیره آن
ورودی جدول هش خواهد بود .بنابراین ،طول جستجوی حافظه پنهان بافر با یک عامل به ترتیب Nکاهش می یابد ،جایی که
Nطول جدول هش است.
برای جایگزینی بلوک ،از الگوریتمی استفاده میشود که اخیراً کمتر استفاده شده است :پس از تخصیص یک بافر به یک بلوک
دیسک ،تا زمانی که تمام بافرهای دیگر اخیراً استفاده نشده باشند ،نمیتوان از آن برای بلوک دیگری استفاده کرد .لیست رایگان
این سفارش کم استفاده اخیر را حفظ می کند.
621
سیستم عامل های داخلی و اصول طراحی622.........................................................................................................................
صف کاراکتر
دستگاههای بلوکگرا ،مانند دیسک و کلیدهای ،USBمیتوانند به طور مؤثری توسط حافظه پنهان سرویس دهی شوند .شکل
متفاوتی از بافر برای دستگاه های شخصیت گرا مانند پایانه ها و چاپگرها مناسب است .صف کاراکتر یا توسط دستگاه
ورودی/خروجی نوشته میشود و توسط فرآیند خوانده میشود یا توسط فرآیند نوشته میشود و توسط دستگاه خوانده میشود.
در هر دو مورد از مدل تولیدکننده/مصرف کننده معرفی شده در فصل 5استفاده می شود .بنابراین ،صف های کاراکتر ممکن
است فقط یک بار خوانده شود .همانطور که هر شخصیت خوانده می شود ،به طور موثری از بین می رود .این برخالف حافظه
پنهان بافر است که ممکن است چندین بار خوانده شود و از این رو از مدل خواننده/نویسنده پیروی می کند همچنین در فصل 5
مورد بحث قرار گرفت.
I/Oبدون بافر ،که به سادگی DMAبین دستگاه و فضای پردازش است ،همیشه سریعترین روش برای انجام I/Oیک فرآیند
است .فرآیندی که I/Oبدون بافر را انجام می دهد در حافظه اصلی قفل شده است و نمی توان آن را جایگزین کرد .این امر
فرصت های مبادله را با بستن بخشی از حافظه اصلی کاهش می دهد و در نتیجه عملکرد کلی سیستم را کاهش می دهد.
همچنین ،دستگاه ورودی/خروجی در طول مدت انتقال با فرآیند مرتبط است و آن را برای سایر فرآیندها در دسترس نیست.
در میان دستههای دستگاههایی که توسط یونیکس به رسمیت شناخته شدهاند ،میتوان به موارد زیر اشاره کرد:
-خطوط ارتباطی
-چاپگرها
جدول 11.5انواع ورودی/خروجی مناسب برای هر نوع دستگاه را نشان می دهد .درایوهای دیسک به شدت در یونیکس مورد
استفاده قرار می گیرند ،بلوک گرا هستند و پتانسیل باالیی برای توان عملیاتی قابل قبولی دارند .بنابراین ،ورودی/خروجی برای
این دستگاهها بدون بافر یا از طریق کش بافر است .درایوهای نوار از نظر عملکردی شبیه درایوهای دیسک هستند و از طرحهای
I/Oمشابه استفاده میکنند .از آنجا که پایانه ها شامل تبادل نسبتاً کند کاراکترها هستند ،ورودی/خروجی ترمینال معموالً از
صف کاراکتر استفاده می کند .به طور مشابه ،خطوط ارتباطی نیاز به پردازش سریالی بایت های داده برای ورودی یا خروجی
دارند و به بهترین وجه توسط صف های کاراکتر مدیریت می شوند .در نهایت ،نوع ورودی/خروجی مورد استفاده برای چاپگر به
622
سیستم عامل های داخلی و اصول طراحی623.........................................................................................................................
طور کلی به سرعت آن بستگی دارد .چاپگرهای آهسته معموالً از صف کاراکتر استفاده می کنند ،در حالی که چاپگر سریع
ممکن است از ورودی/خروجی بافر نشده استفاده کند .برای چاپگر سریع می توان از کش بافر استفاده کرد .با این حال ،به دلیل
داده ها رفتن به چاپگر هرگز مورد استفاده مجدد قرار نمی گیرد ،سربار حافظه پنهان بافر غیر ضروری است.
به طور کلی ،تسهیالت هسته I/Oلینوکس بسیار شبیه به سایر پیاده سازی های یونیکس مانند SVR4است .هسته لینوکس
یک فایل خاص را با هر درایور دستگاه I/Oمرتبط می کند .دستگاههای بلوک ،کاراکتر و شبکه شناسایی میشوند .در این
بخش ،ما به چندین ویژگی تسهیالت I/Oلینوکس نگاه می کنیم.
زمانبندی دیسک پیشفرض در لینوکس 2.4به عنوان آسانسور لینوکس شناخته میشود ،که تغییری در الگوریتم LOOK
است که در بخش 11.5مورد بحث قرار گرفت .برای لینوکس ،2.6الگوریتم Elevatorتوسط دو الگوریتم اضافی تقویت شده
است :زمانبندی ورودی/خروجی مهلت و زمانبندی ورودی/خروجی پیشبینیکننده LOVE04.هر یک از اینها را به ترتیب
بررسی می کنیم .برنامهریز آسانسور زمانبندی آسانسور یک صف واحد برای درخواستهای خواندن و نوشتن دیسک نگه
میدارد و عملکردهای مرتبسازی و ادغام را در صف انجام میدهد .به طور کلی ،برنامهریز آسانسور فهرستی از درخواستها را
مرتبشده بر اساس شماره بلوک نگه میدارد .بنابراین ،با رسیدگی به درخواستهای دیسک ،درایو در یک جهت حرکت میکند
و هر درخواستی را که با آن مواجه میشود برآورده میکند .این استراتژی کلی به روش زیر اصالح می شود .هنگامی که یک
درخواست جدید به صف اضافه می شود ،چهار عملیات به ترتیب در نظر گرفته می شود:
623
سیستم عامل های داخلی و اصول طراحی624.........................................................................................................................
.1اگر درخواست به همان بخش روی دیسک یا یک بخش بالفاصله مجاور یک درخواست در حال انتظار در صف باشد،
درخواست موجود و درخواست جدید در یک درخواست ادغام می شوند.
.2اگر درخواستی در صف به اندازه کافی قدیمی باشد ،درخواست جدید در انتهای صف درج می شود.
.3در صورت وجود مکان مناسب ،درخواست جدید به ترتیب مرتب شده درج می شود.
.4در صورت عدم وجود مکان مناسب ،درخواست جدید در انتهای صف قرار می گیرد.
DEADLINE SCHEDULERعملیات 2در لیست قبل برای جلوگیری از گرسنگی یک درخواست در نظر گرفته شده
است ،اما خیلی موثر نیست LOVE04.سعی نمیکند در یک بازه زمانی معین به درخواستها سرویس دهد ،بلکه صرفاً
درخواستهای مرتبسازی درج را پس از تأخیر مناسب متوقف میکند .دو مشکل با طرح آسانسور خود را نشان می دهد .اولین
مشکل این است که یک درخواست بلوک دور می تواند برای مدت قابل توجهی به تعویق بیفتد زیرا صف به صورت پویا به روز
می شود .به عنوان مثال ،جریان درخواستهای زیر را برای بلوکهای دیسک در نظر بگیرید .25 ،700 ،30 ،20 :زمانبندی
آسانسور این موارد را مجدداً ترتیب میدهد تا درخواستها در صف بهعنوان 700 ،30 ،25 ،20قرار گیرند که 20سر آن است.
صف .اگر دنباله ای پیوسته از درخواست های بلوک با شماره کم وارد شود ،درخواست 700همچنان به تأخیر می افتد.
مشکل جدیتر مربوط به تمایز بین درخواستهای خواندن و نوشتن است .به طور معمول ،درخواست نوشتن به صورت ناهمزمان
صادر می شود .به این معنا که هنگامی که یک فرآیند درخواست نوشتن را صادر می کند ،نیازی نیست منتظر باشد تا درخواست
واقعاً برآورده شود .هنگامی که یک برنامه یک نوشتن صادر می کند ،هسته داده ها را در یک بافر مناسب کپی می کند تا در
صورت نیاز زمان نوشته شود .هنگامی که داده ها در بافر هسته گرفته می شوند ،برنامه می تواند ادامه دهد .با این حال ،برای
بسیاری از عملیات خواندن ،فرآیند باید منتظر بماند تا داده های درخواستی قبل از ادامه به برنامه تحویل شود .بنابراین ،جریانی
از درخواستهای نوشتن مثالً قرار دادن یک فایل بزرگ روی دیسک میتواند درخواست خواندن را برای مدت قابلتوجهی
مسدود کند و در نتیجه یک فرآیند را مسدود کند.
624
سیستم عامل های داخلی و اصول طراحی625.........................................................................................................................
برای غلبه بر این مشکالت ،زمانبندی مهلت ورودی/خروجی از سه صف استفاده می کند شکل .11.14هر درخواست ورودی
مانند قبل در صف آسانسور مرتب شده قرار می گیرد .عالوه بر این ،همان درخواست در انتهای صف خواندن FIFOبرای
درخواست خواندن یا صف نوشتن FIFOبرای درخواست نوشتن قرار می گیرد .بنابراین ،صفهای خواندن و نوشتن فهرستی از
درخواستها را به ترتیبی که درخواستها انجام شدهاند ،حفظ میکنند .به هر درخواست یک زمان انقضا مربوط می شود که
مقدار پیش فرض آن 0.5ثانیه برای درخواست خواندن و 5ثانیه برای درخواست نوشتن است .معموالً زمانبند از صف مرتب
شده ارسال میکند .هنگامی که یک درخواست برآورده شد ،از سر صف مرتب شده و همچنین از صف مناسب FIFOحذف می
شود .با این حال ،زمانی که آیتم در سر یکی از صفهای FIFOقدیمیتر از زمان انقضای آن میشود ،زمانبند بعدی از آن صف
FIFOارسال میکند و درخواست منقضی شده را به اضافه چند درخواست بعدی از صف میگیرد .همانطور که هر درخواست
ارسال می شود ،از صف مرتب شده نیز حذف می شود .طرح زمانبندی ورودی/خروجی مهلت بر مشکل گرسنگی و همچنین
مشکل خواندن در مقابل نوشتن غلبه می کند.
برنامهریزی ورودی/خروجی پیشبینیکننده زمانبندی اصلی آسانسور و زمانبندی مهلت هر دو به گونهای طراحی شدهاند که به
محض برآورده شدن درخواست موجود ،یک درخواست جدید ارسال کنند ،بنابراین دیسک را تا حد امکان مشغول نگه میدارند.
این سیاست مشابه برای همه الگوریتمهای زمانبندی مورد بحث در بخش 11.5اعمال میشود .با این حال ،اگر درخواستهای
خواندن همزمان متعددی وجود داشته باشد ،چنین سیاستی میتواند معکوس باشد.
به طور معمول ،یک برنامه منتظر می ماند تا درخواست خواندن برآورده شود و داده ها قبل از صدور درخواست بعدی در
دسترس باشد .تأخیر کوچک بین دریافت دادهها برای آخرین خواندن و صدور خواندن بعدی ،زمانبندی را قادر میسازد تا برای
درخواست معلق به جای دیگری مراجعه کند و آن درخواست را ارسال کند.
625
سیستم عامل های داخلی و اصول طراحی626.........................................................................................................................
به دلیل اصل محلی بودن ،این احتمال وجود دارد که خواندن های متوالی از یک فرآیند به بلوک های دیسک نزدیک به یکدیگر
انجام شود .اگر برنامهریز پس از برآورده کردن درخواست خواندن ،مدت کوتاهی را به تأخیر بیندازد تا ببیند آیا درخواست
خواندن نزدیکی جدید ایجاد شده است ،عملکرد کلی سیستم میتواند افزایش یابد .این فلسفه پشت زمانبندی پیشبینی است
که در IYER01پیشنهاد شده و در لینوکس 2.6پیادهسازی شده است.
در لینوکس ،زمانبندی پیشبینیکننده روی زمانبندی مهلت قرار میگیرد .هنگامی که یک درخواست خواندن ارسال می شود،
زمانبندی پیش بینی باعث می شود تا سیستم زمان بندی بسته به پیکربندی تا 6میلی ثانیه تاخیر داشته باشد .در طول این
تاخیر کوچک ،احتمال زیادی وجود دارد که برنامه ای که آخرین درخواست خواندن را صادر کرده است ،درخواست خواندن
دیگری را به همان منطقه از دیسک ارسال کند .در این صورت ،آن درخواست فوراً انجام خواهد شد .اگر چنین درخواست
خواندنی رخ نداد ،زمانبندیکننده با استفاده از الگوریتم زمانبندی مهلت از سرگیری میکند.
LOVE04دو آزمایش از الگوریتمهای زمانبندی لینوکس را گزارش میدهد .اولین آزمایش شامل خواندن یک فایل 200
مگابایتی در حالی که نوشتن جریانی طوالنی در پسزمینه بود .آزمایش دوم شامل خواندن یک فایل بزرگ در پسزمینه در حین
خواندن هر فایل در درخت منبع هسته بود.
در لینوکس 2.2و نسخههای قبلی ،هسته یک صفحه کش برای خواندن و نوشتن از فایلهای سیستم فایل معمولی و برای
صفحات حافظه مجازی ،و یک کش بافر جداگانه برای بلوک I/Oنگهداری میکرد .برای لینوکس 2.4به بعد ،یک صفحه کش
یکپارچه وجود دارد که در تمام ترافیک بین دیسک و حافظه اصلی دخیل است.
کش صفحه دو مزیت دارد .اول ،زمانی که زمان بازنویسی صفحات کثیف بر روی دیسک فرا می رسد ،می توان مجموعه ای از
آنها را به درستی سفارش داد و به طور موثر نوشت .دوم ،به دلیل اصل موقعیت زمانی ،صفحات موجود در کش صفحه احتماالً
قبل از پاک شدن از حافظه پنهان مجدداً ارجاع داده می شوند ،بنابراین یک عملیات ورودی/خروجی دیسک ذخیره می شود.
-هنگامی که حافظه آزاد به زیر یک آستانه مشخص میرسد ،هسته اندازه حافظه پنهان صفحه را کاهش میدهد تا حافظه آزاد
شود تا به مخزن حافظه آزاد اضافه شود.
-وقتی صفحات کثیف بزرگتر از آستانه تعیین شده می شوند ،تعدادی از صفحات کثیف روی دیسک نوشته می شوند.
626
سیستم عامل های داخلی و اصول طراحی627.........................................................................................................................
شکل 11.15اجزای کلیدی حالت هسته مربوط به مدیر I/Oویندوز را نشان می دهد .مدیر ورودی/خروجی مسئولیت تمام
ورودی/خروجی های سیستم عامل را بر عهده دارد و یک رابط یکنواخت فراهم می کند که همه انواع درایورها می توانند با آن
تماس بگیرند.
Cache manager: -مدیر کش کش کردن فایل را برای همه سیستم های فایل مدیریت می کند .این می تواند به صورت
پویا اندازه حافظه پنهان اختصاص داده شده به یک فایل خاص را افزایش و کاهش دهد زیرا مقدار حافظه فیزیکی موجود
متفاوت است .سیستم به روز رسانی ها را فقط در حافظه پنهان و نه روی دیسک ضبط می کند .یک رشته هسته ،نویسنده
تنبل ،بهروزرسانیها را به صورت دورهای دستهبندی میکند تا روی دیسک بنویسد .نوشتن بهروزرسانیها به صورت دستهای
باعث میشود که I/Oکارآمدتر باشد .مدیر کش با نگاشت مناطق فایل ها در حافظه مجازی هسته کار می کند و سپس با تکیه
بر مدیر حافظه مجازی بیشتر کار را برای کپی کردن صفحات به و از فایل های روی دیسک انجام می دهد.
-درایورهای سیستم فایل :مدیر I/Oبا یک درایور سیستم فایل فقط به عنوان یک درایور دستگاه دیگر رفتار می کند و
درخواست های I/Oرا برای حجم های سیستم فایل به درایور نرم افزار مناسب برای آن حجم هدایت می کند .سیستم فایل به
نوبه خود درخواست های ورودی/خروجی را به درایورهای نرم افزاری که آداپتور دستگاه سخت افزاری را مدیریت می کنند
ارسال می کند.
-درایورهای شبکه :ویندوز دارای قابلیت های شبکه یکپارچه و پشتیبانی از سیستم های فایل راه دور است .امکانات بهعنوان
درایورهای نرمافزار به جای بخشی از Windows Executiveپیادهسازی میشوند.
-درایورهای دستگاه سخت افزاری :این درایورهای نرم افزاری با استفاده از نقاط ورودی در الیه انتزاعی سخت افزار به
رجیسترهای سخت افزاری دستگاه های جانبی دسترسی دارند .مجموعه ای از این روال ها برای هر پلتفرمی که ویندوز
پشتیبانی می کند وجود دارد .از آنجایی که نامهای روتین برای همه پلتفرمها یکسان است ،کد منبع درایورهای دستگاه ویندوز
در انواع مختلف پردازنده قابل حمل است.
627
سیستم عامل های داخلی و اصول طراحی628.........................................................................................................................
ویندوز دو حالت عملکرد ورودی/خروجی را ارائه می دهد :ناهمزمان و همزمان .حالت ناهمزمان در صورت امکان برای بهینه
سازی عملکرد برنامه استفاده می شود.
با I/Oناهمزمان ،یک برنامه کاربردی یک عملیات I/Oرا آغاز می کند و سپس می تواند در حالی که درخواست I/Oبرآورده
شده است ،پردازش را ادامه دهد .با I/Oهمزمان ،برنامه تا زمانی که عملیات I/Oتکمیل شود مسدود می شود .ورودی/خروجی
ناهمزمان از دیدگاه رشته فراخوانی کارآمدتر است ،زیرا به رشته اجازه می دهد تا اجرا را ادامه دهد در حالی که عملیات I/O
توسط مدیر I/Oدر صف قرار می گیرد و متعاقباً انجام می شود .با این حال ،برنامهای که عملیات ورودی/خروجی ناهمزمان را
فراخوانی میکند به روشی برای تعیین زمان کامل شدن عملیات نیاز دارد .ویندوز پنج تکنیک مختلف برای سیگنال دهی به
اتمام I/Oارائه می دهد:
-سیگنال دادن به شی فایل :با این رویکرد ،رویداد مرتبط با یک شی فایل زمانی تنظیم می شود که عملیات روی آن شیء
کامل شود .رشته ای که عملیات I/Oرا فراخوانی کرده است می تواند به اجرا ادامه دهد تا زمانی که به نقطه ای برسد که باید
متوقف شود تا عملیات I/Oکامل شود .در آن نقطه thread ،می تواند صبر کند تا عملیات کامل شود و سپس ادامه دهد .این
تکنیک ساده و آسان برای استفاده است ،اما برای رسیدگی به درخواست های متعدد I/Oمناسب نیست.
به عنوان مثال ،اگر یک رشته نیاز به انجام چندین عمل همزمان روی یک فایل داشته باشد ،مانند خواندن از یک بخش و نوشتن
به بخش دیگر از فایل ،با این تکنیک رشته نمی تواند بین تکمیل خواندن و تکمیل فایل تمایز قائل شود .نوشتن به سادگی
متوجه می شود که یکی از عملیات I/Oدرخواستی در این فایل به پایان رسیده است.
-سیگنال دادن به یک شی رویداد :این تکنیک چندین درخواست ورودی/خروجی همزمان را در برابر یک دستگاه یا فایل واحد
امکان پذیر می کند .رشته برای هر درخواست یک رویداد ایجاد می کند .بعداً ،رشته میتواند روی یکی از این درخواستها یا کل
مجموعهای از درخواستها منتظر بماند.
628
سیستم عامل های داخلی و اصول طراحی629.........................................................................................................................
-فراخوانی رویه ناهمزمان :این تکنیک از یک صف مرتبط با یک رشته استفاده می کند که به عنوان صف فراخوانی رویه
ناهمزمان APCشناخته می شود .در این مورد ،رشته درخواستهای ورودی/خروجی را ارائه میکند ،و یک روال حالت کاربر را
مشخص میکند تا پس از اتمام I/Oتماس بگیرد .مدیر I/Oنتایج هر درخواست را در صف APCرشته تماس قرار می دهد.
دفعه بعد که threadدر هسته بلوک می شود APC ،ها تحویل داده می شوند که هر کدام باعث می شوند تا threadبه حالت
کاربر برگردد و روال مشخص شده را اجرا کند.
-پورت های تکمیل ورودی/خروجی :این تکنیک در سرور ویندوز برای بهینه سازی استفاده از Threadها استفاده می شود.
این برنامه مجموعه ای از رشته ها را برای رسیدگی به تکمیل درخواست های I/Oایجاد می کند .هر رشته در درگاه تکمیل
منتظر می ماند و هسته رشته ها را بیدار می کند تا هر تکمیل I/Oرا مدیریت کند .یکی از مزایای این روش این است که برنامه
می تواند محدودیتی را برای چند تا از این رشته ها به طور همزمان مشخص کند.
Polling: -درخواستهای ورودی/خروجی ناهمزمان وضعیتی را مینویسند و پس از اتمام عملیات ،تعداد انتقال را در حافظه
مجازی کاربر فرآیند مینویسند .یک رشته فقط می تواند این مقادیر را بررسی کند تا ببیند آیا عملیات به پایان رسیده است یا
خیر.
RAIDنرم افزاری
ویندوز از دو نوع پیکربندی RAIDپشتیبانی می کند که در MS96به صورت زیر تعریف شده اند:
r Hardware RAID:دیسک های فیزیکی مجزا که توسط کنترل کننده دیسک یا سخت افزار کابینت ذخیره سازی دیسک
در یک یا چند دیسک منطقی ترکیب شده اند.
r Software RAID:فضای دیسک غیرمرتبط به یک یا چند پارتیشن منطقی توسط درایور دیسک نرم افزاری مقاوم به خطا،
FTDISKترکیب شده است.در RAIDسخت افزاری ،رابط کنترل کننده ،ایجاد و تولید مجدد اطالعات اضافی را انجام می
دهد .نرم افزار RAIDموجود در ویندوز سرور ،عملکرد RAIDرا به عنوان بخشی از سیستم عامل پیاده سازی می کند و می
تواند با هر مجموعه ای از چندین دیسک استفاده شود.
تسهیالت RAIDنرمافزار RAID 1و RAID 5را پیادهسازی میکند .در مورد RAID 1آینهکاری دیسک ،دو دیسک
حاوی پارتیشنهای اصلی و آینهای ممکن است روی یک کنترلکننده دیسک یا کنترلکنندههای دیسک متفاوت باشند.
پیکربندی اخیر به عنوان دوبلکس کردن دیسک شناخته می شود.
629
سیستم عامل های داخلی و اصول طراحی630.........................................................................................................................
کپی های سایه روشی کارآمد برای ایجاد عکس های فوری ثابت از حجم ها هستند تا بتوان از آنها نسخه پشتیبان تهیه کرد .آنها
همچنین برای بایگانی فایل ها بر اساس هر جلد مفید هستند .اگر کاربر فایلی را حذف کند ،میتواند یک نسخه قبلی را از هر
کپی سایه موجود که توسط مدیر سیستم تهیه شده است ،بازیابی کند .کپیهای سایه توسط یک درایور نرمافزاری پیادهسازی
میشوند که قبل از بازنویسی ،از دادهها کپی میکند.
رمزگذاری حجم
ویندوز با استفاده از قابلیتی به نام BitLockerاز رمزگذاری کل حجم ها پشتیبانی می کند .این امن تر از رمزگذاری فایل
های فردی است ،زیرا کل سیستم برای اطمینان از ایمن بودن داده ها کار می کند .حداکثر سه روش مختلف برای تأمین کلید
رمزنگاری میتواند ارائه شود که به الیههای امنیتی متعدد اجازه میدهد.
11.11خالصه
رابط سیستم کامپیوتری با دنیای خارج ،معماری I/Oآن است .این معماری به گونه ای طراحی شده است که وسیله ای
سیستماتیک برای کنترل تعامل با دنیای خارج فراهم کند و اطالعات مورد نیاز سیستم عامل برای مدیریت موثر فعالیت I/Oرا
فراهم کند.
تابع I/Oبه طور کلی به چندین الیه تقسیم میشود ،الیههای پایینتر با جزئیاتی که نزدیکتر به عملکردهای فیزیکی باید انجام
شوند و الیههای باالتر با I/Oبه شکلی منطقی و کلی سروکار دارند .نتیجه این است که تغییرات در پارامترهای سخت افزاری
نیازی به تأثیر بر اکثر نرم افزارهای I/Oندارد.
یکی از جنبه های کلیدی I/Oاستفاده از بافرهایی است که توسط ابزارهای I/Oکنترل می شوند تا فرآیندهای برنامه .بافر
تفاوت بین سرعت های داخلی سیستم کامپیوتری و سرعت دستگاه های ورودی/خروجی را هموار می کند .استفاده از بافرها
همچنین انتقال I/Oواقعی را از فضای آدرس فرآیند برنامه جدا می کند .این به سیستم عامل اجازه می دهد تا در اجرای
عملکرد مدیریت حافظه خود انعطاف بیشتری داشته باشد.
جنبه ورودی/خروجی که بیشترین تأثیر را بر عملکرد کلی سیستم دارد ،ورودی/خروجی دیسک است .بر این اساس ،تحقیقات و
تالشهای طراحی بیشتری در این زمینه نسبت به هر نوع ورودی/خروجی دیگری صورت گرفته است .دو مورد از پرکاربردترین
رویکردها برای بهبود عملکرد ورودی/خروجی دیسک ،زمانبندی دیسک و حافظه پنهان دیسک هستند.
630
سیستم عامل های داخلی و اصول طراحی631.........................................................................................................................
در هر زمان ممکن است یک صف درخواست برای I/Oروی همان دیسک وجود داشته باشد .هدف از زمانبندی دیسک برآوردن
این درخواستها بهگونهای است که این درخواستها را به حداقل برساند
زمان جستجوی مکانیکی دیسک و در نتیجه بهبود عملکرد .طرح فیزیکی درخواست های در حال انتظار به عالوه مالحظات
محلی وارد عمل می شوند.
کش دیسک یک بافر است که معموالً در حافظه اصلی نگهداری می شود و به عنوان کش بلوک های دیسک بین حافظه دیسک
و بقیه حافظه اصلی عمل می کند .به دلیل اصل محلی بودن ،استفاده از کش دیسک باید به طور قابل مالحظه ای تعداد بلوک
های انتقال ورودی/خروجی بین حافظه اصلی و دیسک را کاهش دهد.
بحثهای کلی در مورد ورودی/خروجی کامپیوتر را میتوان در بیشتر کتابهای مربوط به معماری کامپیوتر ،مانند STAL10
یافتMEE96a .بررسی خوبی از فناوری ضبط زیربنایی سیستمهای دیسک و نوار ارائه میکندMEE96b .روی تکنیک های
ذخیره سازی داده برای سیستم های دیسک و نوار تمرکز داردWIED87 .شامل یک بحث عالی در مورد مسائل مربوط به
عملکرد دیسک ،از جمله موارد مربوط به زمان بندی دیسک استNG98 .به مشکالت عملکرد سخت افزار دیسک نگاه می
کندCAO96 .ذخیره دیسک و زمان بندی دیسک را تجزیه و تحلیل می کند .بررسی های خوب از الگوریتم های زمان بندی
دیسک ،با تجزیه و تحلیل عملکردWORT94 ،و SELT90هستندPAI00 .یک توصیف آموزنده از یک طرح سیستم عامل
یکپارچه برای بافر I/Oو حافظه پنهان است.
DELL00بحث مفصلی در مورد درایورهای دستگاه Windows NTبه عالوه نمای کلی خوبی از کل معماری Windows
I/Oارائه می دهد.
یک بررسی عالی از فناوری ،RAIDکه توسط مخترعان مفهوم RAIDنوشته شده استCHEN94 ،استCHEN96 .
عملکرد RAIDرا تجزیه و تحلیل می کند .کاغذ خوب دیگر FRIE96استDALT96 .تسهیالت RAIDنرم افزار
Windows NTرا به تفصیل شرح می دهدLEVE10 .نیاز به حرکت فراتر از RAID 6به پیکربندی برابری سه گانه را
بررسی می کندSTAI10 .یک بررسی خوب از سطوح استاندارد RAIDبه همراه تعدادی از بهبودهای رایج RAIDاست.
631
سیستم عامل های داخلی و اصول طراحی632.........................................................................................................................
تصاویر متحرک
مجموعه ای از انیمیشن که مفاهیم این فصل را نشان می دهد در وب سایت Premiumموجود است .خواننده تشویق می شود
که انیمیشن ها را برای تقویت مفاهیم این فصل مشاهده کند.
کلمات کلیدی
632
سیستم عامل های داخلی و اصول طراحی633.........................................................................................................................
بررسی سواالت
.11.1سه تکنیک برای انجام I/Oرا فهرست کرده و به طور خالصه تعریف کنید.
.11.3تفاوت بین دستگاه های بلوک گرا و دستگاه های جریان گرا چیست؟ از هر کدام چند مثال بزنید.
.11.4چرا انتظار دارید عملکرد بهتری با استفاده از یک بافر دوگانه به جای یک بافر واحد برای I/Oداشته باشید؟
.11.6به طور خالصه سیاست های زمان بندی دیسک نشان داده شده در شکل 11.7را تعریف کنید.
چالش ها و مسائل
.11.1برنامه ای را در نظر بگیرید که به یک دستگاه ورودی/خروجی واحد دسترسی دارد و I/Oبافر نشده را با استفاده از بافر
مقایسه کنید .نشان دهید که استفاده از بافر می تواند زمان اجرا را حداکثر تا دو برابر کاهش دهد.
.11.3آ .همان نوع تجزیه و تحلیل جدول 11.2را برای دنباله درخواست های تراک دیسک زیر انجام دهید،110 ،129 ،27 :
.120 ،64 ،10 ،41 ،147 ،186فرض کنید سر دیسک در ابتدا روی مسیر 100قرار گرفته است و در جهت کاهش تعداد آهنگ
حرکت می کند.
ب همان تحلیل را انجام دهید ،اما اکنون فرض کنید که هد دیسک در جهت افزایش تعداد آهنگ حرکت می کند.
633
سیستم عامل های داخلی و اصول طراحی634.........................................................................................................................
.11.4دیسکی را با Nتراک های شماره گذاری شده از 0تا N - 121در نظر بگیرید و فرض کنید که بخش های درخواستی
به صورت تصادفی و یکنواخت روی دیسک توزیع شده اند .میخواهیم میانگین تعداد مسیرهای پیموده شده توسط یک جستجو
را محاسبه کنیم.
آ .احتمال جستجوی طول jرا زمانی که سر در حال حاضر روی مسیر tقرار دارد محاسبه کنید .نکته :این موضوع مربوط به
تعیین تعداد کل ترکیبها است ،با توجه به این که همه موقعیتهای مسیر برای مقصد جستجو به یک اندازه محتمل هستند.
ب احتمال جستجوی طول Kرا برای موقعیت جریان دلخواه سر محاسبه کنید .نکته :این شامل جمع کردن تمام ترکیبات
ممکن حرکات Kآهنگ است.
ج با استفاده از فرمول مقدار مورد انتظار ،میانگین تعداد مسیرهای پیموده شده توسط جستجو را محاسبه کنید
د نشان دهید که برای مقادیر بزرگ ،Nمیانگین تعداد مسیرهای پیموده شده توسط جستجو به N>3نزدیک می شود.
.11.5معادله زیر هم برای حافظه کش و هم برای حافظه کش دیسک پیشنهاد شده است:
این معادله را به جای 2به یک سلسله مراتب حافظه با سطح Nتعمیم دهید.
.11.6برای الگوریتم جایگزینی مبتنی بر فرکانس شکل Fmiddle ،Fnew ،11.9و Foldرا به عنوان کسری از کش که
بخش های جدید ،میانی و قدیمی را تشکیل می دهد ،تعریف کنید .واضح استFnew + Fmiddle + Fold = 1. ،مشخص
کردن خط مشی زمانی که
.11.7اگر دیسک سکتور ثابت با 512بایت در سکتور ،با 96سکتور/تراک 110 ،تراک در هر سطح و 8باشد ،چقدر فضای
دیسک در بخش ها ،تراک ها و سطوح برای ذخیره 300000رکورد منطقی 120بایتی مورد نیاز است .سطوح قابل استفاده هر
رکوردهای هدر فایل و فهرست های ردیابی را نادیده بگیرید و فرض کنید که رکوردها نمی توانند دو بخش را پوشش دهند.
634
سیستم عامل های داخلی و اصول طراحی635.........................................................................................................................
.11.8سیستم دیسک توضیح داده شده در مسئله 11.7را در نظر بگیرید و فرض کنید که دیسک با سرعت 360دور در دقیقه
می چرخد .یک پردازنده یک بخش از دیسک را با استفاده از I/Oمبتنی بر وقفه ،با یک وقفه در هر بایت می خواند .اگر پردازش
هر وقفه 2.5میکروثانیه طول بکشد ،پردازنده چند درصد از زمان را صرف مدیریت I/Oخواهد کرد بی توجهی به زمان
جستجو؟
.11.10یک کامپیوتر 32بیتی دارای دو کانال انتخابگر و یک کانال مالتی پلکسور است .هر کانال انتخابگر از دو دیسک
مغناطیسی و دو واحد نوار مغناطیسی پشتیبانی می کند .کانال مالتی پلکسور دارای دو چاپگر خط ،دو کارت خوان و ده ترمینال
VDTاست که به آن متصل است .نرخ های انتقال زیر را در نظر بگیرید:
.11.11باید واضح باشد که نوار دیسک می تواند سرعت انتقال داده را زمانی که اندازه نوار در مقایسه با اندازه درخواست
ورودی/خروجی کوچک است ،بهبود بخشد .همچنین باید واضح باشد که RAID 0عملکرد بهبود یافته ای را نسبت به یک
دیسک بزرگ ارائه می دهد ،زیرا چندین درخواست I/Oرا می توان به صورت موازی انجام داد .با این حال ،در این مورد دوم ،آیا
نوار دیسک ضروری است؟ یعنی آیا نوار دیسک عملکرد نرخ درخواست ورودی/خروجی را در مقایسه با یک آرایه دیسک قابل
مقایسه بدون خط کشی بهبود می بخشد؟
.11.12یک آرایه RAID 4درایو 200 ،گیگابایت در هر درایو را در نظر بگیرید .ظرفیت ذخیره سازی داده های موجود برای
هر یک از سطوح ،5 ،4 ،3 ،1 ،0 ،RAIDو 6چقدر است؟
635
سیستم عامل های داخلی و اصول طراحی636.........................................................................................................................
فصل 12
مدیریت فایل
12.1بررسی اجمالی
12.2سازماندهی فایل و دسترسی /توده /فایل متوالی /فایل متوالی نمایه شده فایل نمایه شده /فایل مستقیم یا هش شده
B-Trees 12.3
12.4فهرست فایل
تخصیص فایل
قابلیت اطمینان
inodeها
12.12خالصه
اهداف یادگیری
-مسائل طراحی اصلی را برای مدیریت ذخیره سازی ثانویه توضیح دهید.
-فایل سیستم عامل مورد استفاده در لینوکس ،یونیکس و ویندوز 7را توضیح دهید.
در اکثر برنامه ها ،فایل عنصر مرکزی است .به استثنای برنامه های بالدرنگ و برخی برنامه های تخصصی دیگر ،ورودی برنامه از
طریق یک فایل است .و تقریباً در همه برنامه ها ،خروجی در یک فایل برای ذخیره سازی طوالنی مدت و برای دسترسی بعدی
توسط کاربر و سایر برنامه ها ذخیره می شود.
فایلها خارج از هر برنامه کاربردی که از آنها برای ورودی و/یا خروجی استفاده میکند ،عمری دارند .کاربران مایلند بتوانند به
فایلها دسترسی داشته باشند ،آنها را ذخیره کنند و یکپارچگی محتوای آنها را حفظ کنند .برای کمک به این اهداف ،تقریباً همه
سیستم عامل ها سیستم های مدیریت فایل را ارائه می دهند .به طور معمول ،یک سیستم مدیریت فایل شامل برنامه های
کاربردی سیستمی است که به عنوان برنامه های کاربردی ممتاز اجرا می شوند .با این حال ،حداقل ،یک سیستم مدیریت فایل
نیاز به خدمات ویژه از سیستم عامل دارد .حداکثر ،کل سیستم مدیریت فایل بخشی از سیستم عامل در نظر گرفته می شود.
بنابراین مناسب است که در این کتاب به عناصر اساسی مدیریت فایل توجه شود.
ما با یک مرور کلی شروع می کنیم و سپس به طرح های مختلف سازماندهی پرونده نگاه می کنیم .اگرچه سازماندهی فایل به
طور کلی فراتر از محدوده سیستم عامل است ،داشتن درک کلی از جایگزین های رایج برای درک برخی از مبادالت طراحی
مرتبط با مدیریت فایل ضروری است .باقی مانده این فصل به موضوعات دیگر در مدیریت فایل می پردازد.
12.1نمای کلی
از دیدگاه کاربر ،یکی از مهم ترین بخش های یک سیستم عامل ،سیستم فایل است .سیستم فایل به کاربران اجازه می دهد تا
مجموعه های داده ای به نام فایل ها را با ویژگی های مطلوب ایجاد کنند ،مانند:
-وجود طوالنی مدت :فایل ها بر روی دیسک یا سایر حافظه های ثانویه ذخیره می شوند و زمانی که کاربر از سیستم خارج می
شود ناپدید نمی شوند.
-قابل اشتراک گذاری بین فرآیندها :فایل ها دارای نام هستند و می توانند مجوزهای دسترسی مرتبطی داشته باشند که به
اشتراک گذاری کنترل شده اجازه می دهد.
-ساختار :بسته به سیستم فایل ،یک فایل می تواند ساختار داخلی داشته باشد که برای برنامه های خاص مناسب است .عالوه بر
این ،فایل ها را می توان در ساختار سلسله مراتبی یا پیچیده تر سازماندهی کرد تا روابط بین فایل ها را منعکس کند.
638
سیستم عامل های داخلی و اصول طراحی639.........................................................................................................................
هر سیستم فایلی نه تنها وسیله ای برای ذخیره داده های سازماندهی شده به صورت فایل ،بلکه مجموعه ای از توابع است که می
تواند بر روی فایل ها انجام شود .عملیات معمولی شامل موارد زیر است:
Open: -یک فایل موجود اعالم می شود که توسط یک فرآیند "باز شده" است و به فرآیند اجازه می دهد تا عملکردهایی را
روی فایل انجام دهد.
Close: -فایل با توجه به یک فرآیند بسته می شود ،به طوری که فرآیند دیگر ممکن است عملکردی را روی فایل انجام ندهد،
تا زمانی که فرآیند دوباره فایل را باز کند.
-نوشتن :یک فرآیند یک فایل را به روز می کند ،یا با افزودن داده های جدید که اندازه فایل را افزایش می دهد یا با تغییر
مقادیر موارد داده موجود در فایل .به طور معمول ،یک سیستم فایل مجموعه ای از ویژگی های مرتبط با فایل را حفظ می کند.
این موارد شامل مالک ،زمان ایجاد ،زمان آخرین تغییر و امتیازات دسترسی است.
ساختار فایل
-زمینه
-ضبط کنید
-فایل
-پایگاه داده
زمینه عنصر اصلی داده است .یک زمینه مجزا حاوی یک مقدار واحد است ،مانند نام خانوادگی کارمند ،تاریخ یا مقدار قرائت
سنسور .این با طول و نوع داده آن مشخص می شود به عنوان مثال ،رشته ،ASCIIاعشاری .بسته به طراحی فایل ،زمینه ها
ممکن است دارای طول ثابت یا متغیر باشند .در مورد دوم ،زمینه اغلب از دو یا سه زیر زمینه تشکیل شده است :مقدار واقعی
که باید ذخیره شود ،نام زمینه ،و در برخی موارد ،طول زمینه .در سایر موارد زمینه های با طول متغیر ،طول زمینه با استفاده
از نمادهای مرزبندی ویژه بین زمینه ها نشان داده می شود.
639
سیستم عامل های داخلی و اصول طراحی640.........................................................................................................................
رکورد مجموعه ای از زمینه های مرتبط است که می تواند توسط برخی برنامه های کاربردی به عنوان یک واحد در نظر گرفته
شود .به عنوان مثال ،یک سابقه کارمند شامل زمینه هایی مانند نام ،شماره تامین اجتماعی ،طبقه بندی شغل ،تاریخ استخدام و
غیره است .باز هم بسته به طراحی ،رکوردها ممکن است دارای طول ثابت یا متغیر باشند .یک رکورد دارای طول متغیر خواهد
بود اگر برخی از زمینه های آن دارای طول متغیر باشند یا اگر تعداد زمینه ها ممکن است متفاوت باشد .در مورد دوم ،هر زمینه
معموالً با یک نام زمینه همراه است .در هر صورت ،کل رکورد معموالً شامل یک زمینه طولی است.
یک فایل مجموعه ای از رکوردهای مشابه است .این فایل توسط کاربران و برنامه ها به عنوان یک موجودیت واحد در نظر گرفته
می شود و ممکن است با نام به آن ارجاع داده شود .فایل ها دارای نام فایل هستند و ممکن است ایجاد و حذف شوند .محدودیت
های کنترل دسترسی معموالً در سطح فایل اعمال می شود .یعنی در یک سیستم اشتراکی ،به کاربران و برنامهها اجازه داده
میشود که به کل فایلها دسترسی یابند .در برخی از سیستمهای پیچیدهتر ،چنین کنترلهایی در سطح رکورد یا حتی میدان
اجرا میشوند.
برخی از سیستمهای فایل فقط بر اساس زمینه ها و نه رکوردها ساختار یافتهاند .در این حالت ،یک فایل مجموعه ای از زمینه ها
است.
پایگاه داده مجموعه ای از داده های مرتبط است .جنبه های اساسی یک پایگاه داده این است که روابطی که بین عناصر داده
وجود دارد صریح باشد و پایگاه داده برای استفاده توسط تعدادی برنامه مختلف طراحی شده باشد .یک پایگاه داده ممکن است
شامل تمام اطالعات مربوط به یک سازمان یا یک پروژه ،مانند یک تجارت یا یک مطالعه علمی باشد .پایگاه داده خود از یک یا
چند نوع فایل تشکیل شده است .معموالً یک سیستم مدیریت پایگاه داده جداگانه وجود دارد که مستقل از سیستم عامل است،
اگرچه آن سیستم ممکن است از برخی برنامه های مدیریت فایل استفاده کند.
کاربران و برنامه های کاربردی مایل به استفاده از فایل ها هستند .عملیات معمولی که باید پشتیبانی شوند شامل موارد زیر است:
Retrieve_All: -تمام رکوردهای یک فایل را بازیابی کنید .این برای برنامهای که باید تمام اطالعات فایل را در یک زمان
پردازش کند ،الزم است .برای مثال ،برنامهای که خالصهای از اطالعات موجود در فایل را تولید میکند ،باید تمام رکوردها را
بازیابی کند .این عملیات اغلب با اصطالح پردازش متوالی برابر است ،زیرا همه رکوردها به ترتیب در دسترس هستند.
Retrieve_One: -این کار مستلزم بازیابی تنها یک رکورد است .برنامه های کاربردی تعاملی و تراکنش گرا به این عملیات
نیاز دارند.
640
سیستم عامل های داخلی و اصول طراحی641.........................................................................................................................
Retrieve_Next: -این کار مستلزم بازیابی رکوردی است که "بعدی" در یک دنباله منطقی به آخرین رکورد بازیابی شده
است .برخی از برنامه های کاربردی تعاملی ،مانند پر کردن فرم ها ،ممکن است به چنین عملیاتی نیاز داشته باشند .برنامه ای که
در حال انجام جستجو است نیز ممکن است از این عملیات استفاده کند.
Retrieve_Previous: -مشابه Retrieve_Nextاست ،اما در این مورد رکوردی که "قبلی" به رکورد دسترسی فعلی است
بازیابی می شود.
Insert_One: -یک رکورد جدید در فایل وارد کنید .ممکن است الزم باشد که رکورد جدید در موقعیت خاصی قرار گیرد تا
توالی فایل حفظ شود.
Delete_One: -یک رکورد موجود را حذف کنید .برخی پیوندها یا سایر ساختارهای داده ممکن است نیاز به به روز رسانی
داشته باشند تا توالی فایل حفظ شود.
Update_One: -یک رکورد را بازیابی کنید ،یک یا چند زمینه آن را به روز کنید و رکورد به روز شده را دوباره در فایل
بازنویسی کنید .مجدداً ،ممکن است الزم باشد که توالی با این عملیات حفظ شود .اگر طول رکورد تغییر کرده باشد ،عملیات
بهروزرسانی معموالً دشوارتر از حفظ طول است.
Retrieve_Few: -تعدادی رکورد را بازیابی کنید .به عنوان مثال ،یک برنامه کاربردی یا کاربر ممکن است بخواهد تمام
رکوردهایی را که دارای مجموعه خاصی از معیارها هستند ،بازیابی کند.
همانطور که در بخش 12.2مورد بحث قرار گرفت ،ماهیت عملیاتی که معموالً روی یک فایل انجام می شود ،بر نحوه سازماندهی
فایل تأثیر می گذارد.
الزم به ذکر است که همه سیستم های فایل نوع ساختار مورد بحث در این بخش را نشان نمی دهند .در سیستم های یونیکس و
یونیکس مانند ،ساختار فایل اصلی فقط یک جریان از بایت ها است .به عنوان مثال ،یک برنامه Cبه عنوان یک فایل ذخیره می
شود اما دارای زمینه های فیزیکی ،رکوردها و غیره نیست.
سیستم مدیریت فایل مجموعه ای از نرم افزارهای سیستمی است که به کاربران و برنامه های کاربردی در استفاده از فایل ها
خدمات ارائه می دهد .به طور معمول ،تنها راهی که کاربر یا برنامه کاربردی میتواند به فایلها دسترسی پیدا کند ،سیستم
مدیریت فایل است .این امر کاربر یا برنامه نویس را از نیاز به توسعه نرم افزار با هدف ویژه برای هر برنامه رها می کند و سیستم
641
سیستم عامل های داخلی و اصول طراحی642.........................................................................................................................
را با ابزاری ثابت و کامالً تعریف شده برای کنترل مهم ترین دارایی خود ارائه می دهدGROS86 .اهداف زیر را برای یک
سیستم مدیریت فایل پیشنهاد می کند:
-برای برآوردن نیازها و نیازهای مدیریت داده کاربر ،که شامل ذخیره سازی داده ها و توانایی انجام عملیات فوق الذکر است.
-برای تضمین ،تا حد امکان ،معتبر بودن داده های موجود در فایل
-برای بهینه سازی عملکرد ،هم از نظر سیستم از نظر توان کل و هم از نظر کاربر از نظر زمان پاسخگویی
-برای به حداقل رساندن یا حذف پتانسیل از دست دادن یا از بین رفتن داده ها
-برای ارائه مجموعه ای استاندارد از روال های رابط ورودی/خروجی به فرآیندهای کاربر
-برای ارائه پشتیبانی I/Oبرای چندین کاربر ،در مورد سیستم های چند کاربره
با توجه به اولین نکته ،برآورده کردن نیازهای کاربر ،میزان چنین الزاماتی به تنوع برنامه ها و محیطی که سیستم کامپیوتری در
آن استفاده خواهد شد ،بستگی دارد .برای یک سیستم تعاملی و همه منظوره ،موارد زیر حداقل مجموعه ای از الزامات را تشکیل
می دهند:
.1هر کاربر باید قادر به ایجاد ،حذف ،خواندن ،نوشتن و اصالح فایل ها باشد.
.2هر کاربر ممکن است دسترسی کنترل شده ای به فایل های کاربران دیگر داشته باشد.
.3هر کاربر ممکن است کنترل کند که چه نوع دسترسی هایی به فایل های کاربر مجاز است.
.5هر کاربر باید بتواند از فایل های کاربر در صورت آسیب بک آپ گیری و بازیابی کند.
.6هر کاربر باید بتواند به فایل های خود با نام دسترسی داشته باشد نه با شناسه عددی.
این اهداف و الزامات باید در طول بحث ما در مورد سیستم های مدیریت فایل در نظر گرفته شود.
معماری سیستم فایل یکی از راههای درک حوزه مدیریت فایل ،نگاه کردن به تصویری از یک سازمان نرمافزار معمولی است،
همانطور که در شکل 12.1پیشنهاد شده است .البته ،سیستم های مختلف به طور متفاوتی سازماندهی خواهند شد ،اما این
سازمان نماینده معقولی است .در پایینترین سطح ،درایورهای دستگاه مستقیماً با دستگاههای جانبی یا کنترلکنندهها یا
642
سیستم عامل های داخلی و اصول طراحی643.........................................................................................................................
کانالهای آنها ارتباط برقرار میکنند .درایور دستگاه مسئول شروع عملیات I/Oروی دستگاه و پردازش تکمیل درخواست I/O
است .برای عملیات فایل ،دستگاه های معمولی کنترل شده دیسک و درایو نوار هستند .درایورهای دستگاه معموالً بخشی از
سیستم عامل در نظر گرفته می شوند.
بهینه سازی عملکرد بافرهای ورودی/خروجی اختصاص داده شده و حافظه ثانویه در این سطح تخصیص داده می شود .ناظر
اصلی I/Oبخشی از سیستم عامل است Logical I/O .به کاربران و برنامه ها امکان دسترسی به رکوردها را می دهد .بنابراین،
در حالی که سیستم فایل اصلی با بلوک های داده سر و کار دارد ،ماژول I/Oمنطقی با رکوردهای فایل سروکار داردLogical .
I/Oیک قابلیت ورودی/خروجی رکورد همه منظوره را فراهم می کند و داده های اولیه را در مورد فایل ها نگهداری می کند.
نزدیکترین سطح فایل سیستم به کاربر اغلب روش دسترسی نامیده می شود .این یک رابط استاندارد بین برنامهها و سیستمهای
فایل و دستگاههایی که دادهها را نگهداری میکنند ،فراهم میکند .روشهای دسترسی مختلف ساختارهای مختلف فایل و
روشهای مختلف دسترسی و پردازش دادهها را منعکس میکنند .برخی از متداولترین روشهای دسترسی در شکل 12.1نشان
داده شدهاند ،و به طور خالصه در بخش 12.2توضیح داده شدهاند.
توابع مدیریت فایل روش دیگری برای مشاهده عملکردهای یک سیستم فایل در شکل 12.2نشان داده شده است .اجازه دهید
این نمودار را از چپ به راست دنبال کنیم .کاربران و برنامه های کاربردی با استفاده از دستوراتی برای ایجاد و حذف فایل ها و
برای انجام عملیات روی فایل ها با سیستم فایل تعامل دارند .قبل از انجام هر عملیاتی ،سیستم فایل باید فایل انتخاب شده را
شناسایی و مکان یابی کند .این امر مستلزم استفاده از نوعی دایرکتوری است که برای توصیف مکان همه فایلها ،به عالوه
ویژگیهای آنها عمل میکند .عالوه بر این ،اکثر سیستم های مشترک کنترل دسترسی کاربر را اعمال می کنند :فقط کاربران
مجاز مجاز به دسترسی به فایل های خاص به روش های خاص هستند .عملیات اساسی که یک کاربر یا یک برنامه ممکن است
روی یک فایل انجام دهد در سطح رکورد انجام می شود .کاربر یا برنامه ،فایل را دارای ساختاری میبیند که سوابق را سازماندهی
643
سیستم عامل های داخلی و اصول طراحی644.........................................................................................................................
میکند ،مانند ساختار متوالی به عنوان مثال ،سوابق پرسنل بر اساس حروف الفبا بر اساس نام خانوادگی ذخیره میشوند.
بنابراین ،برای ترجمه دستورات کاربر به دستورات دستکاری فایل خاص ،باید از روش دسترسی مناسب برای این ساختار فایل
استفاده شود .در حالی که کاربران و برنامه ها با رکوردها یا زمینه ها سروکار دارند I/O ،بر اساس بلوک انجام می شود .بنابراین،
رکوردها یا زمینه های یک فایل باید بهعنوان دنبالهای از بلوکها برای خروجی سازماندهی شوند و پس از ورودی ،مسدود شوند.
برای پشتیبانی از بلوک ورودی/خروجی فایل ها ،چندین عملکرد مورد نیاز است .ذخیره سازی ثانویه باید مدیریت شود.
این شامل تخصیص فایلها به بلوکهای رایگان در حافظه ثانویه و مدیریت فضای ذخیرهسازی رایگان است تا بدانیم چه
بلوکهایی برای فایلهای جدید و رشد فایلهای موجود در دسترس هستند .عالوه بر این ،درخواستهای ورودی/خروجی بالک
منفرد باید زمانبندی شوند .این موضوع در فصل 11مورد بررسی قرار گرفت .هم زمانبندی دیسک و هم تخصیص فایل مربوط
به بهینهسازی عملکرد هستند .همانطور که انتظار می رود ،بنابراین این توابع باید با هم در نظر گرفته شوند .عالوه بر این ،بهینه
سازی به ساختار فایل ها و الگوهای دسترسی بستگی دارد .بر این اساس ،توسعه یک سیستم مدیریت فایل بهینه از نقطه نظر
عملکرد یک کار بسیار پیچیده است.
شکل 12.2تقسیمی را بین آنچه که ممکن است نگرانی های سیستم مدیریت فایل به عنوان یک ابزار سیستم مجزا در نظر
گرفته شود و نگرانی های سیستم عامل ،با نقطه تقاطع پردازش رکوردها نشان می دهد .این تقسیم دلخواه است .رویکردهای
مختلفی در سیستم های مختلف اتخاذ می شود.
دستورات
کاربر و برنامه توابع مدیریت فضای
دستکاری ذخیره سازی
فایل رایگان
تخصیص
فایل
کنترل دسترسی
کاربر
644
سیستم عامل های داخلی و اصول طراحی645.........................................................................................................................
در ادامه این فصل ،به برخی از مسائل طراحی پیشنهاد شده در شکل 12.2نگاه می کنیم .ما با بحث در مورد سازماندهی فایل و
روش های دسترسی شروع می کنیم .اگرچه این موضوع فراتر از محدوده چیزی است که معموالً نگرانی های سیستم عامل در
نظر گرفته می شود ،ارزیابی سایر مسائل مربوط به طراحی فایل بدون قدردانی از سازماندهی پرونده و دسترسی غیرممکن است.
در مرحله بعد ،به مفهوم فهرست فایل ها نگاه می کنیم .اینها اغلب توسط سیستم عامل به نمایندگی از سیستم مدیریت فایل
مدیریت می شوند.
موضوعات باقی مانده به جنبه های فیزیکی I/Oمدیریت فایل می پردازند و به درستی به عنوان جنبه های طراحی سیستم
عامل در نظر گرفته می شوند .یکی از این مسائل نحوه سازماندهی رکوردهای منطقی در بلوک های فیزیکی است .در نهایت،
مسائل مربوط به تخصیص فایل در ذخیره سازی ثانویه و مدیریت ذخیره سازی ثانویه رایگان وجود دارد.
در این بخش ،ما از اصطالح سازماندهی پرونده برای اشاره به ساختار منطقی رکوردها که بر اساس روش دسترسی به آنها تعیین
می شود ،استفاده می کنیم .سازماندهی فیزیکی فایل در ذخیره سازی ثانویه به استراتژی مسدود کردن و استراتژی تخصیص
فایل بستگی دارد ،مسائلی که در ادامه این فصل به آنها پرداخته می شود.
-قابلیت اطمینان
اولویت نسبی این معیارها به برنامه هایی که از فایل استفاده می کنند بستگی دارد .برای مثال ،اگر قرار است یک فایل فقط در
حالت دستهای پردازش شود ،و هر بار به همه رکوردها دسترسی داشته باشید ،دسترسی سریع برای بازیابی یک رکورد تنها
کمترین نگرانی را دارد .فایل ذخیره شده در CD-ROMهرگز به روز نمی شود ،و بنابراین سهولت به روز رسانی مشکلی
نیست.
645
سیستم عامل های داخلی و اصول طراحی646.........................................................................................................................
این معیارها ممکن است در تضاد باشند .به عنوان مثال ،برای صرفه جویی در ذخیره سازی ،باید حداقل افزونگی در داده ها
وجود داشته باشد .از سوی دیگر ،افزونگی ابزار اصلی افزایش سرعت دسترسی به داده ها است .نمونه ای از این موارد استفاده از
شاخص ها است.
تعداد سازمانهای فایل جایگزینی که پیادهسازی شدهاند یا به تازگی پیشنهاد شدهاند ،بهطور غیرقابل مدیریتی زیاد است ،حتی
برای کتابی که به سیستمهای فایل اختصاص داده شده است .در این بررسی مختصر ،پنج سازمان اساسی را تشریح خواهیم کرد.
اکثر ساختارهای مورد استفاده در سیستم های واقعی یا در یکی از این دسته بندی ها قرار می گیرند یا می توانند با ترکیبی از
این سازمان ها پیاده سازی شوند .پنج سازمان ،چهار سازمان اول که در شکل 12.3نشان داده شده اند ،به شرح زیر هستند:
-شمع
-فایل متوالی
646
سیستم عامل های داخلی و اصول طراحی647.........................................................................................................................
رکوردهای با طول متغیر مجموعه رکوردهای با طول ثابت /مجموعه زمینه های ثابت
متغیر زمینه ها ترتیب زمانی به ترتیب ثابت ترتیب ترتیبی بر اساس زمینه کلیدی
توده
کم پیچیده ترین شکل سازماندهی پرونده را می توان انبوه نامید .داده ها به ترتیبی که می رسند جمع آوری می شوند .هر
رکورد از یک سری داده تشکیل شده است .هدف از شمع صرفاً جمع آوری انبوه داده و ذخیره آن است .رکوردها ممکن است
زمینه های متفاوتی داشته باشند یا زمینه های مشابهی به ترتیب متفاوت داشته باشند .بنابراین ،هر زمینه باید خود توصیف
کننده باشد ،شامل نام زمینه و همچنین مقدار .طول هر زمینه باید به طور ضمنی با جداکننده ها مشخص شود ،به طور صریح
به عنوان یک زیرزمینه درج شود ،یا به عنوان پیش فرض برای آن نوع زمینه شناخته شود.
647
سیستم عامل های داخلی و اصول طراحی648.........................................................................................................................
از آنجا که هیچ ساختاری برای فایل شمع وجود ندارد ،دسترسی به رکورد با جستجوی جامع است .یعنی اگر بخواهیم رکوردی را
پیدا کنیم که حاوی یک زمینه خاص با یک مقدار خاص باشد ،الزم است هر رکورد را تا زمانی که رکورد مورد نظر پیدا شود یا
کل فایل جستجو شود ،بررسی کنیم .اگر بخواهیم تمام رکوردهایی را که حاوی یک زمینه خاص هستند یا حاوی آن زمینه با
یک مقدار خاص هستند ،پیدا کنیم ،کل فایل باید جستجو شود.
هنگامی که داده ها قبل از پردازش جمع آوری و ذخیره می شوند یا زمانی که سازماندهی داده ها آسان نیست ،با فایل های
انبوه مواجه می شوند .این نوع فایل زمانی که داده های ذخیره شده از نظر اندازه و ساختار متفاوت است ،از فضا به خوبی
استفاده می کند ،برای جستجوهای جامع کامالً کافی است و به راحتی به روز می شود .با این حال ،فراتر از این کاربردهای
محدود ،این نوع فایل برای اکثر برنامه ها نامناسب است.
فایل متوالی
رایج ترین شکل ساختار فایل ،فایل متوالی است .در این نوع فایل از فرمت ثابت برای رکوردها استفاده می شود .تمام رکوردها
دارای طول یکسانی هستند و از همان تعداد زمینه های با طول ثابت در یک ترتیب خاص تشکیل شده اند .از آنجایی که طول و
موقعیت هر زمینه مشخص است ،فقط مقادیر زمینه ها باید ذخیره شوند .نام زمینه و طول هر زمینه ویژگی های ساختار فایل
هستند.
یک زمینه خاص ،معموالً اولین زمینه در هر رکورد ،به عنوان زمینه کلید نامیده می شود .زمینه کلید به طور منحصر به فرد
رکورد را شناسایی می کند .بنابراین مقادیر کلیدی برای رکوردهای مختلف همیشه متفاوت است .عالوه بر این ،رکوردها به
ترتیب کلید ذخیره می شوند :ترتیب حروف الفبا برای یک کلید متنی ،و ترتیب عددی برای یک کلید عددی.
فایلهای متوالی معموالً در برنامههای دستهای استفاده میشوند و به طور کلی برای چنین برنامههایی مناسب هستند ،اگر شامل
پردازش همه سوابق باشند به عنوان مثال ،یک برنامه صورتحساب یا حقوق و دستمزد .سازماندهی متوالی فایل تنها موردی است
که به راحتی روی نوار و همچنین دیسک ذخیره می شود.
برای برنامههای تعاملی که شامل پرسشها و/یا بهروزرسانی رکوردهای فردی هستند ،فایل متوالی عملکرد ضعیفی را ارائه
میکند .دسترسی به جستجوی متوالی فایل برای تطابق کلید نیاز دارد .اگر بتوان کل فایل یا بخش بزرگی از فایل را در یک
زمان به حافظه اصلی آورد ،تکنیک های جستجوی کارآمدتری امکان پذیر است .با این وجود ،پردازش و تأخیر قابل توجهی برای
دسترسی به یک رکورد در یک فایل متوالی بزرگ وجود دارد .اضافات به فایل نیز مشکالتی را ایجاد می کند .به طور معمول،
یک فایل متوالی به ترتیب ساده و متوالی رکوردهای درون بلوک ها ذخیره می شود .یعنی سازماندهی فیزیکی فایل روی نوار یا
دیسک مستقیماً با سازماندهی منطقی فایل مطابقت دارد .در این مورد ،روال معمول این است که رکوردهای جدید را در یک
648
سیستم عامل های داخلی و اصول طراحی649.........................................................................................................................
فایل شمع جداگانه قرار دهیم که به آن فایل الگ یا فایل تراکنش می گویند .به طور دورهای ،یک بهروزرسانی دستهای انجام
میشود که فایل گزارش را با فایل اصلی ادغام میکند تا یک فایل جدید با ترتیب کلید درست تولید کند.
یک جایگزین این است که فایل متوالی را به صورت فیزیکی به عنوان یک لیست پیوندی سازماندهی کنید .یک یا چند رکورد در
هر بلوک فیزیکی ذخیره می شود .هر بلوک روی دیسک حاوی یک اشاره گر به بلوک بعدی است .درج رکوردهای جدید مستلزم
دستکاری نشانگر است اما نیازی ندارد که رکوردهای جدید یک موقعیت بالک فیزیکی خاص را اشغال کنند .بنابراین ،مقداری
راحتی اضافی با هزینه پردازش اضافی و سربار به دست می آید.
یک رویکرد رایج برای غلبه بر معایب فایل متوالی ،فایل متوالی نمایه شده است .فایل متوالی نمایه شده ویژگی کلیدی فایل
متوالی را حفظ می کند :رکوردها به ترتیب بر اساس یک زمینه کلیدی سازماندهی می شوند .دو ویژگی اضافه شده است :یک
فهرست به فایل برای پشتیبانی از دسترسی تصادفی ،و یک فایل سرریز .این شاخص قابلیت جستجو برای رسیدن سریع به
نزدیکی رکورد مورد نظر را فراهم می کند .فایل سرریز شبیه فایل logاست که با یک فایل متوالی استفاده می شود ،اما
یکپارچه شده است به طوری که یک رکورد در فایل سرریز با دنبال کردن یک اشاره گر از رکورد قبلی خود قرار می گیرد .در
ساده ترین ساختار متوالی نمایه شده ،از یک سطح نمایه سازی استفاده می شود.
شاخص در این مورد یک فایل متوالی ساده است .هر رکورد در فایل فهرست شامل دو زمینه است :یک زمینه کلید که همان
زمینه کلید در فایل اصلی است و یک اشاره گر به فایل اصلی .برای یافتن یک زمینه خاص ،فهرست برای یافتن باالترین مقدار
کلیدی که برابر یا قبل از مقدار کلید مورد نظر است جستجو می شود .جستجو در فایل اصلی در مکانی که با اشاره گر نشان
داده شده است ادامه می یابد.
برای مشاهده اثربخشی این روش ،یک فایل متوالی با 1میلیون رکورد را در نظر بگیرید .برای جستجوی یک مقدار کلیدی خاص
به طور متوسط به یک و نیم میلیون دسترسی به رکورد نیاز است .حال فرض کنید که یک نمایه حاوی 1000ورودی ساخته
شده است ،با کلیدهای موجود در فهرست کم و بیش به طور مساوی در فایل اصلی توزیع شده است .اکنون به طور متوسط 500
دسترسی به فایل فهرست و سپس 500دسترسی به فایل اصلی برای یافتن رکورد طول می کشد .میانگین طول جستجو از
500000به 1000کاهش یافته است.
موارد اضافه شده به فایل به روش زیر انجام می شود :هر رکورد در فایل اصلی حاوی یک زمینه اضافی است که برای برنامه قابل
مشاهده نیست ،که نشانگر فایل سرریز است .زمانی که قرار است یک رکورد جدید در فایل درج شود ،به فایل سرریز اضافه می
شود .رکورد در فایل اصلی که بالفاصله قبل از رکورد جدید به ترتیب منطقی قرار می گیرد ،به روز می شود تا حاوی یک اشاره
649
سیستم عامل های داخلی و اصول طراحی650.........................................................................................................................
گر به رکورد جدید در فایل سرریز باشد .اگر رکورد بالفاصله قبل خودش در فایل سرریز باشد ،نشانگر آن رکورد به روز می شود.
مانند فایل متوالی ،فایل متوالی نمایه شده گهگاه با فایل سرریز در حالت دسته ای ادغام می شود.
فایل متوالی ایندکس شده زمان مورد نیاز برای دسترسی به یک رکورد را تا حد زیادی کاهش می دهد ،بدون اینکه ماهیت
ترتیبی فایل را به خطر بیندازد .برای پردازش متوالی کل فایل ،سوابق فایل اصلی به ترتیب پردازش میشوند تا زمانی که یک
اشارهگر به فایل سرریز پیدا شود ،سپس دسترسی در فایل سرریز ادامه مییابد تا زمانی که با اشارهگر تهی مواجه میشویم ،در
این زمان به فایل اصلی دسترسی پیدا میکنیم .فایل از جایی که متوقف شد از سر گرفته می شود.
برای ارائه کارایی بیشتر در دسترسی ،می توان از سطوح چندگانه نمایه سازی استفاده کرد .بنابراین ،پایین ترین سطح فایل
فهرست به عنوان یک فایل متوالی در نظر گرفته می شود و یک فایل فهرست سطح باالتر برای آن فایل ایجاد می شود .دوباره
فایلی با 1میلیون رکورد را در نظر بگیرید .یک شاخص سطح پایین تر با 10000ورودی ساخته شده است .سپس می توان یک
شاخص سطح باالتر در شاخص سطح پایین تر از 100ورودی ایجاد کرد .جستجو از نمایه سطح باالتر طول متوسط 50
دسترسی شروع می شود تا نقطه ورود به نمایه سطح پایین پیدا شود .سپس این فهرست جستجو می شود طول متوسط 50تا
یک نقطه ورود به فایل اصلی پیدا شود که سپس جستجو می شود طول متوسط .50بنابراین میانگین طول جستجو از 500000
به 1000به 150کاهش یافته است.
فایل متوالی نمایه شده یک محدودیت را برای فایل متوالی حفظ می کند :پردازش مؤثر محدود به مواردی است که بر اساس
یک زمینه واحد از فایل است .به عنوان مثال ،هنگامی که الزم است یک رکورد بر اساس ویژگی دیگری غیر از زمینه کلید
جستجو شود ،هر دو شکل فایل متوالی ناکافی هستند .در برخی از برنامهها ،انعطافپذیری جستجوی کارآمد با ویژگیهای
مختلف مطلوب است .برای دستیابی به این انعطافپذیری ،ساختاری مورد نیاز است که از چندین نمایه استفاده میکند ،یکی
برای هر نوع زمینه ی که ممکن است موضوع جستجو باشد .در فایل نمایه شده عمومی ،مفهوم ترتیب و یک کلید کنار گذاشته
شده است .سوابق فقط از طریق فهرست آنها قابل دسترسی است .نتیجه این است که در حال حاضر هیچ محدودیتی برای قرار
دادن رکوردها وجود ندارد تا زمانی که یک اشاره گر در حداقل یک شاخص به آن رکورد اشاره دارد .عالوه بر این ،می توان از
رکوردهای با طول متغیر استفاده کرد.
دو نوع شاخص استفاده می شود .یک فهرست جامع شامل یک ورودی برای هر رکورد در فایل اصلی است .خود ایندکس به
عنوان یک فایل متوالی برای سهولت جستجو سازماندهی شده است .یک نمایه جزئی شامل ورودی هایی به رکوردهایی است که
در آن زمینه مورد عالقه وجود دارد.
650
سیستم عامل های داخلی و اصول طراحی651.........................................................................................................................
با رکوردهای با طول متغیر ،برخی از رکوردها شامل همه زمینه ها نمی شوند .هنگامی که یک رکورد جدید به فایل اصلی اضافه
می شود ،تمام فایل های فهرست باید به روز شوند .فایلهای نمایهسازی شده بیشتر در برنامههایی استفاده میشوند که بهموقع
بودن اطالعات مهم است و دادهها به ندرت به طور جامع پردازش میشوند .به عنوان مثال می توان به سیستم های رزرو
هواپیمایی و سیستم های کنترل موجودی اشاره کرد.
فایل مستقیم یا هش شده از قابلیت موجود بر روی دیسک ها برای دسترسی مستقیم به هر بلوکی از یک آدرس شناخته شده
سوء استفاده می کند .همانند فایلهای متوالی و فهرستبندیشده ،یک زمینه کلیدی در هر رکورد مورد نیاز است .با این حال،
در اینجا مفهومی از ترتیب متوالی وجود ندارد.
فایل مستقیم از هش کردن مقدار کلید استفاده می کند .این تابع در پیوست Fتوضیح داده شده است .شکل F.1bنوع
سازماندهی هش را با یک فایل سرریز نشان می دهد که معموالً در یک فایل هش استفاده می شود.
فایلهای مستقیم اغلب در مواردی استفاده میشوند که دسترسی بسیار سریع مورد نیاز است ،جایی که از رکوردهای با طول
ثابت استفاده میشود ،و جایی که رکوردها همیشه در یک زمان قابل دسترسی هستند .به عنوان مثال می توان به دایرکتوری ها،
جداول قیمت گذاری ،برنامه ها و لیست های نام اشاره کرد.
B-TREES 12.3
بخش قبل به استفاده از یک فایل فهرست برای دسترسی به رکوردهای فردی در یک فایل یا پایگاه داده اشاره داشت .برای یک
فایل یا پایگاه داده بزرگ ،یک فایل متوالی از فهرست ها روی کلید اصلی دسترسی سریع را فراهم نمی کند .برای ارائه دسترسی
کارآمدتر ،معموالً از یک فایل فهرست ساختاری استفاده می شود .ساده ترین چنین ساختاری یک سازمان دو سطحی است که
در آن فایل اصلی به بخش ها تقسیم می شود و سطح باالیی شامل مجموعه ای متوالی از اشاره گرها به بخش های سطح پایین
تر است .این ساختار سپس می تواند به بیش از دو سطح گسترش یابد و در نتیجه یک ساختار درختی ایجاد شود .مگر اینکه
نظم و انضباط در ساخت شاخص درختی اعمال شود ،احتماالً به ساختاری ناهموار ،با چند شاخه کوتاه و برخی شاخه های بلند
ختم می شود ،به طوری که زمان جستجوی شاخص ناهموار است .بنابراین ،یک ساختار درختی متعادل ،با تمام شاخههای با
طول مساوی ،به نظر میرسد بهترین عملکرد متوسط را ارائه دهد .چنین ساختاری درخت Bاست که به روش استاندارد
سازماندهی فهرستها برای پایگاههای داده تبدیل شده است و معموالً در سیستمهای فایل سیستم عامل ،از جمله سیستمهایی
که توسط Windows ،Mac OS Xو چندین سیستم فایل لینوکس پشتیبانی میشوند ،استفاده میشود .ساختار B-tree
امکان جستجوی کارآمد ،افزودن و حذف موارد را فراهم می کند.
651
سیستم عامل های داخلی و اصول طراحی652.........................................................................................................................
قبل از تشریح مفهوم ،B-treeاجازه دهید درخت Bو ویژگی های آن را دقیق تر تعریف کنیم B-tree .یک ساختار درختی
است بدون حلقه بسته با ویژگی های زیر شکل :12.4
.2هر گره حاوی حداقل یک کلید است که به طور منحصر به فرد یک رکورد فایل را شناسایی می کند ،و بیش از یک اشاره گر
به گره ها یا برگه های فرزند .تعداد کلیدها و اشاره گرهای موجود در یک گره ممکن است در محدوده های توضیح داده شده در
زیر متفاوت باشد.
.4کلیدهای یک گره به ترتیب غیر کاهشی ذخیره می شوند .هر کلید دارای یک فرزند مرتبط است که ریشه یک زیردرخت
حاوی تمام گرههای دارای کلیدهای کوچکتر یا مساوی با کلید اما بزرگتر از کلید قبلی است .یک گره همچنین دارای یک فرزند
سمت راست اضافی است که ریشه برای زیردرختی است که شامل همه کلیدها بزرگتر از هر کلید در گره است .بنابراین ،هر گره
یک اشاره گر بیشتر از کلیدها دارد.
یک درخت Bبا حداقل درجه dمشخص می شود و ویژگی های زیر را برآورده می کند:
.1هر گره حداکثر دارای کلیدهای d 12و فرزندان d2یا به طور معادل ،اشاره گرهای d2است.
.2هر گره ،به جز ریشه ،حداقل دارای d 1کلید و dاشاره گر است .در نتیجه ،هر گره داخلی ،به جز ریشه ،حداقل نیمه پر است
و حداقل dفرزند دارد.
.4همه برگها در یک سطح ظاهر می شوند و هیچ اطالعاتی ندارند .این یک ساختار منطقی برای پایان دادن به درخت است.
اجرای واقعی ممکن است متفاوت باشد .به عنوان مثال ،هر گره سطح پایین ممکن است حاوی کلیدهای متناوب با اشاره گرهای
تهی باشد.
652
سیستم عامل های داخلی و اصول طراحی653.........................................................................................................................
به طور معمول ،درخت Bدارای یک فاکتور انشعاب نسبتاً بزرگ تعداد زیاد بچه است که منجر به درختی با ارتفاع کم می شود.
شکل 12.4دو سطح از درخت Bرا نشان می دهد .سطح باال دارای کلیدهای k 1و kنشانگر است و رابطه زیر را برآورده می
کند:
هر اشاره گر به گره ای اشاره می کند که سطح باالی درخت فرعی این گره سطح باالیی است .هر یک از این گره های زیردرخت
حاوی تعدادی کلید و اشاره گر است ،مگر اینکه یک گره برگ باشد .روابط زیر برقرار است:
برای جستجوی کلید ،از گره ریشه شروع می کنید .اگر کلیدی که می خواهید در گره باشد ،کارتان تمام است .اگر نه ،یک سطح
پایین می آیید .سه مورد وجود دارد:
.1کلید مورد نظر شما کمتر از کوچکترین کلید در این گره است .سمت چپ ترین نشانگر را به سطح بعدی پایین بیاورید.
.2کلید مورد نظر شما بزرگتر از بزرگترین کلید در این گره است .سمت راست ترین اشاره گر را به سطح بعدی پایین بیاورید.
.3مقدار کلید بین مقادیر دو کلید مجاور در این گره است .نشانگر بین این کلیدها را به سطح بعدی ببرید.
به عنوان مثال ،درخت را در شکل d12.5در نظر بگیرید و کلید مورد نظر 84است .در سطح ریشه ،51 84 ،بنابراین شما سمت
راست ترین شاخه را به سطح بعدی پایین می آورید .در اینجا ،ما 71 84 61داریم ،بنابراین شما نشانگر بین 61و 71را به
سطح بعدی پایین می آورید ،جایی که کلید 84پیدا می شود .همراه با این کلید یک اشاره گر به رکورد مورد نظر است .مزیت
این ساختار درختی نسبت به سایر ساختارهای درختی این است که عریض و کم عمق است ،به طوری که جستجو به سرعت
خاتمه می یابد .عالوه بر این ،به دلیل متعادل بودن آن همه شاخه ها از ریشه تا برگ دارای طول مساوی هستند ،در مقایسه با
سایر جستجوها جستجوی طوالنی وجود ندارد .قوانین درج یک کلید جدید در درخت Bباید یک درخت متعادل را حفظ کند.
این کار به صورت زیر انجام می شود:
.1درخت را برای یافتن کلید جستجو کنید .اگر کلید در درخت نباشد ،به یک گره در پایین ترین سطح رسیده اید.
653
سیستم عامل های داخلی و اصول طراحی654.........................................................................................................................
.2اگر این گره کمتر از d 12کلید دارد ،کلید را به ترتیب مناسب در این گره قرار دهید.
.3اگر گره پر است دارای کلیدهای ،d 12سپس این گره را در اطراف کلید میانی خود به دو گره جدید با کلیدهای d 1تقسیم
کنید و کلید میانی را به سطح باالتر بعدی ارتقا دهید ،همانطور که در مرحله 4توضیح داده شد .کلید newمقداری کمتر از
کلید میانه دارد ،آن را در گره جدید سمت چپ قرار دهید .در غیر این صورت آن را در گره جدید سمت راست قرار دهید .نتیجه
این است که گره اصلی به دو گره ،یکی با کلیدهای d 1و دیگری با کلیدهای dتقسیم شده است.
.4گره ارتقا یافته طبق قوانین مرحله 3به گره والد وارد می شود .بنابراین ،اگر گره والد از قبل پر است ،باید تقسیم شود و کلید
میانی آن به باالترین الیه بعدی ارتقا یابد.
.5اگر فرآیند ارتقاء به گره ریشه برسد و گره ریشه از قبل پر شده باشد ،درج مجدد از قوانین مرحله 3پیروی می کند .اما در
این حالت ،کلید میانه به یک گره ریشه جدید تبدیل می شود و ارتفاع درخت افزایش می یابد.1 .
شکل 12.5فرآیند درج را بر روی یک درخت Bبا درجه d 3نشان می دهد .در هر قسمت از شکل ،گره های تحت تأثیر فرآیند
درج بدون سایه هستند.
654
سیستم عامل های داخلی و اصول طراحی655.........................................................................................................................
فهرست
مرتبط با هر سیستم مدیریت فایل و مجموعه ای از فایل ها یک فهرست فایل است .دایرکتوری حاوی اطالعاتی درباره فایل ها،
از جمله ویژگی ها ،مکان و مالکیت است .بسیاری از این اطالعات ،به ویژه اطالعات مربوط به ذخیره سازی ،توسط سیستم عامل
مدیریت می شود .دایرکتوری خود یک فایل است که با روال های مختلف مدیریت فایل قابل دسترسی است .اگرچه برخی از
اطالعات دایرکتوری ها در دسترس کاربران و برنامه های کاربردی است ،اما عموماً به طور غیر مستقیم توسط روتین های
سیستم ارائه می شود.
اطالعات اولیه
نام فایل انتخاب شده توسط سازنده (کاربر یا برنامه) .باید در یک فهرست خاص منحصر به فرد باشد
نوع فایل به عنوان مثال :متن ،باینری ،ماژول بارگذاری و غیره.
سازماندهی فایل برای سیستم هایی که از سازمان های مختلف پشتیبانی می کنند
اطالعات نشانی
Volumeدستگاهی را نشان می دهد که فایل در آن ذخیره شده است
آدرس شروع آدرس فیزیکی شروع در حافظه ثانویه (به عنوان مثال ،شماره سیلندر ،مسیر و بلوک روی دیسک)
اندازه مورد استفاده اندازه فعلی فایل بر حسب بایت ،کلمات یا بلوک
Size Allocatedحداکثر اندازه فایل
اطالعات کنترل دسترسی
کاربر مالک که کنترل این فایل به او اختصاص داده شده است .مالک ممکن است بتواند دسترسی به سایر کاربران را اعطا یا رد کند و
این امتیازات را تغییر دهد.
اطالعات دسترسی یک نسخه ساده از این عنصر شامل نام و رمز عبور کاربر برای هر کاربر مجاز است.
اقدامات مجاز خواندن ،نوشتن ،اجرا و انتقال از طریق شبکه را کنترل می کند
اطالعات استفاده
تاریخ ایجاد زمانی که فایل برای اولین بار در فهرست قرار گرفت.
تاریخ آخرین تغییر تاریخ آخرین به روز رسانی ،درج یا حذف
هویت آخرین کاربر اصالح کننده که اصالح را انجام داده است
تاریخ آخرین پشتیبان گیری تاریخ آخرین باری که از فایل در یک رسانه ذخیره سازی دیگر نسخه پشتیبان تهیه شده است
استفاده فعلی اطالعات مربوط به فعالیت فعلی روی فایل ،مانند فرآیند یا فرآیندهایی که فایل را باز کرده است ،اینکه آیا توسط یک
اصلی به روز شده است اما هنوز روی دیسک نیست. 655
فرآیند قفل شده است ،و اینکه آیا فایل در حافظه
سیستم عامل های داخلی و اصول طراحی656.........................................................................................................................
جدول 12.1اطالعاتی را که معموالً در فهرست برای هر فایل در سیستم ذخیره می شود ،نشان می دهد .از دیدگاه کاربر،
دایرکتوری نقشهای بین نام فایلها که برای کاربران و برنامهها شناخته شده است و خود فایلها ارائه میکند .بنابراین ،هر ورودی
فایل شامل نام فایل است .تقریباً همه سیستم ها با انواع فایل ها و سازماندهی فایل های مختلف سروکار دارند و این اطالعات نیز
ارائه می شود .دسته مهمی از اطالعات در مورد هر فایل مربوط به ذخیره سازی آن ،از جمله مکان و اندازه آن است.
در سیستم های اشتراکی ،ارائه اطالعاتی که برای کنترل دسترسی به فایل استفاده می شود نیز مهم است .به طور معمول ،یک
کاربر مالک فایل است و ممکن است امتیازات دسترسی خاصی را به کاربران دیگر اعطا کند .در نهایت ،اطالعات استفاده برای
مدیریت استفاده فعلی از فایل و ثبت تاریخچه استفاده از آن مورد نیاز است.
ساختار
روشی که در آن اطالعات جدول 12.1ذخیره می شود در بین سیستم های مختلف بسیار متفاوت است .برخی از اطالعات
ممکن است در یک رکورد هدر مرتبط با فایل ذخیره شود .این مقدار فضای ذخیره سازی مورد نیاز برای دایرکتوری را کاهش
می دهد و نگهداری تمام یا بیشتر دایرکتوری را در حافظه اصلی برای بهبود سرعت آسان تر می کند.
سادهترین شکل ساختار یک فهرست ،فهرستی از ورودیها است که برای هر فایل یکی است .این ساختار را می توان با یک فایل
متوالی ساده نشان داد که نام فایل به عنوان کلید عمل می کند .در برخی از سیستم های تک کاربره قبلی ،از این تکنیک
استفاده شده است .با این حال ،زمانی که چندین کاربر یک سیستم را به اشتراک میگذارند و حتی برای کاربران تکی با
فایلهای زیاد ،کافی نیست.
برای درک الزامات ساختار فایل ،در نظر گرفتن انواع عملیاتی که ممکن است روی دایرکتوری انجام شوند مفید است:
-جستجو :هنگامی که کاربر یا برنامه ای به فایلی ارجاع می دهد ،دایرکتوری باید جستجو شود تا ورودی مربوط به آن فایل را
پیدا کند.
-ایجاد فایل :هنگامی که یک فایل جدید ایجاد می شود ،یک ورودی باید به دایرکتوری اضافه شود.
-حذف فایل :هنگامی که یک فایل حذف می شود ،یک ورودی باید از فهرست حذف شود.
-فهرست فهرست :ممکن است تمام یا بخشی از دایرکتوری درخواست شود .به طور کلی ،این درخواست توسط یک کاربر انجام
می شود و منجر به فهرستی از تمام فایل های متعلق به آن کاربر ،به اضافه برخی از ویژگی های هر فایل به عنوان مثال ،نوع،
اطالعات کنترل دسترسی ،اطالعات استفاده می شود.
656
سیستم عامل های داخلی و اصول طراحی657.........................................................................................................................
Update directory: -از آنجایی که برخی از ویژگی های فایل در فهرست ذخیره می شوند ،تغییر در یکی از این ویژگی ها
مستلزم تغییر در ورودی دایرکتوری مربوطه است.
لیست ساده برای پشتیبانی از این عملیات مناسب نیست .نیازهای یک کاربر را در نظر بگیرید .کاربر ممکن است انواع مختلفی از
فایل ها ،از جمله فایل های متنی ،فایل های گرافیکی و صفحات گسترده داشته باشد .کاربر ممکن است بخواهد اینها را بر اساس
پروژه ،نوع یا به روشی مناسب دیگر سازماندهی کند .اگر دایرکتوری یک لیست متوالی ساده باشد ،هیچ کمکی به سازماندهی
فایل ها نمی کند و کاربر را وادار می کند که مراقب باشد از یک نام برای دو نوع مختلف فایل استفاده نکند .مشکل در یک
سیستم مشترک بسیار بدتر است .نامگذاری منحصر به فرد به یک مشکل جدی تبدیل می شود .عالوه بر این ،زمانی که هیچ
ساختار ذاتی در فهرست وجود ندارد ،پنهان کردن بخشهایی از فهرست کلی از کاربران دشوار است.
شروع برای حل این مشکالت ،رفتن به یک طرح دو سطحی است .در این حالت برای هر کاربر یک دایرکتوری و یک دایرکتوری
اصلی وجود دارد .دایرکتوری اصلی یک ورودی برای هر دایرکتوری کاربر دارد که آدرس و اطالعات کنترل دسترسی را ارائه می
کند .هر فهرست کاربری یک لیست ساده از فایل های آن کاربر است.
این ترتیب به این معنی است که نام ها باید فقط در مجموعه فایل های یک کاربر منحصر به فرد باشند و سیستم فایل می تواند
به راحتی محدودیت دسترسی را در فهرست ها اعمال کند .با این حال ،هنوز هیچ کمکی در ساختار مجموعه فایل ها به کاربران
ارائه نمی دهد.
یک رویکرد قدرتمندتر و منعطف تر ،و تقریباً به طور جهانی پذیرفته شده است ،رویکرد سلسله مراتبی یا ساختار درختی است
شکل .12.6مانند قبل ،یک فهرست اصلی وجود دارد که در زیر آن تعدادی دایرکتوری کاربر وجود دارد .هر یک از این
دایرکتوری های کاربر به نوبه خود ممکن است زیر شاخه ها و فایل هایی را به عنوان ورودی داشته باشند .این در هر سطحی
صادق است :یعنی در هر سطحی ،دایرکتوری ممکن است شامل ورودیهایی برای زیر شاخهها و/یا ورودیهایی برای فایلها
باشد.
باقی مانده است که بگوییم هر دایرکتوری و زیر شاخه چگونه سازماندهی شده است .البته ساده ترین روش ذخیره هر دایرکتوری
به عنوان یک فایل متوالی است .هنگامی که دایرکتوری ها ممکن است حاوی تعداد بسیار زیادی مدخل باشند ،چنین سازمانی
ممکن است به زمان های جستجوی غیرضروری طوالنی منجر شود .در این صورت ،ساختار هش شده ترجیح داده می شود.
657
سیستم عامل های داخلی و اصول طراحی658.........................................................................................................................
نامگذاری
کاربران باید بتوانند به یک فایل با نام نمادین اشاره کنند .واضح است که هر فایل در سیستم باید یک نام منحصر به فرد داشته
باشد تا ارجاعات فایل بدون ابهام باشد .از سوی دیگر ،این بار غیرقابل قبولی بر دوش کاربران است که بخواهند نامهای
منحصربهفرد را ارائه دهند ،مخصوصاً در یک سیستم مشترک.
استفاده از دایرکتوری با ساختار درختی ،مشکل در اختصاص نام های منحصر به فرد را به حداقل می رساند .هر فایلی در
سیستم را میتوان با دنبال کردن مسیری از دایرکتوری اصلی یا اصلی در شاخههای مختلف تا رسیدن به فایل پیدا کرد.
مجموعه ای از نام های دایرکتوری که در نام خود فایل به اوج می رسد ،یک نام مسیر برای فایل تشکیل می دهد .به عنوان
مثال ،فایل در گوشه سمت چپ پایین شکل 12.7دارای نام مسیر User_B/Word/Unit_A/ABCاست .اسلش برای
محدود کردن نام ها در دنباله استفاده می شود .نام دایرکتوری اصلی به طور ضمنی است ،زیرا همه مسیرها از آن دایرکتوری
شروع می شوند .توجه داشته باشید که داشتن چندین فایل با نام فایل یکسان کامالً قابل قبول است ،به شرطی که نام مسیرهای
منحصر به فرد داشته باشند ،که معادل این است که بگوییم ممکن است از یک نام فایل در فهرست های مختلف استفاده شود.
در مثال ما ،فایل دیگری در سیستم با نام فایل ABCوجود دارد ،اما نام مسیر User_B/ Draw/ABC/را دارد.
658
سیستم عامل های داخلی و اصول طراحی659.........................................................................................................................
اگرچه نام مسیر انتخاب نام فایل ها را تسهیل می کند ،اما برای کاربر دشوار است که هر بار که به یک فایل ارجاع داده می شود،
کل نام مسیر را هجی کند .به طور معمول ،یک کاربر تعاملی یا یک فرآیند با آن یک دایرکتوری فعلی مرتبط می کند که اغلب
به عنوان دایرکتوری کاری از آن یاد می شود .سپس فایل ها نسبت به دایرکتوری کاری ارجاع داده می شوند .برای مثال ،اگر
دایرکتوری کار برای کاربر "B "Wordباشد ،نام مسیر Unit_A/ABCبرای شناسایی فایل در گوشه سمت چپ پایین شکل
12.7کافی است .هنگامی که یک کاربر تعاملی وارد سیستم می شود ،یا زمانی که یک فرآیند ایجاد می شود ،پیش فرض
دایرکتوری کاری ،دایرکتوری خانه کاربر است .در طول اجرا ،کاربر می تواند در درخت به باال یا پایین حرکت کند تا به
دایرکتوری کاری متفاوت تغییر کند.
در یک سیستم چندکاربره ،تقریباً همیشه این نیاز برای اجازه دادن به فایلها برای اشتراکگذاری بین تعدادی از کاربران وجود
دارد .دو مسئله مطرح می شود :حقوق دسترسی و مدیریت دسترسی همزمان.
حقوق دسترسی
سیستم فایل باید ابزاری منعطف برای امکان اشتراک گذاری گسترده فایل بین کاربران فراهم کند .سیستم فایل باید تعدادی
گزینه ارائه دهد تا نحوه دسترسی به یک فایل خاص را بتوان کنترل کرد .به طور معمول ،به کاربران یا گروه هایی از کاربران
659
سیستم عامل های داخلی و اصول طراحی660.........................................................................................................................
حقوق دسترسی خاصی به یک فایل اعطا می شود .طیف گسترده ای از حقوق دسترسی استفاده شده است .لیست زیر نماینده
حقوق دسترسی است که می تواند به یک کاربر خاص برای یک فایل خاص اختصاص داده شود:
-هیچکدام :کاربر ممکن است حتی از وجود فایل اطالعی نداشته باشد ،حتی کمتر به آن دسترسی داشته باشد .برای اعمال این
محدودیت ،کاربر مجاز به خواندن دایرکتوری کاربر که شامل این فایل است ،نخواهد بود.
-دانش :کاربر می تواند تعیین کند که فایل وجود دارد و صاحب آن کیست.
سپس کاربر میتواند از مالک درخواست کند تا حقوق دسترسی بیشتری را دریافت کند.
-اجرا :کاربر می تواند یک برنامه را بارگذاری و اجرا کند اما نمی تواند آن را کپی کند.
-خواندن :کاربر می تواند فایل را برای هر منظوری از جمله کپی و اجرا بخواند .برخی از سیستم ها می توانند بین مشاهده و
کپی کردن تمایز قائل شوند .در حالت اول ،محتویات فایل می تواند به کاربر نمایش داده شود ،اما کاربر ابزاری برای کپی کردن
ندارد.
-افزودن :کاربر می تواند داده ها را به فایل اضافه کند ،اغلب فقط در انتها ،اما نمی تواند هیچ یک از محتویات فایل را اصالح یا
حذف کند .این حق در جمع آوری داده ها از تعدادی منبع مفید است.
-به روز رسانی :کاربر می تواند داده های فایل را اصالح ،حذف و اضافه کند .این معموالً شامل نوشتن اولیه فایل ،بازنویسی کامل
یا جزئی آن و حذف تمام یا بخشی از داده ها می شود .برخی از سیستم ها درجات مختلف به روز رسانی را متمایز می کنند.
-تغییر حفاظت :کاربر می تواند حقوق دسترسی اعطا شده به سایر کاربران را تغییر دهد .معموالً این حق فقط در اختیار صاحب
پرونده است .در برخی از سیستم ها ،مالک می تواند این حق را به دیگران نیز تعمیم دهد .برای جلوگیری از سوء استفاده از این
مکانیسم ،مالک فایل معموالً میتواند مشخص کند که دارنده این حق کدام حقوق را میتواند تغییر دهد.
این حقوق را می توان به عنوان یک سلسله مراتب در نظر گرفت که هر حق متضمن آنهایی است که قبل از آن هستند .بنابراین،
اگر به یک کاربر خاص حق بهروزرسانی برای یک فایل خاص داده شود ،آن کاربر حقوق زیر را نیز دریافت میکند :دانش ،اجرا،
خواندن و پیوست.
660
سیستم عامل های داخلی و اصول طراحی661.........................................................................................................................
یک کاربر به عنوان مالک یک فایل معین تعیین می شود ،معموالً شخصی که در ابتدا فایل را ایجاد کرده است .مالک تمام حقوق
دسترسی ذکر شده در قبل را دارد و ممکن است به دیگران حقوق بدهد .دسترسی را می توان برای طبقات مختلف کاربران
فراهم کرد:
-گروه های کاربر :مجموعه ای از کاربرانی که به صورت جداگانه تعریف نشده اند .سیستم باید راهی برای پیگیری عضویت گروه
های کاربری داشته باشد.
All: -تمامی کاربرانی که به این سیستم دسترسی دارند .این ها فایل های عمومی هستند.
دسترسی همزمان
هنگامی که دسترسی برای افزودن یا به روز رسانی یک فایل به بیش از یک کاربر داده می شود ،سیستم عامل یا سیستم
مدیریت فایل باید نظم و انضباط را اعمال کند .رویکرد brute-forceاین است که به کاربر اجازه میدهد کل فایل را زمانی که
قرار است بهروزرسانی شود قفل کند .یک دانه کنترل دقیق تر ،قفل کردن رکوردهای فردی در حین به روز رسانی است .اساساً،
این مشکل خوانندگان/نویسندگان است که در فصل 5مورد بحث قرار گرفته است .مسائل مربوط به محرومیت و وقفه متقابل
باید در طراحی قابلیت دسترسی مشترک مورد توجه قرار گیرد.
همانطور که در شکل 12.2نشان داده شده است ،رکوردها واحد منطقی دسترسی به یک فایل ساخت یافته هستند ،در حالی که
بلوک ها واحد ورودی/خروجی با ذخیره سازی ثانویه هستند .برای انجام ،I/Oرکوردها باید به صورت بلوک سازماندهی شوند.
چندین موضوع وجود دارد که باید در نظر گرفته شود .اول ،آیا بلوک ها باید دارای طول ثابت یا متغیر باشند؟ در اکثر سیستم
ها ،بلوک ها دارای طول ثابت هستند .این امر ورودی/خروجی ،تخصیص بافر در حافظه اصلی و سازماندهی بلوک ها در حافظه
ثانویه را ساده می کند .دوم ،اندازه نسبی یک بلوک با میانگین اندازه رکورد چقدر باید مقایسه شود؟ معامله به این صورت است:
هر چه بلوک بزرگتر باشد ،رکوردهای بیشتری در یک عملیات I/Oارسال می شود .اگر یک فایل به صورت متوالی پردازش یا
جستجو شود ،این یک مزیت است ،زیرا تعداد عملیات I/Oبا استفاده از بلوکهای بزرگتر کاهش مییابد و در نتیجه سرعت
پردازش را افزایش میدهد .از سوی دیگر ،اگر رکوردها به طور تصادفی در دسترس باشند و هیچ محل مرجع خاصی مشاهده
نشود ،بلوک های بزرگتر منجر به انتقال غیر ضروری رکوردهای استفاده نشده می شود .با این حال ،با ترکیب فرکانس عملیات
661
سیستم عامل های داخلی و اصول طراحی662.........................................................................................................................
متوالی با پتانسیل محلی بودن مرجع ،می توان گفت که زمان انتقال I/Oبا استفاده از بلوک های بزرگتر کاهش می یابد .نگرانی
رقیب این است که بلوک های بزرگتر به بافرهای ورودی/خروجی بزرگتری نیاز دارند که مدیریت بافر را دشوارتر می کند.
با توجه به اندازه یک بلوک ،سه روش برای مسدود کردن وجود دارد که می توان از آنها استفاده کرد:
-مسدود کردن ثابت :از رکوردهای با طول ثابت استفاده می شود و تعداد کاملی از رکوردها در یک بلوک ذخیره می شوند.
ممکن است فضای بال استفاده در انتهای هر بلوک وجود داشته باشد .از این به عنوان چندپارگی داخلی یاد می شود.
-مسدود کردن طول متغیر :رکوردهای با طول متغیر استفاده میشوند و در بلوکهایی بدون فضای بالاستفاده بستهبندی
میشوند .بنابراین ،برخی از رکوردها باید دو بلوک را شامل شوند که ادامه آن با اشاره گر به بلوک جانشین نشان داده می شود.
-انسداد بدون طول متغیر :از رکوردهای طول متغیر استفاده می شود ،اما از spanningاستفاده نمی شود .در اکثر بلوک ها
فضای هدر رفته وجود دارد ،زیرا اگر رکورد بعدی بزرگتر از فضای استفاده نشده باقی مانده باشد ،نمی توان از باقیمانده یک
بلوک استفاده کرد.
شکل 12.8این روش ها را با فرض اینکه یک فایل در بلوک های متوالی روی دیسک ذخیره می شود ،نشان می دهد .این شکل
فرض می کند که فایل به اندازه کافی بزرگ است که دو مسیر را در بر بگیرد.
مسدود کردن ثابت حالت رایج برای فایل های متوالی با رکوردهای با طول ثابت است .مسدود کردن طول متغیر برای ذخیره
سازی کارآمد است و اندازه رکوردها را محدود نمی کند .با این حال ،اجرای این تکنیک دشوار است .رکوردهایی که در دو بلوک
قرار دارند به دو عملیات ورودی/خروجی نیاز دارند و بهروزرسانی فایلها ،صرف نظر از سازمان ،دشوار است .انسداد بدون بازه با
طول متغیر منجر به هدر رفتن فضای می شود و اندازه رکورد را به اندازه یک بلوک محدود می کند.
662
سیستم عامل های داخلی و اصول طراحی663.........................................................................................................................
تکنیک مسدود کردن رکورد ممکن است با سختافزار حافظه مجازی تعامل داشته باشد ،در صورت استفاده از این روش .در یک
محیط حافظه مجازی ،مطلوب است که صفحه به واحد اصلی انتقال تبدیل شود .صفحات معموالً بسیار کوچک هستند ،به طوری
که غیرعملی است که یک صفحه را به عنوان یک بلوک برای مسدود کردن بدون باز شدن در نظر بگیرید .بر این اساس ،برخی از
سیستم ها چندین صفحه را برای ایجاد یک بلوک بزرگتر برای اهداف ورودی/خروجی فایل ترکیب می کنند .این رویکرد برای
فایل های VSAMدر رایانه های اصلی IBMاستفاده می شود.
در ذخیره سازی ثانویه ،یک فایل از مجموعه ای از بلوک ها تشکیل شده است .سیستم عامل یا سیستم مدیریت فایل وظیفه
تخصیص بالک ها به فایل ها را بر عهده دارد .این موضوع دو مشکل مدیریتی را ایجاد می کند .اول اینکه فضای ذخیره سازی
ثانویه باید به فایل ها اختصاص داده شود و دوم اینکه باید فضای موجود برای تخصیص را پیگیری کرد .خواهیم دید که این دو
وظیفه به هم مرتبط هستند .یعنی رویکرد اتخاذ شده برای تخصیص فایل ممکن است رویکرد اتخاذ شده برای مدیریت فضای
آزاد را تحت تأثیر قرار دهد .عالوه بر این ،خواهیم دید که یک تعامل بین ساختار فایل و خط مشی تخصیص وجود دارد.
663
سیستم عامل های داخلی و اصول طراحی664.........................................................................................................................
ما این بخش را با بررسی گزینه های جایگزین برای تخصیص فایل روی یک دیسک آغاز می کنیم .سپس به بحث مدیریت
فضای آزاد می پردازیم و در نهایت قابلیت اطمینان را مورد بحث قرار می دهیم.
تخصیص فایل
.1هنگامی که یک فایل جدید ایجاد می شود ،آیا حداکثر فضای مورد نیاز برای فایل به یکباره تخصیص داده می شود؟
.2فضا به عنوان یک یا چند واحد به هم پیوسته به یک فایل اختصاص داده می شود که به آنها به عنوان قسمت اشاره خواهیم
کرد .به این معنا که یک بخش مجموعه ای به هم پیوسته از بلوک های اختصاص داده شده است .اندازه یک بخش می تواند از
یک بلوک تا کل فایل متغیر باشد .چه اندازه ای باید برای تخصیص فایل استفاده شود؟
.3چه نوع ساختار داده یا جدولی برای پیگیری بخش های اختصاص داده شده به یک فایل استفاده می شود؟ نمونه ای از چنین
ساختاری جدول تخصیص فایل FATاست که در DOSو برخی سیستم های دیگر یافت می شود.
پیش تخصیص در مقابل تخصیص دینامیک یک خط مشی پیش تخصیص مستلزم آن است که حداکثر اندازه یک فایل در زمان
درخواست ایجاد فایل اعالم شود .در تعدادی از موارد ،مانند اجرا برنامه ،تولید فایل های داده خالصه ،یا انتقال یک فایل از یک
سیستم دیگر از طریق یک شبکه ارتباطی ،این مقدار را می توان به طور قابل اعتماد تخمین زد .با این حال ،برای بسیاری از
برنامه ها ،تخمین قابل اعتماد حداکثر اندازه بالقوه فایل دشوار است .در این موارد ،کاربران و برنامه نویسان برنامه تمایل دارند
اندازه فایل را بیش از حد تخمین بزنند تا فضای خالی نداشته باشند .این به وضوح از نقطه نظر تخصیص ذخیره سازی ثانویه
بیهوده است .بنابراین ،استفاده از تخصیص پویا مزایایی دارد که در صورت نیاز فضا را به یک فایل در بخشهایی اختصاص
میدهد.
PORTION SIZEدومین مشکل ذکر شده مربوط به اندازه بخشی است که به یک فایل اختصاص داده شده است .در یک
حالت ،بخشی به اندازه کافی بزرگ برای نگهداری کل فایل اختصاص داده می شود .در سمت دیگر ،فضای روی دیسک هر بار
یک بلوک اختصاص می یابد .در انتخاب اندازه بخش ،بین کارایی از نقطه نظر یک فایل واحد در مقابل بازده کلی سیستم ،تعادل
وجود داردWIED87 .چهار مورد را فهرست می کند که باید در مبادله در نظر گرفته شوند:
.1مجاورت فضا کارایی را به خصوص برای عملیات Retrieve_Nextو تراکنش هایی که در یک سیستم عامل تراکنش گرا
اجرا می شوند را افزایش می دهد.
664
سیستم عامل های داخلی و اصول طراحی665.........................................................................................................................
.2داشتن تعداد زیادی از بخش های کوچک ،اندازه جداول مورد نیاز برای مدیریت اطالعات تخصیص را افزایش می دهد.
.3داشتن بخش هایی با اندازه ثابت به عنوان مثال ،بلوک ها تخصیص مجدد فضا را ساده می کند.
.4داشتن قطعات با اندازه متغیر یا کوچک با اندازه ثابت ،هدر رفتن ذخیره سازی بالاستفاده را به دلیل تخصیص بیش از حد به
حداقل می رساند.
البته این موارد با هم تعامل دارند و باید با هم در نظر گرفته شوند .نتیجه این است که دو گزینه اصلی وجود دارد:
-بخش های متغییر و بزرگ به هم پیوسته :این کار عملکرد بهتری را ارائه می دهد .اندازه متغیر از هدر رفتن جلوگیری می کند
و جداول تخصیص فایل کوچک هستند .با این حال ،استفاده مجدد از فضا دشوار است.
-بلوک ها :بخش های ثابت کوچک انعطاف پذیری بیشتری را فراهم می کنند .آنها ممکن است به جداول بزرگ یا ساختارهای
پیچیده برای تخصیص خود نیاز داشته باشند .مجاورت به عنوان یک هدف اولیه کنار گذاشته شده است .بلوک ها در صورت نیاز
تخصیص داده می شوند.
هر یک از این گزینه ها با تخصیص اولیه یا تخصیص پویا سازگار است .در مورد بخش های متغییر و بزرگ به هم پیوسته ،یک
فایل از قبل یک گروه به هم پیوسته از بلوک ها تخصیص داده می شود .این امر نیاز به جدول تخصیص فایل را از بین می برد.
تنها چیزی که مورد نیاز است یک اشاره گر به بلوک اول و تعداد بلوک های تخصیص یافته است .در مورد بلوک ها ،تمام قسمت
های مورد نیاز در یک زمان تخصیص داده می شوند .این بدان معنی است که جدول تخصیص فایل برای فایل با اندازه ثابت باقی
می ماند ،زیرا تعداد بلوک های اختصاص داده شده ثابت است.
با بخشهای با اندازه متغیر ،باید نگران تکه تکه شدن فضای آزاد باشیم .زمانی که حافظه اصلی پارتیشن بندی شده را در فصل
7در نظر گرفتیم ،با این مشکل روبرو شدیم .راهبردهای جایگزین ممکن زیر هستند:
r First fit:اولین گروه پیوسته استفاده نشده از بلوک ها با اندازه کافی را از لیست بلوک های آزاد انتخاب کنید.
-بهترین تناسب :کوچکترین گروه بدون استفاده را انتخاب کنید که اندازه کافی داشته باشد.
-نزدیکترین تناسب :گروه استفاده نشده با اندازه کافی را انتخاب کنید که به تخصیص قبلی برای فایل برای افزایش محلی بودن
نزدیکتر باشد.
مشخص نیست که کدام استراتژی بهترین است .مشکل در مدلسازی استراتژیهای جایگزین این است که بسیاری از عوامل ،از
جمله انواع فایلها ،الگوی دسترسی به فایل ،درجه چندبرنامهنویسی ،سایر عوامل عملکرد در سیستم ،حافظه پنهان دیسک ،و
زمانبندی دیسک با یکدیگر تعامل دارند.
665
سیستم عامل های داخلی و اصول طراحی666.........................................................................................................................
یک ورودی اندازه جدول تخصیص فایل یک ورودی بزرگ متوسط
روش های تخصیص فایل با نگاهی به مسائل مربوط به تخصیص پیش از تخصیص در مقابل تخصیص پویا و اندازه بخش ،ما در
موقعیتی هستیم که روش های تخصیص فایل خاصی را در نظر بگیریم .سه روش رایج است :پیوسته ،زنجیره ای و نمایه شده.
جدول 12.2برخی از ویژگی های هر روش را خالصه می کند.
با تخصیص پیوسته ،یک مجموعه مجزا از بلوک ها در زمان ایجاد فایل به یک فایل اختصاص می یابد شکل .12.9بنابراین ،این
یک استراتژی پیش تخصیص است که از بخش های با اندازه متغیر استفاده می کند .جدول تخصیص فایل فقط به یک ورودی
برای هر فایل نیاز دارد که بلوک شروع و طول فایل را نشان دهد .تخصیص پیوسته از نظر فایل متوالی فردی بهترین است .برای
بهبود عملکرد ورودی/خروجی برای پردازش متوالی ،میتوان چندین بلوک را در یک زمان خواند .بازیابی یک بلوک نیز آسان
است .به عنوان مثال ،اگر یک فایل از بلوک bشروع شود ،و بلوک یکم فایل مورد نظر باشد ،مکان آن در ذخیره سازی ثانویه به
سادگی b i 1است .با این حال ،تخصیص پیوسته مشکالتی را ایجاد می کند.
تکه تکه شدن بیرونی رخ خواهد داد و یافتن بلوک های فضایی به هم پیوسته با طول کافی را دشوار می کند .هر از گاهی ،الزم
است یک الگوریتم فشرده سازی برای آزاد کردن فضای اضافی روی دیسک انجام شود شکل .12.10همچنین با پیش تخصیص
باید حجم فایل را در زمان ایجاد با مشکالتی که قبال ذکر شد اعالم کرد.
666
سیستم عامل های داخلی و اصول طراحی667.........................................................................................................................
در نقطه مقابل تخصیص پیوسته ،تخصیص زنجیره ای قرار دارد شکل .12.11به طور معمول ،تخصیص بر اساس بلوک فردی
است .هر بلوک حاوی یک اشاره گر به بلوک بعدی در زنجیره است .مجدداً ،جدول تخصیص فایل فقط به یک ورودی برای هر
فایل نیاز دارد که بلوک شروع و طول فایل را نشان دهد .اگرچه پیش تخصیص امکان پذیر است ،اما معمول تر است که به
سادگی بلوک ها را در صورت نیاز تخصیص دهیم .انتخاب بلوک ها اکنون یک موضوع ساده است :هر بلوک رایگان را می توان به
یک زنجیره اضافه کرد .هیچ تکه تکه شدن خارجی برای نگرانی وجود ندارد زیرا هر بار فقط به یک بلوک نیاز است .این نوع
سازماندهی فیزیکی برای فایل های متوالی که قرار است به صورت متوالی پردازش شوند ،مناسب است .برای انتخاب یک بلوک
جداگانه از یک فایل نیاز به ردیابی از طریق زنجیره تا بلوک مورد نظر است .یکی از پیامدهای زنجیرهبندی ،همانطور که تاکنون
توضیح داده شد ،این است که اصل محلّی انطباق ندارد .بنابراین ،اگر الزم است چندین بلوک از یک فایل را در یک زمان وارد
کنید ،مانند پردازش متوالی ،یک سری دسترسی به قسمت های مختلف دیسک مورد نیاز است .این شاید تأثیر مهم تری بر روی
667
سیستم عامل های داخلی و اصول طراحی668.........................................................................................................................
یک سیستم تک کاربره باشد ،اما ممکن است در سیستم مشترک نیز نگران کننده باشد .برای غلبه بر این مشکل ،برخی از
سیستم ها به صورت دوره ای فایل ها را یکپارچه می کنند شکل .12.12
تخصیص نمایه شده به بسیاری از مشکالت تخصیص پیوسته و زنجیره ای می پردازد .در این مورد ،جدول تخصیص فایل شامل
یک نمایه تک سطحی جداگانه برای هر فایل است .ایندکس یک ورودی برای هر بخش اختصاص داده شده به فایل دارد .به طور
معمول ،فهرست های فایل به صورت فیزیکی به عنوان بخشی از جدول تخصیص فایل ذخیره نمی شوند .در عوض ،فهرست فایل
برای یک فایل در یک بلوک جداگانه نگهداری می شود و ورودی فایل در جدول مکان فایل به آن بلوک اشاره می کند .تخصیص
ممکن است بر اساس بلوک های با اندازه ثابت شکل 12.13یا بخش هایی با اندازه متغیر شکل 12.14باشد .تخصیص توسط
بلوک ها تکه تکه شدن خارجی را حذف می کند ،در حالی که تخصیص توسط بخش های با اندازه متغیر محل را بهبود می
بخشد .در هر صورت ،ادغام فایل ممکن است هر از گاهی انجام شود .ادغام فایل در مورد بخش های با اندازه متغیر ،اندازه
668
سیستم عامل های داخلی و اصول طراحی669.........................................................................................................................
شاخص را کاهش می دهد ،اما در مورد تخصیص بلوک نه .تخصیص نمایه شده هم از دسترسی متوالی و هم مستقیم به فایل
پشتیبانی می کند و بنابراین محبوب ترین شکل تخصیص فایل است.
همانطور که فضای اختصاص داده شده به فایل ها باید مدیریت شود ،فضایی که در حال حاضر به هیچ فایلی اختصاص داده نمی
شود نیز باید مدیریت شود .برای انجام هر یک از تکنیک های تخصیص فایل که قبال توضیح داده شد ،الزم است بدانیم چه بلوک
هایی روی دیسک موجود است .بنابراین ما به یک جدول تخصیص دیسک عالوه بر جدول تخصیص فایل نیاز داریم .ما در اینجا
تعدادی از تکنیک هایی را که اجرا شده اند مورد بحث قرار می دهیم.
جداول بیت این روش از یک بردار حاوی یک بیت برای هر بلوک روی دیسک استفاده می کند .هر ورودی 0مربوط به یک بلوک
آزاد و هر 1مربوط به یک بلوک در حال استفاده است .به عنوان مثال ،برای طرح دیسک شکل ،12.9یک بردار به طول 35
مورد نیاز است که دارای مقدار زیر است:
یک جدول بیت این مزیت را دارد که یافتن یک یا یک گروه مجاور از بلوک های آزاد نسبتاً آسان است .بنابراین ،یک جدول بیت
با هر یک از روشهای تخصیص فایل به خوبی کار میکند .مزیت دیگر این است که تا حد امکان کوچک است.
669
سیستم عامل های داخلی و اصول طراحی670.........................................................................................................................
با این حال ،هنوز هم می تواند قابل توجه باشد .مقدار حافظه بر حسب بایت مورد نیاز برای یک بیت مپ بلوکی است
بنابراین ،برای یک دیسک 16گیگابایتی با بلوک های 512بایتی ،جدول بیت حدود 4مگابایت را اشغال می کند .آیا می توانیم
4مگابایت حافظه اصلی را برای جدول بیت ذخیره کنیم؟ اگر چنین است ،جدول بیت را می توان بدون نیاز به دسترسی به
دیسک جستجو کرد .اما حتی با وجود اندازههای حافظه امروزی 4 ،مگابایت حجم زیادی از حافظه اصلی برای اختصاص به یک
عملکرد واحد است.
جایگزین این است که جدول بیت را روی دیسک قرار دهید .اما یک جدول بیتی 4مگابایتی به حدود 8000بلوک دیسک نیاز
دارد .ما نمیتوانیم هر بار که به یک بلوک نیاز است ،آن مقدار فضای دیسک را جستجو کنیم ،بنابراین یک جدول بیتی در
حافظه نشان داده میشود.
حتی زمانی که جدول بیت در حافظه اصلی است ،جستجوی جامع جدول می تواند عملکرد سیستم فایل را تا حد غیرقابل قبولی
کند کند .این امر به ویژه زمانی صادق است که دیسک تقریباً پر است و تعداد کمی بلوک آزاد باقی مانده است .بر این اساس،
اکثر سیستم های فایلی که از جداول بیت استفاده می کنند ،ساختارهای داده کمکی را حفظ می کنند که محتویات زیر
محدوده های جدول بیت را خالصه می کند .به عنوان مثال ،جدول را می توان به طور منطقی به تعدادی زیرمجموعه با اندازه
مساوی تقسیم کرد .یک جدول خالصه میتواند برای هر زیرمجموعه ،تعداد بلوکهای آزاد و حداکثر اندازه مجاور بلوکهای آزاد
را شامل شود .هنگامی که سیستم فایل به تعدادی بلوک پیوسته نیاز دارد ،میتواند جدول خالصه را برای یافتن زیرمجموعه
مناسب اسکن کرده و سپس آن زیرمحدوده را جستجو کند.
670
سیستم عامل های داخلی و اصول طراحی671.........................................................................................................................
بخش های آزاد با زنجیر بخش های آزاد ممکن است با استفاده از یک اشاره گر و مقدار طول در هر بخش آزاد به هم زنجیر
شوند .این روش فضای ناچیزی دارد زیرا نیازی به جدول تخصیص دیسک نیست ،فقط به یک اشاره گر به ابتدای زنجیره و طول
قسمت اول نیاز دارد .این روش برای همه روش های تخصیص فایل مناسب است .اگر تخصیص یک بلوک در یک زمان است ،به
سادگی بلوک آزاد را در سر زنجیره انتخاب کنید و اولین اشاره گر یا مقدار طول را تنظیم کنید .اگر تخصیص بر اساس بخش با
طول متغیر باشد ،ممکن است از یک الگوریتم متناسب با اول استفاده شود :سرصفحهها از بخشها یکی یکی واکشی میشوند تا
قسمت آزاد مناسب بعدی در زنجیره تعیین شود .دوباره ،مقادیر اشاره گر و طول تنظیم می شوند.
این روش مشکالت خاص خود را دارد .پس از مدتی استفاده ،دیسک کامالً تکه تکه می شود و بسیاری از بخش ها یک بلوک
واحد خواهند بود .همچنین توجه داشته باشید که هر بار که یک بلوک را اختصاص میدهید ،باید ابتدا بلوک را بخوانید تا نشانگر
اولین بلوک رایگان جدید را قبل از نوشتن داده در آن بلوک بازیابی کنید .اگر نیاز به تخصیص تعداد زیادی بلوک جداگانه در
یک زمان برای یک عملیات فایل باشد ،این امر سرعت ایجاد فایل را بسیار کند می کند .به طور مشابه ،حذف فایل های بسیار
پراکنده بسیار زمان بر است.
INDEXINGرویکرد نمایه سازی فضای آزاد را به عنوان یک فایل در نظر می گیرد و از یک جدول فهرست همانطور که در
قسمت تخصیص فایل توضیح داده شده است استفاده می کند .برای کارایی ،شاخص باید بر اساس بخشهای با اندازه متغیر باشد
تا بلوکها .بنابراین ،یک ورودی در جدول برای هر بخش رایگان روی دیسک وجود دارد .این رویکرد پشتیبانی کارآمدی را برای
همه روش های تخصیص فایل فراهم می کند.
FREE BLOCK LISTدر این روش ،به هر بلوک یک عدد به صورت متوالی اختصاص داده می شود و لیست اعداد تمام
بلوک های آزاد در قسمت رزرو شده دیسک نگهداری می شود .بسته به اندازه دیسک 24 ،یا 32بیت برای ذخیره یک عدد بلوک
مورد نیاز است ،بنابراین اندازه لیست بلوک رایگان 24یا 32برابر اندازه جدول بیت مربوطه است و بنابراین باید روی دیسک
ذخیره شود .به جای حافظه اصلی با این حال ،این یک روش رضایت بخش است .به نکات زیر توجه کنید:
.1فضای روی دیسک اختصاص داده شده به لیست بلوک رایگان کمتر از ٪1از کل فضای دیسک است .اگر از یک شماره بلوک
32بیتی استفاده شود ،جریمه فضایی 4بایت برای هر بلوک 512بایتی است.
.2اگرچه لیست بلوک آزاد برای ذخیره در حافظه اصلی بسیار بزرگ است ،اما دو روش موثر برای ذخیره بخشی کوچکی از
لیست در حافظه اصلی وجود دارد.
آ .لیست را می توان به عنوان یک پشته فشار به پایین پیوست Pبا چند هزار عنصر اولیه پشته در حافظه اصلی در نظر گرفت.
هنگامی که یک بلوک جدید تخصیص داده می شود ،از باالی پشته که در حافظه اصلی است ظاهر می شود .به طور مشابه،
هنگامی که یک بلوک به طور جداگانه تخصیص داده می شود ،به پشته فشار داده می شود .تنها زمانی باید بین دیسک و حافظه
671
سیستم عامل های داخلی و اصول طراحی672.........................................................................................................................
اصلی انتقال داده شود که بخش درون حافظه پشته پر یا خالی شود .بنابراین ،این تکنیک در اکثر مواقع دسترسی تقریباً صفر را
می دهد.
ب لیست را می توان به عنوان یک صف FIFOبا چند هزار ورودی از سر و دم صف در حافظه اصلی در نظر گرفت .یک بلوک با
گرفتن اولین ورودی از سر صف تخصیص داده می شود و با افزودن آن به انتهای دم صف تخصیص داده می شود .فقط زمانی
باید بین دیسک و حافظه اصلی یک انتقال وجود داشته باشد که یا قسمت درون حافظه سر صف خالی شود یا قسمت درون
حافظه دنباله صف پر شود.
در هر یک از استراتژی های فهرست شده در نقطه قبل پشته یا صف ،FIFOیک رشته پس زمینه می تواند به آرامی لیست یا
لیست های درون حافظه را مرتب کند تا تخصیص پیوسته را تسهیل کند.
حجم ها
اصطالح حجم در سیستم عامل های مختلف و سیستم های مدیریت فایل تا حدودی متفاوت استفاده می شود ،اما در اصل حجم
یک دیسک منطقی استCARR05 .یک حجم را به صورت زیر تعریف می کند:
حجم :مجموعه ای از بخش های آدرس پذیر در حافظه ثانویه که یک سیستم عامل یا برنامه می تواند برای ذخیره داده ها
استفاده کند .بخش های موجود در یک حجم نیازی به پشت سر هم بودن در یک دستگاه ذخیره سازی فیزیکی ندارند .در
عوض ،آنها فقط باید به این شکل در سیستم عامل یا برنامه ظاهر شوند .یک حجم ممکن است نتیجه مونتاژ و ادغام حجم های
کوچکتر باشد.
در ساده ترین حالت ،یک دیسک واحد برابر با یک حجم است .اغلب ،یک دیسک به پارتیشنهایی تقسیم میشود که هر
پارتیشن به عنوان یک حجم مجزا عمل میکند .همچنین معمول است که چندین دیسک را به عنوان یک جلد یا پارتیشن های
روی چندین دیسک به عنوان یک حجم واحد در نظر بگیریم.
قابلیت اطمینان
.2درخواست اعطا می شود و جداول تخصیص دیسک و فایل در حافظه اصلی به روز می شوند اما هنوز روی دیسک قرار نگرفته
اند.
672
سیستم عامل های داخلی و اصول طراحی673.........................................................................................................................
.4کاربر Bدرخواست تخصیص فایل می کند و فضایی روی دیسک اختصاص می یابد که با آخرین تخصیص به کاربر A
همپوشانی دارد.
.5کاربر Aاز طریق مرجعی که در فایل Aذخیره شده است به بخش همپوشانی شده دسترسی پیدا می کند.
این مشکل به این دلیل به وجود آمد که سیستم یک نسخه از جدول مکان دیسک و جدول تخصیص فایل را برای کارایی در
حافظه اصلی نگهداری می کرد .برای جلوگیری از این نوع خطا ،در صورت درخواست تخصیص فایل ،مراحل زیر را می توان
انجام داد:
.1جدول تخصیص دیسک را روی دیسک قفل کنید .تا زمانی که این تخصیص کامل نشود ،این کار از ایجاد تغییرات در جدول
توسط کاربر دیگری جلوگیری می کند.
.2جدول تخصیص دیسک را برای فضای موجود جستجو کنید .این فرض می کند که یک کپی از جدول تخصیص دیسک
همیشه در حافظه اصلی نگهداری می شود .اگر نه ،ابتدا باید در آن خوانده شود.
.3اختصاص فضا ،به روز رسانی جدول تخصیص دیسک و به روز رسانی دیسک .به روز رسانی دیسک شامل نوشتن جدول
تخصیص دیسک بر روی دیسک است .برای تخصیص دیسک زنجیره ای ،همچنین شامل به روز رسانی برخی از اشاره گرها روی
دیسک است.
این تکنیک از بروز خطا جلوگیری می کند .با این حال ،هنگامی که بخش های کوچک به طور مکرر تخصیص داده می شود،
تأثیر آن بر عملکرد قابل توجه خواهد بود .برای کاهش این سربار ،می توان از طرح تخصیص ذخیره سازی دسته ای استفاده
کرد .در این مورد ،دسته ای از بخش های رایگان روی دیسک برای تخصیص به دست می آید .بخش های مربوطه روی دیسک با
عالمت "در حال استفاده" هستند .تخصیص با استفاده از این دسته ممکن است در حافظه اصلی ادامه یابد .وقتی دسته تمام
شد ،جدول تخصیص دیسک بر روی دیسک به روز می شود و ممکن است یک دسته جدید بدست آید .اگر خرابی سیستم اتفاق
بیفتد ،قسمتهایی روی دیسک که «در حال استفاده» مشخص شدهاند ،باید قبل از تخصیص مجدد به روشی تمیز شوند.
تکنیک پاکسازی به ویژگی های خاص سیستم فایل بستگی دارد.
673
سیستم عامل های داخلی و اصول طراحی674.........................................................................................................................
-منظم یا معمولی :حاوی داده های دلخواه در بلوک های داده صفر یا بیشتر است .فایل های معمولی حاوی اطالعاتی هستند که
توسط یک کاربر ،یک برنامه کاربردی یا یک برنامه کاربردی سیستم در آنها وارد شده است .سیستم فایل هیچ ساختار داخلی را
به یک فایل معمولی تحمیل نمی کند بلکه آن را به عنوان جریانی از بایت ها در نظر می گیرد.
-دایرکتوری حاوی لیستی از نام فایل ها به اضافه اشاره گر به inodeهای مرتبط گره های شاخص است که بعدا توضیح داده
می شود .دایرکتوری ها به صورت سلسله مراتبی سازماندهی شده اند شکل .12.6فایل های دایرکتوری در واقع فایل های
معمولی با امتیازات ویژه حفاظت از نوشتن هستند به طوری که فقط سیستم فایل می تواند در آنها بنویسد ،در حالی که
دسترسی خواندن برای برنامه های کاربر در دسترس است.
Special: -حاوی داده ای نیست اما مکانیزمی را برای نگاشت دستگاه های فیزیکی به نام فایل ها ارائه می دهد .از نام فایل ها
برای دسترسی به دستگاه های جانبی مانند پایانه ها و چاپگرها استفاده می شود .هر دستگاه ورودی/خروجی با یک فایل خاص
مرتبط است ،همانطور که در بخش 11.8بحث شد.
-لوله های نامگذاری شده :همانطور که در بخش 6.7بحث شد ،لوله یک مرکز ارتباطات بین فرآیندی است .یک فایل لوله ،داده
های دریافتی را در ورودی خود بافر می کند ،به طوری که فرآیندی که از خروجی لوله خوانده می شود ،داده ها را به صورت اول
در اول دریافت می کند.
-پیوندها :در اصل ،پیوند یک نام فایل جایگزین برای یک فایل موجود است.
-پیوندهای نمادین :این یک فایل داده است که حاوی نام فایلی است که به آن پیوند داده شده است.
در این بخش ،ما به رسیدگی به فایلهای معمولی میپردازیم که با آنچه اکثر سیستمها به عنوان فایل در نظر میگیرند ،مطابقت
دارد.
inodeها
سیستمعاملهای مدرن یونیکس از چندین سیستم فایل پشتیبانی میکنند اما همه اینها را در یک سیستم زیربنایی یکنواخت
برای پشتیبانی از سیستمهای فایل و تخصیص فضای دیسک به فایلها ترسیم میکنند .همه انواع فایل های یونیکس توسط
سیستم عامل بوسیله inodeها مدیریت می شوندInode .گره شاخص یک ساختار کنترلی است که حاوی اطالعات کلیدی
674
سیستم عامل های داخلی و اصول طراحی675.........................................................................................................................
مورد نیاز سیستم عامل برای یک فایل خاص است .نام چندین فایل ممکن است با یک ایند منفرد مرتبط باشد ،اما یک inode
فعال دقیقاً با یک فایل مرتبط است و هر فایل دقیقاً توسط یک اینود کنترل می شود.
ویژگی های فایل و همچنین مجوزهای آن و سایر اطالعات کنترلی در inodeذخیره می شوند .ساختار دقیق inodeاز یک
پیاده سازی یونیکس به دیگری متفاوت است .ساختار inode FreeBSDکه در شکل 12.15نشان داده شده است ،شامل
عناصر داده زیر است:
-زمان ایجاد فایل ،زمانی که اخیرا خوانده و نوشته شده است ،و زمانی که inodeآن اخیرا توسط سیستم به روز شده است.
-دنباله ای از نشانگرهای بلوک ،که در زیربخش بعدی توضیح داده شده است
-تعداد بلوکهای فیزیکی مورد استفاده فایل ،از جمله بلوکهای مورد استفاده برای نگهداری نشانگرها و ویژگیهای غیرمستقیم
-هسته و پرچم های قابل تنظیم توسط کاربر که ویژگی های فایل را توصیف می کند
-شماره تولید فایل عددی انتخاب شده به طور تصادفی که هر بار که فایل جدید به فایل جدید تخصیص داده می شود به
inodeاختصاص می یابد؛ شماره تولید برای شناسایی ارجاعات به فایل های حذف شده استفاده می شود
675
سیستم عامل های داخلی و اصول طراحی676.........................................................................................................................
-اندازه بلوکهای دادهای که توسط inodeارجاع میشوند معموالً همان اندازه بلوک سیستم فایل ،اما گاهی بزرگتر از آن است
مقدار اندازه بلوک معموالً با اندازه بلوک سیستم فایل یکسان است ،اما گاهی اوقات بزرگتر از آن است .در سیستمهای یونیکس
سنتی ،اندازه بلوک ثابت 512بایت استفاده شد FreeBSD .دارای حداقل اندازه بلوک 4096بایت 4کیلوبایت است .اندازه
بلوک می تواند هر توان 2بزرگتر یا مساوی 4096باشد .برای سیستم های فایل معمولی ،اندازه بلوک 8کیلوبایت یا 16
کیلوبایت است .اندازه بلوک پیش فرض FreeBSD 16کیلوبایت است.
ورودیهای ویژگی توسعهیافته ،ورودیهایی با طول متغیر هستند که برای ذخیره دادههای کمکی جدا از محتویات فایل استفاده
میشوند .دو ویژگی توسعه یافته اول تعریف شده برای FreeBSDبا امنیت سروکار دارند .اولین مورد از این لیست های کنترل
دسترسی پشتیبانی می کند .این در فصل 15توضیح داده شده است .دومین ویژگی توسعه یافته تعریف شده از استفاده از
برچسب های امنیتی پشتیبانی می کند ،که بخشی از آنچه به عنوان یک طرح کنترل دسترسی اجباری شناخته می شود،
همچنین در فصل 15تعریف شده است.
بر روی دیسک ،یک جدول inodeیا لیست inodeوجود دارد که حاوی inodeتمام فایلهای سیستم فایل است .هنگامی که
یک فایل باز می شود inode ،آن به حافظه اصلی آورده شده و در جدول inodeساکن حافظه ذخیره می شود.
676
سیستم عامل های داخلی و اصول طراحی677.........................................................................................................................
تخصیص فایل
تخصیص فایل به صورت بلوکی انجام می شود .تخصیص به جای استفاده از پیش تخصیص ،در صورت نیاز پویا است .بنابراین،
بلوک های یک فایل روی دیسک لزوماً به هم پیوسته نیستند .یک روش نمایهسازی شده برای پیگیری هر فایل استفاده میشود
و بخشی از فهرست در inodeفایل ذخیره میشود .در تمام پیادهسازیهای یونیکس inode ،شامل تعدادی اشارهگر مستقیم و
سه اشارهگر غیرمستقیم تک ،دوتایی ،سهگانه است.
Inode FreeBSDشامل 120بایت اطالعات آدرس است که به صورت پانزده آدرس یا اشاره گر 64بیتی سازماندهی شده
است 12 .آدرس اول به 12بلوک داده اول فایل اشاره می کنند .اگر فایل به بیش از 12بلوک داده نیاز دارد ،از یک یا چند
سطح غیر مستقیم به صورت زیر استفاده می شود:
-آدرس سیزدهم در inodeبه بلوکی روی دیسک اشاره می کند که شامل بخش بعدی ایندکس است .به این بلوک غیرمستقیم
واحد می گویند .این بلوک حاوی نشانگرهای بلوک های بعدی در فایل است.
-اگر فایل حاوی بلوک های بیشتری باشد ،آدرس چهاردهم در inodeبه یک بلوک غیرمستقیم دوگانه اشاره می کند .این
بلوک حاوی لیستی از آدرسهای بلوکهای غیرمستقیم دیگر است .هر یک از بلوکهای غیرمستقیم منفرد به نوبه خود حاوی
نشانگرهایی به بلوکهای فایل هستند.
-اگر فایل حاوی بلوک های بیشتری باشد ،آدرس پانزدهم در inodeبه بلوک غیرمستقیم سه گانه اشاره می کند که سطح
سوم نمایه سازی است .این بلوک به بلوک های غیرمستقیم دوگانه اضافی اشاره می کند.
همه اینها در شکل 12.15نشان داده شده است .تعداد کل بلوک های داده در یک فایل به ظرفیت بلوک های با اندازه ثابت در
سیستم بستگی دارد .در ،FreeBSDحداقل اندازه بلوک 4کیلوبایت است و هر بلوک در مجموع می تواند 512آدرس بلوک را
در خود جای دهد .بنابراین ،حداکثر اندازه یک فایل با این اندازه بلوک بیش از 500گیگابایت است جدول .12.3
677
سیستم عامل های داخلی و اصول طراحی678.........................................................................................................................
Inode .1اندازه ثابت و نسبتا کوچکی دارد و از این رو ممکن است برای مدت طوالنی در حافظه اصلی نگهداری شود.
.2فایل های کوچکتر ممکن است با اندک یا بدون جهت غیر مستقیم قابل دسترسی باشند ،که باعث کاهش پردازش و زمان
دسترسی به دیسک می شود.
.3حداکثر اندازه نظری یک فایل به اندازه ای بزرگ است که تقریباً همه برنامه ها را برآورده کند.
دایرکتوری ها
دایرکتوری ها در یک درخت سلسله مراتبی ساختار یافته اند .هر دایرکتوری می تواند حاوی فایل ها و/یا دایرکتوری های دیگری
باشد .دایرکتوری که در داخل دایرکتوری دیگری قرار دارد ،زیر شاخه نامیده می شود .همانطور که ذکر شد ،دایرکتوری به
سادگی فایلی است که حاوی لیستی از نام فایل ها به اضافه اشاره گر به inodeهای مرتبط است .شکل 12.16ساختار کلی را
نشان می دهد .هر ورودی دایرکتوری دنتری حاوی نامی برای فایل یا زیرشاخه مرتبط به اضافه یک عدد صحیح به نام شماره i
شماره فهرست است .هنگامی که به فایل یا دایرکتوری دسترسی پیدا می شود ،شماره iآن به عنوان یک فهرست در جدول
inodeاستفاده می شود.
ساختار حجمی
یک سیستم فایل یونیکس بر روی یک دیسک منطقی یا پارتیشن دیسک قرار دارد و با عناصر زیر چیده شده است:
-بلوک بوت :حاوی کد مورد نیاز برای بوت شدن سیستم عامل است
678
سیستم عامل های داخلی و اصول طراحی679.........................................................................................................................
Superblock: -حاوی ویژگی ها و اطالعات مربوط به سیستم فایل ،مانند اندازه پارتیشن و اندازه جدول inodeاست.
-بلوک های داده :فضای ذخیره سازی موجود برای فایل های داده و زیر شاخه ها
لینوکس شامل یک مرکز مدیریت فایل همه کاره و قدرتمند است که برای پشتیبانی از طیف گسترده ای از سیستم های
مدیریت فایل و ساختارهای فایل طراحی شده است .رویکرد اتخاذ شده در لینوکس استفاده از سیستم فایل مجازی VFSاست
که یک رابط سیستم فایل واحد و یکنواخت را به فرآیندهای کاربر ارائه می دهد VFS .یک مدل فایل رایج را تعریف می کند
که می تواند هر ویژگی و رفتار کلی سیستم فایل قابل تصور را نشان دهد.
VFSفرض میکند که فایلها اشیایی در حافظه ذخیرهسازی انبوه رایانه هستند که بدون توجه به سیستم فایل هدف یا
سختافزار پردازشگر زیرین ،ویژگیهای اساسی را به اشتراک میگذارند .فایلها دارای نامهای نمادین هستند که به آنها اجازه
میدهد تا در یک فهرست خاص در سیستم فایل شناسایی شوند .یک فایل دارای مالک ،محافظت در برابر دسترسی یا تغییر
غیرمجاز و انواع ویژگی های دیگر است .یک فایل ممکن است ایجاد شود ،از آن خوانده شود ،نوشته شود ،یا حذف شود .برای هر
فایل سیستم خاصی ،یک ماژول نقشه برداری برای تبدیل ویژگی های سیستم فایل واقعی به ویژگی های مورد انتظار سیستم
فایل مجازی مورد نیاز است .شکل 12.17اجزای کلیدی استراتژی سیستم فایل لینوکس را نشان می دهد .یک فرآیند کاربر با
استفاده از طرح فایل VFSیک فراخوانی سیستم فایل به عنوان مثال ،خواندن صادر می کند VFS .این را به یک فراخوانی
679
سیستم عامل های داخلی و اصول طراحی680.........................................................................................................................
سیستم فایل داخلی به هسته تبدیل می کند که به یک تابع نقشه برداری برای یک سیستم فایل خاص به عنوان مثالext2 ،
FSدومین فایل سیستم توسعه یافته ارسال می شود .در بیشتر موارد ،تابع نگاشت صرفاً نگاشت فراخوانی های عملکردی
سیستم فایل از یک طرح به طرح دیگر است .در برخی موارد ،تابع نگاشت پیچیده تر است.
به عنوان مثال ،برخی از سیستم های فایل از جدول تخصیص فایل FATاستفاده می کنند که موقعیت هر فایل را در درخت
دایرکتوری ذخیره می کند .در این فایل سیستم ها ،دایرکتوری ها فایل نیستند .برای چنین سیستم های فایلی ،تابع نگاشت باید
بتواند به صورت پویا و در صورت نیاز ،فایل های مربوط به دایرکتوری ها را بسازد.
در هر صورت ،فراخوانی سیستم فایل کاربر اصلی به فراخوانی تبدیل می شود که بومی سیستم فایل هدف است .سپس نرم افزار
سیستم فایل مورد نظر برای انجام عملکرد درخواستی روی یک فایل یا دایرکتوری تحت کنترل و ذخیره سازی ثانویه فراخوانی
می شود .سپس نتایج عملیات به روشی مشابه به کاربر مخابره می شود.
شکل 12.18نقشی را که VFSدر هسته لینوکس ایفا می کند نشان می دهد .هنگامی که یک فرآیند یک فراخوانی سیستم
فایل محور را آغاز می کند به عنوان مثال ،خواندن ،هسته یک تابع را در VFSفراخوانی می کند .این تابع دستکاریهای
مستقل از سیستم فایل را مدیریت میکند و فراخوانی یک تابع در کد فایل سیستم هدف را آغاز میکند .این تماس از طریق یک
تابع نگاشت که تماس را از VFSبه فراخوانی به سیستم فایل هدف تبدیل می کند ،می گذرد VFS .مستقل از هر سیستم
680
سیستم عامل های داخلی و اصول طراحی681.........................................................................................................................
فایلی است ،بنابراین اجرای یک تابع نقشه برداری باید بخشی از اجرای یک سیستم فایل در لینوکس باشد .سیستم فایل هدف
درخواست سیستم فایل را به دستورالعمل های دستگاه گرا تبدیل می کند که با استفاده از توابع کش صفحه به درایور دستگاه
ارسال می شود.
VFSیک طرح شی گرا است .از آنجایی که به جای زبانی که از برنامه نویسی شی مانند C++یا جاوا پشتیبانی می کند ،به
زبان Cنوشته شده است ،اشیاء VFSبه سادگی به عنوان ساختارهای داده Cپیاده سازی می شوند .هر شی شامل داده ها و
اشاره گرهایی برای توابع پیاده سازی شده در سیستم فایل است که بر روی داده ها عمل می کنند .چهار نوع شی اصلی در
VFSبه شرح زیر است:
این طرح بر اساس مفاهیم مورد استفاده در سیستم های فایل یونیکس است که در بخش 12.7توضیح داده شده است .مفاهیم
کلیدی سیستم فایل یونیکس که باید به خاطر بسپارید موارد زیر است .یک سیستم فایل از سازماندهی سلسله مراتبی
دایرکتوری ها تشکیل شده است .دایرکتوری همان چیزی است که در بسیاری از پلتفرم های غیریونیکس به عنوان پوشه
شناخته می شود و ممکن است حاوی فایل ها و/یا دایرکتوری های دیگری باشد .از آنجا که یک دایرکتوری ممکن است شامل
دایرکتوری های دیگری باشد ،یک ساختار درختی تشکیل می شود .یک مسیر از طریق ساختار درختی از ریشه شامل دنباله ای
از ورودی های دایرکتوری است که به یک ورودی دایرکتوری دنتری یا نام فایل ختم می شود.
در یونیکس ،دایرکتوری به صورت فایلی پیاده سازی می شود که فایل ها و دایرکتوری های موجود در آن را فهرست می کند.
بنابراین ،عملیات فایل را می توان بر روی فایل ها یا دایرکتوری ها انجام داد.
شی Superblock
شی superblockاطالعاتی را ذخیره می کند که یک سیستم فایل خاص را توصیف می کند .به طور معمولsuperblock ،
مربوط به superblockسیستم فایل یا بلوک کنترل سیستم فایل است که در بخش خاصی روی دیسک ذخیره می شود.
شی superblockاز تعدادی آیتم داده تشکیل شده است .به عنوان مثال می توان به موارد زیر اشاره کرد:
-پرچم کثیف ،برای نشان دادن اینکه superblockتغییر کرده است اما به دیسک بازگردانده نشده است
آخرین مورد در لیست قبلی به یک شی عملیاتی موجود در شی superblockاشاره دارد .شی عملیات ،متدهای شی توابع را
تعریف می کند که هسته می تواند در برابر شی superblockفراخوانی کند .متدهای تعریف شده برای شی superblock
شامل موارد زیر است:
write_super: -زمانی فراخوانی می شود که VFSتصمیم بگیرد که superblockباید روی دیسک نوشته شود.
remount_fs: -هنگامی که فایل سیستم با گزینه های جدید mountمجدداً نصب می شود توسط VFSفراخوانی می شود.
clear_inode: -inodeرا آزاد کنید و هر صفحه حاوی داده های مرتبط را پاک کنید.
682
سیستم عامل های داخلی و اصول طراحی683.........................................................................................................................
شی Inode
یک inodeبا هر فایل مرتبط است .شی inodeتمام اطالعات مربوط به یک فایل نامگذاری شده را به جز نام آن و محتویات
داده واقعی فایل نگهداری می کند .موارد موجود در یک شی inodeشامل مالک ،گروه ،مجوزها ،زمان دسترسی به یک فایل،
اندازه داده ای که در آن نگهداری می شود و تعداد پیوندها می باشد .شی inodeهمچنین شامل یک شی عملیات inodeاست
که توابع پیاده سازی شده سیستم فایل را توصیف می کند که VFSمی تواند در یک inodeفراخوانی کند .متدهای تعریف
شده برای شی inodeشامل موارد زیر است:
r create:یک inodeجدید برای یک فایل معمولی مرتبط با یک شیء دندانپزشکی در برخی دایرکتوری ها ایجاد می کند
r mkdir:یک inodeجدید برای دایرکتوری مرتبط با یک شی dentryدر برخی دایرکتوری ها ایجاد می کند
شیء دندانپزشکی
دنتری ورودی دایرکتوری یک جزء خاص در یک مسیر است .قطعه بندی ممکن است نام دایرکتوری یا نام فایل باشد .اشیاء
دندانپزشکی جستجوی سریع فایلها و دایرکتوریها را تسهیل میکنند و برای این منظور در کش دندانی استفاده میشوند .شی
دندانه دار شامل یک اشاره گر به inodeو superblockاست .این همچنین شامل یک اشاره گر به دندان های والد و اشاره گر
به هر دندان های فرعی است.
شی فایل
شی فایل برای نمایش فایلی که توسط یک فرآیند باز می شود استفاده می شود .شی در پاسخ به فراخوانی سیستم openایجاد
می شود و در پاسخ به فراخوانی سیستم closeاز بین می رود .شی فایل از تعدادی آیتم تشکیل شده است ،از جمله موارد زیر:
683
سیستم عامل های داخلی و اصول طراحی684.........................................................................................................................
-نشانگر فایل ،که موقعیت فعلی در فایلی است که عملیات بعدی از آنجا انجام خواهد شد
شی فایل همچنین شامل یک شی عملیات inodeاست که توابع پیاده سازی شده سیستم فایل را توصیف می کند که VFS
می تواند روی یک شی فایل فراخوانی کند .روش های تعریف شده برای شی فایل شامل خواندن ،نوشتن ،باز کردن ،آزاد کردن و
قفل کردن است.
Inode cache: -از آنجا که هر فایل و دایرکتوری با یک inode VFSنشان داده می شود ،یک دستور فهرست دایرکتوری یا
یک دستور دسترسی به فایل باعث می شود به تعدادی از inodeها دسترسی پیدا کنید .ذخیرههای کش inodeاخیراً از
inodeبازدید کردهاند تا دسترسی را سریعتر کنند.
-دایرکتوری کش :کش دایرکتوری نگاشت بین نام های کامل دایرکتوری و شماره های ورودی آنها را ذخیره می کند .این کار
روند فهرست کردن یک فهرست را سرعت می بخشد.
-بافر کش :کش بافر مستقل از سیستم فایل است و در مکانیسم هایی که هسته لینوکس برای تخصیص و خواندن و نوشتن
بافرهای داده استفاده می کند ،ادغام شده است .از آنجایی که سیستم های فایل واقعی داده ها را از دیسک های فیزیکی زیرین
می خوانند ،این منجر به درخواست هایی از درایورهای دستگاه بلوک می شود تا بلوک های فیزیکی را از دستگاهی که کنترل
می کنند بخوانند .بنابراین ،اگر همان دادهها اغلب مورد نیاز باشد ،به جای خواندن از دیسک ،از حافظه پنهان بافر بازیابی
میشود.
توسعه دهندگان Windows NTیک سیستم فایل جدید به نام New Technology File System NTFSطراحی
کردند که برای برآوردن نیازهای سطح باال برای ایستگاه های کاری و سرورها در نظر گرفته شده است .نمونه هایی از برنامه های
کاربردی پیشرفته شامل موارد زیر است:
-برنامه های کاربردی سرویس گیرنده/سرور مانند سرورهای فایل ،سرورهای محاسباتی و سرورهای پایگاه داده
-برنامه های کاربردی شبکه برای سیستم های شرکت های بزرگ این بخش یک نمای کلی از NTFSارائه می دهد.
684
سیستم عامل های داخلی و اصول طراحی685.........................................................................................................................
همانطور که خواهیم دید NTFS ،یک فایل سیستم انعطاف پذیر و قدرتمند است که بر روی یک مدل فایل سیستمی ساده و
زیبا ساخته شده است .از مهمترین ویژگی های NTFSمی توان به موارد زیر اشاره کرد:
قابلیت بازیابی :در فهرست الزامات سیستم فایل جدید ویندوز ،توانایی بازیابی از خرابی سیستم و خرابی دیسک در باالترین رتبه
قرار دارد .در صورت بروز چنین خرابی هایی NTFS ،قادر است حجم های دیسک را بازسازی کرده و آنها را به حالت ثابت
بازگرداند .این کار را با استفاده از یک مدل پردازش تراکنش برای تغییرات در سیستم فایل انجام می دهد .هر تغییر قابل توجهی
به عنوان یک عمل اتمی تلقی می شود که یا به طور کامل انجام می شود یا اصال انجام نمی شود .هر معامله ای که در زمان
شکست در حال انجام بود ،متعاقباً عقب نشینی می کند یا تکمیل می شود .عالوه بر این NTFS ،از ذخیرهسازی اضافی برای
دادههای سیستم فایل حیاتی استفاده میکند ،به طوری که خرابی بخش دیسک باعث از دست رفتن دادههایی که ساختار و
وضعیت سیستم فایل را توصیف میکنند ،نمیشود.
-امنیت NTFS :از مدل شی ویندوز برای اعمال امنیت استفاده می کند .یک فایل باز به عنوان یک شی فایل با یک توصیفگر
امنیتی که ویژگی های امنیتی آن را تعریف می کند ،پیاده سازی می شود .توصیفگر امنیتی به عنوان ویژگی هر فایل روی
دیسک باقی می ماند.
-دیسکهای بزرگ و فایلهای بزرگ NTFS :از دیسکهای بسیار بزرگ و فایلهای بسیار بزرگ با کارایی بیشتری نسبت به
سایر سیستمهای فایل مانند FATپشتیبانی میکند.
-جریان های داده چندگانه :محتویات واقعی یک فایل به عنوان جریانی از بایت ها در نظر گرفته می شود .در NTFSامکان
تعریف چندین جریان داده برای یک فایل وجود دارد .نمونه ای از کاربرد این ویژگی این است که به ویندوز اجازه می دهد تا
توسط سیستم های مکینتاش راه دور برای ذخیره و بازیابی فایل ها استفاده شود .در مکینتاش ،هر فایل دارای دو جزء است:
داده های فایل و یک منبع forkکه حاوی اطالعات مربوط به فایل است NTFS .این دو جزء را به عنوان دو جریان داده در
یک فایل واحد در نظر می گیرد.
Journaling: NTFS-گزارشی از تمام تغییرات ایجاد شده در فایلها روی حجمها نگه میدارد .برنامه هایی مانند جستجوی
دسکتاپ می توانند مجله را بخوانند تا بفهمند چه فایل هایی تغییر کرده اند.
-فشرده سازی و رمزگذاری :کل فهرست ها و فایل های فردی را می توان به صورت شفاف فشرده و/یا رمزگذاری کرد.
پیوندهای سخت و نمادین :به منظور پشتیبانی از ،POSIXویندوز همیشه از «پیوندهای سخت» پشتیبانی میکند که به یک
فایل اجازه میدهد با نام مسیرهای متعدد در یک حجم قابل دسترسی باشد .با شروع با ویندوز ویستا" ،پیوندهای نمادین"
685
سیستم عامل های داخلی و اصول طراحی686.........................................................................................................................
پشتیبانی می شوند که به یک فایل یا دایرکتوری اجازه می دهد با نام مسیرهای متعدد قابل دسترسی باشد ،حتی اگر نام ها در
حجم های مختلف باشند .ویندوز همچنین از «نقاط اتصال» پشتیبانی میکند که به حجمها اجازه میدهد در نقاط اتصال سایر
ولومها ظاهر شوند ،نه اینکه با حروف درایور ،مانند « »D:نامگذاری شوند.
Sector: -کوچکترین واحد ذخیره سازی فیزیکی روی دیسک .اندازه داده ها بر حسب بایت توان 2و تقریباً همیشه 512بایت
است.
Cluster: -یک یا چند بخش به هم پیوسته در کنار یکدیگر روی دیسک .اندازه خوشه در بخش ها توان 2است.
Volume: -یک پارتیشن منطقی روی یک دیسک که از یک یا چند خوشه تشکیل شده و توسط یک سیستم فایل برای
تخصیص فضا استفاده می شود .در هر زمان ،یک جلد شامل اطالعات سیستم فایل ،مجموعهای از فایلها و هر فضای
تخصیصنخورده اضافی باقیمانده روی حجم است که میتوان به فایلها اختصاص داد .یک حجم می تواند تمام یا بخشی از یک
دیسک واحد باشد یا می تواند در چندین دیسک گسترش یابد .اگر RAID 5سختافزاری یا نرمافزاری استفاده میشود ،یک
جلد شامل نوارهایی است که چندین دیسک را در بر میگیرد .حداکثر اندازه حجم برای NTFS 264کالستر است.
خوشه واحد اساسی تخصیص در NTFSاست که بخش ها را تشخیص نمی دهد .به عنوان مثال ،فرض کنید هر بخش 512
بایت است و سیستم با دو بخش در هر خوشه یک خوشه K1بایت پیکربندی شده است .اگر کاربر یک فایل 1600بایتی ایجاد
کند ،دو خوشه به فایل اختصاص داده می شود .بعداً ،اگر کاربر فایل را به 3200بایت به روز کند ،دو خوشه دیگر به آن
اختصاص داده می شود .خوشه های تخصیص داده شده به یک فایل الزم نیست به هم پیوسته باشند .قطعه قطعه کردن یک
فایل روی دیسک مجاز است .در حال حاضر حداکثر اندازه فایل پشتیبانی شده توسط NTFS 232کالستر است که معادل
حداکثر 248بایت است .یک خوشه حداکثر می تواند 216بایت داشته باشد.
استفاده از خوشه ها برای تخصیص NTFS ،را مستقل از اندازه بخش فیزیکی می کند .این NTFSرا قادر میسازد تا از
دیسکهای غیراستانداردی که اندازه بخش 512بایتی ندارند ،به راحتی پشتیبانی کند و با استفاده از اندازه کالستر بزرگتر ،از
دیسکهای بسیار بزرگ و فایلهای بسیار بزرگ به طور موثر پشتیبانی کند .کارایی از این واقعیت ناشی می شود که سیستم
فایل باید هر خوشه اختصاص داده شده به هر فایل را پیگیری کند .با خوشه های بزرگتر ،آیتم های کمتری برای مدیریت وجود
دارد.
686
سیستم عامل های داخلی و اصول طراحی687.........................................................................................................................
جدول 12.4اندازه های کالستر پیش فرض را برای NTFSنشان می دهد .پیش فرض ها به اندازه صدا بستگی دارد .اندازه
خوشه ای که برای یک حجم خاص استفاده می شود توسط NTFSزمانی تعیین می شود که کاربر درخواست فرمت کردن یک
جلد را داشته باشد.
طرح بندی حجم NTFS NTFSاز یک رویکرد ساده اما قدرتمند برای سازماندهی اطالعات روی حجم دیسک استفاده می
کند .هر عنصر در یک جلد یک فایل است و هر فایل از مجموعه ای از ویژگی ها تشکیل شده است .حتی محتویات داده یک
فایل به عنوان یک ویژگی در نظر گرفته می شود .با این ساختار ساده ،چند تابع همه منظوره برای سازماندهی و مدیریت یک
سیستم فایل کافی است.
شکل 12.19طرح یک حجم NTFSرا نشان می دهد که از چهار منطقه تشکیل شده است .چند سکتور اول در هر حجمی
توسط بخش بوت پارتیشن اشغال می شود اگرچه به آن سکتور گفته می شود ،اما می تواند تا 16سکتور طول داشته باشد که
حاوی اطالعاتی در مورد طرح حجم و ساختار سیستم فایل و همچنین بوت است .اطالعات راه اندازی و کد به دنبال آن جدول
فایل اصلی MFTقرار می گیرد که حاوی اطالعاتی درباره همه فایل ها و پوشه ها دایرکتوری ها در این حجم NTFSاست.
در اصل MFT ،لیستی از تمام فایل ها و ویژگی های آنها در این حجم NTFSاست که به عنوان مجموعه ای از ردیف ها در
687
سیستم عامل های داخلی و اصول طراحی688.........................................................................................................................
ساختار جدول سازماندهی شده است .پس از ،MFTمنطقه ای حاوی فایل های سیستمی است .از جمله فایل های موجود در
این منطقه می توان به موارد زیر اشاره کرد:
MFT2: -آینه ای از چند ردیف اول MFTکه برای تضمین دسترسی به صدا در صورت خرابی تک بخش در بخش های
ذخیره کننده MFTاستفاده می شود.
-فایل گزارش :فهرستی از مراحل تراکنش مورد استفاده برای بازیابی NTFS
-نقشه بیت خوشه ای :نمایشی از فضای روی حجم ،که نشان می دهد کدام خوشه ها در حال استفاده هستند.
Attribute Descrip
Type tion
اطالعات استاندارد شامل ویژگی های دسترسی فقط خواندنی ،خواندنی/نوشتنی ،و غیره
است .تمبرهای زمانی ،از جمله زمانی که فایل ایجاد شده یا آخرین بار
اصالح شده است .و چند دایرکتوری به فایل اشاره می کنند تعداد
پیوندها
فهرستی از ویژگیهایی که فایل را تشکیل میدهند و مرجع فایل رکورد فهرست صفات
فایل MFTکه هر ویژگی در آن قرار دارد .زمانی استفاده می شود که
همه ویژگی ها در یک رکورد فایل MFTقرار نگیرند
نام فایل یک فایل یا دایرکتوری باید یک یا چند نام داشته باشد.
مشخص می کند چه کسی مالک فایل است و چه کسی می تواند به آن توصیفگر امنیتی
دسترسی داشته باشد
688
سیستم عامل های داخلی و اصول طراحی689.........................................................................................................................
داده ها محتویات فایل .یک فایل دارای یک ویژگی داده بی نام پیش فرض و
ممکن است
اطالعات حجم شامل اطالعات مربوط به حجم ،مانند نسخه و نام جلد است
بیت مپ نقشه ای ارائه می دهد که سوابق مورد استفاده در MFTیا پوشه را
نشان می دهد
جدول تعریف ویژگی :انواع ویژگی های پشتیبانی شده در این جلد را تعریف می کند و نشان می دهد که آیا می توان آنها را
نمایه کرد و آیا می توان آنها را در طی عملیات بازیابی سیستم بازیابی کرد یا خیر.
MASTER FILE TABLEقلب فایل سیستم ویندوز MFTاست MFT .به صورت جدولی از ردیف های 1024بایتی
سازماندهی شده است که رکورد نامیده می شود .هر ردیف یک فایل را در این حجم توصیف می کند ،از جمله خود MFTکه
به عنوان یک فایل در نظر گرفته می شود .اگر محتویات یک فایل به اندازه کافی کوچک باشد ،کل فایل در یک ردیف از MFT
قرار دارد .در غیر این صورت ،ردیف مربوط به آن فایل حاوی اطالعات جزئی است و باقیمانده فایل به دیگر خوشههای موجود
روی حجم ،با اشارهگرهایی به آن دستهها در ردیف MFTآن فایل ،ریخته میشود .هر رکورد در MFTشامل مجموعهای از
ویژگیها است که برای تعریف ویژگیهای فایل یا پوشه و محتویات فایل کار میکنند .جدول 12.5ویژگی هایی را که ممکن
است در یک ردیف یافت شوند ،فهرست می کند که ویژگی های مورد نیاز با سایه زدن نشان داده شده است.
689
سیستم عامل های داخلی و اصول طراحی690.........................................................................................................................
قابلیت بازیابی
NTFSامکان بازیابی فایل سیستم را به حالت ثابت در پی خرابی سیستم یا خرابی دیسک فراهم می کند .عناصر کلیدی که از
قابلیت بازیابی پشتیبانی می کنند به شرح زیر است شکل :12.20
r I/O manager:شامل درایور NTFSاست که توابع اولیه باز کردن ،بستن ،خواندن و نوشتن NTFSرا مدیریت می کند.
عالوه بر این ،نرم افزار ماژول RAID FTDISKرا می توان برای استفاده پیکربندی کرد.
-سرویس فایل گزارش :گزارشی از تغییرات فراداده سیستم فایل را روی دیسک نگهداری می کند .فایل logبرای بازیابی یک
حجم با فرمت NTFSدر صورت خرابی سیستم به عنوان مثال ،بدون نیاز به اجرای ابزار بررسی سیستم فایل استفاده می شود.
I/Oمدیر
ثبت معامله
سرویس
فایل درایور خواندن/نوشتن
الگ NTFS یک جلد آینه ای یا
راه راه
درایور مقاوم
فایل الگ را کش را در برابر خطا
فالش کنید بنویسید خواندن/نوشتن
دیسک
درایور
دیسک
مدیر کش بارگذاری
اطالعات از
دیسک در
به فایل نگاشت شده دسترسی حافظه
پیدا کنید یا کش را پاک کنید
مدیر حافظه
مجازی
Cache manager: -مسئول ذخیره سازی خواندن و نوشتن فایل برای افزایش کارایی است .مدیر کش ورودی/خروجی
دیسک را بهینه می کند.
690
سیستم عامل های داخلی و اصول طراحی691.........................................................................................................................
-مدیریت حافظه مجازی NTFS :با نگاشت ارجاعات فایل به مراجع حافظه مجازی و خواندن و نوشتن حافظه مجازی به فایل
های کش دسترسی پیدا می کند.
توجه به این نکته مهم است که رویه های بازیابی مورد استفاده توسط NTFSبرای بازیابی فراداده سیستم فایل طراحی شده
اند ،نه محتویات فایل .بنابراین ،کاربر هرگز نباید حجم یا ساختار دایرکتوری/فایل یک برنامه را به دلیل خرابی از دست بدهد .با
این حال ،اطالعات کاربر توسط سیستم فایل تضمین نمی شود .ارائه قابلیت بازیابی کامل ،از جمله دادههای کاربر ،تسهیالت
بازیابی بسیار پیچیدهتر و مصرفبر منابع را ایجاد میکند.
ماهیت قابلیت بازیابی NTFSورود به سیستم است .هر عملیاتی که یک سیستم فایل را تغییر می دهد به عنوان یک تراکنش
در نظر گرفته می شود .هر عملیات فرعی یک تراکنش که ساختارهای داده سیستم فایل مهم را تغییر می دهد ،قبل از اینکه
روی حجم دیسک ثبت شود ،در یک فایل گزارش ثبت می شود .با استفاده از گزارش ،یک تراکنش نیمه تکمیل شده در زمان
خرابی میتواند بعداً پس از بازیابی سیستم دوباره انجام شود یا لغو شود.
به طور کلی ،اینها مراحلی هستند که برای اطمینان از قابلیت بازیابی ،همانطور که در RUSS11توضیح داده شده است:
NTFS .1ابتدا سیستم فایل logرا فراخوانی می کند تا هر تراکنشی را که ساختار حجم را تغییر می دهد در فایل logدر
حافظه پنهان ثبت کند.
.3مدیر حافظه پنهان سیستم فایل الگ را فراخوانی می کند تا از آن بخواهد فایل گزارش را روی دیسک تخلیه کند.
.4هنگامی که بهروزرسانی فایل الگ به طور ایمن روی دیسک قرار میگیرد ،مدیر کش تغییرات حجم را روی دیسک پاک
میکند.
سیستم فایل
اندروید از قابلیت های مدیریت فایل ساخته شده در لینوکس استفاده می کند .دایرکتوری سیستم فایل اندروید مشابه چیزی
است که در یک نصب لینوکس معمولی دیده می شود و دارای برخی ویژگی های خاص اندروید است .شکل 12.21سطوح باالی
دایرکتوری سیستم فایل اندروید معمولی را نشان می دهد .دایرکتوری سیستم شامل بخش های اصلی سیستم عامل ،از جمله
باینری های سیستم ،کتابخانه های سیستم و فایل های پیکربندی است .همچنین شامل مجموعه ای اساسی از برنامه های
اندروید مانند ساعت زنگ دار ،ماشین حساب و دوربین است .تصویر سیستم قفل شده است ،با دسترسی فقط خواندنی به
691
سیستم عامل های داخلی و اصول طراحی692.........................................................................................................................
کاربران سیستم فایل .دایرکتوری های باقی مانده که در شکل 12.21نشان داده شده اند ،خواندن و نوشتن هستند .دایرکتوری
داده مکان اصلی مورد استفاده برنامه ها را برای ذخیره فایل ها فراهم می کند .هنگامی که یک برنامه جدید در سیستم نصب
می شود ،اقدامات زیر ،از جمله ،با توجه به فهرست داده ها انجام می شود:
-کتابخانه های برنامه محور در data/data/<application name> /نصب می شوند .این یک ناحیه جعبه ایمنی مخصوص
برنامه است که توسط برنامه قابل دسترسی است اما برای سایر برنامه ها قابل دسترسی نیست.
-پایگاه داده فایل های مربوط به برنامه راه اندازی شده است.
دایرکتوری کش برای ذخیره سازی موقت برنامه ها استفاده می شود .این پارتیشنی است که Androidدادهها و اجزای برنامه
را که اغلب به آنها دسترسی دارند را ذخیره میکند .پاک کردن حافظه نهان بر روی داده های شخصی شما تأثیر نمی گذارد،
بلکه به سادگی از شر داده های موجود در آنجا خالص می شود ،که با ادامه استفاده از دستگاه ،به طور خودکار بازسازی می
شود.
دایرکتوری mnt/sdcardیک پارتیشن روی حافظه داخلی دستگاه نیست ،بلکه کارت SDاست که یک کارت حافظه غیرفرار
است که می تواند با دستگاه های اندرویدی ادغام شود .کارت SDیک کارت حافظه قابل جابجایی است که کاربر می تواند آن را
جدا کرده و به رایانه خود وصل کند .از نظر استفاده ،این فضای ذخیره سازی کاربر برای کاربر برای خواندن/نوشتن داده ها از هر
نوع ،مانند داده ،فایل های صوتی و تصویری است .در دستگاههای دارای کارت SDداخلی و خارجی ،پارتیشن sdcard/همیشه
برای اشاره به کارت SDداخلی استفاده میشود .برای کارت SDخارجی ،در صورت وجود ،از یک پارتیشن جایگزین استفاده
می شود که از دستگاهی به دستگاه دیگر متفاوت است.
692
سیستم عامل های داخلی و اصول طراحی693.........................................................................................................................
SQLite
SQLiteکه مبتنی بر SQLاست ،قابل ذکر است .زبان پرس و جو ساختاریافته SQLبه عنوان ابزار استاندارد شده برای
تعریف و دسترسی به یک پایگاه داده رابطه ای توسط یک کاربر یا برنامه محلی یا راه دور فراهم می کند .زبان پرس و جو
ساختاریافته ،SQLکه در ابتدا توسط IBMدر اواسط دهه 1970توسعه یافت ،یک زبان استاندارد شده است که می تواند
برای تعریف طرحواره ،دستکاری ،و داده های پرس و جو در یک پایگاه داده رابطه ای استفاده شود .نسخههای مختلفی از
استاندارد ANSI/ISOو انواع مختلفی از پیادهسازیها وجود دارد ،اما همگی از یک نحو اولیه و معنایی پیروی میکنند.
SQLiteگسترده ترین موتور پایگاه داده SQLدر جهان است .این برای ارائه یک سیستم مدیریت پایگاه داده مبتنی بر SQL
ساده و مناسب برای سیستم های جاسازی شده و سایر سیستم های با حافظه محدود طراحی شده است .کتابخانه کامل
SQLiteرا می توان در کمتر از 400کیلوبایت KBپیاده سازی کرد .ویژگیهای غیرضروری را میتوان در زمان اجرا غیرفعال
کرد تا در صورت تمایل ،حجم کتابخانه را به کمتر از 190کیلوبایت کاهش دهد.
برخالف سایر سیستم های مدیریت پایگاه داده SQLite ،یک فرآیند جداگانه نیست که از برنامه مشتری قابل دسترسی باشد.
درعوض ،کتابخانه SQLiteبه آن متصل می شود و به این ترتیب بخشی جدایی ناپذیر از برنامه کاربردی می شود.
12.12خالصه
سیستم مدیریت فایل مجموعه ای از نرم افزارهای سیستمی است که خدماتی را به کاربران و برنامه های کاربردی در استفاده از
فایل ها از جمله دسترسی به فایل ،نگهداری دایرکتوری و کنترل دسترسی ارائه می دهد.
693
سیستم عامل های داخلی و اصول طراحی694.........................................................................................................................
سیستم مدیریت فایل معموالً به عنوان یک سرویس سیستمی در نظر گرفته می شود که به جای اینکه بخشی از خود سیستم
عامل باشد ،توسط سیستم عامل ارائه می شود .با این حال ،در هر سیستمی ،حداقل بخشی از عملکرد مدیریت فایل توسط
سیستم عامل انجام می شود.
یک فایل از مجموعه ای از رکوردها تشکیل شده است .نحوه دسترسی به این رکوردها سازماندهی منطقی آن و تا حدودی
سازمان فیزیکی آن بر روی دیسک را تعیین می کند .اگر قرار است یک فایل در درجه اول به عنوان یک کل پردازش شود،
سازماندهی فایل متوالی ساده ترین و مناسب ترین است .اگر دسترسی متوالی مورد نیاز است ،اما دسترسی تصادفی به فایل
فردی نیز مورد نظر است ،آنگاه یک فایل متوالی نمایه شده ممکن است بهترین عملکرد را داشته باشد .اگر دسترسی به فایل
اصوالً تصادفی باشد ،یک فایل نمایه شده یا فایل هش شده ممکن است مناسب ترین باشد.
هر ساختار فایلی که انتخاب شود ،یک سرویس دایرکتوری نیز مورد نیاز است .این اجازه می دهد تا فایل ها به صورت سلسله
مراتبی سازماندهی شوند .این سازمان برای کاربر در پیگیری پرونده ها مفید است و برای سیستم مدیریت فایل در ارائه کنترل
دسترسی و سایر خدمات به کاربران مفید است.
رکوردهای فایل ،حتی زمانی که اندازه ثابتی دارند ،معموالً با اندازه یک بلوک دیسک فیزیکی مطابقت ندارند .بر این اساس ،نوعی
استراتژی مسدودسازی مورد نیاز است .یک مبادله بین پیچیدگی ،عملکرد و استفاده از فضا ،استراتژی مسدود کردن مورد
استفاده را تعیین می کند.
یکی از عملکردهای کلیدی هر طرح مدیریت فایل ،مدیریت فضای دیسک است .بخشی از این تابع ،استراتژی تخصیص بلوک
های دیسک به یک فایل است .روشهای مختلفی بهکار گرفته شدهاند ،و انواع ساختارهای داده برای پیگیری تخصیص برای هر
فایل استفاده شدهاند .عالوه بر این ،فضای روی دیسکی که تخصیص داده نشده است باید مدیریت شود .این تابع دوم در درجه
اول شامل حفظ یک جدول تخصیص دیسک است که نشان می دهد کدام بلوک ها رایگان هستند.
VENU09یک رویکرد طراحی شی گرا برای پیاده سازی ساختار فایل ارائه می دهدCOME79 .بحث کاملی از درختان B
ارائه می دهدCORM09 .و KNUT98نیز شامل درمان های خوبی هستند.
سیستم فایل لینوکس به تفصیل در LOVE10و BOVE06بررسی شده است .یک نمای کلی خوب RUBI97است.
694
سیستم عامل های داخلی و اصول طراحی695.........................................................................................................................
کلمات کلیدی
695
سیستم عامل های داخلی و اصول طراحی696.........................................................................................................................
بررسی سواالت
.12.6چرا میانگین زمان جستجو برای یافتن رکورد در یک فایل برای یک فایل متوالی نمایه شده کمتر از یک فایل متوالی
است؟
.12.9حقوق دسترسی معمولی که ممکن است برای یک فایل خاص به یک کاربر خاص اعطا یا رد شود چیست؟
.12.11سه روش تخصیص فایل را فهرست کرده و به طور خالصه تعریف کنید.
چالش ها و مسائل
.12.1تعریف کردن:
یک فرمول برای Fبرای سه روش مسدود کردن نشان داده شده در شکل 12.8ارائه دهید.
696
سیستم عامل های داخلی و اصول طراحی697.........................................................................................................................
.12.2یک طرح برای جلوگیری از مشکل پیش تخصیص در مقابل ضایعات یا عدم مجاورت ،تخصیص بخش هایی با اندازه
افزایش یافته با بزرگ شدن فایل است .به عنوان مثال ،با اندازه یک بلوک شروع کنید و اندازه بخش را برای هر تخصیص دو برابر
کنید .فایلی از nرکورد با ضریب مسدودکننده Fرا در نظر بگیرید و فرض کنید که از یک نمایه ساده یک سطحی به عنوان
جدول تخصیص فایل استفاده می شود.
آ .یک حد باالیی برای تعداد ورودی ها در جدول تخصیص فایل به عنوان یک تابع در نظر بگیرید .یون Fو n.
ب حداکثر مقدار فضای فایل اختصاص داده شده که در هر زمان استفاده نشده است چقدر است؟
.12.3چه سازمان فایلی را برای به حداکثر رساندن کارایی از نظر سرعت دسترسی ،استفاده از فضای ذخیره سازی و سهولت به
روز رسانی افزودن/حذف/تغییر انتخاب می کنید.
آ .به ندرت به روز می شود و مرتباً به ترتیب تصادفی به آن دسترسی دارید؟
ب به طور مکرر به روز می شود و به طور کامل به طور نسبتاً مکرر به آن دسترسی دارید؟
.12.4برای درخت Bدر شکل ،c12.4نتیجه درج کلید 97را نشان دهید.
.12.5یک الگوریتم جایگزین برای درج در درخت Bبه شرح زیر است :همانطور که الگوریتم درج در درخت حرکت می کند ،هر
گره کاملی که با آن مواجه می شود بالفاصله تقسیم می شود ،حتی اگر معلوم شود که تقسیم غیرضروری بوده است.
ب معایب چیست؟
.12.6هر دو جستجو و زمان درج برای درخت Bتابعی از ارتفاع درخت هستند .ما می خواهیم معیاری برای بدترین حالت
جستجو یا زمان درج ایجاد کنیم .یک درخت Bبا درجه dرا در نظر بگیرید که در مجموع nکلید دارد .یک نابرابری ایجاد
کنید که کران باالیی را در ارتفاع hدرخت به عنوان تابعی از dو nنشان دهد.
.12.7با نادیده گرفتن سربار دایرکتوری ها و توصیفگرهای فایل ،سیستم فایلی را در نظر بگیرید که در آن فایل ها در بلوک
های 16کیلوبایتی ذخیره می شوند .برای هر یک از اندازه فایل های زیر ،درصد فضای فایل هدر رفته به دلیل پر نشدن کامل
آخرین بلوک را محاسبه کنید 41600 :بایت 640000 .بایت; 4.064000بایت.
697
سیستم عامل های داخلی و اصول طراحی698.........................................................................................................................
.12.9دایرکتوری ها می توانند به صورت «فایل های ویژه» که فقط به روش های محدود قابل دسترسی هستند یا به عنوان
فایل های داده معمولی پیاده سازی شوند .مزایا و معایب هر رویکرد چیست؟
.12.10برخی از سیستم عامل ها دارای یک سیستم فایل با ساختار درختی هستند اما عمق درخت را به تعداد کمی از سطوح
محدود می کنند .این محدودیت چه تاثیری روی کاربران دارد؟ چگونه طراحی سیستم فایل را ساده می کند اگر اینطور باشد؟
.12.11یک سیستم فایل سلسله مراتبی را در نظر بگیرید که در آن فضای خالی دیسک در یک لیست فضای آزاد نگهداری می
شود.
آ .فرض کنید نشانگر فضای خالی گم شده است .آیا سیستم می تواند لیست فضای آزاد را بازسازی کند؟
ب طرحی را پیشنهاد کنید تا اطمینان حاصل شود که نشانگر هرگز در نتیجه یک شکست حافظه گم نمی شود.
.12.12در ،UNIX System Vطول یک بلوک 1کیلوبایت است و هر بلوک در مجموع می تواند 256آدرس بلوک را در
خود جای دهد .با استفاده از طرح ،inodeحداکثر اندازه یک فایل چقدر است؟
.12.13سازماندهی یک فایل UNIXرا همانطور که توسط inodeنشان داده شده است در نظر بگیرید شکل .12.15فرض
کنید 12نشانگر بلوک مستقیم و یک نشانگر غیرمستقیم تکی ،مضاعف و سه گانه در هر ایند وجود دارد .عالوه بر این ،فرض
کنید که اندازه بلوک سیستم و اندازه بخش دیسک هر دو K8هستند .اگر نشانگر بلوک دیسک 32بیت باشد ،با 8بیت برای
شناسایی دیسک فیزیکی و 24بیت برای شناسایی بلوک فیزیکی ،سپس
آ .حداکثر اندازه فایل پشتیبانی شده توسط این سیستم چقدر است؟
ب حداکثر پارتیشن فایل سیستمی که توسط این سیستم پشتیبانی می شود چقدر است؟
ج با فرض اینکه هیچ اطالعات دیگری به جز این که فایل inodeاز قبل در حافظه اصلی است ،برای دسترسی به بایت در
موقعیت 13،423،956به چند دسترسی دیسک نیاز است؟
698
سیستم عامل های داخلی و اصول طراحی699.........................................................................................................................
فصل 13
13.2ویژگی های سیستم عامل های جاسازی شده تطبیق یک سیستم عامل تجاری موجود سیستم عامل تعبیه شده با هدف
13.3لینوکس جاسازی شده /گردآوری اندازه هسته /سیستم های فایل لینوکس جاسازی شده مزایای لینوکس جاسازی شده
اندروید
TinyOS 13.4
قطعه بندی های TinyOSپیکربندی نمونه برنامه زمانبندی TinyOSرابط منبع TinyOS
اهداف یادگیری
699
سیستم عامل های داخلی و اصول طراحی700.........................................................................................................................
در این فصل به بررسی یکی از مهم ترین و پرکاربردترین دسته سیستم عامل ها می پردازیم :سیستم عامل های تعبیه شده.
محیط سیستم تعبیه شده الزامات منحصر به فرد و سختی را برای سیستم عامل ایجاد می کند و استراتژی های طراحی کامالً
متفاوت از آنچه در سیستم عامل های معمولی وجود دارد را می طلبد.
ما با مروری بر مفهوم سیستم های تعبیه شده شروع می کنیم و سپس به بررسی اصول سیستم عامل های تعبیه شده می
پردازیم .در نهایت ،این فصل دو رویکرد بسیار متفاوت برای طراحی سیستمعامل جاسازی شده را بررسی میکند :لینوکس
جاسازی شده و TinyOS.پیوست Qدر مورد ،eCosیکی دیگر از سیستم عامل های جاسازی شده مهم بحث می کند.
اصطالح سیستم جاسازی شده به استفاده از لوازم الکترونیکی و نرم افزار در یک محصول اشاره دارد ،برخالف رایانه های همه
منظوره ،مانند لپ تاپ یا سیستم رومیزی .تعریف زیر یک تعریف کلی خوب است1 :
سیستم جاسازی شده :ترکیبی از سختافزار و نرمافزار رایانه و احتماالً قطعات مکانیکی یا دیگر قطعات دیگر که برای انجام یک
عملکرد اختصاصی طراحی شدهاند .در بسیاری از موارد ،سیستم های تعبیه شده بخشی از یک سیستم یا محصول بزرگتر
هستند ،مانند سیستم ترمز ضد قفل در خودرو.
اغلب ،سیستم های تعبیه شده به شدت با محیط خود جفت می شوند .این میتواند باعث ایجاد محدودیتهای بالدرنگی شود که
ناشی از نیاز به تعامل با محیط است .محدودیتها ،مانند سرعت مورد نیاز حرکت ،دقت مورد نیاز اندازهگیری ،و مدت زمان مورد
نیاز ،زمانبندی عملیات نرمافزار را دیکته میکنند .اگر چندین فعالیت باید به طور همزمان مدیریت شوند ،این محدودیت های
زمان حقیقی پیچیده تری را تحمیل می کند.
شکل ،13.1بر اساس ،KOOP96به طور کلی یک سازمان سیستم تعبیه شده را نشان می دهد .عالوه بر پردازنده و حافظه،
تعدادی عنصر وجود دارد که با کامپیوترهای رومیزی یا لپ تاپ معمولی متفاوت است:
-ممکن است واسط های مختلفی وجود داشته باشد که سیستم را قادر می سازد تا اندازه گیری ،دستکاری و در غیر این صورت
با محیط خارجی تعامل داشته باشد.
700
سیستم عامل های داخلی و اصول طراحی701.........................................................................................................................
رابط انسان ممکن است به سادگی یک چراغ چشمک زن یا به پیچیدگی دید روباتیک بالدرنگ باشد.
-پورت تشخیصی ممکن است برای عیب یابی سیستمی که در حال کنترل است استفاده شود -نه فقط برای عیب یابی رایانه
جاسازی شده.
-ممکن است برای افزایش عملکرد یا ایمنی از سختافزارهای غیردیجیتال قابل برنامهریزی ،FPGAبرنامههای کاربردی خاص
ASICیا حتی غیردیجیتال استفاده شود.
یک سیستم تعبیه شده ساده ،با عملکرد ساده ،ممکن است توسط یک برنامه با هدف خاص یا مجموعه ای از برنامه ها بدون نرم
افزار دیگر کنترل شود .به طور معمول ،سیستمهای تعبیهشده پیچیدهتر شامل یک سیستمعامل هستند .اگرچه اصوالً استفاده از
یک سیستم عامل همه منظوره مانند لینوکس برای یک سیستم تعبیه شده امکان پذیر است ،محدودیت فضای حافظه ،مصرف
انرژی و نیازهای بالدرنگ معموالً استفاده از یک سیستم عامل با هدف خاص طراحی شده برای سیستم جاسازی شده را دیکته
می کند.
محیط سیستم
در زیر برخی از ویژگی های منحصر به فرد و الزامات طراحی برای سیستم عامل های تعبیه شده آورده شده است:
-عملیات بالدرنگ :در بسیاری از سیستم های تعبیه شده ،صحت یک محاسبات تا حدی به زمان تحویل آن بستگی دارد .اغلب،
محدودیتهای بالدرنگ توسط ورودی/خروجی خارجی و الزامات ثبات کنترل دیکته میشوند.
701
سیستم عامل های داخلی و اصول طراحی702.........................................................................................................................
-عملیات واکنشی :نرم افزار تعبیه شده ممکن است در پاسخ به رویدادهای خارجی اجرا شود .اگر این رویدادها به صورت دورهای
یا در فواصل قابل پیشبینی رخ ندهند ،ممکن است نرمافزار تعبیهشده نیاز داشته باشد که بدترین شرایط را در نظر بگیرد و
اولویتهایی را برای اجرای روتینها تعیین کند.
-پیکربندی :به دلیل تنوع زیاد سیستمهای تعبیهشده ،تنوع زیادی در الزامات ،هم از نظر کیفی و هم کمی ،برای عملکرد
سیستمعامل تعبیهشده وجود دارد .بنابراین ،یک سیستمعامل تعبیهشده که برای استفاده در انواع سیستمهای تعبیهشده در نظر
گرفته شده است ،باید خود را به پیکربندی انعطافپذیری مجهز کند تا تنها عملکرد مورد نیاز برای یک برنامه خاص و مجموعه
سختافزاری ارائه شودMARW06 .مثال های زیر را ارائه می دهد .توابع پیوند و بارگذاری را می توان برای انتخاب تنها ماژول
های سیستم عامل ضروری برای بارگیری استفاده کرد .می توان از اجرا مشروط استفاده کرد .اگر از ساختار شی گرا استفاده
شود ،می توان زیر کالس های مناسبی را تعریف کرد .با این حال ،تأیید یک مشکل بالقوه برای طرح هایی با تعداد زیادی از
سیستم عامل های سفارشی مشتق شده است Takada .از این به عنوان یک مشکل بالقوه برای eCos TAKA01یاد می
کند.
-انعطاف پذیری دستگاه ورودی/خروجی :عمالً هیچ دستگاهی وجود ندارد که نیاز به پشتیبانی از تمامی نسخه های سیستم
عامل داشته باشد و محدوده دستگاه های ورودی/خروجی زیاد استMARW06 .نشان میدهد که مدیریت دستگاههای نسبتاً
کند مانند دیسکها و رابطهای شبکه با استفاده از وظایف ویژه به جای ادغام درایوهای آنها در هسته سیستم عامل منطقی
است.
-مکانیسم های حفاظت کارآمد :سیستم های تعبیه شده معموالً برای یک عملکرد محدود و کامالً تعریف شده طراحی می
شوند .برنامه های تست نشده به ندرت به نرم افزار اضافه می شوند .پس از پیکربندی و تست نرم افزار ،می توان آن را قابل
اعتماد فرض کرد .بنابراین ،جدا از اقدامات امنیتی ،سیستمهای تعبیهشده مکانیسمهای حفاظتی محدودی دارند .برای مثال،
دستورالعملهای ورودی/خروجی ،نیازی به دستورالعملهای ممتازی ندارند که در سیستم عامل به دام بیفتند .وظایف می توانند
مستقیماً I/Oخود را انجام دهند .به طور مشابه ،مکانیسم های حفاظت از حافظه را می توان به حداقل رساندMARW06 .
مثال زیر را ارائه می دهد .اجازه دهید سوئیچ با آدرس ورودی/خروجی نگاشت شده با حافظه مقداری مطابقت داشته باشد که
باید به عنوان بخشی از عملیات I/Oبررسی شود .میتوانیم به برنامه ورودی/خروجی اجازه دهیم از دستورالعملی مانند ثبت بار،
سوئیچ برای تعیین مقدار فعلی استفاده کند .این رویکرد به استفاده از یک تماس سرویس سیستم عامل ترجیح داده می شود،
که برای ذخیره و بازیابی زمینه وظیفه سربار ایجاد می کند.
-استفاده مستقیم از وقفه ها :سیستم عامل های همه منظوره معموالً به هیچ فرآیند کاربری اجازه استفاده مستقیم از وقفه ها را
نمی دهندMARW06 .سه دلیل را فهرست میکند که چرا میتوان اجازه داد که وقفهها مستقیماً کارها را شروع یا متوقف
702
سیستم عامل های داخلی و اصول طراحی703.........................................................................................................................
کنند به عنوان مثال ،با ذخیره آدرس شروع کار در جدول آدرس برداری وقفه به جای انجام روتینهای سرویس وقفه
سیستمعامل:
1سیستمهای جاسازی شده می توان آن را کامالً آزمایش شده با تغییرات نادر در سیستم عامل یا کد برنامه در نظر گرفت.
2حفاظت الزم نیست ،همانطور که در مورد قبلی مورد بحث قرار گرفت .و 3کنترل کارآمد بر روی انواع دستگاه ها مورد نیاز
است.
دو رویکرد کلی برای توسعه یک سیستم عامل تعبیه شده وجود دارد .اولین رویکرد ،گرفتن یک سیستم عامل موجود و تطبیق
آن با برنامه تعبیه شده است .رویکرد دیگر طراحی و پیاده سازی سیستم عاملی است که صرفاً برای استفاده تعبیه شده در نظر
گرفته شده است.
یک سیستمعامل تجاری موجود میتواند برای یک سیستم تعبیهشده با افزودن قابلیت بالدرنگ ،سادهسازی عملیات ،و افزودن
عملکردهای الزم استفاده شود .این رویکرد معموالً از لینوکس استفاده می کند ،اما Windows ،FreeBSDو سایر سیستم
عامل های همه منظوره نیز استفاده شده است .چنین سیستمعاملهایی معموالً کندتر و کمتر قابل پیشبینیتر از
سیستمعاملهای تعبیهشده با هدف خاص هستند .مزیت این رویکرد این است که سیستم عامل تعبیه شده برگرفته از یک
سیستم عامل همه منظوره تجاری بر اساس مجموعه ای از رابط های آشنا است که قابلیت حمل را تسهیل می کند.
عیب استفاده از سیستمعامل همه منظوره این است که برای برنامههای همزمان و تعبیهشده بهینه نیست .بنابراین ،ممکن است
برای دستیابی به عملکرد مناسب ،اصالحات قابل توجهی مورد نیاز باشد .به طور خاص ،یک سیستمعامل معمولی برای
زمانبندی بهجای بدترین حالت بهینهسازی میشود ،معموالً منابع را بر اساس تقاضا تخصیص میدهد و بیشتر اطالعات معنایی
یک برنامه کاربردی را نادیده میگیرد.
تعداد قابل توجهی از سیستم عامل ها از ابتدا برای برنامه های کاربردی تعبیه شده طراحی شده اند .دو مثال برجسته از این
رویکرد اخیر eCos ،و TinyOSهستند که هر دو در این فصل مورد بحث قرار میگیرند.
ویژگی های معمول یک سیستم عامل تعبیه شده تخصصی شامل موارد زیر است:
703
سیستم عامل های داخلی و اصول طراحی704.........................................................................................................................
-خطمشی زمانبندی زمان حقیقی است و ماژول توزیعکننده بهجای مولفه جداگانه ،بخشی از زمانبندی است.
-به وقفه های خارجی به سرعت پاسخ می دهد .نیاز معمولی زمان پاسخ کمتر از 10میکرو ثانیه است
-پارتیشن هایی با اندازه ثابت یا متغیر برای مدیریت حافظه و همچنین امکان قفل کردن کد و داده ها در حافظه را فراهم می
کند.
-فایلهای متوالی خاصی را ارائه میکند که میتوانند دادهها را با سرعت باال جمعآوری کنند تا با محدودیتهای زمانبندی
مقابله کند ،هسته
-از رشته های نوبت دهی بالدرنگ مانند اولین مهلت اولیه و موارد اولیه برای پارازیت پیام در جلوی صف پشتیبانی می کند.
-مقدماتی را برای به تأخیر انداختن پردازش در مدت زمان ثابت و تعلیق/از سرگیری اجرا فراهم می کند.
ویژگی هایی که به تازگی ذکر شد در سیستم عامل های تعبیه شده با نیازهای بالدرنگ رایج هستند .با این حال ،برای
سیستمهای تعبیهشده پیچیده ،این نیاز ممکن است بر عملیات قابل پیشبینی بیش از عملیات سریع تأکید کند ،که نیاز به
تصمیمگیریهای مختلف طراحی ،بهویژه در حوزه زمانبندی وظایف دارد.
اصطالح لینوکس جاسازی شده به سادگی به معنای نسخه ای از لینوکس است که در یک سیستم جاسازی شده اجرا می شود.
در این بخش ،برخی از تفاوتهای کلیدی بین لینوکس تعبیهشده و نسخهای از لینوکس که روی رایانه رومیزی یا لپتاپ اجرا
میشود را برجسته میکنیم.
704
سیستم عامل های داخلی و اصول طراحی705.........................................................................................................................
اندازه هسته
سیستمهای لینوکس رومیزی و سرور به دلیل تنوع گسترده پیکربندیهایی که از لینوکس استفاده میکنند ،نیاز به پشتیبانی از
تعداد زیادی دستگاه دارند .به طور مشابه ،چنین سیستم هایی همچنین نیاز به پشتیبانی از طیف وسیعی از پروتکل های
ارتباطی و تبادل داده دارند تا بتوان از آنها برای اهداف مختلف استفاده کرد .بسته به سخت افزار موجود در دستگاه معین و
هدف مورد نظر آن دستگاه ،دستگاه های جاسازی شده معموالً به پشتیبانی از مجموعه خاصی از دستگاه ها ،تجهیزات جانبی و
پروتکل ها نیاز دارند .خوشبختانه ،هسته لینوکس از نظر معماری که برای آن اجرا شده و پردازنده ها و دستگاه هایی که
پشتیبانی می کند بسیار قابل تنظیم است.
توزیع لینوکس جاسازی شده نسخهای از لینوکس است که برای اندازه و محدودیتهای سختافزاری دستگاههای تعبیهشده
سفارشیسازی میشود و شامل بستههای نرمافزاری است که انواع خدمات و برنامههای کاربردی را در آن دستگاهها پشتیبانی
میکند .بنابراین ،یک هسته لینوکس تعبیه شده بسیار کوچکتر از یک هسته لینوکس معمولی خواهد بود.
تلفیقی
یک تمایز کلیدی بین توزیعهای دسکتاپ/سرور و توزیعهای لینوکس جاسازی شده این است که نرمافزار دسکتاپ و سرور
معموالً روی پلتفرمی که در آن اجرا میشود اجرا میشود ،در حالی که توزیعهای لینوکس جاسازیشده معموالً روی یک پلتفرم
اجرا میشوند اما در نظر گرفته شده است که روی پلتفرم دیگری اجرا شوند .نرم افزاری که برای این منظور مورد استفاده قرار
می گیرد ،متقاطع اجرار نامیده می شود.
برخی از برنامهها ممکن است سیستمهای فایل نسبتاً کوچکی ایجاد کنند تا فقط برای مدت زمان برنامه مورد استفاده قرار
گیرند و میتوانند در حافظه اصلی ذخیره شوند .اما به طور کلی ،یک سیستم فایل باید در حافظه دائمی مانند حافظه فلش یا
دستگاه های ذخیره سازی مبتنی بر دیسک سنتی ذخیره شود .برای اکثر سیستم های جاسازی شده ،دیسک داخلی یا خارجی
گزینه ای نیست و ذخیره سازی دائمی معموالً توسط حافظه فلش ارائه می شود .مانند سایر جنبه های یک سیستم لینوکس
تعبیه شده ،سیستم فایل باید تا حد امکان کوچک باشد .تعدادی از این فایل سیستم های فشرده برای استفاده در سیستم های
تعبیه شده طراحی شده اند .موارد زیر نمونه های رایج مورد استفاده هستند:
cramfs: -سیستم فایل RAMفشرده یک سیستم فایل ساده فقط خواندنی است که برای به حداقل رساندن اندازه با به
حداکثر رساندن استفاده کارآمد از فضای ذخیره سازی زیرین طراحی شده است .فایلها در سیستمهای فایل cramfsدر
705
سیستم عامل های داخلی و اصول طراحی706.........................................................................................................................
واحدهایی فشرده میشوند که با اندازه صفحه لینوکس مطابقت دارند معموالً 4096بایت یا 4مگابایت ،بر اساس نسخه هسته و
پیکربندی تا دسترسی تصادفی کارآمدی به محتویات فایل فراهم کنند.
squashfs: -مانند squashfs ،cramfsیک فایل سیستم فشرده و فقط خواندنی است که برای استفاده در محیطهای
حافظه کم یا حجم ذخیرهسازی محدود مانند سیستمهای لینوکس تعبیهشده طراحی شده است.
، jffs2: Journaling Flash File System -نسخه ،2یک سیستم فایل مبتنی بر گزارش است که همانطور که از نام آن
پیداست ،برای استفاده در دستگاه های فلش NORو NANDبا توجه ویژه به مسائل مربوط به فالش مانند سایش طراحی
شده است.
ubifs: -سیستم فایل تصویر بلوک مرتب نشده معموالً عملکرد بهتری نسبت به jffs2در دستگاههای فلش بزرگتر ارائه
میدهد و همچنین از حافظه پنهان نوشتن برای بهبود عملکرد بیشتر پشتیبانی میکند.
yaffs2: -یک سیستم فایل فلش دیگر ،نسخه ،2یک سیستم فایل سریع و قوی را برای دستگاه های فلش بزرگ ارائه می
دهد Yaffs2 .به رم کمتری برای نگهداری اطالعات وضعیت سیستم فایل نسبت به سیستم های فایل مانند jffs2نیاز دارد و
همچنین در صورت نوشتن مکرر فایل سیستم عملکرد بهتری را ارائه می دهد.
نسخههای جاسازیشده لینوکس در اوایل سال 1999ظاهر شدند .تعدادی از شرکتها نسخههای خود را متناسب با پلتفرمهای
خاص توسعه دادهاند .مزایای استفاده از لینوکس به عنوان پایه یک سیستم عامل تعبیه شده شامل موارد زیر است:
-استقالل فروشنده :ارائهدهنده پلتفرم برای ارائه ویژگیهای مورد نیاز و رعایت ضرباالجلهای استقرار به فروشنده خاصی
وابسته نیست.
-پشتیبانی سخت افزاری متنوع :پشتیبانی لینوکس برای طیف وسیعی از معماری پردازنده و دستگاه های جانبی آن را برای
تقریباً هر سیستم تعبیه شده مناسب می کند.
-منبع باز :استفاده از لینوکس تمام مزایای نرم افزار منبع باز را فراهم می کند.
706
سیستم عامل های داخلی و اصول طراحی707.........................................................................................................................
اندروید
همانطور که در سراسر این کتاب بحث کردیم ،اندروید یک سیستم عامل تعبیه شده مبتنی بر هسته لینوکس است .بنابراین
منطقی است که اندروید را نمونه ای از لینوکس جاسازی شده در نظر بگیریم .با این حال ،بسیاری از توسعه دهندگان لینوکس
جاسازی شده اندروید را نمونه ای از لینوکس جاسازی شده CLAR13نمی دانند .از دیدگاه این توسعه دهندگان ،یک دستگاه
تعبیه شده کالسیک عملکرد ثابتی دارد که در کارخانه منجمد شده است .اندروید بیشتر یک سیستمعامل پلتفرمی است که
میتواند از برنامههای مختلفی پشتیبانی کند که از یک پلتفرم به پلتفرم دیگر متفاوت هستند .عالوه بر این ،اندروید یک سیستم
یکپارچه عمودی است که شامل برخی تغییرات خاص اندروید در هسته لینوکس است .تمرکز اندروید در ادغام عمودی هسته
لینوکس و اجزای فضای کاربری اندروید نهفته است .در نهایت ،این یک موضوع معناشناسی است ،بدون تعریف "رسمی" از
لینوکس تعبیه شده که بتوان بر آن تکیه کرد.
TINYOS 13.4
سیستم eCosرویکرد سادهتری را برای یک سیستمعامل تعبیهشده ارائه میکند تا رویکردی که مبتنی بر یک سیستمعامل
تجاری همه منظوره ،مانند نسخه جاسازیشده لینوکس است .بنابراین eCos ،و سیستمهای مشابه برای سیستمهای تعبیهشده
کوچک با نیازهای محدود در حافظه ،زمان پردازش ،پاسخدهی بالدرنگ ،مصرف برق و غیره مناسبتر هستند TinyOS .فرآیند
سادهسازی را به نقطهای بسیار فراتر میبرد و در نتیجه یک سیستمعامل بسیار کم برای سیستمهای تعبیهشده ایجاد میکند.
سیستم عامل اصلی به 400بایت کد و حافظه داده به صورت ترکیبی نیاز دارد.
TinyOSنشان دهنده انحراف قابل توجهی از سایر سیستم عامل های تعبیه شده است .یک تفاوت قابل توجه این است که
TinyOSیک سیستم عامل بالدرنگ نیست .دلیل این امر حجم کاری مورد انتظار است که در زمینه یک شبکه حسگر بی سیم
است ،همانطور که در زیر بخش بعدی توضیح داده شد .به دلیل مصرف برق ،این دستگاه ها در اکثر مواقع خاموش هستند.
برنامه ها معموال ساده هستند و بحث پردازنده مشکل چندانی ندارد.
عالوه بر این ،در TinyOSهیچ هسته ای وجود ندارد ،زیرا هیچ حفاظتی از حافظه وجود ندارد و یک سیستم عامل مبتنی بر
مؤلفه است .هیچ فرآیندی وجود ندارد .سیستم عامل خود سیستم تخصیص حافظه ندارد اگرچه برخی از اجزای نادر مورد
استفاده یکی را معرفی می کنند .رسیدگی به وقفه و استثنا وابسته به دستگاه جانبی است .و کامال غیر مسدود کننده است،
بنابراین تعداد کمی از موارد اولیه همگام سازی صریح وجود دارد.
TinyOSبه یک رویکرد محبوب برای پیاده سازی نرم افزار شبکه حسگر بی سیم تبدیل شده است .در حال حاضر ،بیش از
500سازمان در حال توسعه و کمک به یک استاندارد منبع باز برای Tiny OSهستند.
707
سیستم عامل های داخلی و اصول طراحی708.........................................................................................................................
TinyOSاساساً برای استفاده با شبکه های حسگرهای بی سیم کوچک توسعه یافته است .تعدادی از روندها توسعه حسگرهای
بسیار فشرده و کم مصرف را امکان پذیر کرده است .قانون معروف مور به کاهش اندازه حافظه و عناصر منطقی پردازش ادامه می
دهد .اندازه کوچکتر به نوبه خود مصرف برق را کاهش می دهد .روند کم مصرف و اندازه کوچک نیز در سخت افزار ارتباطات بی
سیم ،حسگرهای میکرو الکترومکانیکی MEMSو مبدل ها مشهود است .در نتیجه ،ایجاد یک حسگر کامل با منطق در میلی
متر مکعب امکان پذیر است .نرم افزار برنامه و سیستم باید به اندازه کافی فشرده باشد که قابلیت های حسی ،ارتباطی و
محاسباتی را بتوان در یک معماری کامل ،اما کوچک ،گنجاند.
سنسورهای بیسیم کمهزینه ،کوچک و کم مصرف را میتوان در بسیاری از برنامهها استفاده کرد ROME04.شکل 13.2یک
پیکربندی معمولی را نشان می دهد .یک ایستگاه پایه ،شبکه حسگر را به یک کامپیوتر میزبان متصل میکند و دادههای حسگر
را از شبکه به کامپیوتر میزبان منتقل میکند ،که میتواند تجزیه و تحلیل دادهها را انجام دهد و/یا دادهها را از طریق یک شبکه
شرکتی یا اینترنت به یک سرور تجزیه و تحلیل منتقل کند .حسگرهای فردی داده ها را جمع آوری کرده و به ایستگاه پایه
منتقل می کنند ،چه به طور مستقیم یا از طریق حسگرهایی که به عنوان رله داده عمل می کنند .عملکرد مسیریابی برای تعیین
نحوه انتقال داده ها از طریق شبکه حسگر به ایستگاه پایه مورد نیاز استBUON01 .اشاره میکند که در بسیاری از برنامهها،
کاربر میخواهد بتواند به سرعت تعداد زیادی از دستگاههای کمهزینه را بدون نیاز به پیکربندی یا مدیریت آنها مستقر کند .این
بدان معناست که آنها باید بتوانند خود را در یک شبکه ad hocجمع کنند .تحرک تک تک سنسورها و وجود تداخل RFبه
این معنی است که شبکه باید بتواند خود را در عرض چند ثانیه پیکربندی مجدد کند.
708
سیستم عامل های داخلی و اصول طراحی709.........................................................................................................................
اهداف TinyOS
با در نظر گرفتن برنامه کاربردی حسگر کوچک و توزیع شده ،گروهی از محققان از UC Berkeley HILL00اهداف زیر را
برای TinyOSتعیین کردند:
-اجازه همزمانی باال :در یک برنامه کاربردی شبکه حسگر بی سیم معمولی ،دستگاه ها همزمان هستند .چندین جریان مختلف
داده باید به طور همزمان در حال حرکت نگه داشته شوند .در حالی که داده های حسگر در یک جریان ثابت وارد می شوند،
نتایج پردازش شده باید در یک جریان ثابت منتقل شوند .عالوه بر این ،کنترل های خارجی از سنسورهای راه دور یا ایستگاه
های پایه باید مدیریت شوند.
-با منابع محدود کار کنید :پلتفرم هدف TinyOSدارای حافظه و منابع محاسباتی محدودی خواهد بود و با باتری یا انرژی
خورشیدی کار میکند .یک پلتفرم واحد ممکن است تنها کیلوبایت حافظه برنامه و صدها بایت RAMارائه دهد .نرم افزار باید
از منابع پردازشگر و حافظه موجود و در عین حال امکان برقراری ارتباط کم مصرف استفاده بهینه کند.
-سازگاری با تکامل سخت افزار :بیشتر سخت افزارها در حال تکامل هستند .برنامه ها و اکثر سرویس های سیستم باید در نسل
های سخت افزاری قابل حمل باشند .بنابراین ،اگر عملکرد یکسان باشد ،باید بتوان سخت افزار را با تغییر نرم افزاری کم یا بدون
تغییر ارتقا داد.
-از طیف گسترده ای از برنامه ها پشتیبانی می کند :برنامه ها طیف وسیعی از الزامات را از نظر طول عمر ،ارتباطات ،حس
کردن و غیره نشان می دهند .یک سیستمعامل تعبیهشده مدوالر و همهمنظوره مورد نظر است تا یک رویکرد استاندارد منجر به
صرفهجویی در مقیاس در توسعه برنامهها و نرمافزارهای پشتیبانی شود.
-از مجموعه متنوعی از پلتفرم ها پشتیبانی کنید :مانند نکته قبل ،یک سیستم عامل تعبیه شده با هدف عمومی مطلوب است.
-قوی باشید :پس از استقرار ،یک شبکه حسگر باید برای ماه ها یا سال ها بدون مراقبت کار کند .در حالت ایده آل ،باید افزونگی
هم در یک سیستم واحد و هم در سراسر شبکه حسگرها وجود داشته باشد .با این حال ،هر دو نوع افزونگی به منابع اضافی نیاز
دارند .یکی از ویژگیهای نرمافزاری که میتواند استحکام را بهبود بخشد ،استفاده از مؤلفههای نرمافزار استاندارد شده و بسیار
ماژوالر است.
شایان ذکر است که در مورد نیاز همزمانی توضیح داده شود .در یک کاربرد معمولی ،ده ها ،صدها یا حتی هزاران حسگر وجود
خواهد داشت که با هم شبکه شده اند .معموالً به دلیل مشکالت تأخیر ،بافر کمی انجام می شود .به عنوان مثال ،اگر هر 5دقیقه
یکبار نمونه برداری می کنید و می خواهید چهار نمونه را قبل از ارسال بافر کنید ،میانگین تأخیر 10دقیقه است .بنابراین،
اطالعات معموالً در یک جریان پیوسته گرفته ،پردازش و به شبکه منتقل میشوند .بعالوه ،اگر نمونه گیری حسگر مقدار قابل
709
سیستم عامل های داخلی و اصول طراحی710.........................................................................................................................
توجهی داده تولید کند ،فضای محدود حافظه موجود تعداد نمونه هایی را که می توانند بافر شوند محدود می کند .با این حال،
در برخی برنامهها ،هر یک از جریانها ممکن است شامل تعداد زیادی رویداد سطح پایین باشد که با پردازش سطح باالتر در هم
آمیخته شدهاند .برخی از پردازش های سطح باال در چندین رویداد زمان حقیقی گسترش می یابد .عالوه بر این ،حسگرها در یک
شبکه ،به دلیل قدرت انتقال کم موجود ،معموالً در یک محدوده فیزیکی کوتاه عمل میکنند .بنابراین ،دادههای حسگرهای
بیرونی باید توسط گرههای میانی به یک یا چند ایستگاه پایه رله شوند.
یک سیستم نرمافزاری تعبیهشده که با استفاده از TinyOSساخته میشود شامل مجموعهای از ماژولهای کوچک به نام
مؤلفهها است که هر کدام یک کار ساده یا مجموعهای از وظایف را انجام میدهند و با یکدیگر و با سختافزار به روشهای
محدود و به خوبی تعریف شدهاند .تنها ماژول نرم افزاری دیگر زمانبندی است که بعداً مورد بحث قرار گرفت .در واقع ،چون
هسته ای وجود ندارد ،سیستم عامل واقعی وجود ندارد .اما می توانیم دیدگاه زیر را داشته باشیم.
منطقه کاربردی مورد عالقه شبکه حسگر بی سیم WSNاست .برای برآوردن نیازهای نرم افزاری سخت این برنامه ،یک
معماری نرم افزاری ساده و سفت و سخت ،متشکل از اجزاء دیکته شده است .جامعه توسعه TinyOSتعدادی مولفه منبع باز را
پیاده سازی کرده است که عملکردهای اساسی مورد نیاز برای برنامه WSNرا فراهم می کند .نمونه هایی از چنین اجزای
استاندارد شده عبارتند از :شبکه تک هاپ ،مسیریابی موقت ،مدیریت توان ،تایمر ،و کنترل ذخیره سازی غیرفرار .برای
پیکربندیها و برنامههای خاص ،کاربران قطعه بندی های با هدف ویژه دیگری را میسازند و همه مؤلفههای مورد نیاز برای
برنامه کاربر را پیوند و بارگذاری میکنند .پس TinyOSاز مجموعه ای از اجزای استاندارد تشکیل شده است.
برخی اما نه همه این مؤلفهها ،همراه با مؤلفههای نوشتهشده توسط کاربر خاص برنامه ،برای هر پیادهسازی مشخصی استفاده
میشوند .سیستم عامل برای آن پیاده سازی به سادگی مجموعه ای از مؤلفه های استاندارد شده از مجموعه TinyOSاست.
تمام اجزای یک پیکربندی TinyOSساختار یکسانی دارند که نمونهای از آن در شکل a13.3نشان داده شده است .کادر
سایهدار در نمودار مؤلفهای را نشان میدهد که به عنوان یک شی در نظر گرفته میشود که فقط با رابطهای تعریفشده قابل
دسترسی است که با کادرهای سفید نشان داده شده است .یک جزء ممکن است سخت افزار یا نرم افزار باشد .مؤلفههای نرمافزار
در nesCپیادهسازی میشوند ،که توسعهای از Cبا دو ویژگی متمایز است :یک مدل برنامهنویسی که در آن مؤلفهها از طریق
رابطها تعامل دارند ،و یک مدل همزمانی مبتنی بر رویداد با کار اجرا تا تکمیل و کنترل کننده های وقفه ،در ادامه توضیح داده
شد.
معماری از آرایش الیه ای از اجزا تشکیل شده است .هر جزء می تواند تنها به دو جزء دیگر پیوند دهد ،یکی زیر آن در سلسله
مراتب و دیگری باالی آن .یک جزء دستورات را به جزء سطح پایین خود صادر می کند و سیگنال های رویداد را از آن دریافت
710
سیستم عامل های داخلی و اصول طراحی711.........................................................................................................................
می کند .به طور مشابه ،مؤلفه دستورات را از مؤلفه سطح باالی خود می پذیرد و سیگنال های رویداد را برای آن صادر می کند.
در پایین سلسله مراتب ،اجزای سخت افزاری و در باالی سلسله مراتب ،اجزای برنامه قرار دارند که ممکن است بخشی از
مجموعه استاندارد TinyOSنباشند ،اما باید با ساختار مؤلفه TinyOSمطابقت داشته باشند.
یک جزء نرم افزاری یک یا چند کار را پیاده سازی می کند .هر وظیفه در یک جزء شبیه به یک رشته در یک سیستم عامل
معمولی است ،با محدودیتهای خاصی .در یک مؤلفه ،وظایف اتمی هستند :هنگامی که یک کار شروع شد ،تا تکمیل انجام می
شود .نمی توان آن را با کار دیگری در همان مؤلفه پیشی گرفت ،و هیچ برش زمانی وجود ندارد .با این حال ،یک کار می تواند
توسط یک رویداد پیشی گرفته شود .یک کار نمی تواند انتظار را مسدود یا چرخش کند .این محدودیت ها زمان بندی و مدیریت
وظایف را در یک جزء بسیار ساده می کند .تنها یک پشته وجود دارد که به وظیفه فعلی اختصاص داده شده است .وظایف می
توانند محاسبات را انجام دهند ،اجزای سطح پایین تر فرمان ها را فراخوانی کنند و رویدادهای سطح باالتر را سیگنال دهند و
کارهای دیگر را برنامه ریزی کنند.
دستورات درخواست های غیر مسدود کننده هستند .یعنی وظیفه ای که دستوری را صادر می کند ،منتظر پاسخ از مؤلفه سطح
پایین تر را مسدود نمی کند یا نمی چرخد .یک فرمان معموالً درخواستی است برای مؤلفه سطح پایین برای انجام برخی
خدمات ،مانند شروع خواندن سنسور .تأثیر بر مؤلفهای که فرمان را دریافت میکند ،مختص فرمان داده شده و وظیفه مورد نیاز
برای برآورده کردن فرمان است .به طور کلی ،هنگامی که یک فرمان دریافت می شود ،یک کار برای اجرای بعدی برنامه ریزی
می شود ،زیرا یک فرمان نمی تواند از کار در حال اجرا جلوگیری کند .دستور بالفاصله به مؤلفه فراخوان باز می گردد .در زمان
بعدی ،یک رویداد سیگنال تکمیل را به مؤلفه فراخوان می دهد .بنابراین ،یک فرمان باعث پیشپرداخت در مؤلفه فراخوانی
711
سیستم عامل های داخلی و اصول طراحی712.........................................................................................................................
نمیشود و باعث مسدود شدن مؤلفه فراخوان نمیشود .رویدادها در TinyOSممکن است مستقیم یا غیرمستقیم با رویدادهای
سخت افزاری مرتبط باشند.
اجزای نرمافزاری پایینترین سطح مستقیماً با وقفههای سختافزاری که ممکن است وقفههای خارجی ،رویدادهای تایمر یا
رویدادهای متقابل باشند ،رابط دارند .یک کنترل کننده رویداد در یک مؤلفه سطح پایین ممکن است خود وقفه را مدیریت کند
یا ممکن است پیام های رویداد را از طریق سلسله مراتب مؤلفه منتشر کند .یک فرمان می تواند وظیفه ای را ارسال کند که در
آینده نشان دهنده یک رویداد باشد .در این مورد ،هیچ ارتباطی با یک رویداد سخت افزاری وجود ندارد.
یک کار را می توان دارای سه مرحله دانست .تماس گیرنده فرمانی را به یک ماژول ارسال می کند .سپس ماژول وظیفه
درخواستی را اجرا می کند .سپس ماژول از طریق یک رویداد به تماس گیرنده اطالع می دهد که کار کامل شده است.
مؤلفه نشان داده شده در شکل ،TimerM ،a13.3بخشی از سرویس تایمر TinyOSاست .این قطعه بندی رابط
StdControlو Timerرا فراهم می کند و از رابط ساعت استفاده می کند .ارائهدهندگان دستورات را پیادهسازی میکنند
یعنی منطق در این جزء .کاربران رویدادها را پیاده سازی می کنند به عنوان مثال ،خارج از مؤلفه .بسیاری از اجزای TinyOS
از رابط StdControlبرای مقداردهی اولیه ،راه اندازی یا توقف استفاده می کنند TimerM .منطقی را ارائه می دهد که از
ساعت سخت افزاری به انتزاع تایمر TinyOSنگاشت می شود .انتزاع تایمر را می توان برای شمارش معکوس یک بازه زمانی
معین استفاده کرد .شکل a13.3همچنین مشخصات رسمی رابط های TimerMرا نشان می دهد.
قطعه بندی ها با «سیمکشی» آنها در رابطهایشان و معادلسازی رابطهای پیکربندی با برخی از رابطهای مؤلفهها ،به
پیکربندیهایی سازماندهی میشوند .یک مثال ساده در شکل b13.3نشان داده شده است .حرف بزرگ Cمخفف
Componentاست .برای تمایز بین یک رابط مثالً تایمر و مؤلفه ای که رابط را فراهم می کند مثالً TimerCاستفاده می
شود .حروف بزرگ Mمخفف Moduleاست .این قرارداد نامگذاری زمانی استفاده می شود که یک جزء منطقی منفرد دارای
712
سیستم عامل های داخلی و اصول طراحی713.........................................................................................................................
پیکربندی و ماژول باشد .مؤلفه TimerCکه رابط تایمر را ارائه میکند ،پیکربندی است که اجرای آن TimerMرا به
ارائهدهندگان ساعت و LEDپیوند میدهد .در غیر این صورت ،هر کاربر TimerCباید صراحتاً اجزای فرعی خود را سیمکشی
کند.
TinyOS Scheduler
زمانبندی TinyOSدر تمام اجزای سازنده کار می کند .تقریباً تمام سیستمهای تعبیهشده که از TinyOSاستفاده میکنند،
سیستمهای تکپردازنده خواهند بود ،بهطوریکه تنها یک وظیفه از بین تمام وظایف در همه اجزا میتواند در یک زمان اجرا
شود .زمانبندی یک جزء جداگانه است .این تنها بخشی از TinyOSاست که باید در هر سیستمی وجود داشته باشد.
زمانبندی پیشفرض در TinyOSیک صف ساده FIFOاول در اولین خروجی است .یک کار به زمانبندی محل در صف
پست میشود یا در نتیجه یک رویداد ،که باعث ارسال پست میشود ،یا در نتیجه یک درخواست خاص توسط یک کار در حال
اجرا برای زمانبندی کار دیگر .برنامهریز از قدرت آگاه است .این به این معنی است که زمانبندی ،پردازنده را زمانی که هیچ
وظیفهای در صف وجود ندارد ،به حالت خواب میگذارد .تجهیزات جانبی همچنان کار می کنند ،به طوری که یکی از آنها می
تواند سیستم را با استفاده از یک رویداد سخت افزاری که به یک جزء پایین ترین سطح سیگنال می دهد ،بیدار کند .هنگامی که
صف خالی شد ،کار دیگری را می توان تنها در نتیجه یک رویداد سخت افزاری مستقیم برنامه ریزی کرد .این رفتار استفاده
کارآمد از باتری را امکان پذیر می کند.
زمانبندی دو نسل را پشت سر گذاشته است .در ،TinyOS 1.xیک صف وظایف مشترک برای همه کارها وجود دارد و یک
جزء می تواند چندین بار یک کار را به زمانبندی ارسال کند .اگر صف کار پر باشد ،عملیات ارسال با شکست مواجه می شود.
تجربه با پشته های شبکه نشان داد که این مشکل ساز است ،زیرا این کار ممکن است نشان دهنده تکمیل عملیات فاز تقسیم
شود :اگر پست از کار بیفتد ،مؤلفه باال ممکن است برای همیشه مسدود شود و منتظر رویداد تکمیل باشد .در ،TinyOS 2.x
هر کار دارای شکاف رزرو شده خود در صف وظایف است و یک کار فقط یک بار می تواند پست شود .یک پست شکست می
خورد اگر و تنها در صورتی که کار قبال ارسال شده باشد .اگر یک مؤلفه نیاز داشته باشد که یک کار را چندین بار پست کند،
میتواند یک متغیر حالت داخلی تنظیم کند تا زمانی که کار اجرا میشود ،خود را مجدداً ارسال کند .این تغییر جزئی در
معناشناسی ،بسیاری از کدهای مؤلفه را بسیار ساده می کند .به جای آزمایش برای اینکه ببینید آیا یک کار قبالً قبل از ارسال
آن پست شده است یا خیر ،یک مؤلفه فقط می تواند آن کار را پست کند .قطعه بندی ها نیازی به تالش برای بازیابی از پست
های ناموفق و تالش مجدد ندارند .هزینه هر کار یک بایت حالت است.
یک کاربر میتواند زمانبندی پیشفرض را با برنامهای جایگزین کند که از یک طرح توزیع متفاوت ،مانند یک طرح مبتنی بر
اولویت یا یک طرح ضرباالجل استفاده میکند .با این حال ،به دلیل سرباری که چنین سیستمهایی ایجاد میکنند ،نباید از
713
سیستم عامل های داخلی و اصول طراحی714.........................................................................................................................
پیشدستی و برش زمانی استفاده کرد .مهمتر از آن ،آنها مدل همزمانی TinyOSرا نقض میکنند ،که فرض میکند وظایف
یکدیگر را پیشی نمیگیرند.
نمونه ای از پیکربندی
شکل 13.4پیکربندی مونتاژ شده از نرم افزار و قطعات سخت افزاری را نشان می دهد .این مثال ساده شده که Surgeنام دارد
و در GAY03توضیح داده شده است ،نمونهبرداری حسگر دورهای را انجام میدهد و از مسیریابی چند هاپ موقت روی شبکه
بیسیم برای تحویل نمونهها به ایستگاه پایه استفاده میکند .قسمت باالی شکل اجزای Surgeکه با جعبه ها نشان داده شده
اند و رابط هایی که توسط آنها سیم کشی شده اند با خطوط فلش نشان داده شده را نشان می دهد .مؤلفه SurgeMجزء سطح
کاربرد است که عملیات پیکربندی را هماهنگ می کند.
شکل b13.4بخشی از پیکربندی برنامه Surgeرا نشان می دهد .در زیر گزیده ای ساده از مشخصات SurgeMاست.
714
سیستم عامل های داخلی و اصول طراحی715.........................................................................................................................
این مثال قدرت رویکرد TinyOSرا نشان می دهد .این نرم افزار به صورت مجموعه ای به هم پیوسته از ماژول های ساده
سازماندهی شده است که هر کدام یک یا چند وظیفه را تعریف می کنند .قطعه بندی ها رابط ساده و استاندارد شده ای با سایر
اجزا دارند ،خواه سخت افزار یا نرم افزار باشند .بنابراین ،قطعات را می توان به راحتی جایگزین کرد .اجزاء می توانند سخت افزار
یا نرم افزار باشند ،با تغییر مرزی که برای برنامه نویس برنامه قابل مشاهده نیست.
TinyOSمجموعه ای ساده اما قدرتمند از قراردادها را برای مقابله با منابع فراهم می کند .سه انتزاع برای منابع در TinyOS
استفاده می شود:
-اختصاصی :منبعی که یک زیرسیستم همیشه نیاز به دسترسی انحصاری به آن دارد .در این دسته از منابع ،هیچ خط مشی
اشتراکی مورد نیاز نیست ،زیرا تنها یک جزء به استفاده از منبع نیاز دارد .نمونه هایی از انتزاعات اختصاصی شامل وقفه ها و
شمارنده ها هستند.
-مجازی سازی شده :هر کالینت یک منبع مجازی شده با آن به گونه ای تعامل می کند که گویی یک منبع اختصاصی است ،با
تمام نمونه های مجازی شده در باالی یک منبع زیربنایی منفرد .انتزاع مجازی سازی شده ممکن است زمانی استفاده شود که
منبع اصلی نیازی به محافظت متقابل نداشته باشد .به عنوان مثال یک ساعت یا تایمر است.
715
سیستم عامل های داخلی و اصول طراحی716.........................................................................................................................
Shared: -انتزاع منبع مشترک دسترسی به یک منبع اختصاصی را از طریق یک جزء داور فراهم می کند .داور ،محرومیت
متقابل را اعمال می کند ،و تنها به یک کاربر به نام کالینت در هر زمان اجازه می دهد تا به یک منبع دسترسی داشته باشد و
مشتری را قادر می سازد منبع را قفل کند.
در ادامه این بخش فرعی ،ما به طور مختصر امکانات منابع مشترک TinyOSرا تعریف می کنیم .داور تعیین می کند که کدام
مشتری در چه زمانی به منبع دسترسی داشته باشد .در حالی که مشتری یک منبع را در اختیار دارد ،کنترل کامل و بدون
محدودیت دارد .داوران فرض میکنند که مشتریان همکاری میکنند ،فقط در صورت نیاز منبع را به دست میآورند و بیش از
زمان الزم آن را نگه میدارند .مشتریان به صراحت منابع را آزاد می کنند :هیچ راهی برای داوری وجود ندارد که به زور آن را
پس بگیرد.
شکل 13.5یک نمای ساده از پیکربندی منبع مشترک مورد استفاده برای دسترسی به یک منبع زیربنایی را نشان می دهد .با
هر منبعی که باید به اشتراک گذاشته شود ،یک جزء داور مرتبط است .داور سیاستی را اعمال می کند که به مشتری امکان می
دهد منبع را قفل کند ،از آن استفاده کند و سپس منبع را آزاد کند .پیکربندی منبع مشترک ،اینترفیس های زیر را برای یک
کالینت فراهم می کند:
Resource: -مشتری در این رابط درخواستی را صادر می کند و درخواست دسترسی به منبع را می دهد .اگر منبع در حال
حاضر قفل شده باشد ،داور درخواست را در یک صف قرار می دهد .هنگامی که یک کالینت با منبع به پایان می رسد ،دستور
انتشار را در این رابط صادر می کند.
-منبع درخواستی :این شبیه به رابط منبع است .در این حالت ،مشتری می تواند یک منبع را تا زمانی که به مشتری اطالع داده
شود که شخص دیگری به منبع نیاز دارد ،نگه دارد.
716
سیستم عامل های داخلی و اصول طراحی717.........................................................................................................................
Resource configure: -این رابط به یک منبع اجازه می دهد تا درست قبل از دسترسی مشتری به آن به طور خودکار
پیکربندی شود .مؤلفههایی که رابط پیکربندی منابع را ارائه میکنند ،از رابطهای ارائهشده توسط یک منبع اختصاصی زیربنایی
برای پیکربندی آن در یکی از حالتهای عملکرد مورد نظر خود استفاده میکنند.
-واسط های خاص منبع :هنگامی که مشتری به یک منبع دسترسی پیدا می کند ،از رابط های خاص منبع برای تبادل داده و
کنترل اطالعات با منبع استفاده می کند.
عالوه بر منبع اختصاصی ،پیکربندی منبع مشترک از دو جزء تشکیل شده است Arbiter .درخواستهای دسترسی و پیکربندی
از یک کالینت را میپذیرد و قفل را بر روی منبع اصلی اعمال میکند .جزء منبع مشترک تبادل داده بین مشتری و منبع اصلی
را واسطه می کند .اطالعات داور ارسال شده از داور به جزء منبع مشترک ،دسترسی مشتری به منبع اصلی را کنترل می کند.
KOOP96یک بحث سیستماتیک در مورد الزامات سیستم های تعبیه شده ارائه می دهدSTAN96 .یک نمای کلی مفید از
سیستم های زمان حقیقی و تعبیه شده است.
HILL00یک نمای کلی و منطق طراحی برای TinyOSارائه می دهدGAY05 .بحث جالبی در مورد استراتژی های
طراحی نرم افزار با استفاده از TinyOSاستBUON01 .مثال خوبی از استفاده از TinyOSدر ساخت شبکه یا حسگرهای
بی سیم ارائه می دهد .دو مرجع عالی برای نسخه فعلی TinyOS GAY03و LEVI05هستند.
717
سیستم عامل های داخلی و اصول طراحی718.........................................................................................................................
کلمات کلیدی
بررسی سواالت
.13.2برخی از الزامات یا محدودیت های معمول در سیستم های تعبیه شده چیست؟
.13.5مزایا و معایب نسبی سیستمعامل تعبیهشده مبتنی بر سیستمعامل تجاری موجود در مقایسه با سیستمعامل تعبیهشده
هدفمند را توضیح دهید.
چالش ها و مسائل
.13.1زمانبندی TinyOSوظایف را به ترتیب FIFOانجام می دهد .بسیاری از زمانبندیهای دیگر برای TinyOSپیشنهاد
شدهاند ،اما هیچکدام مورد توجه قرار نگرفتند .چه ویژگی های حوزه حسگر ممکن است باعث عدم نیاز به زمان بندی پیچیده تر
شود؟
718
سیستم عامل های داخلی و اصول طراحی719.........................................................................................................................
.13.2آ .رابط TinyOS Resourceبه مؤلفهای که قبالً درخواستی در صف منبع دارد اجازه نمیدهد درخواست دوم را ارسال
کند .دلیلی پیشنهاد کنید
ب با این حال ،رابط TinyOS Resourceبه مؤلفهای که قفل منبع را نگه میدارد اجازه میدهد تا قفل را دوباره درخواست
کند .این درخواست برای کمک هزینه بعدی در نوبت قرار می گیرد .دلیلی برای این سیاست پیشنهاد کنید .نکته :چه چیزی
ممکن است باعث ایجاد تأخیر بین یک جزء که یک قفل را آزاد می کند و درخواست کننده بعدی آن را اعطا کند ،وجود داشته
باشد؟ توجه :مشکالت باقیمانده مربوط به eCosاست که در ضمیمه Qبحث شده است.
.13.3با توجه به رابط درایور دستگاه به هسته eCosجدول ،Q.1توصیه میشود که درایورهای دستگاه باید از گونههای
_ intsaveبرای ادعا و انتشار spinlockها به جای گونههای غیر_ intsaveاستفاده کنند .توضیح دهد که چرا.
.13.6در جدول ،Q.1چه محدودیت هایی باید در استفاده از _cyg_drv_mutexتخریب قرار داد؟
.13.8اجرای mutexesدر هسته eCosاز قفل های بازگشتی پشتیبانی نمی کند .اگر نخی یک mutexرا قفل کرده باشد و
سپس دوباره سعی کند mutexرا قفل کند ،معموالً در نتیجه برخی از فراخوانی بازگشتی در یک گراف فراخوانی پیچیده ،در
این صورت یا شکست ادعا گزارش میشود یا رشته به وقفه میرسد .دلیلی برای این سیاست پیشنهاد کنید.
.13.9شکل 13.6فهرستی از کدهایی است که برای استفاده در هسته eCosدر نظر گرفته شده است.
آ .عملکرد کد را توضیح دهید .فرض کنید thread Bابتدا اجرا را آغاز می کند و رشته Aپس از وقوع رویدادی شروع به اجرا
می کند.
ب اگر اجرای کد بازگشایی و انتظار mutexدر تماس با ،cyg_cond_waitدر خط ،30اتمی نباشد ،چه اتفاقی میافتد؟
.13.10بحث در مورد اسپینالکهای eCosشامل مثالی بود که نشان میداد چرا اسپینالکها نباید در یک سیستم
تکپردازندهای استفاده شوند ،اگر دو رشته با اولویتهای مختلف بتوانند برای یک اسپینالک با هم رقابت کنند .توضیح دهید که
چرا مشکل همچنان وجود دارد حتی اگر فقط رشتههایی با اولویت یکسان بتوانند اسپینالک یکسانی را ادعا کنند.
719
سیستم عامل های داخلی و اصول طراحی720.........................................................................................................................
720
سیستم عامل های داخلی و اصول طراحی721.........................................................................................................................
فصل 14
14.3مدیریت حافظه
14.4مدیریت I/O
14.7جاوا VM
14.10خالصه
اهداف یادگیری
721
سیستم عامل های داخلی و اصول طراحی722.........................................................................................................................
-مسائل مربوط به مدیریت حافظه مربوط به پیاده سازی یک ماشین مجازی را درک کنید.
-مسائل مربوط به مدیریت I/Oرا که در پیاده سازی یک ماشین مجازی دخیل هستند ،درک کنید.
Xen ،Hyper-V ،VMware ESXi -و Java VMرا مقایسه و مقایسه کنید.
به طور سنتی ،برنامه ها مستقیماً بر روی یک سیستم عامل OSدر رایانه شخصی PCیا روی یک سرور اجرا می شوند .هر
رایانه شخصی یا سرور تنها یک سیستم عامل را در یک زمان اجرا می کند .بنابراین ،فروشنده برنامه مجبور بود قسمتهایی از
برنامههای کاربردی خود را برای هر سیستمعامل/پلتفرمی که روی آن اجرا و پشتیبانی میکرد ،بازنویسی کند .برای پشتیبانی از
سیستم عامل های متعدد ،فروشندگان برنامه نیاز به ایجاد ،مدیریت و پشتیبانی از چندین زیرساخت سخت افزاری و سیستم
عامل دارند ،فرآیندی پرهزینه و نیازمند منابع .یکی از استراتژی های موثر برای مقابله با این مشکل به عنوان مجازی سازی
شناخته می شود .فناوری مجازی سازی یک رایانه شخصی یا سرور را قادر می سازد تا چندین سیستم عامل یا چندین جلسه از
یک سیستم عامل را به طور همزمان اجرا کند .یک ماشین با نرمافزار مجازیسازی میتواند برنامههای متعددی را میزبانی کند،
از جمله برنامههایی که روی سیستمعاملهای مختلف اجرا میشوند ،بر روی یک پلتفرم واحد .در اصل ،سیستم عامل میزبان
میتواند تعدادی ماشین مجازی VMرا پشتیبانی کند ،که هر کدام ویژگیهای یک سیستمعامل خاص و در برخی نسخههای
مجازیسازی ،ویژگیهای یک پلتفرم سختافزاری خاص را دارند.
مجازی سازی فناوری جدیدی نیست .در طول دهه ،1970سیستمهای اصلی آیبیام اولین قابلیتهایی را ارائه کردند که به
برنامهها اجازه میداد تنها از بخشی از منابع یک سیستم استفاده کنند .اشکال مختلفی از این توانایی از آن زمان بر روی پلتفرم
ها در دسترس بوده است .مجازی سازی در اوایل دهه 2000زمانی که این فناوری به صورت تجاری در سرورهای x86در
دسترس بود ،وارد محاسبات اصلی شد .سازمان ها به دلیل استراتژی «یک برنامه ،یک سرور» مبتنی بر ویندوز مایکروسافت از
انبوه سرورها رنج می بردند .قانون مور پیشرفتهای سختافزاری سریعی را انجام داد که از توانایی نرمافزار پیشی گرفت ،و بیشتر
این سرورها بهشدت مورد استفاده قرار نگرفتند و اغلب کمتر از 5درصد از منابع موجود در هر سرور را مصرف میکردند .عالوه
بر این ،این فراوانی سرورها مراکز داده را پر کرده و مقادیر زیادی نیرو و خنک کننده مصرف می کند و توانایی شرکت برای
مدیریت و حفظ زیرساخت های خود را تحت فشار قرار می دهد .مجازی سازی به کاهش این استرس کمک کرد.
722
سیستم عامل های داخلی و اصول طراحی723.........................................................................................................................
راه حلی که مجازیسازی را فعال میکند ،یک مانیتور ماشین مجازی VMMیا معموالً امروزه به عنوان Hypervisorشناخته
میشود .این نرمافزار بین سختافزار و ماشینهای مجازی قرار میگیرد و بهعنوان یک کارگزار منبع عمل میکند شکل .14.1به
عبارت ساده ،به چندین ماشین مجازی اجازه می دهد تا به طور ایمن در یک هاست سرور فیزیکی واحد وجود داشته باشند و
منابع آن میزبان را به اشتراک بگذارند .تعداد مهمانهایی که میتوانند روی یک میزبان وجود داشته باشند با نسبت تجمیع
اندازهگیری میشوند .به عنوان مثال ،گفته می شود میزبانی که از 6ماشین مجازی پشتیبانی می کند دارای نسبت تجمیع 6به
1است که به صورت 6:1نیز نوشته شده است شکل .14.2
Hypervisorهای اولیه در فضای تجاری می توانند نسبت های یکپارچه سازی را بین 4:1و 12:1ارائه دهند ،اما حتی در
سطح پایین ،اگر یک شرکت تمام سرورهای خود را مجازی کند ،می تواند 75درصد از سرورها را از مراکز داده خود حذف کند. .
مهمتر از آن ،آنها می توانند هزینه را نیز حذف کنند ،که اغلب به میلیون ها یا ده ها میلیون دالر در سال می رسد.
با سرورهای فیزیکی کمتر ،برق کمتری مورد نیاز بود ،سرمایش کمتری نیاز بود و کابلهای کمتر ،سوئیچهای شبکه کمتر،
فضای کف کمتر و غیره مورد نیاز بود .یکپارچه سازی سرور تبدیل به یک راه بسیار ارزشمند برای حل یک مشکل پرهزینه و
بیهوده شد و همچنان می باشد .از سال ،2009سرورهای مجازی بیشتر از سرورهای فیزیکی در جهان مستقر شدند و استقرار
سرور مجازی همچنان به سرعت در حال افزایش است.
رویکرد VMدر حال تبدیل شدن به روشی متداول برای مشاغل و افراد برای مقابله با برنامههای قدیمی و بهینهسازی استفاده
از سختافزار با به حداکثر رساندن تعداد انواع برنامههایی است که یک رایانه میتواند از عهده آن برآید .پیشنهادات تجاری VM
توسط شرکت هایی مانند VMwareو Microsoftبه طور گسترده مورد استفاده قرار می گیرند و میلیون ها نسخه از آن
فروخته شده است .یکی از جنبه های کلیدی مجازی سازی سرور این است که عالوه بر قابلیت اجرای چندین ماشین مجازی
روی یک ماشین ،ماشین های مجازی را می توان به عنوان منابع شبکه مشاهده کرد .مجازیسازی سرور ،منابع سرور ،از جمله
تعداد و هویت سرورهای فیزیکی ،پردازندهها و سیستم عامل های را از کاربران سرور پنهان میکند .این امکان پارتیشن بندی
723
سیستم عامل های داخلی و اصول طراحی724.........................................................................................................................
یک هاست را به چندین سرور مستقل فراهم می کند و منابع سخت افزاری را حفظ می کند .همچنین انتقال سریع سرور از یک
دستگاه به دستگاه دیگر برای متعادل کردن بار یا برای تغییر پویا در صورت خرابی دستگاه امکان پذیر است .مجازی سازی سرور
به یک عنصر اصلی در برخورد با برنامه های کاربردی "داده های بزرگ" و در پیاده سازی زیرساخت های محاسبات ابری تبدیل
شده است.
این فناوریهای مجازی عالوه بر استفاده در محیطهای سرور ،در محیطهای دسکتاپ نیز برای اجرای چندین سیستم عامل،
معموالً ویندوز و لینوکس ،استفاده میشوند.
میزبان مجازی
سازی
مجازی سازی همه چیز در مورد انتزاع است .درست مانند یک سیستم عامل که دستورات ورودی/خروجی دیسک را از طریق
استفاده از الیهها و رابطهای برنامه از کاربر انتزاع میکند ،مجازیسازی نیز سختافزار فیزیکی را از ماشینهای مجازی که
پشتیبانی میکند انتزاع میکند .مانیتور ماشین مجازی یا Hypervisorنرم افزاری است که این انتزاع را ارائه می کند .این به
عنوان یک واسطه یا پلیس ترافیک عمل می کند و به عنوان یک پروکسی برای مهمانان VMsدر هنگام درخواست و مصرف
منابع میزبان فیزیکی عمل می کند.
ماشین مجازی یک ساختار نرم افزاری است که ویژگی های یک سرور فیزیکی را تقلید می کند .با تعدادی پردازنده ،مقداری رم،
منابع ذخیره سازی و اتصال از طریق پورت های شبکه پیکربندی شده است .هنگامی که VMایجاد شد ،میتوان آن را مانند
یک سرور فیزیکی روشن کرد ،با یک سیستم عامل و راهحلهای نرمافزاری بارگیری کرد و به شیوه یک سرور فیزیکی از آن
استفاده کرد.
برخالف سرور فیزیکی ،این سرور مجازی فقط منابعی را که با آن پیکربندی شده است ،می بیند ،نه همه منابع خود میزبان
فیزیکی را .این جداسازی به یک ماشین میزبان اجازه میدهد تا ماشینهای مجازی زیادی را اجرا کند که هر یک از آنها
724
سیستم عامل های داخلی و اصول طراحی725.........................................................................................................................
نسخههای مشابه یا متفاوتی از یک سیستم عامل را اجرا میکنند ،رم ،فضای ذخیرهسازی و پهنای باند شبکه را بدون مشکل به
اشتراک میگذارند.
یک سیستم عامل در یک ماشین مجازی به منبعی که توسط Hypervisorبه آن ارائه می شود دسترسی پیدا می کند.
Hypervisorترجمه و I/Oرا از ماشین مجازی به دستگاه های سرور فیزیکی و بازگشت دوباره به ماشین مجازی صحیح را
تسهیل می کند .به این ترتیب ،دستورالعملهای ممتاز خاصی که یک سیستم عامل «بومی» روی سختافزار میزبان خود اجرا
میکند ،توسط Hypervisorبهعنوان یک پروکسی برای ماشین مجازی به دام افتاده و اجرا میشوند .این امر باعث کاهش
عملکرد در فرآیند مجازی سازی می شود ،اگرچه با گذشت زمان ،هم بهبودهای سخت افزاری و هم نرم افزاری این سربار را به
حداقل رسانده است.
ماشین های مجازی از فایل ها تشکیل شده اند .یک ماشین مجازی معمولی می تواند فقط از چند فایل تشکیل شده باشد .یک
فایل پیکربندی وجود دارد که ویژگی های ماشین مجازی را توصیف می کند .این شامل تعریف سرور است ،تعداد پردازنده های
مجازی vCPUبه این ماشین مجازی اختصاص داده شده است ،چه مقدار RAMتخصیص داده شده است ،ماشین مجازی به
کدام دستگاه های ورودی/خروجی دسترسی دارد ،چه تعداد کارت رابط شبکه NICدر دستگاه موجود است .سرور مجازی و
موارد دیگر .همچنین فضای ذخیره سازی که VMمی تواند به آن دسترسی داشته باشد را توضیح می دهد .اغلب آن حافظه به
صورت دیسک های مجازی ارائه می شود که به عنوان فایل های اضافی در سیستم فایل فیزیکی وجود دارند .هنگامی که یک
ماشین مجازی روشن می شود ،یا نمونه سازی می شود ،فایل های اضافی برای ورود به سیستم ،صفحه بندی حافظه و سایر
عملکردها ایجاد می شود .اینکه یک VMاز فایلها تشکیل شده است ،عملکردهای خاصی را در یک محیط مجازی بسیار
سادهتر و سریعتر از یک محیط فیزیکی میکند .از اولین روزهای کامپیوترها ،پشتیبانگیری از دادهها یک عملکرد حیاتی بوده
است .از آنجایی که ماشینهای مجازی از قبل فایل هستند ،کپی کردن آنها نه تنها یک نسخه پشتیبان از دادهها ،بلکه یک کپی
از کل سرور ،از جمله سیستم عامل ،برنامهها و پیکربندی سختافزار تولید میکند.
برای ایجاد یک کپی از یک سرور فیزیکی ،سختافزار اضافی باید خریداری ،نصب ،پیکربندی ،با یک سیستمعامل ،برنامهها و
دادهها بارگیری شود ،و سپس قبل از تحویل به کاربران ،به آخرین ویرایشها وصله شود .این تدارک بسته به فرآیندهای موجود
در مکان ها می تواند هفته ها یا حتی ماه ها طول بکشد .از آنجایی که یک VMاز فایلها تشکیل شده است ،با کپی کردن آن
فایلها ،در یک محیط مجازی یک نسخه کامل از سرور در عرض چند دقیقه در دسترس است .چند تغییر پیکربندی برای ایجاد
وجود دارد ،نام سرور و آدرس IPبه نام دو مورد ،اما مدیران به طور معمول ماشینهای مجازی جدید را در عرض چند دقیقه یا
چند ساعت بر خالف ماهها نصب میکنند .روش دیگر برای ارائه سریع ماشینهای مجازی جدید ،استفاده از قالبها است .قالبها
ماشینهای مجازی هستند که نمیتوان آنها را روشن کرد ،پیکربندی سرور مجازی را تعریف کرد و تمام سیستم عامل و احتماالً
حتی نرمافزارهای کاربردی را نصب کرده است .آنچه انجام نشده است مراحل پیکربندی است که به طور منحصر به فرد آن سرور
725
سیستم عامل های داخلی و اصول طراحی726.........................................................................................................................
مجازی را شناسایی می کند .ایجاد یک ماشین مجازی جدید از یک الگو شامل ارائه آن شناسههای منحصربهفرد و ایجاد یک
VMتوسط نرمافزار تهیهکننده از الگو و اضافه کردن تغییرات پیکربندی به عنوان بخشی از استقرار است.
عالوه بر تجمیع و تدارک سریع ،دالیل زیادی وجود دارد که محیط های مجازی به مدل جدیدی برای زیرساخت های مرکز داده
تبدیل شده اند .یکی از این موارد افزایش در دسترس بودن است .میزبان های ماشین مجازی در کنار هم قرار می گیرند تا
مجموعه هایی از منابع محاسباتی را تشکیل دهند .چندین ماشین مجازی روی هر یک از این سرورها میزبانی می شوند و در
صورت خرابی سرور فیزیکی ،ماشین های مجازی روی هاست خراب می توانند به سرعت و به طور خودکار روی هاست دیگری
در خوشه راه اندازی مجدد شوند .در مقایسه با ارائه این نوع دسترسی برای یک سرور فیزیکی ،محیط های مجازی می توانند در
دسترس بودن باالتری را با هزینه بسیار کمتر و با پیچیدگی کمتر فراهم کنند .برای سرورهایی که نیاز به دسترسی بیشتر دارند،
تحمل خطا در برخی راهحلها از طریق استفاده از VMهای سایهدار در اجرای lockstepدر دسترس است تا اطمینان حاصل
شود که هیچ تراکنشی در صورت خرابی سرور فیزیکی ،دوباره بدون افزایش پیچیدگی ،از بین نمیرود.
یکی از قانعکنندهترین ویژگیهای محیطهای مجازی ،قابلیت جابهجایی یک ماشین مجازی در حال اجرا از یک میزبان فیزیکی
به میزبان دیگر ،بدون وقفه ،تخریب ،یا تأثیر بر کاربران آن ماشین مجازی است ،VMotion .همانطور که در یک محیط
VMwareشناخته می شود ،یا ،Live Migrationهمانطور که در محیط های دیگر شناخته می شود ،برای تعدادی از
وظایف حیاتی استفاده می شود.
از نقطه نظر در دسترس بودن ،انتقال ماشینهای مجازی از یک میزبان به میزبان دیگر بدون متحمل شدن خرابی به مدیران
اجازه میدهد تا بدون تأثیر بر عملیات ،روی میزبانهای فیزیکی کار کنند .تعمیر و نگهداری را می توان در صبح روز هفته به
جای زمان توقف برنامه ریزی شده در تعطیالت آخر هفته انجام داد .سرورهای جدید را می توان به محیط اضافه کرد و سرورهای
قدیمی را بدون تأثیرگذاری بر برنامه ها حذف کرد .عالوه بر این مهاجرتهایی که به صورت دستی آغاز میشوند ،بسته به
استفاده از منابع ،میتوان انتقالها را خودکار کرد .اگر یک ماشین مجازی شروع به مصرف منابع بیشتر از حد معمول کند،
ماشینهای مجازی دیگر میتوانند به طور خودکار به میزبانهایی در خوشهای که منابع در دسترس هستند جابجا شوند و
عملکرد کافی برای همه ماشینهای مجازی و عملکرد کلی بهتر را تضمین کنند .اینها نمونههای سادهای هستند که فقط سطح
آنچه را که محیطهای مجازی ارائه میدهند خراش میدهند.
همانطور که قبال ذکر شد Hypervisor ،بین سخت افزار و ماشین های مجازی قرار می گیرد .دو نوع Hypervisorوجود
دارد که با این تفاوت که آیا سیستم عامل دیگری بین Hypervisorو میزبان وجود دارد یا خیر .یک Hypervisorنوع 1
شکل a 14.3به عنوان یک الیه نرم افزاری نازک مستقیماً در یک سرور فیزیکی بارگذاری می شود ،دقیقاً مانند یک سیستم
عامل که بارگذاری می شود .پس از نصب و پیکربندی ،معموالً فقط چند دقیقه ،سرور میتواند از ماشینهای مجازی به عنوان
726
سیستم عامل های داخلی و اصول طراحی727.........................................................................................................................
مهمان پشتیبانی کند .در محیطهای بالغ ،که میزبانهای مجازیسازی برای افزایش دسترسی و متعادلسازی بار با هم
خوشهبندی میشوند ،میتوان یک Hypervisorروی یک میزبان جدید استیپ کرد ،آن میزبان جدید به یک خوشه موجود
ملحق شد و ماشینهای مجازی را میتوان بدون وقفه در سرویس به میزبان جدید منتقل کرد . .برخی از نمونههای
Hypervisorنوع 1عبارتند از Microsoft Hyper-V ،VMware ESXiو انواع مختلف Xen.این ایده که
Hypervisorبر روی "فلز خالی" یک سرور بارگذاری می شود ،معموالً برای مردم یک مفهوم دشوار است .آنها با راه حلی که
به عنوان یک برنامه کاربردی سنتی کار می کند ،راحت تر هستند ،کد برنامه ای که در باالی محیط سیستم عامل مایکروسافت
ویندوز یا یونیکس/لینوکس بارگذاری می شود .این دقیقاً چگونه یک هایپروایزور نوع 2است شکل b 14.3مستقر شده است.
برخی از نمونههای Hypervisor Type-2عبارتند از VMware Workstationو Oracle VM Virtual Box.
تفاوت های مهمی بین Type-1 Hypervisorو Type-2وجود دارد .یک Hypervisorنوع 1بر روی یک میزبان فیزیکی
مستقر است و می تواند مستقیماً منابع فیزیکی آن میزبان را کنترل کند ،در حالی که یک Hypervisorنوع 2دارای یک
سیستم عامل بین خود و آن منابع است و برای مدیریت همه موارد به سیستم عامل متکی است .تعامالت سخت افزاری از طرف
.Hypervisorبه دلیل آن الیه اضافی ،یک Hypervisorنوع 1ویژگی های عملکردی بسیار بهتری نسبت به Hypervisor
727
سیستم عامل های داخلی و اصول طراحی728.........................................................................................................................
نوع 2دارد .از آنجایی که یک Hypervisorنوع 1برای منابع با یک سیستم عامل رقابت نمی کند ،منابع بیشتری در هاست
موجود است ،و با گسترش ،ماشین های مجازی بیشتری را می توان روی سرور مجازی سازی با استفاده از یک Hypervisor
نوع 1میزبانی کردHypervisor .های نوع 1نیز از ایمن تر از Hypervisorهای نوع 2در نظر گرفته می شوند .ماشینهای
مجازی روی یک Hypervisorنوع 1درخواستهای منابعی را ارائه میکنند که خارج از آن مهمان مدیریت میشوند و
نمیتوانند روی ماشینهای مجازی دیگر یا Hypervisorهایی که توسط آنها پشتیبانی میشوند تأثیر بگذارند .این لزوماً برای
ماشین های مجازی روی یک Hypervisorنوع 2صادق نیست و یک مهمان مخرب به طور بالقوه می تواند بیش از خودش
تأثیر بگذارد .اجرای Hypervisorنوع 1به هزینه سیستم عامل میزبان نیاز ندارد ،اگرچه مقایسه هزینه واقعی بحث پیچیده
تری خواهد بودHypervisor .های نوع 2به کاربر اجازه می دهد تا از مجازی سازی بدون نیاز به اختصاص سرور فقط به آن
عملکرد استفاده کند .توسعه دهندگانی که نیاز به اجرای چندین محیط به عنوان بخشی از فرآیند خود دارند ،عالوه بر بهره
مندی از فضای کاری مولد شخصی که یک سیستم عامل رایانه شخصی فراهم می کند ،می توانند هر دو کار را با Hypervisor
نوع 2که به عنوان یک برنامه در لینوکس یا ویندوز خود نصب شده است انجام دهند .دسکتاپ .ماشینهای مجازی که ایجاد و
استفاده میشوند را میتوان از یک محیط Hypervisorبه محیط دیگر کپی کرد ،زمان استقرار را کاهش داد و دقت آنچه را
که مستقر میشود افزایش داد و زمان ورود به بازار یک پروژه را کاهش داد.
همانطور که مجازی سازی در شرکت ها رایج تر شد ،فروشندگان سخت افزار و نرم افزار هر دو به دنبال راه هایی برای ارائه
کارایی بیشتر بودند .جای تعجب نیست که این مسیرها هم به مجازی سازی به کمک نرم افزار و هم به مجازی سازی به کمک
سخت افزار منجر شد Paravirtualization .یک تکنیک مجازی سازی به کمک نرم افزار است که از APIهای تخصصی
برای پیوند دادن ماشین های مجازی با Hypervisorبرای بهینه سازی عملکرد آنها استفاده می کند .سیستم عامل در ماشین
مجازی ،لینوکس یا مایکروسافت ویندوز ،دارای پشتیبانی تخصصی فرامجازی سازی به عنوان بخشی از هسته ،و همچنین
درایورهای مجازی سازی خاص است که به سیستم عامل و Hypervisorاجازه می دهد تا با سربار ترجمه Hypervisorبا
هم کارایی بیشتری داشته باشند .این مجازیسازی به کمک نرمافزار ،پشتیبانی از مجازیسازی بهینه را بر روی سرورهایی با یا
بدون پردازندههایی که پسوندهای مجازیسازی را ارائه میدهند ،ارائه میدهد .پشتیبانی Paravirtualizationبه عنوان
بخشی از بسیاری از توزیع های عمومی لینوکس از سال 2008ارائه شده است.
به طور مشابه ،سازندههای پردازنده AMDو Intelقابلیتهایی را به پردازندههای خود اضافه کردند تا عملکرد را با
Hypervisorافزایش دهند AMD-V .و VT-xاینتل افزونههای مجازیسازی به کمک سختافزار را مشخص میکنند که
Hypervisorها میتوانند در طول پردازش از آنها بهره ببرند .پردازنده های اینتل یک مجموعه دستورالعمل اضافی به نام برنامه
های افزودنی ماشین مجازی VMXارائه می دهند .با داشتن برخی از این دستورالعملها به عنوان بخشی از پردازنده،
Hypervisorها دیگر نیازی به حفظ این توابع به عنوان بخشی از پایگاه کد خود ندارند ،خود کد میتواند کوچکتر و کارآمدتر
728
سیستم عامل های داخلی و اصول طراحی729.........................................................................................................................
باشد ،و عملیاتهایی که پشتیبانی میکنند بسیار سریعتر هستند ،زیرا به طور کامل روی آن انجام میشوند .پردازنده این
پشتیبانی به کمک سختافزار بر خالف مجازیسازی به یک سیستم عامل اصالحشده نیاز ندارد.
در یک محیط مجازی ،دو استراتژی اصلی برای تامین منابع پردازنده وجود دارد .اولین مورد شبیه سازی یک تراشه به عنوان نرم
افزار و فراهم کردن دسترسی به آن منبع است .نمونه هایی از این روش QEMUو شبیه ساز Androidدر Android
SDKهستند .آنها مزیت این را دارند که به راحتی قابل حمل و نقل باشند زیرا وابسته به پلت فرم نیستند ،اما از نقطه نظر
عملکرد بسیار کارآمد نیستند زیرا فرآیند شبیه سازی منابع فشرده است .مدل دوم در واقع پردازندهها را مجازیسازی نمیکند،
اما بخشهایی از زمان پردازش را روی پردازندههای فیزیکی pCPUمیزبان مجازیسازی به پردازندههای مجازی ماشینهای
مجازی میزبانی شده روی سرور فیزیکی ارائه میدهد.
اینگونه است که اکثر Hypervisorهای مجازی سازی منابع پردازنده را به مهمانان خود ارائه می دهند .هنگامی که سیستم
عامل در یک ماشین مجازی دستورالعمل ها را به پردازنده ارسال می کند Hypervisor ،درخواست را قطع می کند .سپس
زمان را بر روی پردازنده های فیزیکی میزبان برنامه ریزی می کند ،درخواست اجرا را ارسال می کند و نتایج را به سیستم عامل
VMبرمی گرداند .این امر کارآمدترین استفاده از منابع پردازنده موجود در سرور فیزیکی را تضمین می کند .برای افزودن
پیچیدگی ،زمانی که چندین ماشین مجازی برای پردازنده رقابت می کنند Hypervisor ،به عنوان کنترل کننده ترافیک عمل
می کند ،زمان پردازشگر را برای درخواست هر ماشین مجازی زمان بندی می کند و همچنین درخواست ها و داده ها را به و از
ماشین های مجازی هدایت می کند.
در کنار حافظه ،تعداد پردازنده هایی که یک سرور دارد یکی از معیارهای مهم در تعیین اندازه سرور است .این امر به ویژه در
یک محیط مجازی از یک محیط فیزیکی بسیار مهم است .در یک سرور فیزیکی ،معموالً برنامه از تمام منابع محاسباتی
پیکربندی شده در سیستم استفاده انحصاری دارد .به عنوان مثال ،در یک سرور با چهار پردازنده چهار هسته ای ،برنامه می تواند
از شانزده هسته پردازنده استفاده کند .معموالً نیازهای برنامه بسیار کمتر از آن است .این به این دلیل است که سرور فیزیکی
برای برخی از وضعیتهای احتمالی برنامه کاربردی در آینده که شامل رشد طی سه تا پنج سال میشود ،اندازهگیری شده است
و همچنین درجاتی از افزایش عملکرد آب را در خود جای داده است .در واقع ،از نقطه نظر پردازنده ،بیشتر سرورها به شدت
مورد استفاده قرار نمیگیرند ،که یک محرک قوی برای ادغام از طریق مجازیسازی همانطور که قبالً بحث شد است.
هنگامی که برنامه ها به محیط های مجازی منتقل می شوند ،یکی از موضوعات بزرگتر بحث این است که چه تعداد پردازنده
مجازی باید به ماشین های مجازی آنها اختصاص داده شود .از آنجایی که سرور فیزیکی ای که آنها تخلیه می کنند دارای شانزده
هسته است ،اغلب درخواست تیم برنامه این است که آن را در محیط مجازی ،بدون توجه به استفاده واقعی آنها ،کپی کنند.
729
سیستم عامل های داخلی و اصول طراحی730.........................................................................................................................
عالوه بر نادیده گرفتن استفاده در سرور فیزیکی ،یکی دیگر از موارد نادیده گرفته شده ،قابلیت های بهبود یافته پردازنده ها در
سرور مجازی سازی جدیدتر است .اگر برنامه در پایان پایان عمر/اجاره سرور آن انتقال داده شود ،سه تا پنج سال خواهد بود ،و
حتی در سه سال ،قانون مور پردازنده هایی را ارائه می دهد که چهار برابر سریعتر از پردازنده های موجود در سرور فیزیکی اصلی
هستند .به منظور کمک به "اندازه مناسب" پیکربندی ماشین مجازی ،ابزارهایی در دسترس هستند که استفاده از منابع
پردازنده ،حافظه ،شبکه و I/Oذخیره سازی را در سرورهای فیزیکی نظارت می کنند و سپس توصیه هایی برای VMبهینه
ارائه می کنند .اندازه گیری اگر این ابزار برآورد تلفیق قابل اجرا نباشد ،تعدادی روش خوب وجود دارد .یک قانون اساسی در
طول ایجاد VMاین است که با یک vCPUشروع کنید و عملکرد برنامه را نظارت کنید .افزودن vCPUهای اضافی در VM
ساده است و نیاز به تنظیم در تنظیمات VMدارد .اکثر سیستمعاملهای مدرن حتی قبل از اینکه بتوانند vCPUاضافی را
شناسایی کرده و از آن استفاده کنند ،نیازی به راهاندازی مجدد ندارند .روش خوب دیگر تخصیص بیش از حد تعداد vCPUها
در VMنیست .تعداد منطبقی از pCPUها باید برای vCPUها در VMبرنامه ریزی شود .اگر چهار vCPUدر VMخود
دارید Hypervisor ،باید به طور همزمان چهار pCPUرا در میزبان مجازی سازی از طرف ماشین مجازی زمان بندی کند .در
یک هاست مجازی سازی بسیار شلوغ ،پیکربندی بیش از حد vCPUبرای یک VMدر واقع می تواند تأثیر منفی بر عملکرد
برنامه VMبگذارد ،زیرا برنامه ریزی یک pCPUواحد سریعتر است .این بدان معنا نیست که برنامههایی وجود ندارند که به
چندین vCPUنیاز داشته باشند ،وجود دارند ،و باید به درستی پیکربندی شوند ،اما اکثر آنها اینطور نیستند.
سیستم عامل های بومی سخت افزار را با عمل به عنوان واسطه بین درخواست های کد برنامه و سخت افزار مدیریت می کنند.
همانطور که درخواست برای داده یا پردازش انجام می شود ،سیستم عامل آنها را به درایورهای صحیح دستگاه ،از طریق کنترل
کننده های فیزیکی ،به دستگاه های ذخیره سازی یا I/Oارسال می کند و دوباره باز می گردد .سیستم عامل روتر مرکزی
اطالعات است و دسترسی به تمام منابع فیزیکی سخت افزار را کنترل می کند .یکی از عملکردهای کلیدی سیستم عامل کمک
به جلوگیری از تماس های مخرب یا تصادفی سیستم از اختالل در برنامه ها یا خود سیستم عامل است.
حلقه های حفاظتی سطح دسترسی یا امتیاز را در داخل یک سیستم کامپیوتری توصیف می کنند و بسیاری از سیستم عامل ها
و معماری های پردازنده از این مدل امنیتی بهره می برند .قابل اعتمادترین الیه اغلب Ring 0صفر نامیده می شود و جایی
است که هسته سیستم عامل کار می کند و می تواند مستقیماً با سخت افزار تعامل داشته باشد.
حلقههای 1و 2جایی هستند که درایورهای دستگاه اجرا میشوند در حالی که برنامههای کاربردی کاربر در کمترین اطمینان
منطقه ،حلقه 3اجرا میشوند .اگرچه ،در عمل ،حلقههای 1و 2اغلب استفاده نمیشوند و مدل را به فضاهای اجرایی قابل اعتماد
و غیرقابل اعتماد ساده میکنند .کد برنامه نمیتواند مستقیماً با سختافزار تعامل داشته باشد زیرا در Ring 3اجرا میشود و به
سیستم عامل نیاز دارد تا کد را از طرف خود در Ring 0اجرا کند .این جداسازی از ایجاد اعمال غیرقابل اعتماد مانند خاموش
شدن سیستم یا دسترسی غیرمجاز جلوگیری میکند .داده ها از یک دیسک یا اتصال شبکه
730
سیستم عامل های داخلی و اصول طراحی731.........................................................................................................................
Hypervisorها در Ring 0اجرا می شوند و دسترسی سخت افزاری را برای ماشین های مجازی که میزبانی می کنند کنترل
می کنند .سیستمعاملهای آن ماشینهای مجازی نیز معتقدند که در Ring 0اجرا میشوند ،و به نوعی انجام میدهند ،اما فقط
روی سختافزار مجازی که به عنوان بخشی از ماشین مجازی ایجاد شده است .در مورد خاموش شدن سیستم ،سیستم عامل
مهمان دستور خاموش کردن را در حلقه 0درخواست می کند Hypervisor .درخواست را قطع می کند .در غیر این صورت
سرور فیزیکی خاموش می شود و باعث خرابی Hypervisorو هر ماشین مجازی دیگری می شود که میزبانی می شود .در
عوض Hypervisor ،به سیستم عامل مهمان پاسخ می دهد که خاموش شدن طبق درخواست پیش می رود ،که به سیستم
عامل مهمان اجازه می دهد تا فرآیندهای خاموش کردن نرم افزار الزم را تکمیل کند.
14.3مدیریت حافظه
مانند تعداد vCPUها ،مقدار حافظه تخصیص داده شده به یک ماشین مجازی یکی از مهم ترین گزینه های پیکربندی است.
در واقع ،منابع حافظه معموالً اولین گلوگاهی هستند که زیرساختهای مجازی با رشد به آن میرسند .همچنین ،مانند مجازی
سازی پردازنده ها ،استفاده از حافظه در محیط های مجازی بیشتر در مورد مدیریت منابع فیزیکی است تا ایجاد یک موجودیت
مجازی .همانند یک سرور فیزیکی ،یک ماشین مجازی باید با حافظه کافی پیکربندی شود تا با فراهم کردن فضایی برای سیستم
عامل و برنامههای کاربردی ،عملکرد مؤثری داشته باشد .مجدداً ،ماشین مجازی با منابع کمتری نسبت به میزبان مجازی
پیکربندی شده است .یک مثال ساده می تواند سرور فیزیکی با 8گیگابایت رم باشد .یک ماشین مجازی با 1گیگابایت حافظه
فقط 1گیگابایت حافظه را می بیند ،حتی اگر سرور فیزیکی که روی آن میزبانی می شود بیشتر باشد .هنگامی که ماشین
مجازی از منابع حافظه استفاده می کند Hypervisor ،درخواست های حافظه را از طریق استفاده از جداول ترجمه مدیریت
می کند تا سیستم عامل مهمان VMفضای حافظه را در آدرس هایی که انتظار دارند آدرس دهد .این اولین قدم خوب است،
اما مشکالت همچنان پابرجاست .مشابه پردازنده ،صاحبان برنامه درخواست تخصیص حافظه میکنند که منعکس کننده
زیرساختهای فیزیکی است که از آن مهاجرت کردهاند ،صرف نظر از اینکه آیا اندازه تخصیص تضمین شده است یا خیر .این
منجر به تامین بیش از حد ماشین های مجازی و هدر رفتن منابع حافظه می شود .در مورد سرور 8گیگابایتی ما ،تنها 7
دستگاه VM 1گیگابایتی میتوانست میزبانی شود و بخشی از 1گیگابایت باقی مانده برای خود Hypervisorمورد نیاز است.
جدا از «اندازه مناسب» ماشینهای مجازی بر اساس ویژگیهای عملکرد واقعی آنها ،ویژگیهایی در هایپروایزورها وجود دارد که
به بهینهسازی استفاده از حافظه کمک میکند .یکی از اینها اشتراک گذاری صفحه است شکل .14.4به اشتراک گذاری صفحه
شبیه به حذف مجدد داده ها است ،یک تکنیک ذخیره سازی که تعداد بلوک های ذخیره سازی مورد استفاده را کاهش می
دهد .هنگامی که یک VMنمونه سازی می شود ،صفحات سیستم عامل و برنامه ها در حافظه بارگذاری می شوند .اگر چندین
ماشین مجازی نسخه یکسانی از سیستم عامل را بارگیری می کنند یا برنامه های مشابهی را اجرا می کنند ،بسیاری از این بلوک
های حافظه تکراری هستند Hypervisor .در حال حاضر انتقال حافظه مجازی به فیزیکی را مدیریت می کند و می تواند
731
سیستم عامل های داخلی و اصول طراحی732.........................................................................................................................
تعیین کند که آیا یک صفحه قبالً در حافظه بارگذاری شده است یا خیر .به جای بارگذاری یک صفحه تکراری در حافظه
فیزیکی Hypervisor ،پیوندی به صفحه اشتراک گذاری شده در جدول ترجمه ماشین مجازی ارائه می دهد.
در میزبان هایی که مهمانان از سیستم عامل و برنامه های مشابه استفاده می کنند ،بین ده تا چهل درصد از حافظه فیزیکی
واقعی را می توان بازیابی کرد .با بیست و پنج درصد سرور 8گیگابایتی خود ،میتوانیم میزبان دو ماشین مجازی 1گیگابایتی
دیگر باشیم.
از آنجایی که Hypervisorاشتراکگذاری صفحه را مدیریت میکند ،سیستم عامل های ماشین مجازی از آنچه در سیستم
فیزیکی اتفاق میافتد بیاطالع هستند .یک استراتژی دیگر برای استفاده کارآمد از حافظه ،مشابه تدارکات نازک در مدیریت
ذخیره سازی است .این به مدیر اجازه میدهد تا فضای ذخیرهسازی بیشتری را نسبت به آنچه در سیستم وجود دارد به کاربر
اختصاص دهد .دلیل آن ارائه یک عالمت آب باال است که اغلب هرگز به آن نزدیک نمی شود .همین کار را می توان با حافظه
ماشین مجازی انجام داد .ما 1گیگابایت حافظه اختصاص می دهیم ،اما این چیزی است که توسط سیستم عامل VMمشاهده
می شود Hypervisor .میتواند با بازیابی صفحات قدیمیتری که استفاده نمیشوند ،بخشی از حافظه اختصاص داده شده را
برای ماشین مجازی دیگر استفاده کند .فرآیند احیا از طریق بالن انجام می شود Hypervisor .یک درایور بالون را فعال می
کند که عمالً سیستم عامل مهمان را باد کرده و فشار می دهد تا صفحات را روی دیسک صاف کند .هنگامی که صفحات پاک
می شوند ،درایور بالون خالی می شود و Hypervisorمی تواند از حافظه فیزیکی برای ماشین های مجازی دیگر استفاده کند.
این فرآیند در زمانهای اختالف حافظه اتفاق میافتد .اگر ماشین های مجازی 1گیگابایتی ما به طور متوسط از نیمی از حافظه
خود استفاده می کردند 9 ،ماشین مجازی تنها به 4.5گیگابایت نیاز دارند و مابقی به عنوان یک استخر مشترک مدیریت شده
توسط Hypervisorو برخی برای سربار Hypervisorنیاز دارند .حتی اگر سه ماشین مجازی 1گیگابایتی دیگر را میزبانی
کنیم ،همچنان یک ذخیره مشترک وجود دارد .این قابلیت برای تخصیص حافظه بیشتر از مقدار فیزیکی موجود بر روی یک
میزبان overcommit ،حافظه نامیده می شود .غیر معمول نیست که محیط های مجازی بین 1.2تا 1.5برابر حافظه
اختصاص داده شده و در موارد شدید ،چندین برابر بیشتر داشته باشند.
تکنیک های مدیریت حافظه اضافی وجود دارد که استفاده بهتر از منابع را فراهم می کند .در تمام موارد ،سیستم عامل های
موجود در ماشین های مجازی ،میزان حافظه ای را که به آنها اختصاص داده شده است ،می بینند و به آن دسترسی دارند.
Hypervisorاین دسترسی به حافظه فیزیکی را مدیریت می کند تا اطمینان حاصل کند که تمام درخواست ها به موقع بدون
تأثیرگذاری بر ماشین های مجازی سرویس می شوند .در مواردی که حافظه فیزیکی بیش از مقدار موجود مورد نیاز است،
Hypervisorمجبور خواهد شد به صفحهبندی روی دیسک متوسل شود .در محیطهای خوشه میزبان چندگانه ،ماشینهای
مجازی میتوانند بهطور خودکار به میزبانهای دیگر منتقل شوند وقتی منابع خاصی کمیاب میشوند.
732
سیستم عامل های داخلی و اصول طراحی733.........................................................................................................................
14.4مدیریت I/O
عملکرد برنامه اغلب مستقیماً به پهنای باندی که به سرور اختصاص داده شده است مرتبط است .چه دسترسی به فضای
ذخیرهسازی محدود شده باشد و چه ترافیک شبکه را محدود کرده باشد ،هر دو مورد باعث میشوند که یک برنامه کاربردی
ضعیف تلقی شود .به این ترتیب ،در طول مجازیسازی حجمهای کاری ،مجازیسازی I/Oیک مورد حیاتی است .معماری نحوه
مدیریت I/Oدر یک محیط مجازی ساده است شکل .14.5در ماشین مجازی ،سیستم عامل مانند یک سرور فیزیکی با درایور
دستگاه تماس می گیرد .سپس درایور دستگاه به دستگاه متصل می شود .اگرچه در مورد سرور مجازی ،دستگاه یک دستگاه
شبیه سازی شده است که توسط Hypervisorمرحله بندی و مدیریت می شود.
این دستگاه های شبیه سازی شده معموالً یک دستگاه واقعی معمولی هستند ،مانند کارت رابط شبکه Intel e1000یا
کنترلرهای ساده عمومی SGVAیا IDE.این دستگاه مجازی به پشته ورودی/خروجی Hypervisorمتصل میشود که با
درایور دستگاه که به یک دستگاه فیزیکی در سرور میزبان نگاشت شده ارتباط برقرار میکند و آدرسهای ورودی/خروجی مهمان
را به آدرسهای ورودی/خروجی میزبان فیزیکی ترجمه میکند.
Hypervisorدرخواستهای بین درایور دستگاه ماشین مجازی را از طریق پشته ورودی/خروجی ،خارج از دستگاه فیزیکی و
مجدداً کنترل و نظارت میکند و تماسهای ورودی/خروجی را به دستگاههای صحیح در ماشینهای مجازی صحیح مسیریابی
میکند .برخی از تفاوت های معماری بین فروشندگان وجود دارد ،اما مدل اصلی مشابه است.
733
سیستم عامل های داخلی و اصول طراحی734.........................................................................................................................
مزایای مجازی سازی مسیر ورودی/خروجی حجم کاری بسیار زیاد است .استقالل سختافزار را با انتزاع درایورهای خاص
فروشنده به نسخههای عمومیتر که روی Hypervisorاجرا میشوند ،امکانپذیر میکند .یک ماشین مجازی که روی سرور
IBMبهعنوان میزبان اجرا میشود ،میتواند بدون نگرانی در مورد ناسازگاری سختافزار یا عدم تطابق نسخهها ،بهصورت زنده
به میزبان سرور HP bladeمنتقل شود .این انتزاع یکی از بزرگترین نقاط قوت در دسترس بودن مجازی سازی ،مهاجرت زنده
را امکان پذیر می کند .به اشتراک گذاری منابع مجموع ،برای مثال مسیرهای شبکه نیز به دلیل این انتزاع است .در راهحلهای
بالغتر ،قابلیتهایی برای کنترل دقیق انواع ترافیک شبکه و پهنای باند ارائه شده به ماشینهای مجازی یا گروههایی از
ماشینهای مجازی وجود دارد تا عملکرد کافی در یک محیط مشترک را تضمین کند تا سطح کیفیت خدمات انتخابی را تضمین
کند .قابلیت overcommitحافظه یکی دیگر از مزایای مجازی سازی I/Oیک VMاست .عالوه بر اینها ،ویژگی های دیگری
نیز وجود دارد که امنیت و در دسترس بودن را افزایش می دهد .مبادله این است که Hypervisorتمام ترافیکی را که برای آن
طراحی شده مدیریت می کند ،اما به سربار پردازنده نیاز دارد .در روزهای اولیه مجازیسازی ،این موضوعی بود که میتوانست
یک عامل محدودکننده باشد ،اما پردازندههای چند هستهای سریعتر و Hypervisorهای پیچیده همه این نگرانی را از بین
بردهاند.
پردازندههای سریعتر به Hypervisorاجازه میدهند تا عملکردهای مدیریت ورودی/خروجی خود را سریعتر انجام دهد ،اما
سرعت پردازش پردازنده مهمان را نیز افزایش میدهد .تغییرات سخت افزاری صریح برای پشتیبانی مجازی سازی نیز باعث
بهبود عملکرد می شود .اینتل فناوری شتاب I/O I/OATرا ارائه میکند ،یک زیرسیستم فیزیکی که نسخههای حافظه را از
طریق دسترسی مستقیم به حافظه DMAاز پردازنده اصلی به این بخش تخصصی مادربرد منتقل میکند .اگرچه DMAاز راه
دور برای بهبود عملکرد شبکه طراحی شده است ،سرعت انتقال زنده را نیز بهبود می بخشد .بارگذاری کار از پردازنده به دستگاه
های هوشمند راه دیگری برای بهبود عملکرد است .کارت های رابط شبکه هوشمند از تعدادی فناوری در این فضا پشتیبانی می
کنند TCP Offload Engine TOE .پردازش TCP/IPرا از پردازنده سرور به طور کامل به NICحذف می کند .تغییرات
دیگر در این موضوع عبارتند از ،Large Receive Offload LROکه بسته های ورودی را در بسته ها برای پردازش
کارآمدتر جمع می کند ،و معکوس آن ،Large Segment Offload LSOکه به Hypervisorاجازه می دهد چندین
بسته TCP/IPخروجی را جمع کند و دارای سخت افزار NICآنها را به بسته های جداگانه تقسیم می کند.
عالوه بر مدلی که قبال توضیح داده شد ،برخی از برنامه ها یا کاربران یک مسیر اختصاصی را می خواهند .در این مورد ،گزینه
هایی برای دور زدن پشته ورودی/خروجی Hypervisorو نظارت و اتصال مستقیم از درایور دستگاه ماشین مجازی به دستگاه
فیزیکی در میزبان مجازی سازی وجود دارد .این فضیلت داشتن یک منبع اختصاصی را بدون هیچ گونه سرباری فراهم می کند
که بیشترین توان عملیاتی ممکن را ارائه می دهد .عالوه بر توان عملیاتی بهتر ،از آنجایی که Hypervisorحداقل درگیر است،
تاثیر کمتری بر روی پردازنده سرور میزبان خواهد داشت .نقطه ضعف دستگاه ورودی/خروجی مستقیماً متصل این است که
734
سیستم عامل های داخلی و اصول طراحی735.........................................................................................................................
ماشین مجازی به سرور فیزیکی که روی آن اجرا میشود متصل است .بدون انتزاع دستگاه ،مهاجرت زنده به راحتی امکان پذیر
نیست ،که به طور بالقوه می تواند در دسترس بودن را کاهش دهد .ویژگیهایی که توسط Hypervisorارائه میشوند ،مانند
overcommitحافظه یا کنترل ،I/Oدر دسترس نیستند ،که میتواند منابع کم استفاده را هدر دهد و نیاز به مجازیسازی را
کاهش دهد .اگرچه یک مدل دستگاه اختصاصی عملکرد بهتری را ارائه می دهد ،امروزه به ندرت استفاده می شود ،زیرا مراکز
داده انعطاف پذیری را انتخاب می کنند که I/Oمجازی فراهم می کند.
هسته مجازی سازی VMkernelهسته Hypervisorاست و تمام توابع مجازی سازی را انجام می دهد .در نسخه های قبلی
ESXشکل Hypervisor ،14.6در کنار یک نصب لینوکس که به عنوان یک الیه مدیریت عمل می کرد ،مستقر شد .برخی
از عملکردهای مدیریتی مانند ورود به سیستم ،خدمات نام ،و اغلب عوامل شخص ثالث برای پشتیبان گیری یا نظارت بر سخت
افزار در این کنسول سرویس نصب شده بودند .همچنین مکانی عالی برای مدیران برای اجرای اسکریپت ها و برنامه های دیگر
ایجاد کرد .کنسول سرویس دو مشکل داشت .اولین مورد این بود که به طور قابل توجهی بزرگتر از Hypervisorبود .یک
نصب معمولی به حدود 32مگابایت برای Hypervisorو حدود 900مگابایت برای کنسول سرویس نیاز دارد .مورد دوم این
بود که کنسول سرویس مبتنی بر لینوکس یک رابط و سیستم کامالً قابل درک بود و در برابر حمالت بدافزار یا افراد آسیب پذیر
بود VMware .سپس ESXرا مجدداً طراحی کرد تا بدون کنسول سرویس نصب و مدیریت شود.
این معماری جدید که ESXiنامیده میشودi» « ،برای یکپارچهسازی ،همه خدمات مدیریتی را به عنوان بخشی از
VMkernelدارد شکل .14.7این یک بسته کوچکتر و بسیار امن تر از قبل فراهم می کند .نسخه های فعلی در همسایگی
حدود 100مگابایت هستند .این اندازه کوچک به فروشندگان سرور اجازه میدهد تا سختافزاری را با ESXiکه از قبل بر روی
حافظه فلش در سرور موجود است ،تحویل دهند .مدیریت پیکربندی ،نظارت و اسکریپت نویسی اکنون از طریق ابزارهای رابط
خط فرمان در دسترس هستند .عوامل شخص ثالث نیز پس از تایید و امضای دیجیتال در VMkernelاجرا می شوند .به عنوان
مثال ،یک فروشنده سرور که نظارت سختافزاری را ارائه میکند ،اجازه میدهد تا عاملی را در VMkernelبگنجاند که
735
سیستم عامل های داخلی و اصول طراحی736.........................................................................................................................
میتواند بهطور یکپارچه معیارهای سختافزار مانند دمای داخلی یا وضعیت اجزا را به ابزارهای مدیریت VMwareیا سایر
ابزارهای مدیریتی بازگرداند.
دستورات CLI
برای پیکربندی و
پشتیبانی
و VMپشتیبانی
مدیریت منابع
دستورات CLIبرای
پیکربندی و پشتیبانی
عوامل زیرساخت
چارچوب مدیریت مدل اطالعات رایج پشتیبانی VMو
VMware )(NTP ،Syslog مدیریت منابع
ماشینهای مجازی از طریق خدمات زیرساختی در VMkernelمیزبانی میشوند .هنگامی که منابع توسط ماشین های مجازی
درخواست می شوند Hypervisor ،این درخواست ها را برآورده می کند و از طریق درایورهای دستگاه مناسب کار می کند.
همانطور که قبالً توضیح داده شد Hypervisor ،همه تراکنشهای بین چندین ماشین مجازی و منابع سختافزاری روی سرور
فیزیکی را هماهنگ میکند.
736
سیستم عامل های داخلی و اصول طراحی737.........................................................................................................................
اگرچه مثالهایی که تاکنون مورد بحث قرار گرفتهاند بسیار ابتدایی هستند ،اما VMware ESXiویژگیهای پیشرفته و
پیچیدهای را برای دسترسی ،مقیاسپذیری ،امنیت ،مدیریت و عملکرد ارائه میکند .قابلیتهای اضافی با هر نسخه معرفی
میشود و قابلیتهای پلتفرم را بهبود میبخشد .برخی از نمونه ها به شرح زیر است:
،Storage VMotion-که امکان جابجایی فایلهای دادهای را که یک ماشین مجازی را تشکیل میدهند ،در زمانی که آن
ماشین مجازی در حال استفاده است ،میدهد.
،Fault Tolerance-که یک کپی lockstepاز یک ماشین مجازی روی یک میزبان متفاوت ایجاد می کند .اگر هاست اصلی
دچار مشکل شود ،اتصاالت ماشین مجازی بدون ایجاد وقفه در کاربران یا برنامهای که استفاده میکنند ،به نسخه کپی منتقل
میشوند .این با دسترسی باال متفاوت است ،که نیاز به راه اندازی مجدد ماشین مجازی در سرور دیگری دارد.
،Site Recovery Manager-که از فناوریهای تکراری مختلف برای کپی کردن ماشینهای مجازی منتخب در یک سایت
ثانویه در صورت بروز فاجعه در مرکز داده استفاده میکند .سایت ثانویه را می توان در عرض چند دقیقه ایستاد .ماشینهای
مجازی به صورت انتخابی و طبقهبندی شده به صورت خودکار روشن میشوند تا انتقالی صاف و دقیق را تضمین کنند.
Storage-و Network I/O Controlبه مدیر این امکان را می دهد که پهنای باند شبکه را در یک شبکه مجازی به روشی
بسیار ریز تخصیص دهد .این خطمشیها زمانی فعال میشوند که در شبکه اختالف نظر وجود داشته باشد و میتواند تضمین
کند که ماشینهای مجازی خاص ،گروههایی از ماشینهای مجازی که یک برنامه کاربردی خاص را تشکیل میدهند ،یا
کالسهایی از دادهها یا ترافیک ذخیرهسازی ،اولویت و پهنای باند مورد نیاز را برای کارکردن به دلخواه دارند.
،Distributed Resource Scheduler DRS-که به طور هوشمند ماشین های مجازی را برای راه اندازی روی هاست ها
قرار می دهد و می تواند به طور خودکار بارهای کاری را از طریق VMotionبر اساس سیاست های تجاری و استفاده از منابع
متعادل کند .یکی از جنبه های این ،مدیریت توان توزیع شده ،DPMمی تواند هاست های فیزیکی را در صورت نیاز خاموش و
روشن کند Storage DRS .میتواند به طور فعال فایلهای ماشین مجازی را بر اساس ظرفیت ذخیرهسازی و تأخیر ،I/O
دوباره بر اساس قوانین تجاری و استفاده از منابع ،انتقال دهد.
اینها تنها تعدادی از ویژگی هایی هستند که راه حل ESXi VMwareرا به گذشته گسترش می دهند و صرفاً یک
Hypervisorاست که می تواند ماشین های مجازی را در بستری برای مرکز داده جدید و پایه ای برای محاسبات ابری
پشتیبانی کند.
737
سیستم عامل های داخلی و اصول طراحی738.........................................................................................................................
در اوایل دهه ،2000یک تالش مستقر در دانشگاه کمبریج منجر به توسعه ،Xenیک Hypervisorمنبع باز شد .با گذشت
زمان و با افزایش نیاز به مجازی سازی ،بسیاری از انواع Hypervisorاز شاخه اصلی Xenخارج شده اند .امروزه ،عالوه بر
Hypervisorمنبع باز ،تعدادی Hypervisorتجاری مبتنی بر Xenاز سیتریکس ،اوراکل و دیگران ارائه شده است .معماری
Xenکه متفاوت از مدل VMwareاست ،برای کار با Hypervisorبه یک سیستم عامل یا دامنه اختصاصی نیاز دارد ،شبیه
به کنسول سرویس VMwareشکل .14.8این دامنه اولیه به نام دامنه صفر Dom0شناخته می شود ،پشته ابزار Xenرا
اجرا می کند و به عنوان منطقه ممتاز ،دسترسی مستقیم به سخت افزار دارد .بسیاری از نسخه های لینوکس حاوی یک
Xen Hypervisorهستند که قادر به ایجاد یک محیط مجازی است.
برخی از اینها SUSE ،Red Hat RHEL ،OracleVM ،Ubuntu ،Fedora ،Debian ،CentOSو XenServer
هستند .شرکتهایی که از راهحلهای مجازیسازی مبتنی بر Xenاستفاده میکنند به دلیل هزینه کمتر یا بدون نرمافزار یا به
دلیل تخصص لینوکس داخلی خود ،این کار را انجام میدهند.
مهمانهای Xenدامنههای غیرمجاز یا گاهی اوقات دامنههای کاربری هستند که به آنها DomUگفته میشود Dom0 .از
طریق درایورهای BackEndکه با درایورهای FrontEndدر DomUارتباط برقرار می کنند ،دسترسی به شبکه و منابع
ذخیره سازی را برای مهمانان فراهم می کند .مگر اینکه دستگاههای عبوری پیکربندی شده باشند معموالً ،USBتمام
ورودی/خروجی شبکه و ذخیرهسازی از طریق Dom0مدیریت میشود .از آنجایی که Dom0خود نمونه ای از لینوکس است،
اگر اتفاق غیرمنتظره ای برای آن بیفتد ،تمام ماشین های مجازی که پشتیبانی می کند تحت تأثیر قرار می گیرند .نگهداری
استاندارد سیستم عامل مانند وصله نیز می تواند به طور بالقوه بر در دسترس بودن کلی تأثیر بگذارد.
مانند بسیاری از پیشنهادات منبع باز Xen ،دارای بسیاری از قابلیت های پیشرفته ارائه شده توسط VMware ESXiنیست،
اگرچه با هر نسخه ،ویژگی های اضافی ظاهر می شود و ویژگی های موجود بهبود می یابد.
738
سیستم عامل های داخلی و اصول طراحی739.........................................................................................................................
مایکروسافت تعدادی فناوری مجازی سازی دارد ،از جمله ،Virtual Serverیک Hypervisorنوع 2که در سال 2005
خریداری شد و هنوز هم بدون هیچ هزینه ای در دسترس است ،Microsoft Hyper-V .یک Hypervisorنوع ،1برای
اولین بار در سال 2008به عنوان بخشی از نسخه سیستم عامل ویندوز سرور 2008منتشر شد .مشابه معماری Hyper- ،Xen
Vدارای یک پارتیشن والد است که به عنوان یک مکمل اداری برای Hypervisor Type-1عمل می کند شکل .14.9
ماشین های مجازی مهمان به عنوان پارتیشن فرزند تعیین می شوند .پارتیشن والد عالوه بر عملکردهایی مانند مدیریت
،Hypervisorپارتیشن های مهمان و درایورهای دستگاه ،سیستم عامل ویندوز سرور را نیز اجرا می کند .مشابه درایورهای
FrontEndو BackEndدر ،Xenپارتیشن والد در Hyper-Vاز یک Virtualization Service Provider VSP
برای ارائه خدمات دستگاه به پارتیشن های فرزند استفاده می کند .پارتیشن های فرزند با VSPها با استفاده از سرویس گیرنده
یا مصرف کننده مجازی سازی VSCبرای نیازهای I/Oآنها ارتباط برقرار می کنند.
مایکروسافت Hyper-Vبه دلیل نیازهای سیستم عامل در پارتیشن والد ،مشاجره منابعی که یک نسخه اضافی از ویندوز روی
سرور نیاز دارد و مجرای I/Oمنفرد ،چالش های در دسترس بودن مشابه Xenدارد .از نقطه نظر ویژگی Hyper-V ،بسیار
قوی است ،اگرچه به اندازه ESXiمورد استفاده قرار نمی گیرد زیرا هنوز در بازار نسبتاً جدید است .با گذشت زمان و ظاهر
شدن عملکردهای جدید ،پذیرش احتماال افزایش خواهد یافت.
JAVA VM 14.7
اگرچه ماشین مجازی جاوا JVMاصطالح ماشین مجازی را به عنوان بخشی از نام خود دارد ،پیاده سازی و کاربردهای آن با
مدل هایی که ما پوشش داده ایم متفاوت استHypervisor .ها از یک یا چند ماشین مجازی روی یک هاست پشتیبانی می
کنند .این ماشینهای مجازی حجمهای کاری مستقلی هستند که از یک سیستم عامل و برنامههای کاربردی پشتیبانی میکنند
و از منظر آنها به مجموعهای از دستگاههای سختافزاری دسترسی دارند که محاسبات ،ذخیرهسازی و منابع ورودی/خروجی را
فراهم میکنند.
739
سیستم عامل های داخلی و اصول طراحی740.........................................................................................................................
هدف یک ماشین مجازی جاوا این است که یک فضای زمان اجرا برای مجموعه ای از کدهای جاوا برای اجرا بر روی هر سیستم
عاملی که روی هر پلتفرم سخت افزاری مرحله بندی شده است ،بدون نیاز به ایجاد تغییرات کد برای تطبیق با سیستم عامل ها
یا سخت افزارهای مختلف ،اجرا شود .هدف هر دو مدل مستقل بودن از پلتفرم از طریق استفاده از درجه ای از انتزاع است.
JVMبه عنوان یک ماشین محاسباتی انتزاعی ،متشکل از یک مجموعه دستورالعمل ،یک رجیستر کامپیوتر شمارگر برنامه ،یک
پشته برای نگهداری متغیرها و نتایج ،یک پشته برای داده های زمان اجرا و جمع آوری زباله ،و یک ناحیه روش برای کد و ثابت
ها توصیف می شود JVM . .میتواند چندین رشته را پشتیبانی کند و هر رشته دارای مناطق ثبت و پشته مخصوص به خود
است ،اگرچه مناطق heapو روش در بین تمام رشتهها به اشتراک گذاشته میشوند .هنگامی که JVMنمونه سازی می شود،
محیط زمان اجرا شروع می شود ،ساختارهای حافظه با متد کد و متغیرهای انتخاب شده تخصیص داده شده و پر می شوند و
برنامه شروع می شود .کدی که در JVMاجرا می شود در زمان حقیقی از زبان جاوا به کد باینری مناسب تفسیر می شود .اگر
آن کد معتبر باشد و استانداردهای مورد انتظار را رعایت کند ،پردازش آن آغاز خواهد شد .اگر نامعتبر باشد و فرآیند با شکست
مواجه شود ،یک شرط خطا مطرح شده و به JVMو کاربر برگردانده می شود.
جاوا و JVMدر زمینههای بسیار متنوعی از جمله برنامههای کاربردی وب ،دستگاههای تلفن همراه و دستگاههای هوشمند از
دستگاههای تلویزیون گرفته تا دستگاههای بازی گرفته تا پخشکنندههای Blue-Rayو سایر مواردی که از کارتهای هوشمند
استفاده میکنند ،استفاده میشوند .وعده جاوا مبنی بر "یک بار بنویسید ،هرجا اجرا کنید" یک مدل استقرار چابک و ساده را
ارائه می دهد که به برنامه ها اجازه می دهد مستقل از پلت فرم اجرا توسعه یابند.
Linux VServerیک رویکرد منبع باز ،سریع و سبک برای پیاده سازی ماشین های مجازی بر روی سرور لینوکس است
LIGN05. ،SOLT07فقط یک کپی از هسته لینوکس درگیر است VServer .شامل یک اصالح نسبتاً متوسط در هسته به
اضافه مجموعه کوچکی از ابزارهای OS userland1است .هسته لینوکس VServerاز تعدادی سرور مجازی مجزا پشتیبانی
می کند .هسته تمام منابع و وظایف سیستم را مدیریت می کند ،از جمله زمان بندی فرآیند ،حافظه ،فضای دیسک و زمان
پردازنده.
معماری
هر سرور مجازی با استفاده از قابلیتهای هسته لینوکس از سرورهای دیگر جدا میشود .این امنیت را فراهم می کند و راه
اندازی چندین ماشین مجازی را بر روی یک پلتفرم آسان می کند .جداسازی شامل چهار عنصر است،chcontext ،chroot :
chbindو قابلیتها.
740
سیستم عامل های داخلی و اصول طراحی741.........................................................................................................................
دستور chrootیک دستور یونیکس یا لینوکس است تا فهرست راهنمای ریشه /را به چیزی غیر از پیشفرض در طول عمر
فرآیند فعلی تبدیل کند .فقط می تواند توسط کاربران ممتاز اجرا شود و برای دادن دسترسی به یک فرآیند معموالً یک سرور
شبکه مانند FTPیا HTTPبه بخش محدودی از سیستم فایل استفاده می شود .این دستور ایزوله سیستم فایل را فراهم می
کند .تمام دستورات اجرا شده توسط سرور مجازی فقط می توانند بر روی فایل هایی اثر بگذارند که با روت تعریف شده برای آن
سرور شروع می شوند.
ابزار لینوکس chcontextیک زمینه امنیتی جدید را اختصاص می دهد و دستورات را در آن زمینه اجرا می کند .زمینه امنیتی
معمولی یا میزبانی شده زمینه 0است .این متن دارای امتیازات مشابه با کاربر اصلی است UID 0:این زمینه می تواند وظایف
دیگر را در زمینه های دیگر ببیند و از بین ببرد .زمینه شماره 1برای مشاهده سایر زمینه ها استفاده می شود اما نمی تواند بر
آنها تأثیر بگذارد .همه زمینههای دیگر انزوای کامل را فراهم میکنند :فرآیندهای یک زمینه نه میتوانند فرآیندهای بافتی دیگر
را ببینند و نه با آنها تعامل داشته باشند .این امکان را فراهم می کند تا زمینه های مشابه را در یک رایانه بدون هیچ گونه تعاملی
در سطح برنامه اجرا کنید .بنابراین ،هر سرور مجازی زمینه اجرای خود را دارد که جداسازی فرآیند را فراهم می کند .ابزار
chbindیک فرمان را اجرا می کند و فرآیند حاصل و فرزندان آن را در استفاده از یک آدرس IPخاص قفل می کند .پس از
فراخوانی ،به تمام بسته هایی که توسط این سرور مجازی از طریق رابط شبکه سیستم ارسال می شود ،آدرس IPارسالی که از
آرگومان داده شده به chbindمشتق شده است ،اختصاص می یابد .این فراخوانی سیستم ایزوله شبکه را فراهم می کند :هر
سرور مجازی از یک آدرس IPمجزا و مجزا استفاده می کند .ترافیک ورودی در نظر گرفته شده برای یک سرور مجازی توسط
سرورهای مجازی دیگر قابل دسترسی نیست.
در نهایت به هر سرور مجازی مجموعه ای از قابلیت ها اختصاص داده می شود .مفهوم قابلیت ها ،همانطور که در لینوکس
استفاده می شود ،به پارتیشن بندی امتیازات موجود برای یک کاربر ریشه ،مانند توانایی خواندن فایل ها یا ردیابی فرآیندهای
متعلق به کاربر دیگر اشاره دارد .بنابراین ،به هر سرور مجازی می توان یک زیرمجموعه محدود از امتیازات کاربر ریشه اختصاص
داد .این جداسازی ریشه را فراهم می کند VServer .همچنین میتواند محدودیتهای منابع را تعیین کند ،مانند
محدودیتهایی برای مقدار حافظه مجازی که ممکن است یک فرآیند استفاده کند.
شکل 14.10معماری کلی Linux VServerرا نشان می دهد VServer .یک تصویر به اشتراک گذاشته شده و مجازی شده
سیستم عامل ،متشکل از یک سیستم فایل ریشه و مجموعه ای مشترک از کتابخانه های سیستم و خدمات هسته ارائه می دهد.
هر VMرا می توان به طور مستقل بوت ،خاموش و راه اندازی مجدد کرد .شکل 14.10سه گروه بندی از نرم افزارهای در حال
اجرا بر روی سیستم کامپیوتری را نشان می دهد .پلتفرم میزبانی شامل تصویر سیستم عامل مشترک و یک VMمیزبان ممتاز
است که وظیفه آن نظارت و مدیریت سایر ماشین های مجازی است .پلتفرم مجازی ماشین های مجازی را ایجاد می کند و نمای
سیستم است که توسط برنامه های کاربردی در حال اجرا بر روی ماشین های مجازی منفرد دیده می شود.
741
سیستم عامل های داخلی و اصول طراحی742.........................................................................................................................
زمانبندی فرآیند
تسهیالت ماشین مجازی Linux VServerراهی برای کنترل استفاده VMاز زمان پردازنده فراهم می کند VServer .یک
فیلتر سطل نشانه TBFرا در باالی برنامه استاندارد لینوکس قرار می دهد .هدف TBFاین است که تعیین کند چه مقدار از
زمان اجرای پردازنده تک پردازنده ،چند پردازنده یا چند هسته ای به هر ماشین مجازی اختصاص می یابد .اگر فقط از
زمانبندی اصلی لینوکس برای زمانبندی جهانی فرآیندها در همه ماشینهای مجازی استفاده شود ،پردازشهای گرسنگی منابع
در یک ماشین مجازی ،فرآیندهای ماشینهای مجازی دیگر را از بین میبرند.
شکل 14.11مفهوم TBFرا نشان می دهد .برای هر ماشین مجازی ،یک سطل با ظرفیت توکن های Sتعریف شده است.
توکنها با نرخ Rدر هر بازه زمانی به طول Tبه سطل اضافه میشوند .وقتی سطل پر است ،نشانههای ورودی اضافی به سادگی
دور ریخته میشوند .هنگامی که یک فرآیند در این ماشین مجازی در حال اجرا است ،برای هر تیک ساعت تایمر یک توکن
مصرف می کند.
اگر سطل خالی شود ،فرآیند در حالت نگهداری قرار میگیرد و تا زمانی که سطل تا حداقل مقدار آستانه Mتوکن پر نشود،
نمیتوان آن را دوباره شروع کرد .در آن مرحله ،روند دوباره برنامه ریزی می شود .یک پیامد مهم رویکرد TBFاین است که یک
ماشین مجازی ممکن است توکنها را در طول دورهای از سکون جمعآوری کند و بعداً در صورت لزوم از توکنها بهصورت پشت
سر هم استفاده کند.
742
سیستم عامل های داخلی و اصول طراحی743.........................................................................................................................
اندازه سطل =
توکنS
اشغال سطل فعلی
حداقل
آستانه =
توکن های
S
تنظیم مقادیر Rو Tامکان تنظیم درصد ظرفیتی را که یک ماشین مجازی می تواند ادعا کند را فراهم می کند .برای یک
پردازنده واحد ،می توانیم تخصیص ظرفیت را به صورت زیر تعریف کنیم:
این معادله کسری از یک پردازنده را در یک سیستم نشان می دهد .بنابراین ،برای مثال ،اگر سیستمی چند هستهای با چهار
هسته است و ما میخواهیم یک VMرا با میانگین یک پردازنده اختصاصی ارائه کنیم R 1 ،و T 4را تنظیم میکنیم .سیستم
کلی به شرح زیر محدود میشود .اگر N VMوجود دارد ،پس:
پارامترهای Sو Mبه گونه ای تنظیم می شوند که ماشین مجازی را پس از مدت زمان مشخصی جریمه کنند .پارامترهای زیر
باید برای یک ماشین مجازی پیکربندی یا تخصیص داده شوند :به دنبال یک زمان انفجاری ،Bماشین مجازی با زمان نگهداری
Hمواجه می شود .با این پارامترها ،می توان مقادیر مورد نظر Sو Mرا به صورت زیر محاسبه کرد:
743
سیستم عامل های داخلی و اصول طراحی744.........................................................................................................................
که در آن Wسرعت اجرای برنامه تصمیم گیری است .به عنوان مثال ،ماشین مجازی با محدودیت 2/1زمان پردازنده را در نظر
بگیرید ،و میخواهیم بگوییم که پس از استفاده از پردازنده به مدت 30ثانیه ،زمان نگهداری پنج ثانیه خواهد بود .زمانبندی با
فرکانس 1000هرتز کار می کند .این نیاز با مقادیر زیر برآورده می شود 2500 0.5 5 M 1000 :توکن; * S = 1000 * 30
11 - 0.52 = 15000توکن.
به ماشین مجازی پلتفرم اندروید دالویک گفته می شود Dalvik VM DVM .فایلها را با فرمت Dalvik Executable
.dexاجرا میکند ،فرمتی که برای ذخیرهسازی کارآمد و اجرای نقشهبرداری با حافظه بهینه شده است .ماشین مجازی می تواند
کالس های اجرا شده توسط یک اجرار زبان جاوا را اجرا کند که با استفاده از ابزار " "dxموجود به فرمت اصلی خود تبدیل شده
اند VM .در باالی هسته لینوکس اجرا می شود ،که برای عملکردهای زیربنایی مانند threadingو مدیریت حافظه سطح
پایین به آن متکی است .کتابخانه کالس هسته Dalvikبرای ارائه یک پایگاه توسعه آشنا برای کسانی که برای برنامه نویسی با
Java Standard Editionاستفاده می شوند در نظر گرفته شده است ،اما به طور خاص برای نیازهای یک دستگاه تلفن
همراه کوچک تنظیم شده است.
هر برنامه اندرویدی در فرآیند خاص خود اجرا می شود ،با نمونه ای از Dalvik VM. Dalvikطوری نوشته شده است که
یک دستگاه بتواند چندین VMرا به طور موثر اجرا کند.
DVMبرنامه ها و کدهای نوشته شده در جاوا را اجرا می کند .یک اجرار استاندارد جاوا کد منبع نوشته شده به صورت فایل
متنی را به بایت کد تبدیل می کند .سپس بایت کد در یک فایل dex.که Dalvik VMمی تواند بخواند و استفاده کند ،اجرا
می شود .در اصل ،فایلهای کالس به فایلهای dex.تبدیل میشوند مثل یک فایل jarاگر از جاوا VMاستاندارد استفاده
میشود و سپس توسط DVMخوانده و اجرا میشوند .داده های تکراری مورد استفاده در فایل های کالس فقط یک بار در
فایل dex.گنجانده می شود که باعث صرفه جویی در فضا و مصرف سربار کمتری می شود .فایل های اجرایی را می توان با
نصب برنامه مجدداً تغییر داد تا همه چیز برای موبایل بهینه تر شود.
شکل 14.12طرح کلی یک فایل جاوا jar.را نشان می دهد که حاوی یک یا چند فایل کالس است .فایلهای کالس در یک
فایل dex.جمعآوری میشوند که به عنوان یک نوع فایل بسته اندروید apk.ذخیره میشود .دادههای موجود در مخزنهای
ثابت ناهمگن همه فایلهای کالس در یک بلوک واحد جمعآوری میشوند که بر اساس نوع ثابت در فایل dex.سازماندهی
744
سیستم عامل های داخلی و اصول طراحی745.........................................................................................................................
میشوند .با اجازه دادن به کالس ها برای به اشتراک گذاشتن استخرهای ثابت ،تکرار مقادیر ثابت به حداقل ممکن می رسد .به
طور مشابه ،زمینه های کالس ،زمینه ،روش و ویژگیها در فایلهای کالس در یک مکان در فایل dex.جمعآوری میشوند.
زیگوت
Zygoteفرآیندی است که روی یک DVMاجرا می شود و در زمان راه اندازی راه اندازی می شود Zygote .هر بار که
درخواستی برای یک فرآیند جدید وجود دارد یک DVMجدید تولید می کند .استفاده از Zygoteبرای به حداقل رساندن
زمان الزم برای تولید یک DVMجدید با به اشتراک گذاری آیتم ها در حافظه تا حداکثر امکان ممکن است .به طور معمول،
تعداد قابل توجهی از کالس های کتابخانه هسته و ساختارهای پشته مربوطه وجود دارد که توسط چندین برنامه استفاده می
شود ،و معموالً این موارد فقط خواندنی هستند .یعنی داده ها و کالس های مشترکی وجود دارد که اکثر برنامه ها از آنها استفاده
می کنند اما تغییر نمی دهند .بنابراین ،هنگامی که Zygoteبرای اولین بار راه اندازی می شود ،تمام کالس ها و منابع کتابخانه
هسته جاوا را که ممکن است یک برنامه به طور بالقوه در زمان اجرا به آن نیاز داشته باشد ،از قبل بارگیری و از قبل اولیه می
کند .هنگامی که یک DVMجدید از Zygote DVMجدا می شود ،نیازی به تخصیص حافظه اضافی برای کپی های این
کالس ها نیست Zygote .به سادگی صفحات حافظه فرآیند جدید را به صفحات والد نگاشت می کند.
در عمل ،به ندرت نیاز به انجام بیشتر از این نقشه برداری صفحه وجود دارد .اگر یک کالس توسط یک پردازش فرزند در
DVMخودش نوشته شود Zygote ،حافظه آسیبدیده را در فرآیند فرزند کپی میکند .این رفتار کپی در نوشتن امکان
745
سیستم عامل های داخلی و اصول طراحی746.........................................................................................................................
اشتراک حداکثری حافظه را فراهم می کند و در عین حال برنامه ها را از تداخل با یکدیگر و ایجاد امنیت در سراسر مرزهای
برنامه و فرآیند منع می کند.
14.10خالصه
فناوری مجازی سازی یک رایانه شخصی یا سرور را قادر می سازد تا به طور همزمان چندین سیستم عامل یا چندین جلسه از
یک سیستم عامل را اجرا کند .در اصل ،سیستم عامل میزبان میتواند تعدادی ماشین مجازی VMرا پشتیبانی کند ،که هر
کدام ویژگیهای یک سیستمعامل خاص و در برخی نسخههای مجازیسازی ،ویژگیهای یک پلتفرم سختافزاری خاص را دارند.
یک فناوری رایج ماشین مجازی از یک مانیتور ماشین مجازی VMMیا Hypervisorاستفاده می کند که در سطح پایین
تری نسبت به VMقرار دارد و از VMها پشتیبانی می کند .دو نوع Hypervisorوجود دارد که با این تفاوت که آیا سیستم
عامل دیگری بین Hypervisorو میزبان وجود دارد یا خیر Hypervisor .نوع 1مستقیماً روی سخت افزار دستگاه اجرا می
شود و Hypervisorنوع 2در باالی سیستم عامل میزبان عمل می کند.
یک رویکرد بسیار متفاوت برای پیاده سازی یک محیط VMتوسط Java VMمثال زده شده است .هدف جاوا VMاین
است که یک فضای زمان اجرا برای مجموعه ای از کدهای جاوا برای اجرا بر روی هر سیستم عاملی که روی هر پلتفرم سخت
افزاری اجرا می شود ،بدون نیاز به ایجاد تغییرات کد برای تطبیق با سیستم عامل ها یا سخت افزارهای مختلف ،فراهم کند.
BUZE73و GOLD74حسابهای کالسیک ماشینهای مجازی هستند که ارزش خواندن دارندROSE04 .انگیزه
رویکردهای مجازی سازی معاصر را مورد بحث قرار می دهدROSE05 .یک بررسی مفید از مانیتورهای ماشین مجازی است.
WHIT05یک رویکرد برای مجازی سازی را مورد بحث قرار می دهدNAND05 .یک بررسی جالب از پیاده سازی های
مختلف مفهوم ماشین مجازی ارائه می دهد .یکی دیگر از بررسی های ارزشمند LI10استSMIT05 .شامل طبقه بندی
مفیدی از معماری ماشین مجازی است که تا حدودی با رویکرد این فصل متفاوت استPEAR13 .یک بررسی عالی از مجازی
سازی است ،با تاکید بر مسائل امنیتی.
UHLI05پشتیبانی سخت افزاری را که اکنون در معماری x86ارائه شده است ،توصیف می کند ،در حالی که ADAM06
برخی از مشکالت استفاده از تکنیک های مجازی سازی به کمک سخت افزار را در x86بررسی می کند.
SUGE01رویکرد VMware Workstationرا برای مجازی سازی دستگاه های I/Oتوضیح می دهدOH12 .یک نمای
کلی از Dalvikو بحثی در مورد عملکرد آن ارائه می دهد.
746
سیستم عامل های داخلی و اصول طراحی747.........................................................................................................................
شرایط کلیدی
بررسی سواالت
747
سیستم عامل های داخلی و اصول طراحی748.........................................................................................................................
چالش ها و مسائل
.14.1تکنیکهایی مانند overcommitحافظه و اشتراکگذاری صفحه به ماشینهای مجازی اجازه میدهد تا منابع بیشتری
نسبت به منابع فیزیکی در یک میزبان مجازیسازی اختصاص دهند .آیا این به مجموع ماشینهای مجازی اجازه میدهد تا کار
واقعی بیشتری نسبت به حجم کاری فیزیکی روی همان سختافزار انجام دهند؟
Hypervisor .14.2های نوع 1مستقیماً بر روی سخت افزار فیزیکی بدون هیچ گونه سیستم عامل مداخله ای کار می کنند.
هایپروایزورهای نوع 2به عنوان یک برنامه کاربردی نصب شده بر روی یک سیستم عامل موجود اجرا می شوند .هایپروایزورهای
نوع 1بسیار بهتر از Hypervisorهای نوع 2عمل می کنند زیرا هیچ الیه مداخله ای برای مذاکره بین آنها و سخت افزار
سیستم وجود ندارد و همچنین نیازی به مبارزه برای منابع با الیه کنترل کننده دیگری از نرم افزار نیست .پس چرا
Hypervisorهای نوع 2به طور گسترده مورد استفاده قرار می گیرند؟ چند مورد از موارد استفاده چیست؟
.14.3هنگامی که مجازی سازی برای اولین بار در بازار x86ظاهر شد ،بسیاری از فروشندگان سرور نسبت به این فناوری شک
داشتند و نگران بودند که یکپارچه سازی بر فروش سرورها تأثیر بگذارد .در عوض ،فروشندگان سرور دریافتند که سرورهای
بزرگتر و گرانتر را می فروشند .چرا این اتفاق افتاد؟
.14.4ارائه پهنای باند اضافی برای سرورهای مجازی سازی در ابتدا شامل کارت های رابط شبکه اضافی NICبرای اتصاالت
شبکه بیشتر بود .با ظهور روزافزون پهنای باند ستون فقرات شبکه 10گیگابیت بر ثانیه 40 ،گیگابیت بر ثانیه و 100گیگابیت بر
ثانیه ،تعداد NICهای کمتری الزم است .چه مسائلی ممکن است ناشی از این اتصاالت شبکه همگرا باشد و چگونه می توان
آنها را حل کرد؟
.14.5ماشینهای مجازی با روشهای ذخیرهسازی مشابه ماشینهای فیزیکی از طریق اتصاالت ،TCP/IPکانال فیبر یا
iSCSIارائه میشوند .ویژگی هایی در مجازی سازی وجود دارد که استفاده از حافظه و پردازنده را بهینه می کند و ویژگی های
پیشرفته ای وجود دارد که می تواند استفاده کارآمدتری از منابع ورودی/خروجی را فراهم کند .به نظر شما چه چیزی ممکن
است برای استفاده بهتر از منابع ذخیره سازی در یک محیط مجازی در دسترس باشد؟
748
سیستم عامل های داخلی و اصول طراحی749.........................................................................................................................
فصل 15
15.2سرریز بافر
15.3کنترل دسترسی
کنترل دسترسی به فایل یونیکس سنتی لیست های کنترل دسترسی در یونیکس
نصب سیستم عامل :راه اندازی اولیه و وصله حذف سرویس ها ،برنامه ها و پروتکل های غیر ضروری پیکربندی کاربران ،گروه ها
و احراز هویت
پیکربندی کنترل های منابع نصب کنترل های امنیتی اضافی امنیت سیستم را آزمایش کنید
15.6نگهداری امنیتی
ورود به سیستم
15.7امنیت ویندوز
توصیفگرهای امنیتی
749
سیستم عامل های داخلی و اصول طراحی750.........................................................................................................................
15.8خالصه
اهداف یادگیری
-بین انواع مختلف الگوهای رفتار متجاوزان تمایز قائل شوید و انواع تکنیک های نفوذ مورد استفاده برای نقض امنیت رایانه را
درک کنید.
یک سیستم عامل مجموعه ای از امتیازات را با هر فرآیند مرتبط می کند .این امتیازات دیکته میکنند که فرآیند ممکن است به
چه منابعی دسترسی داشته باشد ،از جمله مناطق حافظه ،فایلها و دستورالعملهای سیستم ممتاز .به طور معمول ،فرآیندی که
از طرف یک کاربر اجرا می شود ،دارای امتیازاتی است که سیستم عامل برای آن کاربر تشخیص می دهد .یک سیستم یا فرآیند
ابزار ممکن است دارای امتیازاتی باشد که در زمان پیکربندی اختصاص داده شده است.
در یک سیستم معمولی ،باالترین سطح امتیاز به عنوان دسترسی مدیر ،سرپرست ،یا دسترسی ریشه نامیده می شود .دسترسی
ریشه دسترسی به تمام عملکردها و خدمات سیستم عامل را فراهم می کند .با دسترسی ریشه ،یک فرآیند کنترل کامل سیستم
را در اختیار دارد و می تواند برنامه ها و فایل ها را اضافه یا تغییر دهد ،سایر فرآیندها را نظارت کند ،ترافیک شبکه را ارسال و
دریافت کند و امتیازات را تغییر دهد.
یکی از مسائل امنیتی کلیدی در طراحی هر سیستمعامل ،جلوگیری یا حداقل شناسایی تالشهای کاربر یا بخشی از نرمافزارهای
مخرب بدافزار برای به دست آوردن امتیازات غیرمجاز روی سیستم و بهویژه دسترسی ریشهای است . .در این بخش ،تهدیدها و
750
سیستم عامل های داخلی و اصول طراحی751.........................................................................................................................
اقدامات متقابل مرتبط با این موضوع امنیتی را به اختصار بیان می کنیم .بخش های بعدی برخی از موضوعات مطرح شده در
این بخش را با جزئیات بیشتری بررسی می کند.
تهدیدات دسترسی به سیستم به دو دسته کلی تقسیم می شوند :مخالن و نرم افزارهای مخرب.
نفوذگران یکی از رایج ترین تهدیدات برای امنیت ،نفوذگر دیگری ویروس ها است که اغلب به عنوان هکر یا کرکر از آن یاد می
شود .در یک مطالعه اولیه مهم در مورد نفوذ ،اندرسون ANDE80سه دسته از نفوذگران را شناسایی می کند:
Masquerader: -فردی که مجاز به استفاده از رایانه نیست و به کنترل های دسترسی سیستم نفوذ می کند تا از حساب
کاربری قانونی سوء استفاده کند.
Misfeasor: -کاربر قانونی که به دادهها ،برنامهها یا منابعی دسترسی پیدا میکند که چنین دسترسی برای آنها مجاز نیست ،یا
مجاز به چنین دسترسی است اما از امتیازات خود سوء استفاده میکند.
-کاربر مخفی :فردی که کنترل نظارتی سیستم را به دست می گیرد و از این کنترل برای فرار از حسابرسی و کنترل های
دسترسی یا سرکوب مجموعه حسابرسی استفاده می کند.
خطاکار عموماً یک خودی است .و کاربر مخفی می تواند یا یک خارجی یا یک خودی باشد .حمالت مزاحم از خوش خیم تا
جدی متغیر است .در انتهای خوش خیم مقیاس ،افراد زیادی هستند که به سادگی می خواهند اینترنت را کاوش کنند و ببینند
چه چیزی در آنجا وجود دارد .در پایان جدی افرادی هستند که سعی در خواندن داده های ممتاز ،انجام تغییرات غیرمجاز در
داده ها ،یا اختالل در سیستم دارند.
هدف نفوذگر دستیابی به یک سیستم یا افزایش دامنه امتیازات قابل دسترسی در یک سیستم است .اکثر حمالت اولیه از
آسیبپذیریهای سیستم یا نرمافزار استفاده میکنند که به کاربر اجازه میدهد کدی را اجرا کند که درب پشتی را به سیستم
باز میکند .مخالن می توانند با سوء استفاده از حمالتی مانند سرریز بافر در برنامه ای که با امتیازات خاصی اجرا می شود ،به
یک سیستم دسترسی پیدا کنند .ما حمالت سرریز بافر را در بخش 15.2معرفی می کنیم .از طرف دیگر ،متجاوز تالش می کند
تا اطالعاتی را به دست آورد که باید محافظت می شد .در برخی موارد ،این اطالعات به صورت رمز عبور کاربر است .با آگاهی از
رمز عبور برخی دیگر از کاربران ،یک مزاحم می تواند به سیستم وارد شود و از تمام امتیازات اعطا شده به کاربر قانونی استفاده
کند.
751
سیستم عامل های داخلی و اصول طراحی752.........................................................................................................................
نرم افزارهای مخرب شاید پیچیده ترین انواع تهدیدات برای سیستم های کامپیوتری توسط برنامه هایی ارائه شود که از آسیب
پذیری های سیستم های محاسباتی سوء استفاده می کنند .از چنین تهدیدهایی به عنوان نرم افزار مخرب یا بدافزار یاد می شود.
در این زمینه ،ما نگران تهدیدات برنامه های کاربردی و همچنین برنامه های کاربردی ،مانند ویرایشگرها و اجرارها ،و برنامه های
سطح هسته هستیم.
نرم افزارهای مخرب را می توان به دو دسته تقسیم کرد :آنهایی که به برنامه میزبان نیاز دارند و آنهایی که مستقل هستند .اولی
که به عنوان انگلی شناخته می شود ،اساساً قطعاتی از برنامه ها هستند که نمی توانند مستقل از برخی برنامه های کاربردی
واقعی ،ابزارها یا برنامه های سیستمی وجود داشته باشند .ویروس ها ،بمب های منطقی و درهای پشتی نمونه هایی هستند.
دومی برنامه های مستقلی هستند که می توانند توسط سیستم عامل برنامه ریزی و اجرا شوند .کرمها و برنامههای ربات
نمونههایی هستند.
همچنین میتوانیم بین آن دسته از تهدیدات نرمافزاری که تکرار نمیشوند و آنهایی که تکرار میشوند ،تفاوت قائل شویم .اولی
برنامه ها یا قطعاتی از برنامه ها هستند که توسط یک ماشه فعال می شوند .به عنوان مثال بمب های منطقی ،درهای پشتی و
برنامه های ربات هستند .دومی شامل یک قطعه برنامه یا یک برنامه مستقل است که هنگام اجرا ،ممکن است یک یا چند نسخه
از خود تولید کند تا بعداً در همان سیستم یا سیستم دیگری فعال شود .ویروس ها و کرم ها نمونه هایی هستند.
نرم افزارهای مخرب می توانند نسبتاً بی ضرر باشند یا ممکن است یک یا چند مورد از تعدادی از اقدامات مضر را انجام دهند ،از
جمله از بین بردن فایل ها و داده ها در حافظه اصلی ،دور زدن کنترل ها برای دستیابی به دسترسی ممتاز ،و ارائه وسیله ای
برای نفوذگران برای دور زدن کنترل های دسترسی.
اقدامات متقابل
تشخیص نفوذ RFC 4949واژه نامه امنیت اینترنت تشخیص نفوذ را به شرح زیر تعریف می کند :یک سرویس امنیتی که
رویدادهای سیستم را به منظور یافتن ،و ارائه هشدارهای بالدرنگ یا نزدیک به زمان حقیقی ،نظارت و تجزیه و تحلیل می کند،
تالش می کند به منابع سیستم در یک سیستم دسترسی پیدا کند .روش غیر مجاز
سیستم های تشخیص نفوذ IDSرا می توان به صورت زیر طبقه بندی کرد:
IDS مبتنی بر میزبان :ویژگیهای یک میزبان و رویدادهایی را که در آن میزبان رخ میدهد برای فعالیت مشکوک
نظارت میکند.
IDS مبتنی بر شبکه :ترافیک شبکه را برای بخشها یا دستگاههای خاص شبکه نظارت میکند و پروتکلهای شبکه،
حملونقل و برنامه کاربردی را برای شناسایی فعالیتهای مشکوک تجزیه و تحلیل میکند.
752
سیستم عامل های داخلی و اصول طراحی753.........................................................................................................................
-حسگرها :حسگرها مسئول جمع آوری داده ها هستند .ورودی یک حسگر ممکن است هر بخشی از یک سیستم باشد که می
تواند حاوی شواهدی از نفوذ باشد .انواع ورودی به حسگر شامل بسته های شبکه ،فایل های گزارش و ردیابی تماس های
سیستمی است .حسگرها این اطالعات را جمع آوری و به تحلیلگر ارسال می کنند.
-آناالیزرها :آناالیزرها ورودی را از یک یا چند حسگر یا از آناالیزرهای دیگر دریافت می کنند .آناالیزر مسئول تعیین اینکه آیا
نفوذ رخ داده است یا خیر .خروجی این قطعه بندی نشانه رخ دادن نفوذ است .خروجی ممکن است شامل شواهدی باشد که از
این نتیجه گیری حمایت می کند که یک نفوذ رخ داده است .تحلیلگر ممکن است راهنمایی هایی در مورد اقداماتی که در نتیجه
نفوذ انجام شود را ارائه دهد.
-رابط کاربری :رابط کاربری به IDSکاربر را قادر می سازد تا خروجی سیستم را مشاهده کند یا رفتار سیستم را کنترل کند.
در برخی از سیستم ها ،رابط کاربری ممکن است برابر با یک مدیر ،مدیر یا جزء کنسول باشد.
سیستمهای تشخیص نفوذ معموالً برای تشخیص رفتار متجاوزان انسانی و همچنین رفتار نرمافزارهای مخرب طراحی میشوند.
احراز هویت در اکثر زمینه های امنیتی رایانه ،احراز هویت کاربر بلوک اساسی ساختمان و خط دفاع اولیه است .احراز هویت
کاربر اساس اکثر انواع کنترل دسترسی و مسئولیت پذیری کاربر است RFC 4949 .احراز هویت کاربر را به صورت زیر تعریف
می کند:
فرآیند تأیید هویت ادعا شده توسط یا برای یک موجودیت سیستم .فرآیند احراز هویت شامل دو مرحله است:
-مرحله شناسایی :ارائه یک شناسه به سیستم امنیتی شناسه ها باید با دقت تخصیص داده شوند ،زیرا هویت های احراز هویت
شده مبنایی برای سایر خدمات امنیتی مانند سرویس کنترل دسترسی هستند.
-مرحله تأیید :ارائه یا تولید اطالعات احراز هویت که پیوند بین موجودیت و شناسه را تأیید می کند.
به عنوان مثال ،کاربر Alice Toklasمی تواند شناسه کاربر ABTOKLASرا داشته باشد .این اطالعات باید در هر سرور یا
سیستم رایانهای که آلیس مایل به استفاده از آن است ذخیره شود و مدیران سیستم و سایر کاربران آن را بشناسند .یک مورد
معمول از اطالعات احراز هویت مرتبط با این شناسه کاربری یک رمز عبور است که مخفی نگه داشته می شود فقط برای آلیس و
سیستم شناخته شده است .اگر کسی نتواند رمز عبور آلیس را بدست آورد یا حدس بزند ،ترکیب شناسه کاربری و رمز عبور
آلیس به مدیران امکان میدهد مجوزهای دسترسی آلیس را تنظیم کرده و فعالیت او را بررسی کنند .از آنجایی که شناسه آلیس
مخفی نیست ،کاربران سیستم می توانند برای او ایمیل بفرستند ،اما چون رمز عبور او مخفی است ،هیچ کس نمی تواند وانمود
کند که آلیس است.
753
سیستم عامل های داخلی و اصول طراحی754.........................................................................................................................
در اصل ،شناسایی وسیله ای است که کاربر به وسیله آن هویت ادعایی را به سیستم ارائه می دهد .احراز هویت کاربر ابزاری برای
اثبات اعتبار ادعا است.
چهار روش کلی برای احراز هویت یک کاربر وجود دارد که می تواند به تنهایی یا ترکیبی از آنها استفاده شود:
چیزی که فرد میداند :مثالً یک رمز عبور ،یک شماره شناسایی شخصی ،PINیا پاسخ به مجموعهای از سؤاالت از پیش تعیین
شده است.
چیزی که فرد در اختیار دارد :به عنوان مثال می توان به کارت های کلید الکترونیکی ،کارت های هوشمند و کلیدهای فیزیکی
اشاره کرد .به این نوع احراز هویت توکن گفته می شود.
-چیزی که فرد وجود دارد بیومتریک ایستا :به عنوان مثال می توان به تشخیص اثر انگشت ،شبکیه چشم و صورت اشاره کرد.
کاری که فرد انجام می دهد بیومتریک پویا :نمونه هایی از جمله تشخیص با الگوی صدا ،ویژگی های دست خط و ریتم تایپ
است.
همه این روش ها ،به درستی اجرا و استفاده می شوند ،می توانند احراز هویت ایمن کاربر را فراهم کنند .با این حال ،هر روش
مشکالتی دارد .یک دشمن ممکن است بتواند رمز عبور را حدس بزند یا بدزدد .به طور مشابه ،یک دشمن ممکن است بتواند یک
توکن جعل یا سرقت کند .کاربر ممکن است رمز عبور را فراموش کند یا رمزی را گم کند .عالوه بر این ،هزینه اداری قابل
توجهی برای مدیریت اطالعات رمز و رمز در سیستم ها و ایمن سازی چنین اطالعاتی در سیستم ها وجود دارد .با توجه به احراز
هویت بیومتریک ،مشکالت مختلفی وجود دارد ،از جمله برخورد با موارد مثبت کاذب و منفی کاذب ،پذیرش کاربر ،هزینه و
راحتی .کنترل دسترسی کنترل دسترسی یک سیاست امنیتی را اجرا می کند که مشخص می کند چه کسی یا چه چیزی به
عنوان مثال ،در مورد یک فرآیند ممکن است به هر منبع سیستم خاص و نوع دسترسی مجاز در هر نمونه دسترسی داشته باشد.
مکانیزم کنترل دسترسی میان کاربر یا فرآیندی که از طرف کاربر اجرا میشود و منابع سیستم ،مانند برنامهها ،سیستمهای
عامل ،فایروالها ،مسیریابها ،فایلها و پایگاههای داده واسطه میشود .سیستم ابتدا باید کاربری که به دنبال دسترسی است را
احراز هویت کند .به طور معمول ،تابع احراز هویت تعیین می کند که آیا کاربر اصالً مجاز به دسترسی به سیستم است یا خیر.
سپس تابع کنترل دسترسی تعیین می کند که آیا دسترسی درخواستی خاص توسط این کاربر مجاز است یا خیر .یک مدیر
امنیتی یک پایگاه داده مجوز نگهداری می کند که مشخص می کند چه نوع دسترسی به کدام منابع برای این کاربر مجاز است.
تابع کنترل دسترسی با این پایگاه داده مشورت می کند تا مشخص کند که آیا اجازه دسترسی را می دهد یا خیر .یک تابع
ممیزی ،دسترسی کاربر به منابع سیستم را رصد و ثبت می کند.
754
سیستم عامل های داخلی و اصول طراحی755.........................................................................................................................
فایروال ها فایروال ها می توانند ابزار موثری برای محافظت از یک سیستم محلی یا شبکه سیستم ها در برابر تهدیدات امنیتی
مبتنی بر شبکه باشند در حالی که امکان دسترسی به دنیای خارج از طریق شبکه های گسترده و اینترنت را فراهم می کنند .به
طور سنتی ،فایروال یک رایانه اختصاصی است که با رایانههای خارج از شبکه ارتباط برقرار میکند و اقدامات احتیاطی ویژهای در
داخل آن تعبیه شده است تا از فایلهای حساس روی رایانههای داخل شبکه محافظت کند .برای سرویس دهی خارج از شبکه،
به ویژه اتصاالت اینترنتی و خطوط شماره گیری استفاده می شود .فایروالهای شخصی که در سختافزار یا نرمافزار پیادهسازی
میشوند و با یک ایستگاه کاری یا رایانه شخصی مرتبط هستند نیز رایج هستند.
.1فایروال به عنوان یک نقطه خفه عمل می کند ،به طوری که تمام ترافیک ورودی و تمام ترافیک خروجی باید از فایروال عبور
کنند .این امر با مسدود کردن فیزیکی تمام دسترسی به شبکه محلی به جز از طریق فایروال به دست می آید.
.2فایروال سیاست امنیتی محلی را اعمال می کند ،که ترافیک مجاز برای عبور را تعریف می کند .انواع مختلفی از فایروال ها
استفاده می شود که انواع مختلفی از سیاست های امنیتی را اجرا می کنند ،همانطور که در ادامه این فصل توضیح داده شد.
.3فایروال در برابر حمالت ایمن است .این به معنای استفاده از یک سیستم سخت شده با یک سیستم عامل ایمن است .سیستم
های کامپیوتری قابل اعتماد برای میزبانی فایروال مناسب هستند و اغلب در برنامه های دولتی مورد نیاز هستند.
15.2سرریز بافر
حافظه اصلی و حافظه مجازی منابع سیستمی هستند که در معرض تهدیدات امنیتی هستند و باید اقدامات متقابل امنیتی برای
آنها انجام شود .بدیهی ترین نیاز امنیتی ،جلوگیری از دسترسی غیرمجاز به محتویات حافظه فرآیندها است .اگر یک فرآیند
بخشی از حافظه خود را قابل اشتراک گذاری اعالم نکرده باشد ،هیچ فرآیند دیگری نباید به محتویات آن بخش از حافظه
دسترسی داشته باشد .اگر فرآیندی اعالم کند که ممکن است بخشی از حافظه توسط سایر فرآیندهای تعیین شده به اشتراک
گذاشته شود ،سرویس امنیتی سیستم عامل باید اطمینان حاصل کند که فقط فرآیندهای تعیین شده دسترسی دارند .تهدیدات
امنیتی و اقدامات متقابل مورد بحث در بخش قبل به این نوع حفاظت از حافظه مربوط می شود .در این بخش ،تهدید دیگری را
که شامل حفاظت از حافظه است ،خالصه می کنیم.
سرریز بافر که به عنوان سرریز بافر نیز شناخته می شود ،در واژه نامه اصطالحات امنیت اطالعات کلیدی NISTموسسه ملی
استانداردها و فناوری به شرح زیر تعریف شده است:
755
سیستم عامل های داخلی و اصول طراحی756.........................................................................................................................
سرریز بافر :شرایطی در یک رابط که تحت آن می توان ورودی بیشتری نسبت به ظرفیت تخصیص داده شده در یک بافر یا
ناحیه نگهداری داده قرار داد و اطالعات دیگر را بازنویسی کرد .مهاجمان از چنین شرایطی برای از کار انداختن یک سیستم یا
وارد کردن کدهای ساخته شده ویژه که به آنها اجازه می دهد کنترل سیستم را به دست آورند ،سوء استفاده می کنند .سرریز
بافر میتواند در نتیجه یک خطای برنامهنویسی رخ دهد ،زمانی که یک فرآیند تالش میکند دادهها را فراتر از محدودیتهای یک
بافر با اندازه ثابت ذخیره کند و در نتیجه مکانهای حافظه مجاور را بازنویسی کند .این مکانها میتوانند سایر متغیرها یا
پارامترهای برنامه یا دادههای جریان کنترل برنامه مانند آدرسها و نشانگرها را به فریمهای پشته قبلی برگردانند .بافر می تواند
در پشته ،در پشته ،یا در بخش داده فرآیند قرار گیرد .پیامدهای این خطا شامل خراب شدن داده های استفاده شده توسط
برنامه ،انتقال غیرمنتظره کنترل در برنامه ،احتماالً نقض دسترسی به حافظه و به احتمال زیاد خاتمه نهایی برنامه است .هنگامی
که به عمد به عنوان بخشی از حمله به یک سیستم انجام می شود ،انتقال کنترل می تواند به کد مورد نظر مهاجم انجام شود،
که منجر به توانایی اجرای کد دلخواه با امتیازات فرآیند مورد حمله می شود .حمالت سرریز بافر یکی از رایج ترین و خطرناک
ترین انواع حمالت امنیتی است .برای نشان دادن عملکرد اصلی یک نوع معمول سرریز بافر ،که به سرریز پشته معروف است،
تابع اصلی Cرا در شکل a15.1در نظر بگیرید .این شامل سه متغیر معتبر str1 ،و 2 ،str2است که مقادیر آنها معموالً در
مکان های حافظه مجاور ذخیره می شود .ترتیب و مکان آنها به نوع متغیر محلی یا جهانی ،زبان و اجرار مورد استفاده و معماری
ماشین هدف بستگی دارد .برای این مثال ،فرض میکنیم که آنها در مکانهای حافظه متوالی ،از باالترین به پایینترین ذخیره
میشوند ،همانطور که در شکل 15.2.3نشان داده شده است .هدف قطعه کد فراخوانی تابع next_tagstr1برای کپی کردن
مقدار تگ مورد انتظار در str1است .بیایید فرض کنیم که این رشته STARTخواهد بود.
756
سیستم عامل های داخلی و اصول طراحی757.........................................................................................................................
سپس خط بعدی را از ورودی استاندارد برنامه با استفاده از تابع getsکتابخانه Cمی خواند و سپس رشته خوانده شده را با تگ
مورد انتظار مقایسه می کند .اگر خط بعدی واقعاً حاوی رشته STARTبود ،این مقایسه با موفقیت انجام می شود و متغیر
معتبر روی TRUEتنظیم می شود .هر تگ ورودی دیگری آن را با مقدار FALSEباقی می گذارد .چنین قطعه کد ممکن
است برای تجزیه برخی از تعامالت پروتکل شبکه ساختاریافته یا فایل متنی فرمت شده استفاده شود.
مشکل این کد به این دلیل وجود دارد که تابع getsکتابخانه سنتی Cشامل بررسی میزان دادههای کپیشده نیست .خط
بعدی متن را از ورودی استاندارد برنامه می خواند تا زمانی که اولین کاراکتر newline5رخ دهد و آن را در بافر ارائه شده و به
دنبال آن پایان دهنده NULLکه با رشته های Cاستفاده می شود کپی می کند 6.اگر بیش از هفت کاراکتر در خط ورودی
وجود داشته باشد ،وقتی خواندن در آنها همراه با کاراکتر NULLپایانی به فضای بیشتری نسبت به بافر str2نیاز دارند .در
نتیجه ،کاراکترهای اضافی مقادیر متغیر مجاور str1 ،را در این مورد بازنویسی می کنند .به عنوان مثال ،اگر خط ورودی حاوی
EVILINPUTVALUEباشد ،نتیجه این خواهد بود که str1با کاراکترهای TVALUEرونویسی می شود و str2نه
تنها از هشت کاراکتر اختصاص داده شده به آن بلکه از هفت کاراکتر دیگر نیز از str1استفاده می کند .این را می توان در
اجرای مثال دوم در شکل b15.1مشاهده کرد .سرریز منجر به خراب شدن متغیری شده است که مستقیماً برای ذخیره ورودی
استفاده نمی شود .از آنجایی که این رشته ها برابر نیستند valid ،مقدار FALSEرا نیز حفظ می کند .عالوه بر این ،اگر 16
کاراکتر یا بیشتر وارد شود ،مکانهای حافظه اضافی بازنویسی میشوند.
مثال قبلی رفتار اساسی یک سرریز بافر را نشان می دهد .در سادهترین حالت ،هرگونه کپی برداری نشده از دادهها در یک بافر
میتواند منجر به خراب شدن مکانهای حافظه مجاور شود ،که ممکن است متغیرهای دیگر یا احتماالً آدرسها و دادههای
کنترل برنامه باشند .حتی این مثال ساده را هم میتوان بیشتر برد .با دانستن ساختار کدی که آن را پردازش می کند ،مهاجم
می تواند ترتیبی دهد که مقدار رونویسی شده مقدار را در str1برابر با مقدار قرار داده شده در str2قرار دهد و در نتیجه
مقایسه بعدی با موفقیت انجام شود .به عنوان مثال ،خط ورودی می تواند رشته BADINPUTBADINPUTباشد .این
757
سیستم عامل های داخلی و اصول طراحی758.........................................................................................................................
منجر به موفقیت در مقایسه می شود ،همانطور که در سومین برنامه از سه مثال اجرا شده در شکل b15.1و در شکل 15.2
نشان داده شده است ،با مقادیر متغیرهای محلی قبل و بعد از فراخوانی. gets
همچنین توجه داشته باشید که NULLپایانی برای رشته ورودی در محل حافظه زیر str1نوشته شده است .این بدان
معناست که جریان کنترل در برنامه به گونه ای ادامه می یابد که گویی برچسب مورد انتظار پیدا شده است ،در حالی که در
واقع تگ خوانده شده چیزی کامالً متفاوت است .این تقریباً به طور قطع منجر به رفتار برنامه ای می شود که در نظر گرفته
نشده است.
این که چقدر جدی است بستگی زیادی به منطق برنامه مورد حمله دارد .اگر مقادیر موجود در این بافرها به جای برچسب بودن،
یک رمز عبور مورد انتظار و ارائه شده برای دسترسی به ویژگی های ممتاز مورد نیاز باشد ،یک احتمال خطرناک رخ می دهد .در
این صورت ،سرریز بافر ابزاری را در اختیار مهاجم قرار می دهد تا به این ویژگی ها دسترسی داشته باشد بدون اینکه رمز عبور
صحیح را بداند.
برای سوء استفاده از هر نوع سرریز بافر ،مانند مواردی که در اینجا توضیح دادیم ،مهاجم نیاز دارد:
.1شناسایی آسیبپذیری سرریز بافر در برخی از برنامهها که میتواند با استفاده از دادههای منبع خارجی تحت کنترل مهاجمان
راهاندازی شود.
.2برای درک چگونگی ذخیره آن بافر در حافظه فرآیندها ،و در نتیجه احتمال خراب کردن مکان های حافظه مجاور و تغییر
بالقوه جریان اجرای برنامه.
شناسایی برنامههای آسیبپذیر ممکن است با بازرسی منبع برنامه ،ردیابی اجرای برنامهها در حین پردازش ورودیهای بزرگ ،یا
استفاده از ابزارهایی مانند ،fuzzingکه در قسمت هفتم درباره آن بحث میکنیم ،برای شناسایی خودکار برنامههای بالقوه
آسیبپذیر انجام شود .کاری که مهاجم با خراب شدن حافظه انجام می دهد ،بسته به مقادیری که رونویسی می شوند ،به طور
قابل توجهی متفاوت است.
اجرا-زمان دفاعی
یافتن و بهره برداری از سرریز بافر پشته چندان دشوار نیست .تعداد زیاد اکسپلویت ها در چند دهه گذشته به وضوح این را نشان
می دهد .در نتیجه نیاز به دفاع از سیستم ها در برابر چنین حمالتی با جلوگیری از آنها یا حداقل شناسایی و لغو چنین حمالتی
وجود دارد .اقدامات متقابل را می توان به طور کلی به دو دسته تقسیم کرد:
-دفاع های زمان اجرا ،که هدف آنها سخت کردن برنامه ها برای مقاومت در برابر حمالت است
758
سیستم عامل های داخلی و اصول طراحی759.........................................................................................................................
-دفاع در زمان اجرا ،که هدف آن شناسایی و لغو حمالت در اجرای برنامه های برنامه است.
در حالی که چند دهه است که دفاع مناسب شناخته شده است ،پایگاه بسیار بزرگ نرم افزارها و سیستم های آسیب پذیر موجود
مانع استقرار آنها می شود .از این رو به دفاع در زمان اجرا عالقه مند شد ،که می تواند در سیستم عامل ها و به روز رسانی ها
مستقر شود و می تواند محافظت از برنامه های آسیب پذیر موجود را فراهم کند.
در این بخش ،ما به دفاع در زمان اجرا نگاه می کنیم ،و سپس به دفاع در زمان اجرا نگاه می کنیم .هدف دفاعهای زمان اجرا
جلوگیری یا تشخیص سرریز بافر توسط برنامههای ابزار دقیق هنگام اجرا شدن است .امکانات برای انجام این کار از انتخاب یک
زبان سطح باال که اجازه سرریز بافر را نمی دهد تا تشویق استانداردهای کدگذاری ایمن ،استفاده از کتابخانه های استاندارد
ایمن ،یا شامل کد اضافی برای تشخیص خرابی قاب پشته را شامل می شود.
انتخاب زبان برنامه نویسی یک امکان این است که برنامه را با استفاده از یک زبان برنامه نویسی سطح باال بنویسیم ،زبانی که
دارای مفهوم قوی از نوع متغیر و آنچه که عملیات مجاز روی آنها را تشکیل می دهد .چنین زبانهایی در برابر حمالت سرریز
بافر آسیبپذیر نیستند ،زیرا اجرارهای آنها شامل کدهای اضافی برای اجرای خودکار بررسیهای محدوده هستند و نیازی به
کدنویسی صریح برنامهنویس را از بین میبرند .انعطافپذیری و ایمنی ارائه شده توسط این زبانها برای استفاده از منابع هزینه
دارد ،هم در زمان اجرا و هم در کدهای اضافی که باید در زمان اجرا اجرا شوند تا کنترلهایی مانند محدودیتهای بافر اعمال
شود .این معایب به دلیل افزایش سریع عملکرد پردازنده بسیار کمتر از گذشته قابل توجه است .برنامهها به طور فزایندهای به این
زبانها نوشته میشوند و بنابراین باید از سرریزهای بافر در کد خود مصون باشند اگرچه اگر از کتابخانههای سیستم موجود یا
محیطهای اجرای زمان اجرا که به زبانهای کمتر امن نوشته شدهاند استفاده کنند ،ممکن است همچنان آسیبپذیر باشند.
فاصله از زبان ماشین و معماری زیربنایی همچنین به این معنی است که دسترسی به برخی دستورالعمل ها و منابع سخت
افزاری از بین می رود.
این امر مفید بودن آنها را در نوشتن کد ،مانند درایورهای دستگاه ،که باید با چنین منابعی تعامل داشته باشند ،محدود می کند.
به این دالیل ،هنوز احتماالً حداقل کدهایی وجود دارد که به زبانهای کمتر امنی مانند Cنوشته شده باشد.
تکنیک های کدگذاری ایمن اگر از زبان هایی مانند Cاستفاده می شود ،برنامه نویسان باید بدانند که توانایی آنها در دستکاری
آدرس های اشاره گر و دسترسی مستقیم به حافظه هزینه دارد C .به عنوان یک زبان برنامه نویسی سیستمی طراحی شده است
که روی سیستم هایی اجرا می شود که بسیار کوچکتر و محدودتر از آنچه ما اکنون استفاده می کنیم ،اجرا می شود .این بدان
معناست که طراحان Cبیشتر بر مالحظات کارایی فضا و عملکرد تأکید دارند تا ایمنی نوع .آنها فرض کردند که برنامه نویسان
در نوشتن کد با استفاده از این زبان ها دقت الزم را به خرج می دهند و مسئولیت اطمینان از استفاده ایمن از تمام ساختارهای
داده و متغیرها را بر عهده می گیرند.
759
سیستم عامل های داخلی و اصول طراحی760.........................................................................................................................
متأسفانه همانطور که چندین دهه تجربه نشان داده است ،چنین نبوده است .این ممکن است در مجموعه بزرگ قدیمی کدهای
بالقوه ناامن در سیستم عامل ها و برنامه های کاربردی یونیکس و لینوکس دیده شود ،که برخی از آنها به طور بالقوه در برابر
سرریزهای بافر آسیب پذیر هستند.
برای سختتر کردن این سیستمها ،برنامهنویس باید کد را بازرسی کند و هر ساختار کدگذاری ناایمن را به روشی ایمن بازنویسی
کند .با توجه به جذب سریع اکسپلویت های سرریز بافر ،این فرآیند در برخی موارد آغاز شده است .یک مثال خوب پروژه
OpenBSDاست که یک سیستم عامل رایگان و چند پلتفرمی شبیه یونیکس مبتنی بر BSD4.4تولید می کند .در میان
سایر تغییرات تکنولوژی ،برنامه نویسان ممیزی گسترده ای از پایه کد موجود ،از جمله سیستم عامل ،کتابخانه های استاندارد ،و
ابزارهای معمولی را انجام داده اند .این منجر به چیزی شده است که به طور گسترده به عنوان یکی از امن ترین سیستم عامل ها
در استفاده گسترده در نظر گرفته می شود .پروژه OpenBSDتا اواسط سال 2006ادعا می کند که در بیش از هشت سال
گذشته تنها یک سوراخ راه دور در نصب پیش فرض کشف شده است .این یک رکورد کامال رشک برانگیز است.
مایکروسافت همچنین یک پروژه بزرگ را در بازنگری پایه کد خود انجام داده است ،تا حدی در پاسخ به ادامه تبلیغات بد در
مورد تعداد آسیبپذیریها ،از جمله بسیاری از مشکالت سرریز بافر ،که در سیستمعاملها و کد برنامههای آنها یافت شده است.
این به وضوح یک فرآیند دشوار بوده است ،اگرچه آنها ادعا می کنند که سیستم عامل جدید ویستا آنها از این فرآیند سود زیادی
خواهد برد.
که می تواند در Cبا ارجاعات آرایه و اشاره گر ناامن رخ دهد ،تعدادی پیشنهاد برای تقویت اجرارها برای درج خودکار بررسی
های محدوده در چنین مراجعی وجود دارد .در حالی که این کار برای آرایه های تخصیص داده شده به صورت ایستا آسان است،
مدیریت حافظه تخصیص یافته به صورت پویا مشکل تر است ،زیرا اطالعات اندازه در زمان اجرا در دسترس نیست .رسیدگی به
این امر مستلزم گسترش معنایی یک اشاره گر است تا شامل اطالعات کرانه ها و استفاده از روال های کتابخانه برای اطمینان از
تنظیم صحیح این مقادیر باشد .چندین چنین رویکرد در LHEE03فهرست شده است .با این حال ،به طور کلی جریمه
عملکرد با استفاده از چنین تکنیک هایی وجود دارد که ممکن است قابل قبول باشد یا نباشد .این تکنیکها همچنین نیازمند
اجرا مجدد تمامی برنامهها و کتابخانههایی هستند که به این ویژگیهای ایمنی نیاز دارند با اجرار اصالحشده اجرا شوند .در حالی
که این می تواند برای نسخه جدید یک سیستم عامل و برنامه های کاربردی مرتبط با آن امکان پذیر باشد ،هنوز هم احتماالً
مشکالتی با برنامه های شخص ثالث وجود خواهد داشت.
یک نگرانی رایج در مورد Cناشی از استفاده از روال های استاندارد کتابخانه ای ناامن ،به ویژه برخی از روال های دستکاری
رشته است .یک رویکرد برای بهبود ایمنی سیستمها ،جایگزینی آنها با انواع ایمنتر بوده است .این می تواند شامل ارائه توابع
760
سیستم عامل های داخلی و اصول طراحی761.........................................................................................................................
جدید ،مانند ،strlcpyدر خانواده سیستم های ،BSDاز جمله OpenBSDباشد .استفاده از اینها مستلزم بازنویسی منبع
برای انطباق با معنای جدید امن تر است .متناوبا ،شامل جایگزینی کتابخانه رشته استاندارد با یک نوع امن تر استLibsafe .
یک مثال شناخته شده در این زمینه است .این معناشناسی استاندارد را پیادهسازی میکند اما شامل بررسیهای اضافی نیز
میشود تا اطمینان حاصل شود که عملیات کپی فراتر از فضای متغیر محلی در قاب پشته گسترش نمییابد.
بنابراین ،در حالی که نمی تواند از خراب شدن متغیرهای محلی مجاور جلوگیری کند ،می تواند از هر گونه تغییر در قاب پشته
قدیمی و مقادیر آدرس برگشتی جلوگیری کند ،و بنابراین از انواع حمالت کالسیک سرریز بافر پشته که قبال بررسی کردیم،
جلوگیری می کند .این کتابخانه بهعنوان یک کتابخانه پویا پیادهسازی میشود و مرتب شده است تا قبل از کتابخانههای
استاندارد موجود بارگذاری شود ،و بنابراین میتواند از برنامههای موجود بدون نیاز به اجرا مجدد محافظت کند ،مشروط بر اینکه
به صورت پویا به روالهای کتابخانه استاندارد دسترسی داشته باشند همانطور که اکثر برنامهها انجام میدهند .کد کتابخانه
اصالح شده معموالً حداقل به اندازه کتابخانه های استاندارد کارآمد است و بنابراین استفاده از آن راهی آسان برای محافظت از
برنامه های موجود در برابر برخی از اشکال حمالت سرریز بافر است.
مکانیسمهای حفاظت پشته یک روش مؤثر برای محافظت از برنامهها در برابر حمالت کالسیک سرریز پشته این است که کد
ورودی و خروجی تابع را برای تنظیم تنظیم کنید و سپس چارچوب پشته آن را برای هرگونه شواهدی از فساد بررسی کنید .اگر
هر گونه تغییری پیدا شود ،برنامه به جای اجازه دادن به حمله ،لغو می شود .چندین رویکرد برای ارائه این حفاظت وجود دارد
که در ادامه به آنها خواهیم پرداخت.
Stackguardیکی از شناخته شده ترین مکانیسم های حفاظتی است .این یک پسوند اجرار GCC GNU Compiler
Collectionاست که کد ورودی و خروجی تابع اضافی را درج می کند .کد ورودی تابع اضافه شده یک مقدار canary7را در
زیر آدرس نشانگر فریم قدیمی ،قبل از تخصیص فضا برای متغیرهای محلی ،می نویسد .کد خروج تابع اضافه شده قبل از ادامه
عملیات خروجی معمولی برای بازیابی نشانگر فریم قدیمی و انتقال کنترل به آدرس برگشتی ،بررسی می کند که مقدار قناری
تغییر نکرده باشد .هر تالشی برای سرریز بافر کالسیک پشته باید این مقدار را تغییر دهد تا نشانگر فریم قدیمی و آدرسهای
برگشتی را تغییر دهد و بنابراین شناسایی میشود و در نتیجه برنامه لغو میشود .برای اینکه این دفاع با موفقیت کار کند ،بسیار
مهم است که مقدار قناری غیر قابل پیش بینی باشد و در سیستم های مختلف متفاوت باشد .اگر اینطور نبود ،مهاجم به سادگی
مطمئن می شد که کد پوسته مقدار صحیح قناری را در مکان مورد نیاز درج کرده است.
به طور معمول ،یک مقدار تصادفی به عنوان مقدار قناری در ایجاد فرآیند انتخاب می شود و به عنوان بخشی از وضعیت فرآیندها
ذخیره می شود .کد اضافه شده به ورودی و خروجی تابع ،سپس از این مقدار استفاده می کند.
761
سیستم عامل های داخلی و اصول طراحی762.........................................................................................................................
در استفاده از این رویکرد مشکالتی وجود دارد .اول ،مستلزم آن است که تمام برنامه هایی که نیاز به حفاظت دارند دوباره اجرا
شوند .دوم ،از آنجایی که ساختار قاب پشته تغییر کرده است ،می تواند باعث ایجاد مشکالتی در برنامه هایی مانند دیباگرها شود
که فریم های پشته را تجزیه و تحلیل می کنند .با این حال ،تکنیک قناری برای اجرا مجدد کل توزیع لینوکس و ارائه سطح
باالیی از مقاومت در برابر حمالت سرریز پشته استفاده شده است .عملکرد مشابهی برای برنامه های ویندوز با اجرا کردن آنها با
استفاده از گزینه اجرار Microsoft /GS Visual C++در دسترس است.
همانطور که اشاره شد ،بیشتر رویکردهای زمان اجرا نیاز به اجرا مجدد برنامه های موجود دارند .از این رو ،عالقه ای به دفاع در
زمان اجرا وجود دارد که می تواند به عنوان به روز رسانی سیستم عامل به کار گرفته شود تا از برنامه های آسیب پذیر موجود
محافظت کند .این دفاع شامل تغییراتی در مدیریت حافظه فضای آدرس مجازی فرآیندها می شود .این تغییرات یا برای تغییر
ویژگیهای مناطق حافظه عمل میکنند یا پیشبینی مکان بافرهای هدف را به اندازه کافی دشوار میکنند تا بسیاری از انواع
حمالت را خنثی کنند.
حفاظت از فضای آدرس قابل اجرا بسیاری از حمالت سرریز بافر شامل کپی کردن کد ماشین در بافر مورد نظر و سپس انتقال
اجرا به آن است .یک دفاع ممکن ،مسدود کردن اجرای کد در پشته است ،با این فرض که کد قابل اجرا فقط باید در جای
دیگری در فضای آدرس فرآیندها یافت شود.
برای پشتیبانی کارآمد از این ویژگی ،نیاز به پشتیبانی واحد مدیریت حافظه پردازنده MMUبرای برچسب گذاری صفحات
حافظه مجازی به عنوان غیر قابل اجرا است .برخی از پردازندهها ،مانند SPARCکه توسط سوالریس استفاده میشود ،مدتی
است که از این پشتیبانی میکنند.
فعال کردن استفاده از آن در Solarisبه یک تغییر پارامتر ساده هسته نیاز دارد .سایر پردازندهها ،مانند خانواده ،x86با اضافه
شدن نسبتاً اخیر بیت بدون اجرا در ،MMUاین پشتیبانی را تا همین اواخر نداشتند .برنامههای افزودنی برای لینوکسBSD ،
و دیگر سیستمهای سبک یونیکس برای پشتیبانی از استفاده از این ویژگی در دسترس قرار گرفتهاند .برخی در واقع قادر به
محافظت از پشته و همچنین پشته هستند که همچنین هدف حمالت است .پشتیبانی از فعال کردن محافظت noexecuteنیز
در سیستم های ویندوز اخیر گنجانده شده است.
غیرقابل اجرا کردن پشته و heapدرجه باالیی از محافظت در برابر بسیاری از انواع حمالت سرریز بافر را برای برنامه های
موجود فراهم می کند .از این رو گنجاندن این روش در تعدادی از سیستم عامل های اخیر منتشر شده استاندارد است .با این
حال ،یک مسئله پشتیبانی از برنامه هایی است که نیاز به قرار دادن کدهای اجرایی در پشته دارند .این می تواند ،برای مثال ،در
762
سیستم عامل های داخلی و اصول طراحی763.........................................................................................................................
اجرارهای به موقع ،مانند مواردی که در سیستم زمان اجرا جاوا استفاده می شود ،رخ دهد .کد اجرایی روی پشته نیز برای پیاده
سازی توابع تو در تو در Cیک پسوند GCCو همچنین کنترل کننده سیگنال لینوکس استفاده می شود .برای حمایت از این
الزامات به مقررات خاصی نیاز است .با این وجود ،این به عنوان یکی از بهترین روشها برای محافظت از برنامههای موجود و
سیستمهای سختسازی در برابر برخی حمالت در نظر گرفته میشود.
تصادفی سازی فضای آدرس یکی دیگر از تکنیک های زمان اجرا که می تواند برای خنثی کردن حمالت استفاده شود ،شامل
دستکاری مکان ساختارهای داده کلیدی در فضای آدرس یک فرآیند است .به طور خاص ،به یاد بیاورید که برای اجرای حمله
سرریز پشته کالسیک ،مهاجم باید بتواند مکان تقریبی بافر مورد نظر را پیش بینی کند .مهاجم از این آدرس پیش بینی شده
برای تعیین آدرس بازگشتی مناسب برای استفاده در حمله برای انتقال کنترل به کد پوسته استفاده می کند .یکی از
تکنیکهایی که دشواری این پیشبینی را تا حد زیادی افزایش میدهد ،تغییر آدرسی است که پشته در آن قرار دارد بهصورت
تصادفی برای هر فرآیند .دامنه آدرسهای موجود در پردازندههای مدرن بزرگ است 32بیت و اکثر برنامهها فقط به بخش
کوچکی از آن نیاز دارند .بنابراین ،جابجایی ناحیه حافظه پشته به اندازه یک مگابایت تأثیر کمتری بر اکثر برنامهها دارد ،اما
پیشبینی آدرس بافر مورد نظر را تقریباً غیرممکن میکند.
یکی دیگر از اهداف حمله ،محل روتین های استاندارد کتابخانه است .در تالش برای دور زدن حفاظتهایی مانند پشتههای
غیرقابل اجرا ،برخی از انواع سرریز بافر از کد موجود در کتابخانههای استاندارد سوء استفاده میکنند .اینها معموالً در یک آدرس
توسط همان برنامه بارگذاری می شوند .برای مقابله با این شکل از حمله ،می توانیم از aاستفاده کنیم
پسوند امنیتی که ترتیب بارگذاری کتابخانه های استاندارد توسط یک برنامه و مکان های آدرس حافظه مجازی آنها را تصادفی
می کند .این باعث می شود آدرس هر تابع خاص به اندازه کافی غیرقابل پیش بینی باشد تا شانس حمله ای که به درستی
آدرس آن را پیش بینی کند بسیار کم شود.
سیستم OpenBSDشامل نسخههایی از این برنامههای افزودنی در پشتیبانی فناوری خود برای یک سیستم امن است.
GUARD PAGESیک تکنیک زمان اجرا نهایی که می تواند مورد استفاده قرار گیرد ،صفحات نگهبان را بین مناطق بحرانی
حافظه در فضای آدرس فرآیندها قرار می دهد .باز هم ،این از این واقعیت سوء استفاده می کند که یک فرآیند حافظه مجازی
بسیار بیشتری نسبت به نیاز معمول دارد .شکاف هایی بین محدوده آدرس های مورد استفاده برای هر یک از اجزای فضای
آدرس قرار می گیرد .این شکاف ها یا صفحات محافظ ،در MMUبه عنوان آدرس های غیرقانونی عالمت گذاری می شوند و
هر گونه تالش برای دسترسی به آنها منجر به لغو فرآیند می شود .این می تواند از حمالت سرریز بافر ،معموالً از داده های
سراسری ،که سعی در بازنویسی مناطق مجاور در فضای آدرس فرآیندها دارند ،جلوگیری کند.
763
سیستم عامل های داخلی و اصول طراحی764.........................................................................................................................
یک برنامه افزودنی دیگر صفحات محافظ را بین قاب های پشته یا بین تخصیص های مختلف روی پشته قرار می دهد .این می
تواند محافظت بیشتری در برابر حمالت سرریز پشته و پشته ایجاد کند ،اما با هزینه در زمان اجرا پشتیبانی از تعداد زیادی از
نقشه برداری های صفحه ضروری است.
15.3کنترل دسترسی
کنترل دسترسی عملکردی است که توسط سیستم عامل ،سیستم فایل یا در هر دو سطح اعمال می شود .اصولی که به طور
معمول اعمال می شود در هر دو سطح یکسان است .در این بخش ،ما با نگاهی خاص به کنترل دسترسی از نقطه نظر کنترل
دسترسی فایل شروع می کنیم و سپس بحث را به سیاست های کنترل دسترسی که برای انواع منابع سیستم اعمال می شود
تعمیم می دهیم.
پس از ورود موفقیت آمیز به سیستم ،به کاربر اجازه دسترسی به یک یا مجموعه ای از میزبان ها و برنامه ها داده شده است .این
به طور کلی برای سیستمی که داده های حساس را در پایگاه داده خود دارد کافی نیست .از طریق روش کنترل دسترسی کاربر،
کاربر را می توان در سیستم شناسایی کرد .در ارتباط با هر کاربر ،میتواند نمایهای وجود داشته باشد که عملیات مجاز و
دسترسی به فایل را مشخص کند .سپس سیستم عامل می تواند قوانینی را بر اساس نمایه کاربر اعمال کند .با این حال ،سیستم
مدیریت پایگاه داده باید دسترسی به رکوردهای خاص یا حتی بخش هایی از رکوردها را کنترل کند .به عنوان مثال ،ممکن است
برای هرکسی در اداره مجاز باشد که لیستی از پرسنل شرکت به دست آورد ،اما فقط افراد منتخب ممکن است به اطالعات
حقوق دسترسی داشته باشند .موضوع فراتر از سطح جزئیات است.
در حالی که سیستم عامل ممکن است به کاربر اجازه دسترسی به یک فایل یا استفاده از یک برنامه کاربردی را بدهد ،پس از آن
هیچ بررسی امنیتی دیگری وجود ندارد ،سیستم مدیریت پایگاه داده باید در مورد هر تالش فردی برای دسترسی تصمیم گیری
کند .این تصمیم نه تنها به هویت کاربر ،بلکه به بخشهای خاصی از دادههای مورد دسترسی و حتی اطالعاتی که قبالً برای
کاربر فاش شده است نیز بستگی دارد .پس از ورود موفقیت آمیز به سیستم ،به کاربر اجازه دسترسی به یک یا مجموعه ای از
میزبان ها و برنامه ها داده شده است .این به طور کلی برای سیستمی که داده های حساس را در پایگاه داده خود دارد کافی
نیست .از طریق روش کنترل دسترسی کاربر ،کاربر را می توان در سیستم شناسایی کرد .در ارتباط با هر کاربر ،میتواند نمایهای
وجود داشته باشد که عملیات مجاز و دسترسی به فایل را مشخص کند .سپس سیستم عامل می تواند قوانینی را بر اساس نمایه
کاربر اعمال کند .با این حال ،سیستم مدیریت پایگاه داده باید دسترسی به رکوردهای خاص یا حتی بخش هایی از رکوردها را
کنترل کند .به عنوان مثال ،ممکن است برای هرکسی در اداره مجاز باشد که لیستی از پرسنل شرکت به دست آورد ،اما فقط
افراد منتخب ممکن است به اطالعات حقوق دسترسی داشته باشند .موضوع فراتر از سطح جزئیات است .در حالی که سیستم
764
سیستم عامل های داخلی و اصول طراحی765.........................................................................................................................
عامل ممکن است به کاربر اجازه دسترسی به یک فایل یا استفاده از یک برنامه کاربردی را بدهد ،پس از آن هیچ بررسی امنیتی
دیگری وجود ندارد ،سیستم مدیریت پایگاه داده باید در مورد هر تالش فردی برای دسترسی تصمیم گیری کند .این تصمیم نه
تنها به هویت کاربر ،بلکه به بخشهای خاصی از دادههای مورد دسترسی و حتی اطالعاتی که قبالً برای کاربر فاش شده است نیز
بستگی دارد.
یک بعد ماتریس شامل افراد شناسایی شده است که ممکن است به داده ها دسترسی داشته باشند .به طور معمول ،این فهرست
شامل کاربران یا گروههای کاربری منفرد میشود ،اگرچه دسترسی میتواند برای پایانهها ،میزبانها یا برنامهها به جای یا عالوه بر
کاربران کنترل شود .بعد دیگر اشیایی را که ممکن است به آنها دسترسی داشته باشید فهرست می کند .در باالترین سطح
جزئیات ،اشیا ممکن است زمینه های داده جداگانه باشند .گروه بندی های انبوه بیشتر ،مانند رکوردها ،فایل ها ،یا حتی کل
پایگاه داده نیز ممکن است اشیایی در ماتریس باشند .هر ورودی در ماتریس حقوق دسترسی آن موضوع را برای آن شی نشان
می دهد.
در عمل ،یک ماتریس دسترسی معموالً پراکنده است و با تجزیه به یکی از دو روش پیادهسازی میشود .ماتریس ممکن است
توسط ستون ها تجزیه شود و لیست های کنترل دسترسی به دست می آید شکل b. 15.3بنابراین برای هر شی ،یک لیست
کنترل دسترسی ،کاربران و حقوق دسترسی مجاز آنها را فهرست می کند .لیست کنترل دسترسی ممکن است حاوی یک ورودی
پیش فرض یا عمومی باشد .این به کاربرانی که صراحتاً بهعنوان دارای حقوق ویژه فهرست نشدهاند اجازه میدهد مجموعهای از
حقوق پیشفرض داشته باشند .عناصر لیست ممکن است شامل کاربران فردی و همچنین گروهی از کاربران باشد.
تجزیه بر اساس ردیف ،بلیط های قابلیت را به دست می دهد شکل c. 15.3یک بلیط قابلیت ،اشیا و عملیات مجاز را برای کاربر
مشخص می کند .هر کاربر تعدادی بلیط دارد و ممکن است مجاز به قرض دادن یا دادن آنها به دیگران باشد .از آنجایی که بلیط
765
سیستم عامل های داخلی و اصول طراحی766.........................................................................................................................
ها ممکن است در سراسر سیستم پراکنده شوند ،مشکل امنیتی بیشتری نسبت به لیست های کنترل دسترسی دارند .به ویژه،
بلیط باید غیرقابل جعل باشد .یکی از راههای انجام این کار این است که سیستم عامل همه بلیطها را از طرف کاربران نگه دارد.
این بلیط ها باید در منطقه ای از حافظه غیرقابل دسترس کاربران نگهداری شوند.
مالحظات شبکه برای کنترل دسترسی داده گرا به موازات مالحظات کنترل دسترسی کاربر محور است .اگر فقط کاربران خاصی
مجاز به دسترسی به موارد خاصی از داده ها هستند ،ممکن است برای محافظت از آن موارد در حین انتقال به کاربران مجاز به
رمزگذاری نیاز باشد .به طور معمول ،کنترل دسترسی به داده ها غیرمتمرکز است ،یعنی توسط سیستم های مدیریت پایگاه داده
مبتنی بر میزبان کنترل می شود .اگر یک سرور پایگاه داده شبکه در یک شبکه وجود داشته باشد ،کنترل دسترسی به داده ها به
یک عملکرد شبکه تبدیل می شود.
یک خط مشی کنترل دسترسی تعیین می کند که چه نوع دسترسی ،تحت چه شرایطی و توسط چه کسی مجاز است .سیاست
های کنترل دسترسی به طور کلی به دسته های زیر دسته بندی می شوند:
-کنترل دسترسی اختیاری DAC:دسترسی را بر اساس هویت درخواستکننده و قوانین دسترسی مجوزها کنترل میکند که
بیان میکند درخواستکنندگان چه کاری مجاز هستند یا نمیتوانند انجام دهند .این خطمشی اختیاری نامیده میشود زیرا یک
موجودیت ممکن است حقوق دسترسی داشته باشد که به آن موجودیت اجازه میدهد ،با میل خود ،موجودیت دیگری را قادر به
دسترسی به برخی منابع کند.
-کنترل دسترسی اجباری MAC:دسترسی را بر اساس مقایسه برچسب های امنیتی که نشان می دهد منابع سیستم چقدر
حساس یا حیاتی هستند با مجوزهای امنیتی که نشان می دهد نهادهای سیستم واجد شرایط دسترسی به منابع خاص هستند
را کنترل می کند .این خطمشی اجباری نامیده میشود زیرا نهادی که مجوز دسترسی به یک منبع را دارد ،ممکن است تنها با
اراده خود ،موجودیت دیگری را قادر به دسترسی به آن منبع نباشد.
-کنترل دسترسی مبتنی بر نقش RBAC:دسترسی را بر اساس نقشهایی که کاربران در سیستم دارند و قوانینی که بیان
میکند چه دسترسیهایی برای کاربران در نقشهای معین مجاز است ،کنترل میکند.
766
سیستم عامل های داخلی و اصول طراحی767.........................................................................................................................
سیاست کنترل
دسترسی
مبتنی بر نقش
DACروش سنتی اجرای کنترل دسترسی است .این روش در بحث قبلی کنترل دسترسی به فایل معرفی شد .ما جزئیات
بیشتری را در این بخش ارائه می دهیم MAC .مفهومی است که از الزامات امنیت اطالعات نظامی تکامل یافته است و خارج از
محدوده این کتاب است RBAC .به طور فزاینده ای محبوب شده است و بعداً در این بخش معرفی می شود.
این سه سیاست متقابالً منحصر به فرد نیستند شکل .15.4یک مکانیسم کنترل دسترسی می تواند از دو یا حتی هر سه این
سیاست ها برای پوشش دادن طبقات مختلف منابع سیستم استفاده کند .کنترل دسترسی اختیاری این بخش یک مدل کلی
برای DACرا معرفی میکند که توسط Graham ،Lampsonو DENN71 ،GRAH72 ،Denning LAMP71
توسعه یافته است .این مدل مجموعه ای از موضوعات ،مجموعه ای از اشیاء و مجموعه ای از قوانین را در نظر می گیرد که بر
دسترسی سوژه ها به اشیا حاکم است .اجازه دهید وضعیت حفاظتی یک سیستم را به عنوان مجموعه ای از اطالعات ،در یک
نقطه زمانی معین ،تعریف کنیم که حقوق دسترسی برای هر موضوع را با توجه به هر شی مشخص می کند .ما میتوانیم سه الزام
را شناسایی کنیم :نشان دادن وضعیت حفاظتی ،اجرای حقوق دسترسی ،و اجازه دادن به افراد برای تغییر وضعیت حفاظتی به
روشهای خاصی .این مدل به هر سه الزامات میپردازد و یک توصیف کلی و منطقی از یک سیستم DACارائه میکند.
برای نشان دادن حالت حفاظت ،جهان اشیاء را در ماتریس کنترل دسترسی به موارد زیر گسترش می دهیم:
-فرآیندها :حقوق دسترسی شامل توانایی حذف یک فرآیند ،توقف مسدود کردن و بیدار کردن یک فرآیند است.
-دستگاه ها :حقوق دسترسی شامل توانایی خواندن/نوشتن دستگاه ،کنترل عملکرد آن به عنوان مثال ،جستجوی دیسک ،و
مسدود کردن/رفع انسداد دستگاه برای استفاده است.
-مکان ها یا مناطق حافظه :حقوق دسترسی شامل توانایی خواندن/نوشتن مکان های خاصی از مناطق حافظه است که محافظت
می شوند به طوری که پیش فرض دسترسی مجاز نیست.
767
سیستم عامل های داخلی و اصول طراحی768.........................................................................................................................
-موضوعات :حقوق دسترسی با توجه به یک موضوع مربوط به توانایی اعطا یا حذف حقوق دسترسی آن موضوع به اشیاء دیگر
است ،همانطور که در ادامه توضیح داده شد.
شکل 15.5یک مثال است شکل a15.3را مقایسه کنید .برای یک ماتریس کنترل دسترسی ،Aهر ورودی AS, Xحاوی
رشته هایی به نام ویژگی های دسترسی است که حقوق دسترسی موضوع Sبه شی Xرا مشخص می کند .به عنوان مثال ،در
شکل S1 ،15.4ممکن است فایل F2را بخواند ،زیرا خواندن در AS1, F1ظاهر می شود.
از نقطه نظر منطقی یا عملکردی ،یک ماژول کنترل دسترسی جداگانه با هر نوع شی مرتبط است شکل .15.5ماژول هر
درخواست یک سوژه برای دسترسی به یک شی را ارزیابی می کند تا تعیین کند که آیا حق دسترسی وجود دارد یا خیر .یک
تالش برای دسترسی ،مراحل زیر را راهاندازی میکند:
.2درخواست باعث می شود که سیستم سیستم عامل یا یک نوع ماژول رابط کنترل دسترسی پیامی به شکل S0, a, Xبرای
کنترلر Xایجاد کند.
.3کنترل کننده ماتریس دسترسی Aرا بازجویی می کند تا مشخص کند aدر AS0, Xاست یا خیر .اگر چنین است،
دسترسی مجاز است .در غیر این صورت ،دسترسی ممنوع می شود و یک نقض حفاظت رخ می دهد .نقض باید باعث هشدار و
اقدام مناسب شود.
شکل 15.6نشان می دهد که هر دسترسی توسط یک موضوع به یک شی توسط کنترل کننده برای آن شی انجام می شود و
تصمیم کنترل کننده بر اساس محتوای فعلی ماتریس است .بعالوه ،موضوعات خاصی این اختیار را دارند که تغییرات خاصی در
ماتریس دسترسی ایجاد کنند .درخواست تغییر ماتریس دسترسی به عنوان دسترسی به ماتریس در نظر گرفته می شود و
ورودی های جداگانه در ماتریس به عنوان اشیا در نظر گرفته می شود .چنین دسترسی هایی توسط یک کنترل کننده ماتریس
دسترسی ،که به روز رسانی های ماتریس را کنترل می کند ،واسطه می شوند.
768
سیستم عامل های داخلی و اصول طراحی769.........................................................................................................................
این مدل همچنین شامل مجموعه ای از قوانین است که بر تغییرات ماتریس دسترسی ،نشان داده شده در جدول ،15.1حاکم
است .برای این منظور ،مالک و کنترل حقوق دسترسی و مفهوم یک پرچم کپی را که در پاراگراف های بعدی توضیح داده شده
است ،معرفی می کنیم .سه قانون اول مربوط به انتقال ،اعطا و حذف حقوق دسترسی است.
فرض کنید ورودی *aدر AS0, Xوجود دارد .این بدان معنی است که S0حق دسترسی aبه موضوع Xرا دارد و به دلیل
وجود پرچم کپی ،می تواند این حق را با یا بدون پرچم کپی ،به موضوع دیگری .قانون R1این قابلیت را بیان می کند .یک
موضوع حق دسترسی را بدون پرچم کپی منتقل می کند اگر این نگرانی وجود داشته باشد که موضوع جدید به طور مخرب این
حق را به موضوع دیگری که نباید آن حق دسترسی را داشته باشد منتقل می کند .برای مثال S1 ،ممکن است readیا
*readرا در هر ورودی ماتریسی در ستون F1قرار دهد .قانون R2بیان می کند که اگر S0به عنوان مالک شی Xتعیین
شود S0 ،می تواند حق دسترسی به آن شی را برای هر موضوع دیگری اعطا کند .قانون 2بیان میکند که S0میتواند هر حق
دسترسی را به AS, Xبرای هر Sاضافه کند ،اگر S0به Xدسترسی مالک داشته باشد .قانون R3به S0اجازه میدهد هر
حق دسترسی را از هر ورودی ماتریسی در ردیفی که S0برای آن کنترل میکند حذف کند .موضوع و برای هر ورودی ماتریسی
در ستونی که S0مالک شی است .قانون R4به یک آزمودنی اجازه میدهد آن بخش از ماتریس را که مالک یا کنترل میکند
بخواند.
769
سیستم عامل های داخلی و اصول طراحی770.........................................................................................................................
قوانین باقی مانده در جدول 15.1بر ایجاد و حذف موضوعات و اشیاء حاکم است .قانون R5بیان می کند که هر موضوعی می
تواند یک شی جدید ایجاد کند که مالک آن است ،و سپس می تواند دسترسی به شی را اعطا و حذف کند .تحت قانون ،R6
صاحب یک شی می تواند شی را از بین ببرد و در نتیجه ستون مربوطه از ماتریس دسترسی حذف شود .قانون R7هر موضوعی
را قادر می سازد تا یک موضوع جدید ایجاد کند .خالق صاحب موضوع جدید است و موضوع جدید به خودش دسترسی کنترلی
دارد .قانون R8به مالک یک موضوع اجازه می دهد تا سطر و ستون در صورت وجود ستون های موضوعی از ماتریس دسترسی
تعیین شده توسط آن موضوع را حذف کند .مجموعه قوانین در جدول 15.1نمونه ای از مجموعه قوانینی است که می تواند
برای سیستم کنترل دسترسی موارد زیر نمونه هایی از قوانین اضافی یا جایگزینی هستند که می توانند شامل شوند .حق انتقال
فقط می تواند تعریف شود که منجر به اضافه شدن حق منتقل شده به موضوع مورد نظر و حذف از موضوع انتقال دهنده می
شود .با اجازه ندادن پرچم کپی به همراه حق مالک ،تعداد صاحبان یک شی یا موضوع را می توان به یک نفر محدود کرد.
توانایی یک موضوع برای ایجاد موضوع دیگر و داشتن حق دسترسی مالک به آن موضوع می تواند برای تعریف سلسله مراتبی از
موضوعات مورد استفاده قرار گیرد .به عنوان مثال ،در شکل S1 ،15.5مالک S2و S3است ،به طوری که S2و S3تابع S1
هستند .طبق قوانین جدول S1 ،15.1می تواند حقوق دسترسی S2را که S1قبالً دارد ،اعطا و حذف کند .بنابراین ،یک
موضوع می تواند موضوع دیگری را با زیرمجموعه ای از حقوق دسترسی خود ایجاد کند .این ممکن است مفید باشد ،برای مثال،
770
771.........................................................................................................................سیستم عامل های داخلی و اصول طراحی
و نمیخواهد آن برنامه بتواند حقوق دسترسی را به،اگر سوژهای برنامهای را فراخوانی میکند که کامالً قابل اعتماد نیست
.موضوعات دیگر منتقل کند
کنترل دسترسی مبتنی بر نقش سیستمهای DACسنتی حقوق دسترسی تک تک کاربران و گروههایی از کاربران را تعریف
میکنند .در مقابل RBAC ،بر اساس نقشهایی است که کاربران در یک سیستم به عهده میگیرند تا هویت کاربر .به طور
معمول ،مدل های RBACنقش را به عنوان یک کارکرد شغلی در یک سازمان تعریف می کنند .سیستم های RBACبه
جای تک تک کاربران ،حقوق دسترسی را به نقش ها اختصاص می دهند .به نوبه خود ،کاربران با توجه به مسئولیت های خود به
نقش های مختلف ،چه به صورت ایستا یا پویا ،اختصاص داده می شوند.
RBACدر حال حاضر از استفاده تجاری گسترده ای برخوردار است و منطقه ای برای تحقیقات فعال باقی مانده است .مؤسسه
ملی استانداردها و فناوری NISTاستانداردی به نام الزامات امنیتی برای ماژول های رمزنگاری 25 ،FIPS PUB 140-2مه
2001صادر کرده است که به پشتیبانی برای کنترل دسترسی و مدیریت از طریق نقش ها نیاز دارد.
ارتباط کاربران با نقشها ،مانند رابطه نقشها با منابع یا اشیاء سیستم ،بسیار به بسیاری از آنها است شکل .15.7مجموعه ای از
کاربران در برخی محیط ها به طور مکرر تغییر می کند و انتساب یک کاربر به یک یا چند نقش نیز ممکن است پویا باشد.
مجموعه نقشها در سیستم در اکثر محیطها احتماالً ثابت هستند و فقط گاهی اوقات اضافه یا حذف میشوند .هر نقش حقوق
دسترسی خاصی به یک یا چند منبع خواهد داشت .مجموعه منابع و حقوق دسترسی خاص مرتبط با یک نقش خاص نیز
احتماالً به ندرت تغییر می کند.
همانطور که در شکل 15.8نشان داده شده است ،می توانیم از نمایش ماتریس دسترسی برای به تصویر کشیدن عناصر کلیدی
یک سیستم RBACبه زبان ساده استفاده کنیم .ماتریس باالیی ،کاربران فردی را به نقش ها مرتبط می کند .به طور معمول
تعداد کاربران بسیار بیشتر از نقش هاست .هر ورودی ماتریس یا خالی است یا عالمت گذاری شده است ،دومی نشان می دهد که
این کاربر به این نقش اختصاص داده شده است .توجه داشته باشید که ممکن است به یک کاربر چند نقش اختصاص داده شود
772
سیستم عامل های داخلی و اصول طراحی773.........................................................................................................................
بیش از یک عالمت در یک ردیف و چندین کاربر ممکن است به یک نقش اختصاص داده شوند بیش از یک عالمت در یک
ستون .ماتریس پایینی ساختاری مشابه ماتریس DACدارد و نقش هایی به عنوان سوژه دارد .به طور معمول ،نقش های کمی
وجود دارد و اشیا یا منابع زیادی وجود دارد .در این ماتریس ورودی ها حقوق دسترسی خاصی هستند که نقش ها از آن
برخوردار هستند .توجه داشته باشید که یک نقش را می توان به عنوان یک شی در نظر گرفت و اجازه تعریف سلسله مراتب
نقش را می دهد.
RBACخود را به اجرای مؤثر اصل کمترین امتیاز وامی دارد .یعنی هر نقش باید حداقل مجموعه ای از حقوق دسترسی مورد
نیاز برای آن نقش را داشته باشد .یک کاربر به نقشی اختصاص داده می شود که او را قادر می سازد فقط آنچه را که برای آن
نقش الزم است انجام دهد .چندین کاربر که به یک نقش اختصاص داده شده اند از حداقل مجموعه حقوق دسترسی یکسانی
برخوردار هستند.
773
سیستم عامل های داخلی و اصول طراحی774.........................................................................................................................
اکثر سیستمهای یونیکس به طرح کنترل دسترسی به فایل که با نسخههای اولیه یونیکس معرفی شد ،وابسته هستند یا حداقل
بر اساس آن هستند .به هر کاربر یونیکس یک شماره شناسایی منحصر به فرد کاربر شناسه کاربر اختصاص داده می شود .یک
کاربر همچنین عضو یک گروه اصلی و احتماالً تعدادی از گروه های دیگر است که هر کدام با یک شناسه گروهی شناسایی می
شوند .هنگامی که یک فایل ایجاد می شود ،به عنوان متعلق به یک کاربر خاص تعیین می شود و با شناسه آن کاربر عالمت
گذاری می شود .همچنین به یک گروه خاص تعلق دارد که در ابتدا یا گروه اصلی سازنده آن یا گروه دایرکتوری والد آن است اگر
آن دایرکتوری دارای مجموعه مجوز SetGIDباشد .به هر فایل مجموعه ای از 12بیت حفاظتی مربوط می شود .شناسه مالک،
شناسه گروه و بیتهای حفاظتی بخشی از inodeفایل هستند.
9بیت حفاظتی مجوز خواندن ،نوشتن و اجرا را برای صاحب فایل ،سایر اعضای گروهی که این فایل به آن تعلق دارد و همه
کاربران دیگر مشخص می کند .اینها سلسله مراتبی از مالک ،گروه و همه موارد دیگر را تشکیل می دهند که باالترین مجموعه
مجوزهای مربوطه استفاده می شود .شکل a15.9مثالی را نشان می دهد که در آن مالک فایل دسترسی خواندن و نوشتن دارد.
همه اعضای دیگر گروه فایل دسترسی خواندن دارند و کاربران خارج از گروه هیچ حق دسترسی به فایل ندارند .هنگامی که بر
روی یک فهرست اعمال می شود ،بیت های خواندن و نوشتن حق فهرست کردن و ایجاد/تغییر نام/حذف فایل ها را در
دایرکتوری اعطا می کند.
774
سیستم عامل های داخلی و اصول طراحی775.........................................................................................................................
سه بیت باقیمانده رفتار اضافی ویژه ای را برای فایل ها یا دایرکتوری ها تعریف می کند .دو مورد از آنها مجوزهای "تنظیم
شناسه کاربر" SetUIDو "تنظیم شناسه گروه" SetGIDهستند .اگر اینها روی یک فایل اجرایی تنظیم شوند ،سیستم عامل
به صورت زیر عمل می کند .هنگامی که یک کاربر دارای امتیازات اجرای این فایل فایل را اجرا می کند ،سیستم به طور موقت
حقوق شناسه کاربر سازنده فایل یا گروه فایل را به ترتیب به کاربرانی که فایل را اجرا می کند اختصاص می دهد .اینها بهعنوان
«شناسه کاربر مؤثر» و «شناسه گروه مؤثر» شناخته میشوند و عالوه بر «شناسه کاربر واقعی» و «شناسه گروه واقعی» کاربر
اجراکننده هنگام تصمیمگیری کنترل دسترسی برای این برنامه استفاده میشوند.
این تغییر تنها در زمانی که برنامه در حال اجرا است موثر است .این ویژگی ایجاد و استفاده از برنامه های ممتازی را امکان پذیر
می کند که ممکن است از فایل هایی استفاده کنند که معموالً برای سایر کاربران غیرقابل دسترسی است .کاربران را قادر می
سازد تا به فایل های خاصی به شیوه ای کنترل شده دسترسی داشته باشند .از طرف دیگر ،هنگامی که به یک دایرکتوری اعمال
می شود ،مجوز SetGIDنشان می دهد که فایل های جدید ایجاد شده گروه این دایرکتوری را به ارث خواهند برد .مجوز
SetUIDنادیده گرفته می شود.
بیت مجوز نهایی بیت “ ”Stickyاست .هنگامی که روی یک فایل تنظیم می شود ،در ابتدا نشان می دهد که سیستم باید
محتویات فایل را پس از اجرا در حافظه نگه دارد .این دیگر استفاده نمی شود .با این حال ،هنگامی که روی یک فهرست اعمال
775
سیستم عامل های داخلی و اصول طراحی776.........................................................................................................................
می شود ،مشخص می کند که فقط مالک هر فایلی در فهرست می تواند آن فایل را تغییر نام ،انتقال یا حذف کند .این برای
مدیریت فایل ها در دایرکتوری های موقت مشترک مفید است.
یک شناسه کاربری خاص به عنوان superuserتعیین می شود .ابرکاربر از محدودیتهای معمول کنترل دسترسی به فایل
معاف است و دسترسی سراسری دارد .هر برنامهای که متعلق به «ابر کاربر» و « »SetUIDباشد ،به طور بالقوه به هر کاربری که
آن برنامه را اجرا میکند ،دسترسی نامحدود به سیستم را میدهد .از این رو هنگام نوشتن چنین برنامه هایی دقت زیادی الزم
است.
این طرح دسترسی زمانی مناسب است که الزامات دسترسی به فایل با کاربران و تعداد کمی از گروههای کاربر همسو باشد .برای
مثال ،فرض کنید کاربری میخواهد دسترسی خواندن برای فایل Xرا به کاربران Aو Bو دسترسی خواندن برای فایل Yرا به
کاربران Bو Cبدهد .حداقل به دو گروه کاربری نیاز داریم و کاربر Bباید به هر دو گروه تعلق داشته باشد.
برای دسترسی به دو فایل با این حال ،اگر تعداد زیادی گروه بندی مختلف از کاربران وجود داشته باشد که به طیف وسیعی از
حقوق دسترسی به فایل های مختلف نیاز دارند ،ممکن است تعداد بسیار زیادی گروه برای ارائه این مورد نیاز باشد .این امر به
سرعت سخت و دشوار می شود ،حتی اگر اصالً امکان پذیر باشد 9 .یکی از راه های غلبه بر این مشکل استفاده از لیست های
کنترل دسترسی است که در اکثر سیستم های یونیکس مدرن ارائه شده است.
نکته پایانی که باید به آن توجه داشت این است که طرح کنترل دسترسی به فایل یونیکس سنتی یک ساختار دامنه حفاظتی
ساده را پیاده سازی می کند .یک دامنه با کاربر مرتبط است و تغییر دامنه مربوط به تغییر موقت شناسه کاربر است.
بسیاری از سیستم عامل های مدرن مبتنی بر یونیکس و یونیکس از لیست های کنترل دسترسی ،از جمله ،FreeBSD
Linux ،OpenBSDو Solarisپشتیبانی می کنند .در این بخش ،رویکرد FreeBSDرا شرح میدهیم ،اما سایر
پیادهسازیها اساساً ویژگیها و رابط کاربری مشابهی دارند .از این ویژگی به عنوان لیست کنترل دسترسی توسعه یافته یاد می
شود ،در حالی که رویکرد سنتی یونیکس به عنوان لیست کنترل دسترسی حداقل نامیده می شود.
FreeBSDبه مدیر اجازه می دهد تا با استفاده از دستور setfaclلیستی از شناسه های کاربری و گروه های یونیکس را به
یک فایل اختصاص دهد .هر تعداد کاربر و گروه را می توان با یک فایل مرتبط کرد که هر کدام دارای سه بیت حفاظتی خواندن،
نوشتن ،اجرا هستند که مکانیزمی انعطاف پذیر برای تخصیص حقوق دسترسی ارائه می دهند .یک فایل نیازی به ACLندارد،
اما ممکن است تنها توسط مکانیزم سنتی دسترسی به فایل یونیکس محافظت شود .فایلهای FreeBSDشامل یک بیت
حفاظتی اضافی هستند که نشان میدهد آیا فایل دارای ACLتوسعهیافته است یا خیر.
776
سیستم عامل های داخلی و اصول طراحی777.........................................................................................................................
FreeBSDو اکثر پیاده سازی های یونیکس که ACLهای توسعه یافته را پشتیبانی می کنند از استراتژی زیر استفاده می
کنند به عنوان مثال ،شکل b:15.9
.1کالس مالک و سایر ورودیهای کالس در زمینه مجوز 9بیتی همان معنایی دارند که در مورد حداقل ACLوجود دارد.
.2ورودی کالس گروه مجوزهای گروه مالک را برای این فایل مشخص می کند .این مجوزها حداکثر مجوزهایی را نشان میدهند
که میتوان به کاربران نامگذاری شده یا گروههای نامگذاری شده ،به غیر از کاربر مالک ،اختصاص داد .در این نقش آخر ،ورودی
کالس گروهی به عنوان یک ماسک عمل می کند.
.3کاربران نامگذاریشده و گروههای نامگذاریشده اضافی ممکن است با فایل مرتبط شوند ،که هر کدام دارای یک زمینه مجوز
سه بیتی هستند .مجوزهای فهرست شده برای یک کاربر یا گروه نامگذاری شده با زمینه ماسک مقایسه می شوند .هر گونه
مجوز برای کاربر نامگذاری شده یا گروه نامگذاری شده که در قسمت ماسک وجود ندارد مجاز نیست.
هنگامی که یک فرآیند درخواست دسترسی به یک شیء سیستم فایل را می دهد ،دو مرحله انجام می شود .مرحله 1ورودی
ACLرا انتخاب می کند که بیشتر با فرآیند درخواست مطابقت دارد .ورودیهای ACLبه ترتیب زیر بررسی میشوند :مالک،
کاربران نامگذاری شده ،گروههای مالک یا نامگذاریشده ،و دیگران .فقط یک ورودی واحد دسترسی را تعیین می کند .مرحله 2
بررسی می کند که آیا ورودی منطبق دارای مجوزهای کافی است یا خیر .یک فرآیند می تواند در بیش از یک گروه عضو باشد.
بنابراین بیش از یک ورودی گروهی می تواند مطابقت داشته باشد .اگر هر یک از این ورودیهای گروه منطبق حاوی مجوزهای
درخواستی باشد ،ورودیهای حاوی مجوزهای درخواستی انتخاب میشوند
بدون توجه به اینکه کدام ورودی انتخاب شده ،نتیجه یکسان است .اگر هیچ یک از ورودی های گروه منطبق حاوی مجوزهای
درخواستی نباشد ،بدون توجه به اینکه کدام ورودی انتخاب شده است ،دسترسی ممنوع خواهد بود.
اولین گام حیاتی در ایمن سازی یک سیستم ،ایمن سازی سیستم عامل پایه است که همه برنامه ها و سرویس های دیگر به آن
متکی هستند .یک پایه امنیتی خوب به یک سیستم عامل به درستی نصب شده ،وصله شده و پیکربندی شده نیاز دارد.
متأسفانه ،پیکربندی پیشفرض برای بسیاری از سیستمعاملها اغلب سهولت استفاده و عملکرد را به جای امنیت به حداکثر
میرساند .عالوه بر این ،از آنجایی که هر سازمانی نیازهای امنیتی خاص خود را دارد ،مشخصات امنیتی مناسب و در نتیجه
پیکربندی نیز متفاوت خواهد بود .آنچه برای یک سیستم خاص مورد نیاز است باید در مرحله برنامه ریزی شناسایی شود،
همانطور که قبالً بحث کردیم.
777
سیستم عامل های داخلی و اصول طراحی778.........................................................................................................................
در حالی که جزئیات نحوه ایمن سازی هر سیستم عامل خاص متفاوت است ،رویکرد گسترده مشابه است .راهنماها و چک
لیستهای پیکربندی امنیتی مناسب برای اکثر سیستمعاملهای رایج وجود دارد ،و باید از آنها رجوع کرد ،هرچند که همیشه
از نیازهای خاص هر سازمان و سیستمهای آن مطلع شوند .در برخی موارد ،ابزارهای خودکار ممکن است برای کمک بیشتر به
ایمن سازی پیکربندی سیستم در دسترس باشند.
NIST08پیشنهاد می کند که مراحل اساسی زیر باید برای ایمن سازی یک سیستم عامل استفاده شود:
-سیستم عامل را سخت کنید و پیکربندی کنید تا به اندازه کافی نیازهای امنیتی شناسایی شده سیستم را از طریق:
-در صورت نیاز ،کنترل های امنیتی اضافی مانند آنتی ویروس ،فایروال های مبتنی بر میزبان و سیستم های تشخیص نفوذ
IDSرا نصب و پیکربندی کنید.
-امنیت سیستم عامل اصلی را آزمایش کنید تا مطمئن شوید که اقدامات انجام شده به اندازه کافی نیازهای امنیتی آن را
برطرف می کند
امنیت سیستم با نصب سیستم عامل شروع می شود .همانطور که قبالً اشاره کردیم ،یک سیستم متصل به شبکه وصلهنشده در
طول نصب یا استفاده مداوم ،در معرض سوء استفاده قرار میگیرد .از این رو مهم است که سیستم تا زمانی که در این وضعیت
آسیب پذیر است در معرض خطر قرار نگیرد .در حالت ایده آل سیستم های جدید باید بر روی یک شبکه محافظت شده ساخته
شوند .این ممکن است یک شبکه کامالً ایزوله باشد که تصویر سیستم عامل و تمام وصلههای موجود با استفاده از رسانههای قابل
جابجایی مانند DVDیا درایوهای USBبه آن منتقل شده است .با توجه به وجود بدافزاری که میتواند با استفاده از رسانههای
متحرک منتشر شود ،باید مراقب باشید که رسانه مورد استفاده در اینجا چندان آلوده نباشد .از طرف دیگر ،ممکن است از
شبکهای با دسترسی محدود به اینترنت گستردهتر استفاده شود .در حالت ایدهآل ،نباید دسترسی ورودی داشته باشد ،و فقط به
سایتهای کلیدی مورد نیاز برای فرآیند نصب و وصله سیستم ،دسترسی خروجی داشته باشد .در هر صورت ،فرآیند نصب و
سخت شدن کامل باید قبل از استقرار سیستم در محل مورد نظر ،در دسترستر و در نتیجه آسیبپذیرتر انجام شود.
778
سیستم عامل های داخلی و اصول طراحی779.........................................................................................................................
نصب اولیه باید شامل حداقل های الزم برای سیستم مورد نظر باشد و تنها در صورتی که برای عملکرد سیستم مورد نیاز باشد،
بسته های نرم افزاری اضافی گنجانده شود .ما منطق به حداقل رساندن تعداد بسته ها در سیستم را به زودی بررسی می کنیم.
فرآیند بوت کلی نیز باید ایمن باشد .این ممکن است نیاز به تنظیم گزینه ها یا تعیین رمز عبور مورد نیاز برای تغییرات در کد
بایوس مورد استفاده در هنگام بوت شدن اولیه داشته باشد .همچنین ممکن است نیاز به محدود کردن رسانه ای باشد که
سیستم معموالً مجاز به بوت شدن است .این امر برای جلوگیری از تغییر فرآیند بوت توسط مهاجم برای نصب یک
Hypervisorمخفی یا بوت کردن سیستم مورد نظر خود از رسانه خارجی به منظور دور زدن کنترلهای دسترسی عادی
سیستم بر روی دادههای ذخیرهشده محلی ضروری است .همانطور که بعداً اشاره خواهیم کرد ،ممکن است از یک سیستم فایل
رمزنگاری برای مقابله با این تهدید استفاده شود.
همچنین در انتخاب و نصب هر کد درایور دستگاه اضافی دقت الزم است ،زیرا این کد با امتیازات سطح هسته کامل اجرا می
شود ،اما اغلب توسط شخص ثالث ارائه می شود .یکپارچگی و منبع این کد درایور باید با توجه به سطح باالیی از اعتماد که دارد
به دقت تأیید شود .یک درایور مخرب به طور بالقوه می تواند بسیاری از کنترل های امنیتی را برای نصب بدافزار دور بزند .با
توجه به کشف مداوم نرمافزار و سایر آسیبپذیریها برای سیستمعاملها و برنامههای کاربردی رایج ،بسیار مهم است که سیستم
تا حد امکان بهروز نگه داشته شود و همه وصلههای مهم مرتبط با امنیت نصب شده باشند .تقریباً همه سیستمهای رایج در حال
حاضر ابزارهایی را ارائه میدهند که میتوانند بهطور خودکار بهروزرسانیهای امنیتی را دانلود و نصب کنند .این ابزارها باید
پیکربندی و استفاده شوند تا مدت زمانی که یک سیستم در برابر نقاط ضعفی که وصلههای موجود برای آنها در دسترس است،
به حداقل برسد.
توجه داشته باشید که در سیستمهای کنترلشده با تغییر ،نباید بهروزرسانیهای خودکار را اجرا کنید ،زیرا وصلههای امنیتی در
موارد نادر اما مهم میتوانند باعث ناپایداری شوند .بنابراین ،برای سیستمهایی که در دسترس بودن و زمان کار اهمیت باالیی
دارند ،باید تمام وصلههای موجود در سیستمهای آزمایشی را قبل از استقرار آنها در تولید مرحلهبندی و اعتبارسنجی کنید.
از آنجا که هر یک از نرم افزارهای در حال اجرا بر روی یک سیستم ممکن است حاوی آسیب پذیری های نرم افزاری باشد ،به
وضوح اگر بسته های نرم افزاری کمتری برای اجرا در دسترس باشد ،خطر کاهش می یابد .به وضوح بین قابلیت استفاده ،ارائه
همه نرمافزارهایی که ممکن است در برخی زمانها مورد نیاز باشد ،و امنیت و تمایل به محدود کردن مقدار نرمافزار نصبشده،
تعادل وجود دارد .گستره خدمات ،برنامهها و پروتکلهای مورد نیاز بین سازمانها و در واقع بین سیستمهای یک سازمان بسیار
متفاوت است .فرآیند برنامهریزی سیستم باید مشخص کند که واقعاً چه چیزی برای یک سیستم مورد نیاز است ،به طوری که
سطح مناسبی از عملکرد ارائه شود ،در حالی که نرمافزارهایی که برای بهبود امنیت مورد نیاز نیستند حذف شوند.
779
سیستم عامل های داخلی و اصول طراحی780.........................................................................................................................
پیکربندی پیشفرض برای اکثر سیستمهای توزیعشده برای به حداکثر رساندن سهولت استفاده و عملکرد به جای امنیت تنظیم
شده است .هنگام اجرای نصب اولیه ،نباید از پیش فرض های ارائه شده استفاده کرد ،بلکه نصب باید به گونه ای سفارشی شود
که فقط بسته های مورد نیاز نصب شوند .اگر بعداً به بستههای اضافی نیاز باشد ،میتوان آنها را در صورت نیاز نصب کرد.
NIST08و بسیاری از راهنماهای سختافزاری امنیتی فهرستی از خدمات ،برنامهها و پروتکلهایی را ارائه میکنند که در
صورت عدم نیاز ،نباید نصب شوند.
NIST08همچنین ترجیح می دهد که نرم افزار ناخواسته را نصب نکنید ،به جای نصب و سپس حذف یا غیرفعال کردن آن.
آنها این ترجیح را استدالل می کنند زیرا توجه دارند که بسیاری از اسکریپت های حذف نصب نمی توانند تمام اجزای یک بسته
را به طور کامل حذف کنند .آنها همچنین خاطرنشان می کنند که غیرفعال کردن یک سرویس به این معنی است که در حالی
که به عنوان نقطه حمله اولیه در دسترس نیست ،اگر مهاجم موفق شود تا حدی به یک سیستم دسترسی پیدا کند ،نرم افزار
غیرفعال می تواند دوباره فعال شود و برای به خطر انداختن بیشتر یک سیستم استفاده شود .اگر نرم افزارهای ناخواسته نصب
نشده باشند ،برای امنیت بهتر است و بنابراین اصالً برای استفاده در دسترس نیستند.
همه کاربرانی که به یک سیستم دسترسی دارند دسترسی یکسان به همه داده ها و منابع موجود در آن سیستم ندارند .تمامی
سیستم عامل های مدرن کنترل های دسترسی به داده ها و منابع را اجرا می کنند .تقریباً همه نوعی از کنترل های دسترسی
اختیاری را ارائه می دهند .برخی از سیستم ها ممکن است مکانیسم های کنترل دسترسی مبتنی بر نقش یا اجباری را نیز ارائه
دهند.
فرآیند برنامه ریزی سیستم باید دسته بندی کاربران در سیستم ،امتیازات آنها ،انواع اطالعاتی که می توانند به آنها دسترسی
داشته باشند ،و نحوه و مکان تعریف و احراز هویت آنها را در نظر بگیرد .برخی از کاربران از امتیازات باالیی برای مدیریت سیستم
برخوردار خواهند بود .دیگران کاربران عادی خواهند بود و در صورت لزوم دسترسی مناسب به فایل ها و سایر داده ها را به
اشتراک می گذارند .و حتی ممکن است حساب های مهمان با دسترسی بسیار محدود وجود داشته باشد .سومین راهبرد از چهار
استراتژی کاهش ،DSDمحدود کردن امتیازات باال تنها به کاربرانی است که به آنها نیاز دارند .بعالوه ،بسیار مطلوب است که
چنین کاربرانی فقط در مواقعی که برای انجام برخی از کارهایی که به آنها نیاز دارد ،به امتیازات باالتر دسترسی داشته باشند و
در غیر این صورت به عنوان یک کاربر عادی به سیستم دسترسی داشته باشند.
این امر امنیت را با فراهم کردن فرصت کمتری برای مهاجم برای سوء استفاده از اقدامات چنین کاربران ممتازی بهبود می
بخشد .برخی از سیستمعاملها ابزارها یا مکانیسمهای دسترسی ویژهای را برای کمک به کاربران مدیریتی ارائه میکنند تا فقط
در صورت لزوم امتیازات خود را افزایش دهند و این اقدامات را بهطور مناسب ثبت کنند.
780
سیستم عامل های داخلی و اصول طراحی781.........................................................................................................................
یک تصمیم کلیدی این است که آیا کاربران ،گروه هایی که به آنها تعلق دارند و روش های احراز هویت آنها به صورت محلی در
سیستم مشخص شده است یا از یک سرور احراز هویت متمرکز استفاده می کند .هر کدام که انتخاب شود ،جزئیات مناسب
اکنون بر روی سیستم پیکربندی شده است.
همچنین در این مرحله ،هر حساب پیش فرضی که به عنوان بخشی از نصب سیستم گنجانده شده است ،باید ایمن شود .مواردی
که مورد نیاز نیستند باید یا حذف شوند یا حداقل غیرفعال شوند .حسابهای سیستمی که خدمات را در سیستم مدیریت
میکنند باید طوری تنظیم شوند که نتوان از آنها برای ورودهای تعاملی استفاده کرد .و هر رمز عبوری که به طور پیش فرض
نصب شده است باید با امنیت مناسب به مقادیر جدید تغییر یابد.
هر خط مشی که در مورد اعتبار احراز هویت ،و به ویژه برای امنیت رمز عبور اعمال می شود ،نیز پیکربندی شده است .این
شامل جزئیاتی است که روشهای احراز هویت برای روشهای مختلف دسترسی به حساب پذیرفته شده است .و شامل جزئیات
طول مورد نیاز ،پیچیدگی ،و سن مجاز برای رمزهای عبور است.
هنگامی که کاربران و گروههای مرتبط با آنها تعریف شدند ،میتوان مجوزهای مناسبی را روی دادهها و منابع تنظیم کرد تا با
خطمشی مشخصشده مطابقت داشته باشد .این ممکن است برای محدود کردن کاربرانی که میتوانند برخی از برنامهها را اجرا
کنند ،به ویژه برنامههایی که وضعیت سیستم را تغییر میدهند ،یا محدود کردن کاربرانی که میتوانند دادهها را در درختهای
فهرستی خاص بخوانند یا بنویسند .بسیاری از راهنماهای سختسازی امنیتی فهرستی از تغییرات توصیهشده در پیکربندی
دسترسی پیشفرض را برای بهبود امنیت ارائه میکنند.
بهبود امنیت بیشتر ممکن است با نصب و پیکربندی ابزارهای امنیتی اضافی مانند نرم افزار آنتی ویروس ،فایروال های مبتنی بر
میزبان ،نرم افزار IDSیا IPSیا لیست سفید برنامه ها امکان پذیر باشد .برخی از آنها ممکن است به عنوان بخشی از نصب
سیستم عامل ارائه شوند ،اما به طور پیش فرض پیکربندی و فعال نشده باشند .بقیه محصوالت شخص ثالثی هستند که
خریداری و استفاده می شوند.
با توجه به شیوع گسترده بدافزارها ،آنتی ویروس مناسب که همانطور که اشاره شد طیف گسترده ای از انواع بدافزارها را مورد
توجه قرار می دهد یک جزء امنیتی حیاتی در بسیاری از سیستم ها است .محصوالت آنتی ویروس به طور سنتی در سیستم
های ویندوز مورد استفاده قرار می گیرند ،زیرا استفاده زیاد از آنها آنها را به یک هدف ترجیحی برای مهاجمان تبدیل کرده است.
781
سیستم عامل های داخلی و اصول طراحی782.........................................................................................................................
با این حال ،رشد سایر پلتفرمها ،به ویژه تلفنهای هوشمند ،منجر به توسعه بدافزارهای بیشتری برای آنها شده است .از این رو
محصوالت آنتی ویروس مناسب باید برای هر سیستمی به عنوان بخشی از مشخصات امنیتی آن در نظر گرفته شود.
فایروالهای مبتنی بر میزبان IDS ،و نرمافزار IPSنیز ممکن است با محدود کردن دسترسی شبکه از راه دور به خدمات روی
سیستم ،امنیت را بهبود بخشند .اگر دسترسی از راه دور به یک سرویس مورد نیاز نیست ،اگرچه برخی از دسترسی های محلی
نیازی است ،در این صورت چنین محدودیت هایی به ایمن کردن چنین سرویس هایی در برابر سوء استفاده از راه دور توسط
مهاجم کمک می کند .فایروال ها به طور سنتی برای محدود کردن دسترسی توسط پورت یا پروتکل ،از برخی یا همه سیستم
های خارجی پیکربندی می شوند .برخی نیز ممکن است به گونهای پیکربندی شوند که اجازه دسترسی از یا به برنامههای خاص
روی سیستمها ،محدود کردن بیشتر نقاط حمله ،و جلوگیری از نصب و دسترسی مهاجم به بدافزار خود را بدهند .نرم افزار IDS
و IPSممکن است شامل مکانیسم های اضافی مانند نظارت بر ترافیک یا بررسی یکپارچگی فایل برای شناسایی و حتی پاسخ به
برخی از انواع حمالت باشد.
یکی دیگر از کنترل های اضافی ،برنامه های لیست سفید است .این امر برنامههایی را که میتوانند روی سیستم اجرا شوند فقط
به برنامههایی که در یک لیست صریح هستند محدود میکند .چنین ابزاری میتواند از نصب و اجرای بدافزار توسط مهاجم
جلوگیری کند و آخرین مورد از چهار استراتژی کاهش DSDکلیدی بود .در حالی که این امر امنیت را بهبود می بخشد ،اما در
محیطی با مجموعه ای قابل پیش بینی از برنامه های کاربردی مورد نیاز کاربران بهترین عملکرد را دارد .هرگونه تغییر در
استفاده از نرم افزار مستلزم تغییر در پیکربندی است که ممکن است منجر به افزایش تقاضای پشتیبانی فناوری اطالعات شود.
همه سازمان ها یا همه سیستم ها به اندازه کافی قابل پیش بینی برای این نوع کنترل نیستند.
مرحله نهایی در فرآیند ایمن سازی اولیه سیستم عامل پایه ،آزمایش امنیتی است .هدف اطمینان از اجرای صحیح مراحل
پیکربندی امنیتی قبلی و شناسایی هر گونه آسیب پذیری احتمالی است که باید اصالح یا مدیریت شود .چک لیست های
مناسب در بسیاری از راهنماهای تقویت امنیت گنجانده شده است .همچنین برنامههایی وجود دارند که بهطور خاص برای
بررسی یک سیستم طراحی شدهاند تا اطمینان حاصل شود که یک سیستم الزامات امنیتی اولیه را برآورده میکند و
آسیبپذیریهای شناخته شده و شیوههای پیکربندی ضعیف را اسکن میکند .این باید پس از سخت شدن اولیه سیستم انجام
شود و سپس به عنوان بخشی از فرآیند نگهداری امنیتی به صورت دوره ای تکرار شود.
782
سیستم عامل های داخلی و اصول طراحی783.........................................................................................................................
15.6نگهداری امنیتی
هنگامی که سیستم به طور مناسب ساخته ،ایمن و مستقر شد ،فرآیند حفظ امنیت مستمر است .این ناشی از تغییر مداوم
محیط ،کشف آسیبپذیریهای جدید و در نتیجه قرار گرفتن در معرض تهدیدات جدید استNIST08 .پیشنهاد میکند که
این فرآیند نگهداری امنیتی شامل مراحل اضافی زیر است:
-استفاده از فرآیندهای نگهداری نرم افزار مناسب برای وصله و به روز رسانی تمام نرم افزارهای حیاتی و نظارت و بازنگری
پیکربندی در صورت نیاز
ما قبالً به نیاز به پیکربندی وصله خودکار و بهروزرسانی در صورت امکان یا داشتن فرآیندی برای آزمایش و نصب وصلههای
دستی در سیستمهای کنترلشده با پیکربندی اشاره کردهایم ،و اینکه سیستم باید به طور مرتب با استفاده از چک لیست یا
ابزارهای خودکار در صورت امکان آزمایش شود.
ورود به سیستم
NIST08خاطرنشان می کند که "خروج از سیستم سنگ بنای یک وضعیت امنیتی سالم است Logging ".یک کنترل
واکنشی است که فقط می تواند شما را در مورد چیزهای بدی که قبالً رخ داده است مطلع کند .اما ثبت موثر کمک می کند تا
اطمینان حاصل شود که در صورت رخنه یا شکست سیستم ،مدیران سیستم می توانند با سرعت و دقت بیشتری آنچه اتفاق
افتاده را شناسایی کنند و بنابراین تالش های اصالحی و بازیابی خود را به طور مؤثر متمرکز کنند .نکته کلیدی این است که
اطمینان حاصل کنید که داده های صحیح را در گزارش ها ثبت می کنید و سپس به طور مناسب این داده ها را نظارت و تجزیه
و تحلیل می کنید .اطالعات گزارش را می توان توسط سیستم ،شبکه و برنامه ها تولید کرد .محدوده دادههای ثبتشده
بهدستآمده باید در مرحله برنامهریزی سیستم تعیین شود ،زیرا به الزامات امنیتی و حساسیت اطالعات سرور بستگی دارد.
ورود به سیستم می تواند حجم قابل توجهی از اطالعات را تولید کند .مهم این است که فضای کافی برای آنها اختصاص داده
شود .یک سیستم چرخش و بایگانی خودکار مناسب نیز باید پیکربندی شود تا به مدیریت اندازه کلی اطالعات ثبت کمک کند.
783
سیستم عامل های داخلی و اصول طراحی784.........................................................................................................................
تجزیه و تحلیل دستی گزارش ها خسته کننده است و ابزار قابل اعتمادی برای تشخیص رویدادهای نامطلوب نیست .در عوض،
نوعی از تجزیه و تحلیل خودکار ترجیح داده می شود ،زیرا احتمال بیشتری برای شناسایی فعالیت های غیرعادی وجود دارد.
انجام پشتیبان گیری منظم از داده ها در یک سیستم یکی دیگر از کنترل های حیاتی است که به حفظ یکپارچگی سیستم و
داده های کاربر کمک می کند .دالیل زیادی برای از بین رفتن داده ها از یک سیستم وجود دارد ،از جمله خرابی سخت افزاری یا
نرم افزاری ،یا خرابی تصادفی یا عمدی .همچنین ممکن است الزامات قانونی یا عملیاتی برای نگهداری داده ها وجود داشته باشد.
پشتیبان گیری فرآیند تهیه کپی از داده ها در فواصل زمانی منظم است که امکان بازیابی اطالعات از دست رفته یا خراب را در
بازه های زمانی نسبتاً کوتاه از چند ساعت تا چند هفته فراهم می کند .آرشیو فرآیند نگهداری کپیهایی از دادهها در دورههای
زمانی طوالنی ،ماهها یا سالها ،به منظور برآورده کردن الزامات قانونی و عملیاتی برای دسترسی به دادههای گذشته است .این
فرآیندها اغلب با هم مرتبط و مدیریت می شوند ،اگرچه نیازهای متمایز را برطرف می کنند.
نیازها و خط مشی مربوط به پشتیبان گیری و آرشیو باید در مرحله برنامه ریزی سیستم تعیین شود .تصمیمات کلیدی شامل
این است که آیا نسخه های پشتیبان باید به صورت آنالین یا آفالین نگهداری شوند ،و اینکه آیا نسخه ها باید به صورت محلی
ذخیره شوند یا به یک سایت راه دور منتقل شوند .این مبادالت شامل سهولت اجرا و هزینه ،امنیت و استحکام بیشتر در برابر
تهدیدات مختلف است.
نمونه خوبی از عواقب انتخاب های ضعیف در اینجا در حمله به یک ارائه دهنده هاست استرالیایی در اوایل سال 2011مشاهده
شد .مهاجمان نه تنها نسخه های زنده هزاران سایت مشتری بلکه تمام نسخه های پشتیبان آنالین را نیز از بین بردند .در نتیجه،
بسیاری از مشتریانی که نسخههای پشتیبان خود را حفظ نکرده بودند ،تمام محتوا و دادههای سایت خود را از دست دادند و
عواقب جدی برای بسیاری از آنها و همچنین برای ارائهدهنده هاست داشت .در مثالهای دیگر ،بسیاری از سازمانها که فقط
نسخههای پشتیبان در محل نگهداری میکنند ،تمام اطالعات خود را در نتیجه آتشسوزی یا سیل در مرکز فناوری اطالعات
خود از دست دادهاند .این خطرات باید به درستی ارزیابی شوند.
15.7امنیت ویندوز
یک مثال خوب از مفاهیم کنترل دسترسی که در مورد آن بحث کردیم ،تسهیالت کنترل دسترسی ویندوز است که از مفاهیم
شی گرا برای ارائه یک قابلیت کنترل دسترسی قدرتمند و انعطاف پذیر استفاده می کند.
784
سیستم عامل های داخلی و اصول طراحی785.........................................................................................................................
ویندوز یک امکان کنترل دسترسی یکنواخت را فراهم می کند که برای پردازش ها ،رشته ها ،فایل ها ،سمافورها ،پنجره ها و
سایر اشیاء اعمال می شود .کنترل دسترسی توسط دو نهاد کنترل می شود :یک نشانه دسترسی مرتبط با هر فرآیند و یک
توصیف کننده امنیتی مرتبط با هر شی که دسترسی بین پردازشی برای آن امکان پذیر است.
هنگامی که کاربر به سیستم ویندوز وارد می شود ،ویندوز از طرح نام/رمز عبور برای احراز هویت کاربر استفاده می کند .اگر ورود
به سیستم پذیرفته شود ،یک فرآیند برای کاربر ایجاد می شود و یک نشانه دسترسی با آن شی فرآیند مرتبط می شود .نشانه
دسترسی ،که جزئیات آن بعداً توضیح داده میشود ،شامل یک شناسه امنیتی SIDاست که شناسهای است که توسط آن کاربر
برای اهداف امنیتی برای سیستم شناخته میشود .این توکن همچنین حاوی SIDبرای گروه های امنیتی است که کاربر به آنها
تعلق دارد .اگر فرآیند کاربر اولیه یک فرآیند جدید ایجاد کند ،شی فرآیند جدید همان نشانه دسترسی را به ارث می برد.
.1تمام اطالعات امنیتی الزم را برای سرعت بخشیدن به اعتبارسنجی دسترسی نگه می دارد .هنگامی که هر فرآیند مرتبط با
یک کاربر سعی می کند دسترسی داشته باشد ،زیرسیستم امنیتی می تواند از رمز مرتبط با آن فرآیند برای تعیین امتیازات
دسترسی کاربر استفاده کند.
.2به هر فرآیند اجازه میدهد تا ویژگیهای امنیتی خود را به روشهای محدودی بدون تأثیر بر سایر فرآیندهایی که از طرف
کاربر اجرا میشوند ،تغییر دهد.
اهمیت اصلی نکته دوم مربوط به امتیازاتی است که ممکن است با یک کاربر مرتبط باشد .نشانه دسترسی نشان می دهد که یک
کاربر چه امتیازاتی ممکن است داشته باشد .به طور کلی ،توکن با هر یک از این امتیازات در حالت غیرفعال مقداردهی اولیه می
شود .متعاقباً ،اگر یکی از فرآیندهای کاربر نیاز به انجام یک عملیات ممتاز داشته باشد ،این فرآیند ممکن است امتیاز مناسب را
فعال کرده و سعی در دسترسی داشته باشد .اشتراک گذاری یک نشانه در بین تمام فرآیندهای کاربر نامطلوب است ،زیرا در این
صورت فعال کردن یک امتیاز برای یک فرآیند ،آن را برای همه آنها فعال می کند.
با هر شیئی که دسترسی بین فرآیندی برای آن امکان پذیر است ،یک توصیفگر امنیتی مرتبط است .جزء اصلی توصیفگر امنیتی
یک لیست کنترل دسترسی است که حقوق دسترسی را برای کاربران مختلف و گروه های کاربری برای این شی مشخص می
کند .هنگامی که فرآیندی تالش می کند به این شی دسترسی پیدا کندSID ،های موجود در نشانه فرآیند با لیست کنترل
دسترسی شی مطابقت داده می شود تا مشخص شود که آیا دسترسی مجاز است یا رد می شود.
785
سیستم عامل های داخلی و اصول طراحی786.........................................................................................................................
هنگامی که یک برنامه یک مرجع به یک شی قابل ایمن باز می کند ،ویندوز تأیید می کند که توصیفگر امنیتی شی به فرآیند
دسترسی درخواستی را می دهد .اگر چک با موفقیت انجام شود ،ویندوز حقوق دسترسی اعطا شده را در حافظه پنهان ذخیره
می کند.
یکی از جنبه های مهم امنیت ویندوز مفهوم جعل هویت است که استفاده از امنیت را در محیط کالینت/سرور ساده می کند .اگر
سرویس گیرنده و سرور از طریق یک اتصال RPCصحبت کنند ،سرور می تواند به طور موقت هویت مشتری را در نظر بگیرد تا
بتواند درخواست دسترسی را نسبت به حقوق مشتری ارزیابی کند .پس از دسترسی ،سرور به هویت خود باز می گردد.
نشانه دسترسی
شکل a15.10ساختار کلی یک نشانه دسترسی را نشان می دهد که شامل پارامترهای زیر است:
-شناسه امنیتی :یک کاربر را به طور منحصربهفرد در تمام ماشینهای موجود در شبکه شناسایی میکند .این معموالً با نام ورود
کاربر مطابقت داردSID .های کاربر ویژه در ویندوز 7برای استفاده توسط فرآیندها و سرویس ها اضافه شدند .این SIDهای
مدیریت شده ویژه برای مدیریت ایمن طراحی شده اند .آنها از سیاست های رمز عبور معمولی حساب های انسانی استفاده نمی
کنند.
-گروه SID:لیستی از گروه هایی که این کاربر به آنها تعلق دارد .یک گروه به سادگی مجموعه ای از شناسه های کاربر است
که به عنوان یک گروه برای اهداف کنترل دسترسی شناسایی می شوند .هر گروه یک SIDگروه منحصر به فرد دارد .دسترسی
786
سیستم عامل های داخلی و اصول طراحی787.........................................................................................................................
به یک شی را می توان بر اساس SIDهای گروهی SID ،های فردی یا ترکیبی تعریف کرد .همچنین یک SIDوجود دارد که
سطح یکپارچگی فرآیند کم ،متوسط ،زیاد یا سیستم را منعکس می کند.
-امتیازات :فهرستی از سرویس های سیستم حساس به امنیت که این کاربر ممکن است آنها را به عنوان مثال CreateToken
بخواند .مثال دیگر SetBackupPrivilegeاست .کاربرانی که این امتیاز را دارند مجاز به استفاده از ابزار پشتیبان برای
پشتیبان گیری از فایل هایی هستند که معموالً قادر به خواندن آنها نیستند.
-پیش فرض مالک :اگر این فرآیند شی دیگری ایجاد کند ،این زمینه مالک شی جدید را مشخص می کند .به طور کلی ،صاحب
یک شی جدید همان صاحب فرآیند تخم ریزی است .با این حال ،یک کاربر ممکن است مشخص کند که مالک پیش فرض هر
فرآیند ایجاد شده توسط این فرآیند ،یک SIDگروهی است که این کاربر به آن تعلق دارد.
-پیشفرض ACL:این فهرست اولیه از حفاظتهایی است که بر روی اشیایی که کاربر ایجاد میکند اعمال میشود .کاربر
ممکن است متعاقباً ACLرا برای هر شیئی که متعلق به خود یا یکی از گروههایش است تغییر دهد.
توصیفگرهای امنیتی
شکل b15.10ساختار کلی یک توصیفگر امنیتی را نشان می دهد که شامل پارامترهای زیر است:
Flags: -نوع و محتویات یک توصیفگر امنیتی را تعریف کنید .آنها نشان میدهند که آیا SACLو DACLوجود دارند یا
خیر ،آیا آنها توسط مکانیزم پیشفرض روی شی قرار گرفتهاند یا نه ،و اینکه آیا اشارهگرها در توصیفگر از آدرسدهی مطلق یا
نسبی استفاده میکنند .توصیفگرهای نسبی برای اشیایی که از طریق شبکه منتقل می شوند ،مانند اطالعات ارسال شده در یک
،RPCمورد نیاز است.
Owner: -مالک شی به طور کلی می تواند هر عملی را بر روی توصیفگر امنیتی انجام دهد .مالک می تواند یک فرد یا یک
SIDگروهی باشد .مالک این اختیار را دارد که محتویات DACLرا تغییر دهد.
-لیست کنترل دسترسی سیستم SACL:مشخص می کند که چه نوع عملیات روی شی باید پیام های ممیزی ایجاد کند.
یک برنامه کاربردی باید امتیاز مربوطه را در توکن دسترسی خود برای خواندن یا نوشتن SACLهر شیء داشته باشد .این امر
برای جلوگیری از خواندن SACLها توسط برنامه های غیرمجاز انجام می شود در نتیجه یاد می گیرند چه کارهایی را برای
جلوگیری از ایجاد ممیزی انجام ندهید یا نوشتن آنها برای ایجاد حسابرسی های زیادی که باعث شود عملیات غیرقانونی مورد
توجه قرار نگیرد SACL .همچنین سطح یکپارچگی شی را مشخص می کند .فرآیندها نمی توانند یک شی را تغییر دهند مگر
اینکه سطح یکپارچگی فرآیند با سطح روی شی مطابقت داشته باشد یا از آن فراتر رود.
787
سیستم عامل های داخلی و اصول طراحی788.........................................................................................................................
-لیست کنترل دسترسی اختیاری DACL:تعیین می کند که کدام کاربران و گروه ها می توانند برای کدام عملیات به این
شی دسترسی داشته باشند .این شامل لیستی از ورودی های کنترل دسترسی ACEاست.
هنگامی که یک شی ایجاد می شود ،فرآیند ایجاد می تواند SIDخود یا هر SIDگروهی را در نشانه دسترسی خود به عنوان
مالک اختصاص دهد .فرآیند ایجاد نمیتواند مالکی را که در نشانه دسترسی فعلی نباشد اختصاص دهد .متعاقباً ،هر فرآیندی که
به آن حق تغییر مالک یک شی داده شده است ،ممکن است این کار را انجام دهد ،اما باز هم با همان محدودیت .دلیل این
محدودیت ،جلوگیری از پوشاندن مسیرهای کاربر پس از اقدام غیرمجاز است.
اجازه دهید ساختار لیست های کنترل دسترسی را با جزئیات بیشتری بررسی کنیم ،زیرا این لیست ها در قلب تسهیالت کنترل
دسترسی ویندوز قرار دارند شکل c. 15.10هر لیست از یک سربرگ کلی و تعداد متغیر ورودی های کنترل دسترسی تشکیل
شده است .هر ورودی یک SIDفردی یا گروهی و یک ماسک دسترسی را مشخص می کند که حقوقی را که باید به این SID
اعطا شود را مشخص می کند .هنگامی که یک فرآیند سعی می کند به یک شی دسترسی پیدا کند ،مدیر شی در Windows
Executive SIDو SIDها را از توکن دسترسی به همراه SIDسطح یکپارچگی می خواند .اگر دسترسی درخواستی شامل
اصالح شی باشد ،سطح یکپارچگی با سطح یکپارچگی شی در SACLبررسی می شود.
اگر آن تست موفق شود ،مدیر شیء سپس DACLشی را اسکن می کند .اگر یک تطابق پیدا شود -یعنی اگر یک ACEبا
یک SIDکه با یکی از SIDهای نشانه دسترسی مطابقت دارد پیدا شود -آنگاه فرآیند می تواند حقوق دسترسی مشخص شده
توسط ماسک دسترسی در آن ACEرا داشته باشد .این همچنین ممکن است شامل رد کردن دسترسی باشد ،در این صورت
درخواست دسترسی با شکست مواجه می شود .اولین ACEمنطبق ،نتیجه بررسی دسترسی را تعیین می کند.
شکل 15.11محتویات ماسک دسترسی را نشان می دهد 16 .بیت کم اهمیت ترین حقوق دسترسی را مشخص می کند که
برای نوع خاصی از شی اعمال می شود .به عنوان مثال ،بیت 0برای یک شی فایل ،دسترسی FILE_READ_DATAو
بیت 0برای یک شی رویداد ،دسترسی EVENT_ QUERY_STATEاست.
مهم ترین 16بیت ماسک حاوی بیت هایی است که برای همه انواع اشیا اعمال می شود .پنج مورد از این موارد به عنوان انواع
دسترسی استاندارد شناخته می شوند:
Synchronize: -اجازه همگام سازی اجرا با برخی رویدادهای مرتبط با این شی را می دهد .به طور خاص ،این شی را می
توان در یک تابع انتظار استفاده کرد.
Write_owner: -به برنامه اجازه می دهد تا مالک شی را تغییر دهد .این مفید است زیرا صاحب یک شی همیشه می تواند
محافظت از شی را تغییر دهد .ممکن است از دسترسی Write DACبه مالک منع نشود.
788
سیستم عامل های داخلی و اصول طراحی789.........................................................................................................................
حذف
کنترل را بخوانید
بنویسید مالک
انواع دسترسی عمومی
همگام سازی کنید
Write_DAC: -به برنامه اجازه می دهد تا DACLو در نتیجه حفاظت از این شی را تغییر دهد.
Read_control: -به برنامه اجازه می دهد تا از مالک و زمینه های DACLتوصیفگر امنیتی این شی پرس و جو کند.
نیمه درجه باالی ماسک دسترسی نیز شامل چهار نوع دسترسی عمومی است .این بیت ها راه مناسبی برای تنظیم انواع
دسترسی خاص در تعدادی از انواع شیء مختلف ارائه می کنند .به عنوان مثال ،فرض کنید یک برنامه کاربردی می خواهد
چندین نوع شی ایجاد کند و اطمینان حاصل کند که کاربران دسترسی خواندنی به اشیا دارند ،حتی اگر خواندن برای هر نوع
شی معنای متفاوتی دارد .برای محافظت از هر شی از هر نوع بدون بیت های دسترسی عمومی ،برنامه باید یک ACEمتفاوت
برای هر نوع شی بسازد و مراقب باشد که ACEصحیح را هنگام ایجاد هر شیء ارسال کند .ایجاد یک ACEمنفرد که مفهوم
عمومی «اجازه خواندن» را بیان میکند ،راحتتر است و به سادگی این ACEرا برای هر شیئی که ایجاد میشود اعمال میکند
و اتفاق درست را میدهد .این هدف بیت های دسترسی عمومی است که به شرح زیر است:
789
سیستم عامل های داخلی و اصول طراحی790.........................................................................................................................
بیتهای عمومی نیز بر انواع دسترسی استاندارد تأثیر میگذارند .به عنوان مثال ،برای یک شی فایل ،بیت Generic_Readبه
بیت های استاندارد Read_Control and Synchronizeو به بیت های شی خاص ،File_Read_Data
File_Read_Attributesو File_Read_EAنگاشت می شود .قرار دادن یک ACEروی یک شی فایل که مقداری از
SID Generic_ Readرا اعطا می کند ،به آن پنج حق دسترسی اعطا می کند که گویی به صورت جداگانه در ماسک
دسترسی مشخص شده اند.
دو بیت باقی مانده در ماسک دسترسی معانی خاصی دارند .بیت Access_ System_Securityاجازه می دهد تا کنترل
ممیزی و هشدار را برای این شی تغییر دهید .با این حال ،نه تنها باید این بیت در ACEبرای یک SIDتنظیم شود ،بلکه
نشانه دسترسی برای فرآیند با آن SIDباید امتیاز مربوطه را فعال کند.
در نهایت ،بیت Maximum_Allowedواقعاً یک بیت دسترسی نیست ،بلکه بیتی است که الگوریتم اسکن DACLرا برای
این SIDتغییر میدهد .به طور معمول ،ویندوز از طریق DACLاسکن می کند تا زمانی که به ACEبرسد که به طور خاص
دسترسی درخواست شده توسط فرآیند درخواست را اعطا می کند بیت تنظیم نشده یا رد می کند بیت تنظیم نشده یا تا زمانی
که به پایان DACLبرسد .در مورد دوم دسترسی ممنوع است .بیت Maximum_Allowedبه مالک شی اجازه می دهد
مجموعه ای از حقوق دسترسی را تعریف کند که حداکثر مجاز به یک کاربر معین است .با در نظر گرفتن این موضوع ،فرض
کنید که یک برنامه کاربردی تمام عملیاتی را که قرار است از آن خواسته شود روی یک شی در طول یک جلسه انجام دهد ،نمی
داند .سه گزینه برای درخواست دسترسی وجود دارد:
.1سعی کنید شی را برای همه دسترسی های ممکن باز کنید .نقطه ضعف این روش این است که دسترسی ممکن است رد شود
حتی اگر برنامه ممکن است تمام حقوق دسترسی واقعی مورد نیاز برای این جلسه را داشته باشد.
.2فقط زمانی که یک دسترسی خاص درخواست می شود ،شی را باز کنید و برای هر نوع درخواست مختلف ،یک دسته جدید
برای شی باز کنید .این روش به طور کلی ترجیح داده می شود ،زیرا به طور غیر ضروری دسترسی را رد نمی کند ،و همچنین
اجازه دسترسی بیش از حد الزم را نمی دهد .در بسیاری از موارد ،خود شیء نیازی به ارجاع مجدد برای بار دوم ندارد ،اما تابع
DuplicateHandleمیتواند برای ایجاد یک کپی از دسته با سطح دسترسی پایینتر استفاده شود.
790
سیستم عامل های داخلی و اصول طراحی791.........................................................................................................................
.3سعی کنید شی را برای دسترسی به اندازه ای که شی به این SIDاجازه می دهد باز کنید .مزیت این است که برنامه کالینت
به طور مصنوعی از دسترسی محروم نمی شود ،اما ممکن است برنامه دسترسی بیشتری نسبت به نیاز خود داشته باشد .این
وضعیت اخیر ممکن است اشکاالت برنامه را بپوشاند.
یکی از ویژگی های مهم امنیت ویندوز این است که برنامه ها می توانند از چارچوب امنیتی ویندوز برای اشیاء تعریف شده
توسط کاربر استفاده کنند .به عنوان مثال ،یک سرور پایگاه داده ممکن است توصیفگرهای امنیتی خود را ایجاد کرده و آنها را به
بخش هایی از پایگاه داده متصل کند .عالوه بر محدودیتهای دسترسی خواندن/نوشتن معمولی ،سرور میتواند عملیاتهای
خاص پایگاه داده ،مانند پیمایش در مجموعه نتایج یا انجام یک اتصال را ایمن کند .این مسئولیت سرور است که معنای حقوق
ویژه را تعریف کند و بررسی های دسترسی را انجام دهد .اما بررسیها در یک زمینه استاندارد ،با استفاده از حسابهای
کاربر/گروه در سطح سیستم و گزارشهای حسابرسی انجام میشوند .مدل امنیتی قابل توسعه نیز باید برای پیادهکنندگان
سیستمهای فایل غیر مایکروسافت مفید باشد.
15.8خالصه
دامنه امنیت سیستم عامل گسترده است .این فصل بر روی برخی از مهمترین موضوعات تمرکز دارد .مهمترین مسئله برای
امنیت سیستم عامل ،مقابله با موضوعات مزاحم و نرم افزارهای مخرب است.
مخالن تالش می کنند تا به منابع سیستم دسترسی غیرمجاز داشته باشند ،در حالی که نرم افزارهای مخرب برای نفوذ به
سیستم های دفاعی و قابل اجرا شدن در سیستم های هدف طراحی شده اند .اقدامات متقابل برای هر دو نوع تهدید شامل
سیستم های تشخیص نفوذ ،پروتکل های احراز هویت ،مکانیسم های کنترل دسترسی و فایروال ها می شود.
یکی از رایج ترین تکنیک ها برای به خطر انداختن امنیت سیستم عامل ،حمله سرریز بافر است .شرایطی در یک رابط که تحت
آن می توان ورودی بیشتری نسبت به ظرفیت تخصیص داده شده در بافر یا ناحیه نگهداری داده قرار داد و اطالعات دیگر را
بازنویسی کرد.
مهاجمان از چنین شرایطی برای از کار انداختن یک سیستم یا وارد کردن کدهای ساخته شده ویژه که به آنها اجازه می دهد
کنترل سیستم را به دست آورند ،سوء استفاده می کنند .طراحان سیستم از انواع دفاع های زمان اجرا و زمان اجرا برای مقابله با
این نوع حمله استفاده می کنند .یکی دیگر از حوزه های مهم دفاع امنیتی ،کنترل دسترسی است .اقدامات کنترل دسترسی
شامل مواردی است که دسترسی به سیستم فایل و رابط کاربری سیستم عامل را ایمن می کند .تکنیک های سنتی برای کنترل
دسترسی به عنوان کنترل دسترسی اختیاری نامیده می شود .یک رویکرد انعطاف پذیرتر که پشتیبانی قابل توجهی به دست
791
سیستم عامل های داخلی و اصول طراحی792.........................................................................................................................
آورده است ،کنترل دسترسی مبتنی بر نقش است که در آن دسترسی نه تنها به هویت کاربر بلکه به نقش خاصی که کاربر می
تواند برای یک کار خاص یا مجموعه ای از وظایف به عهده بگیرد.
شرایط کلیدی
بررسی سواالت
.15.1حقوق دسترسی معمولی که ممکن است برای یک فایل خاص به یک کاربر خاص اعطا یا رد شود چیست؟
.15.3به طور کلی ،چهار روش برای احراز هویت یک کاربر چیست؟
.15.5چه نوع زبان های برنامه نویسی در برابر سرریزهای بافر آسیب پذیر هستند؟
.15.7برخی از موارد دفاعی در برابر سرریزهای بافر را فهرست کرده و به اختصار شرح دهید که می توان از آنها هنگام اجرا
برنامه های جدید استفاده کرد.
.15.8برخی از دفاع ها در برابر سرریزهای بافر را که می توان هنگام اجرای برنامه های موجود و آسیب پذیر اجرا کرد ،فهرست
کرده و به اختصار شرح دهید.
چالش ها و مسائل
.15.1برخی از تهدیدات ناشی از فرآیندی که با مجوزهای مدیر یا ریشه در یک سیستم اجرا می شود را بیان کنید.
.15.2در زمینه ،IDSما یک مثبت کاذب را به عنوان زنگ هشدار ایجاد شده توسط IDSتعریف می کنیم که در آن IDS
وضعیتی را که واقعاً خوش خیم است هشدار می دهد .منفی کاذب زمانی اتفاق میافتد که IDSنمیتواند زنگ هشدار ایجاد
کند ،زمانی که یک شرایط قابل هشدار وجود دارد .با استفاده از نمودار زیر ،دو منحنی را به تصویر بکشید که به ترتیب نشان
دهنده مثبت کاذب و منفی کاذب است.
.15.3تابع نشان داده شده در شکل a15.2را دوباره بنویسید تا دیگر در برابر سرریز بافر پشته آسیب پذیر نباشد.
.15.4برای مدل DACکه در بخش 15.3مورد بحث قرار گرفت ،یک نمایش جایگزین از حالت حفاظت یک گراف جهت دار
است .هر موضوع و هر شی در حالت حفاظت با یک گره نشان داده می شود یک گره برای موجودیتی که هم موضوع و هم شی
است استفاده می شود .یک خط هدایت شده از یک موضوع به یک شی ،حق دسترسی را نشان می دهد ،و برچسب روی پیوند،
حق دسترسی را مشخص می کند.
آ .یک نمودار جهت دار ترسیم کنید که مطابق با ماتریس دسترسی شکل a15.3باشد.
ب یک نمودار جهت دار ترسیم کنید که مطابق با ماتریس دسترسی شکل 15.5باشد.
793
سیستم عامل های داخلی و اصول طراحی794.........................................................................................................................
ج آیا بین نمایش گراف جهت دار و نمایش ماتریس دسترسی مطابقت یک به یک وجود دارد؟ توضیح.
.15.5برنامهها و اسکریپتهای Set User SetUIDو Set Group SetGIDمکانیزم قدرتمندی هستند که توسط یونیکس
برای پشتیبانی از " فراخوانی کنترل شده" برای مدیریت دسترسی به منابع حساس ارائه شده است .با این حال ،دقیقاً به این
دلیل است که یک حفره امنیتی بالقوه است و اشکاالت در چنین برنامه هایی منجر به سازش های بسیاری در سیستم های
یونیکس شده است .دستوری را که میتوانید برای مکان یابی همه اسکریپتها و برنامههای کاربر یا گروه در یک سیستم
یونیکس استفاده کنید و اینکه چگونه میتوانید از این اطالعات استفاده کنید ،توضیح دهید.
.15.6کاربر «احمد» دارای فهرستی به نام « »stuffاست که حاوی یک فایل متنی به نام « »ourstuff.txtاست که با کاربران
متعلق به گروه «کارکنان» به اشتراک می گذارد .این کاربران ممکن است این فایل را بخوانند و تغییر دهند ،اما آن را حذف
نکنند.
آنها ممکن است فایل های دیگری را به فهرست اضافه نکنند .دیگران ممکن است نه بخوانند ،نه بنویسند یا چیزی را در "موارد"
اجرا کنند .مالکیت و مجوزهای مناسب برای هر دو فهرست " "stuffو فایل " "ourstuff.txtچگونه به نظر می رسد؟ پاسخ
های خود را در قالب خروجی «فهرست طوالنی» بنویسید.
.15.10سیستمی با Nموقعیت شغلی را فرض کنید .برای موقعیت شغلی ،iتعداد کاربران فردی در آن موقعیت Uiو تعداد
مجوزهای مورد نیاز برای موقعیت شغلی Piاست.
آ .برای یک طرح DACسنتی ،چند رابطه بین کاربران و مجوزها باید تعریف شود؟
ب برای یک طرح ،RBACچند رابطه بین کاربران و مجوزها باید تعریف شود؟
.15.11چرا ورود به سیستم مهم است؟ محدودیت های آن به عنوان یک کنترل امنیتی چیست؟ مزایا و معایب ثبت از راه دور
چیست؟
.15.12یک ابزار تجزیه و تحلیل گزارش حسابرسی خودکار به عنوان مثال ،نمونه را در نظر بگیرید .آیا میتوانید قوانینی را
پیشنهاد کنید که میتواند برای تشخیص «فعالیتهای مشکوک» از رفتار عادی کاربر در یک سیستم برای برخی سازمانها
استفاده شود؟
.15.13مزایا و معایب استفاده از ابزار بررسی یکپارچگی فایل به عنوان مثالtripwire ،چیست .این برنامه ای است که هر گونه
تغییر در فایل ها را به طور منظم به مدیر اطالع می دهد؟ مسائلی مانند فایل هایی که واقعاً می خواهید به ندرت تغییر دهید،
کدام فایل ها ممکن است بیشتر تغییر کنند و کدام یک اغلب تغییر می کنند را در نظر بگیرید .در مورد اینکه چگونه این روی
794
سیستم عامل های داخلی و اصول طراحی795.........................................................................................................................
پیکربندی ابزار تأثیر میگذارد ،بهویژه در مورد اینکه کدام قسمتهای سیستم فایل اسکن میشوند ،و نظارت بر پاسخهای آن
چقدر کار به مدیر تحمیل میکند ،بحث کنید.
.15.14برخی استدالل کردهاند که سیستمهای یونیکس/لینوکس از تعداد کمی از ویژگیهای امنیتی در بسیاری از زمینهها در
سراسر سیستم استفاده مجدد میکنند .در حالی که سیستمهای ویندوز تعداد بسیار بیشتری از ویژگیهای امنیتی هدفمندتری
را ارائه میکنند که در زمینههای مناسب مورد استفاده قرار میگیرند .این ممکن است به عنوان مبادله ای بین آیات سادگی و
عدم انعطاف پذیری در رویکرد یونیکس/لینوکس در مقابل رویکرد هدفمندتر اما پیچیده تر و سخت تر برای پیکربندی صحیح در
ویندوز دیده شود .در مورد این مبادله بحث کنید زیرا بر امنیت این سیستمهای مربوطه و باری که مدیران در مدیریت امنیت
آنها وارد میکنند ،تأثیر میگذارد.
795
سیستم عامل های داخلی و اصول طراحی796.........................................................................................................................
فصل 16
16.1محاسبات مشتری/سرور
محاسبات مشتری/سرور چیست؟ میان افزار برنامه های کاربردی سرویس گیرنده/سرور
16.4خوشه ها
تنظیمات کالستر مسائل طراحی سیستم عامل خوشه های معماری کامپیوتر خوشه در مقایسه با SMP
16.7خالصه
796
سیستم عامل های داخلی و اصول طراحی797.........................................................................................................................
اهداف یادگیری
-مسائل طراحی اصلی برای ارسال پیام توزیع شده را درک کنید.
-مسائل طراحی اصلی برای فراخوانی روش از راه دور را درک کنید.
در این فصل ،ما با بررسی برخی از مفاهیم کلیدی در نرم افزارهای توزیع شده ،از جمله معماری سرویس گیرنده/سرور ،ارسال
پیام و فراخوانی رویه از راه دور ،شروع می کنیم .سپس معماری خوشهای که اهمیت فزایندهای دارد را بررسی میکنیم.
فصل 17و 18بحث ما را در مورد سیستم های توزیع شده کامل می کند.
16.1محاسبات مشتری/سرور
مفهوم محاسبات مشتری/سرور و مفاهیم مرتبط ،در سیستم های فناوری اطالعات اهمیت فزاینده ای پیدا کرده است .این بخش
با توضیح ماهیت کلی محاسبات مشتری/سرور آغاز می شود .این با بحث در مورد روش های جایگزین سازماندهی عملکرد
مشتری/سرور دنبال می شود .سپس موضوع سازگاری حافظه پنهان فایل ،که با استفاده از سرورهای فایل مطرح می شود ،مورد
بررسی قرار می گیرد .در نهایت ،این بخش به معرفی مفهوم میان افزار می پردازد.
مانند سایر امواج جدید در زمینه کامپیوتر ،محاسبات مشتری/سرور با مجموعه ای از کلمات اصطالحات خاص خود همراه است.
جدول 16.1برخی از اصطالحاتی را که معموالً در توضیحات محصوالت و برنامه های کاربردی سرویس گیرنده/سرور یافت می
شوند فهرست می کند.
شکل 16.1تالش می کند تا ماهیت مفهوم مشتری/سرور را به تصویر بکشد .همانطور که از اصطالح نشان می دهد ،یک محیط
کالینت/سرور توسط کالینت ها و سرورها پر شده است .ماشینهای سرویس گیرنده معموالً رایانههای شخصی یا ایستگاههای
کاری تک کاربره هستند که یک رابط کاربری بسیار کاربرپسند را برای کاربر نهایی فراهم میکنند .ایستگاه مبتنی بر مشتری به
طور کلی نوع رابط گرافیکی را ارائه می دهد که برای کاربران راحت تر است ،از جمله استفاده از ویندوز و ماوسMicrosoft .
797
سیستم عامل های داخلی و اصول طراحی798.........................................................................................................................
Windowsو Macintosh OSنمونه هایی از این رابط ها را ارائه می دهند .برنامه های کاربردی مبتنی بر مشتری برای
سهولت استفاده طراحی شده اند و شامل ابزارهای آشنا مانند صفحه گسترده هستند.
هر سرور در محیط کالینت/سرور مجموعه ای از خدمات مشترک را به مشتریان ارائه می دهد .رایج ترین نوع سرور در حال
حاضر سرور پایگاه داده است که معموالً یک پایگاه داده رابطه ای را کنترل می کند .سرور بسیاری از مشتریان را قادر می سازد
تا دسترسی به یک پایگاه داده را به اشتراک بگذارند و استفاده از یک سیستم کامپیوتری با کارایی باال را برای مدیریت پایگاه
داده امکان پذیر می سازد.
عالوه بر کالینت ها و سرورها ،سومین عنصر ضروری محیط کالینت/سرور ،شبکه است .محاسبات مشتری/سرور معموالً
محاسبات توزیع شده است .کاربران ،برنامهها و منابع در پاسخ به نیازهای تجاری توزیع شده و توسط یک شبکه LANیا
WANیا توسط اینترنت شبکهها به هم متصل میشوند.
798
سیستم عامل های داخلی و اصول طراحی799.........................................................................................................................
چگونه پیکربندی مشتری/سرور با هر راه حل پردازش توزیع شده دیگری متفاوت است؟ تعدادی ویژگی وجود دارد که برجسته
میشوند و با هم ،مشتری/سرور را از دیگر انواع پردازش توزیع شده متمایز میکنند:
rوابستگی زیادی به ارائه برنامه های کاربردی کاربر پسند برای کاربر در سیستم او وجود دارد .این به کاربر کنترل زیادی بر
زمان و سبک استفاده از رایانه می دهد و به مدیران سطح بخش این توانایی را می دهد که به نیازهای محلی خود پاسخ دهند.
گرچه برنامه های کاربردی پراکنده هستند ،تاکید بر متمرکز کردن پایگاه های داده شرکتی و بسیاری از مدیریت شبکه و توابع
سودمند وجود دارد .این امر مدیریت شرکت را قادر میسازد تا کنترل کلی سرمایهگذاری کل در سیستمهای محاسباتی و
اطالعاتی را حفظ کند و قابلیت همکاری را فراهم کند تا سیستمها به هم متصل شوند .در عین حال ،بخشها و بخشها را از
بسیاری از هزینههای سربار نگهداری تسهیالت پیچیده مبتنی بر رایانه خالص میکند ،اما آنها را قادر میسازد تقریباً هر نوع
ماشین و رابطی را که برای دسترسی به دادهها و اطالعات نیاز دارند ،انتخاب کنند.
rتعهدی هم از سوی سازمان های کاربر و هم فروشندگان به سیستم های باز و مدوالر وجود دارد .این بدان معناست که کاربر
در انتخاب محصوالت و اختالط تجهیزات از تعدادی فروشنده حق انتخاب بیشتری دارد.
rشبکه برای عملیات اساسی است .بنابراین مدیریت شبکه و امنیت شبکه در سازماندهی و راه اندازی سیستم های اطالعاتی از
اولویت باالیی برخوردار است.
ویژگی کلیدی معماری کالینت/سرور ،تخصیص وظایف در سطح برنامه بین کالینت ها و سرورها است .شکل 16.2حالت کلی را
نشان می دهد .البته هم در کالینت و هم در سرور ،نرم افزار اصلی یک سیستم عامل است که بر روی پلت فرم سخت افزاری
اجرا می شود .پلتفرم ها و سیستم عامل های مشتری و سرور ممکن است متفاوت باشند.
799
سیستم عامل های داخلی و اصول طراحی800.........................................................................................................................
در واقع ،ممکن است انواع مختلفی از پلتفرمها و سیستمعاملهای کالینت و تعدادی از انواع مختلف پلتفرم سرور در یک محیط
واحد وجود داشته باشد .تا زمانی که یک کالینت و سرور خاص پروتکل های ارتباطی یکسانی را به اشتراک می گذارند و از
برنامه های مشابه پشتیبانی می کنند ،این تفاوت های سطح پایین بی ربط هستند.
ایستگاه کاری مشتری
این نرم افزار ارتباطی است که مشتری و سرور را قادر می سازد تا با یکدیگر همکاری کنند .مثال اصلی چنین نرم افزاری
TCP/IPاست .البته هدف همه این نرم افزارهای پشتیبانی ارتباطات و سیستم عامل فراهم کردن بستری برای اپلیکیشن های
توزیع شده است .در حالت ایده آل ،عملکردهای واقعی انجام شده توسط برنامه را می توان بین کالینت و سرور به گونه ای
تقسیم کرد که استفاده از منابع را بهینه کند .در برخی موارد ،بسته به نیاز برنامه ،بخش عمده ای از نرم افزارهای کاربردی در
سرور اجرا می شوند ،در حالی که در موارد دیگر ،بیشتر منطق برنامه در مشتری قرار دارد.
یک عامل اساسی در موفقیت یک محیط کالینت/سرور ،نحوه تعامل کاربر با سیستم به عنوان یک کل است .بنابراین ،طراحی
رابط کاربری در دستگاه مشتری بسیار مهم است .در اکثر سیستم های سرویس گیرنده/سرور ،تاکید زیادی بر ارائه یک رابط
کاربری گرافیکی GUIاست که استفاده از آن آسان ،یادگیری آسان ،در عین حال قدرتمند و انعطاف پذیر باشد .بنابراین ،ما
میتوانیم به یک ماژول خدمات ارائه در ایستگاه کاری مشتری فکر کنیم که مسئول ارائه یک رابط کاربر پسند برای برنامههای
کاربردی توزیع شده موجود در محیط است.
برنامه های کاربردی پایگاه داده به عنوان مثالی که مفهوم تقسیم منطق برنامه بین کالینت و سرور را نشان می دهد ،اجازه دهید
یکی از رایج ترین خانواده های برنامه های کاربردی کالینت/سرور را در نظر بگیریم :آنهایی که از پایگاه های داده رابطه ای
800
سیستم عامل های داخلی و اصول طراحی801.........................................................................................................................
استفاده می کنند .در این محیط ،سرور در اصل یک سرور پایگاه داده است .تعامل بین کالینت و سرور به صورت تراکنش هایی
است که در آن کالینت درخواست پایگاه داده را می دهد و پاسخ پایگاه داده را دریافت می کند.
شکل 16.3به طور کلی معماری چنین سیستمی را نشان می دهد .سرور وظیفه نگهداری پایگاه داده را بر عهده دارد که برای
این منظور به یک ماژول نرم افزاری سیستم مدیریت پایگاه داده پیچیده نیاز است .انواع برنامه های کاربردی مختلف که از پایگاه
داده استفاده می کنند را می توان در ماشین های مشتری قرار داد« .چسب» که کالینت و سرور را به هم متصل میکند،
نرمافزاری است که مشتری را قادر میسازد برای دسترسی به پایگاه داده سرور درخواست کند .یک مثال محبوب از چنین
منطقی ،زبان پرس و جو ساخت یافته SQLاست.
ایستگاه کاری مشتری
خدمات ارائه
سرور
منطق کاربردی
درخواست
منطق پایگاه داده منطق پایگاه داده
واکنش
نرم افزارهای ارتباطی نرم افزارهای ارتباطی سامانه ی مدیریت پایگاه
داده
تعامل پروتکل
سیستم عامل سرور
سیستم عامل مشتری
شکل 16.3معماری سرویس گیرنده/سرور برای برنامه های کاربردی پایگاه داده
شکل 16.3نشان می دهد که تمام منطق برنامه -نرم افزار برای "تخریب اعداد" یا انواع دیگر تجزیه و تحلیل داده ها -در
سمت مشتری است ،در حالی که سرور فقط به مدیریت پایگاه داده می پردازد .مناسب بودن چنین پیکربندی به سبک و هدف
برنامه بستگی دارد .به عنوان مثال ،فرض کنید که هدف اصلی فراهم کردن دسترسی آنالین برای جستجوی رکورد است .شکل
a16.4نشان می دهد که چگونه این ممکن است کار کند .فرض کنید که سرور یک پایگاه داده از 1میلیون رکورد که در
اصطالح پایگاه داده رابطهای ردیف نامیده میشود را نگهداری میکند و کاربر میخواهد جستجویی را انجام دهد که منجر به
صفر ،یک یا حداکثر چند رکورد شود .کاربر می تواند این رکوردها را با استفاده از تعدادی معیار جستجو جستجو کند به عنوان
مثال ،سوابق قدیمی تر از ،1992سوابق مربوط به افراد در اوهایو ،سوابق مربوط به یک رویداد یا ویژگی خاص ،و غیره .یک پرس
و جو اولیه مشتری ممکن است یک پاسخ سرور به دست دهد که 100000رکورد وجود دارد که معیارهای جستجو را برآورده
801
سیستم عامل های داخلی و اصول طراحی802.........................................................................................................................
می کند .سپس کاربر واجد شرایط اضافی اضافه می کند و یک درخواست جدید صادر می کند .این بار ،پاسخی مبنی بر وجود
1000رکورد احتمالی برگردانده می شود .در نهایت ،مشتری درخواست سوم را با واجد شرایط اضافی صادر می کند .معیارهای
جستجوی حاصل یک تطابق را به دست میآورند و رکورد به مشتری بازگردانده میشود.
.1کار گسترده ای برای مرتب سازی و جستجو در پایگاه داده وجود دارد .این به یک دیسک یا بانک بزرگ از دیسک ها ،یک
CPUبا سرعت باال و یک معماری ورودی/خروجی با سرعت باال نیاز دارد .چنین ظرفیت و توانی مورد نیاز نیست و برای یک
ایستگاه کاری تک کاربره یا رایانه شخصی بسیار گران است.
.2برای انتقال کل فایل رکورد 1میلیونی به مشتری برای جستجو ،بار ترافیکی زیادی روی شبکه ایجاد می کند .بنابراین ،برای
سرور کافی نیست که فقط بتواند رکوردها را از طرف یک کالینت بازیابی کند .سرور باید منطق پایگاه داده ای داشته باشد که
آن را قادر می سازد از طرف یک کالینت جستجوها را انجام دهد.
حال سناریوی شکل b16.4را در نظر بگیرید که دارای همان پایگاه داده 1میلیون رکوردی است .در این مورد ،یک پرس و جو
منجر به انتقال 300000رکورد از طریق شبکه می شود .برای مثال ،اگر کاربر بخواهد مقدار کل یا میانگین یک زمینه را در
بسیاری از رکوردها یا حتی کل پایگاه داده پیدا کند ،ممکن است این اتفاق بیفتد.
واضح است که این سناریوی اخیر غیرقابل قبول است .یک راه حل برای این مشکل ،که معماری سرویس گیرنده/سرور را با تمام
مزایای آن حفظ می کند ،انتقال بخشی از منطق برنامه به سرور است .یعنی سرور می تواند به منطق کاربردی برای انجام تجزیه
و تحلیل داده ها و همچنین بازیابی داده ها و جستجوی داده ها مجهز شود.
802
سیستم عامل های داخلی و اصول طراحی803.........................................................................................................................
کالس های برنامه های کاربردی مشتری/سرور در چارچوب کلی کالینت/سرور ،طیفی از پیاده سازی ها وجود دارد که کار را بین
کالینت و سرور به طور متفاوتی تقسیم می کند .شکل 16.5به طور کلی برخی از گزینه های اصلی برای برنامه های کاربردی
پایگاه داده را نشان می دهد .تقسیمبندیهای دیگر ممکن است ،و گزینهها ممکن است ویژگیهای متفاوتی برای انواع دیگر
برنامهها داشته باشند .در هر صورت ،بررسی این رقم برای درک نوع مبادالت ممکن مفید است.
-پردازش مبتنی بر میزبان :پردازش مبتنی بر میزبان ،محاسبات مشتری/سرور واقعی نیست ،زیرا این اصطالح معموالً استفاده
می شود .در عوض ،پردازش مبتنی بر میزبان به محیط مرکزی مرکزی سنتی که در آن تمام یا تقریباً تمام پردازش ها بر روی
یک میزبان مرکزی انجام می شود ،اشاره دارد .اغلب رابط کاربری از طریق یک ترمینال گنگ است .حتی اگر کاربر از یک
میکروکامپیوتر استفاده کند ،ایستگاه کاربر به طور کلی به نقش شبیه ساز ترمینال محدود می شود.
-پردازش مبتنی بر سرور :ابتدایی ترین کالس پیکربندی کالینت/سرور ،کالسی است که در آن کالینت مسئول اصلی ارائه یک
رابط کاربری گرافیکی است ،در حالی که تقریباً تمام پردازش ها روی سرور انجام می شود .این پیکربندی نمونه ای از تالش های
اولیه مشتری/سرور ،به ویژه سیستم های سطح دپارتمان است .منطق پشت چنین پیکربندیهایی این است که ایستگاه کاری
کاربر برای ارائه یک رابط کاربر پسند مناسب است و پایگاههای داده و برنامههای کاربردی را میتوان به راحتی در سیستمهای
مرکزی نگهداری کرد .اگرچه کاربر مزیت یک رابط بهتر را به دست می آورد ،این نوع پیکربندی به طور کلی به هیچ دستاورد
قابل توجهی در بهره وری یا تغییرات اساسی در عملکردهای تجاری واقعی که سیستم پشتیبانی می کند ،نمی دهد.
803
سیستم عامل های داخلی و اصول طراحی804.........................................................................................................................
مشتری سرور
-پردازش مبتنی بر مشتری :از طرف دیگر ،تقریباً تمام پردازش های برنامه ممکن است در مشتری انجام شود ،به استثنای روال
های اعتبارسنجی داده ها و سایر توابع منطق پایگاه داده که به بهترین وجه در سرور انجام می شوند .به طور کلی ،برخی از توابع
منطقی پایگاه داده پیچیده تر در سمت مشتری قرار می گیرند .این معماری شاید رایج ترین رویکرد مشتری/سرور در استفاده
فعلی باشد .این کاربر را قادر می سازد تا از برنامه های کاربردی متناسب با نیازهای محلی استفاده کند.
پردازش مشارکتی :در پیکربندی پردازش مشارکتی ،پردازش برنامه به شیوه ای بهینه انجام می شود و از نقاط قوت ماشین های
مشتری و سرور و توزیع داده ها بهره می برد .چنین پیکربندی برای راهاندازی و نگهداری پیچیدهتر است ،اما در درازمدت ،این
نوع پیکربندی ممکن است نسبت به سایر روشهای سرویس گیرنده/سرور ،سودهای بهرهوری کاربر و کارایی شبکه بیشتری را
ارائه دهد.
شکل های c16.5و d16.5مربوط به پیکربندی هایی است که در آن بخش قابل توجهی از بار روی مشتری است .این مدل به
اصطالح کالینت چربی توسط ابزارهای توسعه اپلیکیشن مانند PowerBuilder's Sybase Inc.و SQL Windowsاز
Gupta Corp.رایج شده است .برنامههای توسعهیافته با این ابزارها معموالً حوزهای هستند .مزیت اصلی مدل fat Clientاین
است که از قدرت دسکتاپ استفاده می کند ،پردازش برنامه ها را از سرورها تخلیه می کند و آنها را کارآمدتر می کند و احتمال
ایجاد گلوگاه را کاهش می دهد.
804
سیستم عامل های داخلی و اصول طراحی805.........................................................................................................................
با این حال ،چندین معایب برای استراتژی مشتری چاق وجود دارد .افزودن عملکردهای بیشتر به سرعت ظرفیت ماشینهای
رومیزی را اضافه بار میکند و شرکتها را مجبور به ارتقاء میکند .اگر مدل فراتر از بخش باشد و کاربران زیادی را در خود جای
دهد ،شرکت باید شبکه های محلی با ظرفیت باال را برای پشتیبانی از حجم زیاد انتقال بین سرورهای نازک و کالینت های چرب
نصب کند .در نهایت ،نگهداری ،ارتقا یا جایگزینی برنامه های کاربردی توزیع شده در ده ها یا صدها دسکتاپ دشوار است.
شکل b16.5نشان دهنده رویکرد تین کالینت است .این رویکرد تقریباً رویکرد سنتی میزبان محور را تقلید می کند و اغلب
مسیر مهاجرت برای توسعه برنامه های کاربردی در سطح شرکت از پردازنده مرکزی به یک محیط توزیع شده است.
معماری مشتری/سرور سه الیه معماری سنتی سرویس گیرنده/سرور شامل دو سطح یا الیه است :یک ردیف مشتری و یک ردیف
سرور .یک معماری سه الیه نیز رایج است شکل .16.6در این معماری ،نرم افزار کاربردی بین سه نوع ماشین توزیع می شود:
یک ماشین کاربر ،یک سرور میانی و یک سرور پشتیبان .ماشین کاربر ماشین مشتری است که ما در مورد آن بحث کرده ایم و
در مدل سه الیه ،معموال یک تین کالینت است .ماشینهای سطح متوسط اساساً دروازهای بین مشتریان نازک کاربر و انواع
سرورهای پایگاه داده باطن هستند.
ماشین های سطح متوسط می توانند پروتکل ها و نقشه ها را از یک نوع کوئری پایگاه داده به نوع دیگر تبدیل کنند .عالوه بر
این ،ماشین های سطح متوسط می توانند نتایج منابع داده های مختلف را ادغام/ادغام کنند .در نهایت ،ماشین سطح متوسط می
تواند به عنوان دروازه ای بین برنامه های دسکتاپ و برنامه های کاربردی قدیمی با واسطه بین دو جهان عمل کند.
تعامل بین سرور سطح متوسط و سرور باطن نیز از مدل مشتری/سرور پیروی می کند .بنابراین ،سیستم الیه میانی هم به عنوان
مشتری و هم به عنوان سرور عمل می کند.
805
سیستم عامل های داخلی و اصول طراحی806.........................................................................................................................
مشتری
سرورهای پشتیبان
(سرورهای داده)
سازگاری حافظه پنهان فایل هنگامی که از یک سرور فایل استفاده می شود ،عملکرد ورودی/خروجی فایل می تواند به طور قابل
توجهی نسبت به دسترسی به فایل محلی به دلیل تاخیرهای تحمیل شده توسط شبکه کاهش یابد .برای کاهش این جریمه
عملکرد ،سیستمهای جداگانه میتوانند از حافظه پنهان فایل برای نگهداری پروندههایی که اخیراً به آنها دسترسی پیدا کردهاند،
استفاده کنند .به دلیل اصل محلی بودن ،استفاده از حافظه پنهان فایل محلی باید تعداد دسترسی های سرور راه دور را که باید
انجام شود کاهش دهد.
شکل 16.7یک مکانیسم توزیع شده معمولی برای ذخیره سازی فایل ها در میان مجموعه شبکه ای از ایستگاه های کاری را
نشان می دهد .هنگامی که یک فرآیند به یک فایل دسترسی پیدا می کند ،درخواست ابتدا به حافظه پنهان ایستگاه کاری
فرآیند "ترافیک فایل" ارائه می شود .اگر در آنجا ارضا نشد ،درخواست به دیسک محلی ارسال میشود ،اگر فایل در آنجا ذخیره
شده باشد "ترافیک دیسک" ،یا به یک سرور فایل ،جایی که فایل در آن ذخیره میشود "ترافیک سرور" .در سرور ابتدا کش
سرور مورد بازجویی قرار می گیرد و در صورت عدم وجود خطا ،سپس به دیسک سرور دسترسی پیدا می کند .رویکرد کش
دوگانه برای کاهش ترافیک ارتباطات کش گیرنده و ورودی/خروجی دیسک کش سرور استفاده می شود.
زمانی که کش ها همیشه حاوی کپی های دقیقی از داده های راه دور هستند ،می گوییم که کش ها سازگار هستند .زمانی که
دادههای راه دور تغییر میکنند و کپیهای کش محلی منسوخ مربوطه دور ریخته نمیشوند ،ممکن است حافظههای پنهان
ناسازگار شوند .این می تواند اتفاق بیفتد اگر یک مشتری فایلی را که توسط سایر کالینت ها نیز ذخیره شده است را تغییر دهد.
806
سیستم عامل های داخلی و اصول طراحی807.........................................................................................................................
سختی در واقع در دو سطح است .اگر یک کالینت سیاستی را اتخاذ کند که فوراً هر گونه تغییر در فایل را به سرور بازنویسی
کند ،هر کالینت دیگری که یک کپی کش از بخش مربوطه از فایل داشته باشد ،داده های منسوخ خواهد داشت .اگر کالینت
بازنویسی تغییرات روی سرور را به تأخیر بیندازد ،مشکل حتی بدتر میشود.
در آن صورت ،خود سرور نسخه منسوخ فایل را دارد و درخواستهای خواندن فایل جدید به سرور ممکن است دادههای منسوخ
را به دست آورند .مشکل به روز نگه داشتن نسخه های کش محلی برای تغییرات در داده های راه دور به عنوان مشکل سازگاری
حافظه پنهان شناخته می شود.
سادهترین روش برای سازگاری حافظه پنهان استفاده از تکنیکهای قفل کردن فایل برای جلوگیری از دسترسی همزمان بیش از
یک مشتری به یک فایل است .این امر ثبات را به قیمت عملکرد و انعطاف پذیری تضمین می کند .یک رویکرد قدرتمندتر با
تسهیالت در Sprite NELS88, OUST88ارائه شده است .هر تعداد از فرآیندهای راه دور ممکن است یک فایل را برای
خواندن باز کند و کش مشتری خود را ایجاد کند .اما وقتی یک درخواست فایل باز به سرور درخواست دسترسی نوشتن می کند
و سایر فرآیندها فایل را برای دسترسی خواندن باز می کنند ،سرور دو عمل انجام می دهد .ابتدا به فرآیند نوشتن اطالع می دهد
که اگرچه ممکن است حافظه پنهان را حفظ کند ،اما باید تمام بلوک های تغییر یافته را بالفاصله پس از به روز رسانی بازنویسی
کند .حداکثر می تواند یک مشتری از این دست وجود داشته باشد .دوم ،سرور به تمام فرآیندهای خواندنی که فایل باز است
اطالع می دهد که فایل دیگر قابل ذخیره نیست.
میان افزار
توسعه و استقرار محصوالت کالینت/سرور از تالشها برای استانداردسازی تمام جنبههای محاسبات توزیعشده ،از الیه فیزیکی
گرفته تا الیه کاربردی ،پیشی گرفته است .این فقدان استانداردها ،اجرای یک پیکربندی مشتری/سرور یکپارچه ،چند فروشنده،
807
سیستم عامل های داخلی و اصول طراحی808.........................................................................................................................
در سطح سازمانی را دشوار می کند .از آنجا که بسیاری از مزایای رویکرد مشتری/سرور با ماژوالر بودن و توانایی ترکیب و تطبیق
پلتفرمها و برنامهها برای ارائه راهحل تجاری مرتبط است ،این مشکل قابلیت همکاری باید حل شود.
برای دستیابی به مزایای واقعی رویکرد مشتری/سرور ،توسعهدهندگان باید مجموعهای از ابزارها را داشته باشند که ابزار و سبک
یکنواختی را برای دسترسی به منابع سیستم در همه پلتفرمها فراهم کند .این برنامهنویسان را قادر میسازد تا برنامههایی بسازند
که نه تنها در رایانههای شخصی و ایستگاههای کاری مختلف ظاهر و احساس یکسانی داشته باشند ،بلکه از روش یکسانی برای
دسترسی به دادهها بدون توجه به مکان آن دادهها استفاده میکنند.
متداولترین راه برای برآورده کردن این نیاز ،استفاده از رابطها و پروتکلهای برنامهنویسی استاندارد است که بین برنامه باال و
نرمافزار ارتباطی و سیستم عامل زیر قرار میگیرند .از این گونه رابط ها و پروتکل های استاندارد شده به عنوان میان افزار یاد می
شود .با رابط های برنامه نویسی استاندارد ،پیاده سازی یک برنامه مشابه بر روی انواع مختلف سرور و انواع ایستگاه های کاری
آسان است .این بدیهی است که به نفع مشتری است ،اما فروشندگان نیز برای ارائه چنین رابط هایی انگیزه دارند.
دلیل آن این است که مشتریان برنامه ها را خریداری می کنند ،نه سرورها .مشتریان فقط از بین محصوالت سروری که برنامه
های مورد نظر خود را اجرا می کنند انتخاب می کنند .پروتکل های استاندارد شده برای پیوند دادن این رابط های سرور مختلف
به مشتریانی که نیاز به دسترسی به آنها دارند ،مورد نیاز است.
بسته های میان افزاری متنوعی از بسیار ساده تا بسیار پیچیده را شامل می شود .وجه مشترک همه آنها ،توانایی پنهان کردن
پیچیدگی ها و نابرابری های پروتکل های شبکه و سیستم عامل های مختلف است .فروشندگان سرویس گیرنده و سرور به طور
کلی تعدادی از بسته های میان افزار محبوب تر را به عنوان گزینه ارائه می کنند .بنابراین ،کاربر میتواند روی یک استراتژی
میانافزار خاص تصمیم بگیرد و سپس تجهیزاتی را از فروشندگان مختلفی که از آن استراتژی پشتیبانی میکنند ،جمعآوری
کند.
معماری Middlewareشکل 16.8نقش میان افزار را در معماری کالینت/سرور نشان می دهد .نقش دقیق مؤلفه میانافزار به
سبک محاسبات مشتری/سرور مورد استفاده بستگی دارد .با مراجعه به شکل ،16.5به یاد بیاورید که بسته به روشی که توابع
برنامه در آن تقسیم می شوند ،چندین رویکرد مشتری/سرور مختلف وجود دارد .در هر صورت ،شکل 16.8یک ایده کلی خوب
از معماری درگیر ارائه می دهد.
توجه داشته باشید که میان افزار هر دو جزء کالینت و سرور وجود دارد .هدف اصلی میانافزار این است که یک برنامه کاربردی
یا کاربر در یک کالینت را قادر سازد تا به خدمات مختلفی در سرورها دسترسی داشته باشد بدون اینکه نگران تفاوتهای میان
سرورها باشد .برای بررسی یک منطقه کاربردی خاص ،زبان پرس و جو ساختاریافته SQLقرار است ابزار استاندارد شده ای
برای دسترسی به یک پایگاه داده رابطه ای توسط یک کاربر یا برنامه محلی یا راه دور فراهم کند .با این حال ،بسیاری از
808
سیستم عامل های داخلی و اصول طراحی809.........................................................................................................................
تولیدکنندگان پایگاه داده رابطهای ،اگرچه از SQLپشتیبانی میکنند ،پسوندهای اختصاصی خود را به SQLاضافه کردهاند.
این امر فروشندگان را قادر می سازد تا محصوالت خود را متمایز کنند اما ناسازگاری های بالقوه را نیز ایجاد می کند.
به عنوان مثال ،یک سیستم توزیع شده را در نظر بگیرید که از جمله برای پشتیبانی از بخش پرسنل استفاده می شود .دادههای
اولیه کارمندان ،مانند نام و آدرس کارمند ،ممکن است در پایگاه داده Guptaذخیره شوند ،در حالی که اطالعات حقوق ممکن
است در پایگاه داده Oracleموجود باشد .هنگامی که یک کاربر در بخش پرسنل نیاز به دسترسی به سوابق خاص دارد ،آن
کاربر نمی خواهد نگران این باشد که پایگاه داده فروشنده حاوی سوابق مورد نیاز است Middleware .الیه ای از نرم افزار را
فراهم می کند که امکان دسترسی یکنواخت به این سیستم های متفاوت را فراهم می کند.
آموزنده است که به نقش میانافزار از دیدگاه منطقی و نه اجرایی نگاه کنیم .این دیدگاه در شکل 16.9نشان داده شده است.
میان افزار تحقق وعده محاسبات مشتری/سرور توزیع شده را امکان پذیر می کند .کل سیستم توزیع شده را می توان به عنوان
مجموعه ای از برنامه ها و منابع در دسترس کاربران مشاهده کرد .کاربران نباید نگران مکان داده ها یا در واقع مکان برنامه ها
باشند .همه برنامه ها روی یک رابط برنامه نویسی برنامه های کاربردی یکسان APIکار می کنند .میانافزار که در تمام
پلتفرمهای کالینت و سرور برش میدهد ،مسئول مسیریابی درخواستهای مشتری به سرور مناسب است.
اگرچه طیف گسترده ای از محصوالت میان افزاری وجود دارد ،این محصوالت معموالً بر اساس یکی از دو مکانیسم اساسی
هستند :ارسال پیام یا تماس های رویه از راه دور .این دو روش در دو بخش بعدی بررسی می شوند.
ایستگاه کاری مشتری
خدمات ارائه
809
سیستم عامل های داخلی و اصول طراحی810.........................................................................................................................
کاربرد کاربرد
معموالً در سیستمهای پردازش توزیع شده این اتفاق میافتد که رایانهها از حافظه اصلی مشترک استفاده نمیکنند .هر کدام یک
سیستم کامپیوتری مجزا هستند .بنابراین ،تکنیکهای ارتباط بین پردازندهای که بر حافظه مشترک متکی هستند ،مانند
سمافورها ،نمیتوانند استفاده شوند .در عوض ،از تکنیک هایی استفاده می شود که بر ارسال پیام تکیه دارند .در این بخش و
بخش بعدی ،ما به دو روش رایج نگاه می کنیم .اولین مورد استفاده مستقیم از پیام ها است زیرا در یک سیستم واحد استفاده
می شود .دومی یک تکنیک جداگانه است که بر ارسال پیام به عنوان یک تابع اساسی متکی است :فراخوانی روش از راه دور.
شکل a16.10استفاده از ارسال پیام برای اجرای عملکرد سرویس گیرنده/سرور را نشان می دهد .یک فرآیند مشتری به خدماتی
نیاز دارد به عنوان مثال ،خواندن یک فایل ،چاپ و پیامی حاوی درخواست سرویس را به یک فرآیند سرور ارسال می کند .فرآیند
سرور به درخواست پاسخ می دهد و پیامی حاوی پاسخ ارسال می کند .در ساده ترین شکل آن ،تنها دو تابع مورد نیاز است:
ارسال و دریافت .تابع ارسال یک مقصد را مشخص می کند و محتوای پیام را در بر می گیرد .تابع Receiveمی گوید که از چه
کسی یک پیام مورد نظر است شامل "همه" و یک بافر در جایی که پیام دریافتی قرار است ذخیره شود فراهم می کند.
شکل 16.11پیاده سازی برای ارسال پیام را پیشنهاد می کند .فرآیندها از خدمات یک ماژول ارسال پیام استفاده می کنند.
درخواست های سرویس را می توان بر حسب پارامترهای اولیه و پارامترها بیان کرد .یک primitiveتابعی را که باید انجام شود
را مشخص می کند و پارامترها برای انتقال داده و کنترل اطالعات استفاده می شوند .شکل واقعی یک اولیه به نرم افزار ارسال
810
سیستم عامل های داخلی و اصول طراحی811.........................................................................................................................
پیام بستگی دارد .ممکن است یک فراخوانی رویه باشد یا ممکن است خود پیامی به فرآیندی باشد که بخشی از سیستم عامل
است.
مشتری سرور
کاربرد کاربرد
میان افزار پیام گرا میان افزار پیام گرا
)با صف پیام( )با صف پیام(
حمل و نقل پیام های خاص برنامه
حمل و نقل
شبکه شبکه
(الف) میان افزار پیام گرا
مشتری سرور
کاربرد کاربرد
کاربرد
Send primitiveتوسط فرآیندی که می خواهد پیام را ارسال کند استفاده می شود .پارامترهای آن شناسه فرآیند مقصد و
محتویات پیام است .ماژول ارسال پیام یک واحد داده را می سازد که شامل این دو عنصر است .این واحد داده با استفاده از نوعی
تسهیالت ارتباطی مانند TCP/IPبه دستگاهی که فرآیند مقصد را میزبانی می کند ارسال می شود .هنگامی که واحد داده در
سیستم هدف دریافت می شود ،توسط تسهیالت ارتباطی به ماژول ارسال پیام هدایت می شود .این ماژول زمینه شناسه فرآیند
را بررسی می کند و پیام را در بافر آن فرآیند ذخیره می کند.
811
سیستم عامل های داخلی و اصول طراحی812.........................................................................................................................
در این سناریو ،فرآیند دریافت باید تمایل خود را برای دریافت پیام ها با تعیین یک ناحیه بافر و اطالع رسانی به ماژول ارسال
پیام توسط یک Receive primitiveاعالم کند .یک رویکرد جایگزین به چنین اعالمیه ای نیاز ندارد .در عوض ،هنگامی که
ماژول ارسال پیام پیامی را دریافت می کند ،فرآیند مقصد را با نوعی سیگنال دریافت سیگنال می دهد و سپس پیام دریافتی را
در یک بافر مشترک در دسترس قرار می دهد .چندین مسئله طراحی با ارسال پیام توزیع شده مرتبط است و در ادامه این بخش
به آنها پرداخته می شود.
یک مرکز قابل اعتماد برای ارسال پیام ،در صورت امکان تحویل را تضمین می کند .چنین تسهیالتی از یک پروتکل حمل و نقل
قابل اعتماد یا منطق مشابه استفاده می کند و بررسی خطا ،تأیید ،ارسال مجدد ،و مرتب سازی مجدد پیام های نادرست را انجام
می دهد .از آنجا که تحویل تضمین شده است ،الزم نیست به فرآیند ارسال اطالع دهید که پیام تحویل داده شده است .با این
حال ،ممکن است مفید باشد که یک تأییدیه برای فرآیند ارسال ارائه دهید تا بداند که تحویل قبالً انجام شده است .در هر
صورت ،اگر تسهیالت به تحویل نرسد به عنوان مثال ،خرابی مداوم شبکه ،خرابی سیستم مقصد ،فرآیند ارسال از شکست مطلع
می شود.
از سوی دیگر ،تسهیالت ارسال پیام ممکن است به سادگی پیام را به شبکه ارتباطی ارسال کند ،اما نه موفقیت و نه شکست را
گزارش میکند .این جایگزین تا حد زیادی پیچیدگی و هزینه پردازش و ارتباطات تسهیالت ارسال پیام را کاهش می دهد .برای
آن دسته از برنامههایی که نیاز به تأیید ارسال پیام دارند ،خود برنامهها ممکن است از پیامهای درخواست و پاسخ برای برآورده
کردن این نیاز استفاده کنند.
812
سیستم عامل های داخلی و اصول طراحی813.........................................................................................................................
با موارد اولیه غیرمسدود یا ناهمزمان ،فرآیندی در نتیجه صدور ارسال یا دریافت به حالت تعلیق در نمی آید .بنابراین ،هنگامی
که یک فرآیند یک Send primitiveصادر می کند ،سیستم عامل به محض اینکه پیام برای ارسال در صف قرار گرفت یا یک
کپی ساخته شد ،کنترل را به فرآیند برمی گرداند .در صورت عدم کپی کردن ،هرگونه تغییری که در فرآیند ارسال پیام قبل از
ارسال یا حتی در حین ارسال آن ایجاد شده است ،با خطر فرآیند ایجاد می شود.
هنگامی که پیام برای ارسال بعدی به مکانی امن منتقل یا کپی شد ،فرآیند ارسال قطع میشود تا مطلع شود که بافر پیام ممکن
است دوباره استفاده شود .به طور مشابه ،یک دریافت غیرانسدادی توسط فرآیندی صادر میشود که سپس اجرا میشود .وقتی
پیامی می رسد ،فرآیند با وقفه مطلع می شود یا می تواند وضعیت را به صورت دوره ای نظرسنجی کند.
بدوی غیر مسدود کننده استفاده کارآمد و انعطاف پذیر از تسهیالت انتقال پیام توسط فرآیندها را فراهم می کند .عیب این روش
این است که آزمایش و اشکال زدایی برنامه هایی که از این اولیه ها استفاده می کنند دشوار است .سکانس های تکرار نشدنی و
وابسته به زمان می توانند مشکالت ظریف و دشواری ایجاد کنند.
جایگزین استفاده از مسدود کننده یا همزمان ،ابتدایی است .ارسال مسدودکننده ،کنترل را به فرآیند ارسال باز نمیگرداند تا
زمانی که پیام ارسال شود سرویس غیرقابل اعتماد یا تا زمانی که پیام ارسال نشده و تأییدیه دریافت شود سرویس قابل اعتماد.
یک گیرنده مسدود کننده کنترل را باز نمی گرداند تا زمانی که یک پیام در بافر اختصاص داده شده قرار داده شود.
یک تغییر در مدل اصلی ارسال پیام ،فراخوانی رویه از راه دور است .این در حال حاضر یک روش پذیرفته شده و رایج برای
کپسوله کردن ارتباطات در یک سیستم توزیع شده است .ماهیت این تکنیک این است که به برنامهها در ماشینهای مختلف
اجازه میدهد با استفاده از معنایی فراخوانی/بازگشت رویه ساده با هم تعامل داشته باشند ،درست مثل اینکه دو برنامه روی یک
ماشین هستند .یعنی فراخوانی رویه برای دسترسی به خدمات راه دور استفاده می شود .محبوبیت این روش به دلیل مزایای زیر
است.
.1فراخوانی رویه یک انتزاع پذیرفته شده ،مورد استفاده و قابل درک است.
.2استفاده از فراخوانی روش از راه دور ،رابط های راه دور را قادر می سازد تا به عنوان مجموعه ای از عملیات نامگذاری شده با
انواع تعیین شده مشخص شوند .بنابراین ،رابط را می توان به وضوح مستند کرد و برنامه های توزیع شده را می توان به صورت
ایستا برای خطاهای نوع بررسی کرد.
813
سیستم عامل های داخلی و اصول طراحی814.........................................................................................................................
.3از آنجا که یک رابط استاندارد و دقیقاً تعریف شده مشخص شده است ،کد ارتباطی برای یک برنامه کاربردی می تواند به طور
خودکار تولید شود.
.4از آنجا که یک رابط استاندارد و دقیقاً تعریف شده مشخص شده است ،توسعه دهندگان می توانند ماژول های سرویس گیرنده
و سرور را بنویسند که می توانند با تغییرات و کدگذاری مجدد در بین رایانه ها و سیستم عامل ها جابجا شوند.
مکانیسم فراخوانی رویه از راه دور را می توان به عنوان اصالحی از ارسال پیام قابل اطمینان و مسدود کننده مشاهده کرد .شکل
b16.10معماری کلی را نشان می دهد و شکل 16.12نمای دقیق تری را ارائه می دهد.
برنامه فراخوانی یک فراخوانی رویه معمولی با پارامترهای دستگاه خود برقرار می کند .مثال،
Yمقادیر برگشتی
ممکن است برای کاربر واضح باشد یا نباشد که قصد فراخوانی یک رویه از راه دور در دستگاه دیگری است .یک روش ساختگی یا
خرد Pباید در فضای آدرس تماس گیرنده گنجانده شود یا در زمان تماس به صورت پویا به آن پیوند داده شود .این رویه پیامی
814
سیستم عامل های داخلی و اصول طراحی815.........................................................................................................................
را ایجاد می کند که رویه فراخوانی شده را شناسایی می کند و شامل پارامترها می شود .سپس این پیام را به یک سیستم راه
دور ارسال می کند و منتظر پاسخ می ماند .هنگامی که یک پاسخ دریافت می شود ،رویه خرد به برنامه فراخوانی باز می گردد و
مقادیر برگشتی را ارائه می دهد.
در دستگاه راه دور ،برنامه خرد دیگری با رویه فراخوانی شده مرتبط است .هنگامی که یک پیام وارد می شود ،بررسی می شود و
یک CALL PX, Yمحلی ایجاد می شود .بنابراین این رویه راه دور به صورت محلی نامیده می شود ،بنابراین مفروضات عادی
آن در مورد مکان یافتن پارامترها ،وضعیت پشته ،و غیره مشابه مورد فراخوانی رویه کامالً محلی است.
چندین مشکل طراحی با فراخوانی رویه از راه دور مرتبط است و در ادامه این بخش به آنها پرداخته می شود.
نمایش پارامتر
موضوع دیگر نحوه نمایش پارامترها و نتایج در پیام ها است .اگر برنامههای فراخوانی و فراخوانی به زبانهای برنامهنویسی یکسان
در یک نوع ماشین با سیستمعامل یکسان باشند ،در این صورت الزامات نمایش ممکن است مشکلی ایجاد نکند.
اگر در این زمینهها تفاوتهایی وجود داشته باشد ،احتماالً تفاوتهایی در شیوههای نمایش اعداد و متن زوج وجود خواهد داشت.
اگر از یک معماری ارتباطی تمام عیار استفاده شود ،این مسئله توسط الیه ارائه حل می شود .با این حال ،سربار چنین معماری
منجر به طراحی تسهیالت فراخوانی از راه دور شده است که بیشتر معماری ارتباطات را دور می زند و تسهیالت اولیه ارتباطی
خود را فراهم می کند .در آن صورت ،مسئولیت تبدیل بر عهده تسهیالت فراخوانی رویه راه دور است به عنوان مثال،
GIBB87را ببینید.
بهترین رویکرد برای این مشکل ،ارائه یک قالب استاندارد برای اشیاء رایج ،مانند اعداد صحیح ،اعداد ممیز شناور ،کاراکترها و
رشته های کاراکتر است .سپس پارامترهای بومی در هر ماشینی را می توان به نمایش استاندارد شده و از آن تبدیل کرد.
اتصال کالینت/سرور
Bindingنحوه برقراری رابطه بین یک رویه راه دور و برنامه فراخوان را مشخص می کند .یک اتصال زمانی شکل می گیرد که
دو برنامه یک ارتباط منطقی برقرار کرده و برای تبادل دستورات و داده ها آماده شوند.
اتصال غیرمداوم به این معنی است که یک اتصال منطقی بین دو فرآیند در زمان فراخوانی رویه راه دور برقرار میشود و به
محض بازگشت مقادیر ،اتصال از بین میرود .از آنجا که یک اتصال مستلزم حفظ اطالعات وضعیت در هر دو طرف است ،منابع را
مصرف می کند .برای حفظ آن منابع از سبک غیر مداوم استفاده می شود .از سوی دیگر ،سربار درگیر در برقراری اتصاالت،
اتصال غیرمداوم را برای رویه های راه دور که اغلب توسط همان تماس گیرنده فراخوانی می شوند ،نامناسب می کند.
815
سیستم عامل های داخلی و اصول طراحی816.........................................................................................................................
با اتصال مداوم ،اتصالی که برای فراخوانی رویه راه دور تنظیم شده است ،پس از بازگشت رویه برقرار می شود .سپس میتوان از
اتصال برای تماسهای رویه از راه دور آینده استفاده کرد .اگر یک دوره زمانی مشخص بدون هیچ گونه فعالیتی در اتصال بگذرد،
اتصال قطع می شود .برای برنامههایی که تماسهای مکرر زیادی با رویههای راه دور برقرار میکنند ،اتصال دائمی اتصال منطقی
را حفظ میکند و به دنبالهای از تماسها و بازگشتها اجازه میدهد تا از همان اتصال استفاده کنند .همگام در مقابل ناهمزمان
مفاهیم فراخوانی رویه از راه دور همزمان و ناهمزمان مشابه مفاهیم مسدود کننده و غیرمسدود کننده پیام ها هستند .فراخوانی
روش سنتی از راه دور همزمان است ،که مستلزم آن است که فرآیند فراخوانی منتظر بماند تا فرآیند فراخوانی شده مقداری را
برگرداند .بنابراین RPC ،همزمان بسیار شبیه یک فراخوانی زیر روال عمل می کند.
درک و برنامه ریزی RPCهمزمان آسان است زیرا رفتار آن قابل پیش بینی است .با این حال ،نمی تواند به طور کامل از موازی
بودن ذاتی در برنامه های کاربردی توزیع شده استفاده کند .این نوع تعامل برنامه توزیع شده را محدود می کند و در نتیجه
عملکرد کمتری دارد.
برای ارائه انعطاف پذیری بیشتر ،امکانات مختلف RPCناهمزمان برای دستیابی به درجه بیشتری از موازی سازی و در عین
حال حفظ آشنایی و سادگی RPC ANAN92پیاده سازی شده استRPC .های ناهمزمان تماس گیرنده را مسدود نمی
کنند .پاسخها را میتوان در صورت نیاز دریافت کرد ،بنابراین اجرای کالینت به صورت محلی و موازی با فراخوانی سرور
امکانپذیر است.
یک استفاده معمولی از RPCناهمزمان این است که یک کالینت را قادر می سازد تا یک سرور را به طور مکرر فراخوانی کند تا
مشتری در یک زمان تعدادی درخواست در خط لوله داشته باشد که هر کدام مجموعه ای از داده های خاص خود را دارند.
همگام سازی کالینت و سرور را می توان به یکی از دو روش زیر انجام داد:
.1یک برنامه الیه باالتر در کالینت و سرور می تواند تبادل را آغاز کند و سپس در پایان بررسی کند که آیا تمام اقدامات
درخواستی انجام شده است.
.2یک کالینت می تواند رشته ای از RPCهای ناهمزمان و به دنبال آن یک RPCهمزمان نهایی صادر کند .سرور تنها پس از
تکمیل تمام کارهای درخواست شده در RPCهای ناهمزمان قبلی ،به RPCهمزمان پاسخ می دهد.
در برخی از طرحهاRPC ،های ناهمزمان به هیچ پاسخی از طرف سرور نیاز ندارند و سرور نمیتواند پیام پاسخ ارسال کند .سایر
طرح ها یا نیاز به پاسخ دارند یا اجازه می دهند ،اما تماس گیرنده منتظر پاسخ نمی ماند.
816
سیستم عامل های داخلی و اصول طراحی817.........................................................................................................................
همانطور که فناوری شی گرا در طراحی سیستم عامل رایج تر می شود ،طراحان سرویس گیرنده/سرور شروع به پذیرش این
رویکرد کرده اند .در این رویکرد ،مشتریان و سرورها پیام ها را بین اشیا به عقب و جلو ارسال می کنند .ارتباطات شیء ممکن
است به یک پیام اساسی یا ساختار RPCمتکی باشد یا مستقیماً بر روی قابلیت های شی گرا در سیستم عامل توسعه یابد.
سرویس گیرنده ای که به یک سرویس نیاز دارد ،درخواستی را به یک کارگزار درخواست شی ارسال می کند ،که به عنوان
دایرکتوری تمام سرویس های راه دور موجود در شبکه عمل می کند شکل c. 16.10کارگزار شی مناسب را فراخوانی می کند و
داده های مربوطه را در امتداد ارسال می کند .سپس شیء راه دور درخواست را سرویس می دهد و به کارگزار پاسخ می دهد ،که
پاسخ را به مشتری برمی گرداند.
موفقیت رویکرد شی گرا به استانداردسازی مکانیسم شی بستگی دارد .متأسفانه چندین طرح رقیب در این زمینه وجود دارد.
یکی از آنها مدل قطعه بندی شی مایکروسافت COMاست که اساس پیوند و جاسازی شی OLEاست .یک رویکرد رقابتی
که توسط گروه مدیریت شی توسعه داده شده است ،معماری کارگزار درخواست شی مشترک CORBAاست که از پشتیبانی
صنعتی گسترده ای برخوردار است ،Sun ،Apple ،IBM .و بسیاری از فروشندگان دیگر از رویکرد CORBAپشتیبانی می
کنند.
16.4خوشه ها
خوشه بندی جایگزینی برای چند پردازش متقارن SMPبه عنوان رویکردی برای ارائه عملکرد باال و در دسترس بودن باال است
و به ویژه برای برنامه های کاربردی سرور جذاب است .ما می توانیم یک خوشه را به عنوان گروهی از کامپیوترهای به هم پیوسته
و کامل تعریف کنیم که با هم به عنوان یک منبع محاسباتی یکپارچه کار می کنند که می تواند توهم یک ماشین بودن را ایجاد
کند .کلمه کامپیوتر به معنای سیستمی است که می تواند به تنهایی ،جدا از کالستر ،اجرا شود .در ادبیات ،هر کامپیوتر در یک
خوشه معموالً به عنوان یک گره نامیده می شود.
BREW97چهار مزیتی را که می توان با خوشه بندی به دست آورد را فهرست می کند .اینها همچنین می توانند به عنوان
اهداف یا الزامات طراحی در نظر گرفته شوند:
rمقیاس پذیری مطلق :امکان ایجاد خوشه های بزرگی وجود دارد که از قدرت حتی بزرگ ترین ماشین های مستقل نیز فراتر
رود .یک خوشه می تواند ده ها یا حتی صدها ماشین داشته باشد که هر یک از آنها چند پردازنده هستند.
817
سیستم عامل های داخلی و اصول طراحی818.........................................................................................................................
-مقیاس پذیری افزایشی :یک خوشه به گونه ای پیکربندی شده است که امکان افزودن سیستم های جدید به خوشه با افزایش
های کوچک وجود دارد .بنابراین ،کاربر میتواند با یک سیستم ساده شروع کند و با افزایش نیازها ،آن را گسترش دهد ،بدون
اینکه نیازی به ارتقای اساسی داشته باشد که در آن یک سیستم کوچک موجود با یک سیستم بزرگتر جایگزین شود.
-در دسترس بودن باال :از آنجا که هر گره در یک خوشه یک کامپیوتر مستقل است ،خرابی یک گره به معنای از دست دادن
سرویس نیست .در بسیاری از محصوالت ،تحمل خطا به صورت خودکار در نرم افزار مدیریت می شود.
-قیمت/عملکرد برتر :با استفاده از بلوکهای سازنده کاال ،میتوان خوشهای را با قدرت محاسباتی برابر یا بیشتر از یک ماشین
بزرگ با هزینه بسیار کمتر کنار هم قرار داد.
تنظیمات خوشه
در ادبیات ،خوشه ها به روش های مختلف طبقه بندی می شوند .شاید سادهترین طبقهبندی بر اساس این باشد که آیا رایانههای
یک کالستر به دیسکهای مشابهی دسترسی دارند یا خیر .شکل a16.13یک خوشه دو گره را نشان می دهد که در آن تنها
ارتباط متقابل از طریق یک پیوند پرسرعت است که می تواند برای تبادل پیام برای هماهنگ کردن فعالیت خوشه استفاده شود.
پیوند می تواند یک LANباشد که با رایانه های دیگری که بخشی از خوشه نیستند به اشتراک گذاشته شده است ،یا پیوند می
تواند یک تسهیالت اتصال اختصاصی باشد .در حالت دوم ،یک یا چند کامپیوتر در کالستر پیوندی به یک شبکه LANیا
WANخواهند داشت تا بین خوشه سرور و سیستم های کالینت راه دور ارتباط برقرار شود .توجه داشته باشید که در شکل،
هر کامپیوتر به صورت چند پردازنده به تصویر کشیده شده است .این ضروری نیست ،اما عملکرد و در دسترس بودن را افزایش
می دهد.
در طبقه بندی ساده که در شکل 16.13نشان داده شده است ،جایگزین دیگر یک خوشه دیسک مشترک است .در این مورد ،به
طور کلی هنوز یک پیوند پیام بین گره ها وجود دارد .عالوه بر این ،یک زیرسیستم دیسکی وجود دارد که مستقیماً به چندین
رایانه در داخل خوشه مرتبط است .در شکل ،b16.13زیرسیستم دیسک مشترک یک سیستم RAIDاست .استفاده از
RAIDیا برخی از فناوری دیسک زائد مشابه در خوشهها رایج است ،به طوری که در دسترس بودن باال که با حضور رایانههای
متعدد به دست میآید توسط یک دیسک مشترک که یک نقطه خرابی است به خطر نیفتد.
818
سیستم عامل های داخلی و اصول طراحی819.........................................................................................................................
تصویر واضح تری از طیف رویکردهای خوشه بندی را می توان با نگاه کردن به گزینه های کاربردی به دست آورد .یک مقاله
سفید از Hewlett Packard HP96یک طبقه بندی مفید در امتداد خطوط عملکردی ارائه می دهد جدول ،16.2که اکنون
در مورد آن بحث می کنیم.
یک روش معمول و قدیمیتر که به عنوان حالت آماده به کار غیرفعال شناخته میشود ،این است که یک رایانه تمام بار پردازشی
را کنترل کند در حالی که رایانه دیگر غیرفعال میماند و در صورت خرابی اولیه آماده میشود .برای هماهنگ کردن ماشینها،
سیستم فعال یا اولیه به صورت دورهای یک پیام "ضربان قلب" را به دستگاه آماده به کار ارسال میکند .اگر دریافت این پیام ها
متوقف شود ،در حالت آماده به کار فرض می شود که سرور اصلی از کار افتاده است و خود را به کار می اندازد .این رویکرد
دسترسی را افزایش می دهد اما عملکرد را بهبود نمی بخشد.
عالوه بر این ،اگر تنها اطالعاتی که بین دو سیستم رد و بدل میشود پیام ضربان قلب باشد ،و اگر دو سیستم دیسک مشترک را
به اشتراک نگذارند ،در حالت آماده به کار یک نسخه پشتیبان تهیه میکند اما به پایگاههای دادهای که توسط اصلی مدیریت
میشود دسترسی ندارد.
حالت آماده به کار غیرفعال معموالً به عنوان یک خوشه شناخته نمی شود .اصطالح خوشه برای چندین رایانه به هم پیوسته که
همگی به طور فعال در حال پردازش هستند و در عین حال تصویر یک سیستم واحد را برای جهان خارج حفظ می کنند،
اختصاص دارد .اصطالح ثانویه فعال اغلب در اشاره به این پیکربندی استفاده می شود .سه طبقه بندی از خوشه بندی را می توان
شناسایی کرد :سرورهای جداگانه ،هیچ چیز مشترک و حافظه مشترک.
819
سیستم عامل های داخلی و اصول طراحی820.........................................................................................................................
در صورت خرابی سرور آماده به کار غیرفعال پیاده سازی آسان. هزینه باال زیرا سرور
اولیه ،سرور ثانویه ثانویه برای سایر
کنترل میشود. وظایف پردازشی در
دسترس نیست.
سرور ثانویه نیز برای ثانویه فعال کاهش هزینه زیرا افزایش پیچیدگی
پردازش وظایف سرورهای ثانویه می
استفاده می شود. توانند برای پردازش
استفاده شوند.
سرورهای مجزا در دسترس بودن باال .سرورهای جداگانه سربار باالی شبکه و
دیسک های مخصوص سرور به دلیل عملیات
به خود را دارند .داده کپی.
ها به طور مداوم از
سرور اصلی به سرور
ثانویه کپی می شوند.
کاهش سربار شبکه و سرورها به دیسک های سرورهای متصل به معموالً برای جبران
مشابه کابل می شوند ،دیسک خطر خرابی دیسک به سرور به دلیل حذف
اما هر سرور دارای فناوری انعکاس دیسک عملیات کپی.
دیسک های خود است. یا RAIDنیاز دارد.
اگر یک سرور از کار
بیفتد ،دیسک های آن
توسط سرور دیگر
تصاحب می شود.
820
سیستم عامل های داخلی و اصول طراحی821.........................................................................................................................
چندین سرور به طور سرورها دیسک ها را به سربار شبکه و به نرم افزار
همزمان دسترسی به اشتراک می گذارند سرور کم است. مدیریت قفل نیاز
دیسک ها را به اشتراک کاهش خطر دارد .معموالً با
می گذارند. خرابی ناشی از دیسک
خرابی دیسک. mirroringیا
فناوری RAID
استفاده می شود.
در یکی از رویکردهای خوشهبندی ،هر کامپیوتر یک سرور جداگانه با دیسکهای خاص خود است و هیچ دیسکی بین
سیستمهای مشترک وجود ندارد شکل a. 16.13این چیدمان عملکرد باال و همچنین در دسترس بودن باال را فراهم می کند .در
این حالت ،به نوعی نرم افزار مدیریت یا برنامه ریزی برای تخصیص درخواست های دریافتی مشتری به سرورها نیاز است تا بار
متعادل شود و استفاده باالیی حاصل شود .داشتن قابلیت Failoverمطلوب است ،به این معنی که اگر رایانه ای در حین اجرای
برنامه از کار بیفتد ،رایانه دیگری در کالستر می تواند برنامه را دریافت و تکمیل کند .برای تحقق این امر ،داده ها باید دائماً در
بین سیستم ها کپی شوند تا هر سیستم به داده های فعلی سیستم های دیگر دسترسی داشته باشد .سربار این تبادل داده در
دسترس بودن باال را به قیمت جریمه عملکرد تضمین می کند.
برای کاهش هزینه های ارتباطی ،اکثر خوشه ها در حال حاضر از سرورهای متصل به دیسک های مشترک تشکیل شده اند
شکل b. 16.13در یکی از انواع این رویکرد ،به نام چیزی مشترک ،دیسکهای رایج به حجمها تقسیم میشوند و هر جلد متعلق
به یک کامپیوتر است .اگر آن رایانه از کار بیفتد ،خوشه باید مجدداً پیکربندی شود تا رایانه دیگری مالکیت حجم رایانه خراب را
داشته باشد.
همچنین این امکان وجود دارد که چندین رایانه به طور همزمان دیسک های مشابهی را به اشتراک بگذارند که رویکرد دیسک
مشترک نامیده می شود ،به طوری که هر رایانه به تمام حجم های موجود در همه دیسک ها دسترسی داشته باشد .این رویکرد
مستلزم استفاده از نوعی از امکانات قفل است تا اطمینان حاصل شود که داده ها فقط توسط یک کامپیوتر در یک زمان قابل
دسترسی هستند.
821
سیستم عامل های داخلی و اصول طراحی822.........................................................................................................................
بهره برداری کامل از پیکربندی سخت افزاری خوشه ای نیازمند برخی پیشرفت ها در یک سیستم عامل تک سیستمی است.
مدیریت خرابی نحوه مدیریت خرابی ها توسط یک خوشه به روش خوشه بندی مورد استفاده بستگی دارد جدول .16.2به طور
کلی ،دو رویکرد را می توان برای مقابله با خرابی ها در نظر گرفت :خوشه های بسیار در دسترس و خوشه های تحمل خطا .یک
خوشه بسیار در دسترس احتمال زیادی را ارائه می دهد که همه منابع در خدمت باشند .اگر خرابی رخ دهد ،مثالً یک گره پایین
بیاید یا حجم دیسک از بین برود ،پرس و جوهای در حال انجام از بین می روند .هر پرس و جو از دست رفته ،در صورت تکرار،
توسط رایانه دیگری در خوشه سرویس می شود .با این حال ،سیستم عامل خوشه هیچ تضمینی در مورد وضعیت تراکنش های
نیمه اجرا شده نمی دهد .این باید در سطح برنامه مدیریت شود.
یک خوشه تحمل کننده خطا تضمین می کند که همه منابع همیشه در دسترس هستند .این امر با استفاده از دیسکهای
مشترک اضافی و مکانیسمهایی برای پشتیبانگیری از تراکنشهای غیرمتعهد و انجام تراکنشهای تکمیلشده به دست میآید.
عملکرد تغییر یک برنامه کاربردی و منابع داده از یک سیستم شکست خورده به یک سیستم جایگزین در خوشه به عنوان
Failoverنامیده می شود .یک عملکرد مرتبط ،بازگرداندن برنامهها و منابع داده به سیستم اصلی پس از رفع آن است .این به
عنوان Failbackنامیده می شود Failback .را می توان خودکار کرد ،اما این تنها در صورتی مطلوب است که مشکل واقعاً
برطرف شده باشد و بعید است که عود کند .در غیر این صورت ،خرابی خودکار میتواند باعث شود منابع ناموفق متعاقباً بین
رایانهها برگشته و منجر به مشکالت عملکرد و بازیابی شود.
LOAD BALANCINGیک خوشه به قابلیت موثری برای متعادل کردن بار در میان رایانه های موجود نیاز دارد .این
شامل این نیاز است که خوشه به صورت تدریجی مقیاس پذیر باشد .هنگامی که یک رایانه جدید به خوشه اضافه می شود،
تسهیالت متعادل کننده بار باید به طور خودکار این رایانه را در برنامه های زمان بندی قرار دهد .مکانیسمهای میانافزار باید
تشخیص دهند که سرویسها میتوانند در اعضای مختلف خوشه ظاهر شوند و ممکن است از یک عضو به عضو دیگر مهاجرت
کنند.
محاسبات موازی سازی در برخی موارد ،استفاده موثر از یک خوشه مستلزم اجرای نرم افزار از یک برنامه به صورت موازی است.
KAPP00سه رویکرد کلی برای مشکل را فهرست می کند:
-اجرار موازی سازی :یک اجرار موازی در زمان اجرا تعیین می کند که کدام بخش از یک برنامه را می توان به صورت موازی
اجرا کرد .سپس اینها جدا می شوند تا به رایانه های مختلف در خوشه اختصاص داده شوند .عملکرد به ماهیت مشکل و اینکه
اجرار چقدر خوب طراحی شده است بستگی دارد.
822
سیستم عامل های داخلی و اصول طراحی823.........................................................................................................................
-کاربرد موازی شده :در این رویکرد ،برنامه نویس برنامه را از ابتدا می نویسد تا روی یک خوشه اجرا شود و از ارسال پیام برای
انتقال داده ها ،در صورت لزوم ،بین گره های خوشه استفاده می کند .این بار سنگینی را بر دوش برنامه نویس وارد می کند ،اما
ممکن است بهترین روش برای بهره برداری از خوشه ها برای برخی برنامه ها باشد.
-محاسبات پارامتری :اگر ماهیت برنامه یک الگوریتم یا برنامه باشد که باید چندین بار و هر بار با مجموعه ای از شرایط شروع یا
پارامترهای متفاوت اجرا شود ،می توان از این رویکرد استفاده کرد.
یک مثال خوب یک مدل شبیهسازی است که تعداد زیادی سناریوهای مختلف را اجرا میکند و سپس خالصههای آماری نتایج
را توسعه میدهد .برای مؤثر بودن این رویکرد ،ابزارهای پردازش پارامتریک برای سازماندهی ،اجرا و مدیریت مشاغل به شیوه ای
منظم مورد نیاز است.
شکل 16.14یک معماری کالستر معمولی را نشان می دهد .کامپیوترهای منفرد توسط برخی از سخت افزارهای LANیا
سوئیچ پرسرعت به هم متصل می شوند .هر کامپیوتر قادر به کار مستقل است .عالوه بر این ،یک الیه نرم افزار میان افزار در هر
کامپیوتر نصب شده است تا عملیات خوشه ای را فعال کند .میانافزار خوشهای یک تصویر سیستمی یکپارچه را در اختیار کاربر
قرار میدهد که به عنوان تصویر تک سیستمی شناخته میشود .میانافزار همچنین ممکن است با استفاده از متعادلسازی بار و
پاسخگویی به خرابیها در اجزای منفرد ،مسئول ارائه دسترسی باال باشدHWAN99 .موارد زیر را به عنوان خدمات و توابع
میانافزار خوشهای مطلوب فهرست میکند:
-نقطه ورود منفرد :کاربر به جای یک کامپیوتر مجزا به خوشه وارد می شود
-سلسله مراتب یک فایل :کاربر یک سلسله مراتب منفرد از دایرکتوری های فایل را در زیر دایرکتوری ریشه یکسان می بیند.
Single Control Point: -یک گره پیش فرض برای مدیریت و کنترل خوشه وجود دارد.
-شبکه مجازی منفرد :هر گره می تواند به هر نقطه دیگری در خوشه دسترسی داشته باشد ،حتی اگر پیکربندی خوشه واقعی از
چندین شبکه به هم پیوسته تشکیل شده باشد .یک عملیات شبکه مجازی واحد وجود دارد.
-فضای حافظه واحد :حافظه مشترک توزیع شده برنامه ها را قادر می سازد تا متغیرها را به اشتراک بگذارند.
823
سیستم عامل های داخلی و اصول طراحی824.........................................................................................................................
شبکه/سوئیچ پرسرعت
شکل 16.14معماری کامپیوتر خوشه ای
-سیستم مدیریت کار واحد :تحت یک زمانبندی کار خوشهای ،کاربر میتواند یک کار را بدون تعیین رایانه میزبان برای اجرای
کار ارسال کند.
-رابط تک کاربره :یک رابط گرافیکی مشترک از همه کاربران ،صرف نظر از ایستگاه کاری که از آن وارد خوشه می شوند،
پشتیبانی می کند.
-فضای ورودی/خروجی منفرد :هر گره می تواند از راه دور به هر دستگاه جانبی ورودی/خروجی یا دیسک بدون اطالع از
موقعیت فیزیکی آن دسترسی داشته باشد.
-فضای فرآیند واحد :یک طرح شناسایی فرآیند یکنواخت استفاده می شود .یک فرآیند در هر گره می تواند هر فرآیند دیگری را
در یک گره راه دور ایجاد کند یا با آن ارتباط برقرار کند.
Checkpointing: -این تابع به صورت دورهای وضعیت فرآیند و نتایج محاسبات میانی را ذخیره میکند تا امکان بازیابی
بازگشت پس از شکست فراهم شود.
چهار مورد آخر در لیست قبلی در دسترس بودن خوشه را افزایش می دهد.
با بازگشت به شکل ،16.14یک خوشه همچنین شامل ابزارهای نرم افزاری برای فعال کردن اجرای کارآمد برنامه هایی است که
قادر به اجرای موازی هستند.
824
سیستم عامل های داخلی و اصول طراحی825.........................................................................................................................
هم خوشه ها و هم چند پردازنده های متقارن پیکربندی با چندین پردازنده برای پشتیبانی از برنامه های کاربردی با تقاضای باال
ارائه می کنند .هر دو راه حل به صورت تجاری در دسترس هستند ،اگرچه SMPمدت طوالنی تری وجود داشته است.
نقطه قوت اصلی رویکرد SMPاین است که مدیریت و پیکربندی یک SMPنسبت به یک خوشه آسانتر است SMP .بسیار
نزدیکتر به مدل اصلی تک پردازنده است که تقریباً همه برنامه ها برای آن نوشته شده اند.
تغییر اصلی مورد نیاز برای رفتن از یک پردازنده به یک SMPبه تابع زمانبندی است .یکی دیگر از مزایای SMPاین است که
معموالً فضای فیزیکی کمتری را اشغال می کند و نسبت به خوشه های مشابه انرژی کمتری مصرف می کند .آخرین مزیت مهم
این است که محصوالت SMPبه خوبی تثبیت و پایدار هستند.
با این حال ،در دراز مدت ،مزایای رویکرد خوشهای احتماالً منجر به تسلط خوشهها بر بازار سرورهای با کارایی باال میشود.
خوشه ها از نظر مقیاس پذیری افزایشی و مطلق بسیار برتر از SMPها هستند .خوشه ها از نظر در دسترس بودن نیز برتر
هستند ،زیرا همه اجزای سیستم به راحتی می توانند به شدت اضافی شوند.
Windows Failover Clusteringیک خوشه مشترک هیچ چیز است که در آن هر حجم دیسک و سایر منابع در یک
زمان متعلق به یک سیستم واحد است.
Cluster Service: -مجموعه ای از نرم افزارها در هر گره که تمام فعالیت های خاص خوشه را مدیریت می کند.
-منبع :موردی که توسط سرویس خوشه مدیریت می شود .همه منابع اشیایی هستند که منابع واقعی را در سیستم نشان می
دهند ،از جمله دستگاه های سخت افزاری مانند درایوهای دیسک و کارت های شبکه و موارد منطقی مانند حجم دیسک
منطقی ،آدرس های ،TCP/IPکل برنامه ها و پایگاه های داده.
-آنالین :به منبعی گفته می شود که در یک گره آنالین است ،زمانی که در حال ارائه خدمات در آن گره خاص است.
-گروه :مجموعه ای از منابع که به صورت واحد مدیریت می شوند .معموالً یک گروه شامل تمام عناصر مورد نیاز برای اجرای یک
برنامه خاص و برای اتصال سیستم های مشتری به سرویس ارائه شده توسط آن برنامه است.
825
سیستم عامل های داخلی و اصول طراحی826.........................................................................................................................
مفهوم گروه از اهمیت ویژه ای برخوردار است .یک گروه منابع را در واحدهای بزرگتر ترکیب می کند که به راحتی مدیریت می
شوند ،هم برای خرابی و هم تعادل بار .عملیات انجام شده روی یک گروه ،مانند انتقال گروه به گره دیگر ،به طور خودکار بر تمام
منابع آن گروه تأثیر می گذارد .منابع به صورت کتابخانههای پیوندی پویا DLLپیادهسازی میشوند و توسط یک مانیتور منبع
مدیریت میشوند .مانیتور منبع از طریق فراخوانی روش از راه دور با سرویس خوشه تعامل می کند و به دستورات سرویس
خوشه برای پیکربندی و جابجایی گروه های منابع پاسخ می دهد.
شکل 16.15اجزای خوشه بندی ویندوز و روابط آنها را در یک سیستم واحد از یک خوشه نشان می دهد .مدیر گره مسئول
حفظ عضویت این گره در خوشه است .به صورت دورهای ،پیامهای ضربان قلب را به مدیران گره در سایر گرههای خوشه ارسال
میکند .در صورتی که یک مدیر گره از دست دادن پیامهای ضربان قلب را از گره خوشهای دیگر تشخیص دهد ،پیامی را به کل
خوشه ارسال میکند و باعث میشود همه اعضا پیامهایی را مبادله کنند تا دیدگاه خود را نسبت به عضویت خوشه فعلی تأیید
کنند .اگر مدیر گره پاسخ ندهد ،از خوشه حذف می شود و گروه های فعال آن به یک یا چند گره فعال دیگر در خوشه منتقل
می شوند.
خدمات خوشه
ای
مدیر به روز
رسانی جهانی
مدیر پایگاه داده
پردازنده رویداد مدیر گره
مانیتورهای منابع
رابط مدیریت
منابع
اپلیکیشن
خوشه ای
826
سیستم عامل های داخلی و اصول طراحی827.........................................................................................................................
مدیر پایگاه داده پیکربندی ،پایگاه داده پیکربندی خوشه را حفظ می کند .پایگاه داده حاوی اطالعاتی در مورد منابع و گروه ها و
مالکیت گره گروه ها است .مدیران پایگاه داده در هر یک از گره های خوشه ای برای حفظ تصویری ثابت از اطالعات پیکربندی
همکاری می کنند .نرم افزار تراکنش تحمل پذیر خطا برای اطمینان از اینکه تغییرات در پیکربندی کلی خوشه به طور مداوم و
صحیح انجام می شود استفاده می شود.
مدیر منبع/مدیر شکست تمام تصمیمات مربوط به گروه های منبع را می گیرد و اقدامات مناسبی مانند راه اندازی ،تنظیم مجدد
و شکست را آغاز می کند .هنگامی که به Failoverنیاز است ،مدیران failoverدر گره فعال برای مذاکره درباره توزیع
گروههای منبع از سیستم شکست خورده به سیستمهای فعال باقی مانده ،همکاری میکنند .هنگامی که یک سیستم پس از
خرابی راه اندازی مجدد می شود ،مدیر failoverمی تواند تصمیم بگیرد که برخی از گروه ها را به این سیستم بازگرداند .به
طور خاص ،هر گروهی ممکن است با یک مالک ترجیحی پیکربندی شود .اگر آن مالک شکست بخورد و سپس دوباره راه اندازی
شود ،گروه در یک عملیات بازگشت به گره به گره بازگردانده می شود.
پردازشگر رویداد همه اجزای سرویس خوشه را به هم متصل می کند ،عملیات مشترک را مدیریت می کند و مقدار دهی اولیه
سرویس خوشه را کنترل می کند .مدیر ارتباطات ،تبادل پیام را با سایر گره های خوشه مدیریت می کند .مدیر به روز رسانی
جهانی سرویسی را ارائه می دهد که توسط سایر مؤلفه های داخل سرویس خوشه استفاده می شود.
مایکروسافت به ارسال محصول خوشهای خود ادامه میدهد ،اما آنها همچنین راهحلهای مجازیسازی را بر اساس مهاجرت زنده
کارآمد ماشینهای مجازی بین Hypervisorهای در حال اجرا بر روی سیستمهای کامپیوتری مختلف به عنوان بخشی از
Windows Server 2008 R2توسعه دادهاند .برای برنامه های جدید ،مهاجرت زنده مزایای زیادی را نسبت به رویکرد
خوشه ای ارائه می دهد ،مانند مدیریت ساده تر و انعطاف پذیری بهبود یافته.
در سال ،1994پروژه Beowulfتحت حمایت پروژه محاسبات و ارتباطات با عملکرد باال ناسا HPCCآغاز شد .هدف آن
بررسی پتانسیل رایانه های شخصی خوشه ای برای انجام وظایف محاسباتی مهم فراتر از قابلیت های ایستگاه های کاری معاصر
با حداقل هزینه بود .امروزه ،رویکرد Beowulfبه طور گسترده اجرا می شود و شاید مهم ترین فناوری خوشه ای موجود باشد.
827
سیستم عامل های داخلی و اصول طراحی828.........................................................................................................................
-پردازنده های اختصاصی به جای حذف چرخه ها از ایستگاه های کاری بیکار
- I/Oمقیاس پذیر
اگرچه عناصر نرمافزار Beowulfبر روی پلتفرمهای مختلف پیادهسازی شدهاند ،واضحترین انتخاب برای یک پایه لینوکس است
و اکثر پیادهسازیهای Beowulfاز مجموعهای از ایستگاههای کاری لینوکس و/یا رایانههای شخصی استفاده میکنند.
شکل 16.16یک پیکربندی نماینده را نشان می دهد .این خوشه از تعدادی ایستگاه کاری ،شاید از پلتفرم های سخت افزاری
متفاوتی تشکیل شده است که همگی سیستم عامل لینوکس را اجرا می کنند .ذخیره سازی ثانویه در هر ایستگاه کاری ممکن
است برای دسترسی توزیع شده برای اشتراک گذاری فایل توزیع شده ،حافظه مجازی توزیع شده ،یا موارد دیگر در دسترس
باشد .گرههای خوشهای سیستمهای لینوکس با یک رویکرد شبکهای کاالیی ،معموالً اترنت ،به هم مرتبط هستند .پشتیبانی
اترنت ممکن است به شکل یک سوئیچ اترنت منفرد یا مجموعه ای از سوئیچ ها به هم متصل باشد .محصوالت اترنت کاال با نرخ
داده استاندارد 10مگابیت در ثانیه 100 ،مگابیت در ثانیه 1 ،گیگابیت در ثانیه استفاده می شود.
فضای ذخیره
سازی مشترک
توزیع شده
ایستگاه های کاری
لینوکس
828
سیستم عامل های داخلی و اصول طراحی829.........................................................................................................................
محیط نرم افزار Beowulfبه عنوان یک افزونه برای توزیع های لینوکس پایه بدون حق امتیاز تجاری در دسترس پیاده سازی
شده است .منبع اصلی نرمافزار متنباز Beowulfسایت Beowulfبه نشانی www.beowulf.orgاست ،اما بسیاری از
سازمانهای دیگر نیز ابزارها و ابزارهای رایگان Beowulfرا ارائه میدهند.
هر گره در خوشه Beowulfنسخه مخصوص به خود را از هسته لینوکس اجرا می کند و می تواند به عنوان یک سیستم
لینوکس مستقل عمل کند .برای پشتیبانی از مفهوم خوشه ،Beowulfبرنامههای افزودنی برای هسته لینوکس ایجاد میشود تا
به گرهها اجازه دهد در تعدادی از فضاهای نام جهانی شرکت کنند .در زیر نمونه هایی از نرم افزار سیستم Beowulfآورده
شده است:
-فضای فرآیند توزیع شده Beowulf BPROC:این بسته به یک فضای شناسه فرآیند اجازه می دهد تا چندین گره را در
یک محیط خوشه ای بپوشاند و همچنین مکانیسم هایی را برای شروع فرآیندها در سایر گره ها فراهم می کند .هدف این بسته
ارائه عناصر کلیدی مورد نیاز برای یک تصویر سیستم واحد در خوشه Beowulfاست BPROC .مکانیزمی را برای شروع
فرآیندها در گره های راه دور بدون ورود به گره دیگر و با قابل مشاهده کردن تمام فرآیندهای راه دور در جدول فرآیند گره
جلویی خوشه فراهم می کند.
-پیوند کانال اترنت Beowulf:این مکانیسمی است که چندین شبکه کم هزینه را به یک شبکه منطقی واحد با پهنای باند
باالتر متصل می کند .تنها کار اضافی که با استفاده از رابط شبکه منفرد انجام می شود ،کار ساده محاسباتی توزیع بسته ها بر
روی صف های انتقال دستگاه موجود است .این رویکرد اجازه می دهد تا تعادل بار را از طریق اترنت های متعدد متصل به
ایستگاه های کاری لینوکس انجام دهد.
Pvmsync: -این یک محیط برنامه نویسی است که مکانیسم های همگام سازی و اشیاء داده مشترک را برای فرآیندهای یک
خوشه Beowulfفراهم می کند.
EnFuzion: -EnFuzionاز مجموعه ای از ابزارها برای انجام محاسبات پارامتریک تشکیل شده است .محاسبات پارامتری
شامل اجرای یک برنامه به عنوان تعداد زیادی کار است که هر کدام پارامترها یا شرایط شروع متفاوتی دارند.
EnFusion -مجموعهای از کاربران ربات را در یک ماشین گره ریشه تقلید میکند ،که هر کدام به یکی از مشتریان زیادی که
یک خوشه را تشکیل میدهند وارد میشوند .هر کار برای اجرا با یک سناریوی برنامه ریزی شده منحصر به فرد ،با مجموعه ای از
شرایط شروع مناسب تنظیم شده است KAPP00.
829
سیستم عامل های داخلی و اصول طراحی830.........................................................................................................................
16.7خالصه
محاسبات مشتری/سرور کلید تحقق پتانسیل سیستمها و شبکههای اطالعاتی برای بهبود بهرهوری در سازمانها است .با
محاسبات کالینت/سرور ،برنامه ها در ایستگاه های کاری تک کاربره و رایانه های شخصی بین کاربران توزیع می شوند .در عین
حال ،منابعی که میتوانند و باید به اشتراک گذاشته شوند ،در سیستمهای سروری نگهداری میشوند که در دسترس همه
مشتریان است .بنابراین ،معماری مشتری/سرور ترکیبی از محاسبات غیرمتمرکز و متمرکز است.
به طور معمول ،سیستم مشتری یک رابط کاربری گرافیکی GUIارائه میکند که کاربر را قادر میسازد تا از انواع برنامههای
کاربردی با حداقل آموزش و سهولت نسبی بهرهبرداری کند .سرورها از ابزارهای مشترک مانند سیستم های مدیریت پایگاه داده
پشتیبانی می کنند .برنامه واقعی بین کالینت و سرور به گونه ای تقسیم می شود که هدف آن بهینه سازی سهولت استفاده و
عملکرد است.
مکانیسم کلیدی مورد نیاز در هر سیستم توزیع شده ،ارتباطات بین فرآیندی است .دو تکنیک رایج هستند .یک تسهیالت ارسال
پیام ،استفاده از پیام ها را در یک سیستم واحد تعمیم می دهد .همان نوع قراردادها و قوانین همگام سازی اعمال می شود .روش
دیگر استفاده از فراخوانی رویه از راه دور است .این تکنیکی است که توسط آن دو برنامه در ماشینهای مختلف با استفاده از
دستور فراخوانی/بازگشت رویه و معنایی تعامل دارند .هر دو برنامه فراخوانی و فراخوانی به گونه ای رفتار می کنند که انگار برنامه
شریک روی یک دستگاه اجرا می شود .خوشه گروهی از کامپیوترهای به هم پیوسته و کامل است که به عنوان یک منبع
محاسباتی یکپارچه با هم کار می کنند و می توانند توهم یک ماشین بودن را ایجاد کنند .واژه کل کامپیوتر به معنای سیستمی
است که می تواند جدا از خوشه به تنهایی کار کند.،
یک نمای کلی خوب از فناوری میان افزار و محصوالت BRIT04استMENA05 .مقایسه عملکرد فراخوانی رویه از راه دور
و ارسال پیام توزیع شده را فراهم می کندTANE85 .یک بررسی از سیستم عامل های توزیع شده است که هم ارتباطات
فرآیند توزیع شده و هم مدیریت فرآیند توزیع شده را پوشش می دهدCHAN90 .نمای کلی از سیستم عامل های ارسال پیام
توزیع شده را ارائه می دهدTAY90 .یک بررسی از رویکرد اتخاذ شده توسط سیستم عامل های مختلف در اجرای فراخوانی
روش از راه دور است Beowulf .تحت پوشش RIDG97. Windows Cluster Serverدر SHOR97توضیح داده شده
استRAJA00 .درمان دقیق تری را ارائه می دهدLAI06 .بررسی دقیقی از معماری Thin Clientارائه می دهد.
830
سیستم عامل های داخلی و اصول طراحی831.........................................................................................................................
شرایط کلیدی
رابط برنامه نویسی برنامه ها مشتری چربی شکست میان افزار پیام
خورده
خوشه مشتریBeowulf فراخوانی روش از راه دور
رابط کاربری گرافیکی RPC
ارسال پیام توزیع شده
سازگاری کش فایل تین کالینت سرور
بررسی سواالت
.16.2چه چیزی محاسبات مشتری/سرور را از هر شکل دیگری از پردازش داده های توزیع شده متمایز می کند؟
.16.4در مورد منطق مکان یابی برنامه ها در کالینت ،سرور یا تقسیم بین مشتری و سرور بحث کنید.
.16.5مشتریان چاق و مشتریان الغر چیست و چه تفاوت هایی در فلسفه این دو رویکرد وجود دارد؟
.16.6نکات مثبت و منفی را برای استراتژی های مشتری چاق و مشتری الغر پیشنهاد دهید.
831
سیستم عامل های داخلی و اصول طراحی832.........................................................................................................................
.16.9چون استانداردهایی مانند TCP/IPداریم ،چرا میان افزار مورد نیاز است؟
.16.10برخی از مزایا و معایب انسداد و غیرانسداد اولیه را برای ارسال پیام فهرست کنید.
.16.11برخی از مزایا و معایب اتصال غیرمداوم و پایدار برای RPCها را فهرست کنید.
.16.13چهار روش مختلف خوشه بندی را فهرست کرده و به طور خالصه تعریف کنید.
چالش ها و مسائل
.16.1درصدی از کد برنامه را که می توان به طور همزمان توسط nکامپیوتر در یک خوشه اجرا کرد ،در نظر بگیرید که هر
کامپیوتر از مجموعه پارامترها یا شرایط اولیه متفاوتی استفاده می کند .فرض کنید کد باقیمانده باید به صورت متوالی توسط
یک پردازنده واحد اجرا شود .نرخ اجرای هر پردازنده x MIPSاست.
آ .یک عبارت برای نرخ موثر MIPSدر هنگام استفاده از سیستم برای اجرای انحصاری این برنامه بر حسب . ،nو xاستخراج
کنید.
ب اگر n 16و x 4 MIPSباشد ،مقدار آن را تعیین کنید که عملکرد سیستم MIPS 40را به همراه خواهد داشت.
.16.2یک برنامه کاربردی بر روی یک خوشه نه کامپیوتری اجرا می شود .یک برنامه محک در این خوشه به زمان Tنیاز دارد.
عالوه بر این T %25 ،زمانی است که در آن برنامه به طور همزمان روی هر 9کامپیوتر اجرا می شود .زمان باقی مانده ،برنامه باید
روی یک کامپیوتر اجرا شود.
آ .سرعت موثر را در شرایط فوق در مقایسه با اجرای برنامه روی یک کامپیوتر محاسبه کنید .همچنین درصد کدهایی که در
برنامه قبلی موازی شده اند برنامه ریزی یا اجرا شده اند تا از حالت خوشه ای استفاده شود را محاسبه کنید.
ب فرض کنید که بتوانیم به طور موثر از 18کامپیوتر به جای 9کامپیوتر در قسمت موازی شده کد استفاده کنیم .سرعت
موثری که به دست می آید را محاسبه کنید.
.16.3برنامه FORTRANزیر بر روی کامپیوتر اجرا می شود و نسخه موازی آن بر روی یک خوشه 32کامپیوتری اجرا می
شود.
832
سیستم عامل های داخلی و اصول طراحی833.........................................................................................................................
فرض کنید خطوط 2و 4هر کدام دو زمان چرخه ماشین را شامل می شود که شامل تمام فعالیت های پردازشگر و دسترسی به
حافظه می شود .سربار ناشی از عبارات کنترل حلقه نرم افزار خطوط 5 ،3 ،1و تمام تضادهای سربار و منابع دیگر سیستم را
نادیده بگیرید.
آ .مجموع زمان اجرای برنامه در زمان چرخه ماشین برنامه در یک کامپیوتر منفرد چقدر است؟
ب تکرارهای حلقه Iرا بین 32کامپیوتر به صورت زیر تقسیم کنید :کامپیوتر 32 1تکرار اول را اجرا می کند I 1تا ،32
پردازنده 32 2تکرار بعدی را اجرا می کند و غیره .زمان اجرا و ضریب افزایش سرعت در مقایسه با قسمت الف چقدر است؟
توجه داشته باشید که حجم کار محاسباتی ،دیکته شده توسط ،J-loopدر بین کامپیوترها نامتعادل است.
ج توضیح دهید که چگونه می توان موازی سازی را تغییر داد تا اجرای موازی متعادل کل حجم کاری محاسباتی روی 32
کامپیوتر را تسهیل کند .بار متعادل به معنای تعداد مساوی از اضافات اختصاص داده شده به هر رایانه با توجه به هر دو حلقه
است.
د حداقل زمان اجرای حاصل از اجرای موازی در 32کامپیوتر چقدر است؟ افزایش سرعت حاصل از یک کامپیوتر منفرد چقدر
است؟
833