You are on page 1of 834

‫ویرایش‬

‫هشتم‬

‫سیستم های عامل‬


‫داخلی و اصول طراحی‬

‫ویلیام استالینگز‬

‫ویراستار‪ :‬فائزه بابایی‬ ‫مترجم‪ :‬مهسا تکیه نژاد‬


‫‪ASUS‬‬
‫سیستم عامل های داخلی و اصول طراحی‪1.........................................................................................................................‬‬

‫شناسنامه کتاب‬

‫سیستم عامل های‬


‫عنوان کتاب‪:‬‬
‫داخلی و اصول طراحی‬
‫ویلیام استالینگز‬ ‫مؤلف‪:‬‬
‫مهسا تکیه نژاد‬ ‫مترجم‪:‬‬
‫فائزه بابایی‬ ‫ویراستار‪:‬‬
‫فائزه بابایی‬ ‫صفحهآرایی و طراحی جلد‪:‬‬
‫‪Operating‬‬
‫‪systems:‬‬
‫عنوان انگلیسی کتاب‪:‬‬
‫‪internals and‬‬
‫‪design principles‬‬

‫‪1‬‬
‫سیستم عامل های داخلی و اصول طراحی‪2.........................................................................................................................‬‬

‫فهرست مطالب‬

‫فصل صفر راهنمای خوانندگان و مدرسان ‪7.........................................................................................................................................................‬‬

‫بخش ‪ 1‬پیشینه‬

‫فصل ‪ 1‬بررسی اجمالی سیستم کامپیوتری‪13.....................................................................................................................................................‬‬

‫فصل ‪ 2‬بررسی اجمالی سیستم عامل‪60.................................................................................................................................................................‬‬

‫بخش ‪ 2‬فرآیندها‬

‫فصل ‪ 3‬شرح و کنترل فرآیند‪134............................................................................................................................................................................‬‬

‫فصل ‪ 4‬رشته ها(نخ ها) ‪196.....................................................................................................................................................................................‬‬

‫فصل ‪ 5‬همزمانی‪ :‬حذف متقابل و همگام سازی‪253............................................................................................................................................‬‬

‫فصل ‪ 6‬همزمانی‪ :‬وقفه و ‪321.........................................................................................................................................................starvation‬‬

‫بخش ‪ 3‬حافظه‬

‫فصل ‪ 7‬مدیریت حافظه‪383.......................................................................................................................................................................................‬‬

‫فصل ‪ 8‬حافظه مجازی‪420.........................................................................................................................................................................................‬‬

‫بخش ‪ 4‬برنامه ریزی‬

‫فصل ‪ 9‬برنامه ریزی تک پردازنده‪486.....................................................................................................................................................................‬‬

‫فصل ‪ 10‬برنامه ریزی چند پردازنده‪ ،‬چند هسته ای و زمان حقیقی‪527........................................................................................................‬‬

‫بخش ‪ 5‬ورودی‪/‬خروجی و فایل ها‬

‫فصل ‪11‬مدیریت ورودی‪/‬خروجی و زمانبندی دیسک‪581..................................................................................................................................‬‬

‫فصل ‪ 12‬مدیریت فایل‪636........................................................................................................................................................................................‬‬

‫‪2‬‬
‫سیستم عامل های داخلی و اصول طراحی‪3.........................................................................................................................‬‬

‫بخش ‪ 6‬سیستم های تعبیه شده‬

‫فصل ‪ 13‬سیستم عامل های جاسازی شده‪699...................................................................................................................................................‬‬

‫فصل ‪ 14‬ماشین های مجازی‪721............................................................................................................................................................................‬‬

‫فصل ‪ 15‬امنیت سیستم عامل‪749...........................................................................................................................................................................‬‬

‫فصل ‪ 16‬پردازش توزیع شده‪ ،‬مشتری‪/‬سرور‪ ،‬و خوشه ها‪796...........................................................................................................................‬‬

‫***هر گونه کپی برداری از کتاب یا بخشی از آن دارای پیگرد قانونی می باشد‪.‬‬

‫‪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.1‬طرح کلی این کتاب‬

‫‪ 0.2‬نمونه سیستم‬

‫‪ 0.3‬نقشه راه برای خوانندگان و مدرسان‬

‫‪ 0.4‬منابع اینترنتی و وب‬

‫وب سایت هایی برای این کار‬

‫سایت منابع دانشجویی کتاب علوم کامپیوتر سایر وب سایت ها‬

‫‪ 0.1‬طرح کلی این کتاب‬

‫این کتاب در هشت بخش تنظیم شده است‪:‬‬

‫بخش اول‪ .‬پیش زمینه‪ :‬یک نمای کلی از معماری و سازماندهی کامپیوتر‪ ،‬با تاکید بر موضوعاتی که به طراحی سیستم عامل ‪OS‬‬
‫مربوط می شود‪ ،‬به عالوه مروری کلی بر مباحث سیستم عامل در ادامه کتاب ارائه می دهد‪.‬‬

‫بخش دوم‪ .‬فرآیندها‪ :‬تجزیه و تحلیل دقیقی از فرآیندها‪ ،‬چند رشته ای‪ ،‬چند پردازشی متقارن ‪ SMP‬و میکروکرنل ها را ارائه‬
‫می دهد‪ .‬این بخش همچنین به بررسی جنبه های کلیدی همزمانی در یک سیستم واحد‪ ،‬با تاکید بر موضوعات محرومیت و‬
‫وقفه متقابل می پردازد‪.‬‬

‫بخش سوم‪ .‬حافظه‪ :‬بررسی جامعی از تکنیک های مدیریت حافظه از جمله حافظه مجازی ارائه می دهد‪.‬‬

‫بخش چهارم‪ .‬زمانبندی‪ :‬بحث مقایسهای از رویکردهای مختلف برای زمانبندی فرآیند ارائه میکند‪ .‬زمانبندی موضوع‪،‬‬
‫زمانبندی ‪ SMP‬و زمانبندی بالدرنگ نیز مورد بررسی قرار میگیرند‪.‬‬

‫‪7‬‬
‫سیستم عامل های داخلی و اصول طراحی‪8.........................................................................................................................‬‬

‫بخش پنجم‪ .‬ورودی‪/‬خروجی و فایل ها‪ :‬مسائل مربوط به کنترل سیستم عامل عملکرد ‪ I/O‬را بررسی می کند‪ .‬توجه ویژه به‬
‫ورودی‪/‬خروجی دیسک‪ ،‬که کلید عملکرد سیستم است‪ ،‬اختصاص داده شده است‪ .‬همچنین یک نمای کلی از مدیریت فایل ارائه‬
‫می دهد‪.‬‬

‫بخش ششم سیستم های جاسازی شده‪ :‬تعداد سیستم های جاسازی شده بسیار بیشتر از سیستم های محاسباتی همه منظوره‬
‫است و تعدادی از چالش های سیستم عامل منحصر به فرد را ارائه می دهند‪ .‬این بخش شامل بحث در مورد اصول مشترک به‬
‫عالوه پوشش دو سیستم نمونه است‪ TinyOS :‬و ‪.eCos‬‬

‫بخش هفتم امنیت‪ :‬بررسی تهدیدها و مکانیسمهایی را برای تأمین امنیت رایانه و شبکه ارائه میکند‪.‬‬

‫بخش هشتم سیستم های توزیع شده‪ :‬روندهای اصلی در شبکه سازی سیستم های کامپیوتری‪ ،‬از جمله ‪ ،TCP/IP‬محاسبات‬
‫مشتری‪/‬سرور‪ ،‬و خوشه ها را بررسی می کند‪ .‬همچنین برخی از زمینه های طراحی کلیدی در توسعه سیستم عامل های توزیع‬
‫شده را توضیح می دهد‪.‬‬

‫تعدادی از فصلها و ضمیمههای آنالین موضوعات اضافی مرتبط با کتاب را پوشش میدهند‪.‬‬

‫‪ 0.2‬چند مثال از سیستم ها‬

‫این متن برای آشنایی خواننده با اصول طراحی و مسائل پیاده سازی سیستم عامل های معاصر در نظر گرفته شده است‪ .‬بر این‬
‫اساس‪ ،‬یک برخورد صرفاً مفهومی یا نظری ناکافی خواهد بود‪ .‬برای نشان دادن مفاهیم و پیوند آنها با انتخاب های طراحی دنیای‬
‫واقعی که باید انجام شوند‪ ،‬سه سیستم عامل به عنوان نمونه های در حال اجرا انتخاب شده اند‪:‬‬

‫‪ :Windows‬یک سیستم عامل چندوظیفه ای که برای اجرا بر روی انواع رایانه های شخصی‪ ،‬ایستگاه های کاری و سرورها‬
‫طراحی شده است‪ .‬این یکی از معدود سیستم عامل های تجاری اخیر است که اساساً از ابتدا طراحی شده است‪ .‬به این ترتیب‪،‬‬
‫در موقعیتی قرار دارد که میتواند جدیدترین پیشرفتها در فنآوری سیستمعامل را به روشی تمیز ترکیب کند‪ .‬نسخه فعلی ارائه‬
‫شده در این کتاب‪ ،‬ویندوز ‪ 7‬است‪.‬‬

‫یونیکس‪ :‬یک سیستم عامل چندوظیفه ای که در اصل برای کامپیوترهای کوچک در نظر گرفته شده بود اما بر روی طیف‬
‫وسیعی از ماشین ها از میکروکامپیوترهای قدرتمند گرفته تا ابررایانه ها پیاده سازی شد‪ .‬شامل این موضوع لینوکس است‪.‬‬

‫اندروید‪ :‬اندروید پلتفرم غالب موبایل است‪ .‬محدودیتهای دنیای واقعی و محیط عملیاتی دستگاههای تلفن همراه با رایانههای‬
‫رومیزی یا سرور سنتی کامالً متفاوت است‪ .‬یادگیری این محیط جدید برای دانش آموزان مهم است‪ .‬این کتاب جزئیات داخلی‬
‫اندروید را ارائه می دهد‪.‬‬

‫‪8‬‬
‫سیستم عامل های داخلی و اصول طراحی‪9.........................................................................................................................‬‬

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

‫‪ 0.3‬یک نقشه راه برای خوانندگان و مربیان‬

‫طبیعی است که خواننده ترتیب خاص موضوعات ارائه شده در این کتاب را زیر سوال ببرد‪ .‬به عنوان مثال‪ ،‬مبحث زمانبندی‬
‫فصل ‪ 9‬و ‪ 10‬ارتباط نزدیکی با مباحث همزمانی فصل ‪ 5‬و ‪ 6‬و موضوع کلی فرآیندها فصل ‪ 3‬دارد و ممکن است به طور منطقی‬
‫بالفاصله پس از آن مباحث پوشش داده شود‪.‬‬

‫مشکل این است که موضوعات مختلف بسیار به هم مرتبط هستند‪ .‬به عنوان مثال‪ ،‬در بحث حافظه مجازی‪ ،‬اشاره به مسائل زمان‬
‫بندی مربوط به خطای صفحه مفید است‪ .‬البته اشاره به برخی مسائل مربوط به مدیریت حافظه هنگام بحث در مورد تصمیمات‬
‫زمان بندی نیز مفید است‪ .‬این نوع مثال را میتوان بیپایان تکرار کرد‪ :‬بحث در مورد زمانبندی نیاز به درک کمی از مدیریت‬
‫ورودی‪/‬خروجی دارد و بالعکس‪.‬‬

‫شکل ‪ 0.1‬برخی از روابط متقابل مهم بین موضوعات را نشان می دهد‪ .‬خطوط جامد نشان دهنده روابط بسیار قوی‪ ،‬از نقطه نظر‬
‫تصمیمات طراحی و اجرا است‪ .‬بر اساس این نمودار‪ ،‬منطقی است که با یک بحث اساسی در مورد فرآیندها‪ ،‬که در فصل ‪ 3‬انجام‬
‫می دهیم‪ ،‬شروع کنیم‪ .‬پس از آن‪ ،‬ترتیب تا حدودی دلخواه است‪ .‬بسیاری از روشهای سیستمعامل در ابتدا همه مواد را روی‬
‫فرآیندها جمعآوری میکنند و سپس به موضوعات دیگر میپردازند‪ .‬این قطعا معتبر است‪ .‬با این حال‪ ،‬اهمیت مرکزی مدیریت‬
‫حافظه‪ ،‬که به اعتقاد من اهمیتی برابر با مدیریت فرآیند دارد‪ ،‬منجر به تصمیمگیری برای ارائه این مطالب قبل از نگاهی عمیق به‬
‫زمانبندی شده است‪.‬‬

‫‪9‬‬
‫سیستم عامل های داخلی و اصول طراحی‪10.........................................................................................................................‬‬

‫شرح و کنترل‬
‫فرآیند‬

‫مدیریت‬ ‫همزمانی‬
‫برنامه ریزی‬
‫حافظه‬

‫‪I/O‬و مدیریت‬ ‫سیستم های‬


‫فایل‬ ‫جاسازی شده‬

‫سیستم های‬
‫توزیع شده‬
‫امنیت‬

‫شکل ‪ 0.1‬موضوعات سیستم عامل‬

‫راهحل ایدهآل این است که دانشآموز پس از تکمیل فصلهای ‪ 1‬تا ‪ 3‬از سری‪ ،‬فصلهای زیر را به صورت موازی بخواند و جذب‬
‫کند‪ 4 :‬و سپس اختیاری ‪ 6 .5‬به دنبال آن ‪ 8 ;7‬به دنبال آن اختیاری ‪ .10 ;9‬قسمت های باقی مانده را می توان به هر ترتیبی‬
‫انجام داد‪ .‬با این حال‪ ،‬اگرچه مغز انسان ممکن است درگیر پردازش موازی باشد‪ ،‬دانشآموز انسانی کار موفقیتآمیز با چهار‬
‫نسخه از یک کتاب را به طور همزمان در چهار فصل مختلف غیرممکن و گرانقیمت میبیند‪ .‬با توجه به ضرورت ترتیب خطی‪ ،‬به‬
‫نظر من ترتیب استفاده شده در این کتاب بیشترین تأثیر را دارد‪.‬‬

‫نظر پایانی فصل ‪ ،2‬به ویژه بخش ‪ ،2.3‬نمای سطح باالیی از تمام مفاهیم کلیدی تحت پوشش در فصل های بعدی را ارائه می‬
‫دهد‪ .‬بنابراین‪ ،‬پس از خواندن فصل ‪ ،2‬انعطاف پذیری قابل توجهی در انتخاب ترتیب خواندن فصل های باقی مانده وجود دارد‪.‬‬

‫‪ 0.4‬منابع اینترنت و وب‬

‫منابع متعددی در اینترنت و وب برای پشتیبانی از این کتاب و برای همگام شدن با پیشرفتها در این زمینه وجود دارد‪.‬‬

‫وب سایت های این کتاب‬

‫سه وب سایت منابع اضافی را برای دانش آموزان و مربیان فراهم می کنند‪ .‬یک وب سایت همراه برای این کتاب به آدرس‬
‫‪ /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.5‬سلسله مراتب حافظه‬

‫‪ 1.6‬حافظه کش‬

‫‪ 1.7‬دسترسی مستقیم به حافظه‬

‫‪ 1.8‬چند پردازنده و سازمان چند هسته ای متقارن چند پردازنده کامپیوترهای چند هسته ای‬

‫‪ 1.9‬مطالعه توصیه شده‬

‫‪ 1.10‬اصطالحات کلیدی‪ ،‬بررسی سواالت و مشکالت ضمیمه ‪ A1‬ویژگی های عملکرد حافظه های دو سطحی محل عملکرد‬
‫حافظه دو سطحی‬

‫‪13‬‬
‫سیستم عامل های داخلی و اصول طراحی‪14.........................................................................................................................‬‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬عناصر اساسی یک سیستم کامپیوتری و رابطه متقابل آنها را توضیح دهید‪.‬‬

‫‪ -‬مراحل انجام شده توسط یک پردازنده برای اجرای یک دستورالعمل را توضیح دهید‪.‬‬

‫‪ -‬درک مفهوم وقفه ها و چگونگی و چرایی استفاده پردازنده از وقفه ها‪.‬‬

‫‪ -‬سطوح سلسله مراتب حافظه معمولی رایانه را فهرست و توصیف کنید‪.‬‬

‫‪ -‬ویژگی های اساسی سازمان های چند پردازنده ای و چند هسته ای را توضیح دهید‪.‬‬

‫‪ -‬مفهوم محلی بودن را مورد بحث قرار دهید و عملکرد یک سلسله مراتب حافظه چند سطحی را تجزیه و تحلیل کنید‪.‬‬

‫‪ -‬عملکرد یک پشته و استفاده از آن برای پشتیبانی از فراخوانی و بازگشت رویه را درک کنید‪.‬‬

‫یک سیستم عامل ‪ OS‬از منابع سخت افزاری یک یا چند پردازنده برای ارائه مجموعه ای از خدمات به کاربران سیستم سوء‬
‫استفاده می کند‪ .‬این سیستم عامل همچنین حافظه ثانویه و دستگاه های ورودی‪/‬خروجی ورودی‪/‬خروجی را از طرف کاربران‬
‫خود مدیریت می کند‪ .‬بر این اساس‪ ،‬قبل از شروع بررسی سیستمعاملها‪ ،‬داشتن درک درستی از سختافزار سیستمهای‬
‫کامپیوتری ضروری است‪ .‬در این فصل مروری بر سخت افزار سیستم کامپیوتری ارائه می شود‪ .‬در بیشتر زمینه ها‪ ،‬نظرسنجی‬
‫مختصر است‪ ،‬زیرا فرض بر این است که خواننده با این موضوع آشنا است‪ .‬با این حال‪ ،‬چندین حوزه به دلیل اهمیت آنها برای‬
‫موضوعاتی که بعداً در کتاب پوشش داده می شوند‪ ،‬با جزئیات مورد بررسی قرار گرفته اند‪ .‬موضوعات بیشتر در پیوست ‪C‬‬
‫پوشش داده شده است‪.‬‬

‫‪ 1.1‬عناصر اساسی‬

‫در سطح باال‪ ،‬یک کامپیوتر از پردازنده‪ ،‬حافظه و اجزای ورودی‪/‬خروجی با یک یا چند ماژول از هر نوع تشکیل شده است‪ .‬این‬
‫اجزا به نوعی به هم متصل می شوند تا به عملکرد اصلی رایانه که اجرای برنامه ها است‪ ،‬دست یابند‪ .‬بنابراین‪ ،‬چهار عنصر‬
‫ساختاری اصلی وجود دارد‪:‬‬

‫‪ -‬پردازنده‪ :‬عملکرد کامپیوتر را کنترل می کند و عملکردهای پردازش داده آن را انجام می دهد‪ .‬هنگامی که تنها یک‬
‫پردازنده وجود دارد‪ ،‬اغلب به عنوان واحد پردازش مرکزی ‪ CPU‬شناخته می شود‪.‬‬

‫‪14‬‬
‫سیستم عامل های داخلی و اصول طراحی‪15.........................................................................................................................‬‬

‫‪ -‬حافظه اصلی‪ :‬داده ها و برنامه ها را ذخیره می کند‪ .‬این حافظه معموالً فرار است‪ .‬یعنی وقتی کامپیوتر خاموش می شود‪،‬‬
‫محتویات حافظه از بین می رود‪ .‬در مقابل‪ ،‬محتویات حافظه دیسک حتی زمانی که سیستم کامپیوتری خاموش است‪،‬‬
‫حفظ می شود‪ .‬حافظه اصلی به عنوان حافظه حقیقی یا حافظه اصلی نیز شناخته می شود‪.‬‬

‫حافظه اصلی‬

‫‪ = PC‬شمارنده برنامه‬
‫‪ = IR‬ثبت دستورالعمل‬
‫‪ = MAR‬ثبت آدرس حافظه‬
‫‪ = MBR‬ثبت بافر حافظه‬
‫‪ = I/O AR‬ثبت آدرس ورودی‪/‬خروجی‬
‫‪ = I/O BR‬ثبت بافر ورودی‪/‬خروجی‬

‫شکل ‪ 1.1‬اجزای کامپیوتر‪ :‬نمای سطح باال‬

‫‪ -‬ماژول های ورودی‪/‬خروجی‪ :‬داده ها را بین رایانه و محیط خارجی آن جابه جا می کند‪ .‬محیط خارجی شامل انواع دستگاهها‪،‬‬
‫از جمله دستگاههای حافظه ثانویه به عنوان مثال‪ ،‬دیسک‪ ،‬تجهیزات ارتباطی و پایانهها است‪.‬‬

‫‪ -‬گذرگاه سیستم‪ :‬ارتباط بین پردازنده ها‪ ،‬حافظه اصلی و ماژول های ورودی‪/‬خروجی را فراهم می کند‪.‬‬

‫شکل ‪ 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‬نشان داده شده است‪ .‬این دو‬
‫مرحله به عنوان مرحله واکشی و مرحله اجرا نامیده می شوند‪ .‬اجرای برنامه فقط در صورتی متوقف می شود که پردازنده خاموش‬
‫باشد‪ ،‬نوعی خطای غیرقابل بازیابی رخ دهد یا دستورالعمل برنامه ای که پردازنده را متوقف می کند مواجه شود‪.‬‬

‫مرحله واکشی‬ ‫مرحله اجرا شود‬

‫شروع‬ ‫واکشی دستورالعمل‬


‫دستور را اجرا کنید‬ ‫مکث‬
‫بعدی‬

‫شکل ‪ 1.2‬چرخه دستورالعمل اصلی‬

‫در ابتدای هر چرخه دستورالعمل‪ ،‬پردازنده یک دستورالعمل را از حافظه واکشی می کند‪ .‬به طور معمول‪ ،‬شمارنده برنامه ‪PC‬‬
‫آدرس دستور بعدی را که باید واکشی می شود‪ ،‬نگه می دارد‪ .‬مگر اینکه دستور دیگری داده شود‪ ،‬پردازنده همیشه کامپیوتر را‬
‫بعد از هر واکشی دستورالعمل افزایش می دهد تا دستور بعدی را به ترتیب یعنی دستورالعملی که در آدرس حافظه باالتر بعدی‬
‫قرار دارد واکشی کند‪ .‬به عنوان مثال‪ ،‬یک کامپیوتر ساده شده را در نظر بگیرید که در آن هر دستورالعمل یک کلمه ‪ 16‬بیتی از‬
‫حافظه را اشغال می کند‪ .‬فرض کنید که شمارنده برنامه روی مکان ‪ 300‬تنظیم شده است‪ .‬پردازنده در مرحله بعدی‬

‫‪17‬‬
‫سیستم عامل های داخلی و اصول طراحی‪18.........................................................................................................................‬‬

‫دستورالعمل را در مکان ‪ 300‬واکشی می کند‪ .‬در چرخه های دستورالعمل بعدی‪ ،‬دستورالعمل ها را از مکان های ‪،302 ،301‬‬
‫‪ 303‬و غیره دریافت می کند‪ .‬این توالی ممکن است تغییر یابد‪ ،‬همانطور که در ادامه توضیح داده شد‪.‬‬

‫آدرس دستورالعمل = )‪ (PC‬شمارنده برنامه‬

‫‪ Acumulator‬دستور در حال اجرا = )‪ (IR‬ثبت دستورالعمل‬

‫ذخیره سازی موقت = )‪(AC‬‬

‫‪ CPU‬ج) رجیسترهای داخلی‬

‫را از حافظه بارگیری کنید ‪0001 = AC‬‬


‫را در حافظه ذخیره کنید ‪0010 = AC‬‬
‫اضافه کنید ‪ AC‬از حافظه به = ‪0101‬‬
‫(د) فهرست جزئی از کدهای عملیاتی‬

‫شکل ‪ 1.3‬ویژگی های یک ماشین فرضی‬

‫دستورالعمل واکشی شده در ثبت دستورالعمل ‪ 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‬است‪.‬‬

‫‪ .3‬دستورالعمل بعدی ‪ 5941‬از مکان ‪ 301‬واکشی شده و ‪ PC‬افزایش یافته است‪.‬‬

‫‪ .4‬محتویات قدیمی ‪ AC‬و محتویات محل ‪ 941‬اضافه شده و نتیجه در ‪ AC‬ذخیره می شود‪.‬‬

‫‪ .5‬دستورالعمل بعدی ‪ 2941‬از مکان ‪ 302‬واکشی شده و ‪ PC‬افزایش یافته است‪.‬‬

‫‪ .6‬محتویات ‪ AC‬در محل ‪ 941‬ذخیره می شود‪.‬‬

‫‪ 1‬یک تجدید کننده اساسی در مورد سیستم های اعداد (اعشاری‪ ،‬باینری‪ ،‬هگزادسیمال) را می توان در سایت منابع دانشجویی علوم کامپیوتر در ‪ComputerScien‬‬
‫‪eStudent.com‬یافت‪.‬‬
‫‪19‬‬
‫سیستم عامل های داخلی و اصول طراحی‪20.........................................................................................................................‬‬

‫شکل ‪ 1.4‬مثالی از اجرای برنامه محتوای حافظه و رجیسترها به صورت هگزادسیمال‬

‫در این مثال‪ ،‬برای افزودن محتویات مکان ‪ 940‬به محتویات ‪ ،941‬به سه چرخه دستورالعمل‪ ،‬که هر کدام از یک مرحله واکشی‬
‫و یک مرحله اجرا تشکیل میشود‪ ،‬نیاز است‪ .‬با مجموعه پیچیدهتری از دستورالعملها‪ ،‬چرخههای دستورالعمل کمتری مورد نیاز‬
‫است‪ .‬اکثر پردازنده های مدرن شامل دستورالعمل هایی هستند که بیش از یک آدرس دارند‪ .‬بنابراین مرحله اجرا برای یک‬
‫دستورالعمل خاص ممکن است شامل بیش از یک مرجع به حافظه باشد‪ .‬همچنین‪ ،‬به جای مراجع حافظه‪ ،‬یک دستورالعمل‬
‫ممکن است یک عملیات ‪ I/O‬را مشخص کند‪.‬‬

‫‪ 1.4‬وقفه‬

‫تقریباً همه رایانهها مکانیزمی را ارائه میکنند که توسط آن سایر ماژولها ‪ ،I/O‬حافظه ممکن است توالی عادی پردازنده را‬
‫مختل کنند‪ .‬جدول ‪ 1.1‬رایج ترین کالس های وقفه ها را فهرست می کند‪.‬‬

‫‪20‬‬
‫سیستم عامل های داخلی و اصول طراحی‪21.........................................................................................................................‬‬

‫جدول ‪ 1.1‬کالس های وقفه‬

‫ایجاد شده توسط شرایطی که در نتیجه اجرای یک دستورالعمل رخ می برنامه‬


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

‫وقفه ها در درجه اول به عنوان راهی برای بهبود استفاده از پردازنده ارائه می شوند‪ .‬برای مثال‪ ،‬اکثر دستگاه های ورودی‪/‬خروجی‬
‫بسیار کندتر از پردازنده هستند‪ .‬فرض کنید که پردازنده با استفاده از طرح چرخه دستورالعمل شکل ‪ 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‬‬

‫شکل ‪ 1.5‬جریان برنامه کنترل بدون وقفه و با وقفه‬

‫‪22‬‬
‫سیستم عامل های داخلی و اصول طراحی‪23.........................................................................................................................‬‬

‫وقفه ها و چرخه دستورالعمل‬

‫با وقفه‪ ،‬پردازنده می تواند در اجرای دستورالعمل های دیگر در حالی که عملیات ‪ I/O‬در حال انجام است‪ ،‬مشغول شود‪ .‬جریان‬
‫کنترل را در شکل ‪ b1.5‬در نظر بگیرید‪ .‬همانطور که قبالً‪ ،‬برنامه کاربر به نقطه ای می رسد که در آن یک فراخوانی سیستمی به‬
‫شکل یک فراخوانی ‪ WRITE‬برقرار می کند‪ .‬برنامه ورودی‪/‬خروجی که در این مورد فراخوانی میشود‪ ،‬فقط شامل کد‬
‫آمادهسازی و دستور واقعی ورودی‪/‬خروجی میشود‪ .‬پس از اجرای این چند دستورالعمل‪ ،‬کنترل به برنامه کاربر باز می گردد‪ .‬در‬
‫همین حال‪ ،‬دستگاه خارجی مشغول پذیرش داده ها از حافظه رایانه و چاپ آن است‪ .‬این عملیات ‪ I/O‬همزمان با اجرای‬
‫دستورالعمل ها در برنامه کاربر انجام می شود‪.‬‬

‫هنگامی که دستگاه خارجی آماده سرویس می شود‪ ،‬یعنی زمانی که آماده پذیرش داده های بیشتری از پردازنده است‪ ،‬ماژول‬
‫‪ I/O‬برای آن دستگاه خارجی یک سیگنال درخواست وقفه به پردازنده ارسال می کند‪ .‬پردازنده با تعلیق عملکرد برنامه فعلی‬
‫پاسخ می دهد‪ .‬انشعاب به یک روال برای سرویس دهی به دستگاه ورودی‪/‬خروجی خاص که به عنوان کنترل کننده وقفه‬
‫شناخته می شود‪ .‬و از سرگیری اجرای اصلی پس از سرویس دستگاه‪ .‬نقاطی که چنین وقفه هایی در آنها رخ می دهد در شکل‬
‫‪ b1.5‬نشان داده شده است‪ .‬توجه داشته باشید که وقفه می تواند در هر نقطه از برنامه اصلی رخ دهد‪ ،‬نه فقط در یک‬
‫دستورالعمل خاص‪.‬‬

‫برای برنامه کاربر‪ ،‬یک وقفه توالی عادی اجرا را به حالت تعلیق در می آورد‪ .‬هنگامی که پردازش وقفه کامل شد‪ ،‬اجرا از سر‬
‫گرفته می شود شکل ‪ .1.6‬بنابراین‪ ،‬برنامه کاربر نیازی به کد خاصی برای تطبیق وقفه ندارد‪ .‬پردازنده و سیستم عامل مسئول‬
‫تعلیق برنامه کاربر و سپس از سرگیری آن در همان نقطه هستند‪.‬‬

‫برنامه کاربر‬ ‫کنترل کننده وقفه‬

‫وقفه در اینجا رخ‬


‫می دهد‬

‫شکل ‪ 1.6‬انتقال کنترل از طریق وقفه ها‬

‫‪23‬‬
‫سیستم عامل های داخلی و اصول طراحی‪24.........................................................................................................................‬‬

‫همانطور که در شکل ‪ 1.7‬نشان داده شده است‪ ،‬برای تطبیق وقفه ها‪ ،‬یک مرحله وقفه به چرخه دستورالعمل اضافه می شود‬
‫شکل ‪ 1.2‬را مقایسه کنید‪ .‬در مرحله وقفه‪ ،‬پردازنده بررسی می کند که آیا وقفه ای رخ داده است که با وجود سیگنال وقفه‬
‫مشخص می شود‪ .‬اگر هیچ وقفهای معلق نباشد‪ ،‬پردازنده به مرحله واکشی میرود و دستورالعمل بعدی برنامه فعلی را واکشی‬
‫میکند‪ .‬اگر یک وقفه در حال تعلیق باشد‪ ،‬پردازنده اجرای برنامه فعلی را به حالت تعلیق در می آورد و یک روال کنترل کننده‬
‫وقفه را اجرا می کند‪ .‬روال کنترل کننده وقفه عموماً بخشی از سیستم عامل است‪ .‬به طور معمول‪ ،‬این روال ماهیت وقفه را‬
‫تعیین می کند و هر گونه اقدامات مورد نیاز را انجام می دهد‪ .‬در مثالی که استفاده میکنیم‪ ،‬کنترلکننده تعیین میکند که‬
‫کدام ماژول ‪ I/O‬باعث ایجاد وقفه شده است و ممکن است به برنامهای منشعب شود که دادههای بیشتری را در آن ماژول ‪I/O‬‬
‫بنویسد‪ .‬هنگامی که روال کنترل کننده وقفه کامل شد‪ ،‬پردازنده می تواند اجرای برنامه کاربر را در نقطه وقفه از سر بگیرد‪.‬‬

‫مرحله واکشی‬ ‫مرحله اجرا شود‬ ‫مرحله واکشی‬

‫وقفه ها‬
‫غیرفعال است‬

‫واکشی‬ ‫دستور را اجرا‬ ‫بررسی وقفه؛ راه‬


‫شروع‬ ‫دستورالعمل بعدی‬ ‫اندازی کنترل کننده‬
‫کنید‬
‫وقفه ها‬ ‫وقفه‬
‫فعال شد‬

‫مکث‬

‫شکل ‪ 1.7‬چرخه دستورالعمل با وقفه‬

‫واضح است که در این فرآیند مقداری سربار دخیل است‪ .‬برای تعیین ماهیت وقفه و تصمیم گیری در مورد اقدام مناسب باید‬
‫دستورالعمل های اضافی در کنترل کننده وقفه اجرا شود‪ .‬با این وجود‪ ،‬به دلیل زمان نسبتاً زیادی که صرفاً با انتظار در یک‬
‫عملیات ‪ 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‬؛ پردازنده‬
‫با اجرای پردازنده‬
‫منتظر می ماند‬

‫عملیات‪ I/O‬؛‬ ‫عملیات ‪ I/O‬همزمان‬


‫پردازنده منتظر می‬ ‫با اجرای پردازنده‬
‫ماند‬

‫ب) با وقفه‬

‫الف) بدون وقفه‬

‫شکل ‪ 1.8‬زمان بندی برنامه‪ :‬انتظار کوتاه ‪I/O‬‬

‫‪25‬‬
‫سیستم عامل های داخلی و اصول طراحی‪26.........................................................................................................................‬‬

‫عملیات‪ I/O‬؛‬
‫عملیات ‪ I/O‬همزمان‬
‫پردازنده منتظر می‬
‫با اجرای پردازنده‪.‬‬
‫ماند‬
‫سپس پردازنده منتظر‬
‫می ماند‬

‫عملیات ‪ I/O‬همزمان‬
‫با اجرای پردازنده‪.‬‬
‫عملیات‪ I/O‬؛‬
‫سپس پردازنده منتظر‬
‫پردازنده منتظر می‬
‫می ماند‬
‫ماند‬

‫ب) با وقفه‬

‫الف) بدون وقفه‬

‫شکل ‪ 1.9‬زمان بندی برنامه‪ :‬انتظار طوالنی ‪I/O‬‬

‫‪26‬‬
‫سیستم عامل های داخلی و اصول طراحی‪27.........................................................................................................................‬‬

‫سخت افزار‬ ‫نرم افزار‬

‫کنترل کننده دستگاه یا سایر سخت‬


‫افزارهای سیستم وقفه ایجاد می‬
‫کند‬
‫باقیمانده اطالعات وضعیت فرآیند‬
‫را ذخیره کنید‬

‫پردازشگر اجرای دستور فعلی را‬


‫به پایان می رساند‬

‫وقفه در فرآیند‬

‫پردازشگر وقفه را تایید می کند‬

‫بازیابی اطالعات وضعیت فرآیند‬

‫را به پشته ‪ PC‬و ‪ PSW‬پردازنده‬


‫کنترل فشار می دهد‬

‫‪PSW‬و ‪ PC‬قدیمی را بازیابی‬


‫کنید‬
‫پردازنده مقدار جدید رایانه‬
‫شخصی را بر اساس وقفه‬
‫بارگذاری می کند‬

‫شکل ‪ 1.10‬پردازش وقفه ساده‬

‫شکل ‪ 1.10‬پردازش وقفه ساده‬

‫‪27‬‬
‫سیستم عامل های داخلی و اصول طراحی‪28.........................................................................................................................‬‬

‫وقفه در پردازش‬

‫یک وقفه باعث ایجاد تعدادی رویداد‪ ،‬هم در سخت افزار پردازنده و هم در نرم افزار می شود‪ .‬شکل ‪ 1.10‬یک توالی معمولی را‬
‫نشان می دهد‪ .‬هنگامی که یک دستگاه ‪ I/O‬عملیات ‪ I/O‬را کامل می کند‪ ،‬توالی زیر از رویدادهای سخت افزاری رخ می دهد‪:‬‬

‫‪ .1‬دستگاه یک سیگنال وقفه به پردازنده صادر می کند‪.‬‬

‫‪ .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‬و شمارنده برنامه از پشته است‪ .‬در نتیجه دستور بعدی که باید اجرا شود از برنامه قطع شده‬
‫قبلی خواهد بود‪ .‬مهم است که تمام اطالعات وضعیت برنامه قطع شده را برای ازسرگیری بعدی ذخیره کنید‪ .‬این به این دلیل‬
‫است که وقفه یک روال فراخوانی از برنامه نیست‪ .‬در عوض‪ ،‬وقفه می تواند در هر زمان و بنابراین در هر نقطه از اجرای یک‬
‫برنامه کاربر رخ دهد‪ .‬وقوع آن غیر قابل پیش بینی است‪.‬‬

‫(الف) وقفه پس از دستور در محل ‪ N‬رخ می دهد‬ ‫(ب) بازگشت از وقفه‬

‫شکل ‪ 1.11‬تغییرات در حافظه و ثبت برای یک وقفه‬

‫‪29‬‬
‫سیستم عامل های داخلی و اصول طراحی‪30.........................................................................................................................‬‬

‫وقفه های متعدد‬

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

‫برای مقابله با وقفه های متعدد می توان دو رویکرد را در نظر گرفت‪ .‬اولین مورد‪ ،‬غیرفعال کردن وقفه ها در حین پردازش یک‬
‫وقفه است‪ .‬وقفه غیرفعال به سادگی به این معنی است که پردازنده هر سیگنال درخواست وقفه جدیدی را نادیده می گیرد‪ .‬اگر‬
‫در این مدت وقفه ای رخ دهد‪ ،‬معموالً در حالت تعلیق باقی می ماند و پس از اینکه پردازنده دوباره وقفه ها را فعال کرد‪ ،‬توسط‬
‫پردازنده بررسی می شود‪ .‬بنابراین‪ ،‬اگر یک وقفه در هنگام اجرای یک برنامه کاربر رخ دهد‪ ،‬وقفه ها بالفاصله غیرفعال می شوند‪.‬‬
‫پس از تکمیل روال کنترل کننده وقفه‪ ،‬قبل از شروع مجدد برنامه کاربر‪ ،‬وقفه ها دوباره فعال می شوند و پردازنده بررسی می‬
‫کند که آیا وقفه های اضافی رخ داده است یا خیر‪ .‬این رویکرد ساده است‪ ،‬زیرا وقفهها به ترتیب دقیق مدیریت میشوند شکل‬
‫‪.a1.12‬‬

‫‪30‬‬
‫سیستم عامل های داخلی و اصول طراحی‪31.........................................................................................................................‬‬

‫برنامه کاربر‬ ‫کنترل کننده وقفه‪X‬‬

‫کنترل کننده وقفه‪Y‬‬

‫(الف) پردازش وقفه متوالی‬

‫برنامه کاربر‬ ‫کنترل کننده وقفه‪X‬‬

‫کنترل کننده وقفه‪Y‬‬

‫(ب) پردازش وقفه تو در تو(متعدد)‬

‫شکل ‪ 1.12‬انتقال کنترل با وقفه های متعدد‬

‫اشکال رویکرد قبلی این است که اولویت نسبی یا نیازهای بحرانی زمانی را در نظر نمی گیرد‪ .‬به عنوان مثال‪ ،‬زمانی که ورودی از‬
‫خط ارتباطی می رسد‪ ،‬ممکن است نیاز باشد که به سرعت جذب شود تا فضای بیشتری برای ورودی ایجاد شود‪ .‬اگر دسته اول‬
‫ورودی قبل از رسیدن دسته دوم پردازش نشده باشد‪ ،‬ممکن است داده ها از بین بروند زیرا ممکن است بافر روی دستگاه‬
‫ورودی‪/‬خروجی پر شده و سرریز شود‪.‬‬

‫‪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‬کامل شد‪ ،‬کنترل در نهایت به برنامه کاربر باز می گردد‪.‬‬

‫برنامه کاربر‬ ‫روال سرویس قطع چاپگر‬ ‫روال خدمات قطع ارتباط‬

‫روال سرویس وقفه دیسک‬

‫شکل ‪ 1.13‬نمونه توالی زمانی وقفه های متعدد‬

‫‪32‬‬
‫سیستم عامل های داخلی و اصول طراحی‪33.........................................................................................................................‬‬

‫‪ 1.5‬سلسله مراتب حافظه‬

‫محدودیت های طراحی روی حافظه کامپیوتر را می توان با سه سوال خالصه کرد‪ :‬چقدر؟ چقدر سریع؟ چقدر گران؟‬

‫این سوال که چقدر تا حدودی باز است به پایان رسید‪ .‬اگر ظرفیت وجود داشته باشد‪ ،‬احتماالً برنامه هایی برای استفاده از آن‬
‫توسعه خواهند یافت‪ .‬به این سوال که چقدر سریع می توان به یک معنا پاسخ داد‪ .‬برای دستیابی به بهترین عملکرد‪ ،‬حافظه باید‬
‫بتواند با پردازنده هماهنگ باشد‪ .‬یعنی از آنجایی که پردازنده در حال اجرای دستورالعملها است‪ ،‬نمیخواهیم منتظر دستورات‬
‫یا عملوندها باشد‪ .‬سوال آخر را نیز باید در نظر گرفت‪ .‬برای یک سیستم عملی‪ ،‬هزینه حافظه باید در رابطه با سایر اجزا معقول‬
‫باشد‪.‬‬

‫همانطور که انتظار می رود‪ ،‬بین سه ویژگی کلیدی حافظه‪ ،‬یعنی ظرفیت‪ ،‬زمان دسترسی و هزینه‪ ،‬تعادل وجود دارد‪ .‬فناوریهای‬
‫مختلفی برای پیادهسازی سیستمهای حافظه استفاده میشود و در این طیف از فناوریها‪ ،‬روابط زیر برقرار است‪:‬‬

‫‪ -‬زمان دسترسی سریعتر‪ ،‬هزینه بیشتر برای هر بیت ‪ 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‬درصد از دسترسی های حافظه در حافظه پنهان یافت می شود‬

‫‪ .H = 0.9521‬سپس میانگین زمان دسترسی به یک بایت را می توان به صورت بیان کرد‬

‫‪ms2 + 10.052 10.1 ms + 1 ms2 = 0.095 + 0.055 = 0.15 ms 10.1 10.952‬‬

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

‫مبنای اعتبار شرط ‪ d‬یک اصل است که به عنوان محلی بودن مرجع ‪ DENN68‬شناخته می شود‪ .‬در طول اجرای یک برنامه‪،‬‬
‫مراجع حافظه توسط پردازنده‪ ،‬هم برای دستورالعمل ها و هم برای داده ها‪ ،‬تمایل به خوشه بندی دارند‪ .‬برنامه ها معموالً شامل‬
‫تعدادی حلقه تکراری و زیر روال هستند‪ .‬هنگامی که یک حلقه یا زیربرنامه وارد می شود‪ ،‬ارجاعات مکرری به مجموعه کوچکی‬
‫از دستورالعمل ها وجود دارد‪ .‬به طور مشابه‪ ،‬عملیات روی جداول و آرایه ها شامل دسترسی به مجموعه ای خوشه ای از بایت‬
‫های داده است‪ .‬در یک دوره زمانی طوالنی‪ ،‬خوشههای مورد استفاده تغییر میکنند‪ ،‬اما در یک دوره زمانی کوتاه‪ ،‬پردازنده عمدتاً‬
‫با خوشههای ثابتی از مراجع حافظه کار میکند‪.‬‬

‫‪ 4‬اگر کلمه قابل دسترسی در حافظه سریعتر یافت شود‪ ،‬به عنوان یک ضربه تعریف می شود‪ .‬اگر کلمه مورد دسترسی در حافظه سریعتر پیدا نشود‪ ،‬اشتباه رخ میدهد‪.‬‬
‫‪34‬‬
‫سیستم عامل های داخلی و اصول طراحی‪35.........................................................................................................................‬‬

‫بر این اساس‪ ،‬سازماندهی داده ها در سراسر سلسله مراتب ممکن است به گونه ای که درصد دسترسی به هر سطح متوالی پایین‬
‫تر به طور قابل مالحظه ای کمتر از سطح باال باشد‪ .‬مثال دو سطحی که قبال ارائه شده را در نظر بگیرید‪ .‬اجازه دهید حافظه‬
‫سطح ‪ 2‬شامل تمام دستورالعمل ها و داده های برنامه باشد‪ .‬خوشه های فعلی را می توان به طور موقت در سطح ‪ 1‬قرار داد‪ .‬هر‬
‫از چند گاهی‪ ،‬یکی از خوشه های سطح ‪ 1‬باید به سطح ‪ 2‬بازگردانده شود تا فضایی برای ورود یک خوشه جدید به سطح ‪1‬‬
‫ایجاد شود‪.‬‬

‫با این حال‪ ،‬بیشتر ارجاعات به دستورالعمل ها و داده های موجود در سطح ‪ 1‬خواهد بود‪.‬‬

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

‫شکل ‪ 1.14‬سلسله مراتب حافظه‬

‫‪35‬‬
‫سیستم عامل های داخلی و اصول طراحی‪36.........................................................................................................................‬‬

‫شکل ‪ 1.15‬عملکرد یک حافظه ساده دو سطحی‬

‫سه شکل حافظه که توضیح داده شد‪ ،‬معموالً فرار هستند و از فناوری نیمه هادی استفاده می کنند‪ .‬استفاده از سه سطح از این‬
‫واقعیت سوء استفاده می کند که حافظه نیمه هادی انواع مختلفی دارد که از نظر سرعت و هزینه متفاوت هستند‪.‬‬

‫داده ها به طور دائمی بر روی دستگاه های ذخیره سازی انبوه خارجی ذخیره می شوند‪ ،‬که رایج ترین آنها عبارتند از هارد‬
‫دیسک و رسانه های قابل جابجایی‪ ،‬مانند دیسک قابل جابجایی‪ ،‬نوار‪ ،‬و ذخیره سازی نوری‪ .‬حافظه خارجی و غیر فرار نیز به‬
‫عنوان حافظه ثانویه یا حافظه کمکی شناخته می شود‪ .‬اینها برای ذخیره فایلهای برنامه و داده استفاده میشوند و معموالً برای‬
‫برنامهنویس فقط از نظر فایلها و رکوردها قابل مشاهده هستند‪ ،‬برخالف بایتها یا کلمات جداگانه‪ .‬از هارد دیسک نیز برای ارائه‬
‫پسوندی به حافظه اصلی به نام حافظه مجازی استفاده می شود که در فصل ‪ 8‬مورد بحث قرار گرفته است‪.‬‬

‫سطوح اضافی را می توان به طور موثر به سلسله مراتب در نرم افزار اضافه کرد‪ .‬به عنوان مثال‪ ،‬بخشی از حافظه اصلی می تواند‬
‫به عنوان یک بافر برای نگهداری موقت داده هایی که قرار است روی دیسک خوانده شوند‪ ،‬استفاده شود‪ .‬چنین تکنیکی که گاهی‬
‫از آن به عنوان کش دیسک یاد می شود در فصل ‪ 11‬به تفصیل مورد بررسی قرار گرفته است‪ ،‬عملکرد را از دو طریق بهبود می‬
‫بخشد‪:‬‬

‫‪ -‬نوشته های دیسک خوشه ای هستند‪ .‬به جای بسیاری از انتقال های کوچک داده‪ ،‬ما چند انتقال بزرگ داده داریم‪ .‬این کار‬
‫عملکرد دیسک را بهبود می بخشد و دخالت پردازنده را به حداقل می رساند‪.‬‬

‫‪ -‬برخی از دادههایی که برای نوشتن در نظر گرفته شدهاند ممکن است توسط یک برنامه قبل از تخلیه بعدی به دیسک ارجاع‬
‫داده شوند‪ .‬در این حالت‪ ،‬داده ها به سرعت از حافظه پنهان نرم افزار به جای آهسته از دیسک بازیابی می شوند‪.‬‬

‫پیوست ‪ A1‬مفاهیم عملکرد ساختارهای حافظه چند سطحی را بررسی می کند‪.‬‬

‫‪36‬‬
‫سیستم عامل های داخلی و اصول طراحی‪37.........................................................................................................................‬‬

‫‪ 1.6‬حافظه کش‬

‫اگرچه حافظه کش برای سیستم عامل نامرئی است‪ ،‬اما با سایر سخت افزارهای مدیریت حافظه تعامل دارد‪ .‬عالوه بر این‪ ،‬بسیاری‬
‫از اصول مورد استفاده در طرحهای حافظه مجازی مورد بحث در فصل ‪ 8‬در حافظه نهان نیز اعمال میشوند‪.‬‬

‫انگیزه(محرک)‬

‫در تمام چرخههای دستورالعمل‪ ،‬پردازنده حداقل یک بار برای واکشی دستورالعمل و اغلب یک یا چند بار دیگر برای واکشی‬
‫عملوندها و‪/‬یا ذخیره نتایج به حافظه دسترسی دارد‪ .‬سرعتی که پردازنده میتواند دستورالعملها را با آن اجرا کند به وضوح‬
‫توسط زمان چرخه حافظه زمانی که برای خواندن یک کلمه از یا نوشتن یک کلمه در حافظه طول میکشد محدود میشود‪ .‬این‬
‫محدودیت به دلیل عدم تطابق مداوم بین سرعت پردازنده و حافظه اصلی یک مشکل مهم بوده است‪ :‬در طول سال ها‪ ،‬سرعت‬
‫پردازنده به طور مداوم با سرعت بیشتری نسبت به سرعت دسترسی به حافظه افزایش یافته است‪ .‬ما با یک مبادله بین سرعت‪،‬‬
‫هزینه و اندازه روبرو هستیم‪ .‬در حالت ایدهآل‪ ،‬حافظه اصلی باید با فناوری مشابه با رجیسترهای پردازنده ساخته شود و زمانهای‬
‫چرخه حافظه را با زمانهای چرخه پردازنده مقایسه کند‪ .‬این همیشه یک استراتژی بسیار گران بوده است‪ .‬راه حل این است که‬
‫از اصل محلی بودن با ارائه یک حافظه کوچک و سریع بین پردازنده و حافظه اصلی‪ ،‬یعنی حافظه نهان‪ ،‬استفاده کنیم‪.‬‬

‫اصول کش‬

‫حافظه کش برای ارائه زمان دسترسی به حافظه نزدیک به سریعترین حافظه های موجود و در عین حال پشتیبانی از یک حافظه‬
‫بزرگ است که قیمت انواع حافظه های نیمه هادی ارزان قیمت را دارد‪ .‬این مفهوم در شکل ‪ a1.16‬نشان داده شده است‪ .‬یک‬
‫حافظه اصلی نسبتا بزرگ و کند به همراه یک حافظه کش کوچکتر و سریعتر وجود دارد‪ .‬کش حاوی یک کپی از بخشی از‬
‫حافظه اصلی است‪ .‬هنگامی که پردازنده سعی می کند یک بایت یا کلمه حافظه را بخواند‪ ،‬بررسی می شود تا مشخص شود آیا‬
‫بایت یا کلمه در حافظه پنهان است یا خیر‪ .‬اگر چنین است‪ ،‬بایت یا کلمه به پردازنده تحویل داده می شود‪.‬‬

‫در غیر این صورت‪ ،‬یک بلوک از حافظه اصلی‪ ،‬متشکل از تعداد ثابتی از بایت ها‪ ،‬در حافظه پنهان خوانده می شود و سپس بایت‬
‫یا کلمه به پردازنده تحویل داده می شود‪ .‬به دلیل پدیده محلی بودن مرجع‪ ،‬زمانی که یک بلوک از داده ها به حافظه پنهان برای‬
‫ارضای یک مرجع حافظه واحد واکشی می شود‪ ،‬این احتمال وجود دارد که بسیاری از مراجع حافظه در آینده نزدیک به بایت‬
‫های دیگر در بلوک باشد‪.‬‬

‫شکل ‪ b1.16‬استفاده از چندین سطح حافظه پنهان را نشان می دهد‪ .‬کش ‪ L2‬کندتر و معموالً بزرگتر از کش ‪ L1‬است و کش‬
‫‪ L3‬کندتر و معموالً بزرگتر از کش ‪ L2‬است‪.‬‬

‫‪37‬‬
‫سیستم عامل های داخلی و اصول طراحی‪38.........................................................................................................................‬‬

‫انتقال بلوک‬
‫انتقال کلمه‬

‫حافظه اصلی‬

‫سریع‬ ‫آرام‬

‫(الف) حافظه نهان‬


‫واحد‬

‫حافظه‬
‫اصلی‬

‫سریعتر‬ ‫سریع‬ ‫سرعت کمتر‬ ‫آرام‬

‫(ب) سازمان کش سه سطحی‬

‫شکل ‪ 1.16‬کش و حافظه اصلی‬

‫شکل ‪ 1.17‬ساختار یک حافظه کش‪/‬سیستم حافظه اصلی را نشان می دهد‪ .‬حافظه اصلی شامل حداکثر ‪ n2‬کلمه آدرس پذیر‬
‫است که هر کلمه دارای یک آدرس ‪ n‬بیت منحصر به فرد است‪ .‬برای اهداف نقشه برداری‪ ،‬این حافظه شامل تعدادی بلوک با‬
‫طول ثابت از کلمات ‪ K‬هر کدام در نظر گرفته می شود‪ .‬یعنی بلوک های ‪ M = 2n>K‬وجود دارد‪ .‬حافظه پنهان از اسالت های‬
‫‪ C‬که به آن خطوط نیز گفته می شود از ‪ K‬کلمه تشکیل شده است‪ ،‬و تعداد اسالت ها به طور قابل توجهی کمتر از تعداد بلوک‬
‫‪5‬‬
‫برخی از زیر مجموعه ها است‪.‬‬ ‫های حافظه اصلی‬

‫نماد >>به معنی بسیار کمتر از‪ .‬به طور مشابه‪ ،‬نماد << به معنای بسیار بیشتر از ‪.d‬به همه اینها اشاره دارد که با آن دنباله بیت ها شروع می شوند‪.‬‬ ‫‪5‬‬

‫‪38‬‬
‫سیستم عامل های داخلی و اصول طراحی‪39.........................................................................................................................‬‬

‫انتقال کلمه‬ ‫انتقال بلوک‬

‫(الف) حافظه پنهان‬

‫(ب) حافظه اصلی‬

‫شکل ‪ 1.17‬ساختار حافظه پنهان‪/‬حافظه اصلی‬

‫از بلوک های حافظه اصلی در شکاف های حافظه پنهان قرار دارد‪ .‬اگر یک کلمه در یک بلوک از حافظه ای که در کش نیست‬
‫خوانده می شود‪ ،‬آن بلوک به یکی از اسالت های کش منتقل می شود‪ .‬از آنجایی که تعداد بلوکها از اسالتها بیشتر است‪ ،‬یک‬
‫اسالت منفرد نمیتواند به طور منحصربهفرد و دائمی به یک بلوک خاص اختصاص داده شود‪ .‬بنابراین‪ ،‬هر شکاف شامل یک‬
‫برچسب است که مشخص می کند کدام بلوک خاص در حال حاضر ذخیره می شود‪ .‬تگ معموالً تعدادی بیت مرتبه باالتر از‬
‫آدرس است و به همه آدرسهایی اشاره میکند که با آن دنباله بیتها شروع میشوند‪.‬‬

‫به عنوان یک مثال ساده‪ ،‬فرض کنید یک آدرس ‪ 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‬دریافت‬
‫کنید‬

‫آیا بلوک حاوی ‪ RA‬در حافظه‬ ‫دسترسی به حافظه اصلی برای‬


‫پنهان است؟‬ ‫بلوک حاوی‪RA‬‬

‫کلمه ‪ RA‬را واکشی کنید و به‬ ‫اسالت حافظه پنهان را برای‬


‫‪CPU‬تحویل دهید‬ ‫بلوک حافظه اصلی اختصاص‬
‫دهید‬

‫بلوک حافظه اصلی را در شکاف‬


‫کلمه ‪ RA‬را به ‪ CPU‬تحویل دهید‬
‫حافظه پنهان بارگیری کنید‬

‫انجام شده‬

‫شکل ‪ 1.18‬عملیات خواندن حافظه پنهان‬

‫طراحی کش‬

‫بحث دقیق در مورد طراحی کش فراتر از محدوده این کتاب است‪ .‬عناصر کلیدی به اختصار در اینجا خالصه شده است‪ .‬خواهیم‬
‫دید که مسائل طراحی مشابه باید در برخورد با حافظه مجازی و طراحی کش دیسک مورد توجه قرار گیرد‪ .‬آنها در دسته های‬
‫زیر قرار می گیرند‪:‬‬

‫‪ -‬اندازه حافظه پنهان‬

‫‪ -‬اندازه بلوک‬

‫‪40‬‬
‫سیستم عامل های داخلی و اصول طراحی‪41.........................................................................................................................‬‬

‫‪ -‬تابع نقشه برداری‬

‫‪ -‬الگوریتم جایگزینی‬

‫‪ -‬خط مشی بنویسید‬

‫‪ -‬تعداد سطوح کش‬

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

‫هنگامی که یک بلوک جدید از داده ها در حافظه پنهان خوانده می شود‪ ،‬تابع نگاشت تعیین می کند که بلوک کدام مکان کش‬
‫را اشغال کند‪ .‬دو محدودیت بر طراحی تابع نگاشت تأثیر می گذارد‪ .‬اول‪ ،‬زمانی که یک بلوک خوانده می شود‪ ،‬ممکن است‬
‫دیگری جایگزین شود‪ .‬ما می خواهیم این کار را به گونه ای انجام دهیم که احتمال جایگزینی بلوکی که در آینده نزدیک مورد‬
‫نیاز است را به حداقل برسانیم‪ .‬هرچه تابع نقشه برداری انعطاف پذیرتر باشد‪ ،‬دامنه بیشتری برای طراحی یک الگوریتم جایگزین‬
‫برای به حداکثر رساندن نسبت ضربه داریم‪ .‬دوم‪ ،‬هرچه تابع نقشه برداری انعطاف پذیرتر باشد‪ ،‬مدار مورد نیاز برای جستجوی‬
‫حافظه پنهان برای تعیین اینکه آیا یک بلوک در حافظه نهان وجود دارد یا خیر‪ ،‬پیچیده تر است‪ .‬الگوریتم جایگزینی‪ ،‬در‬
‫محدوده محدودیت های تابع نگاشت‪ ،‬انتخاب می کند که وقتی یک بلوک جدید در حافظه نهان بارگذاری می شود و کش از‬
‫قبل دارای تمام شکاف ها با بلوک های دیگر است‪ ،‬کدام بلوک جایگزین شود‪ .‬ما میخواهیم بلوکی را که کمترین احتمال نیاز به‬
‫آن را دارد در آینده نزدیک جایگزین کنیم‪ .‬اگرچه شناسایی چنین بلوکی غیرممکن است‪ ،‬اما یک استراتژی مؤثر‪ ،‬جایگزین‬
‫کردن بلوکی است که طوالنیترین زمان را در حافظه پنهان بدون اشاره به آن‪ ،‬جایگزین کنید‪ .‬این خط مشی به عنوان الگوریتم‬
‫کمترین استفاده اخیر ‪ LRU‬نامیده می شود‪ .‬مکانیزم های سخت افزاری مورد نیاز است‪ .‬بالکی که اخیراً کمتر استفاده شده را‬
‫شناسایی کنید‪.‬‬

‫اگر محتویات یک بلوک در حافظه پنهان تغییر کند‪ ،‬الزم است قبل از جایگزینی‪ ،‬آن را به حافظه اصلی بازگردانید‪ .‬خط مشی‬
‫نوشتن تعیین می کند که عملیات نوشتن حافظه چه زمانی انجام شود‪ .‬در یک افراط‪ ،‬نوشتن می تواند هر بار که بلوک به روز‬
‫می شود رخ دهد‪ .‬در نهایت‪ ،‬نوشتن تنها زمانی رخ می دهد که بلوک جایگزین شود‪ .‬خط مشی دوم عملیات نوشتن حافظه را به‬
‫‪41‬‬
‫سیستم عامل های داخلی و اصول طراحی‪42.........................................................................................................................‬‬

‫حداقل می رساند اما حافظه اصلی را در حالت منسوخ می گذارد‪ .‬این می تواند با عملکرد چند پردازنده و دسترسی مستقیم به‬
‫حافظه توسط ماژول های سخت افزاری ‪ I/O‬تداخل ایجاد کند‪.‬‬

‫در نهایت‪ ،‬در حال حاضر داشتن چندین سطح حافظه پنهان‪ ،‬با برچسب ‪ L1‬نزدیک ترین کش به پردازنده‪ ،L2 ،‬و در بسیاری از‬
‫موارد سطح سوم ‪ ،L3‬امری عادی است‪ .‬بحث در مورد مزایای عملکرد سطوح حافظه پنهان چندگانه فراتر از محدوده ما است‪.‬‬
‫برای بحث به ‪ STAL13‬مراجعه کنید‪.‬‬

‫‪ 1.7‬دسترسی مستقیم به حافظه‬

‫سه تکنیک برای عملیات ‪ 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‬بسیار کارآمدتر از ورودی‪/‬خروجی مبتنی بر وقفه یا برنامه ریزی شده است‪.‬‬

‫‪ 1.8‬سازمان چند پردازنده و چند هسته ای‬

‫به طور سنتی‪ ،‬کامپیوتر به عنوان یک ماشین ترتیبی در نظر گرفته می شود‪ .‬بیشتر زبان های برنامه نویسی کامپیوتری از برنامه‬
‫نویس می خواهند که الگوریتم ها را به عنوان دنباله ای از دستورالعمل ها مشخص کند‪ .‬یک پردازنده برنامه ها را با اجرای‬

‫‪43‬‬
‫سیستم عامل های داخلی و اصول طراحی‪44.........................................................................................................................‬‬

‫دستورات ماشین به صورت متوالی و یکی در یک زمان اجرا می کند‪ .‬هر دستورالعمل در دنباله ای از عملیات اجرا می شود‬
‫واکشی دستورالعمل‪ ،‬واکشی عملوندها‪ ،‬انجام عملیات‪ ،‬ذخیره نتایج‪.‬‬

‫این دیدگاه از کامپیوتر هرگز کامال درست نبوده است‪ .‬در سطح میکرو عملیات‪ ،‬سیگنال های کنترلی متعددی به طور همزمان‬
‫تولید می شوند‪ .‬خط لوله دستورالعمل‪ ،‬حداقل در حد همپوشانی عملیات واکشی و اجرای‪ ،‬برای مدت طوالنی وجود داشته است‪.‬‬
‫هر دوی اینها نمونه هایی از انجام توابع به صورت موازی هستند‪.‬‬

‫همانطور که فن آوری کامپیوتر تکامل یافته و هزینه سخت افزار کامپیوتر کاهش یافته است‪ ،‬طراحان کامپیوتر به دنبال فرصت‬
‫های بیشتر و بیشتری برای موازی سازی‪ ،‬معموال برای بهبود عملکرد و‪ ،‬در برخی موارد‪ ،‬برای بهبود قابلیت اطمینان بوده اند‪ .‬در‬
‫این کتاب‪ ،‬ما سه رویکرد رایج برای ارائه موازی سازی با تکرار پردازنده ها را بررسی می کنیم‪ :‬چند پردازنده متقارن ‪،SMPs‬‬
‫رایانه های چند هسته ای‪ ،‬و خوشه ها‪ SMP .‬ها و رایانه های چند هسته ای در این بخش مورد بحث قرار می گیرند‪ .‬خوشه ها‬
‫در فصل ‪ 16‬مورد بررسی قرار می گیرند‪.‬‬

‫چند پردازنده متقارن‬

‫تعریف ‪ SMP‬را می توان به عنوان یک سیستم کامپیوتری مستقل با ویژگی های زیر تعریف کرد‪:‬‬

‫‪ .1‬دو یا چند پردازنده مشابه با قابلیت مقایسه وجود دارد‪.‬‬

‫‪ .2‬این پردازندهها حافظه اصلی و امکانات ورودی‪/‬خروجی یکسانی دارند و توسط یک گذرگاه یا دیگر طرحهای اتصال داخلی به‬
‫یکدیگر متصل میشوند‪ ،‬به طوری که زمان دسترسی به حافظه برای هر پردازنده تقریباً یکسان است‪.‬‬

‫‪ .3‬همه پردازندهها دسترسی به دستگاههای ورودی‪/‬خروجی را از طریق کانالهای مشابه یا از طریق کانالهای متفاوتی که‬
‫مسیرهایی را برای یک دستگاه فراهم میکنند‪ ،‬به اشتراک میگذارند‪.‬‬

‫‪ .4‬همه پردازنده ها می توانند عملکردهای یکسانی را انجام دهند از این رو اصطالح متقارن نامیده می شود‪.‬‬

‫‪ .5‬سیستم توسط یک سیستم عامل یکپارچه کنترل می شود که تعامل بین پردازنده ها و برنامه های آنها را در سطوح کار‪،‬‬
‫وظیفه‪ ،‬فایل و عناصر داده فراهم می کند‪.‬‬

‫نکات ‪ 1‬تا ‪ 4‬باید خود توضیحی باشد‪ .‬نقطه ‪ 5‬یکی از تضادها را با یک سیستم چند پردازشی با جفت آزاد مانند یک خوشه نشان‬
‫می دهد‪ .‬در مورد دوم‪ ،‬واحد فیزیکی تعامل معموالً یک پیام یا فایل کامل است‪ .‬در یک ‪ ،SMP‬عناصر داده فردی می توانند‬
‫سطح تعامل را تشکیل دهند و می تواند درجه باالیی از همکاری بین فرآیندها وجود داشته باشد‪.‬‬

‫یک سازمان ‪ SMP‬دارای چندین مزیت بالقوه نسبت به یک سازمان تک پردازشگر است‪ ،‬از جمله موارد زیر‪:‬‬
‫‪44‬‬
‫سیستم عامل های داخلی و اصول طراحی‪45.........................................................................................................................‬‬

‫‪ -‬عملکرد‪ :‬اگر کاری که باید توسط یک کامپیوتر انجام شود را بتوان به گونهای سازماندهی کرد که برخی از بخشهای کار را‬
‫بتوان به صورت موازی انجام داد‪ ،‬آنگاه سیستمی با چندین پردازنده عملکرد بیشتری نسبت به سیستمی با یک پردازنده از‬
‫همان نوع دارد‪.‬‬

‫‪ -‬در دسترس بودن‪ :‬در یک چند پردازنده متقارن‪ ،‬به دلیل اینکه همه پردازنده ها می توانند عملکردهای یکسانی را انجام دهند‪،‬‬
‫خرابی یک پردازنده باعث توقف دستگاه نمی شود‪ .‬در عوض‪ ،‬سیستم می تواند با کاهش عملکرد به کار خود ادامه دهد‪.‬‬

‫رشد افزایشی‪ :‬یک کاربر می تواند عملکرد یک سیستم را با افزودن یک پردازنده اضافی افزایش دهد‪.‬‬

‫‪ : Scaling -‬فروشندگان می توانند طیف وسیعی از محصوالت را با ویژگی های قیمت و عملکرد متفاوت بر اساس تعداد‬
‫پردازنده های پیکربندی شده در سیستم ارائه دهند‪.‬‬

‫توجه به این نکته مهم است که اینها مزایای بالقوه و نه تضمینی هستند‪ .‬سیستم عامل باید ابزارها و عملکردهایی را برای بهره‬
‫برداری از موازی در یک سیستم ‪ SMP‬فراهم کند‪.‬‬

‫ویژگی جذاب ‪ SMP‬این است که وجود چندین پردازنده برای کاربر شفاف است‪ .‬سیستم عامل از برنامه ریزی وظایف بر روی‬
‫تک تک پردازنده ها و همگام سازی بین پردازنده ها مراقبت می کند‪.‬‬

‫سازمان شکل ‪ 1.19‬سازماندهی کلی ‪ SMP‬را نشان می دهد‪ .‬پردازنده های متعددی وجود دارد که هر کدام شامل واحد کنترل‪،‬‬
‫واحد حسابی‪ -‬منطقی و رجیسترهای مخصوص به خود است‪ .‬هر پردازنده از طریق نوعی مکانیسم اتصال به یک حافظه اصلی‬
‫مشترک و دستگاه های ورودی‪/‬خروجی دسترسی دارد‪ .‬یک اتوبوس مشترک یک تسهیالت رایج است‪ .‬پردازنده ها می توانند از‬
‫طریق حافظه پیام ها و اطالعات وضعیت باقی مانده در فضاهای آدرس مشترک با یکدیگر ارتباط برقرار کنند‪ .‬همچنین ممکن‬
‫است برای پردازنده ها امکان مبادله مستقیم سیگنال ها وجود داشته باشد‪.‬‬

‫حافظه‬
‫اصلی‬

‫شکل ‪ 1.19‬سازمان چند پردازنده متقارن‬


‫‪45‬‬
‫سیستم عامل های داخلی و اصول طراحی‪46.........................................................................................................................‬‬

‫حافظه اغلب به گونه ای سازماندهی می شود که چندین دسترسی همزمان به بلوک های جداگانه حافظه امکان پذیر باشد‪.‬‬

‫در رایانههای مدرن‪ ،‬پردازندهها معموالً حداقل یک سطح حافظه پنهان دارند که برای پردازنده خصوصی است‪ .‬این استفاده از‬
‫کش برخی از مالحظات طراحی جدید را معرفی می کند‪ .‬از آنجایی که هر کش محلی حاوی تصویری از بخشی از حافظه اصلی‬
‫است‪ ،‬اگر کلمه ای در یک کش تغییر داده شود‪ ،‬می تواند یک کلمه را در حافظه پنهان دیگر باطل کند‪ .‬برای جلوگیری از این‬
‫امر‪ ،‬باید به سایر پردازندهها هشدار داده شود که بروزرسانی صورت گرفته است‪ .‬این مشکل به عنوان مشکل انسجام حافظه پنهان‬
‫شناخته می شود و معموالً در سخت افزار به جای سیستم عامل حل می شود‪.‬‬

‫کامپیوترهای چند هسته ای‬

‫یک کامپیوتر چند هسته ای که به عنوان چند پردازنده تراشه نیز شناخته می شود‪ ،‬دو یا چند پردازنده که هسته نامیده می‬
‫شود را روی یک تکه سیلیکون به نام دای ترکیب می کند‪ .‬به طور معمول‪ ،‬هر هسته از تمام اجزای یک پردازنده مستقل مانند‬
‫رجیسترها‪ ،ALU ،‬سخت افزار خط لوله و واحد کنترل‪ ،‬به عالوه دستورالعمل ‪ L1‬و حافظه پنهان داده تشکیل شده است‪ .‬عالوه‬
‫بر هستههای متعدد‪ ،‬تراشههای چند هستهای معاصر شامل حافظه نهان ‪ L2‬و در برخی موارد‪ ،‬حافظه نهان ‪ L3‬نیز میشوند‪.‬‬

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

‫نمونه ای از یک سیستم چند هسته ای ‪ Intel Core i7-990X‬است که شامل شش پردازنده ‪ x86‬است که هر کدام دارای‬
‫یک حافظه نهان اختصاصی ‪ L2‬و یک کش ‪ L3‬مشترک است شکل ‪ .1.20‬یکی از مکانیزمهایی که اینتل برای مؤثرتر کردن‬
‫حافظههای پنهان خود استفاده میکند‪ ،‬واکشی اولیه است‪ ،‬که در آن سختافزار الگوهای دسترسی به حافظه را بررسی میکند و‬
‫سعی میکند تا کشها را به صورت فرضی با دادههایی پر کند که احتماالً به زودی درخواست میشوند‪.‬‬

‫‪46‬‬
‫سیستم عامل های داخلی و اصول طراحی‪47.........................................................................................................................‬‬

‫شکل ‪ 1.20‬بلوک دیاگرام ‪Intel Core i7-990X‬‬

‫تراشه ‪ Core i7-990X‬از دو نوع ارتباط خارجی با سایر تراشه ها پشتیبانی می کند‪ .‬کنترلر حافظه ‪ DDR3‬کنترلر حافظه را‬
‫برای حافظه اصلی ‪ DDR‬نرخ داده دو برابر روی تراشه می آورد‪ .‬این رابط از سه کانال با عرض ‪ 8‬بایت برای مجموع عرض‬
‫گذرگاه ‪ 192‬بیت‪ ،‬برای سرعت داده جمعی تا ‪ 32‬گیگابایت بر ثانیه پشتیبانی می کند‪ .‬با کنترلر حافظه روی تراشه‪ ،‬گذرگاه‬
‫سمت جلو حذف می شود‪ QuickPath Interconnect QPI .‬یک مشخصات اتصال الکتریکی نقطه به نقطه است‪ .‬ارتباطات‬
‫پرسرعت بین تراشه های پردازنده متصل را امکان پذیر می کند‪ .‬لینک ‪ QPI‬با سرعت ‪ GT/s 6.4‬انتقال در ثانیه کار می کند‪.‬‬
‫با ‪ 16‬بیت در هر انتقال‪ ،‬که به ‪ 12.8‬گیگابایت در ثانیه می رسد‪ .‬و از آنجایی که پیوندهای ‪ QPI‬شامل جفتهای دوسویه‬
‫اختصاصی است‪ ،‬کل پهنای باند ‪ 25.6‬گیگابایت بر ثانیه است‪.‬‬

‫‪ 1.9‬خواندن توصیه می شود‬

‫‪ STAL13‬موضوعات این فصل را به تفصیل پوشش می دهد‪.‬‬

‫‪ DENN05‬به تاریخچه توسعه و به کارگیری اصل محلّی نگاه می کند و خواندنی جذاب را ایجاد می کند‪.‬‬

‫‪ DENN05‬دنینگ‪" .P ،‬اصل محلی"‪ .‬ارتباطات ‪ ،ACM‬جوالی ‪.2005‬‬

‫‪ .STAL13 Stallings, W. Computer Organization and Architecture, 9th ed‬رودخانه فوقانی زین‪،‬‬
‫نیوجرسی‪ :‬پیرسون‪.2013 ،‬‬

‫‪47‬‬
‫سیستم عامل های داخلی و اصول طراحی‪48.........................................................................................................................‬‬

‫‪ 1.10‬اصطالحات کلیدی‪ ،‬سؤاالت و مشکالت را مرور کنید‬

‫شرایط کلیدی‬

‫ثبت آدرس‬ ‫واحد پردازش مرکزی‬ ‫نسبت ضربه‬

‫حافظه کمکی‬ ‫چند پردازنده تراشه‬ ‫ورودی خروجی‬


‫حافظه کش‬ ‫ثبت داده ها‬ ‫دستورالعمل‬
‫اسالت کش‬ ‫دسترسی مستقیم به حافظه‬ ‫چرخه دستورالعمل‬
‫ثبت دستورالعمل‬ ‫چند هسته ای‬ ‫موقعیت مکانی‬
‫قطع کردن‬ ‫چند پردازنده‬ ‫پشته‬
‫ورودی‪/‬خروجی مبتنی بر وقفه‬ ‫پردازنده‬ ‫قاب پشته‬
‫ماژول‪I/O‬‬ ‫شمارنده برنامه‬ ‫نشانگر پشته‬
‫محل‬ ‫‪I/O‬برنامه ریزی شده‬ ‫اتوبوس سیستم‬
‫حافظه اصلی‬ ‫ثبت نام‬ ‫محل زمانی‬
‫سلسله مراتب حافظه‬ ‫حافظه ثانویه‬

‫بررسی سواالت‬

‫‪ .1.1‬چهار عنصر اصلی یک کامپیوتر را فهرست کرده و به طور خالصه تعریف کنید‪.‬‬

‫‪ .1.2‬دو دسته اصلی رجیسترهای پردازنده را تعریف کنید‪.‬‬

‫‪ .1.3‬به طور کلی‪ ،‬چهار عمل متمایز که یک دستورالعمل ماشین می تواند مشخص کند چیست؟‬

‫‪ .1.4‬وقفه چیست؟‬

‫‪ .1.5‬چگونه با وقفه های متعدد برخورد می شود؟‬

‫‪ .1.6‬چه ویژگی هایی عناصر مختلف سلسله مراتب حافظه را متمایز می کند؟‬

‫‪ .1.7‬حافظه کش چیست؟‬
‫‪48‬‬
‫سیستم عامل های داخلی و اصول طراحی‪49.........................................................................................................................‬‬

‫‪ .1.8‬تفاوت بین چند پردازنده و سیستم چند هسته ای چیست؟‬

‫‪ .1.9‬تمایز بین مکان مکانی و مکان زمانی چیست؟‬

‫‪ .1.10‬به طور کلی راهکارهای بهره برداری از موقعیت مکانی و مکان زمانی چیست؟‬

‫چالش ها و مسائل‬

‫‪ .1.1‬فرض کنید پردازنده فرضی شکل ‪ 1.3‬نیز دارای دو دستورالعمل ‪ I/O‬است‪:‬‬

‫‪ = 0011‬بارگذاری ‪ AC‬از ‪ = I/O 0111‬ذخیره ‪ AC‬به ‪I/O‬‬

‫در این موارد‪ ،‬آدرس ‪ 12‬بیتی یک دستگاه خارجی خاص را شناسایی می کند‪ .‬اجرای برنامه با استفاده از فرمت شکل ‪ 1.4‬را‬
‫برای برنامه زیر نشان دهید‪:‬‬

‫‪ AC .1‬را از دستگاه ‪ 5‬بارگیری کنید‪.‬‬

‫‪ .2‬محتویات مکان حافظه ‪ 940‬را اضافه کنید‪.‬‬

‫‪ AC .3‬را در دستگاه ‪ 6‬ذخیره کنید‪.‬‬

‫فرض کنید مقدار بعدی بازیابی شده از دستگاه ‪ 3 5‬باشد و مکان ‪ 940‬حاوی مقدار ‪ 2‬باشد‪.‬‬

‫‪ .1.2‬اجرای برنامه شکل ‪ 1.4‬در متن با استفاده از شش مرحله توضیح داده شده است‪ .‬این توضیحات را برای نشان دادن استفاده‬
‫از ‪ MAR‬و ‪ MBR‬گسترش دهید‪.‬‬

‫‪ .1.3‬یک ریزپردازنده فرضی ‪ 32‬بیتی را با دستورالعمل های ‪ 32‬بیتی متشکل از دو زمینه در نظر بگیرید‪ .‬بایت اول شامل کد‬
‫عملیاتی و بقیه یک آدرس عملوند فوری و یا یک عملوند است‪.‬‬

‫آ‪ .‬حداکثر ظرفیت حافظه قابل آدرس دهی مستقیم بر حسب بایت چقدر است؟‬

‫ب در مورد تأثیر گذرگاه ریزپردازنده روی سرعت سیستم بحث کنید‬

‫‪ .1‬یک گذرگاه آدرس محلی ‪ 32‬بیتی و یک گذرگاه داده محلی ‪ 16‬بیتی‪ ،‬یا‬

‫‪ .2‬یک گذرگاه آدرس محلی ‪ 16‬بیتی و یک گذرگاه داده محلی ‪ 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‬قرار دارند و مستقیماً به گذرگاه سیستم متصل می شوند‪:‬‬

‫‪ :INPR‬ثبت ورودی‪ 8 ،‬بیت ‪ :OUTR‬ثبت خروجی‪ 8 ،‬بیت ‪ :FGI‬پرچم ورودی‪ 1 ،‬بیت‬

‫‪ :FGO‬پرچم خروجی‪ 1 ،‬بیت ‪ :IEN‬وقفه فعال‪ 1 ،‬بیت‬

‫ورودی ضربه کلید از ‪ 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‬تخمین بزنید‪.‬‬

‫ب در صورت استفاده از انتقال ‪ ،DMA‬همان نرخ را تخمین بزنید‪.‬‬

‫‪ 1.10‬کد زیر را در نظر بگیرید‪:‬‬

‫آ‪ .‬یک مثال از موقعیت مکانی در کد ارائه دهید‪.‬‬

‫ب یک مثال از موقعیت زمانی در کد را ذکر کنید‪.‬‬

‫‪ 1.11‬معادالت ‪ 1.1‬و ‪ 1.2‬در پیوست ‪ A1‬را به سلسله مراتب حافظه در سطح ‪ n‬تعمیم دهید‪.‬‬

‫‪51‬‬
‫سیستم عامل های داخلی و اصول طراحی‪52.........................................................................................................................‬‬

‫‪ 1.12‬یک سیستم حافظه با پارامترهای زیر را در نظر بگیرید‪:‬‬

‫آ‪ .‬هزینه ‪ 1‬مگابایت حافظه اصلی چقدر است؟‬

‫ب هزینه ‪ 1‬مگابایت حافظه اصلی با استفاده از فناوری حافظه کش چقدر است؟‬

‫ج اگر زمان دسترسی موثر ‪ 10‬درصد بیشتر از زمان دسترسی حافظه پنهان باشد‪ ،‬نسبت ضربه ‪ H‬چقدر است؟‬

‫‪ 1.13‬کامپیوتر دارای حافظه پنهان‪ ،‬حافظه اصلی و دیسکی است که برای حافظه مجازی استفاده می شود‪ .‬اگر یک کلمه ارجاع‬
‫شده در حافظه پنهان باشد‪ ns 20 ،‬برای دسترسی به آن مورد نیاز است‪ .‬اگر در حافظه اصلی است اما در حافظه نهان نیست‪،‬‬
‫‪ ns 60‬برای بارگذاری آن در حافظه نهان مورد نیاز است این شامل زمان بررسی اولیه حافظه پنهان است و سپس مرجع مجدداً‬
‫شروع می شود‪ .‬اگر کلمه در حافظه اصلی نباشد‪ 12 ،‬میلیثانیه برای واکشی کلمه از دیسک‪ ،‬به دنبال آن ‪ ns 60‬برای کپی‬
‫کردن آن در حافظه پنهان الزم است و سپس مرجع دوباره شروع میشود‪ .‬نسبت ضربه حافظه کش ‪ 0.9‬و نسبت ضربه حافظه‬
‫اصلی ‪ 0.6‬است‪ .‬میانگین زمان مورد نیاز برای دسترسی به یک کلمه ارجاع شده در این سیستم بر حسب ‪ ns‬چقدر است؟‬

‫‪ 1.14‬فرض کنید قرار است یک پشته توسط پردازنده برای مدیریت فراخوانی ها و برگرداندن رویه ها استفاده شود‪ .‬آیا می توان‬
‫شمارنده برنامه را با استفاده از باالی پشته به عنوان شمارنده برنامه حذف کرد؟‬

‫ضمیمه ‪ A1‬ویژگی های عملکرد حافظه های دو سطحی‬

‫در این فصل به یک کش اشاره شده است که به عنوان یک بافر بین حافظه اصلی و پردازنده عمل می کند و یک حافظه داخلی‬
‫دو سطحی ایجاد می کند‪ .‬این معماری دو سطحی از ویژگی شناخته شده به عنوان محلی برای ارائه عملکرد بهبود یافته نسبت‬
‫به یک حافظه یک سطح قابل مقایسه استفاده می کند‪.‬‬

‫مکانیزم اصلی حافظه پنهان بخشی از معماری کامپیوتر است که در سخت افزار پیاده سازی شده و معموالً برای سیستم عامل‬
‫نامرئی است‪ .‬بر این اساس‪ ،‬این مکانیسم در این کتاب دنبال نشده است‪ .‬با این حال‪ ،‬دو نمونه دیگر از رویکرد حافظه دو سطحی‬
‫وجود دارد که از ویژگی محلی بودن نیز بهره برداری می کنند و حداقل تا حدی در سیستم عامل پیاده سازی می شوند‪ :‬حافظه‬
‫مجازی و حافظه پنهان دیسک جدول ‪ .1.2‬این دو موضوع به ترتیب در فصول ‪ 8‬و ‪ 11‬بررسی شده است‪ .‬در این پیوست‪ ،‬به‬
‫برخی از ویژگیهای عملکرد حافظههای دو سطحی که در هر سه رویکرد مشترک هستند‪ ،‬نگاه میکنیم‪.‬‬

‫‪52‬‬
‫سیستم عامل های داخلی و اصول طراحی‪53.........................................................................................................................‬‬

‫جدول ‪ 1.2‬ویژگی های حافظه های دو سطحی‬

‫حافظه پنهان اصلی‬ ‫حافظه مجازی پیجینگ‬ ‫کش دیسک‬

‫نسبت های زمان‬ ‫‪5: 1‬‬ ‫‪106: 1‬‬ ‫‪106: 1‬‬


‫دسترسی معمولی‬

‫سیستم نرم افزار ترکیبی از سخت افزار و توسط سخت افزار ویژه سیستم مدیریت حافظه‬
‫پیاده سازی شده است‬ ‫نرم افزار سیستمی‬

‫اندازه بلوک معمولی‬ ‫‪4‬تا ‪ 128‬بایت‬ ‫‪64‬تا ‪ 4096‬بایت‬ ‫‪64‬تا ‪ 4096‬بایت‬

‫دسترسی پردازنده به‬ ‫دسترسی مستقیم‬ ‫دسترسی غیر مستقیم‬ ‫دسترسی غیر‬
‫سطح دوم‬ ‫مستقیم‬

‫محل(موقعیت)‬

‫مبنای مزیت عملکرد یک حافظه دو سطحی‪ ،‬اصل محلی بودن است که در بخش ‪ 1.5‬به آن اشاره شده است‪ .‬این اصل بیان می‬
‫کند که مراجع حافظه تمایل به خوشه بندی دارند‪ .‬در طی یک دوره زمانی طوالنی‪ ،‬خوشه های مورد استفاده تغییر می کنند‪ .‬اما‬
‫در یک دوره زمانی کوتاه‪ ،‬پردازنده در درجه اول با دسته های ثابتی از مراجع حافظه کار می کند‪ .‬به طور شهودی‪ ،‬اصل محلی‬
‫بودن معنا پیدا می کند‪ .‬خط استدالل زیر را در نظر بگیرید‪:‬‬

‫‪ .1‬به جز دستورالعمل های شاخه و فراخوانی که تنها بخش کوچکی از دستورالعمل های برنامه را تشکیل می دهند‪ ،‬اجرای‬
‫برنامه به صورت ترتیبی است‪ .‬از این رو‪ ،‬در بیشتر موارد‪ ،‬دستورالعمل بعدی که باید واکشی شود‪ ،‬بالفاصله از آخرین دستورالعمل‬
‫واکشی شده پیروی می کند‪.‬‬

‫‪ .2‬به ندرت وجود دارد که دنباله ای طوالنی و بدون وقفه از فراخوانی های رویه و به دنبال آن توالی مربوطه از بازگشت ها وجود‬
‫داشته باشد‪ .‬در عوض‪ ،‬یک برنامه به یک پنجره نسبتاً باریک از عمق فراخوانی رویه محدود می شود‪ .‬بنابراین‪ ،‬در یک دوره زمانی‬
‫کوتاه‪ ،‬ارجاع به دستورالعملها معموالً به چند رویه محلی میشوند‪.‬‬

‫‪ .3‬بیشتر ساختارهای تکرار شونده از تعداد نسبتاً کمی دستورالعمل تشکیل شده اند که بارها تکرار شده اند‪ .‬بنابراین‪ ،‬برای مدت‬
‫زمان تکرار‪ ،‬محاسبات به بخش کوچکی از یک برنامه محدود می شود‪.‬‬

‫‪53‬‬
‫سیستم عامل های داخلی و اصول طراحی‪54.........................................................................................................................‬‬

‫‪ .4‬در بسیاری از برنامه ها‪ ،‬بسیاری از محاسبات شامل پردازش ساختارهای داده‪ ،‬مانند آرایه ها یا توالی رکوردها می شود‪ .‬در‬
‫بسیاری از موارد‪ ،‬ارجاعات پی در پی به این ساختارهای داده‪ ،‬به مواردی از نزدیک واقع شده است‪.‬‬

‫جدول ‪ 1.3‬بسامد دینامیکی نسبی عملیات زبان سطح باال‬

‫حجم‬ ‫‪HUCK‬‬ ‫‪KNUT‬‬ ‫‪PATT‬‬ ‫‪TANE‬‬


‫کار زبان‬ ‫‪83‬‬ ‫‪71‬‬ ‫‪82‬‬ ‫‪78 SAL‬‬
‫پاسکال‬ ‫‪FORT‬‬ ‫‪Pascal‬‬ ‫‪C‬‬ ‫‪System‬‬
‫مطالعه‬
‫علمی‬ ‫‪RAN‬‬ ‫‪System‬‬ ‫‪System‬‬
‫دانشجو‬
‫‪Assign‬‬ ‫‪74‬‬ ‫‪67‬‬ ‫‪45‬‬ ‫‪38‬‬ ‫‪42‬‬
‫‪Loop‬‬ ‫‪4‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪3‬‬ ‫‪4‬‬
‫‪Call‬‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪15‬‬ ‫‪12‬‬ ‫‪12‬‬
‫‪IF‬‬ ‫‪20‬‬ ‫‪11‬‬ ‫‪29‬‬ ‫‪43‬‬ ‫‪36‬‬
‫‪GOTO‬‬ ‫‪2‬‬ ‫‪9‬‬ ‫—‬ ‫‪3‬‬ ‫—‬
‫‪Other‬‬ ‫—‬ ‫‪7‬‬ ‫‪6‬‬ ‫‪1‬‬ ‫‪6‬‬

‫این خط استدالل در بسیاری از مطالعات تایید شده است‪ .‬با توجه به نکته ‪ ،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‬‬

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

‫شکل ‪ 1.21‬نمونه رفتار برگشت تماس یک برنامه‬

‫عملکرد حافظه دو سطحی‬

‫ویژگی ‪ locality‬را می توان در تشکیل یک حافظه دو سطحی مورد سوء استفاده قرار داد‪ .‬حافظه سطح باال ‪ M1‬کوچکتر‪،‬‬
‫سریعتر و گرانتر در هر بیت از حافظه سطح پایین ‪ M2‬است‪ M1 .‬به عنوان یک ذخیره موقت برای بخشی از محتویات ‪M2‬‬
‫بزرگتر استفاده می شود‪ .‬هنگامی که یک مرجع حافظه ساخته می شود‪ ،‬تالش برای دسترسی به آیتم در ‪ M1‬انجام می شود‪.‬‬
‫‪55‬‬
‫سیستم عامل های داخلی و اصول طراحی‪56.........................................................................................................................‬‬

‫در صورت موفقیت آمیز بودن‪ ،‬دسترسی سریع ایجاد می شود‪ .‬اگر نه‪ ،‬بلوکی از مکانهای حافظه از ‪ M2‬به ‪ M1‬کپی میشود و‬
‫دسترسی از طریق ‪ M1‬انجام میشود‪ .‬به دلیل موقعیت مکانی‪ ،‬هنگامی که یک بلوک به ‪ M1‬وارد می شود‪ ،‬باید تعدادی‬
‫دسترسی به مکان های آن بلوک وجود داشته باشد که در نتیجه خدمات کلی سریع انجام می شود‪.‬‬

‫برای بیان میانگین زمان دسترسی به یک آیتم‪ ،‬نه تنها باید سرعت دو سطح حافظه بلکه احتمال یافتن یک مرجع در ‪ M1‬را نیز‬
‫در نظر بگیریم‪ .‬ما داریم ‪.‬جایی که‬

‫‪ = Ts‬میانگین زمان دسترسی سیستم‪.‬‬

‫‪ = T1‬زمان دسترسی ‪ M1‬به عنوان مثال‪ ،‬کش‪ ،‬حافظه پنهان دیسک‬

‫‪ = T2‬زمان دسترسی ‪ M2‬به عنوان مثال‪ ،‬حافظه اصلی‪ ،‬دیسک‬

‫‪ = H‬نسبت ضربه کسری از مرجع زمانی در ‪ M1‬یافت می شود‬

‫شکل ‪ 1.15‬میانگین زمان دسترسی را به عنوان تابعی از نسبت ضربه نشان می دهد‪ .‬همانطور که مشاهده می شود‪ ،‬برای درصد‬
‫باالیی از بازدیدها‪ ،‬میانگین زمان دسترسی کل به ‪ M1‬بسیار نزدیکتر از ‪ M2‬است‪.‬‬

‫کارایی‬

‫اجازه دهید به برخی از پارامترهای مربوط به ارزیابی مکانیزم حافظه دو سطحی نگاه کنیم‪ .‬ابتدا هزینه را در نظر بگیرید‪ .‬ما داریم‬

‫جایی که‬

‫‪ = Cs‬میانگین هزینه هر بیت برای حافظه ترکیبی دو سطحی‬

‫‪ = 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‬وجود دارد که هر دو الزامات را تا حد معقولی برآورده کند؟ ما می توانیم به این‬
‫سوال با یک سری سواالت فرعی پاسخ دهیم‪:‬‬

‫‪ -‬چه مقدار نسبت ضربه برای برآوردن نیاز عملکرد مورد نیاز است؟‬

‫‪ -‬چه اندازه ‪ 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.........................................................................................................................‬‬

‫شکل ‪ 1.24‬نسبت ضربه به عنوان تابعی از اندازه نسبی حافظه‬

‫این ما را به آخرین سؤالی که قبالً فهرست شد میرساند‪ :‬آیا اندازه نسبی دو حافظه‪ ،‬نیاز هزینه را برآورده میکند؟ پاسخ به‬
‫وضوح بله است‪ .‬اگر برای دستیابی به عملکرد خوب فقط به یک حافظه نسبتاً کوچک سطح باالیی نیاز داشته باشیم‪ ،‬آنگاه هزینه‬
‫متوسط هر بیت از دو سطح حافظه به حافظه ارزانتر سطح پایین نزدیک میشود‪ .‬لطفاً توجه داشته باشید که با درگیر شدن‬
‫حافظه نهان ‪ L2‬یا حتی کش های ‪ L2‬و ‪ ،L3‬تجزیه و تحلیل بسیار پیچیده تر است‪ .‬برای بحث به ‪ PEIR99‬و ‪HAND98‬‬
‫مراجعه کنید‪.‬‬

‫‪59‬‬
‫سیستم عامل های داخلی و اصول طراحی‪60.........................................................................................................................‬‬

‫فصل ‪2‬‬

‫نمای کلی سیستم عامل‬

‫‪ 2.1‬اهداف و عملکردهای سیستم عامل‬

‫سیستم عامل به عنوان رابط کاربر‪/‬کامپیوتر سیستم عامل به عنوان مدیر منابع‬

‫سهولت تکامل یک سیستم عامل‬

‫‪ 2.2‬تکامل سیستم عامل ها‬

‫پردازش سریال سیستم های دسته ای ساده‬

‫سیستم های دسته ای چندبرنامه ریزی شده سیستم های اشتراک زمان‬

‫‪ 2.3‬دستاوردهای عمده‪/‬فرآیند‪ /‬مدیریت حافظه‬

‫حفاظت از اطالعات و امنیت برنامه ریزی و مدیریت منابع‬

‫‪ 2.4‬تحوالت منتهی به سیستم عامل های مدرن‬

‫‪ 2.5‬تحمل خطا‪ /‬عیوب مفاهیم اساسی‪ /‬مکانیزم های سیستم عامل‬

‫‪ 2.6‬مالحظات طراحی سیستم عامل برای چند پردازنده و چند هسته متقارن سیستم عامل چند پردازنده مالحظات سیستم‬
‫عامل چند هسته ای‬

‫‪ 2.7‬مرور کلی ‪ Microsoft Windows‬معماری پسزمینه موضوعات مدل کالینت‪/‬سرور و اشیاء ‪ SMP‬ویندوز‬

‫‪ 2.8‬شرح تاریخچه سیستم های سنتی یونیکس‬

‫‪ 2.9‬سیستم های یونیکس مدرن‪System V Release 4 SVR4 BSD /‬سوالریس ‪10‬‬

‫‪ 2.10‬لینوکس‪ /‬تاریخ‪ /‬اجزای هسته ساختار مدوالر‬

‫‪ 2.11‬اندروید‪ /‬معماری نرم افزار اندروید فعالیت های معماری سیستم اندروید‪ /‬مدیریت قدرت‬
‫‪60‬‬
‫سیستم عامل های داخلی و اصول طراحی‪61.........................................................................................................................‬‬

‫‪ 2.12‬خواندن و انیمیشن های توصیه شده‬

‫‪ 2.13‬اصطالحات کلیدی‪ ،‬سؤاالت مروری و مشکالت‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬عملکردهای کلیدی یک سیستم عامل ‪ OS‬را در سطح باالیی خالصه کنید‪.‬‬

‫‪ -‬تکامل سیستم عامل های برای سیستمهای دستهای ساده اولیه به سیستمهای پیچیده مدرن را مورد بحث قرار دهید‪.‬‬

‫‪ -‬توضیح مختصری از هر یک از دستاوردهای اصلی در تحقیقات سیستم عامل‪ ،‬همانطور که در بخش ‪ 2.3‬تعریف شده است‪،‬‬
‫ارائه دهید‪.‬‬

‫‪ -‬در مورد حوزه های طراحی کلیدی که در توسعه سیستم عامل های مدرن مؤثر بوده اند بحث کنید‪.‬‬

‫‪ -‬ماشین های مجازی و مجازی سازی را تعریف و مورد بحث قرار دهید‪.‬‬

‫‪ -‬مسائل طراحی سیستم عامل را که با معرفی چند پردازنده و سازمان چند هسته ای مطرح می شود‪ ،‬درک کنید‪.‬‬

‫‪ -‬ساختار اساسی ویندوز ‪ 7‬را درک کنید‪.‬‬

‫‪ -‬عناصر اساسی یک سیستم یونیکس سنتی را شرح دهید‪.‬‬

‫‪ -‬ویژگی های جدید موجود در سیستم های یونیکس مدرن را توضیح دهید‪.‬‬

‫‪ -‬لینوکس و رابطه آن با یونیکس را مورد بحث قرار دهید‪.‬‬

‫ما مطالعه خود را در مورد سیستم عامل ها ‪ OS‬با یک تاریخچه مختصر آغاز می کنیم‪ .‬این تاریخچه به خودی خود جالب است‬
‫و همچنین در خدمت ارائه یک نمای کلی از اصول سیستم عامل است‪ .‬بخش اول به بررسی اهداف و عملکردهای سیستم عامل‬
‫می پردازد‪ .‬سپس به چگونگی تکامل سیستم عامل های از سیستمهای دستهای بدوی به سیستمهای چندکاربری پیچیده و‬
‫چندوظیفهای میپردازیم‪ .‬بقیه فصل به تاریخچه و ویژگی های کلی دو سیستم عامل می پردازد که به عنوان نمونه در سراسر‬
‫این کتاب عمل می کنند‪ .‬تمام مطالب این فصل در ادامه کتاب با عمق بیشتری پوشش داده شده است‪.‬‬

‫‪61‬‬
‫سیستم عامل های داخلی و اصول طراحی‪62.........................................................................................................................‬‬

‫‪ 2.1‬اهداف و عملکردهای سیستم عامل‬

‫سیستم عامل برنامه ای است که اجرای برنامه های کاربردی را کنترل می کند و به عنوان رابط بین برنامه ها و سخت افزار‬
‫کامپیوتر عمل می کند‪ .‬می توان آن را دارای سه هدف در نظر گرفت‪:‬‬

‫‪ -‬راحتی‪ :‬یک سیستمعامل استفاده از رایانه را راحتتر میکند‪.‬‬

‫‪ -‬کارایی‪ :‬یک سیستم عامل اجازه می دهد تا از منابع سیستم کامپیوتری به شیوه ای کارآمد استفاده شود‪.‬‬

‫‪ -‬توانایی تکامل‪ :‬یک سیستم عامل باید به گونه ای ساخته شود که امکان توسعه موثر‪ ،‬آزمایش و معرفی عملکردهای جدید‬
‫سیستم را بدون تداخل با سرویس فراهم کند‪.‬‬

‫اجازه دهید به نوبه خود این سه جنبه از یک سیستم عامل را بررسی کنیم‪.‬‬

‫سیستم عامل به عنوان یک رابط کاربر‪/‬کامپیوتر‬

‫سخت افزار و نرم افزار مورد استفاده در ارائه برنامه های کاربردی به کاربر را می توان به صورت الیه ای یا سلسله مراتبی مشاهده‬
‫کرد‪ ،‬همانطور که در شکل ‪ 2.1‬نشان داده شده است‪ .‬کاربر این برنامهها‪ ،‬یعنی کاربر نهایی‪ ،‬عموماً به جزئیات سختافزار رایانه‬
‫توجهی ندارد‪ .‬بنابراین‪ ،‬کاربر نهایی یک سیستم کامپیوتری را بر حسب مجموعه ای از کاربردها مشاهده می کند‪ .‬یک برنامه‬
‫کاربردی را می توان در یک زبان برنامه نویسی بیان کرد و توسط یک برنامه نویس برنامه توسعه داده می شود‪ .‬اگر کسی بخواهد‬
‫یک برنامه کاربردی را به عنوان مجموعه ای از دستورالعمل های ماشینی که به طور کامل مسئولیت کنترل سخت افزار کامپیوتر‬
‫را بر عهده دارد‪ ،‬توسعه دهد‪ ،‬با یک تعهد بسیار پیچیده روبرو می شود‪ .‬برای سهولت این کار‪ ،‬مجموعه ای از برنامه های‬
‫سیستمی ارائه شده است‪ .‬برخی از این برنامه ها به عنوان ابزارهای کمکی یا برنامه های کتابخانه ای شناخته می شوند‪ .‬اینها‬
‫توابع پر استفاده را اجرا می کنند که به ایجاد برنامه‪ ،‬مدیریت فایل ها و کنترل دستگاه های ورودی‪/‬خروجی کمک می کند‪ .‬یک‬
‫برنامه نویس از این امکانات در توسعه یک برنامه کاربردی استفاده می کند و برنامه در حالی که در حال اجرا است‪ ،‬برنامه های‬
‫کاربردی را برای انجام برخی عملکردها فراخوانی می کند‪ .‬مهمترین مجموعه برنامه های سیستم شامل سیستم عامل است‪.‬‬
‫سیستم عامل جزئیات سخت افزار را از برنامه نویس پنهان می کند و یک رابط کاربری مناسب برای استفاده از سیستم در اختیار‬
‫برنامه نویس قرار می دهد‪ .‬به عنوان یک واسطه عمل می کند و دسترسی و استفاده از آن امکانات و خدمات را برای برنامه نویس‬
‫و برنامه های کاربردی آسان تر می کند‪.‬‬

‫‪62‬‬
‫سیستم عامل های داخلی و اصول طراحی‪63.........................................................................................................................‬‬

‫برنامه های کاربردی‬


‫رابط برنامه نویسی برنامه‬
‫کتابخانه ها‪/‬آب و برق‬
‫سخت افزار‬
‫رابط باینری برنامه‬

‫سیستم عامل‬
‫مجموعه دستورالعمل‬
‫معماری‬
‫سخت افزار اجرایی‬

‫ترجمه‬
‫اتصال سیستم (باس)‬ ‫حافظه‬
‫نرم افزار‬

‫دستگاه های‬
‫ورودی‪/‬خروجی و‬ ‫حافظه اصلی‬
‫شبکه‬

‫شکل ‪ 2.1‬ساختار سخت افزار و نرم افزار کامپیوتر‬

‫به طور خالصه‪ ،‬سیستم عامل معموالً خدماتی را در زمینه های زیر ارائه می دهد‪:‬‬

‫‪ -‬توسعه برنامه‪ :‬سیستم عامل امکانات و خدمات مختلفی مانند ویرایشگرها و دیباگرها را برای کمک به برنامه نویس در ایجاد‬
‫برنامه ها فراهم می کند‪ .‬به طور معمول‪ ،‬این خدمات به شکل برنامه های کاربردی هستند که اگرچه به طور دقیق بخشی از‬
‫هسته سیستم عامل نیستند‪ ،‬اما با سیستم عامل ارائه می شوند و به عنوان ابزارهای توسعه برنامه کاربردی شناخته می شوند‪.‬‬

‫‪ -‬اجرای برنامه‪ :‬برای اجرای یک برنامه باید چند مرحله انجام شود‪ .‬دستورالعمل ها و داده ها باید در حافظه اصلی بارگذاری‬
‫شوند‪ ،‬دستگاه ها و فایل های ورودی‪/‬خروجی باید مقداردهی اولیه شوند و منابع دیگر باید آماده شوند‪ .‬سیستم عامل این وظایف‬
‫زمان بندی را برای کاربر انجام می دهد‪.‬‬

‫‪ -‬دسترسی به دستگاههای ورودی‪/‬خروجی‪ :‬هر دستگاه ورودی‪/‬خروجی به مجموعه دستورالعملها یا سیگنالهای کنترلی خاص‬
‫خود برای کارکرد نیاز دارد‪ .‬این سیستم عامل یک رابط یکنواخت فراهم می کند که این جزئیات را پنهان می کند تا برنامه‬
‫نویسان بتوانند با استفاده از خواندن و نوشتن ساده به چنین دستگاه هایی دسترسی داشته باشند‪.‬‬

‫‪63‬‬
‫سیستم عامل های داخلی و اصول طراحی‪64.........................................................................................................................‬‬

‫‪ -‬دسترسی کنترل شده به فایل ها‪ :‬برای دسترسی به فایل‪ ،‬سیستم عامل باید درک دقیقی از ماهیت دستگاه ورودی‪/‬خروجی‬
‫درایو دیسک‪ ،‬درایو نوار بلکه ساختار داده های موجود در فایل های موجود در فایل را نیز منعکس کند‪ .‬رسانه ذخیره سازی در‬
‫مورد سیستمی با چندین کاربر‪ ،‬سیستم عامل ممکن است مکانیزم های حفاظتی برای کنترل دسترسی به فایل ها فراهم کند‪.‬‬

‫‪ -‬دسترسی به سیستم‪ :‬برای سیستم های مشترک یا عمومی‪ ،‬سیستم عامل دسترسی به سیستم را به عنوان یک کل و به منابع‬
‫سیستم خاص کنترل می کند‪ .‬تابع دسترسی باید از منابع و داده ها در برابر کاربران غیرمجاز محافظت کند و باید تضادها را‬
‫برای اختالف منابع حل کند‪.‬‬

‫‪ -‬تشخیص خطا و پاسخ‪ :‬خطاهای مختلفی ممکن است در حین کار کردن سیستم کامپیوتری رخ دهد‪ .‬اینها شامل خطاهای‬
‫سخت افزاری داخلی و خارجی‪ ،‬مانند خطای حافظه‪ ،‬یا خرابی یا نقص دستگاه است‪ .‬و خطاهای نرم افزاری مختلف‪ ،‬مانند تقسیم‬
‫بر صفر‪ ،‬تالش برای دسترسی به مکان حافظه ممنوعه‪ ،‬و ناتوانی سیستم عامل در اعطای درخواست یک برنامه کاربردی‪ .‬در هر‬
‫مورد‪ ،‬سیستم عامل باید پاسخی ارائه دهد که شرایط خطا را با کمترین تأثیر بر برنامه های در حال اجرا پاک کند‪ .‬پاسخ ممکن‬
‫است از پایان دادن به برنامه ای که باعث خطا شده‪ ،‬تا تالش مجدد عملیات‪ ،‬تا گزارش دادن خطا به برنامه باشد‪.‬‬

‫‪ -‬حسابداری‪ :‬یک سیستم عامل خوب آمار استفاده از منابع مختلف را جمع آوری می کند و پارامترهای عملکرد مانند زمان‬
‫پاسخ را نظارت می کند‪ .‬در هر سیستمی‪ ،‬این اطالعات برای پیشبینی نیاز به پیشرفتهای آینده و تنظیم سیستم برای بهبود‬
‫عملکرد مفید است‪ .‬در یک سیستم چند کاربره‪ ،‬اطالعات را می توان برای مقاصد صورتحساب استفاده کرد‪.‬‬

‫شکل ‪ 2.1‬همچنین سه رابط کلیدی را در یک سیستم کامپیوتری معمولی نشان می دهد‪:‬‬

‫‪ -‬معماری مجموعه دستورات ‪ ISA: ISA‬مجموعه دستورات زبان ماشین را تعریف می کند که یک کامپیوتر می تواند دنبال‬
‫کند‪ .‬این رابط مرز بین سخت افزار و نرم افزار است‪ .‬توجه داشته باشید که هم برنامه های کاربردی و هم ابزارهای کمکی ممکن‬
‫است مستقیماً به ‪ ISA‬دسترسی داشته باشند‪ .‬برای این برنامه ها‪ ،‬زیرمجموعه ای از رپرتوار دستورالعمل موجود است ‪user‬‬
‫‪ .ISA‬سیستم عامل به دستورالعمل های زبان ماشین اضافی که با مدیریت منابع سیستم سر و کار دارد سیستم ‪ ISA‬دسترسی‬
‫دارد‪.‬‬

‫‪ -‬رابط باینری برنامه ‪ ABI: ABI‬استانداردی را برای قابلیت حمل باینری در بین برنامه ها تعریف می کند‪ ABI .‬رابط‬
‫فراخوانی سیستم را برای سیستم عامل و منابع سخت افزاری و خدمات موجود در یک سیستم از طریق کاربر ‪ ISA‬تعریف می‬
‫کند‪.‬‬

‫‪ -‬رابط برنامه نویسی کاربردی ‪ API: API‬به برنامه دسترسی به منابع سخت افزاری و خدمات موجود در یک سیستم را از‬
‫طریق ‪ ISA‬کاربر که با فراخوانی های کتابخانه زبان سطح باال ‪ HLL‬تکمیل می شود‪ ،‬می دهد‪ .‬هر تماس سیستمی معموالً از‬

‫‪64‬‬
‫سیستم عامل های داخلی و اصول طراحی‪65.........................................................................................................................‬‬

‫طریق کتابخانه ها انجام می شود‪ .‬استفاده از یک ‪ ،API‬نرم افزار کاربردی را قادر می سازد تا به راحتی‪ ،‬از طریق اجرا مجدد‪ ،‬به‬
‫سیستم های دیگری که از همان ‪ API‬پشتیبانی می کنند‪ ،‬منتقل شود‪.‬‬

‫سیستم عامل به عنوان مدیر منابع‬

‫کامپیوتر مجموعه ای از منابع برای جابجایی‪ ،‬ذخیره سازی و پردازش داده ها و برای کنترل این توابع است‪ .‬سیستم عامل‬
‫مسئول مدیریت این منابع است‪.‬‬

‫آیا می توان گفت که این سیستم عامل است که حرکت‪ ،‬ذخیره سازی و پردازش داده ها را کنترل می کند؟ از یک منظر‪ ،‬پاسخ‬
‫مثبت است‪ :‬با مدیریت منابع رایانه‪ ،‬سیستم عامل کنترل عملکردهای اساسی رایانه را در اختیار دارد‪ .‬اما این کنترل به شیوه ای‬
‫عجیب اعمال می شود‪ .‬به طور معمول‪ ،‬ما مکانیزم کنترل را به عنوان چیزی خارج از آنچه کنترل می شود‪ ،‬یا حداقل به عنوان‬
‫چیزی که بخشی مجزا و مجزا از آن چیزی است که کنترل می شود‪ ،‬در نظر می گیریم‪ .‬به عنوان مثال‪ ،‬یک سیستم گرمایش‬
‫مسکونی توسط یک ترموستات کنترل می شود که جدا از دستگاه تولید و توزیع گرما است‪ .‬این مورد در مورد سیستم عامل‬
‫نیست‪ ،‬که به عنوان یک مکانیسم کنترل از دو جنبه غیر معمول است‪: .‬‬

‫‪ -‬سیستم عامل مانند نرم افزارهای کامپیوتری معمولی عمل می کند‪ .‬یعنی یک برنامه یا مجموعه ای از برنامه هایی است که‬
‫توسط پردازنده اجرا می شود‪.‬‬

‫‪ -‬سیستمعامل اغلب کنترل را رها میکند و باید به پردازنده وابسته باشد تا بتواند کنترل را دوباره به دست آورد‪.‬‬

‫مانند سایر برنامه های کامپیوتری‪ ،‬سیستم عامل دستورالعمل هایی را برای پردازنده ارائه می دهد‪ .‬تفاوت اصلی در هدف برنامه‬
‫است‪ .‬سیستم عامل پردازنده را در استفاده از سایر منابع سیستم و در زمان بندی اجرای برنامه های دیگر هدایت می کند‪ .‬اما‬
‫برای اینکه پردازنده بتواند هر یک از این کارها را انجام دهد‪ ،‬باید اجرای برنامه سیستم عامل را متوقف کند و برنامه های دیگر را‬
‫اجرا کند‪ .‬بنابراین‪ ،‬سیستم عامل برای انجام برخی کارهای «مفید»‪ ،‬کنترل را برای پردازشگر رها میکند و سپس آنقدر کنترل را‬
‫از سر میگیرد تا پردازنده را برای انجام کار بعدی آماده کند‪ .‬مکانیسم های درگیر در همه اینها باید با ادامه فصل مشخص شود‪.‬‬

‫شکل ‪ 2.2‬منابع اصلی را نشان می دهد که توسط سیستم عامل مدیریت می شوند‪ .‬بخشی از سیستم عامل در حافظه اصلی‬
‫است‪ .‬این شامل هسته یا هسته می شود که حاوی بیشترین توابع استفاده شده در سیستم عامل و در یک زمان معین‪ ،‬سایر‬
‫بخش های سیستم عامل در حال استفاده است‪ .‬باقیمانده حافظه اصلی شامل برنامه ها و داده های کاربر است‪ .‬همانطور که‬
‫خواهیم دید‪ ،‬سخت افزار مدیریت حافظه در پردازنده و سیستم عامل به طور مشترک تخصیص حافظه اصلی را کنترل می کنند‪.‬‬
‫سیستم عامل تصمیم می گیرد که یک دستگاه ورودی‪/‬خروجی چه زمانی می تواند توسط یک برنامه در اجرا استفاده شود و‬
‫دسترسی و استفاده از فایل ها را کنترل می کند‪ .‬پردازنده به خودی خود یک منبع است و سیستم عامل باید تعیین کند که‬

‫‪65‬‬
‫سیستم عامل های داخلی و اصول طراحی‪66.........................................................................................................................‬‬

‫چقدر زمان پردازنده برای اجرای یک برنامه کاربر خاص اختصاص داده می شود‪ .‬در مورد یک سیستم چند پردازنده‪ ،‬این تصمیم‬
‫باید همه پردازنده ها را در بر گیرد‪.‬‬

‫سهولت تکامل یک سیستم عامل‬

‫یک سیستم عامل اصلی به دالیل مختلفی در طول زمان تکامل می یابد‪:‬‬

‫‪ -‬ارتقاء سختافزار بهعالوه انواع جدید سختافزار‪ :‬برای مثال‪ ،‬نسخههای اولیه یونیکس و سیستمعامل مکینتاش از مکانیزم‬
‫صفحهبندی استفاده نمیکردند‪ ،‬زیرا بر روی پردازندههایی بدون سختافزار‪ 7‬صفحهبندی اجرا میشدند‪.‬‬

‫سیستم کامپیوتری‬

‫دستگاه ها ورودی‪/‬خروجی‬
‫حافظه‬

‫نرم افزار‬ ‫پرینتر‪ ،‬کیبورد‪،‬‬


‫سیستم عامل‬ ‫دوربین دیجیتال‬
‫و غیره‬

‫برنامه ها و‬
‫داده ها‬

‫پردازنده‬ ‫پردازنده‬

‫ذخیره‬
‫سازی‬

‫سیستم عامل‬

‫برنامه ها‬

‫شکل ‪ 2.2‬سیستم عامل به عنوان مدیر منابع‬ ‫داده ها‬

‫نسخه های این سیستم عامل ها برای بهره برداری از قابلیت های صفحه بندی اصالح شدند‪ .‬همچنین‪ ،‬استفاده از پایانههای‬
‫گرافیکی و پایانههای حالت صفحه به جای پایانههای حالت اسکرول خط در یک زمان‪ ،‬بر طراحی سیستمعامل تأثیر میگذارد‪ .‬به‬

‫‪ 7‬صفحه بندی بعداً در این فصل به طور خالصه معرفی می شود و در فصل ‪ 7‬به تفصیل مورد بحث قرار می گیرد‪.‬‬
‫‪66‬‬
‫سیستم عامل های داخلی و اصول طراحی‪67.........................................................................................................................‬‬

‫عنوان مثال‪ ،‬یک ترمینال گرافیکی معموالً به کاربر اجازه می دهد تا چندین برنامه را همزمان از طریق "پنجره ها" روی صفحه‬
‫مشاهده کند‪ .‬این نیاز به پشتیبانی پیچیده تری در سیستم عامل دارد‪.‬‬

‫‪ -‬خدمات جدید‪ :‬در پاسخ به تقاضای کاربر یا در پاسخ به نیازهای مدیران سیستم‪ ،‬سیستم عامل برای ارائه خدمات جدید‬
‫گسترش می یابد‪ .‬به عنوان مثال‪ ،‬اگر ثابت شود که حفظ عملکرد خوب برای کاربران با ابزارهای موجود دشوار است‪ ،‬ابزارهای‬
‫اندازه گیری و کنترل جدید ممکن است به سیستم عامل اضافه شوند‪.‬‬

‫‪ -‬رفع‪ :‬هر سیستم عاملی دارای نقص است‪ .‬اینها در طول زمان کشف می شوند و رفع می شوند‪ .‬البته‪ ،‬تعمیر ممکن است‬
‫خطاهای جدیدی ایجاد کند‪.‬‬

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

‫‪ 2.2‬تکامل سیستم های عامل‬

‫در تالش برای درک الزامات کلیدی یک سیستمعامل و اهمیت ویژگیهای اصلی یک سیستمعامل معاصر‪ ،‬در نظر گرفتن اینکه‬
‫چگونه سیستم عامل های در طول سالها تکامل یافتهاند‪ ،‬مفید است‪.‬‬

‫پردازش سریال‬

‫با اولین رایانه ها‪ ،‬از اواخر دهه ‪ 1940‬تا اواسط دهه ‪ ،1950‬برنامه نویس مستقیماً با سخت افزار رایانه تعامل داشت‪ .‬هیچ سیستم‬
‫عاملی وجود نداشت این رایانهها از طریق کنسولی متشکل از چراغهای نمایشگر‪ ،‬سوئیچهای کلید‪ ،‬نوعی دستگاه ورودی و یک‬
‫چاپگر اجرا میشدند‪ .‬برنامه های موجود در کد ماشین از طریق دستگاه ورودی به عنوان مثال‪ ،‬کارت خوان بارگیری می شوند‪.‬‬
‫اگر خطایی برنامه را متوقف می کرد‪ ،‬وضعیت خطا با چراغ ها نشان داده می شد‪ .‬اگر برنامه به طور معمول تکمیل شود‪ ،‬خروجی‬
‫روی چاپگر ظاهر می شود‪.‬‬

‫این سیستم های اولیه دو مشکل اصلی را ارائه کردند‪:‬‬

‫‪ -‬زمانبندی‪ :‬اکثر نصبها از یک برگه ثبت نام نسخه چاپی برای رزرو زمان رایانه استفاده میکنند‪ .‬به طور معمول‪ ،‬یک کاربر‬
‫می تواند برای مدت زمان چند برابر نیم ساعت یا بیشتر ثبت نام کند‪ .‬یک کاربر ممکن است برای یک ساعت ثبت نام کند و در‬

‫‪67‬‬
‫سیستم عامل های داخلی و اصول طراحی‪68.........................................................................................................................‬‬

‫‪ 45‬دقیقه تمام کند‪ .‬این امر منجر به تلف شدن زمان پردازش رایانه می شود‪ .‬از طرف دیگر‪ ،‬کاربر ممکن است با مشکل مواجه‬
‫شود‪ ،‬در زمان تعیین شده کار را تمام نکند و مجبور شود قبل از حل مشکل متوقف شود‪.‬‬

‫‪ -‬زمان راه اندازی‪ :‬یک برنامه واحد‪ ،‬به نام ‪ ،job‬می تواند شامل بارگیری اجرار به اضافه برنامه زبان سطح باال برنامه منبع در‬
‫حافظه‪ ،‬ذخیره برنامه اجرا شده برنامه شی و سپس بارگیری و پیوند دادن شیء با یکدیگر باشد‪ .‬برنامه و توابع مشترک هر یک از‬
‫این مراحل می تواند شامل نصب یا جدا کردن نوارها یا تنظیم عرشه کارت باشد‪ .‬اگر خطایی رخ می داد‪ ،‬کاربر بدبخت معموالً‬
‫باید به ابتدای توالی راه اندازی برمی گشت‪ .‬بنابراین‪ ،‬زمان قابل توجهی صرف تنظیم برنامه برای اجرا شد‪.‬‬

‫این حالت عملکرد را می توان پردازش سریال نامید که منعکس کننده این واقعیت است که کاربران به صورت سری به رایانه‬
‫دسترسی دارند‪ .‬با گذشت زمان‪ ،‬ابزارهای نرم افزاری سیستمی مختلف برای تالش برای کارآمدتر کردن پردازش سریال توسعه‬
‫یافتند‪ .‬اینها شامل کتابخانههایی از توابع رایج‪ ،‬لینککنندهها‪ ،‬لودرها‪ ،‬اشکالزداها و روتینهای درایور ورودی‪/‬خروجی است که‬
‫بهعنوان نرمافزار مشترک برای همه کاربران در دسترس بودند‪.‬‬

‫سیستم های دسته ای ساده‬

‫کامپیوترهای اولیه بسیار گران بودند و از این رو‪ ،‬به حداکثر رساندن استفاده از پردازنده مهم بود‪ .‬زمان تلف شده به دلیل زمان‬
‫بندی و زمان راه اندازی غیر قابل قبول بود‪.‬‬

‫برای بهبود استفاده‪ ،‬مفهوم سیستم عامل دسته ای توسعه یافت‪ .‬به نظر می رسد که اولین سیستم عامل دسته ای و اولین‬
‫سیستم عامل از هر نوع در اواسط دهه ‪ 1950‬توسط جنرال موتورز برای استفاده در ‪ IBM 701 WEIZ81‬توسعه یافت‪ .‬این‬
‫مفهوم متعاقباً توسط تعدادی از مشتریان ‪ IBM‬اصالح و بر روی ‪ IBM 704‬پیادهسازی شد‪ .‬در اوایل دهه ‪ ،1960‬تعدادی از‬
‫فروشندگان سیستم عامل های دسته ای را برای سیستم های کامپیوتری خود توسعه دادند‪ ،IBSYS .‬سیستمعامل ‪ IBM‬برای‬
‫رایانههای ‪ ،7094/7090‬بهویژه به دلیل تأثیر گسترده آن بر سایر سیستمها قابل توجه است‪.‬‬

‫ایده اصلی پشت طرح ساده پردازش دسته ای‪ ،‬استفاده از یک نرم افزار به نام مانیتور است‪ .‬با این نوع سیستم عامل‪ ،‬کاربر دیگر‬
‫دسترسی مستقیم به پردازنده ندارد‪ .‬درعوض‪ ،‬کاربر کار را روی کارت یا نوار به اپراتور رایانه ارسال میکند‪ ،‬او کارها را بهطور‬
‫متوالی با هم دستهبندی میکند و کل دسته را برای استفاده توسط مانیتور روی یک دستگاه ورودی قرار میدهد‪ .‬هر برنامه به‬
‫گونه ای ساخته شده است که پس از تکمیل پردازش به مانیتور منشعب شود‪ ،‬در این مرحله مانیتور به طور خودکار بارگذاری‬
‫برنامه بعدی را آغاز می کند‪.‬‬

‫برای درک نحوه عملکرد این طرح‪ ،‬اجازه دهید از دو منظر به آن نگاه کنیم‪ :‬مانیتور و پردازنده‪.‬‬

‫‪68‬‬
‫سیستم عامل های داخلی و اصول طراحی‪69.........................................................................................................................‬‬

‫وقفه در پردازش‬

‫درایورهای دستگاه‬
‫نظارت کنید‬
‫توالی کار‬

‫کنترل مترجم زبان‬


‫مرز‬

‫منطقه برنامه‬
‫کاربر‬

‫شکل ‪ 2.3‬چیدمان حافظه برای ‪a‬مانیتور مقیم‬

‫‪ -‬دیدگاه مانیتور‪ :‬مانیتور توالی رویدادها را کنترل می کند‪ .‬برای تحقق این امر‪ ،‬بیشتر مانیتور باید همیشه در حافظه اصلی باشد‬
‫و برای اجرا در دسترس باشد شکل ‪ .2.3‬آن بخش به عنوان مانیتور مقیم نامیده می شود‪ .‬بقیه مانیتور شامل ابزارهای کاربردی و‬
‫توابع رایجی است که در ابتدای هر کاری که به آنها نیاز دارد به عنوان برنامه های فرعی برای برنامه کاربر بارگذاری می شوند‪.‬‬
‫مانیتور کارها را یکی یکی از دستگاه ورودی می خواند معموالً کارت خوان یا درایو نوار مغناطیسی‪ .‬همانطور که خوانده می شود‪،‬‬
‫کار فعلی در ناحیه برنامه کاربر قرار می گیرد و کنترل به این کار منتقل می شود‪ .‬پس از اتمام کار‪ ،‬کنترل را به مانیتور برمی‬
‫گرداند که بالفاصله در کار بعدی خوانده می شود‪ .‬نتایج هر کار برای تحویل به کاربر به یک دستگاه خروجی مانند چاپگر ارسال‬
‫می شود‪.‬‬

‫‪ -‬دیدگاه پردازنده‪ :‬در یک نقطه خاص‪ ،‬پردازنده در حال اجرای دستورالعمل ها از بخشی از حافظه اصلی حاوی نمایشگر است‪.‬‬
‫این دستورالعمل ها باعث می شود که کار بعدی در قسمت دیگری از حافظه اصلی خوانده شود‪.‬‬

‫هنگامی که یک کار خوانده شد‪ ،‬پردازنده با یک دستورالعمل شعبه در مانیتور مواجه می شود که به پردازنده دستور می دهد تا‬
‫اجرا را در شروع برنامه کاربر ادامه دهد‪ .‬سپس پردازنده دستورالعمل ها را در برنامه کاربر اجرا می کند تا زمانی که با یک‬
‫وضعیت پایان یا خطا مواجه شود‪ .‬هر یک از این رویدادها باعث می شود که پردازنده دستورات بعدی خود را از برنامه مانیتور‬
‫‪69‬‬
‫سیستم عامل های داخلی و اصول طراحی‪70.........................................................................................................................‬‬

‫دریافت کند‪ .‬بنابراین عبارت "کنترل به یک کار منتقل می شود" به سادگی به این معنی است که پردازنده اکنون در حال‬
‫واکشی و اجرای دستورالعمل ها در یک برنامه کاربر است و "کنترل به مانیتور بازگردانده شده است" به این معنی است که‬
‫پردازنده اکنون در حال دریافت و اجرای دستورالعمل ها از برنامه است‪ .‬برنامه نظارت‬

‫مانیتور یک عملکرد زمانبندی را انجام میدهد‪ :‬دستهای از کارها در صف قرار میگیرند‪ ،‬و کارها با حداکثر سرعت ممکن و بدون‬
‫زمان بیکاری اجرا میشوند‪ .‬مانیتور زمان تنظیم کار را نیز بهبود می بخشد‪ .‬با هر شغل‪ ،‬دستورالعمل ها در شکل ابتدایی زبان‬
‫کنترل شغل ‪ JCL‬گنجانده شده است‪ .‬این یک نوع خاص از زبان برنامه نویسی است که برای ارائه دستورالعمل ها به مانیتور‬
‫استفاده می شود‪ .‬یک مثال ساده این است که یک کاربر برنامه ای را که به زبان برنامه نویسی ‪ FORTRAN‬نوشته شده است‬
‫به اضافه مقداری داده برای استفاده توسط برنامه ارسال می کند‪ .‬تمام دستورالعمل ها و داده های ‪ FORTRAN‬در یک کارت‬
‫پانچ جداگانه یا یک رکورد جداگانه روی نوار قرار دارند‪ .‬عالوه بر ‪ FORTRAN‬و خطوط داده‪ ،‬این کار شامل دستورالعملهای‬
‫کنترل کار است که با شروع ‪ $‬نشان داده میشوند‪ .‬فرمت کلی کار به صورت زیر است‪:‬‬

‫برای اجرای این کار‪ ،‬مانیتور خط ‪ FTN$‬را می خواند و اجرار زبان مناسب را از حافظه انبوه خود معموالً نوار بارگیری می کند‪.‬‬
‫اجرار برنامه کاربر را به کد شی ترجمه می کند که در حافظه یا ذخیره سازی انبوه ذخیره می شود‪ .‬اگر در حافظه ذخیره شود‪،‬‬
‫عملیات به عنوان "اجرا‪ ،‬بارگذاری و رفتن" نامیده می شود‪ .‬اگر روی نوار ذخیره شود‪ ،‬دستور ‪ LOAD$‬مورد نیاز است‪ .‬این‬
‫دستورالعمل توسط مانیتور خوانده می شود که پس از عملیات اجرا مجدداً کنترل را به دست می آورد‪ .‬مانیتور لودر را فراخوانی‬
‫می کند که برنامه شی را در حافظه بارگذاری می کند به جای اجرار و کنترل را به آن منتقل می کند‪ .‬به این ترتیب‪ ،‬بخش‬
‫بزرگی از حافظه اصلی را می توان در میان زیرسیستم های مختلف به اشتراک گذاشت‪ ،‬اگرچه تنها یک زیر سیستم می تواند در‬
‫یک زمان اجرا شود‪.‬‬

‫در طول اجرای برنامه کاربر‪ ،‬هر دستور ورودی باعث می شود یک خط از داده خوانده شود‪ .‬دستورالعمل ورودی در برنامه کاربر‬
‫باعث می شود که یک روال ورودی که بخشی از سیستم عامل است فراخوانی شود‪ .‬روال ورودی بررسی می کند تا مطمئن شود‬
‫که برنامه به طور تصادفی در یک خط ‪ JCL‬خوانده نمی شود‪ .‬اگر این اتفاق بیفتد‪ ،‬خطایی رخ می دهد و کنترل به مانیتور‬
‫‪70‬‬
‫سیستم عامل های داخلی و اصول طراحی‪71.........................................................................................................................‬‬

‫منتقل می شود‪ .‬در پایان کار کاربر‪ ،‬مانیتور خطوط ورودی را اسکن می کند تا زمانی که با دستور ‪ JCL‬بعدی روبرو شود‪.‬‬
‫بنابراین‪ ،‬سیستم در برابر برنامه ای با خطوط داده بسیار زیاد یا خیلی کم محافظت می شود‪.‬‬

‫مانیتور یا سیستم عامل دسته ای‪ ،‬به سادگی یک برنامه کامپیوتری است‪ .‬این به توانایی پردازنده برای واکشی دستورالعمل ها از‬
‫بخش های مختلف حافظه اصلی برای گرفتن متناوب و رها کردن کنترل وابسته است‪ .‬برخی دیگر از ویژگی های سخت افزاری‬
‫نیز مطلوب هستند‪:‬‬

‫‪ -‬محافظت از حافظه‪ :‬زمانی که برنامه کاربر در حال اجرا است‪ ،‬نباید ناحیه حافظه حاوی نمایشگر را تغییر دهد‪ .‬اگر چنین‬
‫تالشی انجام شود‪ ،‬سخت افزار پردازنده باید خطا را تشخیص دهد و کنترل را به مانیتور منتقل کند‪ .‬سپس مانیتور کار را لغو‬
‫میکند‪ ،‬پیام خطا را چاپ میکند و در کار بعدی بارگذاری میکند‪.‬‬

‫‪ -‬تایمر‪ :‬از یک تایمر برای جلوگیری از انحصار یک کار در سیستم استفاده می شود‪ .‬تایمر در ابتدای هر کار تنظیم می شود‪ .‬اگر‬
‫تایمر منقضی شود‪ ،‬برنامه کاربر متوقف می شود و کنترل به مانیتور باز می گردد‪.‬‬

‫‪ -‬دستورالعملهای ممتاز‪ :‬برخی از دستورالعملهای سطح ماشین بهعنوان ممتاز تعیین شدهاند و فقط توسط مانیتور قابل اجرا‬
‫هستند‪ .‬اگر پردازنده هنگام اجرای یک برنامه کاربری با چنین دستورالعملی مواجه شود‪ ،‬خطایی رخ می دهد که باعث می شود‬
‫کنترل به مانیتور منتقل شود‪ .‬از جمله دستورالعمل های ممتاز‪ ،‬دستورالعمل های ‪ I/O‬هستند‪ ،‬به طوری که مانیتور کنترل تمام‬
‫دستگاه های ‪ I/O‬را حفظ می کند‪ .‬به عنوان مثال‪ ،‬این امر مانع از خواندن تصادفی دستورالعملهای کنترل کار توسط یک‬
‫برنامه کاربر از کار بعدی میشود‪ .‬اگر یک برنامه کاربر بخواهد ‪ I/O‬انجام دهد‪ ،‬باید از مانیتور درخواست کند که این عملیات را‬
‫برای آن انجام دهد‪.‬‬

‫‪ -‬وقفه ها‪ :‬مدل های اولیه کامپیوتر این قابلیت را نداشتند‪ .‬این ویژگی به سیستم عامل انعطاف پذیری بیشتری در واگذاری‬
‫کنترل و بازپس گیری کنترل از برنامه های کاربر می دهد‪.‬‬

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

‫البته می توان یک سیستم عامل بدون این ویژگی ها ساخت‪ .‬اما فروشندگان کامپیوتر به سرعت متوجه شدند که نتایج هرج و‬
‫مرج است‪ ،‬و بنابراین حتی سیستم عامل های دسته ای نسبتا ابتدایی نیز با این ویژگی های سخت افزاری ارائه شدند‪.‬‬

‫‪71‬‬
‫سیستم عامل های داخلی و اصول طراحی‪72.........................................................................................................................‬‬

‫با سیستم عامل دسته ای‪ ،‬زمان پردازنده بین اجرای برنامه های کاربر و اجرای مانیتور متناوب می شود‪ .‬دو قربانی وجود داشته‬
‫است‪ :‬اکنون مقداری حافظه اصلی در اختیار مانیتور قرار می گیرد و مقداری از زمان پردازنده توسط مانیتور مصرف می شود‪ .‬هر‬
‫دوی اینها اشکال سربار هستند‪ .‬با وجود این سربار‪ ،‬سیستم دسته ای ساده استفاده از رایانه را بهبود می بخشد‪.‬‬

‫سیستم های دسته ای چندبرنامه ای‬

‫حتی با توالی کار خودکار ارائه شده توسط یک سیستم عامل دسته ای ساده‪ ،‬پردازنده اغلب بیکار است‪ .‬مشکل این است که‬
‫دستگاه های ‪ I/O‬در مقایسه با پردازنده کند هستند‪.‬‬

‫خواندن یک رکورد از فایل‬


‫‪100‬دستور را اجرا کنید‬

‫یک رکورد برای فایل بنویسید‬


‫جمع‬

‫درصد استفاده از‪CPU‬‬

‫شکل ‪ 2.4‬مثال استفاده از سیستم‬

‫‪72‬‬
‫سیستم عامل های داخلی و اصول طراحی‪73.........................................................................................................................‬‬

‫(الف) برنامه ریزی یکپارچه‬

‫(ب) چندبرنامه نویسی با دو برنامه‬

‫ج) چندبرنامه نویسی با سه برنامه‬

‫شکل ‪ 2.5‬مثال برنامه ریزی چندگانه‬

‫جدول ‪ 2.1‬نمونه ویژگی های اجرای برنامه‬

‫‪JOB1‬‬ ‫‪JOB2‬‬ ‫‪JOB3‬‬


‫نوع شغل‬ ‫‪Heavy‬‬ ‫‪Heavy I/O‬‬ ‫‪Heavy I/O‬‬
‫‪compute‬‬
‫مدت زمان‬ ‫‪5 min‬‬ ‫‪15 min‬‬ ‫‪10 min‬‬
‫حافظه الزم است‬ ‫‪50 M‬‬ ‫‪100 M‬‬ ‫‪75 M‬‬
‫به دیسک نیاز‬ ‫‪No‬‬ ‫‪No‬‬ ‫‪Yes‬‬
‫دارید؟‬
‫به ترمینال نیاز‬ ‫‪No‬‬ ‫‪Yes‬‬ ‫‪No‬‬
‫دارید؟‬
‫به چاپگر نیاز‬ ‫‪No‬‬ ‫‪No‬‬ ‫‪Yes‬‬
‫دارید؟‬
‫‪73‬‬
‫سیستم عامل های داخلی و اصول طراحی‪74.........................................................................................................................‬‬

‫شکل ‪ 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‬کامل شد‪ ،‬پردازنده قطع می شود و کنترل به یک برنامه مدیریت وقفه در سیستم عامل منتقل می‬
‫شود‪ .‬سپس سیستم عامل کنترل را به کار دیگری منتقل می کند‪.‬‬

‫(الف) برنامه ریزی یکپارچه‬ ‫ب) چندبرنامه نویسی‬

‫شکل ‪ 2.6‬هیستوگرام های استفاده‬

‫سیستمعاملهای چندبرنامهنویسی در مقایسه با سیستمهای تک برنامهای یا تکبرنامهنویسی نسبتاً پیچیده هستند‪ .‬برای اینکه‬
‫چندین کار آماده اجرا شوند‪ ،‬باید در حافظه اصلی نگهداری شوند و به نوعی مدیریت حافظه نیاز دارند‪ .‬عالوه بر این‪ ،‬اگر چندین‬
‫کار آماده اجرا هستند‪ ،‬پردازنده باید تصمیم بگیرد که کدام یک را اجرا کند و این تصمیم نیاز به یک الگوریتم برای زمان بندی‬
‫دارد‪ .‬این مفاهیم بعداً در این فصل مورد بحث قرار می گیرند‪.‬‬

‫‪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.3‬چندبرنامه نویسی دسته ای در مقابل اشتراک زمانی‬

‫چندبرنامه نویسی دسته ای‬ ‫اشتراک وقت‬


‫هدف اصلی‬ ‫استفاده از پردازنده را به‬ ‫زمان پاسخگویی را به‬
‫حداکثر برسانید‬ ‫حداقل برسانید‬
‫منبع رهنمودهای‬ ‫دستورات زبان کنترل‬ ‫دستورات وارد شده‬
‫سیستم عامل‬ ‫شغل همراه با کار ارائه‬ ‫در ترمینال‬
‫شده است‬

‫شکل ‪ 2.7‬عملیات ‪CTSS‬‬

‫برای به حداقل رساندن ترافیک دیسک‪ ،‬حافظه کاربر تنها زمانی که برنامه ورودی آن را بازنویسی می کرد‪ ،‬نوشته می شد‪ .‬این‬
‫اصل در شکل ‪ 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‬اجرای فرآیند معمولی‬

‫شکل ‪ 2.8‬روشی را نشان می دهد که در آن فرآیندها ممکن است مدیریت شوند‪ .‬دو فرآیند ‪ A‬و ‪ B‬در بخشهایی از حافظه‬
‫اصلی وجود دارد‪ .‬یعنی یک بلوک از حافظه به هر فرآیندی اختصاص داده می شود که حاوی برنامه‪ ،‬داده ها و اطالعات زمینه‬
‫است‪ .‬هر فرآیند در یک لیست فرآیند ساخته شده و نگهداری شده توسط سیستم عامل ثبت می شود‪ .‬لیست فرآیند شامل یک‬
‫ورودی برای هر فرآیند است که شامل یک اشاره گر به محل بلوک حافظه است که شامل فرآیند است‪ .‬ورودی همچنین ممکن‬
‫است شامل بخشی یا تمام زمینه اجرای فرآیند باشد‪ .‬باقیمانده زمینه اجرا در جای دیگری ذخیره می شود‪ ،‬شاید با خود فرآیند‬
‫همانطور که در شکل ‪ 2.8‬نشان داده شده است یا اغلب در یک منطقه جداگانه از حافظه‪ .‬رجیستر شاخص فرآیند شامل فهرست‬
‫فرآیندی است که در حال حاضر پردازنده را کنترل می کند‪ .‬شمارنده برنامه به دستور بعدی در آن فرآیند اشاره می کند که باید‬
‫اجرا شود‪.‬‬

‫ثبات های پایه و حد‪ ،‬منطقه اشغال شده توسط فرآیند را در حافظه تعریف می کنند‪ :‬ثبات پایه آدرس شروع منطقه حافظه است‬
‫و حد‪ ،‬اندازه منطقه به بایت یا کلمات است‪ .‬شمارنده برنامه و همه مراجع داده نسبت به ثبات پایه تفسیر می شوند و نباید از‬
‫مقدار موجود در ثبات حد تجاوز کنند‪ .‬این از تداخل بین فرآیندها جلوگیری می کند‪.‬‬

‫در شکل ‪ ،2.8‬ثبت شاخص فرآیند نشان می دهد که فرآیند ‪ B‬در حال اجرا است‪ .‬فرآیند ‪ A‬قبالً در حال اجرا بود اما موقتاً قطع‬
‫شده است‪ .‬محتویات همه رجیسترها در لحظه وقفه ‪ A‬در زمینه اجرای آن ثبت شد‪ .‬بعداً‪ ،‬سیستم عامل میتواند یک سوئیچ‬
‫فرآیند را انجام دهد و اجرای فرآیند ‪ A‬را از سر بگیرد‪ .‬سوئیچ فرآیند شامل ذخیره زمینه ‪ B‬و بازیابی زمینه ‪ A‬است‪ .‬هنگامی‬
‫که شمارنده برنامه با مقداری بارگذاری میشود که به ناحیه برنامه ‪ A‬اشاره میکند‪ ،‬فرآیند ‪ A‬بارگیری میشود‪ .‬به طور خودکار‬
‫اجرا را از سر می گیرد‪.‬‬

‫‪82‬‬
‫سیستم عامل های داخلی و اصول طراحی‪83.........................................................................................................................‬‬

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

‫نکته پایانی که در اینجا به اختصار به آن اشاره می کنیم‪ ،‬مفهوم رشته است‪ .‬در اصل‪ ،‬یک فرآیند واحد‪ ،‬که منابع خاصی به آن‬
‫اختصاص داده شده است‪ ،‬می تواند به رشته های متعدد و همزمان تقسیم شود که به طور مشترک برای انجام کار فرآیند اجرا‬
‫می شوند‪ .‬این سطح جدیدی از فعالیت های موازی را برای مدیریت سخت افزار و نرم افزار معرفی می کند‪.‬‬

‫مدیریت حافظه‬

‫نیازهای کاربران را می توان با یک محیط محاسباتی که از برنامه نویسی مدوالر و استفاده انعطاف پذیر از داده ها پشتیبانی می‬
‫کند‪ ،‬به بهترین وجه برآورده کرد‪ .‬مدیران سیستم نیاز به کنترل کارآمد و منظم تخصیص فضای ذخیره سازی دارند‪ .‬سیستم‬
‫عامل برای برآوردن این الزامات‪ ،‬پنج مسئولیت اصلی مدیریت ذخیره سازی دارد‪:‬‬

‫‪ -‬جداسازی فرآیند‪ :‬سیستم عامل باید از تداخل فرآیندهای مستقل با حافظه یکدیگر‪ ،‬هم داده ها و هم دستورالعمل ها‪،‬‬
‫جلوگیری کند‪.‬‬

‫‪ -‬تخصیص و مدیریت خودکار‪ :‬برنامه ها باید به صورت پویا در سلسله مراتب حافظه در صورت لزوم تخصیص داده شوند‪.‬‬
‫تخصیص باید برای برنامه نویس شفاف باشد‪ .‬بنابراین‪ ،‬برنامهنویس از نگرانیهای مربوط به محدودیتهای حافظه خالص میشود‬
‫و سیستمعامل میتواند با تخصیص حافظه به کارها تنها در صورت نیاز به کارایی دست یابد‪.‬‬

‫پشتیبانی از برنامه نویسی ماژوالر‪ :‬برنامه نویسان باید قادر به تعریف ماژول های برنامه و ایجاد‪ ،‬تخریب و تغییر اندازه ماژول ها به‬
‫صورت پویا باشند‪.‬‬

‫حفاظت و کنترل دسترسی‪ :‬اشتراک گذاری حافظه‪ ،‬در هر سطحی از سلسله مراتب حافظه‪ ،‬این پتانسیل را برای یک برنامه ایجاد‬
‫می کند تا به فضای حافظه برنامه دیگر رسیدگی کند‪ .‬این امر زمانی مطلوب است که به اشتراک گذاری توسط برنامه های خاص‬
‫نیاز باشد‪.‬‬

‫در مواقع دیگر‪ ،‬یکپارچگی برنامه ها و حتی خود سیستم عامل را تهدید می کند‪ .‬سیستم عامل باید به بخش هایی از حافظه‬
‫اجازه دهد که به طرق مختلف توسط کاربران مختلف قابل دسترسی باشد‪.‬‬
‫‪83‬‬
‫سیستم عامل های داخلی و اصول طراحی‪84.........................................................................................................................‬‬

‫ذخیره سازی طوالنی مدت‪ :‬بسیاری از برنامه های کاربردی به ابزاری برای ذخیره سازی اطالعات برای مدت زمان طوالنی‪ ،‬پس‬
‫از خاموش شدن رایانه نیاز دارند‪.‬‬

‫به طور معمول‪ ،‬سیستم عامل ها این الزامات را با حافظه مجازی و امکانات سیستم فایل برآورده می کنند‪ .‬سیستم فایل یک‬
‫ذخیره طوالنی مدت با اطالعات ذخیره شده در اشیاء نامگذاری شده به نام فایل پیاده سازی می کند‪ .‬این فایل یک مفهوم‬
‫مناسب برای برنامه نویس است و یک واحد مفید برای کنترل دسترسی و محافظت برای سیستم عامل است‪.‬‬

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

‫یک برنامه یک کلمه را با استفاده از یک آدرس مجازی متشکل از یک شماره صفحه و یک افست در داخل صفحه ارجاع می‬
‫دهد‪ .‬هر صفحه از یک فرآیند ممکن است در هر جایی از حافظه اصلی قرار داشته باشد‪ .‬سیستم صفحهبندی یک نگاشت پویا‬
‫بین آدرس مجازی مورد استفاده در برنامه و یک آدرس واقعی یا آدرس فیزیکی در حافظه اصلی فراهم میکند‪.‬‬

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

‫‪84‬‬
‫سیستم عامل های داخلی و اصول طراحی‪85.........................................................................................................................‬‬

‫شکل ‪ 2.9‬مفاهیم حافظه مجازی‬

‫آدرس‬
‫واحد مدیریت‬ ‫واقعی‬
‫پردازنده‬
‫حافظه‬
‫آدرس‬ ‫حافظه‬
‫مجازی‬ ‫اصلی‬

‫آدرس‬
‫دیسک‬

‫حافظه‬
‫ثانویه‬

‫شکل ‪ 2.10‬آدرس دهی حافظه مجازی‬

‫سخت افزار پردازنده‪ ،‬همراه با سیستم عامل‪ ،‬یک «پردازنده مجازی» را در اختیار کاربر قرار می دهد که به حافظه مجازی‬
‫دسترسی دارد‪ .‬این حافظه ممکن است یک فضای آدرس خطی یا مجموعهای از بخشها باشد که بلوکهایی با طول متغیر از‬
‫آدرسهای پیوسته هستند‪ .‬در هر صورت‪ ،‬دستورالعمل های زبان برنامه نویسی می توانند به مکان های برنامه و داده ها در ناحیه‬
‫حافظه مجازی اشاره کنند‪ .‬جداسازی فرآیند را می توان با دادن حافظه مجازی منحصر به فرد و بدون همپوشانی به هر فرآیند به‬
‫دست آورد‪ .‬اشتراک گذاری حافظه را می توان با همپوشانی بخش هایی از دو فضای حافظه مجازی به دست آورد‪ .‬فایل ها در‬

‫‪85‬‬
‫سیستم عامل های داخلی و اصول طراحی‪86.........................................................................................................................‬‬

‫یک فروشگاه طوالنی مدت نگهداری می شوند‪ .‬فایل ها و بخش هایی از فایل ها ممکن است برای دستکاری توسط برنامه ها در‬
‫حافظه مجازی کپی شوند‪.‬‬

‫شکل ‪ 2.10‬نگرانی های مربوط به آدرس دهی در طرح حافظه مجازی را نشان می دهد‪ .‬ذخیره سازی شامل حافظه اصلی قابل‬
‫آدرس دهی مستقیم توسط دستورالعمل ماشین و حافظه کمکی با سرعت پایین است که به طور غیرمستقیم با بارگذاری بلوک‬
‫ها در حافظه اصلی قابل دسترسی است‪ .‬سخت افزار ترجمه آدرس واحد مدیریت حافظه بین پردازنده و حافظه قرار می گیرد‪.‬‬
‫برنامهها با استفاده از آدرسهای مجازی به مکانها اشاره میکنند که به آدرسهای حافظه اصلی واقعی نگاشت میشوند‪ .‬اگر به‬
‫یک آدرس مجازی ارجاع داده شود که در حافظه حقیقی نیست‪ ،‬آنگاه بخشی از محتویات حافظه حقیقی به حافظه کمکی مبادله‬
‫می شود و بلوک مورد نظر از داده ها مبادله می شود‪ .‬در طی این فعالیت‪ ،‬فرآیندی که مرجع آدرس را ایجاد می کند‪ .‬باید تعلیق‬
‫شود‪ .‬طراح سیستم عامل نیاز به ایجاد یک مکانیسم ترجمه آدرس دارد که سربار کمی ایجاد می کند و یک خط مشی تخصیص‬
‫ذخیره سازی که ترافیک بین سطوح حافظه را به حداقل می رساند‪.‬‬

‫حفاظت و امنیت اطالعات‬

‫رشد استفاده از سیستمهای اشتراک زمانی و اخیراً شبکههای کامپیوتری باعث افزایش نگرانی در مورد حفاظت از اطالعات شده‬
‫است‪ .‬ماهیت تهدیدی که به یک سازمان مربوط می شود بسته به شرایط بسیار متفاوت خواهد بود‪ .‬با این حال‪ ،‬برخی از ابزارهای‬
‫همه منظوره وجود دارد که میتوان آنها را در رایانهها و سیستمهای عاملی که از انواع مکانیسمهای حفاظتی و امنیتی پشتیبانی‬
‫میکنند‪ ،‬تعبیه کرد‪ .‬به طور کلی‪ ،‬ما با مشکل کنترل دسترسی به سیستم های کامپیوتری و اطالعات ذخیره شده در آنها‬
‫سروکار داریم‪.‬‬

‫بسیاری از کارهای مربوط به امنیت و حفاظت در مورد سیستم عامل ها را می توان تقریباً به چهار دسته تقسیم کرد‪:‬‬

‫‪ -‬در دسترس بودن‪ :‬نگران محافظت از سیستم در برابر وقفه است‪.‬‬

‫‪ -‬محرمانه بودن‪ :‬اطمینان می دهد که کاربران نمی توانند داده هایی را که دسترسی به آنها غیرمجاز است بخوانند‪.‬‬

‫‪ -‬یکپارچگی داده‪ :‬محافظت از داده ها در برابر تغییرات غیرمجاز‪.‬‬

‫‪ -‬اصالت‪ :‬مربوط به تأیید صحیح هویت کاربران و اعتبار پیام ها یا داده ها است‪.‬‬

‫‪86‬‬
‫سیستم عامل های داخلی و اصول طراحی‪87.........................................................................................................................‬‬

‫برنامه ریزی و مدیریت منابع‬

‫مسئولیت کلیدی سیستم عامل مدیریت منابع مختلف در دسترس فضای حافظه اصلی‪ ،‬دستگاه های ورودی‪/‬خروجی‪ ،‬پردازنده ها‬
‫و برنامه ریزی استفاده از آنها توسط فرآیندهای فعال مختلف است‪ .‬هر سیاست تخصیص منابع و برنامه ریزی باید سه عامل را در‬
‫نظر بگیرد‪:‬‬

‫‪ -‬انصاف‪ :‬به طور معمول‪ ،‬ما می خواهیم همه فرآیندهایی که برای استفاده از یک منبع خاص رقابت می کنند‪ ،‬تقریباً یکسان و‬
‫منصفانه به آن منبع دسترسی داشته باشند‪ .‬این امر به ویژه برای مشاغل هم طبقه‪ ،‬یعنی مشاغلی با تقاضاهای مشابه‪ ،‬صادق‬
‫است‪.‬‬

‫پاسخگویی متفاوت‪ :‬از سوی دیگر‪ ،‬سیستم عامل ممکن است نیاز داشته باشد که بین طبقات مختلف مشاغل با الزامات خدمات‬
‫متفاوت‪ ،‬تبعیض قائل شود‪ .‬سیستم عامل باید تالش کند تا تصمیمات تخصیص و زمان بندی را برای برآورده ساختن کل‬
‫مجموعه الزامات اتخاذ کند‪.‬‬

‫سیستم عامل نیز باید این تصمیمات را به صورت پویا اتخاذ کند‪ .‬برای مثال‪ ،‬اگر فرآیندی منتظر استفاده از یک دستگاه‬
‫ورودی‪/‬خروجی باشد‪ ،‬ممکن است سیستم عامل بخواهد آن فرآیند را برای اجرا در اسرع وقت برنامه ریزی کند تا دستگاه را برای‬
‫درخواست های بعدی از سایر فرآیندها آزاد کند‪.‬‬

‫‪ -‬کارایی‪ :‬سیستم عامل باید تالش کند تا توان عملیاتی را به حداکثر برساند‪ ،‬زمان پاسخ را به حداقل برساند‪ ،‬و در صورت‬
‫اشتراکگذاری زمان‪ ،‬تا حد امکان کاربران را در خود جای دهد‪ .‬این معیارها در تضاد هستند‪ .‬یافتن تعادل مناسب برای یک‬
‫موقعیت خاص یک مشکل مداوم برای تحقیقات سیستم عامل است‪.‬‬

‫برنامه ریزی و مدیریت منابع اساساً مسائل عملیاتی‪-‬پژوهشی هستند و می توان نتایج ریاضی آن رشته را به کار برد‪ .‬عالوه بر‬
‫این‪ ،‬اندازه گیری فعالیت سیستم برای نظارت بر عملکرد و انجام تنظیمات مهم است‪.‬‬

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

‫‪87‬‬
‫سیستم عامل های داخلی و اصول طراحی‪88.........................................................................................................................‬‬

‫در واقع‪ ،‬تکنیک دور رابین از یک صف دایره ای استفاده می کند‪ .‬استراتژی دیگر تخصیص سطوح اولویت به فرآیندهای مختلف‬
‫است که زمانبندیکننده فرآیندها را به ترتیب اولویت انتخاب میکند‪.‬‬

‫صف طوالنی مدت لیستی از کارهای جدید است که در انتظار استفاده از پردازنده هستند‪ .‬سیستم عامل با انتقال یک فرآیند از‬
‫صف طوالنی مدت به صف کوتاه مدت‪ ،‬کارها را به سیستم اضافه می کند‪ .‬در آن زمان‪ ،‬بخشی از حافظه اصلی باید به فرآیند‬
‫ورودی اختصاص یابد‪ .‬بنابراین‪ ،‬سیستم عامل باید مطمئن باشد که با پذیرش فرآیندهای زیاد در سیستم‪ ،‬حافظه یا زمان‬
‫پردازش را بیش از حد متعهد نمی کند‪ .‬برای هر دستگاه ‪ I/O‬یک صف ‪ I/O‬وجود دارد‪ .‬ممکن است بیش از یک فرآیند‬
‫درخواست استفاده از یک دستگاه ورودی‪/‬خروجی را داشته باشد‪ .‬تمام فرآیندهایی که منتظر استفاده از هر دستگاه هستند در‬
‫صف آن دستگاه قرار می گیرند‪ .‬مجدداً‪ ،‬سیستم عامل باید تعیین کند که کدام فرآیند را به یک دستگاه ورودی‪/‬خروجی موجود‬
‫اختصاص دهد‪.‬‬

‫در صورت بروز وقفه‪ ،‬سیستم عامل کنترل پردازنده را در کنترل کننده وقفه دریافت می کند‪ .‬یک فرآیند ممکن است به طور‬
‫خاص برخی از سرویس های سیستم عامل را فراخوانی کند‪ ،‬مانند کنترل کننده دستگاه ‪ I/O‬با استفاده از تماس سرویس‪ .‬در‬
‫این مورد‪ ،‬یک کنترل کننده تماس سرویس‪ ،‬نقطه ورود به سیستم عامل است‪ .‬در هر صورت‪ ،‬هنگامی که وقفه یا تماس سرویس‬
‫انجام شد‪ ،‬زمانبندی کوتاهمدت برای انتخاب فرآیندی برای اجرا فراخوانی میشود‪.‬‬

‫موارد فوق یک توصیف عملکردی است‪ .‬جزئیات و طراحی ماژوالر این بخش از سیستم عامل در سیستم های مختلف متفاوت‬
‫است‪ .‬بیشتر تالشهای تحقیق و توسعه در سیستم عامل های به انتخاب الگوریتمها و ساختارهای داده برای این تابع معطوف‬
‫شده است که انصاف‪ ،‬پاسخگویی متفاوت و کارایی را ارائه میدهند‪.‬‬

‫‪88‬‬
‫سیستم عامل های داخلی و اصول طراحی‪89.........................................................................................................................‬‬

‫سیستم عامل‬

‫تماس سرویس از‬ ‫کنترل کننده‬


‫فرآیند‬ ‫تماس خدمات‬
‫(کد)‬

‫قطع فرآیند‬
‫کنترل کننده‬
‫وقفه (کد)‬
‫وقفه از‬
‫‪I/O‬‬ ‫زمانبندی کوتاه‬
‫مدت (کد)‬

‫انتقال کنترل به‬


‫پردازش‬
‫شکل ‪ 2.11‬عناصر کلیدی یک سیستم عامل برای چندبرنامه ریزی‬

‫‪ 2.4‬تحوالت منتهی به سیستم عامل های مدرن‬

‫در طول سال ها‪ ،‬تکامل تدریجی ساختار و قابلیت های سیستم عامل وجود داشته است‪ .‬با این حال‪ ،‬در سال های اخیر تعدادی‬
‫از عناصر طراحی جدید هم در سیستم عامل های جدید و هم نسخه های جدید سیستم عامل های موجود معرفی شده اند که‬
‫تغییر عمده ای در ماهیت سیستم عامل ها ایجاد می کند‪ .‬این سیستم عامل های مدرن به پیشرفت های جدید در سخت افزار‪،‬‬
‫برنامه های کاربردی جدید و تهدیدات جدید امنیتی پاسخ می دهند‪ .‬از جمله محرک های سخت افزاری کلیدی می توان به‬
‫سیستم های چند پردازنده ای‪ ،‬افزایش بسیار زیاد سرعت پردازنده‪ ،‬پیوست های شبکه با سرعت باال و افزایش اندازه و تنوع‬
‫دستگاه های ذخیره سازی حافظه اشاره کرد‪ .‬در عرصه کاربرد‪ ،‬برنامه های چند رسانه ای‪ ،‬دسترسی به اینترنت و وب‪ ،‬و‬
‫محاسبات مشتری‪/‬سرور بر طراحی سیستم عامل تأثیر گذاشته اند‪ .‬با توجه به امنیت‪ ،‬دسترسی به اینترنت به رایانهها تهدید‬
‫بالقوه را به شدت افزایش داده است و حمالت پیچیدهتر مانند ویروسها‪ ،‬کرمها و تکنیکهای هک تأثیر عمیقی بر طراحی‬
‫سیستمعامل داشتهاند‪.‬‬

‫نرخ تغییر در تقاضاهای سیستم عامل نه تنها به اصالحات و بهبود معماری های موجود بلکه به روش های جدیدی برای‬
‫سازماندهی سیستم عامل نیاز دارد‪ .‬طیف گسترده ای از رویکردها و عناصر طراحی مختلف در سیستم عامل های تجربی و‬
‫تجاری آزمایش شده است‪ ،‬اما بسیاری از کارها در دسته های زیر قرار می گیرند‪:‬‬

‫‪ -‬معماری میکروکرنل‬

‫‪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‬عقب‬
‫تر است‪ .‬ما در قسمت هشتم چنین سیستم هایی را بررسی می کنیم‪ .‬یکی دیگر از نوآوری ها در طراحی سیستم عامل‪ ،‬استفاده‬
‫از فناوری های شی گرا است‪ .‬طراحی شی گرا به فرآیند افزودن پسوندهای مدوالر به یک هسته کوچک نظم می بخشد‪ .‬در سطح‬
‫سیستم عامل‪ ،‬یک ساختار مبتنی بر شی برنامه نویسان را قادر می سازد تا یک سیستم عامل را بدون ایجاد اختالل در‬
‫یکپارچگی سیستم شخصی سازی کنند‪ .‬شی گرایی همچنین توسعه ابزارهای توزیع شده و سیستم عامل های توزیع شده کامل‬
‫را تسهیل می کند‪.‬‬

‫الف( ‪) Interleaving‬چند برنامه نویسی؛ یک پردازنده(‬

‫(ب) درهم آمیختگی و همپوشانی (چند پردازش‪ ،‬دو پردازنده)‬

‫شکل ‪ 2.12‬چند برنامه ریزی و چند پردازش‬

‫‪ 2.5‬تحمل خطا‬

‫تحمل خطا به توانایی یک سیستم یا جزء برای ادامه عملکرد عادی علیرغم وجود خطاهای سخت افزاری یا نرم افزاری اشاره‬
‫دارد‪ .‬این معموالً شامل درجاتی از افزونگی است‪ .‬تحمل خطا برای افزایش قابلیت اطمینان یک سیستم در نظر گرفته شده است‪.‬‬
‫به طور معمول‪ ،‬افزایش تحمل خطا‪ ،‬و در نتیجه افزایش قابلیت اطمینان‪ ،‬با هزینه همراه است‪ ،‬چه از نظر مالی یا عملکرد‪ ،‬یا هر‬
‫دو‪ .‬بنابراین‪ ،‬میزان پذیرش اقدامات تحمل خطا باید با توجه به بحرانی بودن منبع تعیین شود‪.‬‬

‫مفاهیم اساسی‬

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

‫‪92‬‬
‫سیستم عامل های داخلی و اصول طراحی‪93.........................................................................................................................‬‬

‫قابلیت اطمینان ‪ Rt‬یک سیستم به عنوان احتمال عملکرد صحیح آن تا زمان ‪ t‬تعریف می شود‪ ،‬با توجه به اینکه سیستم در‬
‫زمان ‪ t = 0‬به درستی کار می کرد‪ .‬برای سیستم های کامپیوتری و سیستم عامل ها‪ ،‬اصطالح عملکرد صحیح به معنای اجرای‬
‫صحیح مجموعه ای از برنامه ها و محافظت از داده ها در برابر تغییرات ناخواسته‪ .‬میانگین زمان شکست ‪ MTTF‬به صورت‬
‫تعریف شده است‬

‫میانگین زمان تعمیر ‪ MTTR‬میانگین زمان الزم برای تعمیر یا تعویض یک عنصر معیوب است‪ .‬شکل ‪ 2.13‬رابطه بین این سه‬
‫پارامتر را نشان می دهد‪.‬‬

‫شکل ‪ 2.13‬وضعیت های عملیاتی سیستم‬

‫جدول ‪ 2.4‬کالس های در دسترس بودن‬

‫کالس‬ ‫دسترسی(توانایی)‬ ‫خرابی ساالنه‬


‫مداوم‬ ‫‪1.0‬‬ ‫‪0‬‬
‫خطاپذیری‬ ‫‪0.99999‬‬ ‫‪5 minutes‬‬
‫مقاوم در برابر خطا‬ ‫‪0.9999‬‬ ‫‪53 minutes‬‬
‫در دسترس بودن باال‬ ‫‪0.999‬‬ ‫‪8.3 hours‬‬
‫در دسترس بودن عادی‬ ‫‪0.99–0.995‬‬ ‫‪44–87 hours‬‬

‫‪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.........................................................................................................................‬‬

‫‪ 2.7‬نمای کلی ویندوز مایکروسافت‬

‫زمینه‬

‫مایکروسافت در ابتدا از نام ‪ 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 ،‬و ارتباطات بین‬
‫فرآیندی است‪.‬‬

‫شکل ‪ 2.14‬معماری داخلی ویندوز ‪RUSS11‬‬

‫‪ : 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‬اشیاء کنترل کرنل را فهرست می کند‪.‬‬

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

‫جدول ‪ 2.5‬اشیاء کنترل هسته ویندوز‬

‫فراخوانی رویه ناهمزمان‬ ‫برای شکستن اجرای یک رشته مشخص و برای فراخوانی‬
‫یک رویه در حالت پردازشگر مشخص استفاده می شود‪.‬‬
‫فراخوان رویه معوق‬ ‫برای به تعویق انداختن پردازش وقفه برای جلوگیری از‬
‫تأخیر در وقفه های سخت افزاری استفاده می شود‪ .‬همچنین‬
‫برای پیاده سازی تایمرها و ارتباطات بین پردازنده استفاده‬
‫می شود‪.‬‬
‫قطع کنید‬ ‫برای اتصال منبع وقفه به روال سرویس وقفه با استفاده از‬
‫ورودی در جدول توزیع وقفه ‪ IDT‬استفاده می شود‪ .‬هر‬
‫پردازنده یک ‪ IDT‬دارد که برای ارسال وقفه هایی که روی‬
‫آن پردازنده رخ می دهد استفاده می شود‪.‬‬
‫روند‬ ‫فضای آدرس مجازی و اطالعات کنترلی الزم برای اجرای‬
‫مجموعه ای از اشیاء رشته را نشان می دهد‪ .‬یک فرآیند شامل‬
‫یک اشاره گر به یک نقشه آدرس‪ ،‬یک لیست از رشته های‬
‫آماده حاوی اشیاء رشته‪ ،‬یک لیست از موضوعات است‪.‬‬
‫رشته‬ ‫رشتههای متعلق به فرآیند‪ ،‬کل زمان انباشته شده برای همه‬
‫رشتههایی که در فرآیند اجرا میشوند‪ ،‬و یک اولویت پایه‪.‬‬
‫مشخصات‬ ‫نشان دهنده اشیاء رشته‪ ،‬از جمله اولویت زمانبندی و‬
‫کوانتومی‪ ،‬و پردازنده هایی است که رشته ممکن است روی‬
‫‪108‬‬
‫سیستم عامل های داخلی و اصول طراحی‪109.........................................................................................................................‬‬

‫آنها اجرا شود‪.‬‬

‫‪ 2.8‬سیستم های یونیکس سنتی‬

‫تاریخچه‬

‫تاریخچه یونیکس داستانی است که اغلب گفته می شود و در اینجا با جزئیات زیاد تکرار نخواهد شد‪ .‬در عوض‪ ،‬ما یک خالصه‬
‫مختصر ارائه می دهیم‪ .‬یونیکس ابتدا در آزمایشگاههای بل توسعه یافت و در سال ‪ 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‬است‪.‬‬

‫شکل ‪ 2.15‬معماری عمومی یونیکس‬

‫‪110‬‬
‫سیستم عامل های داخلی و اصول طراحی‪111.........................................................................................................................‬‬

‫فرآیند کنترل‬
‫زیر سیستم‬

‫کنترل سخت افزار‬

‫سخت افزار‬

‫شکل ‪ 2.16‬هسته سنتی یونیکس‬

‫نگاهی دقیق تر به هسته در شکل ‪ 2.16‬ارائه شده است‪ .‬برنامه های کاربر می توانند خدمات سیستم عامل را مستقیماً یا از‬
‫طریق برنامه های کتابخانه ای فراخوانی کنند‪ .‬رابط فراخوانی سیستم مرزی با کاربر است و به نرم افزارهای سطح باالتر اجازه می‬
‫دهد تا به عملکردهای هسته خاصی دسترسی پیدا کنند‪ .‬از طرف دیگر‪ ،‬سیستم عامل شامل روال های ابتدایی است که مستقیماً‬
‫با سخت افزار تعامل دارند‪ .‬بین این دو اینترفیس‪ ،‬سیستم به دو بخش اصلی تقسیم میشود که یکی مربوط به کنترل فرآیند و‬
‫دیگری مربوط به مدیریت فایل و ‪ I/O‬است‪ .‬زیرسیستم کنترل فرآیند مسئول مدیریت حافظه‪ ،‬زمانبندی و ارسال فرآیندها و‬
‫هماهنگسازی و ارتباطات بین فرآیندی فرآیندها است‪ .‬سیستم فایل داده ها را بین حافظه و دستگاه های خارجی به صورت‬
‫جریانی از کاراکترها یا در بلوک ها مبادله می کند‪ .‬برای رسیدن به این هدف‪ ،‬از انواع درایورهای دستگاه استفاده می شود‪ .‬برای‬
‫انتقال بلوک گرا‪ ،‬از رویکرد حافظه پنهان دیسک استفاده می شود‪ :‬یک بافر سیستم در حافظه اصلی بین فضای آدرس کاربر و‬
‫دستگاه خارجی قرار می گیرد‪.‬‬

‫توضیحات در این بخش به آنچه که می توان سیستم های سنتی یونیکس نامید پرداخته است‪ VAHA96 .‬از این اصطالح برای‬
‫اشاره به ‪ ،BSD4.3 ،System V Release 3 SVR3‬و نسخههای قبلی استفاده میکند‪ .‬عبارات کلی زیر ممکن است در‬
‫مورد یک سیستم سنتی یونیکس بیان شود‪ .‬این برای اجرا بر روی یک پردازنده طراحی شده است و توانایی محافظت از ساختار‬
‫داده های خود را در برابر دسترسی همزمان چندین پردازنده ندارد‪ .‬هسته آن بسیار متنوع نیست و از یک نوع سیستم فایل‪ ،‬خط‬
‫مشی زمانبندی فرآیند و فرمت فایل قابل اجرا پشتیبانی می کند‪ .‬هسته سنتی یونیکس به گونه ای طراحی نشده است که قابل‬

‫‪111‬‬
‫سیستم عامل های داخلی و اصول طراحی‪112.........................................................................................................................‬‬

‫توسعه باشد و امکانات کمی برای استفاده مجدد از کد دارد‪ .‬نتیجه این است که با اضافه شدن ویژگیهای جدید به نسخههای‬
‫مختلف یونیکس‪ ،‬کدهای جدید زیادی باید اضافه میشد و هستهای متورم و غیر ماژوالر به دست میآمد‪.‬‬

‫‪ 2.9‬سیستم های یونیکس مدرن‬

‫با تکامل یونیکس‪ ،‬تعداد پیادهسازیهای مختلف افزایش یافت و هر کدام ویژگیهای مفیدی را ارائه کردند‪ .‬نیاز به تولید یک‬
‫پیادهسازی جدید بود که بسیاری از نوآوریهای مهم را متحد میکرد‪ ،‬سایر ویژگیهای طراحی سیستمعامل مدرن را اضافه‬
‫میکرد و معماری ماژوالرتری تولید میکرد‪ .‬نمونه معمول هسته یونیکس مدرن‪ ،‬معماری است که در شکل ‪ 2.17‬نشان داده‬
‫شده است‪.‬‬

‫هسته کوچکی از امکانات وجود دارد که به صورت مدوالر نوشته شده است که عملکردها و خدمات مورد نیاز تعدادی از‬
‫فرآیندهای سیستم عامل را ارائه می دهد‪ .‬هر یک از دایره های بیرونی نشان دهنده توابع و یک رابط است که ممکن است به‬
‫روش های مختلف پیاده سازی شود‪.‬‬

‫اکنون به چند نمونه از سیستم های مدرن یونیکس می پردازیم‪.‬‬

‫‪System V Release 4 SVR4‬‬


‫‪ SVR4‬که به طور مشترک توسط ‪ AT&T‬و ‪ Sun Microsystems‬توسعه یافته است‪ ،‬ویژگی های ‪،BSD4.3 ،SVR3‬‬
‫‪ Microsoft Xenix System V‬و ‪ SunOS‬را ترکیب می کند‪ .‬این تقریباً یک بازنویسی کامل از هسته ‪ System V‬بود و‬
‫یک پیادهسازی تمیز و البته پیچیده تولید کرد‪ .‬ویژگیهای جدید در نسخه شامل پشتیبانی پردازش بالدرنگ‪ ،‬کالسهای‬
‫زمانبندی فرآیند‪ ،‬ساختارهای داده بهصورت پویا‪ ،‬مدیریت حافظه مجازی‪ ،‬سیستم فایل مجازی و یک هسته پیشگیرانه است‪.‬‬

‫‪ 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‬‬

‫شکل ‪ 2.17‬هسته یونیکس مدرن‬

‫‪ 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.........................................................................................................................‬‬

‫‪ : *name -‬اشاره گر به نام ماژول‬

‫‪ : size -‬اندازه ماژول در صفحات حافظه‬

‫‪ : usecount -‬شمارنده استفاده از ماژول‪ .‬شمارنده هنگامی که عملیاتی که شامل عملکردهای ماژول است شروع می شود‬
‫افزایش می یابد و با پایان عملیات کاهش می یابد‪.‬‬

‫پرچم های ‪ : -‬پرچم های ماژول‬

‫‪ : nsyms -‬تعداد نمادهای صادر شده‬

‫‪ : ndeps -‬تعداد ماژول های ارجاع شده‬

‫‪ : *syms -‬به جدول نمادهای این ماژول اشاره کنید‬

‫‪ : *deps -‬اشاره گر به لیست ماژول هایی که توسط این ماژول به آنها ارجاع داده می شود‬

‫‪ : *refs -‬اشاره گر به لیست ماژول هایی که از این ماژول استفاده می کنند‬

‫جدول نمادها نمادهایی را فهرست می کند که در این ماژول تعریف شده و در جاهای دیگر استفاده می شود‪.‬‬

‫اجزای هسته‬

‫شکل ‪ 2.19‬که از ‪ MOSB02‬گرفته شده است‪ ،‬اجزای اصلی هسته لینوکس را که بر روی معماری ‪ IA-64‬پیاده سازی شده‬
‫است مثالً ‪ Intel Itanium‬نشان می دهد‪ .‬شکل‪ ،‬چندین فرآیند در حال اجرا در باالی هسته را نشان می دهد‪ .‬هر کادر یک‬
‫فرآیند مجزا را نشان میدهد‪ ،‬در حالی که هر خط ‪ squiggly‬با سر پیکان نشاندهنده یک رشته اجرا است‪ .‬هسته خود از‬
‫مجموعه ای متقابل از اجزا تشکیل شده است‪ ،‬با فلش هایی که برهمکنش های اصلی را نشان می دهد‪ .‬سختافزار زیرین نیز‬
‫بهعنوان مجموعهای از مؤلفهها با فلشهایی که نشان میدهد کدام مؤلفههای هسته استفاده میکنند یا کدام مؤلفههای‬
‫سختافزار را کنترل میکنند‪ ،‬نشان داده میشود‪ .‬البته همه اجزای هسته بر روی پردازنده اجرا می شوند‪ ،‬اما برای سادگی‪ ،‬این‬
‫روابط نشان داده نمی شوند‪.‬‬

‫به طور خالصه‪ ،‬اجزای اصلی هسته به شرح زیر است‪:‬‬

‫‪ -‬سیگنال ها‪ :‬هسته از سیگنال ها برای فراخوانی یک فرآیند استفاده می کند‪ .‬به عنوان مثال‪ ،‬سیگنال ها برای اطالع رسانی یک‬
‫فرآیند از خطاهای خاص‪ ،‬مانند تقسیم بر صفر استفاده می شود‪ .‬جدول ‪ 2.6‬چند نمونه از سیگنال ها را نشان می دهد‪.‬‬

‫‪116‬‬
‫سیستم عامل های داخلی و اصول طراحی‪117.........................................................................................................................‬‬

‫شکل ‪ 2.18‬فهرست مثالی از ماژول های هسته لینوکس‬

‫شکل ‪ 2.19‬اجزای هسته لینوکس‬

‫‪117‬‬
‫سیستم عامل های داخلی و اصول طراحی‪118.........................................................................................................................‬‬

‫جدول ‪ 2.6‬برخی از سیگنال های لینوکس‬

‫‪SIGHUP‬‬ ‫قطع پایانه‬ ‫‪SIGCONT‬‬ ‫ادامه هید‬


‫‪SIGQUI‬‬ ‫صفحه کلید خارج شد‬ ‫‪SIGTSTP‬‬ ‫توقف صفحه کلید‬
‫‪T‬‬
‫‪SIGTRA‬‬ ‫تله ردیابی‬ ‫‪SIGTTOU‬‬ ‫نوشتن ترمینال‬
‫‪P‬‬
‫‪SIGBUS‬‬ ‫خطای اتوبوس‬ ‫فراتر از حد پردازنده ‪SIGXCPU‬‬
‫‪SIGKIL‬‬ ‫سیگنال کشتن‬ ‫‪SIGVTAL‬‬ ‫ساعت زنگ دار‬
‫‪L‬‬ ‫‪RM‬‬ ‫مجازی‬
‫‪SIGSEG‬‬ ‫نقض تقسیم بندی‬ ‫‪SIGWINC‬‬ ‫اندازه پنجره بدون‬
‫‪V‬‬ ‫‪H‬‬ ‫تغییر‬
‫‪SIGPIPT‬‬ ‫لوله شکسته‬ ‫‪SIGPWR‬‬ ‫قطع برق‬
‫‪SIGTER‬‬ ‫خاتمه دادن‬ ‫‪SIGRTMI‬‬ ‫اولین سیگنال‬
‫‪M‬‬ ‫‪N‬‬ ‫بالدرنگ‬
‫وضعیت کودک بدون تغییر ‪SIGCHL‬‬ ‫‪SIGRTMA‬‬ ‫آخرین سیگنال‬
‫‪D‬‬ ‫‪X‬‬ ‫بالدرنگ‬

‫‪ -‬فراخوانی سیستم‪ :‬فراخوانی سیستم ابزاری است که به وسیله آن یک فرآیند یک سرویس هسته خاص را درخواست می کند‪.‬‬
‫صدها تماس سیستمی وجود دارد که تقریباً می توان آنها را به شش دسته دسته بندی کرد‪ :‬سیستم فایل‪ ،‬فرآیند‪ ،‬زمان بندی‪،‬‬
‫ارتباطات بین فرآیندی‪ ،‬سوکت شبکه و متفرقه‪ .‬جدول ‪ 2.7‬چند مثال را در هر دسته تعریف می کند‪.‬‬

‫‪ -‬فرآیندها و زمانبندی‪ :‬فرآیندها را بررسی‪ ،‬مدیریت و زمانبندی میکند‪.‬‬

‫‪118‬‬
‫سیستم عامل های داخلی و اصول طراحی‪119.........................................................................................................................‬‬

‫جدول ‪ 2.7‬برخی از تماس های سیستمی لینوکس‬

‫مربوط به سیستم فایل‬


‫بستن لینک باز خواندن‬ ‫یک توصیفگر فایل را ببندید‪ .‬یک نام جدید برای یک فایل‬
‫بسازید‪.‬‬
‫نوشتن‬
‫فایل یا دستگاهی را باز کرده و احتماالً ایجاد کنید‪.‬‬
‫خواندن از توصیفگر فایل‬

‫در توصیفگر فایل بنویسید‪.‬‬

‫مربوط به فرآیند‬

‫اجرای برنامه‬

‫خروج‬ ‫فرآیند تماس را خاتمه دهید‪.‬‬

‫بی حال‬ ‫شناسایی فرآیند را دریافت کنید‪.‬‬

‫سست‬ ‫هویت کاربر فرآیند فعلی را تنظیم کنید‪.‬‬

‫ردیابی‬ ‫وسیله ای را ارائه دهید که به وسیله آن یک فرآیند والد ممکن‬


‫است اجرای فرآیند دیگری را مشاهده و کنترل کند و تصویر‬
‫اصلی و ثبت آن را بررسی و تغییر دهد‪.‬‬

‫مربوط به زمان بندی‬

‫‪sched_getparam‬‬ ‫پارامترهای زمانبندی مرتبط با خط مشی زمانبندی را برای‬


‫‪sched_get_priority_max‬‬ ‫فرآیند شناسایی شده توسط ‪ pid‬تنظیم کنید‪.‬‬
‫‪sched_setscheduler‬‬
‫‪sched_rr_get_interval‬‬ ‫حداکثر مقدار اولویت را که می توان با الگوریتم زمان بندی‬
‫‪sched_yield‬‬ ‫مشخص شده توسط خط مشی استفاده کرد‪ ،‬برگردانید‪.‬‬

‫هم خط مشی زمانبندی به عنوان مثال‪FIFO ،‬و هم‬


‫پارامترهای مرتبط را برای فرآیند ‪ pid‬تنظیم کنید‪.‬‬

‫‪119‬‬
‫سیستم عامل های داخلی و اصول طراحی‪120.........................................................................................................................‬‬

‫در ساختار مشخصات زمانی که با پارامتر ‪ tp‬به آن اشاره‬


‫شده است‪ ،‬کوانتوم زمان دورگرد برای فرآیند ‪pid‬‬
‫بنویسید‪.‬‬

‫یک فرآیند می تواند پردازنده را به طور داوطلبانه بدون‬


‫مسدود کردن از طریق این تماس سیستمی رها کند‪.‬‬
‫سپس فرآیند برای اولویت استاتیک خود به انتهای صف‬
‫منتقل می شود و فرآیند جدیدی اجرا می شود‪.‬‬

‫ارتباط بین فرآیندی ‪ IPC‬مرتبط‬

‫‪msgrcv‬‬ ‫یک ساختار بافر پیام برای دریافت پیام اختصاص داده شده‬
‫است‪ .‬سپس تماس سیستمی پیامی را از صف پیام مشخص شده‬
‫توسط ‪ msqid‬در بافر پیام جدید ایجاد شده می خواند‪.‬‬

‫‪semctl‬‬ ‫عملیات کنترل مشخص شده توسط ‪ cmd‬را در مجموعه‬


‫سمافور ‪ semid‬انجام دهید‪.‬‬

‫‪semop‬‬ ‫انجام عملیات بر روی اعضای منتخب مجموعه سمافور‪semid.‬‬

‫‪shmat‬‬ ‫را به ‪ semid‬بخش حافظه مشترک شناسایی شده توسط‬


‫‪.‬بخش داده فرآیند فراخوانی وصل کنید‬

‫‪shmctl‬‬ ‫به کاربر امکان می دهد اطالعات مربوط به بخش حافظه‬


‫مشترک را دریافت کند‪ .‬تنظیم مالک‪ ،‬گروه و مجوزهای یک‬
‫‪.‬بخش حافظه مشترک‪ .‬یا بخشی را از بین ببرید‬

‫سوکت شبکه مرتبط‬

‫‪bind‬‬ ‫آدرس ‪ IP‬محلی و پورت را برای یک سوکت اختصاص دهید‪ .‬برای‬


‫موفقیت ‪ 0‬و برای خطا ‪ 1−‬برگردانید‪.‬‬
‫‪connect‬‬

‫‪gethostna‬‬

‫‪120‬‬
‫سیستم عامل های داخلی و اصول طراحی‪121.........................................................................................................................‬‬

‫‪me send‬‬ ‫ارتباطی بین سوکت داده شده و سوکت راه دور مرتبط با‬
‫‪setsockopt‬‬ ‫‪sockaddr‬برقرار کنید‪.‬‬

‫نام میزبان محلی را برگردانید‪.‬‬

‫بایت های موجود در بافر را که با ‪ *msg‬نشان داده شده است از‬


‫سوکت داده شده ارسال کنید‪ .‬گزینه ها را روی یک سوکت تنظیم‬
‫کنید‪.‬‬

‫متفرقه‬

‫‪fsync‬‬ ‫تمام بخشهای درون هستهای یک فایل را روی دیسک کپی کنید و‬
‫منتظر بمانید تا دستگاه گزارش دهد که همه قسمتها در حافظه‬
‫‪time‬‬
‫پایدار هستند‪.‬‬
‫‪vhangu‬‬
‫‪p‬‬ ‫زمان را بر حسب ثانیه از اول ژانویه ‪ 1970‬برگردانید‪.‬‬

‫شبیه سازی ‪ hangup‬در ترمینال فعلی‪ .‬این تماس ترتیبی میدهد‬


‫که سایر کاربران در زمان ورود به سیستم‪ ،‬یک« ‪ tty‬تمیز» داشته‬
‫باشند‪.‬‬

‫‪ -‬حافظه مجازی‪ :‬حافظه مجازی را برای فرآیندها تخصیص و مدیریت می کند‪.‬‬

‫‪ -‬سیستم های فایل‪ :‬یک فضای نام جهانی و سلسله مراتبی برای فایل ها‪ ،‬دایرکتوری ها و سایر اشیاء مرتبط با فایل فراهم می‬
‫کند و توابع سیستم فایل را ارائه می دهد‪.‬‬

‫‪ -‬پروتکل های شبکه‪ :‬از رابط ‪ 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‬یک الیه در باالی آن فراهم می کند تا به برنامه ها اجازه دهد‬
‫ناحیه مشتری خود را اعالم کنند و از ویژگی هایی مانند نوار وضعیت استفاده کنند‪.‬‬

‫‪ : Package Manager -‬برنامه ها را نصب و حذف می کند‪.‬‬

‫‪ : Telephony Manager -‬امکان تعامل با خدمات تلفن‪ ،‬پیامک و ‪ MMS‬را می دهد‪.‬‬

‫‪ : Content Providers -‬این توابع دادههای برنامهای را که باید بین برنامهها‪ ،‬مانند مخاطبین‪ ،‬به اشتراک گذاشته شوند‪،‬‬
‫محصور میکنند‪.‬‬

‫‪ : Resource Manager -‬منابع برنامه را مدیریت می کند‪ ،‬مانند رشته های محلی و بیت مپ‪.‬‬

‫‪ : View System -‬رابط کاربری ‪ UI‬اولیه‪ ،‬مانند دکمهها‪ ،‬کادرهای فهرست‪ ،‬انتخابگرهای تاریخ‪ ،‬و سایر کنترلها و همچنین‬
‫رویدادهای رابط کاربری مانند لمس و حرکات را ارائه میکند‪.‬‬

‫‪ : Location Manager -‬به توسعه دهندگان اجازه می دهد تا از سرویس های مبتنی بر مکان‪ ،‬خواه از طریق ‪ ،GPS‬شناسه‬
‫دکل های تلفن همراه یا پایگاه های داده محلی ‪ Wi-Fi‬استفاده کنند‪.‬‬

‫‪ : Notification Manager -‬رویدادها را مدیریت می کند‪ ،‬مانند دریافت پیام ها و قرار مالقات ها‪.‬‬

‫‪123‬‬
‫سیستم عامل های داخلی و اصول طراحی‪124.........................................................................................................................‬‬

‫‪ : XMPP -‬عملکردهای استاندارد پیام رسانی همچنین‪ ،‬چت را بین برنامه ها ارائه می دهد‪.‬‬

‫برنامه های کاربردی‬

‫زنگ خطر‪.‬‬ ‫ماشین‬


‫صفحه اصلی‬ ‫شماره گیر‬ ‫مرورگر‬ ‫دوربین‬ ‫حساب‬
‫هشدار‬

‫مخاطب‬ ‫شماره گیری‬ ‫تقویم‬ ‫رسانه ها‬ ‫آلبوم ها‬ ‫ساعت‬


‫صوتی‬

‫چارچوب برنامه‬
‫مدیر فعالیت رسانه ای‬ ‫مدیریت ویندوز‬ ‫ارائه دهندگان محتوا‬ ‫مشاهده سیستم‬ ‫مدیر اطالع رسانی‬

‫مدیر بسته‬ ‫مدیر تلفن‬ ‫مدیر منابع‬ ‫مدیر موقعیت مکانی‬ ‫سرویس‪XMPP‬‬

‫کتابخانه های سیستم‬ ‫زمان اجرا اندروید‬


‫مدیر سطح‬ ‫چارچوب رسانه ای‬ ‫کتابخانه های اصلی‬

‫ماشین مجازی دالویک‬

‫هسته لینوکس‬
‫درایور نمایشگر‬ ‫درایور دوربین‬ ‫فلش مموری‬ ‫درایور ‪Binder‬‬
‫درایور بلوتوث‬
‫‪(IPC).‬‬

‫درایور‪USB‬‬ ‫درایور صفحه کلید‬ ‫درایور وای فای‬ ‫درایورهای صوتی‬ ‫مدیران قدرت‬

‫پیاده سازی‬

‫برنامه ها‪ ،‬چارچوب برنامه‪ :‬جاوا‬

‫کتابخانه های سیستم‪ ،‬زمان اجرا اندروید ‪: C‬و‪C++‬‬

‫هسته لینوکس‪C:‬‬

‫شکل ‪ 2.20‬معماری نرم افزار اندروید‬

‫‪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‬مربوطه را‬
‫فراخوانی می کند‪.‬‬

‫کرنل لینوکس هسته سیستم عامل اندروید مشابه توزیع هسته استاندارد لینوکس است‪ ،‬اما با آن یکسان نیست‪ .‬یکی از تغییرات‬
‫قابل توجه این است که هسته اندروید فاقد درایورهایی است که در محیط های تلفن همراه قابل استفاده نیستند و این باعث‬
‫کوچکتر شدن هسته می شود‪ .‬عالوه بر این‪ ،‬اندروید هسته لینوکس را با ویژگیهایی بهبود میبخشد که برای محیط موبایل‬
‫طراحی شدهاند و معموالً روی پلتفرم دسکتاپ یا لپتاپ کاربردی یا کاربردی نیستند‪.‬‬

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

‫برنامه ها و چارچوب‬

‫خدمات سیستم اندروید‬

‫سرور رسانه‬ ‫سرور سیستم‬

‫سرویس‬ ‫سرویس‬ ‫مدیر پنجره‬


‫‪MediaPlay‬‬ ‫جستجو‬
‫‪er‬‬
‫خدمات‬ ‫سایر خدمات‬ ‫مدیر فعالیت‬
‫دوربین‬ ‫سایر خدمات‬
‫رسانه ای‬

‫الیه انتزاعی سخت افزاری)‪(HAL‬‬

‫دوربین‪HAL‬‬ ‫صوتی ‪HAL‬‬ ‫گرافیک‬ ‫‪HAL‬های‬


‫‪HAL‬‬ ‫دیگر‬

‫درایور صوتی‬
‫راه انداز‬ ‫نمایش‬ ‫سایر‬
‫دوربین‬ ‫درایورها‬ ‫درایورها‬

‫شکل ‪ 2.21‬معماری سیستم اندروید‬

‫‪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‬های‬
‫زیر را نگه دارد‪:‬‬

‫‪ : Full_Wake_Lock -‬پردازنده روشن‪ ،‬روشنایی تمام صفحه‪ ،‬روشنایی صفحه کلید‬


‫‪ : Partial_Wake_Lock -‬پردازنده روشن‪ ،‬صفحه خاموش‪ ،‬صفحه کلید خاموش‬
‫‪ : Screen_Dim_Wake_Lock -‬پردازنده روشن‪ ،‬نور صفحه‪ ،‬صفحه کلید خاموش‬
‫‪ : Screen_Bright_Wake_Lock -‬پردازنده روشن‪ ،‬صفحه نمایش روشن‪ ،‬صفحه کلید خاموش‬

‫هر زمان که یک برنامه نیاز به روشن ماندن یکی از تجهیزات جانبی مدیریت شده داشته باشد‪ ،‬این قفل ها از طریق ‪API‬‬
‫درخواست می شوند‪ .‬اگر هیچ ‪ wakelock‬وجود نداشته باشد که دستگاه را قفل می کند‪ ،‬برای حفظ عمر باتری خاموش می‬
‫شود‪.‬‬

‫این اشیاء هسته با استفاده از فایلهای ‪ sys/ power/wavelock/‬برای برنامهها در فضای کاربر قابل مشاهده هستند‪.‬‬
‫فایلهای ‪ wake_lock‬و ‪ wake_unlock‬را میتوان برای تعریف و تغییر یک قفل با نوشتن در فایل مربوطه استفاده کرد‪.‬‬

‫‪ 2.12‬خواندن و انیمیشن های توصیه شده‬

‫‪ 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 ،‬‬

‫‪ .W ،MAUE08 Mauerer‬معماری هسته لینوکس حرفه ای‪ .‬نیویورک‪ :‬وایلی‪.2008 ،‬‬

‫‪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‬‬

‫‪ .YAGH13 Yaghmour, K‬اندروید جاسازی شده‪ .‬سباستوپل‪ ،‬کالیفرنیا‪ :‬اوریلی‪.2013 ،‬‬

‫تصاویر متحرک‬

‫مجموعه ای از انیمیشن که مفاهیم این فصل را نشان می دهد در وب سایت ‪ Premium‬موجود است‪ .‬خواننده تشویق می شود‬
‫که انیمیشن ها را برای تقویت مفاهیم این فصل مشاهده کند‪.‬‬

‫‪129‬‬
‫سیستم عامل های داخلی و اصول طراحی‪130.........................................................................................................................‬‬

‫‪ 2.13‬اصطالحات کلیدی‪ ،‬سؤاالت و مشکالت را مرور کنید‬

‫شرایط کلیدی‬

‫پردازش دسته‬ ‫سیستم دسته ای‬ ‫زمانبندی‬


‫ای وقفه زمینه‬ ‫چندبرنامه ای‬ ‫پردازش‬
‫اجرای سیستم‬ ‫هسته چند رشته ای‬ ‫سریال‬
‫دسته ای‬ ‫چندوظیفه ای چند‬ ‫کار چند‬
‫هسته زبان‬ ‫برنامه ای‬ ‫پردازشی‬
‫کنترل شغل‬ ‫فرآیند دستورالعمل‬ ‫متقارن‬
‫حالت هسته‬ ‫ممتاز آدرس‬ ‫نخ‬
‫میانگین زمان‬ ‫فیزیکی سیستم‬ ‫اشتراک وقت‬
‫خرابی‬ ‫عامل‬
‫سیستم‬
‫‪MTTF‬‬ ‫وضعیت‬
‫اشتراک زمان‬
‫میانگین زمان‬ ‫پردازش‬
‫برش زمان‬
‫تعمیر‬ ‫آدرس واقعی‬
‫تکبرنامهنوی‬
‫‪MTTR‬‬ ‫مانیتور مقیم‬
‫سی حالت‬
‫میکروکرنل‬ ‫دور رابین‬
‫کاربر‬
‫مدیریت حافظه‬
‫آدرس مجازی‬
‫نظارت بر‬
‫حافظه مجازی‬
‫هسته یکپارچه‬
‫ماشین مجازی‬

‫‪130‬‬
‫سیستم عامل های داخلی و اصول طراحی‪131.........................................................................................................................‬‬

‫بررسی سواالت‬

‫‪ .2.1‬سه هدف طراحی سیستم عامل چیست؟‬

‫‪ .2.2‬هسته یک سیستم عامل چیست؟‬

‫‪ .2.3‬چند برنامه نویسی چیست؟‬

‫‪ .2.4‬فرآیند چیست؟‬

‫‪ .2.5‬زمینه اجرای یک فرآیند توسط سیستم عامل چگونه استفاده می شود؟‬

‫‪ .2.6‬پنج مسئولیت مدیریت ذخیره سازی یک سیستم عامل معمولی را فهرست کرده و به طور خالصه توضیح دهید‪.‬‬

‫‪ .2.7‬تفاوت بین آدرس واقعی و آدرس مجازی را توضیح دهید‪.‬‬

‫‪ .2.8‬تکنیک زمانبندی دورگرد را توضیح دهید‪.‬‬

‫‪ .2.9‬تفاوت بین هسته یکپارچه و میکروکرنل را توضیح دهید‪.‬‬

‫‪ .2.10‬چند رشته ای چیست؟‬

‫‪ .2.11‬مسائل کلیدی طراحی یک سیستم عامل ‪ SMP‬را فهرست کنید‪.‬‬

‫چالش ها و مسائل‬

‫‪ .2.1‬فرض کنید یک کامپیوتر چندبرنامهای داریم که در آن هر کار ویژگیهای یکسانی دارد‪ .‬در یک دوره محاسباتی‪ ،T ،‬برای‬
‫یک کار‪ ،‬نیمی از زمان در ‪ I/O‬و نیمی دیگر در فعالیت پردازنده صرف می شود‪ .‬هر کار در مجموع ‪ N‬دوره اجرا می شود‪ .‬فرض‬
‫کنید که از یک زمانبندی ساده دور روبین استفاده میشود‪ ،‬و عملیات ‪ I/O‬میتواند با عملکرد پردازنده همپوشانی داشته باشد‪.‬‬
‫مقادیر زیر را تعریف کنید‪:‬‬

‫‪ -‬زمان چرخش = زمان حقیقی برای تکمیل یک کار‬

‫‪ -‬توان عملیاتی = میانگین تعداد کارهای تکمیل شده در دوره زمانی ‪T‬‬

‫‪ -‬استفاده از پردازنده = درصد زمانی که پردازنده فعال است در انتظار نیست این مقادیر را برای یک‪ ،‬دو و چهار کار همزمان‬
‫محاسبه کنید‪ ،‬با این فرض که دوره ‪ T‬به هر یک از روش های زیر توزیع شده است‪:‬‬

‫‪131‬‬
‫سیستم عامل های داخلی و اصول طراحی‪132.........................................................................................................................‬‬

‫آ‪ I/O .‬نیمه اول‪ ،‬پردازنده نیمه دوم‬

‫ب ‪ I/O‬سه ماهه اول و چهارم‪ ،‬پردازنده سه ماهه دوم و سوم‬

‫‪ .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.2‬حالت های فرآیند‬

‫مدل فرآیند دو حالته‬

‫ایجاد و خاتمه فرآیندها یک مدل پنج حالته‬

‫فرآیندهای معلق‬

‫‪ 3.3‬شرح فرآیند‬

‫ساختارهای کنترل سیستم عامل ساختارهای کنترل فرآیند‬

‫‪ 3.4‬کنترل فرآیند‬

‫حالت های اجرا تغییر فرآیند ایجاد فرآیند‬

‫‪ 3.5‬اجرای سیستم عامل‬

‫هسته غیر فرآیندی‬

‫اجرا در سیستم عامل فرآیندهای مبتنی بر فرآیند کاربر‬

‫‪ UNIX SVR4 3.6‬مدیریت فرآیند‬

‫‪ States‬فرآیند شرح فرآیند کنترل فرآیند‬

‫‪ 3.7‬خالصه‬

‫‪134‬‬
‫سیستم عامل های داخلی و اصول طراحی‪135.........................................................................................................................‬‬

‫‪ 3.8‬خواندن و انیمیشن های توصیه شده‬

‫‪ 3.9‬اصطالحات کلیدی‪ ،‬بررسی سواالت و مشکالت‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬اصطالح فرآیند را تعریف کنید و رابطه بین فرآیندها و بلوک های کنترل فرآیند را توضیح دهید‪.‬‬

‫‪ -‬مفهوم یک حالت فرآیندی را توضیح دهید و در مورد انتقال حالتی که فرآیندها متحمل می شوند بحث کنید‪.‬‬

‫‪ -‬هدف ساختارهای داده و عناصر ساختار داده مورد استفاده توسط یک سیستم عامل برای مدیریت فرآیندها را فهرست کرده و‬
‫توصیف کنید‪.‬‬

‫‪ -‬الزامات کنترل فرآیند توسط سیستم عامل را ارزیابی کنید‪.‬‬

‫‪ -‬مسائل مربوط به اجرای کدهای سیستم عامل را درک کنید‪.‬‬

‫‪ -‬طرح مدیریت فرآیند را برای ‪ UNIX SVR4‬شرح دهید‪.‬‬

‫تمام سیستم عامل های چندبرنامه نویسی‪ ،‬از سیستم های تک کاربره مانند ویندوز برای کاربران نهایی گرفته تا سیستم های‬
‫مرکزی مانند سیستم عامل اصلی ‪ 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.........................................................................................................................‬‬

‫مشخص کننده‬

‫موقعیت‬

‫اولویت‬

‫شمارنده برنامه‬

‫نشانگرهای حافظه‬

‫داده های زمینه‬


‫اطالعات وضعیت‬
‫‪I/O‬‬
‫اطالعات حسابداری‬

‫شکل ‪ 3.1‬بلوک کنترل فرآیند ساده شده‬

‫بنابراین‪ ،‬می توان گفت که یک فرآیند از کد برنامه و داده های مرتبط به اضافه یک بلوک کنترل فرآیند تشکیل شده است‪ .‬برای‬
‫یک کامپیوتر تک پردازنده‪ ،‬در هر زمان معین‪ ،‬حداکثر یک فرآیند در حال اجرا است و آن فرآیند در حالت اجرا قرار دارد‪.‬‬

‫‪ 3.2‬حالت های فرآیند‬

‫همانطور که قبالً بحث شد‪ ،‬برای اجرای یک برنامه‪ ،‬یک فرآیند یا وظیفه برای آن برنامه ایجاد می شود‪ .‬از دیدگاه پردازنده‪،‬‬
‫دستورات را از مجموعه خود به ترتیبی که توسط مقادیر متغیر در ثبات برنامه شمارنده دیکته می شود‪ ،‬اجرا می کند‪ .‬با گذشت‬
‫زمان‪ ،‬شمارنده برنامه ممکن است به کد در برنامه های مختلف که بخشی از فرآیندهای مختلف هستند اشاره کند‪ .‬از دیدگاه یک‬
‫برنامه منفرد‪ ،‬اجرای آن مستلزم دنباله ای از دستورالعمل ها در آن برنامه است‪.‬‬

‫‪139‬‬
‫سیستم عامل های داخلی و اصول طراحی‪140.........................................................................................................................‬‬

‫ما میتوانیم رفتار یک فرآیند فردی را با فهرست کردن دنباله دستورالعملهایی که برای آن فرآیند اجرا میشوند‪ ،‬مشخص کنیم‪.‬‬
‫به چنین فهرستی به عنوان اثری از فرآیند یاد می شود‪ .‬ما میتوانیم رفتار پردازنده را با نشان دادن اینکه چگونه ردپای‬
‫فرآیندهای مختلف در هم میپیچد‪ ،‬مشخص کنیم‪.‬‬

‫اجازه دهید یک مثال بسیار ساده را در نظر بگیریم‪ .‬شکل ‪ 3.2‬یک طرح حافظه از سه فرآیند را نشان می دهد‪ .‬برای ساده کردن‬
‫بحث‪ ،‬استفاده از حافظه مجازی را فرض نمی کنیم‪ .‬بنابراین هر سه فرآیند با برنامه هایی که به طور کامل در حافظه اصلی‬
‫بارگذاری شده اند نشان داده می شوند‪ .‬عالوه بر این‪ ،‬یک برنامه توزیع کننده کوچک وجود دارد که پردازنده را از یک فرآیند به‬
‫فرآیند دیگر سوئیچ می کند‪ .‬شکل ‪ 3.3‬ردپای هر یک از فرآیندها را در مراحل اولیه اجرای آنها نشان می دهد‪ 12 .‬دستورالعمل‬
‫اول اجرا شده در فرآیندهای ‪ A‬و ‪ C‬نشان داده شده است‪ .‬فرآیند ‪ B‬چهار دستورالعمل را اجرا می کند و ما فرض می کنیم که‬
‫دستور چهارم یک عملیات ‪ I/O‬را فراخوانی می کند که فرآیند باید منتظر بماند‪.‬‬

‫حافظه اصلی‬ ‫شمارنده برنامه‬

‫فرآیند های ‪a-c‬‬

‫شکل ‪ 3.2‬تصویری از اجرای مثال شکل ‪ 3.4‬در چرخه دستورالعمل ‪13‬‬

‫اکنون اجازه دهید این ردیابی ها را از دیدگاه پردازنده مشاهده کنیم‪ .‬شکل ‪ 3.4‬ردهای به هم پیوسته حاصل از ‪ 52‬چرخه‬
‫دستورالعمل اول را نشان می دهد برای راحتی‪ ،‬چرخه های دستورالعمل شماره گذاری شده اند‪ .‬در این شکل‪ ،‬مناطق سایه دار‬
‫کد اجرا شده توسط دیسپچر را نشان می دهد‪ .‬توالی یکسانی از دستورالعمل ها توسط توزیع کننده در هر نمونه اجرا می شود‬
‫زیرا عملکرد یکسان توزیع کننده در حال اجرا است‪ .‬ما فرض میکنیم که سیستمعامل فقط به یک فرآیند اجازه میدهد تا‬
‫حداکثر شش دوره دستورالعمل اجرا شود و پس از آن قطع میشود‪ .‬این مانع از انحصار هر فرآیند واحد در زمان پردازنده می‬
‫شود‪ .‬همانطور که شکل ‪ 3.4‬نشان میدهد‪ ،‬شش دستورالعمل اول فرآیند ‪ A‬اجرا میشوند و به دنبال آن یک بازه زمانی ایجاد‬
‫میشود‪ .‬ستون های اول و سوم چرخه های دستورالعمل را شمارش می کنند‪.‬‬

‫‪140‬‬
‫سیستم عامل های داخلی و اصول طراحی‪141.........................................................................................................................‬‬

‫‪5000‬‬ ‫‪8000‬‬ ‫‪12000‬‬


‫‪5001‬‬ ‫‪8001‬‬ ‫‪12001‬‬
‫‪5002‬‬ ‫‪8002‬‬ ‫‪12002‬‬
‫‪5003‬‬ ‫‪8003‬‬ ‫‪12003‬‬
‫‪5004‬‬ ‫‪12004‬‬
‫‪5005‬‬ ‫‪12005‬‬
‫‪5006‬‬ ‫‪12006‬‬
‫‪5007‬‬ ‫‪12007‬‬
‫‪5008‬‬ ‫‪12008‬‬
‫‪5009‬‬ ‫‪12009‬‬
‫‪5010‬‬ ‫‪12010‬‬
‫‪5011‬‬ ‫‪12011‬‬
‫شکل ‪ 3.3‬ردپای فرآیندهای شکل ‪3.2‬‬

‫الف ردیابی فرآیند ‪ A‬ب ردیابی فرآیند ب ج ردیابی فرآیند‬

‫‪ = 5000‬آدرس شروع برنامه فرآیند ‪A‬‬

‫‪ = 8000‬آدرس شروع برنامه فرآیند ‪B‬‬

‫‪ = 12000‬آدرس شروع برنامه فرآیند ‪C‬‬

‫ستون های دوم و چهارم نشانی آدرس دستورالعمل در حال اجرا و اجرای برخی از کدها در دیسپچر را نشان می دهد که شش‬
‫دستورالعمل را قبل از تبدیل کنترل به پردازش ‪ B‬اجرا می کند‪ .‬صبر کن‪ .‬بنابراین‪ ،‬پردازنده اجرای فرآیند ‪ B‬را متوقف میکند و‬
‫از طریق دیسپچر به پردازش ‪ C‬میپردازد‪ .‬پس از وقفه زمانی‪ ،‬پردازنده به پردازش ‪ A‬برمیگردد‪ .‬وقتی این فرآیند به پایان‬
‫میرسد‪ ،‬پردازش ‪ B‬همچنان در انتظار ‪ I‬است‪ .‬عملیات ‪ O/‬تکمیل شود‪ ،‬بنابراین دیسپچر دوباره به پردازش ‪ C‬میپردازد‪.‬‬

‫مدل فرآیند دو حالته‬

‫مسئولیت اصلی سیستم عامل کنترل اجرای فرآیندها است‪ .‬این شامل تعیین الگوی ‪ interleaving‬برای اجرا و تخصیص منابع‬
‫به فرآیندها است‪ .‬اولین قدم در طراحی یک سیستم عامل برای کنترل فرآیندها‪ ،‬توصیف رفتاری است که ما می خواهیم‬
‫فرآیندها نشان دهند‪.‬‬

‫‪141‬‬
‫سیستم عامل های داخلی و اصول طراحی‪142.........................................................................................................................‬‬

‫ما میتوانیم سادهترین مدل ممکن را با مشاهده این نکته بسازیم که در هر زمان‪ ،‬یک فرآیند یا توسط یک پردازنده اجرا میشود‬
‫یا نه‪ .‬در این مدل‪ ،‬یک فرآیند ممکن است در یکی از دو حالت باشد‪ :‬در حال اجرا یا در حال اجرا نیست‪ ،‬همانطور که در شکل‬
‫‪ a3.5‬نشان داده شده است‪ .‬هنگامی که سیستم عامل یک فرآیند جدید ایجاد می کند‪ ،‬یک بلوک کنترل فرآیند برای فرآیند‬
‫ایجاد می کند و آن فرآیند را در حالت ‪ Not Running‬وارد سیستم می کند‪ .‬این فرآیند وجود دارد‪ ،‬برای سیستم عامل‬
‫شناخته شده است‪ ،‬و منتظر فرصتی برای اجرا است‪ .‬هر از چند گاهی‪ ،‬فرآیند در حال اجرا قطع می شود و بخش توزیع کننده‬
‫سیستم عامل فرآیند دیگری را برای اجرا انتخاب می کند‪ .‬فرآیند اول از حالت ‪ Running‬به حالت ‪ Not Running‬و یکی از‬
‫فرآیندهای دیگر به حالت ‪ Running‬منتقل می شود‪.‬‬

‫شکل ‪ 3.4‬ردیابی ترکیبی از فرآیندهای شکل ‪3.2‬‬

‫‪ =100‬آدرس شروع برنامه توزیع کننده‪ /‬مناطق سایه دار نشان دهنده اجرای فرآیند دیسپچر است‪ .‬ستون های اول و سوم چرخه‬
‫های دستورالعمل را شمارش می کنند‪ /.‬ستون های دوم و چهارم آدرس دستور در حال اجرا را نشان می دهند‪.‬‬

‫از این مدل ساده‪ ،‬میتوانیم برخی از عناصر طراحی سیستمعامل را درک کنیم‪ .‬هر فرآیند باید به نحوی نمایش داده شود تا‬
‫سیستم عامل بتواند آن را پیگیری کند‪ .‬به این معنی که باید برخی اطالعات مربوط به هر فرآیند‪ ،‬از جمله وضعیت فعلی و مکان‬
‫در حافظه وجود داشته باشد‪ .‬این بلوک کنترل فرآیند است‪ .‬فرآیندهایی که در حال اجرا نیستند باید به نوعی در صف نگه داشته‬
‫شوند و منتظر نوبت اجرا شوند‪ .‬شکل ‪ b3.5‬یک ساختار را نشان می دهد‪ .‬یک صف واحد وجود دارد که در آن هر ورودی نشانگر‬
‫بلوک کنترل فرآیند یک فرآیند خاص است‪ .‬از طرف دیگر‪ ،‬صف ممکن است شامل یک لیست پیوندی از بلوک های داده باشد‬
‫که در آن هر بلوک یک فرآیند را نشان می دهد‪ .‬ما این اجرای اخیر را متعاقبا بررسی خواهیم کرد‪.‬‬

‫‪142‬‬
‫سیستم عامل های داخلی و اصول طراحی‪143.........................................................................................................................‬‬

‫ورود‬ ‫خروج‬

‫توقف‬

‫(الف) نمودار انتقال حالت‬

‫صف‬
‫ورود‬ ‫خروج‬

‫توقف‬

‫(ب) نمودار صف‬


‫شکل ‪ 3.5‬مدل فرآیند دو حالته‬

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

‫ایجاد و خاتمه فرآیندها‬

‫قبل از اصالح مدل ساده دو حالته‪ ،‬بحث در مورد ایجاد و خاتمه فرآیندها مفید خواهد بود‪ .‬در نهایت‪ ،‬و صرف نظر از مدل رفتار‬
‫فرآیندی که استفاده می شود‪ ،‬عمر یک فرآیند با ایجاد و پایان آن محدود می شود‪.‬‬

‫ایجاد فرآیند هنگامی که قرار است یک فرآیند جدید به فرآیندهایی که در حال حاضر مدیریت می شوند اضافه شود‪ ،‬سیستم‬
‫عامل ساختارهای داده ای را ایجاد می کند که برای مدیریت فرآیند استفاده می شود و فضای آدرس در حافظه اصلی را به‬
‫فرآیند اختصاص می دهد‪ .‬ما این ساختارهای داده را در بخش ‪ 3.3‬توضیح می دهیم‪ .‬این اقدامات ایجاد یک فرآیند جدید را‬
‫تشکیل می دهد‪.‬‬

‫همانطور که در جدول ‪ 3.1‬نشان داده شده است‪ ،‬چهار رویداد مشترک منجر به ایجاد یک فرآیند می شود‪ .‬در یک محیط دسته‬
‫ای‪ ،‬فرآیندی در پاسخ به ارسال یک کار ایجاد می شود‪ .‬در یک محیط تعاملی‪ ،‬زمانی که یک کاربر جدید تالش می کند وارد‬
‫سیستم شود‪ ،‬فرآیندی ایجاد می شود‪ .‬در هر دو مورد‪ ،‬سیستم عامل مسئول ایجاد فرآیند جدید است‪ .‬یک سیستم عامل‬
‫همچنین ممکن است یک فرآیند از طرف یک برنامه ایجاد کند‪.‬‬

‫‪143‬‬
‫سیستم عامل های داخلی و اصول طراحی‪144.........................................................................................................................‬‬

‫به عنوان مثال‪ ،‬اگر کاربر درخواست کند که یک فایل چاپ شود‪ ،‬سیستم عامل می تواند فرآیندی ایجاد کند که چاپ را مدیریت‬
‫کند‪ .‬بنابراین فرآیند درخواست می تواند مستقل از زمان الزم برای تکمیل کار چاپ ادامه یابد‪.‬‬

‫جدول ‪ 3.1‬دالیل ایجاد فرآیند‬

‫کار دسته ای جدید‬ ‫سیستم عامل با یک جریان کنترل دسته ای‪ ،‬معموالً روی‬
‫نوار یا دیسک ارائه می شود‪ .‬هنگامی که سیستم عامل‬
‫برای انجام کار جدید آماده می شود‪ ،‬دنباله بعدی‬
‫دستورات کنترل کار را می خواند‪.‬‬
‫ورود تعاملی‬ ‫کاربر در ترمینال به سیستم وارد می شود‪.‬‬
‫ایجاد شده توسط سیستم عامل‬ ‫سیستم عامل میتواند فرآیندی را برای انجام یک عملکرد‬
‫برای ارائه یک سرویس‬ ‫از طرف یک برنامه کاربر‪ ،‬بدون نیاز به منتظر ماندن کاربر‬
‫به عنوان مثال‪ ،‬فرآیندی برای کنترل چاپ ایجاد کند‪.‬‬
‫ایجاد شده توسط فرآیند موجود‬ ‫به منظور مدوالر بودن یا بهره برداری از موازی سازی‪،‬‬
‫یک برنامه کاربر می تواند ایجاد تعدادی از فرآیندها را‬
‫دیکته کند‪.‬‬

‫به طور سنتی‪ ،‬سیستم عامل همه فرآیندها را به گونهای ایجاد میکرد که برای کاربر یا برنامه کاربردی شفاف بود‪ ،‬و این هنوز‬
‫معموالً در بسیاری از سیستمعاملهای معاصر یافت میشود‪ .‬با این حال‪ ،‬اجازه دادن به یک فرآیند برای ایجاد فرآیند دیگر می‬
‫تواند مفید باشد‪ .‬به عنوان مثال‪ ،‬یک فرآیند برنامه کاربردی ممکن است فرآیند دیگری را برای دریافت داده هایی که برنامه‬
‫تولید می کند ایجاد کند و آن داده ها را به شکلی مناسب برای تجزیه و تحلیل بعدی سازماندهی کند‪ .‬فرآیند جدید به موازات‬
‫فرآیند اصلی اجرا میشود و هر از گاهی که دادههای جدید در دسترس است فعال میشود‪ .‬این ترتیب می تواند در ساختار‬
‫برنامه بسیار مفید باشد‪ .‬به عنوان مثال دیگر‪ ،‬یک فرآیند سرور به عنوان مثال‪ ،‬سرور چاپ‪ ،‬سرور فایل ممکن است برای هر‬
‫درخواستی که رسیدگی می کند‪ ،‬یک فرآیند جدید ایجاد کند‪ .‬هنگامی که سیستم عامل یک فرآیند را به درخواست صریح یک‬
‫فرآیند دیگر ایجاد می کند‪ ،‬عمل به عنوان تخم ریزی فرآیند نامیده می شود‪.‬‬

‫هنگامی که یک فرآیند دیگر را ایجاد می کند‪ ،‬اولی به عنوان فرآیند والد و فرآیند تخم ریزی شده به عنوان فرآیند فرزند نامیده‬
‫می شود‪ .‬به طور معمول‪ ،‬فرآیندهای "مرتبط" نیاز به ارتباط و همکاری با یکدیگر دارند‪ .‬دستیابی به این همکاری برای برنامه‬
‫نویس کار دشواری است‪ .‬این موضوع در فصل ‪ 5‬مورد بحث قرار گرفته است‪.‬‬
‫‪144‬‬
‫سیستم عامل های داخلی و اصول طراحی‪145.........................................................................................................................‬‬

‫خاتمه فرآیند جدول ‪ 3.2‬دالیل معمولی برای خاتمه فرآیند را خالصه می کند‪ .‬هر سیستم کامپیوتری باید وسیله ای را برای یک‬
‫فرآیند فراهم کند تا تکمیل آن را نشان دهد‪ .‬یک کار دسته ای باید شامل یک دستورالعمل توقف یا یک فراخوان صریح سرویس‬
‫سیستم عامل برای خاتمه باشد‪ .‬در مورد اول‪ ،‬دستور توقف یک وقفه ایجاد می کند تا به سیستم عامل هشدار دهد که یک‬
‫فرآیند تکمیل شده است‪ .‬برای یک برنامه تعاملی‪ ،‬عملکرد کاربر نشان می دهد که فرآیند تکمیل شده است‪ .‬به عنوان مثال‪ ،‬در‬
‫یک سیستم اشتراک زمانی‪ ،‬فرآیند یک کاربر خاص زمانی خاتمه می یابد که کاربر از سیستم خارج شود یا ترمینال خود را‬
‫خاموش کند‪ .‬در رایانه شخصی یا ایستگاه کاری‪ ،‬کاربر ممکن است از یک برنامه مانند پردازش کلمه یا صفحه گسترده خارج‬
‫شود‪ .‬تمام این اقدامات در نهایت منجر به درخواست سرویس به سیستم عامل برای پایان دادن به فرآیند درخواست می شود‪.‬‬
‫عالوه بر این‪ ،‬تعدادی از شرایط خطا و خطا می تواند منجر به خاتمه یک فرآیند شود‪ .‬جدول ‪ 3.2‬برخی از شرایط‪ 10‬رایج تر‬
‫شناخته شده را فهرست می کند‪ 3 .‬در نهایت‪ ،‬در برخی از سیستم عامل ها‪ ،‬یک فرآیند ممکن است توسط طرفدار خاتمه یابد‪.‬‬

‫مدل پنج حالته‬

‫اگر همه فرآیندها همیشه آماده اجرا بودند‪ ،‬نظم صف پیشنهاد شده در شکل ‪ b3.5‬موثر خواهد بود‪ .‬صف یک لیست اول به اول‬
‫است و پردازنده در فرآیندهای موجود به صورت دورگرد عمل می کند به هر فرآیند در صف زمان مشخصی داده می شود تا اجرا‬
‫شود و سپس به صف بازگردانده می شود‪ ، .‬مگر اینکه مسدود شده باشد‪.‬‬
‫با این حال‪ ،‬حتی با مثال سادهای که توضیح دادیم‪ ،‬این پیادهسازی ناکافی است‪ :‬برخی از فرآیندها در حالت اجرا نشده آماده‬
‫اجرا هستند‪ ،‬در حالی که برخی دیگر مسدود شدهاند و منتظر تکمیل عملیات ‪ I/O‬هستند‪ .‬بنابراین‪ ،‬با استفاده از یک صف‪،‬‬
‫توزیع کننده نمی تواند فقط فرآیند را در قدیمی ترین انتهای صف انتخاب کند‪ .‬در عوض‪ ،‬دیسپاچر باید لیست را اسکن کند و به‬
‫دنبال فرآیندی باشد که مسدود نشده و طوالنیترین مدت در صف بوده است‪.‬‬

‫جدول ‪ 3.2‬دالیل خاتمه فرآیند‬

‫تکمیل عادی‬ ‫این فرآیند یک فراخوانی سرویس سیستم عامل را اجرا می‬
‫کند تا نشان دهد که اجرای آن به پایان رسیده است‪.‬‬
‫از محدودیت زمانی فراتر‬ ‫این فرآیند بیش از مدت زمان کل مشخص شده اجرا شده‬
‫رفت‬ ‫است‪ .‬برای نوع زمانی که اندازه گیری می شود‪ ،‬تعدادی‬
‫احتمال وجود دارد‪ .‬اینها شامل کل زمان سپری شده "زمان‬
‫ساعت دیواری"‪ ،‬مدت زمان صرف شده برای اجرا‪ ،‬و در مورد‬

‫‪ 3 10‬یک سیستم عامل بخشنده ممکن است‪ ،‬در برخی موارد‪ ،‬به کاربر اجازه دهد تا بدون خاتمه دادن به فرآیند‪ ،‬از یک خطا بازیابی کند‪ .‬به عنوان مثال‪ ،‬اگر کاربر درخواست‬
‫دسترسی به فایلی را داشته باشد و آن دسترسی رد شود‪ ،‬سیستم عامل ممکن است به سادگی به کاربر اطالع دهد که دسترسی رد شده است و اجازه می دهد روند ادامه یابد‪.‬‬
‫‪145‬‬
‫سیستم عامل های داخلی و اصول طراحی‪146.........................................................................................................................‬‬

‫یک فرآیند تعاملی‪ ،‬مدت زمانی است که کاربر آخرین ورودی‬


‫را ارائه کرده است‪.‬‬

‫این فرآیند به حافظه بیشتری از آنچه سیستم می تواند ارائه دهد حافظه در دسترس نیست‬
‫نیاز دارد‪.‬‬
‫نقض حدود‬ ‫فرآیند سعی می کند به یک مکان حافظه دسترسی پیدا کند که‬
‫اجازه دسترسی به آن را ندارد‪.‬‬
‫خطای حفاظت‬ ‫این فرآیند سعی میکند از منبعی مانند فایلی استفاده‬
‫کند که مجاز به استفاده از آن نیست‪ ،‬یا سعی میکند از‬
‫آن به شیوهای نامناسب استفاده کند‪ ،‬مانند نوشتن در یک‬
‫فایل فقط خواندنی‪.‬‬
‫خطای حسابی‬ ‫این فرآیند یک محاسبات ممنوع‪ ،‬مانند تقسیم بر صفر را‬
‫امتحان میکند‪ ،‬یا سعی میکند اعدادی بزرگتر از ظرفیت‬
‫سختافزار را ذخیره کند‪.‬‬
‫گذر زمان‬ ‫این فرآیند بیش از یک حداکثر مشخص شده برای رخ دادن‬
‫یک رویداد خاص منتظر مانده است‪.‬‬
‫خرابی ورودی‪/‬خروجی‬ ‫خطایی در حین ورودی یا خروجی رخ میدهد‪ ،‬مانند‬
‫ناتوانی در یافتن یک فایل‪ ،‬شکست در خواندن یا نوشتن‬
‫پس از حداکثر تعداد تالش مشخص مثالً هنگامی که یک‬
‫ناحیه معیوب روی نوار مواجه میشوید‪ ،‬یا عملیات‬
‫نامعتبر مانند خواندن از چاپگر خط‪.‬‬
‫دستورالعمل نامعتبر‬ ‫این فرآیند تالش می کند تا یک دستورالعمل‬
‫غیرموجود را اجرا کند اغلب در نتیجه انشعاب به یک‬
‫منطقه داده و تالش برای اجرای داده ها‪.‬‬
‫آموزش ممتاز‬ ‫این فرآیند سعی می کند از یک دستورالعمل رزرو شده برای‬
‫سیستم عامل استفاده کند‪.‬‬
‫سوء استفاده از داده ها‬ ‫یک قطعه داده از نوع اشتباه است یا مقداردهی اولیه نشده است‪.‬‬

‫‪146‬‬
‫سیستم عامل های داخلی و اصول طراحی‪147.........................................................................................................................‬‬

‫مداخله اپراتور یا سیستم‬ ‫به دالیلی‪ ،‬اپراتور یا سیستم عامل فرآیند را خاتمه داده‬
‫عامل‬ ‫است به عنوان مثال‪ ،‬اگر یک وقفه وجود داشته باشد‪.‬‬
‫فسخ والدین‬ ‫هنگامی که یک والدین خاتمه می دهند‪ ،‬سیستم عامل ممکن‬
‫است به طور خودکار تمام فرزندان آن والدین را خاتمه دهد‪.‬‬
‫درخواست والدین‬ ‫یک فرآیند والد معموالً این اختیار را دارد که هر یک از فرزندان‬
‫خود را خاتمه دهد‪.‬‬

‫یک راه طبیعی تر برای رسیدگی به این وضعیت‪ ،‬تقسیم حالت ‪ Not Running‬به دو حالت آماده و مسدود است‪ .‬این در شکل‬
‫‪ 3.6‬نشان داده شده است‪ .‬برای اندازه گیری خوب‪ ،‬ما دو حالت اضافی اضافه کرده ایم که مفید خواهد بود‪ .‬پنج حالت در این‬
‫نمودار جدید به شرح زیر است‪:‬‬

‫‪ : Running -‬فرآیندی که در حال حاضر در حال اجراست‪ .‬برای این فصل‪ ،‬ما یک کامپیوتر با یک پردازنده را فرض می کنیم‪،‬‬
‫بنابراین حداکثر یک فرآیند در هر زمان می تواند در این حالت باشد‪.‬‬

‫‪ -‬آماده‪ :‬فرآیندی که در صورت فرصت برای اجرا آماده می شود‪.‬‬

‫‪11 Blocked/Waiting: -‬فرآیندی که تا زمانی که رویدادی رخ ندهد‪ ،‬مانند تکمیل یک عملیات ‪ I/O‬نمی تواند اجرا شود‪.‬‬

‫‪ -‬جدید‪ :‬فرآیندی که به تازگی ایجاد شده است اما هنوز توسط سیستم عامل در مجموعه فرآیندهای اجرایی پذیرفته نشده است‪.‬‬
‫به طور معمول‪ ،‬یک فرآیند جدید هنوز در حافظه اصلی بارگذاری نشده است‪ ،‬اگرچه بلوک کنترل فرآیند آن ایجاد شده است‪.‬‬

‫‪ -‬خروج‪ :‬فرآیندی که توسط سیستم عامل از مجموعه فرآیندهای اجرایی خارج شده است‪ ،‬یا به دلیل توقف یا به دلیل توقف آن‬
‫به دالیلی‪.‬‬

‫حالت های جدید و خروج سازه های مفیدی برای مدیریت فرآیند هستند‪ .‬حالت جدید مربوط به فرآیندی است که به تازگی‬
‫تعریف شده است‪ .‬به عنوان مثال‪ ،‬اگر یک کاربر جدید سعی کند به سیستم اشتراک زمانی وارد شود یا یک کار دسته ای جدید‬
‫برای اجرا ارسال شود‪ ،‬سیستم عامل می تواند یک فرآیند جدید را در دو مرحله تعریف کند‪ .‬ابتدا‪ ،‬سیستم عامل کارهای خانه‬
‫داری الزم را انجام می دهد‪ .‬یک شناسه با فرآیند مرتبط است‪ .‬هر جدولی که برای مدیریت فرآیند مورد نیاز است تخصیص داده‬
‫شده و ساخته می شود‪ .‬در این مرحله‪ ،‬فرآیند در حالت جدید است‪ .‬این بدان معناست که سیستم عامل اقدامات الزم برای ایجاد‬

‫‪ Waiting 11‬یک اصطالح جایگزین پرکاربرد برای ‪ Blocked‬به عنوان یک وضعیت فرآیند است‪ .‬به طور کلی‪ ،‬ما استفاده خواهیم کرد‬
‫مسدود شده است‪ ،‬اما شرایط قابل تعویض هستند‪.‬‬
‫‪147‬‬
‫سیستم عامل های داخلی و اصول طراحی‪148.........................................................................................................................‬‬

‫فرآیند را انجام داده است اما خود را متعهد به اجرای فرآیند نکرده است‪ .‬به عنوان مثال‪ ،‬سیستم عامل ممکن است تعداد‬
‫فرآیندهایی را که ممکن است در سیستم وجود داشته باشد به دالیل عملکرد یا محدودیت حافظه اصلی محدود کند‪ .‬در حالی‬
‫که یک فرآیند در حالت جدید است‪ ،‬اطالعات مربوط به فرآیند مورد نیاز سیستم عامل در جداول کنترل در حافظه اصلی‬
‫نگهداری می شود‪ .‬با این حال‪ ،‬خود این فرآیند در حافظه اصلی نیست‪ .‬یعنی کد برنامه ای که باید اجرا شود در حافظه اصلی‬
‫نیست و فضایی برای داده های مرتبط با آن برنامه در نظر گرفته نشده است‪ .‬در حالی که فرآیند در حالت جدید است‪ ،‬برنامه در‬
‫حافظه ثانویه‪ ،‬معموالً ذخیره سازی دیسک‪ ،12‬باقی می ماند‬

‫جدید‬ ‫مسیریابی‬ ‫خروج‬

‫شکل ‪ 3.6‬مدل فرآیند پنج حالته‬

‫به طور مشابه‪ ،‬یک فرآیند در دو مرحله از یک سیستم خارج می شود‪ .‬اوالً‪ ،‬یک فرآیند زمانی خاتمه می یابد که به نقطه اتمام‬
‫طبیعی برسد‪ ،‬زمانی که به دلیل یک خطای غیرقابل جبران متوقف می شود‪ ،‬یا زمانی که فرآیند دیگری با اختیار مناسب باعث‬
‫توقف فرآیند می شود‪.‬‬

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

‫‪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‬‬

‫شکل ‪ 3.7‬وضعیت های فرآیندی برای ردیابی شکل ‪3.4‬‬

‫‪150‬‬
‫سیستم عامل های داخلی و اصول طراحی‪151.........................................................................................................................‬‬

‫(الف) یک صف مسدود شده‬

‫(ب) صف های مسدود شده‬


‫متعدد‬

‫شکل ‪ 3.8‬مدل صف برای شکل ‪3.6‬‬

‫یک اصالح نهایی‪ :‬اگر ارسال فرآیندها توسط یک طرح اولویت دیکته می شود‪ ،‬آنگاه راحت است که تعدادی صف آماده‪ ،‬یکی‬
‫برای هر سطح اولویت داشته باشیم‪ .‬سپس سیستم عامل می تواند به آسانی تعیین کند که کدام فرآیند آماده با باالترین اولویت‬
‫است که طوالنی ترین زمان را انتظار داشته است‪.‬‬

‫فرآیندهای معلق‬

‫نیاز به مبادله سه حالت اصلی که قبالً توضیح داده شد آماده‪ ،‬در حال اجرا‪ ،‬مسدود شده روشی سیستماتیک برای مدلسازی‬
‫رفتار فرآیندها و راهنمایی اجرای سیستمعامل ارائه میکنند‪ .‬برخی از سیستم عامل ها فقط با استفاده از این سه حالت ساخته‬
‫می شوند‪.‬‬

‫با این حال‪ ،‬توجیه خوبی برای اضافه کردن حالت های دیگر به مدل وجود دارد‪ .‬برای مشاهده مزایای این حالت های جدید‪،‬‬
‫سیستمی را در نظر بگیرید که از حافظه مجازی استفاده نمی کند‪ .‬هر فرآیندی که باید اجرا شود باید به طور کامل در حافظه‬
‫اصلی بارگذاری شود‪ .‬بنابراین‪ ،‬در شکل ‪ ،b3.8‬تمام فرآیندهای موجود در تمام صف ها باید در حافظه اصلی ساکن باشند‪.‬‬

‫به یاد بیاورید که دلیل همه این ماشینهای پیچیده این است که فعالیتهای ورودی‪/‬خروجی بسیار کندتر از محاسبات هستند و‬
‫بنابراین پردازنده در یک سیستم برنامهنویسی تک در اکثر مواقع بیکار است‪ .‬اما ترتیب شکل ‪ b3.8‬مشکل را به طور کامل حل‬
‫نمی کند‪ .‬درست است که در این حالت‪ ،‬حافظه چندین فرآیند را نگه میدارد و زمانی که یک فرآیند مسدود میشود‪ ،‬پردازنده‬

‫‪151‬‬
‫سیستم عامل های داخلی و اصول طراحی‪152.........................................................................................................................‬‬

‫میتواند به فرآیند دیگری منتقل شود‪ .‬اما پردازنده آنقدر سریعتر از ورودی‪/‬خروجی است که معموالً همه فرآیندهای موجود در‬
‫حافظه منتظر ‪ I/O‬هستند‪ .‬بنابراین‪ ،‬حتی با چندبرنامهنویسی‪ ،‬یک پردازنده ممکن است در بیشتر مواقع بیکار باشد‪ .‬چه باید‬
‫کرد؟ حافظه اصلی را می توان گسترش داد تا فرآیندهای بیشتری را در خود جای دهد‪ .‬اما دو نقص در این رویکرد وجود دارد‪.‬‬
‫اول‪ ،‬هزینهای مربوط به حافظه اصلی است‪ ،‬که اگرچه بر اساس هر بایت کوچک است‪ ،‬اما با رسیدن به گیگابایت حافظه‪ ،‬شروع‬
‫به افزایش میکند‪ .‬دوم‪ ،‬اشتهای برنامه ها برای حافظه به همان سرعتی افزایش یافته است که هزینه حافظه کاهش یافته است‪.‬‬
‫بنابراین حافظه بزرگتر منجر به فرآیندهای بزرگتر می شود‪ ،‬نه فرآیندهای بیشتر‪.‬‬

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

‫با این حال‪ ،‬تعویض‪ ،‬یک عملیات ورودی‪/‬خروجی است‪ ،‬و بنابراین امکان بدتر کردن مشکل وجود دارد‪ ،‬نه بهتر‪ .‬اما از آنجایی که‬
‫ورودی‪/‬خروجی دیسک عموماً سریعترین ورودی‪/‬خروجی در یک سیستم است مثالً در مقایسه با ورودی‪/‬خروجی نوار یا چاپگر‪،‬‬
‫تعویض معموالً کارایی را افزایش میدهد‪.‬‬

‫با استفاده از مبادله همانطور که توضیح داده شد‪ ،‬یک حالت دیگر باید به مدل رفتار فرآیند ما اضافه شود شکل ‪ :a3.9‬حالت‬
‫‪ .Suspend‬هنگامی که تمام فرآیندهای حافظه اصلی در حالت مسدود هستند‪ ،‬سیستم عامل میتواند یک فرآیند را با قرار‬
‫دادن آن در حالت ‪ Suspend‬و انتقال آن به دیسک به حالت تعلیق درآورد‪ .‬فضایی که در حافظه اصلی آزاد میشود‪ ،‬میتواند‬
‫برای وارد کردن فرآیند دیگری استفاده شود‪.‬‬

‫هنگامی که سیستم عامل یک عملیات تعویض را انجام می دهد‪ ،‬برای انتخاب یک فرآیند برای وارد کردن به حافظه اصلی دو‬
‫انتخاب دارد‪ :‬می تواند یک فرآیند جدید ایجاد شده را بپذیرد یا می تواند یک فرآیند قبالً تعلیق شده را وارد کند‪ .‬به نظر میرسد‬
‫که ترجیح باید وارد کردن فرآیندی که قبالً تعلیق شده بود‪ ،‬ارائه خدمات به آن به جای افزایش بار کل سیستم باشد‪.‬‬

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

‫‪152‬‬
‫سیستم عامل های داخلی و اصول طراحی‪153.........................................................................................................................‬‬

‫بنابراین‪ ،‬ما باید در این جنبه از طراحی تجدید نظر کنیم‪ .‬در اینجا دو مفهوم مستقل وجود دارد‪ :‬اینکه آیا یک فرآیند در انتظار‬
‫یک رویداد است مسدود شده یا نه و اینکه آیا یک فرآیند از حافظه اصلی جابجا شده است تعلیق شده یا خیر‪ .‬برای تطبیق این‬
‫ترکیب ‪ ،2×2‬به چهار حالت نیاز داریم‪:‬‬

‫‪ -‬آماده‪ :‬فرآیند در حافظه اصلی است و برای اجرا در دسترس است‬

‫‪ -‬مسدود شده‪ :‬فرآیند در حافظه اصلی است و در انتظار یک رویداد است‪.‬‬

‫‪ : Blocked/Suspend -‬فرآیند در حافظه ثانویه است و در انتظار یک رویداد است‪.‬‬

‫‪ -‬آماده‪/‬تعلیق‪ :‬فرآیند در حافظه ثانویه است اما به محض بارگیری در حافظه اصلی برای اجرا در دسترس است‪.‬‬

‫جدید‬ ‫مسیریابی‬ ‫خروج‬

‫(الف) با یک حالت تعلیق‬

‫جدید‬

‫مسیریابی‬ ‫خروج‬

‫(ب) با دو حالت تعلیق‬

‫شکل ‪ 3.9‬نمودار انتقال وضعیت فرآیند با حالت های تعلیق‬

‫‪153‬‬
‫سیستم عامل های داخلی و اصول طراحی‪154.........................................................................................................................‬‬

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

‫اجازه دهید اکنون در شکل ‪ b3.9‬به مدل انتقال حالتی که توسعه داده ایم نگاه کنیم‪ .‬خطوط چین در شکل‪ ،‬انتقال های ممکن‬
‫اما نه ضروری را نشان می دهد‪ .‬انتقال های جدید مهم به شرح زیر است‪:‬‬

‫‪ : Blocked/Suspend Ready/Suspend -‬یک فرآیند در حالت ‪ Blocked/Suspend‬زمانی که رویدادی که در انتظار‬


‫آن بوده رخ می دهد به حالت آماده‪/‬تعلیق منتقل می شود‪ .‬توجه داشته باشید که این امر مستلزم آن است که اطالعات وضعیت‬
‫مربوط به فرآیندهای معلق باید برای سیستم عامل قابل دسترسی باشد‪.‬‬

‫‪ :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.........................................................................................................................‬‬

‫‪ .1‬فرآیند فوراً برای اجرا در دسترس نیست‪.‬‬

‫‪ .2‬فرآیند ممکن است در انتظار یک رویداد باشد یا نباشد‪ .‬اگر چنین باشد‪ ،‬این شرایط مسدود شده مستقل از شرایط تعلیق‬
‫است و وقوع رویداد مسدود کردن‪ ،‬فرآیند را قادر نمیسازد که فوراً اجرا شود‪.‬‬

‫‪ .3‬فرآیند توسط یک عامل در حالت تعلیق قرار گرفت‪ :‬یا خود‪ ،‬یک فرآیند والد‪ ،‬یا سیستم عامل‪ ،‬به منظور جلوگیری از اجرای‬
‫آن‪.‬‬

‫‪ .4‬تا زمانی که نماینده صراحتاً دستور حذف را صادر نکند‪ ،‬ممکن است فرآیند از این حالت حذف نشود‪.‬‬

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

‫به عنوان مثالی دیگر‪ ،‬مشکلی در یک خط ارتباطی شناسایی میشود و اپراتور سیستم عامل را مجبور میکند فرآیندی را که از‬
‫خط استفاده میکند در حین انجام برخی آزمایشها به حالت تعلیق درآورد‪ .‬مجموعه دیگری از دالیل مربوط به اقدامات یک‬
‫کاربر تعاملی است‪ .‬به عنوان مثال‪ ،‬اگر کاربر مشکوک به وجود اشکال در برنامه باشد‪ ،‬ممکن است برنامه را با تعلیق اجرای آن‪،‬‬
‫بررسی و اصالح برنامه یا داده ها و از سرگیری اجرا‪ ،‬رفع اشکال کند‪ .‬یا ممکن است فرآیند پسزمینهای وجود داشته باشد که در‬
‫حال جمعآوری آمار ردیابی یا حسابداری است‪ ،‬که ممکن است کاربر بخواهد بتواند آن را روشن و خاموش کند‪ .‬مالحظات‬
‫زمانبندی نیز ممکن است منجر به تصمیم مبادله شود‪ .‬به عنوان مثال‪ ،‬اگر قرار است فرآیندی به صورت دورهای فعال شود‪ ،‬اما‬
‫بیشتر اوقات بیکار است‪ ،‬باید بین استفادهها جایگزین شود‪ .‬برنامه ای که استفاده یا فعالیت کاربر را رصد می کند یک مثال‬
‫است‪.‬در نهایت‪ ،‬یک فرآیند والد ممکن است بخواهد یک فرآیند نزولی را به حالت تعلیق درآورد‪ .‬برای مثال‪ ،‬فرآیند ‪ A‬ممکن‬
‫است فرآیند ‪ B‬را برای انجام خواندن فایل ایجاد کند‪ .‬متعاقباً‪ ،‬فرآیند ‪ B‬با یک خطا در روند خواندن فایل مواجه میشود و آن را‬
‫به پردازش ‪ A‬گزارش میدهد‪.‬در تمام این موارد‪ ،‬فعال سازی یک فرآیند تعلیق شده توسط عاملی که در ابتدا درخواست تعلیق‬
‫کرده بود‪ ،‬درخواست می شود‪.‬‬

‫‪156‬‬
‫سیستم عامل های داخلی و اصول طراحی‪157.........................................................................................................................‬‬

‫جدول ‪ 3.3‬دالیل تعلیق فرآیند‬

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

‫‪ 3.3‬شرح فرآیند‬

‫سیستم عامل رویدادهای درون سیستم کامپیوتری را کنترل می کند‪ .‬فرآیندها را برای اجرا توسط پردازنده برنامه ریزی و ارسال‬
‫می کند‪ ،‬منابع را به فرآیندها تخصیص می دهد و به درخواست های فرآیندهای کاربر برای خدمات اساسی پاسخ می دهد‪.‬‬
‫اساساً‪ ،‬ما میتوانیم سیستمعامل را به عنوان موجودی در نظر بگیریم که استفاده از منابع سیستم را توسط فرآیندها مدیریت‬
‫میکند‪.‬‬

‫این مفهوم در شکل ‪ 3.10‬نشان داده شده است‪ .‬در یک محیط چندبرنامهنویسی‪ ،‬تعدادی فرآیند ‪ Pn ،. . . . ،P1‬وجود دارد که‬
‫در حافظه مجازی ایجاد شده و وجود دارد‪ .‬هر فرآیند در طول اجرای خود نیاز به دسترسی به منابع سیستم خاصی از جمله‬
‫پردازنده‪ ،‬دستگاه های ورودی‪/‬خروجی و حافظه اصلی دارد‪ .‬در شکل‪ ،‬فرآیند ‪ P1‬در حال اجرا است‪ .‬حداقل بخشی از فرآیند در‬
‫حافظه اصلی است و کنترل دو دستگاه ورودی‪/‬خروجی را در اختیار دارد‪ .‬پردازش ‪ P2‬نیز در حافظه اصلی است اما در انتظار‬
‫دستگاه ‪ I/O‬اختصاص داده شده به ‪ P1‬مسدود شده است‪ .‬فرآیند ‪ Pn‬تعویض شده است و بنابراین به حالت تعلیق درآمده‬
‫است‪.‬‬

‫‪157‬‬
‫سیستم عامل های داخلی و اصول طراحی‪158.........................................................................................................................‬‬

‫حافظه‬
‫مجازی‬

‫منابع‬
‫کامپیوتری‬

‫شکل ‪ 3.10‬فرآیندها و منابع تخصیص منابع در یک عکس فوری در زمان‬

‫ما جزئیات مدیریت این منابع توسط سیستم عامل را به نمایندگی از فرآیندهای فصل های بعدی بررسی می کنیم‪ .‬در اینجا ما با‬
‫یک سوال اساسی تر سروکار داریم‪ :‬سیستم عامل برای کنترل فرآیندها و مدیریت منابع برای آنها به چه اطالعاتی نیاز دارد؟‬

‫ساختارهای کنترل سیستم عامل‬

‫اگر قرار است سیستم عامل فرآیندها و منابع را مدیریت کند‪ ،‬باید اطالعاتی در مورد وضعیت فعلی هر فرآیند و منبع داشته‬
‫باشد‪ .‬رویکرد جهانی برای ارائه این اطالعات ساده است‪ :‬سیستم عامل جداول اطالعات را در مورد هر موجودیتی که مدیریت می‬
‫کند ایجاد و نگهداری می کند‪ .‬یک ایده کلی از دامنه این تالش در شکل ‪ 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.........................................................................................................................‬‬

‫شکل ‪ 3.11‬ساختار کلی جداول کنترل سیستم عامل‬

‫ساختارهای کنترل فرآیند‬

‫آنچه را که سیستم عامل برای مدیریت و کنترل یک فرآیند باید بداند‪ ،‬در نظر بگیرید‪ .‬ابتدا باید بداند که فرآیند در کجا قرار‬
‫دارد‪ .‬دوم‪ ،‬باید ویژگی های فرآیند را که برای مدیریت آن ضروری است بداند به عنوان مثال‪ ،‬شناسه فرآیند و وضعیت فرآیند‪.‬‬

‫مکان فرآیند قبل از اینکه بتوانیم به سؤاالتی بپردازیم که یک فرآیند در کجا واقع شده است یا ویژگی های آن چیست‪ ،‬باید به‬
‫یک سؤال اساسی تر بپردازیم‪ :‬تجلی فیزیکی یک فرآیند چیست؟ حداقل‪ ،‬یک فرآیند باید شامل یک برنامه یا مجموعه ای از‬
‫برنامه ها باشد که باید اجرا شوند‪ .‬با این برنامه ها مجموعه ای از مکان های داده برای متغیرهای محلی و سراسری و هر ثابت‬
‫تعریف شده مرتبط است‪ .‬بنابراین‪ ،‬یک فرآیند حداقل از حافظه کافی برای نگهداری برنامه ها و داده های آن فرآیند تشکیل شده‬
‫است‪ .‬عالوه بر این‪ ،‬اجرای یک برنامه معموالً شامل یک پشته به پیوست ‪ P‬مراجعه کنید است که برای پیگیری فراخوانیهای‬
‫رویه و ارسال پارامتر بین رویهها استفاده میشود‪ .‬در نهایت‪ ،‬هر فرآیند دارای تعدادی ویژگی است که توسط سیستم عامل برای‬
‫کنترل فرآیند استفاده می شود‪ .‬به طور معمول‪ ،‬مجموعه ای از ویژگی ها به عنوان یک بلوک کنترل فرآیند نامیده می شود‪ .‬می‬
‫توانیم به این مجموعه از برنامه‪ ،‬داده ها‪ ،‬پشته و ویژگی ها به عنوان تصویر فرآیند اشاره کنیم جدول ‪.3.4‬‬

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

‫‪160‬‬
‫سیستم عامل های داخلی و اصول طراحی‪161.........................................................................................................................‬‬

‫دیسک و برای هر فرآیندی که در حافظه اصلی است‪ ،‬مکان آن فرآیند در حافظه اصلی را بداند‪ .‬ما تغییرات کمی پیچیدهتر را در‬
‫این طرح با سیستمعامل ‪ CTSS‬در فصل ‪ 2‬دیدیم‪.‬‬

‫با ‪ ،CTSS‬هنگامی که یک فرآیند تعویض میشود‪ ،‬بخشی از تصویر فرآیند ممکن است در حافظه اصلی باقی بماند‪ .‬بنابراین‪،‬‬
‫سیستم عامل باید پیگیری کند که کدام بخش از تصویر هر فرآیند هنوز در حافظه اصلی است‪.‬‬

‫جدول ‪ 3.4‬عناصر معمولی تصویر فرآیند‬

‫داده های کاربر ‪ :‬بخش قابل تغییر فضای کاربر‪ .‬ممکن است شامل داده های برنامه‪ ،‬یک ناحیه پشته کاربر و برنامه هایی باشد‬
‫که ممکن است اصالح شوند‪.‬‬

‫برنامه کاربر ‪ :‬برنامه ای که باید اجرا شود‪.‬‬

‫مرتبط با آن است‪ .‬یک پشته برای ذخیره پارامترها و آدرس ‪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‬ساختار تصاویر فرآیند در حافظه مجازی را نشان می دهد‪ .‬هر تصویر فرآیند شامل یک بلوک کنترل فرآیند‪ ،‬یک‬
‫پشته کاربر‪ ،‬فضای آدرس خصوصی فرآیند و هر فضای آدرس دیگری است که فرآیند با سایر فرآیندها به اشتراک می گذارد‪.‬‬

‫جدول ‪ 3.5‬عناصر معمول یک بلوک کنترل فرآیند‬

‫شناسایی فرآیند‬

‫شناسه ها‬

‫شناسه های عددی که ممکن است با بلوک کنترل فرآیند ذخیره شوند شامل‬

‫‪. *EFOUJGJFS PG UIJT QSPDFTT-‬‬

‫‪*EFOUJGJFS PG UIF QSPDFTT UIBU DSFBUFE UIJT QSPDFTT QBSFOU QSPDFTT. -‬‬
‫‪. 6TFS JEFOUJGJFS-‬‬

‫اطالعات وضعیت پردازنده‬

‫ثبت های قابل مشاهده توسط کاربر‬

‫‪163‬‬
‫سیستم عامل های داخلی و اصول طراحی‪164.........................................................................................................................‬‬

‫یک ثبات قابل مشاهده توسط کاربر‪ ،‬ثبتی است که ممکن است با استفاده از زبان ماشینی که پردازنده در حالت کاربر اجرا می‬
‫کند‪ ،‬ارجاع داده شود‪ .‬به طور معمول‪ ،‬از ‪ 8‬تا ‪ 32‬مورد از این رجیسترها وجود دارد‪ ،‬اگرچه برخی از پیاده سازی های ‪RISC‬‬
‫بیش از ‪ 100‬دارند‪.‬‬

‫کنترل و ثبت وضعیت‬

‫اینها انواع رجیسترهای پردازنده هستند که برای کنترل عملکرد پردازنده استفاده می شوند‪ .‬این شامل‬

‫‪ -‬برنامه شمارنده‪ :‬حاوی آدرس دستورالعمل بعدی است که باید واکشی شود‪.‬‬

‫‪ -‬کدهای شرط‪ :‬نتیجه آخرین عملیات حسابی یا منطقی به عنوان مثال‪ ،‬عالمت‪ ،‬صفر‪ ،‬حمل‪ ،‬برابر‪ ،‬سرریز‪.‬‬

‫‪ -‬اطالعات وضعیت‪ :‬شامل پرچم های فعال‪/‬غیرفعال وقفه‪ ،‬حالت اجرا می شود‪.‬‬

‫نشانگرهای پشته‬

‫هر فرآیند دارای یک یا چند دسته سیستم آخرین در اولین خروجی ‪ LIFO‬مرتبط با آن است‪ .‬یک پشته برای ذخیره پارامترها‬
‫و آدرس های فراخوانی برای فراخوانی رویه و سیستم استفاده می شود‪ .‬نشانگر پشته به باالی پشته اشاره می کند‪.‬‬

‫اطالعات کنترل فرآیند‬

‫برنامه ریزی و اطالعات ایالتی‬

‫این اطالعاتی است که سیستم عامل برای انجام عملکرد برنامه ریزی خود مورد نیاز است‪ .‬موارد معمول اطالعات‪:‬‬

‫‪ -‬وضعیت فرآیند‪ :‬آمادگی فرآیند را برای برنامه ریزی برای اجرا به عنوان مثال‪ ،‬در حال اجرا‪ ،‬آماده‪ ،‬انتظار‪ ،‬توقف تعریف می‬
‫کند‪.‬‬

‫‪ -‬اولویت‪ :‬ممکن است از یک یا چند زمینه برای توصیف اولویت زمانبندی فرآیند استفاده شود‪ .‬در برخی از سیستم ها‪ ،‬چندین‬
‫مقدار مورد نیاز است به عنوان مثال‪ ،‬پیش فرض‪ ،‬فعلی‪ ،‬باالترین مجاز‪.‬‬

‫‪ -‬اطالعات مربوط به زمانبندی‪ :‬این به الگوریتم زمانبندی مورد استفاده بستگی دارد‪ .‬به عنوان مثال‪ ،‬مدت زمان انتظار فرآیند و‬
‫مدت زمانی که فرآیند در آخرین باری که در حال اجرا بود اجرا شده است‪.‬‬

‫‪ -‬رویداد‪ :‬هویت رویدادی که فرآیند در انتظار آن است تا بتواند از سر گرفته شود‪.‬‬

‫ساختار داده ها‬

‫‪164‬‬
‫سیستم عامل های داخلی و اصول طراحی‪165.........................................................................................................................‬‬

‫یک فرآیند ممکن است به فرآیند دیگری در یک صف‪ ،‬حلقه یا ساختار دیگری مرتبط باشد‪ .‬به عنوان مثال‪ ،‬تمام فرآیندهای در‬
‫حالت انتظار برای یک سطح اولویت خاص ممکن است در یک صف مرتبط شوند‪.‬‬

‫یک فرآیند ممکن است رابطه والد‪-‬فرزند خلق‪-‬خلق را با فرآیند دیگری نشان دهد‪ .‬بلوک کنترل فرآیند ممکن است حاوی اشاره‬
‫گرهایی به فرآیندهای دیگر برای پشتیبانی از این ساختارها باشد‪.‬‬

‫ارتباطات بین فرآیندی‬

‫پرچم ها‪ ،‬سیگنال ها و پیام های مختلف ممکن است با ارتباط بین دو فرآیند مستقل مرتبط باشند‪ .‬برخی یا همه این اطالعات‬
‫ممکن است در بلوک کنترل فرآیند نگهداری شوند‪.‬‬

‫امتیازات فرآیند‬

‫فرآیندها از نظر حافظه قابل دسترسی و انواع دستورالعمل هایی که ممکن است اجرا شوند دارای امتیازاتی هستند‪ .‬بعالوه‪ ،‬ممکن‬
‫است امتیازاتی برای استفاده از ابزارها و خدمات سیستم اعمال شود‪.‬‬

‫مدیریت حافظه‬

‫این بخش ممکن است شامل نشانگرهایی به جداول بخش و‪/‬یا صفحه باشد که حافظه مجازی اختصاص داده شده به این فرآیند‬
‫را توصیف می کند‪.‬‬

‫مالکیت و استفاده از منابع‬

‫منابع کنترل شده توسط فرآیند ممکن است نشان داده شوند‪ ،‬مانند فایل های باز شده‪ .‬تاریخچه استفاده از پردازنده یا منابع‬
‫دیگر نیز ممکن است گنجانده شود‪ .‬این اطالعات ممکن است توسط زمانبندی مورد نیاز باشد‪.‬‬

‫= ‪X‬‬ ‫= ‪ C DF‬پرچم شناسایی‬ ‫پرچم جهت‬


‫‪ID‬‬
‫= ‪ X IF‬وقفه مجازی در انتظار = ‪X‬‬ ‫پرچم فعال‬
‫‪VIP‬‬ ‫کردن وقفه‬
‫= ‪X‬‬ ‫= ‪ X TF‬پرچم وقفه مجازی‬ ‫پرچم تله‬
‫‪VIF‬‬

‫‪165‬‬
‫سیستم عامل های داخلی و اصول طراحی‪166.........................................................................................................................‬‬

‫= ‪X‬‬ ‫= ‪ S SF‬بررسی تراز‬ ‫پرچم را امضا‬


‫‪AC‬‬ ‫کنید‬
‫= ‪ S ZF‬حالت مجازی ‪X = 8086‬‬ ‫پرچم صفر‬
‫‪VM‬‬
‫= ‪X‬‬ ‫= ‪ S AF‬پرچم رزومه‬ ‫پرچم حمل‬
‫‪RF‬‬ ‫کمکی‬
‫پرچم برابری = ‪ S PF‬پرچم وظیفه تو در تو = ‪X‬‬
‫‪NT‬‬
‫= ‪X‬‬ ‫پرچم را حمل = ‪ S CF‬سطح امتیاز‪I/O‬‬
‫‪IOP‬‬ ‫کنید‬
‫‪L‬‬
‫= ‪S‬‬ ‫پرچم سرریز‬
‫‪OF‬‬

‫شکل ‪ x86 3.12‬ثبت ‪EFLAGS‬‬

‫جدول ‪ x86 3.6‬بیت های ثبت ‪EFLAGS‬‬

‫پرچم های وضعیت کدهای شرایط‬

‫‪ AF‬پرچم حمل کمکی‬

‫نشان دهنده حمل یا قرض گرفتن بین نیم بایت از یک عملیات حسابی یا منطقی ‪ 8‬بیتی با استفاده از ثبات ‪ AL‬است‪.‬‬

‫‪ CF‬پرچم حمل‬

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

‫‪ OF‬پرچم سرریز‬

‫سرریز حسابی پس از جمع یا تفریق را نشان می دهد‪.‬‬

‫‪ PF‬پرچم برابری‬

‫برابری نتیجه یک عملیات حسابی یا منطقی‪ 1 .‬نشان دهنده برابری یکنواخت است‪ 0 .‬نشان دهنده برابری فرد است‪.‬‬

‫‪166‬‬
‫سیستم عامل های داخلی و اصول طراحی‪167.........................................................................................................................‬‬

‫‪ SF‬پرچم عالمت‬

‫نشانه نتیجه یک عملیات حسابی یا منطقی را نشان می دهد‪.‬‬

‫‪ ZF‬پرچم صفر‬

‫نشان می دهد که نتیجه یک عملیات حسابی یا منطقی ‪ 0‬است‪.‬‬

‫پرچم کنترل‬

‫‪ DF‬پرچم جهت‬

‫تعیین میکند که آیا دستورالعملهای پردازش رشته‪ ،‬نیمثبتکنندههای ‪ 16‬بیتی ‪ SI‬و ‪ DI‬برای عملیاتهای ‪ 16‬بیتی یا‬
‫ثبتکنندههای ‪ 32‬بیتی ‪ ESI‬و ‪ EDI‬برای عملیاتهای ‪ 32‬بیتی را افزایش یا کاهش میدهند‪.‬‬

‫پرچم های سیستم نباید توسط برنامه های کاربردی اصالح شود‬

‫‪ AC‬بررسی تراز‬

‫تنظیم کنید که یک کلمه یا دوکلمه روی مرز غیرکلمه یا غیردوکلمه خطاب شود‪.‬‬

‫شناسه پرچم شناسایی‬

‫اگر بتوان این بیت را تنظیم و پاک کرد‪ ،‬این پردازنده از دستورالعمل ‪ CPUID‬پشتیبانی می کند‪ .‬این دستورالعمل اطالعاتی در‬
‫مورد فروشنده‪ ،‬خانواده و مدل ارائه می دهد‪.‬‬

‫‪ RF‬پرچم رزومه‬

‫به برنامهنویس اجازه میدهد تا استثناهای اشکالزدایی را غیرفعال کند تا دستور بعد از یک استثناء اشکالزدایی مجدداً راهاندازی‬
‫شود‪ ،‬بدون اینکه فوراً استثناء اشکالزدایی دیگری ایجاد شود‪.‬‬

‫‪ IOPL‬سطح امتیاز ‪I/O‬‬

‫وقتی تنظیم شود‪ ،‬باعث می شود که پردازنده در طول عملیات حالت محافظت شده‪ ،‬یک استثنا برای همه دسترسی ها به‬
‫دستگاه های ورودی‪/‬خروجی ایجاد کند‪.‬‬

‫‪ IF‬پرچم فعال کردن وقفه‬

‫وقتی تنظیم شود‪ ،‬پردازنده وقفه های خارجی را تشخیص می دهد‪.‬‬


‫‪167‬‬
‫سیستم عامل های داخلی و اصول طراحی‪168.........................................................................................................................‬‬

‫‪ TF‬پرچم دام‬

‫هنگامی که تنظیم می شود‪ ،‬پس از اجرای هر دستور باعث وقفه می شود‪ .‬این برای رفع اشکال استفاده می شود‪.‬‬

‫‪ NT‬پرچم وظیفه تودرتو‬

‫نشان می دهد که وظیفه فعلی در یک وظیفه دیگر در عملیات حالت محافظت شده قرار دارد‪.‬‬

‫‪ VM‬حالت مجازی ‪8086‬‬

‫به برنامه نویس اجازه می دهد حالت مجازی ‪ 8086‬را فعال یا غیرفعال کند‪ ،‬که تعیین می کند آیا پردازنده به عنوان یک ماشین‬
‫‪ 8086‬کار می کند یا خیر‪.‬‬

‫‪ VIP‬وقفه مجازی در انتظار‬

‫در حالت مجازی ‪ 8086‬برای نشان دادن اینکه یک یا چند وقفه در انتظار سرویس هستند استفاده می شود‪.‬‬

‫‪ VIF‬پرچم وقفه مجازی‬

‫در حالت مجازی ‪ 8086‬به جای ‪ IF‬استفاده می شود‪.‬‬

‫شناسایی فرآیند‬ ‫شناسایی فرآیند‬ ‫شناسایی فرآیند‬

‫اطالعات وضعیت‬ ‫اطالعات وضعیت پردازنده‬ ‫اطالعات وضعیت پردازنده‬


‫پردازنده‬
‫اطالعات کنترل فرآیند‬ ‫اطالعات کنترل فرآیند‬ ‫اطالعات کنترل فرآیند‬

‫پشته کاربر‬ ‫پشته کاربر‬ ‫‪…………..‬‬ ‫پشته کاربر‬

‫فضای آدرس کاربر‬ ‫فضای آدرس کاربر خصوصی‬ ‫فضای آدرس کاربر خصوصی‬

‫خصوصی (برنامه ها‪،‬‬ ‫(برنامه ها‪ ،‬داده ها)‬ ‫(برنامه ها‪ ،‬داده ها)‬

‫داده ها)‬
‫فضای آدرس مشترک‬ ‫فضای آدرس مشترک‬ ‫فضای آدرس مشترک‬

‫فرآیند ‪1‬‬ ‫فرآیند ‪2‬‬ ‫فرآیند ‪n‬‬

‫‪168‬‬
‫سیستم عامل های داخلی و اصول طراحی‪169.........................................................................................................................‬‬

‫شکل ‪ 3.13‬فرآیندهای کاربر در حافظه مجازی‬

‫بلوک کنترل فرآیند‬

‫در شکل‪ ،‬هر تصویر فرآیند به عنوان یک محدوده پیوسته از آدرس ها ظاهر می شود‪ .‬در اجرای واقعی‪ ،‬ممکن است اینطور‬
‫نباشد‪ .‬این به طرح مدیریت حافظه و روشی که در آن ساختارهای کنترلی توسط سیستم عامل سازماندهی می شوند بستگی‬
‫دارد‪ .‬همانطور که در جدول ‪ 3.5‬نشان داده شده است‪ ،‬بلوک کنترل فرآیند ممکن است حاوی اطالعات ساختاری‪ ،‬از جمله اشاره‬
‫گرهایی باشد که امکان پیوند بلوک های کنترل فرآیند را فراهم می کند‪ .‬بنابراین‪ ،‬صف هایی که در بخش قبل توضیح داده شد‬
‫می توانند به عنوان لیست های پیوندی بلوک های کنترل فرآیند پیاده سازی شوند‪ .‬به عنوان مثال‪ ،‬ساختار صف شکل ‪ a3.8‬می‬
‫تواند همانطور که در شکل ‪ 3.14‬پیشنهاد شده است‪ ،‬پیاده سازی شود‪ .‬نقش بلوک کنترل فرآیند بلوک کنترل فرآیند مهمترین‬
‫ساختار داده در یک سیستم عامل است‪ .‬هر بلوک کنترل فرآیند حاوی تمام اطالعات مربوط به یک فرآیند است که توسط‬
‫سیستم عامل مورد نیاز است‪ .‬بلوکها تقریباً توسط هر ماژول در سیستمعامل‪ ،‬از جمله موارد مرتبط با زمانبندی‪ ،‬تخصیص‬
‫منابع‪ ،‬پردازش وقفه‪ ،‬و نظارت و تحلیل عملکرد‪ ،‬خوانده و‪/‬یا اصالح میشوند‪ .‬می توان گفت که مجموعه بلوک های کنترل‬
‫فرآیند وضعیت سیستم عامل را مشخص می کند‪ .‬این موضوع یک موضوع طراحی مهم را مطرح می کند‪ .‬تعدادی از روتین ها در‬
‫سیستم عامل نیاز به دسترسی به اطالعات در بلوک های کنترل فرآیند دارند‪ .‬ارائه دسترسی مستقیم به این جداول دشوار‬
‫نیست‪ .‬هر فرآیند مجهز به یک شناسه منحصربهفرد است و میتوان از آن بهعنوان شاخصی در جدول نشانگرهای بلوکهای‬
‫کنترل فرآیند استفاده کرد‪ .‬مشکل دسترسی نیست‪ ،‬بلکه محافظت است‪ .‬دو مشکل خود را نشان می دهد‪:‬‬

‫‪ r‬یک اشکال در یک روال منفرد‪ ،‬مانند کنترل کننده وقفه‪ ،‬می تواند به بلوک های کنترل فرآیند آسیب برساند‪ ،‬که می تواند‬
‫توانایی سیستم را برای مدیریت فرآیندهای آسیب دیده از بین ببرد‪.‬‬

‫شکل ‪ 3.14‬ساختارهای فهرست فرآیند‬

‫‪169‬‬
‫سیستم عامل های داخلی و اصول طراحی‪170.........................................................................................................................‬‬

‫تغییر طراحی در ساختار یا معنای بلوک کنترل فرآیند می تواند بر تعدادی از ماژول ها در سیستم عامل تأثیر بگذارد‪ .‬این‬
‫مشکالت را میتوان با الزام همه روتینهای سیستمعامل به انجام یک روال کنترلکننده‪ ،‬که تنها وظیفه آن محافظت از‬
‫بلوکهای کنترل فرآیند است و تنها داور برای خواندن و نوشتن این بلوکها است‪ ،‬برطرف کرد‪ .‬معاوضه در استفاده از چنین‬
‫روتینی شامل مسائل مربوط به عملکرد و درجه ای است که می توان به درستی باقیمانده نرم افزار سیستم اعتماد کرد‪.‬‬

‫‪ 3.4‬کنترل فرآیند‬

‫حالت های اجرا‬

‫قبل از ادامه بحث ما در مورد روشی که سیستم عامل فرآیندها را مدیریت می کند‪ ،‬باید بین حالت اجرای پردازنده که معموالً با‬
‫سیستم عامل مرتبط است و حالتی که معموالً با برنامه های کاربر مرتبط است تمایز قائل شویم‪ .‬اکثر پردازنده ها حداقل از دو‬
‫حالت اجرا پشتیبانی می کنند‪ .‬برخی دستورالعملها را فقط میتوان در حالت ممتازتر اجرا کرد‪ .‬اینها شامل خواندن یا تغییر یک‬
‫رجیستر کنترل‪ ،‬مانند کلمه وضعیت برنامه است‪ .‬دستورالعمل های اولیه ورودی‪/‬خروجی؛ و دستورالعمل های مربوط به مدیریت‬
‫حافظه‪ .‬عالوه بر این‪ ،‬مناطق خاصی از حافظه فقط در حالت ممتازتر قابل دسترسی هستند‪.‬‬

‫جدول ‪ 3.7‬توابع معمولی هسته سیستم عامل‬

‫مدیریت فرآیند‬

‫‪ -‬ایجاد و خاتمه فرآیند ‪ r‬برنامه ریزی و ارسال فرآیند ‪ r‬سوئیچینگ فرآیند‬

‫‪ -‬همگام سازی فرآیند و پشتیبانی از ارتباطات بین فرآیندی‬

‫‪ -‬مدیریت بلوک های کنترل فرآیند‬

‫مدیریت حافظه‬

‫‪ -‬تخصیص فضای آدرس به فرآیندها‬

‫‪ -‬تعویض‬

‫‪ -‬مدیریت صفحه و بخش‬

‫‪170‬‬
‫سیستم عامل های داخلی و اصول طراحی‪171.........................................................................................................................‬‬

‫مدیریت ‪I/O‬‬

‫‪ -‬مدیریت بافر‬

‫‪ -‬تخصیص کانال ها و دستگاه های ‪ 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‬‬

‫جدول ‪ 3.8‬سازوکارهای وقفه در اجرای یک فرآیند‬

‫سازوکار‬ ‫علت‬ ‫استفاده کنید‬


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

‫‪174‬‬
‫سیستم عامل های داخلی و اصول طراحی‪175.........................................................................................................................‬‬

‫تغییر حالت در فصل ‪ ،1‬در مورد گنجاندن مرحله وقفه به عنوان بخشی از چرخه دستورالعمل بحث کردیم‪ .‬به یاد بیاورید که در‬
‫مرحله وقفه‪ ،‬پردازنده بررسی میکند که آیا وقفهای معلق است که با وجود سیگنال وقفه مشخص میشود‪ .‬اگر هیچ وقفهای‬
‫معلق نباشد‪ ،‬پردازنده به مرحله واکشی میرود و دستورالعمل بعدی برنامه فعلی را در فرآیند جاری واکشی میکند‪ .‬اگر یک وقفه‬
‫در حال تعلیق باشد‪ ،‬پردازنده اقدامات زیر را انجام می دهد‪:‬‬

‫‪ .1‬شمارنده برنامه را روی آدرس شروع یک برنامه کنترل کننده وقفه تنظیم می کند‪.‬‬

‫‪ .2‬از حالت کاربر به حالت هسته سوئیچ می کند تا کد پردازش وقفه شامل دستورالعمل های ممتاز باشد‪.‬‬

‫پردازنده اکنون به مرحله واکشی می رود و اولین دستورالعمل برنامه کنترل کننده وقفه را واکشی می کند که وقفه را سرویس‬
‫می کند‪ .‬در این مرحله‪ ،‬به طور معمول‪ ،‬زمینه فرآیندی که قطع شده است در بلوک کنترل فرآیند برنامه قطع شده ذخیره می‬
‫شود‪.‬‬

‫یک سوال که اکنون ممکن است برای شما پیش بیاید این است که زمینه ای که ذخیره شده است چیست؟ پاسخ این است که‬
‫باید شامل هر گونه اطالعاتی باشد که ممکن است با اجرای کنترل کننده وقفه تغییر کند و برای از سرگیری برنامه ای که قطع‬
‫شده است مورد نیاز باشد‪ .‬بنابراین‪ ،‬بخشی از بلوک کنترل فرآیند که به عنوان اطالعات وضعیت پردازنده نامیده می شد باید‬
‫ذخیره شود‪ .‬این شامل شمارنده برنامه‪ ،‬سایر رجیسترهای پردازنده و اطالعات پشته است‪.‬‬

‫آیا کار دیگری باید انجام شود؟ این بستگی به اتفاقات بعدی دارد‪ .‬کنترل کننده وقفه معموالً یک برنامه کوتاه است که چند کار‬
‫اساسی مربوط به یک وقفه را انجام می دهد‪ .‬به عنوان مثال‪ ،‬پرچم یا نشانگر را که وجود یک وقفه را نشان می دهد‪ ،‬بازنشانی می‬
‫کند‪ .‬ممکن است یک تأییدیه برای نهادی که وقفه را صادر کرده است ارسال کند‪ ،‬مانند یک ماژول ‪ .I/O‬و ممکن است برخی از‬
‫خانه داری های اولیه را در رابطه با اثرات رویدادی که باعث وقفه شده است انجام دهد‪ .‬برای مثال‪ ،‬اگر وقفه مربوط به یک رویداد‬
‫ورودی‪/‬خروجی باشد‪ ،‬کنترل کننده وقفه شرایط خطا را بررسی می کند‪ .‬اگر خطایی رخ داده باشد‪ ،‬کنترل کننده وقفه ممکن‬
‫است سیگنالی را به فرآیندی ارسال کند که در ابتدا عملیات ‪ I/O‬را درخواست کرده است‪ .‬اگر وقفه با ساعت باشد‪ ،‬کنترل کننده‬
‫کنترل را به دیسپچر میدهد‪ ،‬که میخواهد کنترل را به فرآیند دیگری منتقل کند‪ ،‬زیرا زمان تخصیص داده شده به فرآیند در‬
‫حال اجرا منقضی شده است‪.‬‬

‫در مورد سایر اطالعات در بلوک کنترل فرآیند چطور؟ اگر قرار باشد این وقفه با تغییر به فرآیند دیگری دنبال شود‪ ،‬باید کارهایی‬
‫انجام شود‪ .‬با این حال‪ ،‬در اکثر سیستم عامل ها‪ ،‬وقوع وقفه لزوما به معنای سوئیچ فرآیند نیست‪ .‬این امکان وجود دارد که پس‬
‫از اجرای کنترل کننده وقفه‪ ،‬فرآیند در حال اجرا مجدداً اجرا شود‪ .‬در این صورت‪ ،‬تنها چیزی که الزم است این است که هنگام‬
‫بروز وقفه‪ ،‬اطالعات وضعیت پردازنده را ذخیره کنید و زمانی که کنترل به برنامه در حال اجرا برگردانده شد‪ ،‬آن اطالعات را‬
‫بازیابی کنید‪ .‬به طور معمول‪ ،‬عملکردهای ذخیره و بازیابی در سخت افزار انجام می شود‪.‬‬
‫‪175‬‬
‫سیستم عامل های داخلی و اصول طراحی‪176.........................................................................................................................‬‬

‫تغییر حالت فرآیند واضح است که سوئیچ حالت مفهومی متمایز از سوئیچ فرآیند است‪ 10 .‬یک سوئیچ حالت ممکن است بدون‬
‫تغییر وضعیت‪ 15‬فرآیندی که در حال حاضر در حالت در حال اجرا است رخ دهد‪ .‬در آن صورت‪ ،‬صرفه جویی در زمینه و بازسازی‬
‫بعدی شامل هزینه کمی است‪ .‬با این حال‪ ،‬اگر قرار است فرآیند در حال اجرا به حالت دیگری آماده‪ ،‬مسدود و غیره منتقل شود‪،‬‬
‫سیستم عامل باید تغییرات اساسی در محیط خود ایجاد کند‪ .‬مراحل مربوط به سوئیچ کامل فرآیند به شرح زیر است‪:‬‬

‫‪ .1‬زمینه پردازنده‪ ،‬از جمله شمارنده برنامه و سایر ثبات ها را ذخیره کنید‪.‬‬

‫‪ .2‬بلوک کنترل فرآیند فرآیندی را که در حال حاضر در حالت ‪ Running‬قرار دارد‪ ،‬به روز کنید‪ .‬این شامل تغییر وضعیت‬
‫فرآیند به یکی از حالتهای دیگر آماده‪ ،‬مسدود‪ ،‬آماده‪/‬تعلیق‪ ،‬یا خروج میشود‪ .‬سایر زمینه های مرتبط نیز باید به روز شوند‪ ،‬از‬
‫جمله دلیل خروج از وضعیت در حال اجرا و اطالعات حسابداری‪.‬‬

‫‪ .3‬بلوک کنترل فرآیند این فرآیند را به صف مناسب آماده؛ مسدود شده در رویداد ‪i‬؛ آماده‪/‬تعلیق منتقل کنید‪.‬‬

‫‪ .4‬فرآیند دیگری را برای اجرا انتخاب کنید‪ .‬این موضوع در قسمت چهارم بررسی شده است‪.‬‬

‫‪ .5‬بلوک کنترل فرآیند فرآیند انتخاب شده را به روز کنید‪ .‬این شامل تغییر وضعیت این فرآیند به ‪ Running‬است‪.‬‬

‫‪ .6‬ساختارهای داده مدیریت حافظه را به روز کنید‪ .‬بسته به نحوه مدیریت ترجمه آدرس‪ ،‬ممکن است این مورد نیاز باشد‪ .‬این‬
‫موضوع در بخش سوم بررسی شده است‪.‬‬

‫‪ .7‬با بارگذاری در مقادیر قبلی شمارنده برنامه و سایر رجیسترها‪ ،‬زمینه پردازشگر را به شرایطی که در زمانی که فرآیند انتخاب‬
‫شده برای آخرین بار از حالت ‪ Running‬خارج شد‪ ،‬وجود داشت‪ ،‬بازیابی کنید‪.‬‬

‫بنابراین‪ ،‬سوئیچ فرآیند‪ ،‬که شامل تغییر حالت است‪ ،‬به تالش بیشتری نسبت به سوئیچ حالت نیاز دارد‪.‬‬

‫‪ 3.5‬اجرای سیستم عامل‬

‫در فصل ‪ ،2‬به دو واقعیت جالب در مورد سیستم عامل ها اشاره کردیم‪:‬‬

‫‪ -‬سیستم عامل مانند نرم افزارهای کامپیوتری معمولی عمل می کند به این معنا که سیستم عامل مجموعه ای از برنامه ها است‬
‫که توسط پردازنده اجرا می شود‪.‬‬

‫‪ 15‬اصطالح سوئیچ زمینه اغلب در ادبیات و کتاب های درسی سیستم عامل یافت می شود‪ .‬متأسفانه‪ ،‬اگرچه بیشتر متون از این اصطالح به معنای چیزی استفاده میکنند که در‬
‫اینجا سوئیچ فرآیند نامیده میشود‪ ،‬منابع دیگر از آن به معنای سوئیچ حالت یا حتی سوئیچ رشته (که در فصل بعدی تعریف میشود) استفاده میکنند‪ .‬برای جلوگیری از ابهام‪ ،‬در‬
‫این کتاب از این واژه استفاده نشده است‪.‬‬
‫‪176‬‬
‫سیستم عامل های داخلی و اصول طراحی‪177.........................................................................................................................‬‬

‫‪ -‬سیستم عامل اغلب کنترل را رها می کند و برای بازگرداندن کنترل به سیستم عامل به پردازنده وابسته است‪.‬‬

‫اگر سیستم عامل فقط مجموعه ای از برنامه ها باشد و اگر مانند هر برنامه دیگری توسط پردازنده اجرا شود‪ ،‬آیا سیستم عامل‬
‫یک فرآیند است؟ اگر چنین است چگونه کنترل می شود؟ این سواالت جالب الهام بخش تعدادی از رویکردهای طراحی شده‬
‫است‪ .‬شکل ‪ 3.15‬طیفی از رویکردها را نشان می دهد که در سیستم عامل های مختلف معاصر یافت می شوند‪.‬‬

‫هسته غیر فرآیندی‬

‫یک رویکرد سنتی که در بسیاری از سیستم عامل های قدیمی رایج است‪ ،‬اجرای هسته سیستم عامل خارج از هر فرآیندی است‬
‫شکل ‪ .a3.15‬با این رویکرد‪ ،‬زمانی که فرآیند در حال اجرا قطع میشود یا یک فراخوان سرپرست صادر میکند‪ ،‬متن حالت این‬
‫فرآیند ذخیره میشود و کنترل به هسته منتقل میشود‪ .‬سیستم عامل دارای ناحیه حافظه مخصوص به خود برای استفاده و‬
‫پشته سیستم خود برای کنترل فراخوانی ها و بازگشت های رویه است‪ .‬سیستم عامل می تواند هر عملکرد دلخواه را انجام دهد و‬
‫زمینه فرآیند قطع شده را بازیابی کند‪ ،‬که باعث می شود اجرا در فرآیند کاربر قطع شده از سر گرفته شود‪ .‬از طرف دیگر‪،‬‬
‫سیستم عامل میتواند عملکرد ذخیرهسازی محیط فرآیند را تکمیل کند و به برنامهریزی و ارسال فرآیند دیگری ادامه دهد‪.‬‬
‫اینکه این اتفاق بیفتد بستگی به دلیل وقفه و شرایط آن زمان دارد‪.‬‬

‫در هر صورت‪ ،‬نکته کلیدی در اینجا این است که مفهوم فرآیند فقط برای برنامه های کاربر اعمال می شود‪ .‬کد سیستم عامل به‬
‫عنوان یک موجودیت جداگانه اجرا می شود که در حالت ممتاز عمل می کند‪.‬‬

‫اجرا در فرآیندهای کاربر‬

‫جایگزینی که با سیستم عامل های رایانه های کوچکتر رایانه های شخصی‪ ،‬ایستگاه های کاری رایج است‪ ،‬اجرای تقریباً تمام نرم‬
‫افزارهای سیستم عامل در چارچوب فرآیند کاربر است‪ .‬دیدگاه این است که سیستم عامل در درجه اول مجموعه ای از روال‬
‫هایی است که کاربر برای انجام عملکردهای مختلف فراخوانی می کند و در محیط فرآیند کاربر اجرا می شود‪ .‬این در شکل‬
‫‪ b3.15‬نشان داده شده است‪ .‬در هر نقطه ای‪ ،‬سیستم عامل ‪ n‬تصویر فرآیند را مدیریت می کند‪ .‬هر تصویر نه تنها شامل مناطق‬
‫نشان داده شده در شکل ‪ ،3.13‬بلکه شامل برنامه‪ ،‬داده ها و مناطق پشته برای برنامه های هسته است‪.‬‬

‫‪177‬‬
‫سیستم عامل های داخلی و اصول طراحی‪178.........................................................................................................................‬‬

‫(الف) هسته جدا‬

‫توابع سوئیچینگ فرآیند‬

‫(ب) توابع سیستم عامل در فرآیندهای کاربر اجرا می شوند‬

‫توابع سوئیچینگ فرآیند‬

‫(ج) توابع سیستم عامل به عنوان فرآیندهای جداگانه اجرا می شوند‬

‫شکل ‪ 3.15‬رابطه بین سیستم عامل و فرآیندهای کاربر‬

‫شکل ‪ 3.16‬یک ساختار تصویر فرآیند معمولی را برای این استراتژی نشان می دهد‪ .‬یک پشته کرنل جداگانه برای مدیریت‬
‫تماس ها‪/‬بازگشت ها در حالی که فرآیند در حالت هسته است استفاده می شود‪.‬‬

‫شناسایی فرآیند‬
‫اطالعات وضعیت پردازنده‬
‫اطالعات کنترل فرآیند‬

‫پشته کاربر‬

‫فضای آدرس کاربر خصوصی (برنامه ها‪،‬‬


‫داده ها)‬

‫پشته هسته‬
‫فضای آدرس مشترک‬
‫شکل ‪ 3.16‬تصویر فرآیند‪ :‬عملیاتی سیستم در فضای کاربر اجرا می شود‬

‫‪178‬‬
‫سیستم عامل های داخلی و اصول طراحی‪179.........................................................................................................................‬‬

‫کد و داده های سیستم عامل در فضای آدرس اشتراکی قرار دارند و توسط تمام فرآیندهای کاربر به اشتراک گذاشته می شوند‪.‬‬

‫هنگامی که یک وقفه‪ ،‬تله یا تماس سرپرست رخ می دهد‪ ،‬پردازنده در حالت هسته قرار می گیرد و کنترل به سیستم عامل‬
‫منتقل می شود‪ .‬برای انتقال کنترل از یک برنامه کاربر به سیستم عامل‪ ،‬زمینه حالت ذخیره می شود و تغییر حالت به یک روال‬
‫سیستم عامل انجام می شود‪ .‬با این حال‪ ،‬اجرا در فرآیند کاربر فعلی ادامه دارد‪ .‬بنابراین‪ ،‬سوئیچ فرآیند انجام نمی شود‪ ،‬فقط یک‬
‫سوئیچ حالت در همان فرآیند انجام می شود‪.‬‬

‫اگر سیستم عامل پس از اتمام کار خود تشخیص دهد که فرآیند جاری باید به کار خود ادامه دهد‪ ،‬سپس یک سوئیچ حالت‬
‫برنامه قطع شده را در فرآیند جاری از سر می گیرد‪ .‬این یکی از مزایای کلیدی این رویکرد است‪ :‬یک برنامه کاربر برای به‬
‫کارگیری برخی روال سیستم عامل قطع شده است و سپس از سر گرفته می شود و همه اینها بدون جریمه دو سوئیچ فرآیند رخ‬
‫داده است‪.‬‬

‫با این حال‪ ،‬اگر مشخص شود که یک سوئیچ فرآیند به جای بازگشت به برنامه قبالً اجرا شده رخ می دهد‪ ،‬آنگاه کنترل به یک‬
‫روال تغییر فرآیند منتقل می شود‪ .‬بسته به طراحی سیستم‪ ،‬این روال ممکن است در فرآیند فعلی اجرا شود یا نباشد‪ .‬با این‬
‫حال‪ ،‬در برخی مواقع‪ ،‬فرآیند فعلی باید در حالت غیر در حال اجرا قرار گیرد و فرآیند دیگری به عنوان فرآیند در حال اجرا‬
‫تعیین شود‪ .‬در طول این مرحله‪ ،‬از نظر منطقی راحتتر است که اجرا را خارج از همه فرآیندها ببینیم‪.‬‬

‫به نوعی‪ ،‬این دیدگاه از سیستم عامل قابل توجه است‪ .‬به بیان ساده‪ ،‬در مقاطع خاصی از زمان‪ ،‬یک فرآیند اطالعات وضعیت خود‬
‫را ذخیره می کند‪ ،‬فرآیند دیگری را برای اجرا از بین آنهایی که آماده هستند انتخاب می کند و کنترل را به آن فرآیند واگذار‬
‫می کند‪ .‬دلیل اینکه این یک وضعیت دلخواه و در واقع آشفته نیست این است که در طول زمان بحرانی‪ ،‬کدی که در فرآیند‬
‫کاربر اجرا می شود‪ ،‬کد سیستم عامل مشترک است و نه کد کاربر‪ .‬به دلیل مفهوم حالت کاربر و حالت هسته‪ ،‬کاربر نمی تواند‬
‫روال های سیستم عامل را دستکاری یا تداخل کند‪ ،‬حتی اگر آنها در محیط فرآیند کاربر اجرا شوند‪ .‬این به ما یادآوری می کند‬
‫که بین مفاهیم فرآیند و برنامه تمایز وجود دارد و رابطه بین این دو یک به یک نیست‪.‬‬

‫در یک فرآیند‪ ،‬هم یک برنامه کاربر و هم برنامه های سیستم عامل ممکن است اجرا شوند و برنامه های سیستم عاملی که در‬
‫فرآیندهای مختلف کاربر اجرا می شوند یکسان هستند‪.‬‬

‫سیستم عامل مبتنی بر فرآیند‬

‫جایگزین دیگر‪ ،‬که در شکل ‪ c3.15‬نشان داده شده است‪ ،‬پیاده سازی سیستم عامل به عنوان مجموعه ای از فرآیندهای سیستم‬
‫است‪ .‬مانند سایر گزینه ها‪ ،‬نرم افزاری که بخشی از هسته است در حالت هسته اجرا می شود‪ .‬با این حال‪ ،‬در این مورد‪ ،‬توابع‬

‫‪179‬‬
‫سیستم عامل های داخلی و اصول طراحی‪180.........................................................................................................................‬‬

‫اصلی هسته به عنوان فرآیندهای جداگانه سازماندهی می شوند‪ .‬مجدداً‪ ،‬ممکن است مقدار کمی کد تغییر فرآیند وجود داشته‬
‫باشد که خارج از هر فرآیندی اجرا شود‪.‬‬

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

‫به عنوان مثال‪ ،‬قبالً به یک برنامه مانیتور اشاره کردیم که سطح استفاده از منابع مختلف پردازنده‪ ،‬حافظه‪ ،‬کانال ها و میزان‬
‫پیشرفت فرآیندهای کاربر را در سیستم ثبت می کند‪ .‬از آنجایی که این برنامه سرویس خاصی را برای هیچ فرآیند فعالی ارائه‬
‫نمی دهد‪ ،‬فقط می تواند توسط سیستم عامل فراخوانی شود‪ .‬به عنوان یک فرآیند‪ ،‬تابع می تواند در یک سطح اولویت اختصاص‬
‫داده شده اجرا شود و با سایر فرآیندهای تحت کنترل توزیع کننده در هم آمیخته شود‪ .‬در نهایت‪ ،‬پیادهسازی سیستمعامل‬
‫بهعنوان مجموعهای از فرآیندها در محیط چند پردازندهای یا چند رایانهای مفید است‪ ،‬که در آن میتوان برخی از خدمات‬
‫سیستم عامل را به پردازندههای اختصاصی ارسال کرد و عملکرد را بهبود بخشید‪.‬‬

‫‪ UNIX SVR4 3.6‬مدیریت فرآیند‬

‫‪ UNIX System V‬از یک تسهیالت فرآیندی ساده اما قدرتمند استفاده می کند که برای کاربر بسیار قابل مشاهده است‪.‬‬
‫یونیکس از مدل شکل ‪ b3.15‬پیروی می کند که در آن بیشتر سیستم عامل در محیط یک فرآیند کاربر اجرا می شود‪ .‬یونیکس‬
‫از دو دسته فرآیند استفاده می کند‪ :‬فرآیندهای سیستمی و فرآیندهای کاربر‪ .‬فرآیندهای سیستم در حالت هسته اجرا می شوند‬
‫و کدهای سیستم عامل را برای انجام وظایف اداری و خانه داری‪ ،‬مانند تخصیص حافظه و تعویض فرآیند‪ ،‬اجرا می کنند‪.‬‬
‫فرآیندهای کاربر در حالت کاربر برای اجرای برنامهها و ابزارهای کاربر و در حالت هسته برای اجرای دستورالعملهایی که متعلق‬
‫به هسته هستند عمل میکنند‪ .‬یک فرآیند کاربر با صدور یک فراخوانی سیستمی‪ ،‬زمانی که یک استثنا عیب ایجاد می شود‪ ،‬یا‬
‫زمانی که یک وقفه رخ می دهد‪ ،‬وارد حالت هسته می شود‪.‬‬

‫‪ States‬فرآیند‬

‫در مجموع نه حالت فرآیند توسط سیستم عامل یونیکس ‪ SVR4‬شناسایی شده است‪ .‬اینها در جدول ‪ 3.9‬فهرست شده اند و‬
‫یک نمودار انتقال حالت در شکل ‪ 3.17‬نشان داده شده است بر اساس شکل ‪ .BACH86‬این شکل مشابه شکل ‪ b3.9‬است که‬
‫دو حالت خواب یونیکس مربوط به دو حالت مسدود شده است‪ .‬تفاوت ها به شرح زیر است‪:‬‬

‫‪ -‬یونیکس از دو حالت در حال اجرا استفاده می کند تا نشان دهد که آیا فرآیند در حالت کاربر یا حالت هسته اجرا می شود‪.‬‬

‫‪180‬‬
‫سیستم عامل های داخلی و اصول طراحی‪181.........................................................................................................................‬‬

‫‪ -‬بین دو حالت تمایز قائل شده است‪ :‬آماده اجرا‪ ،‬در حافظه و پیشگیری‪ .‬اینها اساساً همان حالت هستند‪ ،‬همانطور که با خط‬
‫چین که به آنها می پیوندد نشان داده می شود‪ .‬این تمایز برای تأکید بر روشی است که در آن حالت پیش دستی وارد می شود‪.‬‬
‫هنگامی که یک فرآیند در حالت هسته اجرا می شود در نتیجه یک تماس سرپرست‪ ،‬وقفه ساعت یا وقفه ‪ ،I/O‬زمانی فرا می‬
‫رسد که هسته کار خود را کامل کرده و آماده است تا کنترل را به برنامه کاربر بازگرداند‪ .‬در این مرحله‪ ،‬هسته ممکن است‬
‫تصمیم بگیرد که فرآیند فعلی را به نفع فرآیندی که آماده و دارای اولویت باالتر است‪ ،‬پیشی بگیرد‪ .‬در آن صورت‪ ،‬فرآیند کنونی‬
‫به حالت پیش فرض حرکت می کند‪ .‬با این حال‪ ،‬برای اهداف ارسال‪ ،‬آن فرآیندها در حالت ‪ Preempted‬و آنهایی که در حالت‬
‫آماده برای اجرا‪ ،‬در حافظه هستند یک صف تشکیل می دهند‪.‬‬

‫جدول ‪ 3.9‬حاالت فرآیند یونیکس‬

‫کاربر در حال اجرا‬ ‫اجرا در حالت کاربر‬


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

‫‪181‬‬
‫سیستم عامل های داخلی و اصول طراحی‪182.........................................................................................................................‬‬

‫شکل ‪ 3.17‬نمودار انتقال وضعیت فرآیند یونیکس‬

‫‪ Preemption‬فقط زمانی اتفاق می افتد که یک فرآیند در حال انتقال از حالت هسته به حالت کاربر باشد‪ .‬در حالی که یک‬
‫فرآیند در حالت هسته در حال اجرا است‪ ،‬ممکن است از قبل استفاده نشود‪ .‬این باعث می شود یونیکس برای پردازش بالدرنگ‬
‫نامناسب باشد‪ .‬فصل ‪ 10‬الزامات پردازش بالدرنگ را مورد بحث قرار می دهد‪.‬‬

‫دو فرآیند در یونیکس منحصر به فرد هستند‪ .‬فرآیند ‪ 0‬یک فرآیند خاص است که هنگام بوت شدن سیستم ایجاد می شود‪ .‬در‬
‫واقع‪ ،‬به عنوان یک ساختار داده بارگذاری شده در زمان بوت از پیش تعریف شده است‪ .‬این فرآیند مبادله است‪ .‬عالوه بر این‪،‬‬
‫فرآیند ‪ 0‬فرآیند ‪ 1‬را ایجاد می کند که به آن فرآیند اولیه می گویند‪ .‬تمام فرآیندهای دیگر در سیستم دارای فرآیند ‪ 1‬به عنوان‬
‫جد هستند‪ .‬هنگامی که یک کاربر تعاملی جدید به سیستم وارد می شود‪ ،‬این فرآیند ‪ 1‬است که یک فرآیند کاربر را برای آن‬
‫کاربر ایجاد می کند‪ .‬متعاقباً‪ ،‬فرآیند کاربر میتواند فرآیندهای فرزند را در یک درخت انشعاب ایجاد کند‪ ،‬به طوری که هر برنامه‬
‫خاص میتواند شامل تعدادی فرآیند مرتبط باشد‪.‬‬

‫شرح فرایند‬

‫یک فرآیند در یونیکس مجموعه نسبتاً پیچیده ای از ساختارهای داده است که تمام اطالعات الزم برای مدیریت و ارسال‬
‫فرآیندها را در اختیار سیستم عامل قرار می دهد‪ .‬جدول ‪ 3.10‬عناصر تصویر فرآیند را خالصه می کند که در سه بخش‬
‫سازماندهی شده اند‪ :‬زمینه در سطح کاربر‪ ،‬زمینه ثبت و زمینه در سطح سیستم‪.‬‬

‫زمینه سطح کاربر شامل عناصر اساسی برنامه کاربر است و می تواند مستقیماً از یک فایل شی اجرا شده تولید شود‪ .‬برنامه کاربر‬
‫به قسمت های متن و داده تفکیک شده است‪ .‬ناحیه متن فقط خواندنی است و برای نگهداری دستورالعمل های برنامه در نظر‬

‫‪182‬‬
‫سیستم عامل های داخلی و اصول طراحی‪183.........................................................................................................................‬‬

‫گرفته شده است‪ .‬در حالی که فرآیند در حال اجرا است‪ ،‬پردازنده از ناحیه پشته کاربر برای فراخوانی ها و برگرداندن رویه و‬
‫ارسال پارامتر استفاده می کند‪ .‬ناحیه حافظه مشترک یک ناحیه داده ای است که با سایر فرآیندها به اشتراک گذاشته می شود‪.‬‬

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

‫زمینه در سطح سیستم حاوی اطالعات باقی مانده ای است که سیستم عامل برای مدیریت فرآیند به آن نیاز دارد‪ .‬این شامل یک‬
‫بخش استاتیک است که اندازه آن ثابت است و در طول عمر خود با یک فرآیند باقی می ماند و یک بخش پویا که اندازه آن در‬
‫طول عمر فرآیند متفاوت است‪ .‬یکی از عناصر بخش استاتیک‪ ،‬ورودی جدول فرآیند است‪.‬‬

‫این در واقع بخشی از جدول فرآیند است که توسط سیستم عامل نگهداری می شود‪ ،‬با یک ورودی در هر فرآیند‪ .‬ورودی جدول‬
‫فرآیند حاوی اطالعات کنترل فرآیند است که همیشه در دسترس هسته است‪ .‬از این رو‪ ،‬در یک سیستم حافظه مجازی‪ ،‬تمام‬
‫ورودی های جدول فرآیند در حافظه اصلی نگهداری می شوند‪ .‬جدول ‪ 3.11‬محتویات ورودی جدول فرآیند را فهرست می کند‪.‬‬
‫ناحیه کاربر‪ ،‬یا ناحیه ‪ ،U‬حاوی اطالعات کنترل فرآیند اضافی است که در هنگام اجرای هسته در چارچوب این فرآیند‪ ،‬مورد نیاز‬
‫است‪ .‬همچنین هنگام پردازش صفحهبندی به و از حافظه استفاده میشود‪ .‬جدول ‪ 3.12‬محتویات این جدول را نشان می دهد‪.‬‬

‫جدول ‪ 3.10‬تصویر فرآیند یونیکس‬

‫زمینه سطح کاربر‬


‫متن‬ ‫دستورالعمل های ماشین اجرایی‬
‫پردازش‬ ‫برنامه داده های قابل دسترسی‬
‫پردازش‬ ‫توسط برنامه این فرآیند‬
‫داده‬ ‫شامل آرگومان ها‪ ،‬متغیرهای محلی‬
‫پشته‬ ‫و نشانگرهایی برای عملکردهایی‬
‫کاربر‬ ‫است که در حالت کاربر اجرا می‬
‫حافظه مشترک‬ ‫شوند‬
‫حافظه مشترک با سایر فرآیندها که برای ارتباطات بین فرآیندی‬
‫استفاده می شود‬
‫زمینه ثبت نام‬

‫‪183‬‬
‫سیستم عامل های داخلی و اصول طراحی‪184.........................................................................................................................‬‬

‫شمارنده برنامه‬ ‫آدرس دستور بعدی که باید اجرا شود‪ .‬ممکن است در فضای هسته یا‬
‫حافظه کاربر این فرآیند باشد‬
‫ثبت وضعیت‬ ‫شامل وضعیت سخت افزار در زمان ‪ preemption.‬محتوا و قالب به‬
‫پردازنده‬ ‫سخت افزار بستگی دارد‬
‫نشانگر پشته‬ ‫به باالی هسته یا پشته کاربر‪ ،‬بسته به حالت کار در آن زمان یا‬
‫پیشپرداخت‪ ،‬اشاره میکند‪.‬‬
‫ثبت های‬ ‫وابسته به سخت افزار‬
‫همه منظوره‬
‫زمینه سطح سیستم‬
‫ورود جدول‬ ‫وضعیت یک فرآیند را تعریف می کند‪ .‬این اطالعات همیشه در دسترس‬
‫فرآیند‬ ‫سیستم عامل است‬
‫ناحیه ‪ U‬کاربر‪.‬‬ ‫اطالعات کنترل فرآیند که فقط در چارچوب فرآیند نیاز به دسترسی‬
‫دارند‬
‫جدول منطقه‬ ‫نگاشت از آدرس های مجازی به فیزیکی را تعریف می کند‪ .‬همچنین‬
‫فرآیند‬ ‫حاوی یک زمینه مجوز است که نوع دسترسی مجاز به فرآیند را‬
‫نشان می دهد‪ :‬فقط خواندنی‪ ،‬خواندنی نوشتنی یا خواندنی‪-‬اجرای‬
‫پشته هسته‬ ‫شامل قاب پشته ای از رویه های کرنل است که فرآیند در حالت هسته‬
‫اجرا می شود‬

‫‪184‬‬
‫سیستم عامل های داخلی و اصول طراحی‪185.........................................................................................................................‬‬

‫جدول ‪ 3.11‬ورودی جدول فرآیند یونیکس‬

‫وضعیت‬ ‫وضعیت فعلی فرآیند‬


‫فرآیند‬
‫اشاره گرها‬ ‫به ناحیه ‪ U‬و ناحیه حافظه پردازش متن‪ ،‬داده‪ ،‬پشته‪.‬‬
‫اندازه فرآیند‬ ‫سیستم عامل را قادر میسازد تا بداند چه مقدار فضا برای تخصیص فرآیند‬
‫دارد‪.‬‬
‫شناسه‬ ‫شناسه کاربر واقعی‪ ،‬کاربری را که مسئولیت فرآیند در حال اجرا را بر عهده‬
‫های‬ ‫دارد‪ ،‬شناسایی می کند‪ .‬شناسه کاربر موثر ممکن است توسط یک فرآیند‬
‫کاربر‬ ‫برای به دست آوردن امتیازات موقت مرتبط با یک برنامه خاص استفاده شود‪.‬‬
‫در حالی که آن برنامه به عنوان بخشی از فرآیند اجرا می شود‪ ،‬فرآیند با‬
‫شناسه کاربر موثر عمل می کند‪.‬‬
‫شناسه های‬ ‫شناسه این فرآیند؛ شناسه فرآیند والد‪ .‬اینها زمانی تنظیم می شوند که‬
‫فرآیند‬ ‫فرآیند در طول فراخوانی سیستم ‪ fork‬وارد حالت ایجاد شده شود‪.‬‬
‫توصیف‬ ‫زمانی معتبر است که یک فرآیند در حالت خواب باشد‪ .‬هنگامی که رویداد‬
‫گر‬ ‫رخ می دهد‪ ،‬فرآیند به حالت آماده برای اجرا منتقل می شود‪.‬‬
‫رویداد‬
‫اولویت‬ ‫برای برنامه ریزی فرآیند استفاده می شود‪.‬‬
‫عالمت‬ ‫سیگنال های ارسال شده به یک فرآیند را برمی شمارد اما هنوز مدیریت نشده‬
‫است‪.‬‬
‫تایمرها‬ ‫شامل زمان اجرای فرآیند‪ ،‬استفاده از منابع هسته و تایمر تنظیم شده‬
‫توسط کاربر برای ارسال سیگنال هشدار به یک فرآیند است‪.‬‬
‫‪P_link‬‬ ‫به پیوند بعدی در صف آماده اشاره کنید در صورتی که فرآیند آماده اجرا باشد‬
‫معتبر است‪.‬‬
‫وضعی‬ ‫نشان می دهد که آیا تصویر پردازش در حافظه اصلی است یا تعویض شده‬
‫ت‬ ‫است‪ .‬اگر در حافظه باشد‪ ،‬این زمینه همچنین نشان می دهد که آیا‬
‫حافظه‬ ‫ممکن است تعویض شود یا به طور موقت در حافظه اصلی قفل شده باشد‪.‬‬

‫‪185‬‬
‫سیستم عامل های داخلی و اصول طراحی‪186.........................................................................................................................‬‬

‫با یک فرآیند در طول عمر خود‪ ،‬و یک بخش پویا‪ ،‬که اندازه آن در طول عمر فرآیند متفاوت است‪ ،‬باقی می ماند‪ .‬یکی از عناصر‬
‫بخش استاتیک‪ ،‬ورودی جدول فرآیند است‪ .‬این در واقع بخشی از جدول فرآیند است که توسط سیستم عامل نگهداری می شود‪،‬‬
‫با یک ورودی در هر فرآیند‪ .‬ورودی جدول فرآیند حاوی اطالعات کنترل فرآیند است که همیشه در دسترس هسته است‪ .‬از این‬
‫رو‪ ،‬در یک سیستم حافظه مجازی‪ ،‬تمام ورودی های جدول فرآیند در حافظه اصلی نگهداری می شوند‪ .‬جدول ‪ 3.11‬محتویات‬
‫ورودی جدول فرآیند را فهرست می کند‪.‬‬

‫ناحیه کاربر‪ ،‬یا ناحیه ‪ ،U‬حاوی اطالعات کنترل فرآیند اضافی است که در هنگام اجرای هسته در چارچوب این فرآیند‪ ،‬مورد نیاز‬
‫است‪ .‬همچنین هنگام پردازش صفحهبندی به و از حافظه استفاده میشود‪ .‬جدول ‪ 3.12‬محتویات این جدول را نشان می دهد‪.‬‬

‫تمایز بین ورودی جدول فرآیند و ناحیه ‪ U‬نشان دهنده این واقعیت است که هسته یونیکس همیشه در چارچوب برخی از‬
‫فرآیندها اجرا می شود‪ .‬در بیشتر مواقع‪ ،‬هسته با نگرانی های آن فرآیند سروکار دارد‪ .‬با این حال‪ ،‬در برخی مواقع‪ ،‬مانند زمانی‬
‫که هسته در حال اجرای یک الگوریتم زمانبندی مقدماتی برای ارسال فرآیند دیگری است‪ ،‬نیاز به دسترسی به اطالعات مربوط‬
‫به سایر فرآیندها دارد‪ .‬اطالعات موجود در جدول فرآیند زمانی قابل دسترسی است که فرآیند داده شده‪ ،‬فرآیند فعلی نباشد‪.‬‬

‫سومین بخش استاتیک زمینه سطح سیستم‪ ،‬جدول ناحیه هر فرآیند است که توسط سیستم مدیریت حافظه استفاده می شود‪.‬‬
‫در نهایت‪ ،‬پشته هسته بخشی پویا از زمینه سطح سیستم است‪ .‬این پشته زمانی استفاده می شود که فرآیند در حالت هسته اجرا‬
‫می شود و حاوی اطالعاتی است که باید ذخیره و بازیابی شوند زیرا فراخوانی ها و وقفه های رویه رخ می دهد‪.‬‬

‫‪186‬‬
‫سیستم عامل های داخلی و اصول طراحی‪187.........................................................................................................................‬‬

‫جدول ‪UNIX U Area 3.12‬‬

‫نشانگر جدول‬ ‫ورودی مربوط به ناحیه ‪ U‬را نشان می دهد‬


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

‫‪187‬‬
‫سیستم عامل های داخلی و اصول طراحی‪188.........................................................................................................................‬‬

‫کنترل فرایند‬

‫ایجاد فرآیند در یونیکس با استفاده از فراخوانی سیستم هسته‪ fork ،‬انجام می شود‪ .‬هنگامی که یک فرآیند یک درخواست‬
‫‪ fork‬صادر می کند‪ ،‬سیستم عامل عملکردهای زیر را انجام می دهد ‪:BACH86‬‬

‫‪ .1‬یک شکاف در جدول فرآیند برای فرآیند جدید اختصاص می دهد‪.‬‬

‫‪ .2‬یک شناسه فرآیند منحصر به فرد را به پردازش فرزند اختصاص می دهد‪.‬‬

‫‪ .3‬یک کپی از تصویر فرآیند والد ایجاد می کند‪ ،‬به استثنای هر حافظه مشترک‪.‬‬

‫‪ .4‬شمارشگرها را برای هر فایلی که متعلق به والدین است افزایش میدهد تا نشان دهد که یک فرآیند اضافی اکنون نیز مالک‬
‫آن فایلها است‪.‬‬

‫‪ .5‬پردازش فرزند را به حالت ‪ Ready to Run‬اختصاص می دهد‪.‬‬

‫‪ .6‬شماره شناسه فرزند را به فرآیند والد‪ ،‬و مقدار ‪ 0‬را به فرآیند فرزند برمی گرداند‪.‬‬

‫همه این کارها در حالت هسته در فرآیند والد انجام می شود‪ .‬هنگامی که هسته این توابع را تکمیل کرد‪ ،‬می تواند یکی از‬
‫کارهای زیر را به عنوان بخشی از روال توزیع کننده انجام دهد‪:‬‬

‫‪ -‬در فرآیند والدین بمانید‪ .‬کنترل در نقطه تماس ‪ fork‬والد به حالت کاربر برمی گردد‪.‬‬

‫‪ -‬انتقال کنترل به فرآیند فرزند‪ .‬پردازش فرزند در همان نقطه ای از کد به عنوان والد اجرا می شود‪ ،‬یعنی در بازگشت از‬
‫فراخوانی ‪. fork‬‬

‫‪ -‬انتقال کنترل به فرآیند دیگری‪ .‬والدین و فرزند هر دو در حالت آماده برای اجرا باقی می مانند‪.‬‬

‫شاید تجسم این روش ایجاد فرآیند دشوار باشد زیرا هم والد و هم فرزند در حال اجرای کد یکسانی هستند‪ .‬تفاوت در این است‪:‬‬
‫هنگامی که بازگشت از ‪ fork‬اتفاق می افتد‪ ،‬پارامتر بازگشت تست می شود‪ .‬اگر مقدار صفر باشد‪ ،‬این فرآیند فرزند است و برای‬
‫ادامه اجرا میتوان یک شاخه را برای برنامه کاربر مناسب اجرا کرد‪ .‬اگر مقدار غیر صفر باشد‪ ،‬این فرآیند والد است و خط اصلی‬
‫اجرا می تواند ادامه یابد‪.‬‬

‫‪188‬‬
‫سیستم عامل های داخلی و اصول طراحی‪189.........................................................................................................................‬‬

‫‪ 3.7‬خالصه‬

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

‫سیستم عامل برای انجام عملکردهای مدیریت فرآیند خود‪ ،‬شرحی از هر فرآیند یا تصویر فرآیند را حفظ می کند که شامل‬
‫فضای آدرسی است که فرآیند در آن اجرا می شود و یک بلوک کنترل فرآیند‪ .‬دومی شامل تمام اطالعاتی است که سیستم عامل‬
‫برای مدیریت فرآیند مورد نیاز است‪ ،‬از جمله وضعیت فعلی‪ ،‬منابع تخصیص یافته به آن‪ ،‬اولویت و سایر داده های مرتبط‪.‬‬

‫در طول عمر خود‪ ،‬یک فرآیند در میان تعدادی از ایالت ها حرکت می کند‪ .‬مهمترین آنها ‪ Running ،Ready‬و ‪Blocked‬‬
‫هستند‪ .‬یک فرآیند آماده فرآیندی است که در حال حاضر اجرا نمی شود اما به محض اینکه سیستم عامل آن را ارسال کرد‬
‫آماده اجرا است‪ .‬فرآیند در حال اجرا‪ ،‬فرآیندی است که در حال حاضر توسط پردازنده در حال اجرا است‪ .‬در یک سیستم چند‬
‫پردازنده‪ ،‬بیش از یک فرآیند می تواند در این حالت باشد‪ .‬یک فرآیند مسدود شده منتظر تکمیل برخی رویدادها است‪ ،‬مانند‬
‫عملیات ‪.I/O‬‬

‫یک فرآیند در حال اجرا یا توسط یک وقفه‪ ،‬که رویدادی است که در خارج از فرآیند رخ می دهد و توسط پردازنده شناسایی می‬
‫شود‪ ،‬یا با اجرای یک فراخوانی ناظر به سیستم عامل قطع می شود‪ .‬در هر صورت‪ ،‬پردازنده یک سوئیچ حالت را انجام می دهد و‬
‫کنترل را به روال سیستم عامل منتقل می کند‪ .‬سیستم عامل پس از اتمام کار الزم‪ ،‬ممکن است روند قطع شده را از سر بگیرد‬
‫یا به فرآیند دیگری تغییر مکان دهد‪.‬‬

‫‪ 3.8‬خواندن و انیمیشن های توصیه شده‬

‫توضیحات خوبی از مدیریت فرآیند یونیکس در ‪ 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.9‬اصطالحات کلیدی‪ ،‬سؤاالت و مشکالت را مرور کنید‬

‫شرایط کلیدی‬

‫حالت مسدود شده‬ ‫حالت ممتاز‬ ‫حالت تعلیق‬

‫فرآیند کودک‬ ‫روند‬ ‫مبادله کردن‬

‫حالت خروج‬ ‫بلوک کنترل فرآیند‬ ‫حالت سیستم‬

‫قطع کردن‬ ‫پردازش تصویر‬ ‫وظیفه‬

‫حالت هسته‬ ‫سوئیچ فرآیند‬ ‫پی گیری‬

‫سوئیچ حالت‬ ‫کلمه وضعیت برنامه‬ ‫تله‬

‫دولت جدید‬ ‫حالت آماده‬ ‫حالت کاربر‬

‫فرآیند والدین‬ ‫درخواست کتبی‬

‫پیشدستی کردن‬ ‫حالت در حال اجرا‬

‫بررسی سواالت‬

‫‪ 3.1‬ردیابی دستورالعمل چیست؟‬

‫‪ 3.2‬چه رویدادهای مشترک منجر به ایجاد یک فرآیند می شود؟‬

‫‪ 3.3‬برای مدل پردازش شکل ‪ ،3.6‬به طور خالصه هر حالت را تعریف کنید‪.‬‬
‫‪190‬‬
‫سیستم عامل های داخلی و اصول طراحی‪191.........................................................................................................................‬‬

‫‪ 3.4‬منظور از پیشی گرفتن فرآیند چیست؟‬

‫‪ 3.5‬مبادله چیست و هدف آن چیست؟‬

‫‪ 3.6‬چرا شکل ‪ b3.9‬دو حالت مسدود دارد؟‬

‫‪ 3.7‬چهار ویژگی یک فرآیند معلق را فهرست کنید‪.‬‬

‫‪ 3.8‬سیستم عامل برای چه نوع نهادهایی جداول اطالعات را برای اهداف مدیریتی نگهداری می کند؟‬

‫‪ 3.9‬سه دسته کلی از اطالعات را در بلوک کنترل فرآیند فهرست کنید‪.‬‬

‫‪ 3.10‬چرا دو حالت کاربر و هسته مورد نیاز است؟‬

‫‪ 3.11‬مراحل انجام شده توسط سیستم عامل برای ایجاد یک فرآیند جدید چیست؟‬

‫‪ 3.12‬تفاوت بین وقفه و تله چیست؟‬

‫‪ 3.13‬سه مثال از وقفه بیاورید‪.‬‬

‫‪ 3.14‬تفاوت بین سوئیچ حالت و سوئیچ فرآیند چیست؟‬

‫چالش ها و مسائل‬

‫‪ 3.1‬جدول انتقال حالت زیر یک مدل ساده شده از مدیریت فرآیند است‪ ،‬با برچسبهایی که انتقال بین حالتهای آماده‪ ،‬اجرا‪،‬‬
‫مسدود شده و غیر ساکن را نشان میدهد‪.‬‬

‫‪REA‬‬ ‫‪RU‬‬ ‫‪BLOC‬‬ ‫‪NONRESI‬‬


‫‪DY‬‬ ‫‪N‬‬ ‫‪KED‬‬ ‫‪DENT‬‬
‫‪READY‬‬ ‫–‬ ‫‪1‬‬ ‫–‬ ‫‪5‬‬
‫‪RUN‬‬ ‫‪2‬‬ ‫–‬ ‫‪3‬‬ ‫–‬
‫‪BLOCK‬‬ ‫‪4‬‬ ‫–‬ ‫–‬ ‫‪6‬‬
‫‪ED‬‬

‫یک مثال از رویدادی که می تواند باعث هر یک از انتقال های فوق شود را بیاورید‪ .‬اگر کمک می کند نمودار بکشید‪.‬‬

‫‪ 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‬همیشه به فرآیند با باالترین اولویت ترجیح داده شود‪ ،‬حتی اگر‬
‫این به معنای تعویض در زمانی باشد که تعویض ضروری نیست‪ .‬یک خط مشی میانی پیشنهاد کنید که سعی می کند نگرانی‬
‫های مربوط به اولویت و عملکرد را متعادل کند‪.‬‬

‫‪ 3.6‬جدول ‪ 3.13‬وضعیت های فرآیند سیستم عامل ‪ VAX/VMS‬را نشان می دهد‪.‬‬

‫آ‪ .‬آیا می توانید توجیهی برای وجود این همه حالت انتظار مجزا ارائه دهید؟‬

‫‪192‬‬
‫سیستم عامل های داخلی و اصول طراحی‪193.........................................................................................................................‬‬

‫ب چرا ‪ state‬های زیر نسخههای مقیم و تعویضشده ندارند‪ :‬انتظار خطای صفحه‪ ،‬انتظار صفحه تصادفی‪ ،‬انتظار رویداد معمول‪،‬‬
‫انتظار صفحه رایگان‪ ،‬و انتظار منبع؟ ج نمودار انتقال حالت را رسم کنید و عمل یا اتفاقی را که باعث هر انتقال می شود را نشان‬
‫دهید‪.‬‬

‫‪ 3.7‬سیستم عامل ‪ VAX/VMS‬از چهار حالت دسترسی پردازنده برای تسهیل حفاظت و اشتراک منابع سیستم در بین‬
‫فرآیندها استفاده می کند‪ .‬حالت دسترسی تعیین می کند‬

‫‪ -‬امتیازات اجرای دستورالعمل‪ :‬چه دستوراتی را پردازنده ممکن است اجرا کند‬

‫‪ -‬امتیازات دسترسی به حافظه‪ :‬دستورالعمل فعلی ممکن است به کدام مکان ها در حافظه مجازی دسترسی داشته باشد‬

‫جدول ‪ 3.13‬وضعیت های فرآیند ‪VAX/VMS‬‬

‫وضعیت فرآیند‬ ‫شرایط فرآیند‬


‫در حال اجرا‬ ‫‪.‬فرآیند در حال اجرا‬
‫قابل محاسبه ساکن‬ ‫‪.‬آماده و ساکن در حافظه اصلی‬
‫قابل محاسبه مبادله‬ ‫‪.‬آماده است‪ ،‬اما از حافظه اصلی خارج شده است‬
‫خطای صفحه صبر کنید‬ ‫به صفحه ای که در حافظه اصلی نیست ‪Process‬‬
‫ارجاع داده است و باید منتظر بماند تا صفحه در آن‬
‫‪.‬خوانده شود‬
‫صفحه تصادم شد صبر کنید‬ ‫به یک صفحه اشتراکگذاری شده اشاره ‪Process‬‬
‫کرده است که علت انتظار خطای صفحه موجود در‬
‫فرآیند دیگری است‪ ،‬یا صفحه خصوصی که در حال‬
‫‪.‬خواندن یا نوشتن است‬
‫انتظار رویداد مشترک‬ ‫در حال انتظار برای پرچم رویداد مشترک پرچم های‬
‫رویداد مکانیسم های سیگنال دهی بین پردازشی تک‬
‫‪.‬بیتی هستند‬
‫منتظر صفحه رایگان‬ ‫انتظار برای افزودن یک صفحه رایگان در حافظه اصلی به‬
‫مجموعه صفحات در حافظه اصلی اختصاص داده شده به‬
‫‪.‬این فرآیند مجموعه کاری فرآیند‬

‫‪193‬‬
‫سیستم عامل های داخلی و اصول طراحی‪194.........................................................................................................................‬‬

‫ساکن ‪Hibernate Wait‬‬ ‫‪.‬فرآیند خود را در حالت انتظار قرار می دهد‬


‫معوض ‪Hibernate Wait‬‬ ‫‪.‬فرآیند خواب زمستانی از حافظه اصلی خارج می شود‬
‫شد‬
‫انتظار رویداد محلی ساکن‬ ‫پردازش در حافظه اصلی و انتظار برای پرچم رویداد محلی‬
‫‪ I/O.‬معموالً تکمیل‬
‫انتظار رویداد محلی مبادله‬ ‫فرآیند در انتظار رویداد محلی از حافظه اصلی خارج می‬
‫شد‬ ‫‪.‬شود‬
‫انتظار معلق ساکن‬ ‫‪.‬فرآیند توسط فرآیند دیگری در حالت انتظار قرار می گیرد‬
‫انتظار معلق معوض شد‬ ‫‪.‬فرآیند تعلیق شده از حافظه اصلی تعویض می شود‬
‫منتظر منابع‬ ‫‪.‬فرآیند انتظار برای منابع سیستم متفرقه‬

‫چهار حالت به شرح زیر است‪:‬‬

‫‪ : 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.18‬حالت های دسترسی ‪VAX/VMS‬‬

‫به وضوح توضیح دهید که مشکلی که در پاراگراف قبل به آن اشاره شد چیست‪.‬‬

‫‪ 3.9‬شکل ‪ b3.8‬نشان می دهد که یک فرآیند در یک زمان فقط می تواند در یک صف رویداد باشد‪.‬‬

‫آ‪ .‬آیا این امکان وجود دارد که بخواهید به یک فرآیند اجازه دهید در بیش از یک رویداد به طور همزمان منتظر بماند؟ مثالی‬
‫ارائه کنید‪.‬‬

‫ب در آن صورت‪ ،‬چگونه ساختار صف شکل را برای پشتیبانی از این ویژگی جدید تغییر می دهید؟‬

‫‪ 3.10‬در تعدادی از رایانه های اولیه‪ ،‬یک وقفه باعث شد که مقادیر ثبت در مکان های ثابت مرتبط با سیگنال وقفه داده شده‬
‫ذخیره شود‪ .‬در چه شرایطی این یک تکنیک عملی است؟ توضیح دهید که چرا به طور کلی ناخوشایند است‪.‬‬

‫‪ 3.11‬در بخش ‪ ،3.4‬بیان شد که یونیکس برای برنامههای بالدرنگ مناسب نیست زیرا ممکن است فرآیندی که در حالت هسته‬
‫اجرا میشود‪ ،‬از پیش استفاده نشود‪ .‬دارای جزئیات ‪ -‬بسیط‪.‬‬

‫‪ 3.12‬شما برنامه ‪ C‬زیر را اجرا کرده اید‪:‬‬

‫با فرض موفقیت ‪ ، fork‬خروجی های ممکن چیست؟‬

‫‪195‬‬
‫سیستم عامل های داخلی و اصول طراحی‪196.........................................................................................................................‬‬

‫فصل ‪4‬‬

‫رشته ها(نخ ها)‬

‫‪ 4.1‬فرآیندها و موضوعات‬

‫قابلیت موضوع چند رشته ای‬

‫‪ 4.2‬انواع رشته ها‬

‫موضوعات دیگر در سطح کاربر و سطح هسته‬

‫‪ Multicore 4.3‬و ‪Multithreading‬‬

‫عملکرد نرم افزار در برنامه کاربردی چند هسته ای مثال‪ :‬نرم افزار بازی ‪Valve‬‬

‫‪Windows 8 4.4‬مدیریت فرآیند و رشته‬

‫تغییرات در ویندوز ‪ 8‬فرآیند ویندوز‬

‫فرآیند و موضوع اشیاء چند رشته ای‬

‫وضعیت های موضوع‬

‫پشتیبانی از زیرسیستم های سیستم عامل‬

‫‪ 4.5‬سوالریس رشته و ‪ SMP‬مدیریت انگیزه معماری چند رشته ای‬

‫ساختار فرآیند اجرای رشته به صورت رشته قطع می شود‬

‫‪ 4.6‬مدیریت فرآیندها و موضوعات لینوکس‬

‫وظایف لینوکس موضوعات لینوکس فضای نام لینوکس‬

‫‪ 4.7‬مدیریت فرآیند و رشته اندروید‬

‫‪196‬‬
‫سیستم عامل های داخلی و اصول طراحی‪197.........................................................................................................................‬‬

‫فعالیت های برنامه های کاربردی اندروید‬

‫فرآیندها و موضوعات‬

‫‪Mac OS X Grand Central Dispatch 4.8‬‬

‫‪ 4.9‬خالصه‬

‫‪ 4.10‬مطالعه توصیه شده‬

‫‪ 4.11‬اصطالحات کلیدی‪ ،‬بررسی سواالت و مشکالت‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬تمایز بین فرآیند و رشته را درک کنید‪.‬‬

‫‪ -‬مسائل اساسی طراحی رشته ها را شرح دهید‪.‬‬

‫‪ -‬تفاوت بین رشته های سطح کاربر و رشته های سطح هسته را توضیح دهید‪.‬‬

‫‪ -‬تسهیالت مدیریت رشته ها را در ویندوز ‪ 7‬توضیح دهید‪.‬‬

‫‪ -‬تسهیالت مدیریت رشته را در سوالریس توضیح دهید‪.‬‬

‫‪ -‬تسهیالت مدیریت رشته در لینوکس را توضیح دهید‪.‬‬

‫این فصل به بررسی برخی از مفاهیم پیشرفته تر مربوط به مدیریت فرآیند می پردازد که در تعدادی از سیستم عامل های معاصر‬
‫یافت می شود‪ .‬ما نشان میدهیم که مفهوم فرآیند پیچیدهتر و ظریفتر از آنچه تاکنون ارائه شده است است و در واقع دو مفهوم‬
‫جداگانه و بالقوه مستقل را در بر میگیرد‪ :‬یکی مربوط به مالکیت منابع و دیگری مربوط به اجرا‪ .‬این تمایز منجر به توسعه‬
‫ساختاری به نام ‪ thread‬در بسیاری از سیستم عامل ها شده است‪.‬‬

‫‪197‬‬
‫سیستم عامل های داخلی و اصول طراحی‪198.........................................................................................................................‬‬

‫‪ 4.1‬فرآیندها و رشته ها‬

‫بحث تا کنون مفهوم فرآیند را به عنوان دو ویژگی ارائه کرده است‪:‬‬

‫‪ -‬مالکیت منبع‪ :‬یک فرآیند شامل یک فضای آدرس مجازی برای نگهداری تصویر فرآیند است‪ .‬از فصل ‪ 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‬است‪.‬‬

‫‪ .2‬زمان کمتری برای خاتمه دادن به یک ‪ Thread‬نسبت به یک فرآیند نیاز است‪.‬‬

‫‪ .3‬زمان کمتری برای جابجایی بین دو رشته در یک فرآیند نسبت به جابجایی بین فرآیندها نیاز است‪.‬‬

‫‪ Thread .4‬ها کارایی را در ارتباط بین برنامه های اجرایی مختلف افزایش می دهند‪ .‬در اکثر سیستم عامل ها‪ ،‬ارتباط بین‬
‫فرآیندهای مستقل نیازمند مداخله هسته برای ایجاد حفاظت و مکانیسم های مورد نیاز برای ارتباط است‪ .‬با این حال‪ ،‬از آنجا که‬
‫رشتههای درون یک فرآیند حافظه و فایلها را به اشتراک میگذارند‪ ،‬میتوانند بدون فراخوانی هسته با یکدیگر ارتباط برقرار‬
‫کنند‪.‬‬

‫بنابراین‪ ،‬اگر برنامه یا تابعی وجود داشته باشد که باید بهعنوان مجموعهای از واحدهای اجرایی مرتبط پیادهسازی شود‪ ،‬انجام آن‬
‫بهعنوان مجموعهای از رشتهها به جای مجموعهای از فرآیندهای مجزا بسیار کارآمدتر است‪.‬‬

‫نمونهای از برنامهای که میتواند از رشتهها استفاده کند‪ ،‬سرور فایل است‪ .‬همانطور که هر درخواست فایل جدید وارد می شود‪،‬‬
‫یک رشته جدید می تواند برای برنامه مدیریت فایل ایجاد شود‪ .‬از آنجایی که یک سرور بسیاری از درخواستها را رسیدگی‬
‫میکند‪ ،‬بسیاری از رشتهها در مدت زمان کوتاهی ایجاد و از بین میروند‪ .‬اگر سرور روی یک کامپیوتر چند پردازنده ای اجرا‬
‫شود‪ ،‬چندین رشته در یک فرآیند می توانند به طور همزمان روی پردازنده های مختلف اجرا شوند‪ .‬عالوه بر این‪ ،‬از آنجایی که‬
‫فرآیندها یا رشتهها در یک سرور فایل باید دادههای فایل را به اشتراک بگذارند و بنابراین اقدامات خود را هماهنگ میکنند‪،‬‬
‫استفاده از رشتهها و حافظه مشترک سریعتر از پردازشها و ارسال پیام برای این هماهنگی است‪.‬‬

‫ساختار ‪ thread‬همچنین برای ساده کردن ساختار برنامه ای که به طور منطقی چندین عملکرد مختلف را انجام می دهد‪ ،‬روی‬
‫یک پردازنده مفید است‪.‬‬

‫‪200‬‬
‫سیستم عامل های داخلی و اصول طراحی‪201.........................................................................................................................‬‬

‫‪ LETW88‬چهار مثال از کاربرد ‪ thread‬ها در یک سیستم پردازش چند کاربره تک کاربره را ارائه می دهد‪:‬‬

‫‪ -‬کار پیش زمینه و پس زمینه‪ :‬به عنوان مثال‪ ،‬در یک برنامه صفحه گسترده‪ ،‬یک رشته می تواند منوها را نمایش دهد و ورودی‬
‫کاربر را بخواند‪ ،‬در حالی که رشته دیگر دستورات کاربر را اجرا می کند و صفحه گسترده را به روز می کند‪ .‬این ترتیب اغلب‬
‫سرعت درک شده برنامه را با اجازه دادن به برنامه برای درخواست دستور بعدی قبل از تکمیل دستور قبلی افزایش می دهد‪.‬‬

‫‪ -‬پردازش ناهمزمان‪ :‬عناصر ناهمزمان در برنامه را می توان به صورت رشته پیاده سازی کرد‪ .‬به عنوان مثال‪ ،‬به عنوان محافظت‬
‫در برابر قطع برق‪ ،‬می توان یک واژه پرداز را طراحی کرد تا بافر حافظه دسترسی تصادفی ‪ RAM‬خود را هر دقیقه یک بار روی‬
‫دیسک بنویسد‪ .‬میتوان رشتهای ایجاد کرد که تنها کار آن پشتیبانگیری دورهای است و مستقیماً با سیستمعامل زمانبندی‬
‫میشود‪ .‬نیازی به کد فانتزی در برنامه اصلی برای بررسی زمان یا هماهنگی ورودی و خروجی نیست‪.‬‬

‫‪ -‬سرعت اجرا‪ :‬یک فرآیند چند رشته ای می تواند یک دسته از داده ها را در حین خواندن دسته بعدی از یک دستگاه محاسبه‬
‫کند‪ .‬در یک سیستم چند پردازنده‪ ،‬چندین رشته از یک فرآیند ممکن است قادر به اجرای همزمان باشند‪ .‬بنابراین‪ ،‬حتی اگر یک‬
‫رشته ممکن است برای یک عملیات ‪ I/O‬برای خواندن در دسته ای از داده ها مسدود شود‪ ،‬رشته دیگری ممکن است در حال‬
‫اجرا باشد‪.‬‬

‫‪ -‬ساختار برنامه مدوالر‪ :‬برنامه هایی که شامل انواع فعالیت ها یا منابع و مقصدهای ورودی و خروجی متنوعی هستند ممکن‬
‫است طراحی و پیاده سازی با استفاده از رشته ها آسان تر باشد‪.‬‬

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

‫کارکرد رشته‬

‫مانند فرآیندها‪ ،‬رشته ها دارای حالت های اجرایی هستند و ممکن است با یکدیگر همگام شوند‪ .‬ما به نوبه خود به این دو جنبه‬
‫از عملکرد رشته نگاه می کنیم‪.‬‬

‫وضعیت های موضوع مانند فرآیندها‪ ،‬حالت های کلیدی برای یک رشته عبارتند از‪ :‬در حال اجرا‪ ،‬آماده و مسدود شده است‪ .‬به‬
‫طور کلی‪ ،‬ارتباط دادن حالت های تعلیق با رشته ها منطقی نیست زیرا چنین حالت هایی مفاهیمی در سطح فرآیند هستند‪.‬‬
‫‪201‬‬
‫سیستم عامل های داخلی و اصول طراحی‪202.........................................................................................................................‬‬

‫بهویژه‪ ،‬اگر فرآیندی مبادله شود‪ ،‬همه رشتههای آن لزوماً مبادله میشوند‪ ،‬زیرا همه آنها فضای آدرس فرآیند را به اشتراک‬
‫میگذارند‪.‬‬

‫چهار عملیات ‪ thread‬اساسی مرتبط با تغییر در وضعیت رشته وجود دارد ‪:ANDE04‬‬

‫‪ : Spawn -‬به طور معمول‪ ،‬زمانی که یک فرآیند جدید ایجاد می شود‪ ،‬یک رشته برای آن فرآیند نیز ایجاد می شود‪ .‬متعاقباً‪،‬‬
‫یک رشته در یک فرآیند ممکن است رشته دیگری را در همان فرآیند ایجاد کند و یک اشاره گر دستورالعمل و آرگومان هایی‬
‫برای رشته جدید ارائه کند‪ .‬موضوع جدید با زمینه ثبت نام و فضای پشته خود ارائه می شود و در صف آماده قرار می گیرد‪.‬‬

‫‪ : Block -‬زمانی که یک رشته باید منتظر یک رویداد باشد‪ ،‬آن را مسدود می کند ذخیره ثبت نام کاربر‪ ،‬شمارنده برنامه و‬
‫نشانگرهای پشته‪ .‬پردازنده ممکن است اکنون به اجرای یک رشته آماده دیگر در همان یا یک فرآیند دیگر روی بیاورد‪.‬‬

‫‪ : Unblock -‬هنگامی که رویدادی که یک رشته برای آن مسدود شده است رخ می دهد‪ ،‬رشته به صف آماده منتقل می شود‪.‬‬

‫‪ : Finish -‬هنگامی که یک رشته کامل می شود‪ ،‬زمینه ثبت نام و پشته های آن جدا می شوند‪.‬‬

‫یک فرآیند یک رشته‬ ‫یک فرآیند چند رشته‬

‫فرآیندهای چندگانه یک رشته در هر فرآیند‬ ‫فرآیندهای چندگانه‪ ،‬موضوعات‬


‫متعدد در هر فرآیند‬
‫ردیابی دستورالعمل‬

‫شکل ‪ 4.1‬رشته ها و فرآیندها‬

‫‪202‬‬
‫سیستم عامل های داخلی و اصول طراحی‪203.........................................................................................................................‬‬

‫مدل فرآیند چند‬


‫مدل فرآیند تک رشته ای‬ ‫رشته ای‬

‫بلوک کنترل‬
‫فرآیند‬

‫بلوک کنترل‬
‫فضای آدرس‬
‫فرآیند‬
‫کاربر‬

‫فضای‬
‫آدرس کاربر‬

‫شکل ‪ 4.2‬مدل های فرآیند تک رشته ای و چند رشته ای‬

‫زمان‬

‫الف ‪ RPC‬با استفاده از رشته تک‬

‫ب ‪ RPC‬با استفاده از یک رشته در هر سرور روی یک پردازنده)‬

‫مسدود شده است‪ ،‬منتظر پاسخ به ‪ RPC‬است‬

‫مسدود شده‪ ،‬منتظر پردازنده است که توسط ‪ Thread B‬استفاده می شود‬


‫درحال اجرا‬
‫شکل ‪ 4.3‬فراخوانی روش از راه دور ‪ RPC‬با استفاده از رشته ها‬

‫‪203‬‬
‫سیستم عامل های داخلی و اصول طراحی‪204.........................................................................................................................‬‬

‫زمان‬

‫درخواست تکمیل‬
‫کوانتوم زمانی منقضی‬
‫‪ I/O‬درخواست‬
‫شد‬ ‫می شود‬

‫کوانتوم زمانی‬
‫منقضی می شود‬

‫فرآیند ایجاد شد‬

‫شکل ‪ 4.4‬مثال چند رشته ای در یک پردازنده واحد‬

‫یک مسئله مهم این است که آیا مسدود شدن یک رشته منجر به مسدود شدن کل فرآیند می شود یا خیر‪ .‬به عبارت دیگر‪ ،‬اگر‬
‫یک ‪ thread‬در یک فرآیند مسدود شود‪ ،‬آیا این مانع از اجرای هر رشته دیگری در همان فرآیند می شود‪ ،‬حتی اگر آن‬
‫‪ Thread‬دیگر در حالت آماده باشد؟ واضح است که اگر رشته مسدود شده کل فرآیند را مسدود کند‪ ،‬بخشی از انعطافپذیری و‬
‫قدرت رشته ها از بین میرود‪.‬‬

‫ما متعاقباً در بحث خود در مورد رشتههای سطح کاربر در مقابل رشتههای سطح هسته به این موضوع باز میگردیم‪ ،‬اما در حال‬
‫حاضر اجازه دهید مزایای عملکرد رشتههایی را که کل فرآیند را مسدود نمیکنند‪ ،‬در نظر بگیریم‪ .‬شکل ‪ 4.3‬بر اساس یکی در‬
‫‪ KLEI96‬برنامه ای را نشان می دهد که دو فراخوانی روش از راه دور ‪ RPCs17‬را با دو میزبان مختلف برای به دست آوردن‬
‫یک نتیجه ترکیبی انجام می دهد‪ .‬در یک برنامه تک رشته ای‪ ،‬نتایج به ترتیب به دست می آیند‪ ،‬بنابراین برنامه باید به نوبت‬
‫منتظر پاسخ هر سرور باشد‪ .‬بازنویسی برنامه برای استفاده از یک رشته مجزا برای هر ‪ RPC‬منجر به افزایش سرعت قابل توجهی‬
‫می شود‪ .‬توجه داشته باشید که اگر این برنامه بر روی یک تک پردازنده کار می کند‪ ،‬درخواست ها باید به صورت متوالی تولید‬
‫شوند و نتایج به ترتیب پردازش شوند‪ .‬با این حال‪ ،‬برنامه به طور همزمان منتظر دو پاسخ است‪.‬‬

‫در یک تک پردازشگر‪ ،‬چندبرنامهنویسی امکان درهمآمیزی رشتههای متعدد در چندین فرآیند را فراهم میکند‪ .‬در مثال شکل‬
‫‪ ،4.4‬سه رشته در دو فرآیند روی پردازنده قرار گرفته اند‪ .‬اجرا از یک رشته به رشته دیگر منتقل می شود یا زمانی که رشته در‬
‫حال اجرا مسدود شده باشد یا زمانی که برش زمانی آن تمام شده باشد‪.‬‬

‫‪ RPC 17‬تکنیکی است که توسط آن دو برنامه‪ ،‬که ممکن است در ماشین های مختلف اجرا شوند‪ ،‬با استفاده از دستور فراخوانی‪/‬بازگشت رویه و معنایی تعامل دارند‪ .‬هر دو برنامه‬
‫فراخوانی و فراخوانی به گونه ای رفتار می کنند که انگار برنامه شریک روی یک دستگاه اجرا می شود ‪. RPC‬ها اغلب برای برنامه های کاربردی سرویس گیرنده‪/‬سرور استفاده می‬
‫شوند و در فصل ‪ 16‬مورد بحث قرار می گیرند‬
‫‪204‬‬
‫سیستم عامل های داخلی و اصول طراحی‪205.........................................................................................................................‬‬

‫همگام سازی ‪ thread‬همه رشته های یک فرآیند فضای آدرس و سایر منابع یکسان مانند فایل های باز را به اشتراک می‬
‫گذارند‪ .‬هر گونه تغییر یک منبع توسط یک رشته بر محیط رشته های دیگر در همان فرآیند تأثیر می گذارد‪ .‬بنابراین الزم است‬
‫فعالیتهای رشتههای مختلف را همگامسازی کنیم تا با یکدیگر تداخل نداشته باشند یا ساختار دادهای را خراب نکنند‪ .‬به عنوان‬
‫مثال‪ ،‬اگر دو رشته هر کدام سعی کنند یک عنصر را به یک لیست دارای پیوند دوگانه به طور همزمان اضافه کنند‪ ،‬ممکن است‬
‫یک عنصر از بین برود یا فهرست ممکن است بدشکل شود‪.‬‬

‫مسائل مطرح شده و تکنیک های مورد استفاده در همگام سازی رشته ها به طور کلی مانند همگام سازی فرآیندها است‪ .‬این‬
‫مسائل و تکنیک ها موضوع فصل های ‪ 5‬و ‪ 6‬می باشد‪.‬‬

‫‪ 4.2‬انواع رشته ها‬

‫رشته ها در سطح کاربر و سطح هسته‬

‫دو دسته کلی از اجرای رشته وجود دارد‪ :‬رشتههای سطح کاربر ‪ ULT‬و رشتههای سطح هسته ‪.KLT‬‬

‫‪ threads‬در سطح کاربر در یک مرکز ‪ ULT‬خالص‪ ،‬تمام کارهای مدیریت رشته توسط برنامه انجام می شود و هسته از وجود‬
‫رشته ها آگاه نیست‪ .‬شکل ‪ a4.5‬رویکرد ‪ ULT‬خالص را نشان می دهد‪ .‬هر برنامه کاربردی را می توان با استفاده از کتابخانه‬
‫رشته ها که مجموعه ای از روال ها برای مدیریت ‪ ULT‬است برنامه ریزی کرد تا چند رشته ای باشد‪ .‬کتابخانه ‪ threads‬شامل‬
‫کدهایی برای ایجاد و از بین بردن رشته ها‪ ،‬برای ارسال پیام ها و داده ها بین رشته ها‪ ،‬برای زمان بندی اجرای رشته‪ ،‬و برای‬
‫ذخیره و بازیابی زمینه های رشته است‪.‬‬

‫(الف) سطح کاربر خالص‬


‫(ب) در سطح هسته خالص‬ ‫ج) ترکیبی‬
‫موضوع در‬
‫موضوع در‬ ‫فرآیند‬
‫سطح کاربر‬
‫سطح هسته‬
‫شکل ‪ 4.5‬رشته های سطح کاربر و هسته‬

‫‪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‬مجموعه ای از توابع در سطح برنامه است که توسط همه برنامه ها به اشتراک گذاشته شده است‪.‬‬

‫دو نقطه ضعف متمایز ‪ ULT‬در مقایسه با ‪ KLT‬وجود دارد‪:‬‬

‫‪ .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.1‬تاخیرهای عملیات رشته و فرآیند ‪μs‬‬

‫عمل‬ ‫‪User-Level‬‬ ‫‪Kernel-Level‬‬ ‫فرآیندها‬


‫‪Threads‬‬ ‫‪Threads‬‬
‫‪fork‬نول‬ ‫‪34‬‬ ‫‪948‬‬ ‫‪11,300‬‬
‫سیگنال صبر‬ ‫‪37‬‬ ‫‪441‬‬ ‫‪1,840‬‬
‫کنید‬

‫شکل ‪ 4.6‬نمونه هایی از روابط بین حالت های موضوعی سطح کاربر و ‪ States‬فرآیند‬

‫رویکردهای ترکیبی برخی از سیستم عامل ها یک تسهیالت ترکیبی ‪ ULT/KLT‬را ارائه می دهند شکل ‪ .c4.5‬در یک سیستم‬
‫ترکیبی‪ ،‬ایجاد رشته به طور کامل در فضای کاربر انجام می شود‪ ،‬همانطور که بخش عمده ای از زمان بندی و همگام سازی‬
‫موضوعات در یک برنامه کاربردی است‪ ULT .‬های متعدد از یک برنامه کاربردی بر روی تعدادی کمتر یا مساوی از ‪ KLT‬ها‬
‫نگاشت می شوند‪ .‬برنامه نویس ممکن است تعداد ‪ KLT‬ها را برای یک برنامه کاربردی و پردازنده خاص تنظیم کند تا به‬
‫بهترین نتایج کلی دست یابد‪.‬‬

‫‪209‬‬
‫سیستم عامل های داخلی و اصول طراحی‪210.........................................................................................................................‬‬

‫در یک رویکرد ترکیبی‪ ،‬چندین رشته در یک برنامه کاربردی میتوانند به صورت موازی بر روی چندین پردازنده اجرا شوند و‬
‫یک فراخوانی سیستم مسدود کننده نیازی به مسدود کردن کل فرآیند ندارد‪ .‬اگر به درستی طراحی شود‪ ،‬این رویکرد باید‬
‫مزایای رویکردهای خالص ‪ ULT‬و ‪ KLT‬را ترکیب کند و در عین حال معایب را به حداقل برساند‪ .‬سوالریس نمونه خوبی از‬
‫یک سیستم عامل با استفاده از این رویکرد ترکیبی است‪ .‬نسخه فعلی سوالریس رابطه ‪ ULT/KLT‬را به یک به یک بودن‬
‫محدود می کند‪.‬‬

‫ترتیبات دیگر‬

‫همانطور که گفتیم‪ ،‬مفاهیم تخصیص منبع و واحد توزیع به طور سنتی در مفهوم واحد فرآیند ‪ -‬یعنی به عنوان یک رابطه ‪1 :1‬‬
‫بین رشته ها و فرآیندها تجسم می یابد‪ .‬اخیراً‪ ،‬عالقه زیادی به ارائه رشته های متعدد در یک فرآیند واحد‪ ،‬که یک رابطه چند به‬
‫یک است‪ ،‬وجود داشته است‪ .‬با این حال‪ ،‬همانطور که جدول ‪ 4.2‬نشان می دهد‪ ،‬دو ترکیب دیگر نیز بررسی شده اند‪ ،‬یعنی یک‬
‫رابطه چند به چند و یک رابطه یک به چند‪.‬‬

‫‪210‬‬
‫سیستم عامل های داخلی و اصول طراحی‪211.........................................................................................................................‬‬

‫جدول ‪ 4.2‬رابطه بین موضوعات و فرآیندها‬

‫موضوعات‪:‬‬ ‫توصیفات‬ ‫سیستم های نمونه‬


‫فرآیندها‬
‫‪1:1‬‬ ‫هر رشته از اجرا یک فرآیند منحصر به‬ ‫پیاده سازی‬
‫فرد با فضای آدرس و منابع خاص خود‬ ‫های سنتی‬
‫است‪.‬‬ ‫یونیکس‬
‫‪M:1‬‬ ‫یک فرآیند فضای آدرس و مالکیت منبع‬ ‫‪،Windows NT‬‬
‫پویا را تعریف می کند‪ .‬ممکن است‬ ‫‪،Linux ،Solaris‬‬
‫چندین رشته در آن فرآیند ایجاد و اجرا‬ ‫‪،OS/390 ،OS/2‬‬
‫شوند‪.‬‬ ‫‪MACH‬‬
‫‪1:M‬‬ ‫یک رشته ممکن است از یک محیط‬ ‫‪Ra‬ابرها‪ ،‬زمرد‬
‫فرآیند به محیط دیگر مهاجرت کند‪.‬‬
‫این اجازه می دهد تا یک رشته به‬
‫راحتی در بین سیستم های متمایز‬
‫جابجا شود‪.‬‬
‫‪M:N‬‬ ‫این ویژگی های موارد ‪ M:1‬و ‪:M 1‬را‬ ‫‪TRIX‬‬
‫ترکیب می کند‪.‬‬

‫رابطه چند به چند‬

‫ایده داشتن رابطه چند به چند بین رشته ها و فرآیندها در سیستم عامل آزمایشی ‪ 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‬است‪.‬‬

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

‫رویکرد ابرها روشی مؤثر برای عایقسازی کاربران و برنامهنویسان از جزئیات محیط توزیع شده ارائه میکند‪ .‬فعالیت کاربر ممکن‬
‫است به صورت یک رشته نمایش داده شود‪ ،‬و حرکت آن رشته در بین رایانهها ممکن است به دالیل مختلف مرتبط با سیستم‪،‬‬
‫مانند نیاز به دسترسی به یک منبع راه دور‪ ،‬و تعادل بار‪ ،‬توسط سیستم عامل دیکته شود‪.‬‬

‫‪ 4.3‬چند رشته ای و چند هسته ای‬

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

‫‪ 18‬جابجایی فرآیندها یا رشتهها در میان فضاهای آدرس یا مهاجرت رشتهها در ماشینهای مختلف در سالهای اخیر به یک موضوع داغ تبدیل شده است‪ .‬فصل ‪ 18‬این موضوع را‬
‫بررسی می کند‪.‬‬
‫‪213‬‬
‫سیستم عامل های داخلی و اصول طراحی‪214.........................................................................................................................‬‬

‫عملکرد نرم افزار در ‪Multicore‬‬

‫مزایای عملکرد بالقوه یک سازمان چند هسته ای به توانایی بهره برداری موثر از منابع موازی موجود در برنامه بستگی دارد‪ .‬اجازه‬
‫دهید ابتدا روی یک برنامه واحد که روی یک سیستم چند هسته ای اجرا می شود تمرکز کنیم‪ .‬قانون امدال نگاه کنید به‬
‫پیوست ‪ E‬بیان می کند که‪:‬‬

‫زمان اجرای برنامه روی یک پردازنده‬


‫سرعت‬
‫دادن‬ ‫زمان اجرای برنامه بر روی ‪ N‬پردازنده موازی‬

‫قانون برنامهای را فرض میکند که در آن کسری ‪ 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.........................................................................................................................‬‬

‫تعداد پردازنده ها‬


‫(الف) افزایش سرعت با قسمت های متوالی ‪ ٪5 ،٪2 ،٪0‬و ‪٪10‬‬

‫تعداد پردازنده ها‬


‫(ب) افزایش سرعت با سربار‬

‫شکل ‪ 4.7‬اثر عملکرد چند هسته‬

‫‪216‬‬
‫سیستم عامل های داخلی و اصول طراحی‪217.........................................................................................................................‬‬

‫شکل ‪ 4.8‬مقیاس بندی بارهای کاری پایگاه داده بر روی سخت افزار چند پردازنده‬

‫مثال کاربردی‪ :‬نرم افزار بازی ‪Valve‬‬

‫‪ 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‬که به طور موثر عمل می کنند به طور دائم به یک‬
‫پردازنده اختصاص داده می شوند‪.‬‬

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

‫شکل ‪ 4.9‬رشته های ترکیبی برای ماژول رندرینگ‬

‫‪218‬‬
‫سیستم عامل های داخلی و اصول طراحی‪219.........................................................................................................................‬‬

‫شکل ‪ 4.9‬ساختار رشته را برای ماژول رندر نشان می دهد‪ .‬در این ساختار سلسله مراتبی‪ ،‬رشتههای سطح باالتر در صورت نیاز‪،‬‬
‫رشته های سطح پایینتر را تولید میکنند‪ .‬ماژول رندر متکی به بخش مهمی از موتور منبع‪ ،‬لیست جهانی است که یک پایگاه‬
‫داده از عناصر بصری در دنیای بازی است‪ .‬اولین کار این است که تعیین کنیم چه مناطقی از جهان باید ارائه شوند‪ .‬وظیفه بعدی‬
‫تعیین این است که چه اشیایی در صحنه هستند که از زوایای مختلف مشاهده می شود‪ .‬پس از آن کار پردازنده فشرده فرا می‬
‫رسد‪ .‬ماژول رندر باید رندر هر شیء را از منظرهای متعدد‪ ،‬مانند نمای پخش کننده‪ ،‬نمای نمایشگرهای تلویزیون‪ ،‬و نقطه نظر‬
‫بازتاب در آب‪ ،‬بررسی کند‪.‬‬

‫برخی از عناصر کلیدی استراتژی ‪ threading‬برای ماژول رندر در ‪ LEON07‬فهرست شده است و شامل موارد زیر است‪:‬‬

‫فهرستهای رندر صحنه برای چندین صحنه به صورت موازی به عنوان مثال‪ ،‬جهان و انعکاس آن در آب بسازید‪.‬‬

‫‪ -‬شبیه سازی گرافیکی همپوشانی‪.‬‬

‫‪ -‬تبدیل استخوان شخصیت را برای همه شخصیتها در همه صحنهها به صورت موازی محاسبه کنید‪.‬‬

‫‪ -‬اجازه دهید چندین رشته به صورت موازی رسم شوند‪.‬‬

‫طراحان دریافتند که قفل کردن پایگاه دادههای کلیدی‪ ،‬مانند فهرست جهانی‪ ،‬برای یک رشته بسیار ناکارآمد است‪ .‬بیش از ‪95‬‬
‫درصد مواقع‪ ،‬یک رشته سعی می کند از یک مجموعه داده بخواند‪ ،‬و حداکثر تنها ‪ 5‬درصد از زمان صرف نوشتن برای یک‬
‫مجموعه داده می شود‪ .‬بنابراین‪ ،‬یک مکانیسم همزمانی معروف به مدل تک نویسنده‪-‬چند خواننده به طور موثر کار می کند‪.‬‬

‫‪ 4.4‬ویندوز‪ 8‬مدیریت فرآیندها و رشته ها‬

‫این بخش با مروری بر اشیاء و مکانیسمهای کلیدی که از اجرای برنامه در ویندوز ‪ 8‬پشتیبانی میکنند آغاز میشود‪ .‬بقیه بخش‬
‫با جزئیات بیشتری به نحوه مدیریت فرآیندها و رشتهها میپردازد‪.‬‬

‫یک برنامه کاربردی از یک یا چند فرآیند تشکیل شده است‪ .‬هر فرآیند منابع مورد نیاز برای اجرای یک برنامه را فراهم می کند‪.‬‬
‫یک فرآیند دارای فضای آدرس مجازی‪ ،‬کد قابل اجرا‪ ،‬دستگیره های باز برای اشیاء سیستم‪ ،‬زمینه امنیتی‪ ،‬شناسه فرآیند‬
‫منحصر به فرد‪ ،‬متغیرهای محیطی‪ ،‬کالس اولویت‪ ،‬حداقل و حداکثر اندازه مجموعه کاری و حداقل یک رشته اجرا می باشد‪ .‬هر‬
‫فرآیند با یک رشته شروع می شود که اغلب به آن رشته اصلی می گویند‪ ،‬اما می تواند رشته های اضافی را از هر یک از رشته‬
‫های خود ایجاد کند‪.‬‬

‫‪ thread‬موجودیتی در یک فرآیند است که می تواند برای اجرا برنامه ریزی شود‪ .‬همه رشتههای یک فرآیند فضای آدرس‬
‫مجازی و منابع سیستم آن را به اشتراک میگذارند‪ .‬بهعالوه‪ ،‬هر رشته‪ ،‬کنترلکنندههای استثنا‪ ،‬اولویت زمانبندی‪ ،‬ذخیرهسازی‬

‫‪219‬‬
‫سیستم عامل های داخلی و اصول طراحی‪220.........................................................................................................................‬‬

‫محلی رشته‪ ،‬شناسه رشته منحصربهفرد‪ ،‬و مجموعهای از ساختارهایی را که سیستم برای ذخیره بافت موضوع تا زمانبندی آن‬
‫استفاده میکند‪ ،‬حفظ میکند‪ .‬در یک کامپیوتر چند پردازنده ای‪ ،‬سیستم می تواند همزمان به تعداد پردازنده هایی که روی‬
‫کامپیوتر وجود دارد‪ ،‬رشته ها را اجرا کند‪.‬‬

‫یک شیء شغلی به گروههایی از فرآیندها اجازه میدهد تا به عنوان یک واحد مدیریت شوند‪ .‬اشیاء شغلی اشیای قابل نامگذاری‪،‬‬
‫ایمن و قابل اشتراک گذاری هستند که ویژگی های فرآیندهای مرتبط با آنها را کنترل می کنند‪ .‬عملیاتی که روی شی شغلی‬
‫انجام می شود‪ ،‬تمام فرآیندهای مرتبط با شی شغل را تحت تأثیر قرار می دهد‪ .‬به عنوان مثال می توان به اعمال محدودیت‬
‫هایی مانند اندازه مجموعه کاری و اولویت فرآیند یا پایان دادن به تمام فرآیندهای مرتبط با یک کار اشاره کرد‪.‬‬

‫یک ‪ Thread Pool‬مجموعهای از موضوعات کارگری است که به طور موثر فراخوانی غیرهمزمان را از طرف برنامه اجرا میکند‪.‬‬
‫‪ Thread Pool‬در درجه اول برای کاهش تعداد رشته های کاربردی و ارائه مدیریت رشته های کارگر استفاده می شود‪.‬‬

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

‫زمانبندی حالت کاربر ‪ UMS‬یک مکانیسم سبک وزن است که برنامهها میتوانند از آن برای زمانبندی رشتههای خود استفاده‬
‫کنند‪ .‬یک برنامه کاربردی میتواند بین رشتههای ‪ UMS‬در حالت کاربر بدون دخالت زمانبندی سیستم جابهجا شود و اگر یک‬
‫رشته ‪ UMS‬در هسته بلوک شود‪ ،‬دوباره کنترل پردازنده را به دست میآورد‪ .‬هر رشته ‪ UMS‬به جای به اشتراک گذاشتن‬
‫زمینه موضوعی یک رشته‪ ،‬زمینه رشته خود را دارد‪ .‬قابلیت جابهجایی بین رشتهها در حالت کاربر‪ UMS ،‬را برای موارد کاری‬
‫کوتاه مدت که به تماسهای سیستمی کمی نیاز دارند‪ ،‬کارآمدتر از ‪ Thread Pools‬میکند‪.‬‬

‫‪220‬‬
‫سیستم عامل های داخلی و اصول طراحی‪221.........................................................................................................................‬‬

‫‪ UMS‬برای برنامه های کاربردی با الزامات عملکرد باال که نیاز به اجرای کارآمد بسیاری از رشته ها به طور همزمان بر روی‬
‫سیستم های چند پردازنده ای یا چند هسته ای دارند‪ ،‬مفید است‪ .‬برای استفاده از ‪ ،UMS‬یک برنامه کاربردی باید یک مؤلفه‬
‫زمانبندی را پیادهسازی کند که رشتههای ‪ UMS‬برنامه را مدیریت کند و تعیین کند که چه زمانی باید اجرا شوند‪.‬‬

‫تغییرات در ویندوز ‪8‬‬

‫ویندوز ‪ 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‬یک‬
‫رشته را نشان می دهد‪ .‬عالوه بر این‪ ،‬فرآیند به یک شی فایل و یک شی بخش که بخشی از حافظه مشترک را تعریف می کند‪،‬‬
‫نشانه‬ ‫دسترسی دارد‪.‬‬
‫دسترسی‬

‫توصیفگرهای آدرس مجازی‬

‫شی‬
‫پردازش‬

‫اشیاء موجود‬

‫شکل ‪ 4.10‬فرآیند ویندوز و منابع آن‬

‫اشیاء فرآیند و رشته‬

‫ساختار شی گرا ویندوز توسعه یک تسهیالت فرآیندی با هدف عمومی را تسهیل می کند‪ .‬ویندوز از دو نوع شیء مرتبط با‬
‫فرآیند استفاده می کند‪ :‬فرآیندها و رشته ها‪ .‬فرآیند‪ ،‬موجودی مربوط به یک کار کاربر یا برنامه ای است که دارای منابعی مانند‬
‫حافظه و فایل های باز است‪ thread .‬یک واحد کار قابل ارسال است که به صورت متوالی اجرا می شود و قابل وقفه است‪ ،‬به‬
‫طوری که پردازنده می تواند به رشته دیگری تبدیل شود‪.‬‬

‫هر فرآیند ویندوز با یک شی نشان داده می شود‪ .‬هر شیء فرآیندی شامل تعدادی ویژگی است و تعدادی از اقدامات یا خدماتی‬
‫را که ممکن است انجام دهد را در بر می گیرد‪ .‬یک فرآیند زمانی که از طریق مجموعه ای از روش های رابط منتشر شده‬

‫‪223‬‬
‫سیستم عامل های داخلی و اصول طراحی‪224.........................................................................................................................‬‬

‫فراخوانی شود‪ ،‬یک سرویس را انجام می دهد‪ .‬هنگامی که ویندوز یک فرآیند جدید ایجاد می کند‪ ،‬از کالس شی یا نوع تعریف‬
‫شده برای فرآیند ویندوز به عنوان یک الگو برای تولید یک نمونه شی جدید استفاده می کند‪ .‬در زمان ایجاد‪ ،‬مقادیر ویژگی‬
‫اختصاص داده می شود‪ .‬جدول ‪ 4.3‬یک تعریف مختصر از هر یک از ویژگی های شیء برای یک شی فرآیند ارائه می دهد‪.‬‬

‫یک فرآیند ویندوز برای اجرا باید حداقل دارای یک رشته باشد‪ .‬سپس آن رشته ممکن است رشته های دیگری ایجاد کند‪ .‬در‬
‫یک سیستم چند پردازنده‪ ،‬چندین رشته از یک فرآیند ممکن است به صورت موازی اجرا شوند‪ .‬جدول ‪ 4.4‬ویژگی های شی‬
‫‪ thread‬را تعریف می کند‪ .‬توجه داشته باشید که برخی از ویژگی های یک ‪ thread‬شبیه ویژگی های یک فرآیند است‪.‬‬

‫در این موارد‪ ،‬مقدار ویژگی رشته از مقدار ویژگی فرآیند مشتق میشود‪ .‬برای مثال‪ ،‬تمایل پردازشگر رشته ای مجموعه ای از‬
‫پردازنده ها در یک سیستم چند پردازنده ای است که ممکن است این رشته را اجرا کند‪ .‬این مجموعه برابر یا زیر مجموعه ای از‬
‫میل پردازشگر فرآیند است‪.‬‬

‫جدول ‪ 4.3‬ویژگی های شی فرآیند ویندوز‬

‫شناسه فرآیند‬ ‫یک مقدار منحصر به فرد که فرآیند را برای سیستم عامل‬
‫شناسایی می کند‪.‬‬
‫توصیفگر امنیتی‬ ‫توصیف می کند که چه کسی یک شی را ایجاد کرده است‪،‬‬
‫چه کسی می تواند به آن شی دسترسی پیدا کند یا از آن‬
‫استفاده کند‪ ،‬و چه کسی از دسترسی به شی منع شده است‪.‬‬
‫اولویت پایه‬ ‫اولویت اجرای پایه برای موضوعات فرآیند‪.‬‬
‫مجموعه پیشفرض پردازندههایی که رشتههای فرآیند میتوانند میل پیش فرض پردازنده‬
‫روی آن اجرا شوند‪.‬‬
‫محدودیت های سهمیه‬ ‫حداکثر مقدار حافظه سیستمی صفحهبندیشده و‬
‫غیرصفحهشده‪ ،‬فضای فایل صفحهبندی و زمان پردازشی که‬
‫فرآیندهای کاربر میتوانند استفاده کنند‪.‬‬
‫زمان اجرا‬ ‫کل مدت زمانی که همه رشته ها در فرآیند اجرا شده اند‪.‬‬
‫شمارنده های‬ ‫متغیرهایی که تعداد و نوع عملیات ورودی‪/‬خروجی را که‬
‫ورودی‪/‬خروجی‬ ‫‪thread‬های فرآیند انجام داده اند را ثبت می کنند‪.‬‬

‫‪224‬‬
‫سیستم عامل های داخلی و اصول طراحی‪225.........................................................................................................................‬‬

‫شمارنده های عملیات‬ ‫متغیرهایی که تعداد و انواع عملیات حافظه مجازی را که‬
‫‪VM‬‬ ‫رشته های پردازش انجام داده اند‪ ،‬ثبت می کنند‪.‬‬
‫پورت های استثنا‪/‬اشکال‬ ‫کانالهای ارتباطی بین فرآیندی که مدیر فرآیند زمانی که یکی‬
‫زدایی‬ ‫از رشتههای فرآیند باعث ایجاد استثنا شود‪ ،‬پیامی را به آنها‬
‫ارسال میکند‪ .‬به طور معمول‪ ،‬اینها به ترتیب به فرآیندهای‬
‫فرعی محیط و دیباگر متصل می شوند‪.‬‬
‫وضعیت خروج‬ ‫دلیل خاتمه یک فرآیند‬

‫توجه داشته باشید که یکی از ویژگیهای یک شی ‪ context ،thread‬است که حاوی مقادیر ثبتکنندههای پردازشگر در‬
‫آخرین اجرای رشته است‪ .‬این اطالعات امکان تعلیق و از سرگیری رشته ها را فراهم می کند‪ .‬عالوه بر این‪ ،‬می توان رفتار یک‬
‫رشته را با تغییر بافت آن در حالی که معلق است تغییر داد‪.‬‬

‫‪225‬‬
‫سیستم عامل های داخلی و اصول طراحی‪226.........................................................................................................................‬‬

‫جدول ‪ 4.4‬ویژگی های شیء موضوع ویندوز‬

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

‫‪226‬‬
‫سیستم عامل های داخلی و اصول طراحی‪227.........................................................................................................................‬‬

‫چند رشته ای‬

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

‫یک فرآیند چند رشته ای شی گرا وسیله ای کارآمد برای پیاده سازی یک برنامه کاربردی سرور است‪ .‬به عنوان مثال‪ ،‬یک فرآیند‬
‫سرور می تواند به تعدادی از مشتریان به طور همزمان سرویس دهد‪.‬‬

‫وضعیت های رشته‬

‫یک رشته ویندوز موجود در یکی از شش حالت است شکل ‪:4.11‬‬

‫‪ -‬آماده‪ :‬ممکن است یک رشته آماده برای اجرا برنامه ریزی شود‪ .‬توزیع کننده هسته تمام موضوعات آماده را پیگیری می کند و‬
‫آنها را به ترتیب اولویت برنامه ریزی می کند‪.‬‬

‫‪ :- Standby‬یک رشته آماده به کار برای اجرای بعدی بر روی یک پردازنده خاص انتخاب شده است‪ .‬رشته در این حالت‬
‫منتظر می ماند تا آن پردازنده در دسترس قرار گیرد‪ .‬اگر اولویت رشته آماده به کار به اندازه کافی باال باشد‪ ،‬رشته در حال اجرا‬
‫روی آن پردازنده ممکن است به نفع رشته آماده به کار گرفته شود‪ .‬در غیر این صورت‪ ،‬رشته آماده به کار صبر می کند تا رشته‬
‫در حال اجرا بلوک شود یا برش زمان خود را تمام کند‪.‬‬

‫شکل ‪ 4.11‬وضعیت رشته ویندوز‬

‫‪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‬ارسال می کند‪ .‬سپس زیرسیستم به نوبه خود یک درخواست فرآیند را به‬
‫مجری ویندوز ارسال می کند‪ .‬از آنجایی که اثر مطلوب این است که فرآیند جدید ویژگیهای فرآیند مشتری و نه فرآیند سرور را‬
‫به ارث میبرد‪ ،‬ویندوز زیرسیستم را قادر میسازد تا والد فرآیند جدید را مشخص کند‪ .‬سپس فرآیند جدید رمز دسترسی‬
‫والدین‪ ،‬محدودیتهای سهمیه‪ ،‬اولویت پایه و میل پردازنده پیشفرض را به ارث میبرد‪.‬‬

‫‪ 4.5‬سوالریس ‪ thread‬و مدیریت ‪SMP‬‬

‫سوالریس پشتیبانی از رشته های چندسطحی را برای ارائه انعطاف پذیری قابل توجهی در بهره برداری از منابع پردازنده پیاده‬
‫سازی می کند‪.‬‬

‫معماری چند رشته ای‬

‫سوالریس از چهار مفهوم جداگانه مرتبط با رشته استفاده می کند‪:‬‬

‫‪ :Process-‬این فرآیند عادی یونیکس است و شامل فضای آدرس کاربر‪ ،‬پشته و بلوک کنترل فرآیند است‪.‬‬

‫‪ -‬رشتههای سطح کاربر‪ :‬از طریق یک کتابخانه رشتهها در فضای آدرس یک فرآیند پیادهسازی میشوند و برای سیستم عامل‬
‫نامرئی هستند‪ .‬یک رشته در سطح کاربر ‪ULT 19‬یک واحد اجرایی ایجاد شده توسط کاربر در یک فرآیند است‪.‬‬

‫فرآیندهای سبک وزن‪ :‬یک فرآیند سبک وزن ‪ LWP‬را می توان به عنوان یک نقشه برداری بین ‪ ULT‬ها و رشته های هسته‬
‫مشاهده کرد‪ .‬هر ‪ LWP‬از ‪ ULT‬پشتیبانی می کند و به یک رشته هسته نگاشت می کند‪ LWP .‬ها توسط هسته به طور‬
‫مستقل برنامه ریزی می شوند و ممکن است به صورت موازی روی چند پردازنده اجرا شوند‪.‬‬

‫‪ -‬رشته های هسته‪ :‬اینها موجودیت های اساسی هستند که می توانند برای اجرا در یکی از پردازنده های سیستم برنامه ریزی و‬
‫ارسال شوند‪.‬‬

‫‪19‬‬
‫باز هم‪ ،‬مخفف ‪ ULT‬منحصر به این کتاب است و در ادبیات سوالریس یافت نمی شود‪.‬‬
‫‪229‬‬
‫سیستم عامل های داخلی و اصول طراحی‪230.........................................................................................................................‬‬

‫شکل ‪ 4.12‬رابطه بین این چهار موجودیت را نشان می دهد‪ .‬توجه داشته باشید که همیشه دقیقاً یک رشته هسته برای هر‬
‫‪ LWP‬وجود دارد‪ .‬یک ‪ LWP‬در یک فرآیند برای برنامه قابل مشاهده است‪ .‬بنابراین‪ ،‬ساختارهای داده ‪ LWP‬در فضای آدرس‬
‫فرآیند مربوطه خود وجود دارد‪ .‬در همان زمان‪ ،‬هر ‪ LWP‬به یک رشته هسته قابل توزیع متصل است و ساختار داده برای آن‬
‫رشته هسته در فضای آدرس هسته حفظ می شود‪.‬‬

‫یک فرآیند ممکن است شامل یک ‪ ULT‬منفرد متصل به یک ‪ LWP‬باشد‪ .‬در این مورد‪ ،‬یک رشته اجرا وجود دارد که مربوط‬
‫به یک فرآیند سنتی یونیکس است‪ .‬هنگامی که همزمانی در یک فرآیند واحد مورد نیاز نباشد‪ ،‬یک برنامه کاربردی از این‬
‫ساختار فرآیند استفاده می کند‪ .‬اگر یک برنامه نیاز به همزمانی داشته باشد‪ ،‬فرآیند آن شامل چندین رشته است که هر یک به‬
‫یک ‪ LWP‬محدود می شود‪ ،‬که به نوبه خود هر یک به یک رشته هسته محدود می شوند‪.‬‬

‫عالوه بر این‪ ،‬رشتههای هستهای وجود دارند که با ‪LWP‬ها مرتبط نیستند‪ .‬هسته این رشته های هسته را ایجاد‪ ،‬اجرا و از بین‬
‫می برد تا توابع خاص سیستم را اجرا کند‪ .‬استفاده از رشته های هسته به جای فرآیندهای هسته برای اجرای توابع سیستم‪،‬‬
‫سربار سوئیچینگ در هسته را کاهش می دهد از یک سوئیچ فرآیند به یک سوئیچ رشته‪.‬‬

‫شکل ‪ 4.12‬فرآیندها و رشته ها در سوالریس ‪MCDO07‬‬

‫انگیزه‬

‫ساختار رشته سه سطحی ‪ ،LWP ،ULT‬رشته هسته در ‪ Solaris‬برای تسهیل مدیریت رشته توسط سیستم عامل و ارائه یک‬
‫رابط تمیز برای برنامه ها در نظر گرفته شده است‪ .‬رابط ‪ ULT‬می تواند یک کتابخانه رشته استاندارد باشد‪ .‬یک ‪ ULT‬تعریف‬
‫شده بر روی یک ‪ LWP‬که توسط سیستم عامل مدیریت می شود و حالت های اجرا تعریف شده ای دارد که متعاقباً تعریف می‬
‫شود‪ ،‬نگاشت می شود‪ .‬یک ‪ LWP‬به یک رشته هسته با یک مطابقت یک به یک در حالت های اجرا متصل است‪ .‬بنابراین‪،‬‬
‫همزمانی و اجرا در سطح رشته هسته مدیریت می شود‪.‬‬

‫‪230‬‬
‫سیستم عامل های داخلی و اصول طراحی‪231.........................................................................................................................‬‬

‫عالوه بر این‪ ،‬یک برنامه کاربردی از طریق یک رابط برنامه نویسی برنامه متشکل از تماس های سیستمی به سخت افزار‬
‫دسترسی دارد‪ API .‬به کاربر اجازه می دهد تا از خدمات هسته برای انجام وظایف ممتاز از طرف فرآیند فراخوانی‪ ،‬مانند خواندن‬
‫یا نوشتن یک فایل‪ ،‬صدور فرمان کنترل به دستگاه‪ ،‬ایجاد یک فرآیند یا رشته جدید‪ ،‬تخصیص حافظه برای استفاده از فرآیند‬
‫استفاده کند‪ ، .‬و غیره‪.‬‬

‫ساختار فرآیند‬

‫شکل ‪ 4.13‬به طور کلی ساختار فرآیند یک سیستم سنتی یونیکس را با سوالریس مقایسه می کند‪ .‬در یک پیاده سازی معمولی‬
‫یونیکس‪ ،‬ساختار فرآیند شامل شناسه فرآیند است‪ .‬شناسه های کاربر؛ یک جدول ارسال سیگنال‪ ،‬که هسته از آن برای تصمیم‬
‫گیری در هنگام ارسال سیگنال به یک فرآیند استفاده می کند‪ .‬توصیف کننده های فایل‪ ،‬که وضعیت فایل های مورد استفاده در‬
‫این فرآیند را توصیف می کند‪ .‬یک نقشه حافظه‪ ،‬که فضای آدرس را برای این فرآیند تعریف می کند‪ .‬و یک ساختار حالت‬
‫پردازنده‪ ،‬که شامل پشته هسته برای این فرآیند است‪ .‬سوالریس این ساختار اصلی را حفظ می کند اما بلوک حالت پردازنده را با‬
‫لیستی از ساختارها که شامل یک بلوک داده برای هر ‪ LWP‬است جایگزین می کند‪.‬‬

‫ساختار داده ‪ LWP‬شامل عناصر زیر است‪:‬‬

‫‪ -‬یک شناسه ‪LWP‬‬

‫‪ -‬اولویت این ‪ LWP‬و در نتیجه رشته هسته ای که از آن پشتیبانی می کند‬

‫شکل ‪ 4.13‬ساختار فرآیند در یونیکس سنتی و سوالریس ‪LEWI96‬‬

‫‪231‬‬
‫سیستم عامل های داخلی و اصول طراحی‪232.........................................................................................................................‬‬

‫‪ -‬یک ماسک سیگنال که به هسته می گوید کدام سیگنال پذیرفته می شود‬

‫‪ -‬مقادیر ذخیره شده رجیسترهای سطح کاربر زمانی که ‪ LWP‬در حال اجرا نیست‬

‫‪ -‬پشته هسته برای این ‪ ،LWP‬که شامل آرگومان های فراخوانی سیستم‪ ،‬نتایج و کدهای خطا برای هر سطح تماس است‪.‬‬

‫‪ -‬داده های استفاده از منابع و پروفایل‬

‫‪ -‬اشاره گر به رشته هسته مربوطه‬

‫‪ -‬اشاره گر به ساختار فرآیند‬

‫اجرای رشته‬

‫شکل ‪ 4.14‬نمای ساده شده ای از هر دو حالت اجرای رشته را نشان می دهد‪ .‬این حالت ها وضعیت اجرای هر رشته هسته و‬
‫‪ LWP‬محدود شده به آن را منعکس می کنند‪ .‬همانطور که گفته شد‪ ،‬برخی از رشته های هسته با ‪ LWP‬مرتبط نیستند‪.‬‬
‫همان نمودار اجرا اعمال می شود‪ .‬ایالت ها به شرح زیر است‪:‬‬

‫‪ :RUN-‬موضوع قابل اجرا است‪ .‬یعنی ‪ thread‬آماده اجرا است‪.‬‬

‫‪ :ONPROC-‬رشته در حال اجرا بر روی یک پردازنده است‪.‬‬

‫شکل ‪ 4.14‬حالت های رشته سوالریس‬

‫‪ :SLEEP-‬موضوع مسدود شده است‪.‬‬

‫‪ :STOP-‬موضوع متوقف شده است‪.‬‬

‫‪ :ZOMBIE-‬موضوع پایان یافته است‪.‬‬


‫‪232‬‬
‫سیستم عامل های داخلی و اصول طراحی‪233.........................................................................................................................‬‬

‫‪ -‬رایگان‪ :‬منابع موضوع منتشر شده است و موضوع در انتظار حذف از ساختار داده رشته سیستم عامل است‪.‬‬

‫اگر نخی با اولویت باالتر یا به دلیل برش زمان‪ ،‬از ‪ ONPROC‬به ‪ RUN‬منتقل شود‪ .‬یک رشته در صورت مسدود شدن از‬
‫‪ ONPROC‬به ‪ SLEEP‬منتقل می شود و باید منتظر یک رویداد برای بازگشت به حالت ‪ RUN‬باشد‪ .‬در صورتی که‬
‫‪ thread‬یک تماس سیستمی را فراخوانی کند مسدود می شود و باید منتظر انجام سرویس سیستم باشد‪ .‬یک رشته در صورتی‬
‫که فرآیند آن متوقف شود وارد حالت ‪ STOP‬می شود‪ .‬این ممکن است برای اهداف اشکال زدایی انجام شود‪.‬‬

‫وقفه به عنوان رشته ها‬

‫اکثر سیستم عامل ها شامل دو شکل اساسی از فعالیت های همزمان هستند‪ :‬فرآیندها و وقفه ها‪ .‬فرآیندها یا رشتهها با یکدیگر‬
‫همکاری میکنند و استفاده از ساختارهای داده مشترک را با استفاده از انواع اولیهای مدیریت میکنند که محرومیت متقابل را‬
‫اعمال میکنند فقط یک فرآیند در هر زمان میتواند کد خاصی را اجرا کند یا به دادههای خاصی دسترسی داشته باشد و اجرای‬
‫آنها را همگامسازی میکند‪ .‬وقفه ها با جلوگیری از مدیریت آنها برای یک دوره زمانی هماهنگ می شوند‪ .‬سوالریس این دو‬
‫مفهوم را در یک مدل واحد‪ ،‬یعنی رشتههای هسته و مکانیسمهای زمانبندی و اجرای رشتههای هسته‪ ،‬یکی میکند‪ .‬برای انجام‬
‫این کار‪ ،‬وقفه ها به رشته های هسته تبدیل می شوند‪.‬‬

‫انگیزه تبدیل وقفه ها به رشته ها کاهش سربار است‪ .‬کنترل کننده های وقفه اغلب داده های به اشتراک گذاشته شده توسط‬
‫بقیه هسته را دستکاری می کنند‪ .‬بنابراین‪ ،‬در حالی که یک روال هسته ای که به چنین داده هایی دسترسی دارد در حال اجرا‬
‫است‪ ،‬وقفه ها باید مسدود شوند‪ ،‬حتی اگر بیشتر وقفه ها روی آن داده ها تأثیری نداشته باشند‪ .‬به طور معمول‪ ،‬روش انجام این‬
‫کار به این صورت است که روتین سطح اولویت وقفه را باالتر برای مسدود کردن وقفه ها تنظیم می کند و سپس پس از تکمیل‬
‫دسترسی‪ ،‬سطح اولویت را کاهش می دهد‪ .‬این عملیات زمان بر است‪ .‬مشکل در یک سیستم چند پردازنده ای بزرگتر می شود‪.‬‬
‫هسته باید از اشیاء بیشتری محافظت کند و ممکن است نیاز به مسدود کردن وقفه ها در همه پردازنده ها باشد‪.‬‬

‫راه حل در ‪ Solaris‬را می توان به صورت زیر خالصه کرد‪:‬‬

‫‪ Solaris .1‬از مجموعه ای از رشته های هسته برای مدیریت وقفه ها استفاده می کند‪ .‬مانند هر رشته هسته‪ ،‬یک رشته وقفه‬
‫دارای شناسه‪ ،‬اولویت‪ ،‬زمینه و پشته خاص خود است‪.‬‬

‫‪ .2‬هسته دسترسی به ساختارهای داده را کنترل میکند و با استفاده از وقفهها‪ ،‬بین رشتههای وقفه‪ ،‬از نوع مورد بحث در فصل‬
‫‪ ،5‬همگامسازی میکند‪.‬‬

‫‪ .3‬رشته های وقفه دارای اولویت های باالتری نسبت به سایر انواع رشته های هسته هستند‪.‬‬

‫‪233‬‬
‫سیستم عامل های داخلی و اصول طراحی‪234.........................................................................................................................‬‬

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

‫تجربه با رشتههای وقفه سوالریس نشان میدهد که این رویکرد نسبت به استراتژی مدیریت وقفه سنتی ‪ KLEI95‬عملکرد‬
‫برتری را ارائه میدهد‪.‬‬

‫‪ 4.6‬مدیریت فرآیندها و رشته های لینوکس‬

‫وظایف لینوکس‬

‫یک فرآیند یا وظیفه در لینوکس با ساختار داده ‪ task_struct‬نشان داده می شود‪ .‬در ساختار داده ‪ task_struct‬حاوی‬
‫اطالعات در تعدادی دسته است‪:‬‬

‫‪ :State-‬وضعیت اجرای فرآیند در حال اجرا‪ ،‬آماده‪ ،‬تعلیق‪ ،‬متوقف شده‪ ،‬زامبی‪ .‬این در ادامه توضیح داده شده است‪.‬‬

‫‪ -‬اطالعات زمانبندی‪ :‬اطالعات مورد نیاز لینوکس برای زمانبندی فرآیندها‪ .‬یک فرآیند می تواند عادی یا واقعی باشد و دارای‬
‫اولویت باشد‪ .‬فرآیندهای بالدرنگ قبل از فرآیندهای عادی برنامه ریزی می شوند و در هر دسته می توان از اولویت های نسبی‬
‫استفاده کرد‪ .‬شمارنده مدت زمان مجاز اجرای یک فرآیند را ردیابی می کند‪.‬‬

‫‪ -‬شناسه ها‪ :‬هر فرآیند یک شناسه فرآیند منحصر به فرد دارد و همچنین دارای شناسه های کاربر و گروه است‪ .‬شناسه گروه‬
‫برای تخصیص امتیاز دسترسی به منابع به گروهی از فرآیندها استفاده می شود‪.‬‬

‫‪ -‬ارتباطات بین فرآیندی‪ :‬لینوکس از مکانیسم های ‪ IPC‬موجود در ‪ UNIX SVR4‬که در فصل ‪ 6‬توضیح داده شده است‪،‬‬
‫پشتیبانی می کند‪.‬‬

‫‪ -‬پیوندها‪ :‬هر فرآیند شامل پیوندی به فرآیند والدین خود‪ ،‬پیوندهایی به خواهر و برادرانش فرآیندهایی با همان والدین و‬
‫پیوندهایی به همه فرزندانش است‪.‬‬

‫‪234‬‬
‫سیستم عامل های داخلی و اصول طراحی‪235.........................................................................................................................‬‬

‫‪ -‬زمانها و زمانسنجها‪ :‬شامل زمان ایجاد فرآیند و مقدار زمان پردازشگر که تاکنون توسط فرآیند مصرف شده است‪ .‬یک فرآیند‬
‫ممکن است یک یا چند تایمر بازه ای را نیز مرتبط کرده باشد‪ .‬یک فرآیند یک تایمر بازه ای را با استفاده از یک فراخوانی‬
‫سیستمی تعریف می کند‪ .‬در نتیجه‪ ،‬هنگامی که تایمر منقضی می شود‪ ،‬سیگنالی به فرآیند ارسال می شود‪ .‬یک تایمر ممکن‬
‫است یک بار مصرف یا دوره ای باشد‪.‬‬

‫‪ :File system-‬شامل اشاره گر به هر فایلی که توسط این فرآیند باز می شود‪ ،‬و همچنین نشانگرهایی به دایرکتوری های فعلی‬
‫و ریشه برای این فرآیند می باشد‪.‬‬

‫‪ -‬فضای آدرس‪ :‬فضای آدرس مجازی اختصاص داده شده به این فرآیند را تعریف می کند‬

‫‪ -‬زمینه خاص پردازنده‪ :‬رجیسترها و اطالعات پشته ای که زمینه این فرآیند را تشکیل می دهند‬

‫شکل ‪ 4.15‬حالت های اجرای یک فرآیند را نشان می دهد‪ .‬این موارد به شرح زیر است‪:‬‬

‫‪ :Running-‬این مقدار حالت مربوط به دو حالت است‪ .‬یک فرآیند در حال اجرا یا در حال اجرا است یا آماده اجرا است‪.‬‬

‫شکل ‪ 4.15‬مدل فرآیند‪/‬رشته لینوکس‬

‫‪ :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_NEWPID-‬فضای نام شناسه فرآیند جدید ایجاد می کند‬

‫‪ :CLONE_PARENT-‬تماس گیرنده و وظیفه جدید فرآیند والد یکسانی را به اشتراک می گذارند‪.‬‬

‫‪ :CLONE_SYSVSEM-‬سیستم ‪ V SEM_UNDO‬را به اشتراک می گذارد‪.‬‬

‫‪ :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‬جدید و همه فضاهای نام دیگر به آن اختصاص دهد‪ .‬فرآیند شبیهسازیشده میتواند به‬
‫همه منابع فرآیند والد یا زیرمجموعهای از منابع و امتیازات والد دسترسی و امتیازاتی داشته باشد‪.‬‬

‫‪ 4.7‬مدیریت فرآیند و رشته اندروید‬

‫قبل از بحث در مورد جزئیات رویکرد ‪ 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‬می شود‪.‬‬

‫فرآیند اختصاصی‬

‫ارائه دهنده محتوا‬


‫گیرنده پخش‬

‫کاربرد‬

‫فعالیت‬ ‫سرویس‬

‫ماشین مجازی‬
‫اختصاصی‬

‫شکل ‪ 4.16‬برنامه اندروید‬

‫‪241‬‬
‫سیستم عامل های داخلی و اصول طراحی‪242.........................................................................................................................‬‬

‫در هر زمانی‪ ،‬یک کاربر ممکن است با استفاده از دکمه برگشت‪ ،‬بستن یک پنجره‪ ،‬یا هر اقدام دیگری مرتبط با این فعالیت‪،‬‬
‫فعالیت در حال اجرا را خاتمه دهد‪ .‬سپس برنامه برای توقف فعالیت‪ 0onStop ،‬را فراخوانی می کند‪ .‬سپس برنامه اکتیویتی را‬
‫که در باالی پشته قرار دارد نمایش می دهد و آن را از سر می گیرد‪ .‬حالت های ‪ Resumed‬و ‪ Paused‬با هم طول عمر قابل‬
‫مشاهده فعالیت را تشکیل می دهند‪ .‬در طول این مدت‪ ،‬کاربر می تواند فعالیت را روی صفحه ببیند و با آن تعامل داشته باشد‪.‬‬

‫اگر کاربر یک برنامه را ترک کند تا به برنامه دیگر برود‪ ،‬مثالً با رفتن به صفحه اصلی‪ ،‬فعالیت فعلی در حال اجرا متوقف شده و‬
‫سپس متوقف می شود‪.‬‬

‫فعالیت راه اندازی شد‬

‫کاربر به سمت فعالیت‬


‫حرکت می کند‬

‫روند برنامه از بین رفت‬


‫کاربر به فعالیت‬
‫برمی گردد‬
‫برنامه های با اولویت باالتر‬
‫ادامه‬
‫به حافظه نیاز دارند‬

‫مکث‬
‫کاربر به سمت فعالیت‬
‫حرکت می کند‬

‫توقف‬

‫فعالیت بسته شد‬

‫شکل ‪ 4.17‬نمودار انتقال وضعیت فعالیت‬

‫‪242‬‬
‫سیستم عامل های داخلی و اصول طراحی‪243.........................................................................................................................‬‬

‫هنگامی که کاربر این برنامه را از سر می گیرد‪ ،‬فعالیت متوقف شده‪ ،‬که در باالی پشته پشتی قرار دارد‪ ،‬دوباره راه اندازی می‬
‫شود و به فعالیت پیش زمینه برای برنامه تبدیل می شود‪.‬‬

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

‫سیستم برنامهها را به سبک پشتهگرا میکشد‪ :‬بنابراین ابتدا برنامههایی که اخیراً استفاده شدهاند را از بین میبرد‪ .‬برنامه هایی که‬
‫دارای سرویس های پیش زمینه هستند بسیار بعید است که از بین بروند‪.‬‬

‫فرآیندها و رشته ها‬

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

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

‫‪ -‬فرآیند پیش زمینه‪ :‬فرآیندی که برای کاری که کاربر در حال حاضر انجام می دهد مورد نیاز است‪ .‬بیش از یک فرآیند در یک‬
‫زمان می تواند یک فرآیند پیش زمینه باشد‪ .‬به عنوان مثال‪ ،‬هم فرآیندی که میزبان فعالیتی است که کاربر با آن در تعامل است‬
‫فعالیت در حالت ‪ Resumed‬و هم فرآیندی که میزبان سرویسی است که به فعالیتی که کاربر با آن در تعامل است‪ ،‬میزبانی می‬
‫کند‪ ،‬فرآیندهای پیش زمینه هستند‪.‬‬

‫‪ -‬فرآیند قابل مشاهده‪ :‬فرآیندی که میزبان مؤلفه ای است که در پیش زمینه نیست‪ ،‬اما همچنان برای کاربر قابل مشاهده است‪.‬‬

‫‪243‬‬
‫سیستم عامل های داخلی و اصول طراحی‪244.........................................................................................................................‬‬

‫‪ -‬فرآیند سرویس‪ :‬فرآیندی که سرویسی را اجرا می کند که در هیچ یک از دسته های باالتر قرار نمی گیرد‪ .‬به عنوان مثال می‬
‫توان به پخش موسیقی در پس زمینه یا بارگیری داده ها در شبکه اشاره کرد‪.‬‬

‫‪ -‬فرآیند پس زمینه‪ :‬فرآیندی که میزبان یک فعالیت در حالت ‪ Stop‬است‬

‫‪ -‬فرآیند خالی‪ :‬فرآیندی که هیچ جزء برنامه فعالی را در خود جای نمی دهد‪ .‬تنها دلیل زنده نگه داشتن این نوع فرآیند برای‬
‫اهداف کش است‪ ،‬برای بهبود زمان راه اندازی دفعه بعد که یک مؤلفه باید در آن اجرا شود‪.‬‬

‫‪MAC OS X GRAND CENTRAL DISPATCH 4.8‬‬

‫همانطور که در فصل ‪ 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‬‬

‫رودخانه فوقانی زین‪ ،‬نیوجرسی‪ :‬سالن پرنتیس‪.1996 ،‬‬

‫‪ .K ،ROBB04 Robbins‬و ‪،S. UNIX Systems Programming: Communication ،Robbins‬‬


‫‪ Concurrency‬و ‪ .Threads‬رودخانه فوقانی زین‪ ،‬نیوجرسی‪ :‬سالن پرنتیس‪.2004 ،‬‬

‫‪ 4.11‬اصطالحات کلیدی‪ ،‬سؤاالت و مشکالت را مرور کنید‬

‫شرایط کلیدی‬

‫فرآیند سبک وزن رشته‬ ‫پورت چند‬ ‫موضو‬


‫در سطح هسته ژاکت‬ ‫رشته ای‬ ‫ع‬
‫کردن‬ ‫روند‬ ‫وظی‬
‫پیام‬ ‫فه‬
‫رشته در سطح کاربر‬

‫‪247‬‬
‫سیستم عامل های داخلی و اصول طراحی‪248.........................................................................................................................‬‬

‫بررسی سواالت‬

‫‪ .4.1‬جدول ‪ 3.5‬عناصر معمولی موجود در بلوک کنترل فرآیند را برای یک سیستم عامل بدون رشته فهرست می کند‪ .‬از این‬
‫میان‪ ،‬کدام یک باید به یک بلوک کنترل رشته و کدام یک باید به بلوک کنترل فرآیند برای یک سیستم چند رشته ای تعلق‬
‫داشته باشد؟‬

‫‪ .4.2‬دالیلی را فهرست کنید که چرا تغییر حالت بین رشته ها ممکن است ارزان تر از تغییر حالت بین فرآیندها باشد‪.‬‬

‫‪ .4.3‬دو ویژگی مجزا و بالقوه مستقل که در مفهوم فرآیند گنجانده شده اند کدامند؟‬

‫‪ .4.4‬چهار مثال کلی از استفاده از ‪ thread‬ها در یک سیستم چند پردازشی تک کاربره را ذکر کنید‪.‬‬

‫‪ .4.5‬چه منابعی معموالً توسط همه رشته های یک فرآیند به اشتراک گذاشته می شود؟‬

‫‪ .4.6‬سه مزیت ‪ ULT‬نسبت به ‪ KLT‬را فهرست کنید‪.‬‬

‫‪ .4.7‬دو مورد از معایب ‪ ULT‬ها را در مقایسه با ‪ KLT‬ها ذکر کنید‪.‬‬

‫‪ .4.8‬ژاکت را تعریف کنید‬

‫چالش ها و مسائل‬

‫‪ .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‬برای برنامه های چند رشته ای ناکافی هستند‪ .‬همانطور که این مشکل‬
‫نشان می دهد‪ ،‬این می تواند بر روی اجرارها و صحت کد تأثیر بگذارد‪ .‬اعالنات و تعریف تابع زیر را در نظر بگیرید‪:‬‬

‫حال موردی را در نظر بگیرید که در آن رشته ‪ A‬اجرا می شود‬

‫در حالی که رشته ‪ B‬اجرا می کند‬

‫آ‪ .‬تابع چه کاری انجام می دهد؟‬

‫ب زبان ‪ C‬فقط به اجرای تک رشته ای می پردازد‪ .‬آیا استفاده از دو رشته موازی مشکل یا مشکالت احتمالی ایجاد می کند؟‬

‫‪ .4.8‬اما برخی از اجرارهای بهینه سازی موجود از جمله ‪ ،gcc‬که تمایل به نسبتا محافظه کارانه دارند ‪ count_positives‬را به‬
‫چیزی شبیه به‬

‫‪250‬‬
‫سیستم عامل های داخلی و اصول طراحی‪251.........................................................................................................................‬‬

‫اگر رشته های ‪ A‬و ‪ B‬همزمان اجرا شوند چه مشکل یا مشکل احتمالی با این نسخه اجرا شده برنامه رخ می دهد؟‬

‫‪ .4.9‬کد زیر را با استفاده از ‪ API POSIX Pthreads‬در نظر بگیرید‪thread2.c :‬‬

‫در ‪ 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‬پشتیبانی می کند‪.‬‬

‫آ‪ .‬مزیت احتمالی اجازه دادن به نگاشت چند به یک از ‪ ULT‬ها به ‪ LWP‬چیست؟‬

‫شکل ‪ 4.18‬وضعیت رشته سطح کاربر سوالریس و وضعیت ‪LWP‬‬

‫ب در ‪ ،Solaris 8‬وضعیت اجرای رشته یک ‪ ULT‬از ‪ LWP‬آن متمایز است‪ .‬توضیح دهد که چرا‪.‬‬

‫ج شکل ‪ 4.18‬نمودارهای انتقال حالت را برای یک ‪ ULT‬و ‪ LWP‬مرتبط با آن در سوالریس ‪ 8‬و ‪ 9‬نشان می دهد‪ .‬عملکرد دو‬
‫نمودار و روابط آنها را توضیح دهید‪.‬‬

‫‪ .4.12‬دلیل وضعیت ‪ Uninterruptible‬در لینوکس را توضیح دهید‪.‬‬

‫‪252‬‬
‫سیستم عامل های داخلی و اصول طراحی‪253.........................................................................................................................‬‬

‫فصل‪5‬‬

‫همزمانی‪:‬‬

‫حذف و همگام سازی متقابل‬

‫‪ 5.1‬اصول همزمانی‬

‫یک مثال ساده شرایط مسابقه‬

‫سیستم عامل به تعامل فرآیندی مربوط می شود‬

‫الزامات برای حذف متقابل‬

‫‪ 5.2‬محرومیت متقابل‪ :‬پشتیبانی سخت افزاری‬

‫وقفه غیرفعال کردن‬

‫دستورالعمل ماشین ویژه‬

‫‪ 5.3‬سمافورها‬

‫طرد متقابل‬

‫مشکل تولید کننده‪/‬مصرف کننده پیاده سازی سمافورها‬

‫‪ 5.4‬مانیتور‬

‫مانیتور با سیگنال‬

‫مدل جایگزین مانیتور با ‪ Notify‬و ‪Broadcast‬‬

‫‪ 5.5‬ارسال پیام‬

‫همگام سازی آدرس دهی فرمت پیام صف بندی نظم و انضباط محرومیت متقابل‬

‫‪253‬‬
‫سیستم عامل های داخلی و اصول طراحی‪254.........................................................................................................................‬‬

‫‪ 5.6‬مشکل خوانندگان‪/‬نویسندگان‬

‫خوانندگان دارای اولویت هستند نویسندگان دارای اولویت هستند‬

‫‪ 5.7‬خالصه‬

‫‪ 5.8‬خواندن و انیمیشن های توصیه شده‬

‫‪ 5.9‬اصطالحات کلیدی‪ ،‬بررسی سواالت و مشکالت‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬مفاهیم اساسی مربوط به همزمانی‪ ،‬مانند شرایط مسابقه‪ ،‬نگرانی های سیستم عامل‪ ،‬و الزامات محرومیت متقابل را مورد بحث‬
‫قرار دهید‪.‬‬

‫‪ -‬رویکردهای سخت افزاری برای حمایت از طرد متقابل را درک کنید‪.‬‬

‫‪ -‬سمافورها را تعریف و توضیح دهید‪.‬‬

‫‪ -‬مانیتورها را تعریف و توضیح دهید‪.‬‬

‫‪ -‬مانیتورها را تعریف و توضیح دهید‪.‬‬

‫‪ -‬مشکل خوانندگان‪/‬نویسندگان را توضیح دهید‪.‬‬

‫موضوعات اصلی طراحی سیستم عامل همگی با مدیریت فرآیندها و موضوعات مرتبط هستند‪:‬‬

‫‪ :Multiprogramming-‬مدیریت چندین فرآیند در یک سیستم تک پردازنده‬

‫‪ :Multiprocessing-‬مدیریت چندین فرآیند در یک چند پردازنده‬

‫‪ -‬پردازش توزیع شده‪ :‬مدیریت فرآیندهای متعددی که بر روی چندین سیستم کامپیوتری توزیع شده اجرا می شوند‪ .‬تکثیر اخیر‬
‫خوشه ها نمونه بارز این نوع سیستم است‪.‬‬

‫اساسی برای همه این زمینه ها‪ ،‬و اساسی در طراحی سیستم عامل‪ ،‬همزمانی است‪ .‬همزمانی شامل مجموعه ای از مسائل‬
‫طراحی‪ ،‬از جمله ارتباط بین فرآیندها‪ ،‬اشتراک گذاری و رقابت برای منابع مانند حافظه‪ ،‬فایل ها‪ ،‬و دسترسی ‪ ،I/O‬همگام سازی‬

‫‪254‬‬
‫سیستم عامل های داخلی و اصول طراحی‪255.........................................................................................................................‬‬

‫فعالیت های چندین فرآیند‪ ،‬و تخصیص زمان پردازنده به فرآیندها است‪ .‬خواهیم دید که این مسائل نه تنها در محیطهای‬
‫پردازش چندگانه و توزیعشده‪ ،‬بلکه در سیستمهای چندبرنامهنویسی تکپردازنده نیز به وجود میآیند‪.‬‬

‫همزمانی در سه زمینه مختلف به وجود می آید‪:‬‬

‫‪ -‬برنامه های کاربردی چندگانه‪ :‬چندبرنامه نویسی اختراع شد تا زمان پردازش به صورت پویا بین تعدادی از برنامه های کاربردی‬
‫فعال تقسیم شود‪.‬‬

‫‪ -‬برنامه های کاربردی ساختاریافته‪ :‬به عنوان توسعه ای از اصول طراحی مدوالر و برنامه نویسی ساختاریافته‪ ،‬برخی از برنامه ها‬
‫را می توان به طور موثر به عنوان مجموعه ای از فرآیندهای همزمان برنامه ریزی کرد‪.‬‬

‫‪ -‬ساختار سیستم عامل‪ :‬مزایای ساختاری یکسانی در مورد برنامه های سیستم اعمال می شود و دیدیم که سیستم عامل ها خود‬
‫اغلب به عنوان مجموعه ای از فرآیندها یا رشته ها پیاده سازی می شوند‪.‬‬

‫به دلیل اهمیت این موضوع‪ ،‬چهار فصل و یک ضمیمه بر روی مسائل مربوط به همزمانی تمرکز دارند‪ .‬فصل های ‪ 5‬و ‪ 6‬به‬
‫همزمانی در سیستم های چندبرنامه ای و چند پردازشی می پردازد‪ .‬فصل ‪ 16‬و ‪ 18‬مسائل همزمانی مربوط به پردازش توزیع‬
‫شده را بررسی می کند‪.‬‬

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

‫سپس راه حل هایی را بررسی می کنیم که شامل انتظار مشغول نیستند و می توانند توسط سیستم عامل پشتیبانی شوند یا‬
‫توسط اجرارهای زبان اجرا شوند‪ .‬ما سه رویکرد را بررسی می کنیم‪ :‬سمافورها‪ ،‬مانیتورها‪ ،‬و ارسال پیام‪.‬‬

‫دو مسئله کالسیک به صورت همزمان برای نشان دادن مفاهیم و مقایسه رویکردهای ارائه شده در این فصل استفاده می شود‪.‬‬
‫مشکل تولید کننده‪/‬مصرف کننده در بخش ‪ 5.3‬معرفی شده و به عنوان مثال در حال اجرا استفاده می شود‪ .‬فصل با مشکل‬
‫خوانندگان‪/‬نویسندگان بسته می شود‪.‬‬

‫بحث ما در مورد همزمانی در فصل ‪ 6‬ادامه دارد و ما بحث در مورد مکانیسم های همزمانی سیستم های نمونه خود را تا پایان‬
‫آن فصل به تعویق می اندازیم‪ .‬ضمیمه ‪ A‬موضوعات اضافی در مورد همزمانی را پوشش می دهد‪ .‬جدول ‪ 5.1‬برخی از‬
‫اصطالحات کلیدی مرتبط با همزمانی را فهرست می کند‪ .‬مجموعهای از انیمیشنهایی که مفاهیم این فصل را نشان میدهند به‬

‫‪255‬‬
‫سیستم عامل های داخلی و اصول طراحی‪256.........................................................................................................................‬‬

‫صورت آنالین در دسترس هستند‪ .‬روی کره در حال چرخش در وب سایت این کتاب در ‪ WilliamStalings‬کلیک کنید‪.‬‬
‫‪ com/OS/OS7e.html‬برای دسترسی‪.‬‬

‫جدول ‪ 5.1‬برخی از اصطالحات کلیدی مرتبط با همزمانی‬

‫عملیات اتمی‬ ‫تابع یا عملی که به عنوان دنباله ای از یک یا چند دستورالعمل‬


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

‫‪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‬هر دو در حال اجرا هستند‪ ،‬هر کدام روی یک پردازنده جداگانه‪ .‬هر دو فرآیند فرآیند اکو را فراخوانی‬
‫می کنند‪.‬‬

‫‪ .2‬وقایع زیر رخ می دهد‪ .‬وقایع در یک خط به صورت موازی اتفاق می افتد‪:‬‬

‫‪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‬حافظه‪ :‬اکثر سیستم عامل ها از طرح حافظه مجازی استفاده می کنند‪ .‬موضوع در بخش سوم مورد بررسی قرار گرفته است‪.‬‬

‫فایل های ‪ :r‬در فصل ‪ 12‬مورد بحث قرار گرفت‪.‬‬

‫‪ r‬دستگاه های ورودی‪/‬خروجی‪ :‬در فصل ‪ 11‬مورد بحث قرار گرفت‪.‬‬

‫‪ .3‬سیستم عامل باید از داده ها و منابع فیزیکی هر فرآیند در برابر تداخل ناخواسته سایر فرآیندها محافظت کند‪ .‬این شامل‬
‫تکنیک هایی است که به حافظه‪ ،‬فایل ها و دستگاه های ورودی‪/‬خروجی مربوط می شود‪ .‬درمان کلی حفاظت در قسمت هفتم‬
‫یافت می شود‪.‬‬

‫‪ .4‬عملکرد یک فرآیند و خروجی تولید شده باید مستقل از سرعت اجرای آن نسبت به سرعت سایر فرآیندهای همزمان باشد‪.‬‬
‫این موضوع این فصل است‪.‬‬

‫برای درک اینکه چگونه می توان به موضوع استقالل سرعت پرداخت‪ ،‬باید به روش هایی که در آن فرآیندها می توانند تعامل‬
‫داشته باشند نگاه کنیم‪.‬‬

‫تعامل فرآیند‬

‫ما میتوانیم روشهای تعامل فرآیندها را بر اساس میزان آگاهی آنها از وجود یکدیگر طبقهبندی کنیم‪ .‬جدول ‪ 5.2‬سه درجه‬
‫ممکن از آگاهی را به اضافه پیامدهای هر یک فهرست می کند‪:‬‬

‫‪261‬‬
‫سیستم عامل های داخلی و اصول طراحی‪262.........................................................................................................................‬‬

‫‪ -‬فرآیندهای بی اطالع از یکدیگر‪ :‬اینها فرآیندهای مستقلی هستند که قرار نیست با هم کار کنند‪ .‬بهترین مثال برای این‬
‫وضعیت‪ ،‬برنامه ریزی چندگانه چندین فرآیند مستقل است‪ .‬اینها می توانند کارهای دسته ای یا جلسات تعاملی یا ترکیبی باشند‪.‬‬
‫اگرچه فرآیندها با هم کار نمی کنند‪ ،‬سیستم عامل باید نگران رقابت برای منابع باشد‪ .‬به عنوان مثال‪ ،‬دو برنامه مستقل ممکن‬
‫است هر دو بخواهند به یک دیسک یا فایل یا چاپگر دسترسی داشته باشند‪ .‬سیستم عامل باید این دسترسی ها را تنظیم کند‪.‬‬

‫‪ -‬فرآیندهایی که به طور غیرمستقیم از یکدیگر آگاه هستند‪ :‬اینها فرآیندهایی هستند که لزوماً توسط شناسه های پردازش‬
‫مربوطه خود از یکدیگر آگاه نیستند‪ ،‬اما دسترسی به برخی از شی ها‪ ،‬مانند بافر ‪ I/O‬را به اشتراک می گذارند‪ .‬چنین‬
‫فرآیندهایی همکاری در اشتراک شیء مشترک را نشان می دهند‪.‬‬

‫‪ -‬فرآیندهایی که مستقیماً از یکدیگر آگاه هستند‪ :‬اینها فرآیندهایی هستند که می توانند با شناسه فرآیند با یکدیگر ارتباط‬
‫برقرار کنند و برای کار مشترک روی برخی از فعالیت ها طراحی شده اند‪ .‬باز هم‪ ،‬چنین فرآیندهایی همکاری را نشان می دهند‪.‬‬
‫شرایط همیشه آنطور که در جدول ‪ 5.2‬پیشنهاد شده است واضح و روشن نخواهد بود‪ .‬در عوض‪ ،‬چندین فرآیند ممکن است‬
‫جنبههایی از رقابت و همکاری را نشان دهند‪ .‬با این وجود‪ ،‬بررسی هر یک از سه مورد در لیست قبلی به طور جداگانه و تعیین‬
‫پیامدهای آنها برای سیستم عامل مفید است‪.‬‬

‫جدول ‪ 5.2‬تعامل فرآیند‬

‫درجه آگاهی‬ ‫ارتباط‬ ‫تأثیری که یک فرآیند‬ ‫مشکالت کنترل بالقوه‬


‫بر دیگری دارد‬
‫فرآیندهایی که از یکدیگر‬ ‫رقابت‬ ‫‪r‬نتایج یک فرآیند‬ ‫‪r‬طرد متقابل‬
‫بی خبرند‬ ‫مستقل از عمل‬
‫دیگران‬
‫فرآیندهایی که به‬ ‫همکاری با اشتراک گذاری‬ ‫‪r‬زمانبندی فرآیند‬ ‫‪r‬وقفه منابع تجدید پذیر‬
‫طور غیرمستقیم از‬ ‫ممکن است تحت‬
‫یکدیگر آگاه هستند‬ ‫تأثیر قرار گیرد‬
‫به عنوان مثال‪ ،‬شی‬
‫مشترک‬
‫فرآیندها به طور مستقیم‬ ‫همکاری از طریق‬ ‫‪r‬نتایج یک فرآیند‬ ‫‪r‬گرسنگی‬
‫از یکدیگر آگاه هستند‬ ‫ارتباط‬ ‫ممکن است به‬
‫اصول ارتباطی در دسترس‬ ‫اطالعات به دست‬

‫‪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‬دسترسی دارند‪ ،‬مطلوب است که در هر زمان فقط یک فرآیند در بخش بحرانی آن باشد‪ .‬برای اعمال طرد متقابل‪ ،‬دو‬
‫عملکرد ارائه شده است‪ :‬بحرانی و خروجی‪ .‬هر تابع نام منبعی را که موضوع رقابت است به عنوان آرگومان می گیرد‪ .‬هر فرآیندی‬
‫که بخواهد وارد بخش بحرانی خود شود در حالی که فرآیند دیگری در بخش بحرانی خود است‪ ،‬برای همان منبع‪ ،‬منتظر می‬
‫ماند‪.‬‬

‫بررسی مکانیسم های خاص برای ارائه عملکردهای بحرانی و خروجی باقی مانده است‪ .‬در حال حاضر‪ ،‬ما این موضوع را به تعویق‬
‫می اندازیم در حالی که موارد دیگر تعامل فرآیند را در نظر می گیریم‪.‬‬

‫شکل ‪ 5.1‬تصویری از طرد متقابل‬

‫همکاری در میان فرآیندها از طریق اشتراک گذاری مورد همکاری از طریق اشتراک گذاری فرآیندهایی را پوشش می دهد که با‬
‫سایر فرآیندها بدون آگاهی صریح از آنها در تعامل هستند‪ .‬برای مثال‪ ،‬چندین فرآیند ممکن است به متغیرهای مشترک یا به‬
‫فایلها یا پایگاههای داده مشترک دسترسی داشته باشند‪ .‬فرآیندها ممکن است از داده های به اشتراک گذاشته شده بدون ارجاع‬

‫‪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‬بررسی شدهاند‪.‬‬

‫‪ 5.2‬محرومیت متقابل‪ :‬پشتیبانی سخت افزاری‬

‫در این بخش‪ ،‬به چندین رویکرد سخت افزاری جالب برای حذف متقابل نگاه می کنیم‪.‬‬

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

‫‪267‬‬
‫سیستم عامل های داخلی و اصول طراحی‪268.........................................................................................................................‬‬

‫این است که این رویکرد در معماری چند پردازنده کار نخواهد کرد‪ .‬هنگامی که رایانه شامل بیش از یک پردازنده باشد‪ ،‬ممکن‬
‫است و معمولی بیش از یک فرآیند در یک زمان اجرا شود‪ .‬در این مورد‪ ،‬وقفههای غیرفعال ضامن حذف متقابل نیستند‪.‬‬

‫دستورالعمل ماشین ویژه‬

‫در یک پیکربندی چند پردازنده‪ ،‬چندین پردازنده به یک حافظه اصلی مشترک دسترسی دارند‪ .‬در این مورد‪ ،‬رابطه ارباب و برده‬
‫وجود ندارد‪ .‬بلکه پردازشگرها به طور مستقل در یک رابطه همتا رفتار می کنند‪ .‬هیچ مکانیسم وقفه ای بین پردازنده ها وجود‬
‫ندارد که بتوان بر اساس آن حذف متقابل انجام شود‪.‬‬

‫در سطح سخت افزار‪ ،‬همانطور که ذکر شد‪ ،‬دسترسی به یک مکان حافظه‪ ،‬هر گونه دسترسی دیگر به همان مکان را مستثنی‬
‫می کند‪ .‬با این کار به عنوان پایه‪ ،‬طراحان پردازنده چندین دستورالعمل ماشینی را پیشنهاد کرده اند که دو عمل را به صورت‬
‫اتمی انجام می دهند‪ 2 ،‬مانند خواندن و نوشتن یا خواندن و آزمایش‪ ،‬یک مکان حافظه واحد با یک چرخه واکشی دستورالعمل‪.‬‬
‫در طول اجرای دستور‪ ،‬دسترسی به مکان حافظه برای هر دستور دیگری که به آن مکان ارجاع می دهد مسدود می شود‪.‬‬

‫در این بخش‪ ،‬ما به دو مورد از متداول ترین دستورالعمل های اجرا شده نگاه می کنیم‪ .‬موارد دیگر در ‪ RAYN86‬و‬
‫‪ STON93‬شرح داده شده است‪ .‬دستورالعمل مقایسه و مبادله دستورالعمل مقایسه و مبادله‪ ،‬که دستورالعمل مقایسه و مبادله‬
‫نیز نامیده می شود‪ ،‬می تواند به صورت زیر تعریف شود ‪:HERL90‬‬

‫این نسخه از دستورالعمل یک مکان حافظه *‪ word‬را در برابر یک مقدار آزمایشی ‪ testval‬بررسی می کند‪ .‬اگر مقدار فعلی‬
‫مکان حافظه ‪ testval‬باشد‪ ،‬با ‪ newval‬جایگزین می شود‪ .‬در غیر این صورت بدون تغییر باقی می ماند‪ .‬مقدار حافظه قدیمی‬
‫همیشه برگردانده می شود‪.‬‬

‫بنابراین‪ ،‬در صورتی که مقدار برگشتی با مقدار آزمایشی یکسان باشد‪ ،‬مکان حافظه به روز شده است‪ .‬بنابراین‪ ،‬این دستورالعمل‬
‫اتمی دارای دو بخش است‪ :‬مقایسه ای بین یک مقدار حافظه و یک مقدار آزمایشی انجام می شود‪ .‬اگر مقادیر یکسان باشند‪ ،‬یک‬
‫مبادله رخ می دهد‪ .‬کل تابع مقایسه و مبادله به صورت اتمی انجام می شود ‪ -‬یعنی در معرض وقفه نیست‪.‬‬

‫نسخه دیگری از این دستورالعمل یک مقدار بولی را برمیگرداند‪ :‬درست در صورتی که مبادله رخ داده باشد‪ .‬نادرست در غیر این‬
‫صورت برخی از نسخههای این دستورالعمل تقریباً در تمام خانوادههای پردازنده ‪ ،sparc ،IA64 ،x86‬سری ‪ z IBM‬و غیره‬
‫موجود است و اکثر سیستمعاملها از این دستورالعمل برای پشتیبانی از همزمانی استفاده میکنند‪.‬‬
‫‪268‬‬
‫سیستم عامل های داخلی و اصول طراحی‪269.........................................................................................................................‬‬

‫شکل ‪ a5.2‬یک پروتکل حذف متقابل بر اساس استفاده از این دستورالعمل را نشان می دهد‪ 3 .‬یک پیچ متغیر مشترک به ‪0‬‬
‫مقداردهی اولیه می شود‪ .‬تنها فرآیندی که ممکن است وارد بخش بحرانی آن شود‪ ،‬فرآیندی است که پیچ را برابر با ‪ 0‬پیدا کند‪.‬‬
‫همه فرآیندهای دیگر تالش می کنند برای ورود به بخش بحرانی خود به حالت انتظار مشغول شوید‪ .‬اصطالح انتظار مشغول یا‬
‫انتظار چرخشی به تکنیکی اشاره دارد که در آن یک فرآیند تا زمانی که مجوز ورود به بخش بحرانی خود را دریافت نکند نمی‬
‫تواند کاری انجام دهد اما به اجرای یک دستورالعمل یا مجموعه ای از دستورالعمل ها ادامه می دهد که متغیر مناسب را برای به‬
‫دست آوردن ورودی آزمایش می کند‪ .‬هنگامی که یک فرآیند بخش بحرانی خود را ترک می کند‪ ،‬پیچ را به ‪ 0‬بازنشانی می کند‪.‬‬
‫در این مرحله تنها به یکی از فرآیندهای انتظار دسترسی به بخش بحرانی آن داده شده است‪ .‬انتخاب فرآیند بستگی به این دارد‬
‫که کدام فرآیند بعداً دستور مقایسه و تعویض را اجرا می کند‪.‬‬

‫(الف) مقایسه و تعویض دستورالعمل‬ ‫(ب) دستورالعمل مبادله‬


‫شکل ‪ 5.2‬پشتیبانی سخت افزاری برای حذف متقابل‬

‫دستورالعمل ‪ EXCHANGE‬دستورالعمل مبادله را می توان به صورت زیر تعریف کرد‪:‬‬

‫این دستورالعمل محتویات یک ثبات را با یک مکان حافظه مبادله می کند‪ .‬هر دو معماری ‪ 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‬مورد بحث قرار گرفته است‪.‬‬

‫جدول ‪ 5.3‬مکانیسم های همزمانی مشترک‬

‫سمافور‬ ‫یک مقدار صحیح که برای سیگنال دهی در بین فرآیندها استفاده می شود‪.‬‬
‫فقط سه عملیات را می توان روی یک سمافور انجام داد که همه آنها اتمی‬
‫هستند‪ :‬مقداردهی اولیه‪ ،‬کاهش و افزایش‪ .‬عملیات کاهش ممکن است منجر به‬
‫مسدود شدن یک فرآیند شود و عملیات افزایشی ممکن است منجر به رفع‬
‫انسداد یک فرآیند شود‪ .‬همچنین به عنوان سمافور شمارش یا سمافور عمومی‬
‫نیز شناخته می شود‪.‬‬
‫سمافور باینری‬ ‫سمافوری که فقط مقادیر ‪ 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‬در صورت وجود‪ ،‬رفع انسداد می شود‪.‬‬

‫به غیر از این سه عملیات‪ ،‬هیچ راهی برای بازرسی یا دستکاری سمافورها وجود ندارد‪.‬‬

‫این عملیات را به شرح زیر توضیح می دهیم‪ .‬برای شروع‪ ،‬سمافور دارای ارزش صفر یا مثبت است‪ .‬اگر مقدار مثبت باشد‪ ،‬آن‬
‫مقدار برابر با تعداد فرآیندهایی است که می توانند یک انتظار صادر کنند و بالفاصله به اجرا ادامه دهند‪ .‬اگر مقدار صفر باشد‪ ،‬یا‬
‫با مقداردهی اولیه یا به دلیل اینکه تعدادی از فرآیندهای برابر با مقدار اولیه سمافور یک انتظار صادر کردهاند‪ ،‬فرآیند بعدی برای‬
‫صدور انتظار مسدود میشود و مقدار سمافور منفی میشود‪ .‬هر انتظار بعدی‪ ،‬مقدار سمافور را بیشتر به قلمرو منهای هدایت می‬
‫کند‪ .‬مقدار منفی برابر با تعداد فرآیندهایی است که در انتظار رفع انسداد هستند‪ .‬هنگامی که مقدار سمافور منفی است‪ ،‬هر‬
‫سیگنال یکی از فرآیندهای انتظار را باز می کند‪.‬‬

‫‪ DOWN08‬به سه پیامد جالب تعریف سمافور اشاره می کند‪:‬‬

‫‪ -‬به طور کلی‪ ،‬هیچ راهی وجود ندارد که قبل از اینکه فرآیند یک سمافور را کاهش دهد‪ ،‬مشخص شود که آیا مسدود می شود یا‬
‫خیر‪.‬‬

‫شکل ‪ 5.3‬تعریف سمافورهای اولیه‬


‫‪273‬‬
‫سیستم عامل های داخلی و اصول طراحی‪274.........................................................................................................................‬‬

‫‪ -‬پس از اینکه یک فرآیند یک سمافور را افزایش داد و فرآیند دیگری بیدار شد‪ ،‬هر دو فرآیند به طور همزمان به اجرا ادامه‬
‫میدهند‪ .‬هیچ راهی برای دانستن اینکه کدام فرآیند‪ ،‬در صورت وجود‪ ،‬فوراً در یک سیستم تک پردازنده ادامه خواهد یافت‪،‬‬
‫وجود ندارد‪.‬‬

‫‪ -‬وقتی به یک سمافور سیگنال می دهید‪ ،‬لزوماً نمی دانید که آیا فرآیند دیگری در انتظار است یا خیر‪ ،‬بنابراین تعداد فرآیندهای‬
‫مسدود شده ممکن است صفر یا یک باشد‪.‬‬

‫شکل ‪ 5.3‬تعریف رسمی تری از اصول اولیه برای سمافورها را نشان می دهد‪ .‬اولیه ‪ semWait‬و ‪ semSignal‬اتمی فرض می‬
‫شوند‪ .‬یک نسخه محدودتر‪ ،‬معروف به سمافور باینری‪ ،‬در شکل ‪ 5.4‬تعریف شده است‪ .‬یک سمافور باینری ممکن است فقط‬
‫مقادیر ‪ 0‬و ‪ 1‬را دریافت کند و با سه عملیات زیر قابل تعریف است‪:‬‬

‫‪ .1‬یک سمافور باینری ممکن است به ‪ 0‬یا ‪ 1‬مقداردهی شود‪.‬‬

‫‪ .2‬عملیات ‪ semWaitB‬مقدار سمافور را بررسی می کند‪ .‬اگر مقدار صفر باشد‪ ،‬فرآیند اجرای ‪ semWaitB‬مسدود می شود‪.‬‬
‫اگر مقدار یک باشد‪ ،‬مقدار به صفر تغییر میکند و روند اجرا ادامه مییابد‪.‬‬

‫‪ .3‬عملیات ‪ semSignalB‬بررسی می کند که آیا هر فرآیندی در این سمافور مسدود شده است مقدار سمافور برابر با ‪ 0‬است‪.‬‬
‫اگر چنین است‪ ،‬پس فرآیندی که توسط یک عملیات ‪ semWaitB‬مسدود شده است‪ ،‬مسدود می شود‪ .‬اگر هیچ فرآیندی‬
‫مسدود نشود‪ ،‬مقدار سمافور روی یک تنظیم می شود‪.‬‬

‫در اصل‪ ،‬اجرای سمافور باینری باید آسانتر باشد و میتوان نشان داد که قدرت بیانی مشابه سمافور عمومی دارد مسئله ‪ 5.16‬را‬
‫ببینید‪ .‬برای مقایسه دو نوع سمافور‪ ،‬سمافور غیر دودویی اغلب به عنوان سمافور شمارش یا سمافور عمومی شناخته میشود‪.‬‬

‫‪274‬‬
‫سیستم عامل های داخلی و اصول طراحی‪275.........................................................................................................................‬‬

‫شکل ‪ 5.5‬مثالی از مکانیسم سمافور‬

‫دوباره به صف آماده می پیوندد‪ .‬سپس ‪ 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‬سمافورهای قوی رهایی از گرسنگی را تضمین می کنند‪ ،‬در حالی که‬
‫سمافورهای ضعیف این کار را نمی کنند‪ .‬ما سمافورهای قوی را فرض می کنیم زیرا راحت تر هستند و این شکل سمافور است‬
‫که معموالً توسط اپراتور‪ -‬ارائه می شود‪.‬‬

‫شکل ‪ 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.7‬فرآیندهای دسترسی به داده های مشترک محافظت شده توسط سمافور‬

‫برنامه شکل ‪ 5.6‬به همان اندازه می تواند شرایطی را که بیش از یک فرآیند در بخش بحرانی آن در یک زمان مجاز باشد به‬
‫خوبی برطرف کند‪ .‬این نیاز به سادگی با مقداردهی اولیه سمافور به مقدار مشخص شده برآورده می شود‪ .‬بنابراین‪ ،‬در هر زمان‪،‬‬
‫مقدار ‪ s.count‬را می توان به صورت زیر تفسیر کرد‪:‬‬

‫‪ s.count ≥ 0: s.count-‬تعداد پردازش هایی است که می توانند ‪ semWait s‬را بدون تعلیق اجرا کنند اگر هیچ‬
‫‪ semSignal s‬در این فاصله اجرا نشود‪ .‬چنین موقعیت هایی به سمافورها اجازه می دهد تا از همگام سازی و همچنین طرد‬
‫متقابل پشتیبانی کنند‪.‬‬

‫‪ :s.count < 0-‬بزرگی ‪ s.count‬تعداد فرآیندهای معلق در صف‪.‬‬

‫مشکل تولید کننده‪/‬مصرف کننده‬

‫اکنون یکی از رایج ترین مشکالتی که در پردازش همزمان با آن مواجه است را بررسی می کنیم‪ :‬مشکل تولیدکننده‪/‬مصرف‬
‫کننده‪ .‬بیانیه کلی این است‪ :‬یک یا چند تولید کننده وجود دارند که انواعی از داده ها سوابق‪ ،‬کاراکترها را تولید می کنند و آنها‬
‫را در یک بافر قرار می دهند‪ .‬یک مصرف کننده وجود دارد که اقالم را یکی یکی از بافر خارج می کند‪ .‬سیستم باید برای‬
‫جلوگیری از همپوشانی عملیات بافر محدود شود‪ .‬یعنی فقط یک عامل تولید کننده یا مصرف کننده می تواند در هر زمان به بافر‬

‫‪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.8‬بافر بی نهایت برای مشکل تولید کننده‪/‬مصرف کننده‬

‫یک راه حل برای این مشکل‪ ،‬معرفی یک متغیر کمکی است که می تواند در بخش بحرانی مصرف کننده تنظیم شود تا در آینده‬
‫استفاده شود‪ .‬این در شکل ‪ 5.10‬نشان داده شده است‪ .‬یک ردپای دقیق از منطق باید شما را متقاعد کند که دیگر وقفه نمی‬
‫تواند رخ دهد‪ .‬همانطور که در شکل ‪ 5.11‬نشان داده شده است‪ ،‬اگر از سمافورهای عمومی که سمافورهای شمارش نیز نامیده‬
‫می شوند استفاده شود‪ ،‬می توان یک راه حل تا حدودی تمیزتر به دست آورد‪.‬‬

‫شکل ‪ 5.9‬یک راه حل نادرست برای مشکل تولید کننده‪/‬مصرف کننده بافر بی نهایت با استفاده از سمافورهای باینری‬

‫‪279‬‬
280.........................................................................................................................‫سیستم عامل های داخلی و اصول طراحی‬

5.9 ‫ سناریوی ممکن برای برنامه شکل‬5.4 ‫جدول‬

‫تهیه کننده‬ ‫مصرف کننده‬ s n ‫تاخیر‬


1 1 0 0
2 semWaitB 0 0 0
s
3 n++ 0 1 0
4 if n==1
semSignalBdela 0 1 1
y
5 semSignal 1 1 1
Bs
6 semWaitBde 1 1 0
lay
7 semWaitBs 0 1 0
8 n−− 0 0 0
9 semSignalBs 1 0 0
10 semWaitB 0 0 0
s
11 n++ 0 1 0
12 if n==1
semSignalBdela 0 1 1
y
13 semSignal 1 1 1
Bs
14 if n==0
semWaitBdela 1 1 1
y
15 semWaitBs 0 1 1
16 n−− 0 0 1
17 semSignalBs 1 0 1
18 if n==0
semWaitBdela 1 0 0

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‬و مقادیر اشاره گر باید مدول اندازه‬
‫بافر بیان شوند‪ .‬روابط زیر برقرار است‪:‬‬

‫مسدود‬ ‫رفع انسداد در‪:‬‬


‫کردن‪:‬‬
‫سازنده‪ :‬در بافر کامل قرار دهید‬ ‫مصرف کننده‪ :‬مورد‬
‫درج شده است‬
‫مصرف کننده‪ :‬از بافر خالی حذف‬ ‫سازنده‪ :‬مورد حذف شد‬
‫کنید‬
‫توابع تولید کننده و مصرف کننده را می توان به صورت زیر بیان کرد متغیر ورودی و خروجی به ‪ 0‬مقداردهی اولیه می شود و ‪n‬‬
‫اندازه بافر است‪:‬‬

‫شکل ‪ 5.11‬راه حلی برای مشکل تولیدکننده‪/‬مصرف کننده بافر نامحدود با استفاده از سمافورها‬

‫شکل ‪ 5.13‬راه حلی را با استفاده از سمافورهای عمومی نشان می دهد‪ .‬سمافور ‪ e‬برای پیگیری تعداد فضاهای خالی اضافه شده‬
‫است‪.‬‬

‫‪282‬‬
‫سیستم عامل های داخلی و اصول طراحی‪283.........................................................................................................................‬‬

‫مثال آموزنده دیگر در استفاده از سمافورها‪ ،‬مشکل آرایشگاه است که در ضمیمه ‪ A‬توضیح داده شده است‪ .‬ضمیمه ‪ A‬همچنین‬
‫شامل مثال های دیگری از مشکل شرایط مسابقه هنگام استفاده از سمافورها است‪.‬‬

‫شکل ‪ 5.12‬بافر دایره ای محدود برای مشکل تولید کننده‪/‬مصرف کننده‬

‫شکل ‪ 5.13‬راه حلی برای مشکل تولیدکننده‪/‬مصرف کننده بافر محدود با استفاده از سمافورها‬

‫پیاده سازی سمافورها‬

‫همانطور که قبال ذکر شد‪ ،‬ضروری است که عملیات ‪ semWait‬و ‪ semSignal‬به عنوان اولیه اتمی اجرا شوند‪ .‬یکی از راه های‬
‫واضح پیاده سازی آنها در سخت افزار یا سیستم عامل است‪ .‬در صورت عدم موفقیت‪ ،‬طرح های مختلفی پیشنهاد شده است‪.‬‬
‫ماهیت مشکل‪ ،‬حذف متقابل است‪ :‬فقط یک فرآیند در هر زمان ممکن است یک سمافور را با عملیات ‪ semWait‬یا‬
‫‪ semSignal‬دستکاری کند‪ .‬بنابراین‪ ،‬هر یک از طرح های نرم افزاری‪ ،‬مانند الگوریتم دکر یا الگوریتم پترسون پیوست ‪ ،A‬می‬
‫تواند مورد استفاده قرار گیرد‪ .‬این مستلزم سربار پردازش قابل توجهی است‪.‬‬

‫‪283‬‬
‫سیستم عامل های داخلی و اصول طراحی‪284.........................................................................................................................‬‬

‫جایگزین دیگر استفاده از یکی از طرحهای سختافزاری برای حذف متقابل است‪ .‬برای مثال‪ ،‬شکل ‪ a5.14‬استفاده از‬
‫دستورالعمل مقایسه و تعویض را نشان می دهد‪ .‬در این پیاده سازی‪ ،‬سمافور دوباره یک ساختار است‪ ،‬مانند شکل ‪ ،5.3‬اما اکنون‬
‫شامل یک جزء صحیح جدید‪ s.flag ،‬است‪ .‬مسلماً‪ ،‬این شامل نوعی انتظار مشغول است‪ .‬با این حال‪ ،‬عملیات ‪ semWait‬و‬
‫‪ semSignal‬نسبتاً کوتاه هستند‪ ،‬بنابراین میزان انتظار مشغول باید جزئی باشد‪ .‬همانطور که در شکل ‪ b5.14‬نشان داده شده‬
‫است‪ ،‬برای یک سیستم تک پردازنده‪ ،‬می توان از وقفه ها برای مدت زمان عملیات ‪ semWait‬یا ‪ semSignal‬جلوگیری کرد‪.‬‬
‫بار دیگر‪ ،‬مدت نسبتا کوتاه این عملیات به معنی منطقی بودن این رویکرد است‪.‬‬

‫شکل ‪ 5.14‬دو پیاده سازی احتمالی سمافورها‬

‫‪ 5.4‬مانیتور‬

‫سمافورها ابزاری بدوی و در عین حال قدرتمند و انعطاف پذیر برای اعمال طرد متقابل و برای هماهنگ کردن فرآیندها ارائه می‬
‫کنند‪ .‬با این حال‪ ،‬همانطور که شکل ‪ 5.9‬نشان می دهد‪ ،‬ممکن است تولید یک برنامه صحیح با استفاده از سمافورها دشوار‬
‫باشد‪ .‬مشکل این است که عملیات ‪ sem-Wit‬و ‪ semSignal‬ممکن است در سراسر یک برنامه پراکنده شوند و دیدن اثر کلی‬
‫این عملیات بر روی سمافورهایی که آنها را تحت تأثیر قرار می دهند آسان نیست‪.‬‬

‫مانیتور یک ساختار به زبان برنامهنویسی است که عملکردی معادل عملکرد سمافورها را ارائه میکند و کنترل آن آسانتر است‪.‬‬
‫این مفهوم ابتدا به طور رسمی در ‪ HOAR74‬تعریف شد‪ .‬ساختار مانیتور در تعدادی از زبان های برنامه نویسی‪ ،‬از جمله‬
‫پاسکال همزمان‪ ،‬پاسکال‪-‬پالس‪ ،‬مدوال‪ ،2-‬مدول‪ 3-‬و جاوا پیاده سازی شده است‪ .‬همچنین به عنوان کتابخانه برنامه پیاده سازی‬
‫شده است‪ .‬این به برنامه نویسان اجازه می دهد تا قفل مانیتور را روی هر شیئی قرار دهند‪ .‬به طور خاص‪ ،‬برای چیزی مانند یک‬
‫لیست پیوندی‪ ،‬ممکن است بخواهید همه لیست های پیوندی را با یک قفل قفل کنید‪ ،‬یا یک قفل برای هر لیست داشته باشید‪،‬‬

‫‪284‬‬
‫سیستم عامل های داخلی و اصول طراحی‪285.........................................................................................................................‬‬

‫یا یک قفل برای هر عنصر از هر لیست داشته باشید‪ .‬ما با نگاهی به نسخه ‪ Hoare‬شروع می کنیم و سپس یک اصالح را بررسی‬
‫می کنیم‪.‬‬

‫مانیتور با سیگنال‬

‫مانیتور یک ماژول نرم افزاری است که از یک یا چند رویه‪ ،‬یک توالی اولیه سازی و داده های محلی تشکیل شده است‪ .‬ویژگی‬
‫های اصلی یک مانیتور به شرح زیر است‪:‬‬

‫‪ .1‬متغیرهای داده محلی فقط با رویه های مانیتور قابل دسترسی هستند و نه با هیچ روش خارجی‪.‬‬

‫‪ .2‬یک فرآیند با فراخوانی یکی از رویه های آن وارد مانیتور می شود‪.‬‬

‫‪ .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.........................................................................................................................‬‬

‫شکل ‪ 5.15‬ساختار یک مانیتور‬

‫این مثال به تقسیم مسئولیت با مانیتور در مقایسه با سمافورها اشاره می کند‪ .‬در مورد مانیتورها‪ ،‬ساختار مانیتور خود باعث‬
‫حذف متقابل می شود‪ :‬امکان دسترسی تولیدکننده و مصرف کننده به طور همزمان به بافر وجود ندارد‪ .‬با این حال‪ ،‬برنامه نویس‬
‫باید ‪ cwait‬و ‪ csignal primitives‬مناسب را در داخل مانیتور قرار دهد تا فرآیندها از قرار دادن موارد در یک بافر کامل یا‬
‫حذف آنها از یک بافر خالی جلوگیری کنند‪ .‬در مورد سمافورها‪ ،‬هم حذف متقابل و هم همگام سازی به عهده برنامه نویس است‪.‬‬

‫‪287‬‬
‫سیستم عامل های داخلی و اصول طراحی‪288.........................................................................................................................‬‬

‫شکل ‪ 5.16‬راه حلی برای مشکل تولیدکننده‪/‬مصرف کننده بافر محدود با استفاده از مانیتور‬

‫توجه داشته باشید که در شکل ‪ ،5.16‬یک فرآیند بالفاصله پس از اجرای تابع ‪ csignal‬از مانیتور خارج می شود‪ .‬اگر سیگنال‬
‫‪ csignal‬در پایان پروسه اتفاق نیفتد‪ ،‬به پیشنهاد ‪ ،Hoare‬فرآیند صدور سیگنال مسدود میشود تا مانیتور در دسترس باشد و‬
‫تا زمانی که مانیتور آزاد شود در یک صف قرار میگیرد‪ .‬یک امکان در این مرحله‪ ،‬قرار دادن فرآیند مسدود شده در صف ورودی‬
‫است‪ ،‬به طوری که باید برای دسترسی با سایر فرآیندهایی که هنوز وارد مانیتور نشده اند رقابت کند‪ .‬با این حال‪ ،‬از آنجا که یک‬
‫فرآیند مسدود شده در یک تابع ‪ csignal‬قبالً تا حدی وظیفه خود را در مانیتور انجام داده است‪ ،‬منطقی است که با تنظیم یک‬
‫صف فوری جداگانه‪ ،‬به این فرآیند نسبت به فرآیندهای تازه وارد اولویت داده شود شکل ‪ .5.15‬یکی از زبانهایی که از مانیتورها‬
‫استفاده میکند‪ ،‬پاسکال همزمان‪ ،‬نیاز دارد که ‪ csignal‬فقط به عنوان آخرین عملیات اجرا شده توسط یک رویه مانیتور ظاهر‬
‫شود‪ .‬اگر هیچ فرآیندی در شرایط ‪ x‬منتظر نمی ماند‪ ،‬سپس ‪ csignal‬اجرا می شود ‪ x‬تأثیری ندارد‪.‬‬

‫‪288‬‬
‫سیستم عامل های داخلی و اصول طراحی‪289.........................................................................................................................‬‬

‫مانند سمافورها‪ ،‬ممکن است در عملکرد همگام سازی مانیتورها اشتباه شود‪ .‬برای مثال‪ ،‬اگر یکی از توابع ‪ csignal‬در مانیتور‬
‫بافر محدود حذف شود‪ ،‬فرآیندهایی که وارد صف شرط مربوطه می شوند به طور دائم قطع می شوند‪ .‬مزیتی که مانیتورها نسبت‬
‫به سمافورها دارند این است که تمام عملکردهای همگام سازی به نمایشگر محدود می شوند‪.‬‬

‫بنابراین‪ ،‬تأیید اینکه همگام سازی به درستی انجام شده است و تشخیص اشکال آسان تر است‪ .‬عالوه بر این‪ ،‬هنگامی که یک‬
‫مانیتور به درستی برنامه ریزی شد‪ ،‬دسترسی به منبع محافظت شده برای دسترسی از تمام فرآیندها صحیح است‪ .‬در مقابل‪ ،‬با‬
‫سمافورها‪ ،‬دسترسی به منابع تنها در صورتی صحیح است که تمام فرآیندهایی که به منبع دسترسی دارند به درستی برنامه‬
‫ریزی شده باشند‪.‬‬

‫مدل جایگزین مانیتور با ‪ Notify‬و ‪Broadcast‬‬

‫تعریف ‪ 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‬مرتبط شود‪ ،‬یک تایمر نگهبان مرتبط با هر شرط اولیه است‪ .‬روندی که بوده است انتظار برای حداکثر‬
‫فاصله زمانی در حالت آماده قرار می گیرد‪ ،‬صرف نظر از اینکه آیا این شرایط اطالع داده شده است یا خیر‪ .‬هنگامی که فعال می‬
‫شود‪ ،‬فرآیند شرایط را بررسی می کند و در صورت برآورده شدن شرایط ادامه می یابد‪ .‬مهلت زمانی از گرسنگی نامحدود یک‬
‫فرآیند در صورتی که برخی از فرآیندهای دیگر قبل از سیگنال دادن به یک شرط با شکست مواجه شوند‪ ،‬جلوگیری می کند‪.‬‬

‫شکل ‪ 5.17‬کد مانیتور بافر محدود برای مانیتور ‪Mesa‬‬

‫با این قاعده که یک فرآیند به جای فعال سازی مجدد اجباری اطالع رسانی می شود‪ ،‬می توان یک ‪ cbroadcast‬اولیه را به‬
‫رپرتوار اضافه کرد‪ .‬پخش باعث می شود تمام فرآیندهای در انتظار یک شرط در حالت آماده قرار بگیرند‪ .‬این در شرایطی راحت‬
‫است که یک فرآیند نمی داند چند فرآیند دیگر باید دوباره فعال شوند‪ .‬به عنوان مثال‪ ،‬در برنامه تولیدکننده‪/‬مصرف کننده‪ ،‬فرض‬
‫کنید که هر دو تابع ‪ append‬و ‪ take‬می توانند برای بلوک های طول متغیر کاراکترها اعمال شوند‪ .‬در این صورت‪ ،‬اگر‬
‫تولیدکننده بلوکی از کاراکترها را به بافر اضافه کند‪ ،‬نیازی نیست بداند هر مصرف کننده منتظر چه تعداد کاراکتر را برای مصرف‬
‫آماده کرده است‪ .‬این به سادگی یک ‪ Cbroadcast‬صادر می کند و همه فرآیندهای انتظار برای تالش مجدد هشدار داده می‬
‫شوند‪ .‬عالوه بر این‪ ،‬زمانی که یک فرآیند مشکل داشته باشد‪ ،‬می توان از یک پخش استفاده کرد‪.‬‬

‫بررسی دقیق اینکه کدام فرآیند دیگر را دوباره فعال کنید‪ .‬یک مثال خوب یک مدیر حافظه است‪ .‬مدیر دارای ‪ j‬بایت رایگان‬
‫است‪ .‬یک فرآیند یک ‪ K‬بایت اضافی را آزاد می کند‪ ،‬اما نمی داند کدام فرآیند انتظار می تواند با مجموع ‪ k + j‬بایت ادامه یابد‪.‬‬
‫از این رو از پخش استفاده می کند و همه فرآیندها خودشان بررسی می کنند که آیا حافظه کافی وجود دارد یا خیر‪ .‬مزیت‬

‫‪290‬‬
‫سیستم عامل های داخلی و اصول طراحی‪291.........................................................................................................................‬‬

‫نمایشگرهای ‪ Lampson/Redell‬نسبت به مانیتورهای ‪ Hoare‬این است که رویکرد ‪ Lampson/Redell‬کمتر مستعد خطا‬


‫است‪ .‬در رویکرد المپسون‪/‬ردل‪ ،‬از آنجایی که هر رویه پس از سیگنالدهی‪ ،‬متغیر مانیتور را بررسی میکند‪ ،‬با استفاده از ساختار‬
‫‪ ،while‬یک فرآیند میتواند بدون ایجاد خطایی در برنامه سیگنالدهی شده سیگنالدهی یا پخش نادرست داشته باشد‪ .‬برنامه‬
‫سیگنال داده شده متغیر مربوطه را بررسی می کند و در صورت عدم رعایت شرایط مورد نظر‪ ،‬به انتظار ادامه می دهد‪.‬‬

‫مزیت دیگر مانیتور ‪ 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.........................................................................................................................‬‬

‫فراهم می کند‪ .‬برای برنامههایی که قرار است پیام یا اطالعاتی به مجموعهای از فرآیندها پخش شود مفید است‪ .‬یک رابطه چند‬
‫به چند به چندین فرآیند سرور اجازه می دهد تا خدمات همزمان را به چندین مشتری ارائه دهند‪.‬‬

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

‫شکل ‪ 5.18‬ارتباطات فرآیند غیرمستقیم‬

‫فرمت پیام‬

‫قالب پیام بستگی به اهداف تسهیالت پیام رسانی و اینکه آیا این تسهیالت روی یک کامپیوتر واحد اجرا می شود یا بر روی یک‬
‫سیستم توزیع شده بستگی دارد‪ .‬برای برخی از سیستم عامل ها‪ ،‬طراحان پیام های کوتاه و با طول ثابت را برای به حداقل‬
‫رساندن هزینه پردازش و ذخیره سازی ترجیح می دهند‪ .‬اگر قرار است مقدار زیادی از داده ارسال شود‪ ،‬داده ها را می توان در‬
‫یک فایل قرار داد و پیام به سادگی به آن فایل ارجاع می دهد‪ .‬یک رویکرد انعطاف پذیرتر اجازه دادن به پیام های با طول متغیر‬
‫است‪.‬‬

‫‪295‬‬
‫سیستم عامل های داخلی و اصول طراحی‪296.........................................................................................................................‬‬

‫شکل ‪ 5.19‬یک قالب پیام معمولی را برای سیستم عامل هایی نشان می دهد که از پیام های با طول متغیر پشتیبانی می کنند‪.‬‬
‫پیام به دو بخش تقسیم می شود‪ :‬سربرگ که حاوی اطالعاتی در مورد پیام است و بدنه ای که حاوی محتوای واقعی پیام است‪.‬‬
‫هدر ممکن است حاوی شناسایی منبع و مقصد مورد نظر پیام‪ ،‬یک زمینه طول‪ ،‬و یک زمینه نوع برای تمایز بین انواع مختلف‬
‫پیام باشد‪ .‬همچنین ممکن است اطالعات کنترلی دیگری مانند یک زمینه اشاره گر وجود داشته باشد تا بتوان لیست پیوندی از‬
‫پیام ها را ایجاد کرد‪ .‬یک شماره توالی‪ ،‬برای پیگیری تعداد و ترتیب پیامهای ارسال شده بین منبع و مقصد‪.‬‬

‫شکل ‪ 5.19‬پیام عمومی فرمت‬

‫نظم و انضباط صف‬

‫سادهترین رشته صفبندی‪ ،‬اولین در اول خروج است‪ ،‬اما اگر برخی از پیامها از سایر پیامها فوریتر باشند‪ ،‬ممکن است این کافی‬
‫نباشد‪ .‬یک جایگزین این است که امکان تعیین اولویت پیام‪ ،‬بر اساس نوع پیام یا با تعیین توسط فرستنده فراهم شود‪ .‬گزینه‬
‫دیگر این است که به گیرنده اجازه دهید صف پیام را بررسی کند و پیام بعدی را انتخاب کند‪.‬‬

‫طرد متقابل‬

‫شکل ‪ 5.20‬روشی را نشان می دهد که در آن می توان از ارسال پیام برای اعمال طرد متقابل استفاده کرد شکل های ‪،5.2 ،5.1‬‬
‫و ‪ 5.6‬را مقایسه کنید‪ .‬ما استفاده از مسدود کننده دریافت اولیه و ‪ nonblocking‬ارسال اولیه را فرض می کنیم‪ .‬مجموعهای از‬
‫فرآیندهای همزمان یک صندوق پستی‪ ،‬صندوقی را به اشتراک میگذارند که همه فرآیندها میتوانند از آن برای ارسال و دریافت‬
‫استفاده کنند‪ .‬صندوق پستی به گونه ای تنظیم شده است که حاوی یک پیام واحد با محتوای پوچ باشد‪ .‬فرآیندی که مایل به‬
‫ورود به بخش حیاتی خود است ابتدا سعی می کند پیامی را دریافت کند‪ .‬اگر صندوق پستی خالی باشد‪ ،‬فرآیند مسدود شده‬
‫است‪ .‬هنگامی که یک فرآیند پیام را دریافت کرد‪ ،‬بخش حیاتی خود را انجام می دهد و سپس پیام را دوباره در صندوق پستی‬
‫قرار می دهد‪ .‬بنابراین‪ ،‬پیام به عنوان نشانه ای عمل می کند که از فرآیندی به فرآیند دیگر منتقل می شود‪.‬‬

‫‪296‬‬
‫سیستم عامل های داخلی و اصول طراحی‪297.........................................................................................................................‬‬

‫شکل ‪ 5.20‬محرومیت متقابل با استفاده از پیام ها‬

‫راه حل قبلی فرض می کند که اگر بیش از یک فرآیند عملیات دریافت را همزمان انجام دهند‪ ،‬آنگاه‪:‬‬

‫‪ -‬اگر پیامی وجود داشته باشد‪ ،‬فقط به یک فرآیند تحویل داده می شود و بقیه مسدود می شوند یا‬

‫‪ -‬اگر صف پیام خالی باشد‪ ،‬تمام فرآیندها مسدود می شوند‪ .‬هنگامی که یک پیام در دسترس است‪ ،‬تنها یک فرآیند مسدود شده‬
‫فعال می شود و به آن پیام داده می شود‪ .‬این مفروضات تقریباً در مورد تمام امکانات ارسال پیام صادق است‪.‬‬

‫به عنوان مثالی از استفاده از ارسال پیام‪ ،‬شکل ‪ 5.21‬راه حلی برای مشکل تولیدکننده‪/‬مصرف کننده بافر محدود است‪ .‬با استفاده‬
‫از قدرت حذف متقابل اساسی در ارسال پیام‪ ،‬مشکل را میتوان با ساختار الگوریتمی مشابه شکل ‪ 5.13‬حل کرد‪ .‬در عوض‪،‬‬
‫برنامه شکل ‪ 5.21‬از قابلیت ارسال پیام برای ارسال داده ها عالوه بر سیگنال ها استفاده می کند‪ .‬از دو صندوق پستی استفاده‬
‫می شود‪ .‬همانطور که تولید کننده داده ها را تولید می کند‪ ،‬به عنوان پیام به صندوق پست ارسال می شود که ممکن است‬
‫مصرف شود‪ .‬تا زمانی که حداقل یک پیام در آن صندوق پستی وجود داشته باشد‪ ،‬مصرف کننده می تواند مصرف کند‪ .‬بنابراین‬
‫ممکن است مصرف به عنوان بافر عمل می کند‪ .‬داده ها در بافر به صورت صفی از پیام ها سازماندهی می شوند‪" .‬اندازه" بافر‬
‫توسط ظرفیت متغیر جهانی تعیین می شود‪ .‬در ابتدا‪ ،‬صندوق پستی ‪ mayproduce‬با تعدادی پیام پوچ برابر با ظرفیت بافر پر‬
‫می شود‪ .‬تعداد پیام ها در ‪ mayproduce‬با هر تولید کاهش می یابد و با هر مصرف افزایش می یابد‪.‬‬

‫این رویکرد کامالً منعطف است‪ .‬ممکن است چندین تولید کننده و مصرف کننده وجود داشته باشد‪ ،‬به شرطی که همه به هر دو‬
‫صندوق پستی دسترسی داشته باشند‪ .‬حتی ممکن است این سیستم با تمام فرآیندهای تولید کننده و صندوق پستی ممکن در‬
‫یک سایت و تمام فرآیندهای مصرف کننده و صندوق پستی ممکن است در سایت دیگری توزیع شود‪.‬‬

‫‪297‬‬
‫سیستم عامل های داخلی و اصول طراحی‪298.........................................................................................................................‬‬

‫شکل ‪ 5.21‬راه حلی برای مشکل تولیدکننده‪/‬مصرف کننده بافر محدود با استفاده از پیام ها‬

‫‪ 5.6‬مشکل خوانندگان‪/‬نویسندگان‬

‫در پرداختن به طراحی مکانیسم های همگام سازی و همزمانی‪ ،‬مفید است که بتوانیم مسئله در دست را به مسائل شناخته شده‬
‫مرتبط کنیم و بتوانیم هر راه حلی را از نظر توانایی آن در حل این مسائل شناخته شده آزمایش کنیم‪ .‬در ادبیات‪ ،‬چندین مشکل‬
‫اهمیت پیدا کرده اند و اغلب ظاهر می شوند‪ ،‬هم به این دلیل که نمونه هایی از مشکالت طراحی رایج هستند و هم به دلیل‬
‫ارزش آموزشی‪ .‬یکی از این مشکالت مشکل تولیدکننده‪/‬مصرف کننده است که قبال مورد بررسی قرار گرفته است‪ .‬در این بخش‪،‬‬
‫ما به یک مشکل کالسیک دیگر نگاه می کنیم‪ :‬مشکل خوانندگان‪/‬نویسندگان‪.‬‬

‫مشکل خواننده‪/‬نویسنده به صورت زیر تعریف می شود‪ :‬یک ناحیه داده مشترک بین تعدادی از فرآیندها وجود دارد‪ .‬ناحیه داده‬
‫می تواند یک فایل‪ ،‬یک بلوک از حافظه اصلی یا حتی بانکی از رجیسترهای پردازنده باشد‪ .‬تعدادی فرآیند وجود دارد که فقط‬
‫ناحیه داده را می خوانند خوانندگان و تعدادی نیز فقط در ناحیه داده می نویسند نویسندگان‪ .‬شرایطی که باید رعایت شود به‬
‫شرح زیر است‪:‬‬

‫‪ .1‬هر تعداد خواننده می توانند به طور همزمان فایل را بخوانند‪.‬‬

‫‪ .2‬هر بار فقط یک نویسنده می تواند در فایل بنویسد‪.‬‬

‫‪ .3‬اگر نویسنده ای در حال نوشتن روی فایل باشد‪ ،‬هیچ خواننده ای نمی تواند آن را بخواند‪.‬‬

‫‪298‬‬
‫سیستم عامل های داخلی و اصول طراحی‪299.........................................................................................................................‬‬

‫بنابراین‪ ،‬خوانندگان فرآیندهایی هستند که الزم نیست یکدیگر را کنار بگذارند و نویسندگان فرآیندهایی هستند که ملزم به‬
‫حذف کلیه فرآیندهای دیگر‪ ،‬خوانندگان و نویسندگان به طور یکسان هستند‪.‬‬

‫قبل از ادامه‪ ،‬اجازه دهید این مشکل را از دو مشکل دیگر متمایز کنیم‪ :‬مشکل کلی طرد متقابل و مشکل تولیدکننده‪/‬مصرف‬
‫کننده‪ .‬در مشکل خوان ها‪/‬نویسندگان‪ ،‬خوانندگان در ناحیه داده نیز نمی نویسند‪ ،‬و همچنین نویسنده ها هنگام نوشتن‪ ،‬ناحیه‬
‫داده را نمی خوانند‪ .‬یک مورد کلی تر‪ ،‬که شامل این مورد می شود‪ ،‬اجازه دادن به هر یک از فرآیندها برای خواندن یا نوشتن‬
‫ناحیه داده است‪ .‬در آن صورت‪ ،‬میتوانیم هر بخشی از فرآیندی را که به ناحیه داده دسترسی دارد‪ ،‬به عنوان یک بخش بحرانی‬
‫اعالم کنیم و راهحل کلی حذف متقابل را تحمیل کنیم‪ .‬دلیل توجه به مورد محدودتر این است که راهحلهای کارآمدتر برای این‬
‫مورد امکانپذیر است و راهحلهای کمتر کارآمد برای مشکل کلی بهطور غیرقابل قبولی کند هستند‪.‬‬

‫به عنوان مثال‪ ،‬فرض کنید که منطقه مشترک یک کاتالوگ کتابخانه است‪ .‬کاربران عادی کتابخانه برای یافتن کتاب‪ ،‬کاتالوگ را‬
‫مطالعه می کنند‪ .‬یک یا چند کتابدار می توانند فهرست را به روز کنند‪ .‬در راه حل کلی‪ ،‬هر دسترسی به کاتالوگ به عنوان یک‬
‫بخش مهم تلقی می شود و کاربران مجبور می شوند کاتالوگ را یکی یکی بخوانند‪ .‬این به وضوح تاخیرهای غیرقابل تحملی را‬
‫تحمیل می کند‪ .‬در عین حال‪ ،‬جلوگیری از تداخل نویسندگان با یکدیگر و همچنین جلوگیری از خواندن در حین انجام نوشتن‬
‫برای جلوگیری از دسترسی به اطالعات متناقض ضروری است‪.‬‬

‫آیا می توان مشکل تولیدکننده‪/‬مصرف کننده را صرفاً یک مورد خاص از مشکل خوانندگان‪/‬نویسندگان با یک نویسنده تهیه‬
‫کننده و یک خواننده واحد مصرف کننده در نظر گرفت؟ پاسخ منفی است‪ .‬تهیه کننده فقط یک نویسنده نیست‪ .‬باید نشانگرهای‬
‫صف را بخواند تا تعیین کند آیتم بعدی را کجا بنویسد‪ ،‬و باید مشخص کند که آیا بافر پر است یا خیر‪ .‬به طور مشابه‪ ،‬مصرف‬
‫کننده فقط یک خواننده نیست‪ ،‬زیرا باید نشانگرهای صف را طوری تنظیم کند که نشان دهد یک واحد را از بافر حذف کرده‬
‫است‪ .‬اکنون دو راه حل برای مشکل را بررسی می کنیم‪.‬‬

‫خوانندگان در اولویت هستند‬

‫شکل ‪ 5.22‬راه حلی با استفاده از سمافورها است که هر یک از یک خواننده و یک نویسنده را نشان می دهد‪ .‬راه حل برای‬
‫چندین خواننده و نویسنده تغییر نمی کند‪ .‬فرآیند نویسنده ساده است‪ .‬سمافور ‪ wsem‬برای اعمال طرد متقابل استفاده می‬
‫شود‪ .‬تا زمانی که یک نویسنده به ناحیه داده مشترک دسترسی دارد‪ ،‬هیچ نویسنده و خواننده دیگری نمی تواند به آن دسترسی‬
‫داشته باشد‪ .‬فرآیند خواننده همچنین از ‪ wsem‬برای اعمال طرد متقابل استفاده می کند‪ .‬با این حال‪ ،‬برای اجازه دادن به‬
‫چندین خواننده‪ ،‬ما نیاز داریم که وقتی خوانندهای در حال مطالعه نیست‪ ،‬اولین خوانندهای که سعی در خواندن دارد باید در‬
‫‪ wsem‬منتظر بماند‪ .‬وقتی حداقل یک خواننده در حال مطالعه است‪ ،‬خوانندگان بعدی الزم نیست قبل از ورود منتظر بمانند‪.‬‬

‫‪299‬‬
‫سیستم عامل های داخلی و اصول طراحی‪300.........................................................................................................................‬‬

‫متغیر سراسری تعداد خوانده شده برای پیگیری تعداد خوانندگان استفاده می شود و سمافور ‪ x‬برای اطمینان از اینکه تعداد‬
‫خوانده شده به درستی به روز می شود استفاده می شود‪.‬‬

‫شکل ‪ 5.22‬راه حلی برای مشکل خوانندگان‪/‬نویسندگان با استفاده از سمافور‪ :‬خوانندگان اولویت دارند‬

‫نویسندگان در اولویت هستند‬

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

‫شکل ‪ 5.23‬راه حلی را نشان می دهد که تضمین می کند وقتی حداقل یکی از نویسنده ها تمایل به نوشتن را اعالم کرده است‪،‬‬
‫هیچ خواننده جدیدی اجازه دسترسی به ناحیه داده را ندارد‪ .‬برای نویسندگان‪ ،‬سمافورها و متغیرهای زیر به مواردی که قبالً‬
‫تعریف شدهاند اضافه میشوند‪:‬‬

‫‪ -‬یک ‪ rsem‬سمافور که از همه خوانندگان جلوگیری می کند در حالی که حداقل یک نویسنده وجود دارد که مایل به دسترسی‬
‫به ناحیه داده است‪.‬‬

‫‪ -‬یک متغیر ‪ writecount‬که تنظیم ‪ rsem‬را کنترل می کند‬

‫‪ -‬یک سمافور ‪ y‬که به روز رسانی تعداد نوشتن را کنترل می کند‬


‫‪300‬‬
‫سیستم عامل های داخلی و اصول طراحی‪301.........................................................................................................................‬‬

‫برای خوانندگان‪ ،‬یک سمافور اضافی مورد نیاز است‪ .‬نباید اجازه داد یک صف طوالنی در ‪ rsem‬ایجاد شود‪ .‬در غیر این صورت‬
‫نویسندگان نمی توانند از صف بپرند‪ .‬بنابراین‪ ،‬فقط یک خواننده مجاز است در ‪ rsem‬صف بکشد‪ ،‬با هر خواننده اضافی که در‬
‫‪ semaphore z‬بالفاصله قبل از انتظار در ‪ rsem‬صف میکشد‪ .‬جدول ‪ 5.6‬احتماالت را خالصه می کند‪.‬‬

‫جدول ‪ 5.6‬وضعیت صف های فرآیند برای برنامه شکل ‪5.23‬‬

‫خوانندگان فقط در سیستم‬ ‫‪r wsem set‬‬


‫‪r no queues‬‬
‫نویسندگان فقط در سیستم‬ ‫‪r wsem and rsem set‬‬
‫‪r writers queue on wsem‬‬
‫هم خوانندگان و هم نویسندگان با‬ ‫‪r wsem set by reader‬‬
‫خواندن اول‬ ‫‪r rsem set by writer‬‬
‫‪r all writers‬‬
‫‪queue on wsem r‬‬
‫‪one reader‬‬
‫‪queues on rsem r‬‬
‫‪other readers‬‬
‫‪queue on z‬‬
‫هم خوانندگان و هم نویسندگان ابتدا‬ ‫‪r wsem set by writer‬‬
‫باید بنویسند‬ ‫‪r rsem set by writer‬‬
‫‪r writers queue on wsem‬‬
‫‪r one reader queues on rsem‬‬
‫‪r other readers queue on z‬‬

‫‪301‬‬
‫سیستم عامل های داخلی و اصول طراحی‪302.........................................................................................................................‬‬

‫شکل ‪ 5.23‬راه حلی برای مشکل خوانندگان‪/‬نویسندگان با استفاده از سمافور‪ :‬نویسندگان اولویت دارند‬

‫یک راه حل جایگزین‪ ،‬که به نویسندگان اولویت می دهد و با استفاده از ارسال پیام پیاده سازی می شود‪ ،‬در شکل ‪ 5.24‬نشان‬
‫داده شده است‪ .‬در این حالت‪ ،‬یک فرآیند کنترل کننده وجود دارد که به منطقه داده مشترک دسترسی دارد‪.‬‬

‫سایر فرآیندهایی که مایل به دسترسی به منطقه داده هستند یک پیام درخواستی را به کنترل کننده ارسال می کنند‪ ،‬با یک‬
‫پیام پاسخ "‪ "OK‬به آنها دسترسی داده می شود و تکمیل دسترسی را با یک پیام "تمام شده" نشان می دهد‪ .‬کنترلر مجهز به‬
‫سه صندوق پستی است‪ ،‬یکی برای هر نوع پیامی که ممکن است دریافت کند‪.‬‬

‫کنترل کننده خدمات نوشتن پیام های درخواست را قبل از خواندن پیام های درخواست پردازش می کند تا به نویسندگان‬
‫اولویت بدهد‪ .‬عالوه بر این‪ ،‬طرد متقابل باید اجرا شود‪.‬‬

‫‪302‬‬
‫سیستم عامل های داخلی و اصول طراحی‪303.........................................................................................................................‬‬

‫شکل ‪ 5.24‬راه حلی برای مشکل خوانندگان‪/‬نویسندگان با استفاده از ارسال پیام‬

‫برای انجام این کار از تعداد متغیر استفاده می شود که به تعداد بیشتری از حداکثر تعداد ممکن خواننده مقداردهی اولیه می‬
‫شود‪ .‬در این مثال از مقدار استفاده می کنیم‬

‫‪ .100‬عمل کنترلر را می توان به صورت زیر خالصه کرد‪:‬‬

‫‪ -‬اگر تعداد > ‪ 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‬‬

‫‪ DOWN08‬داونی‪ ،‬الف‪ .‬کتاب کوچک سمافورها‪ /www.greenteapress.com .‬سمافورها‪/‬‬

‫‪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‬‬

‫‪« .L ،LAMP86 Lamport‬مشکل طرد متقابل»‪ .‬مجله ‪ ،ACM‬آوریل ‪.1986‬‬

‫‪ LU08‬لو‪ ،‬اس‪ ،.‬و همکاران‪" .‬یادگیری از اشتباهات ‪ -‬یک مطالعه جامع در مورد ویژگی های اشکال همزمانی در دنیای واقعی‪".‬‬
‫‪ ،ACM ASPLOS’08‬مارس ‪.2008‬‬

‫‪ .M ،RAYN86 Raynal‬الگوریتمهای حذف متقابل‪ .‬کمبریج‪ :MA ،‬انتشارات ‪.1986 ،MIT‬‬

‫‪ RUDO90‬رودلف‪ ،‬بی‪" .‬رویه خود ارزیابی ‪ :XXI‬همزمانی‪ ".‬ارتباطات ‪ ،ACM‬می ‪.1990‬‬

‫تصاویر متحرک‬

‫مجموعه ای از انیمیشن که مفاهیم این فصل را نشان می دهد در وب سایت ‪ Premium‬موجود است‪ .‬خواننده تشویق می شود‬
‫که انیمیشن ها را برای تقویت مفاهیم این فصل مشاهده کند‪.‬‬

‫‪306‬‬
‫سیستم عامل های داخلی و اصول طراحی‪307.........................................................................................................................‬‬

‫‪ 5.9‬اصطالحات کلیدی‪ ،‬سؤاالت و مشکالت را مرور کنید‬

‫شرایط کلیدی‬

‫اتمی‬ ‫منبع حیاتی‬ ‫غیر مسدود کننده‬

‫سمافور باینری‬ ‫ناحیه ی بحرانی‬ ‫شرایط مسابقه‬

‫مسدود کردن‬ ‫وقفه‬ ‫سمافور‬

‫مشغول انتظار‬ ‫سمافور عمومی‬ ‫چرخش در انتظار‬

‫همزمانی‬ ‫ارسال پیام‬ ‫گرسنگی‬

‫فرآیندهای همزمان‬ ‫نظارت کنید‬ ‫سمافور قوی‬

‫روتین‬ ‫طرد متقابل‬ ‫سمافور ضعیف‬

‫سمافور شمارش‬ ‫قفل محرومیت متقابل‬


‫‪mutex‬‬

‫بررسی سواالت‬

‫‪ .5.1‬چهار موضوع طراحی را که مفهوم همزمانی برای آنها مرتبط است فهرست کنید‪.‬‬

‫‪ .5.2‬سه زمینه ای که همزمانی ایجاد می شود کدامند؟‬

‫‪ .5.3‬الزام اساسی برای اجرای فرآیندهای همزمان چیست؟‬

‫‪ .5.4‬سه درجه از آگاهی بین فرآیندها را فهرست کرده و هر کدام را به اختصار تعریف کنید‪.‬‬

‫‪ .5.5‬تفاوت بین فرآیندهای رقابتی و فرآیندهای همکاری چیست؟‬

‫‪ .5.6‬سه مشکل کنترل مرتبط با فرآیندهای رقیب را فهرست کرده و هر کدام را به طور خالصه تعریف کنید‪.‬‬

‫‪ .5.7‬الزامات حذف متقابل را فهرست کنید‪.‬‬

‫‪ .5.8‬چه عملیاتی را می توان روی سمافور انجام داد؟‬


‫‪307‬‬
‫سیستم عامل های داخلی و اصول طراحی‪308.........................................................................................................................‬‬

‫‪ .5.9‬تفاوت بین سمافورهای باینری و عمومی چیست؟‬

‫‪ .5.10‬تفاوت بین سمافورهای قوی و ضعیف چیست؟‬

‫‪ .5.11‬مانیتور چیست؟‬

‫‪ .5.12‬تفاوت بین مسدود کردن و عدم انسداد با توجه به پیام ها چیست؟‬

‫‪ .5.13‬چه شرایطی به طور کلی با مشکل خوانندگان‪/‬نویسندگان مرتبط است؟‬

‫چالش ها و مسائل‬

‫‪ .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‬کاراکتر داشته باشد‪.‬‬

‫د راه حل را به صورت مجموعه ای از سه فرآیند با استفاده از سمافورها بازنویسی کنید‪.‬‬

‫شکل ‪ 5.25‬کاربرد کوروتین ها‬

‫‪ .5.3‬برنامه زیر را در نظر بگیرید‪:‬‬

‫‪309‬‬
‫سیستم عامل های داخلی و اصول طراحی‪310.........................................................................................................................‬‬

‫توجه داشته باشید که زمانبند در یک سیستم تکپردازنده‪ ،‬اجرای شبه موازی این دو فرآیند همزمان را با درهمآمیزی‬
‫دستورالعملهای آنها‪ ،‬بدون محدودیت در ترتیب ‪ ،interleaving‬اجرا میکند‪.‬‬

‫آ‪ .‬دنبالهای را نشان دهید یعنی دنبالهای از گزارهها را دنبال کنید بهگونهای که عبارت «‪ x‬است ‪ »10‬چاپ شود‪.‬‬

‫ب دنباله ای را نشان دهید که عبارت "‪ "x is 8‬چاپ شود‪ .‬باید به خاطر داشته باشید که افزایش‪/‬کاهش در سطح زبان مبدأ به‬
‫صورت اتمی انجام نمی شود‪ ،‬یعنی کد زبان اسمبلی‪:‬‬

‫دستور افزایش تک ‪ C x = x + 1‬را پیاده سازی می کند‪.‬‬

‫‪ .5.4‬برنامه زیر را در نظر بگیرید‪:‬‬

‫آ‪ .‬کران پایینی مناسب و کران باالیی را روی مقدار نهایی خروجی محاسبه متغیر مشترک توسط این برنامه همزمان تعیین کنید‪.‬‬
‫فرض کنید فرآیندها می توانند با هر سرعت نسبی اجرا شوند و یک مقدار فقط پس از بارگذاری در یک ثبات توسط یک‬
‫دستورالعمل ماشین جداگانه می تواند افزایش یابد‪.‬‬

‫ب فرض کنید که تعداد دلخواه از این فرآیندها طبق مفروضات قسمت الف مجاز به اجرای موازی هستند‪ .‬این اصالح چه تأثیری‬
‫بر دامنه مقادیر نهایی شمارش خواهد داشت؟‬

‫‪ .5.5‬آیا انتظار مشغول همیشه کارایی کمتری از نظر استفاده از زمان پردازنده نسبت به انتظار مسدود کردن دارد؟ توضیح‪.‬‬

‫‪ .5.6‬برنامه زیر را در نظر بگیرید‪:‬‬

‫‪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‬گفته می شود‪ .‬عملکرد و ویژگی های کلیدی آن را توضیح دهید‪.‬‬

‫‪ .5.10‬اولین نمونه دستور پیچ = ‪ 0‬را در شکل ‪ b5.2‬در نظر بگیرید‪.‬‬

‫آ‪ .‬با استفاده از دستور تبادل به همان نتیجه برسید‪.‬‬

‫ب کدام روش ارجح است؟‬

‫‪312‬‬
‫سیستم عامل های داخلی و اصول طراحی‪313.........................................................................................................................‬‬

‫‪ .5.11‬هنگامی که یک دستورالعمل ماشین خاص برای ارائه استثنای متقابل در مد شکل ‪ 5.2‬استفاده می شود‪ ،‬هیچ کنترلی بر‬
‫روی مدت زمانی که یک فرآیند باید قبل از دسترسی به بخش حیاتی خود منتظر بماند وجود ندارد‪ .‬الگوریتمی ابداع کنید که از‬
‫دستور مقایسه&تغییر استفاده میکند اما تضمین میکند که هر فرآیندی که منتظر ورود به بخش حیاتی خود است‪ ،‬این کار را‬
‫در ‪ n-1‬نوبت انجام میدهد‪ ،‬جایی که ‪ n‬تعداد فرآیندهایی است که ممکن است نیاز به دسترسی به بخش بحرانی داشته باشند و‬
‫یک "نوبت" است‪ .‬یک رویداد متشکل از یک فرآیند خروج از بحرانی بخش و فرآیند دیگری که به آن دسترسی داده شده است‪.‬‬

‫‪ .5.12‬تعریف زیر را از سمافورها در نظر بگیرید‪:‬‬

‫این مجموعه از تعاریف را با شکل ‪ 5.3‬مقایسه کنید‪ .‬توجه داشته باشید یک تفاوت‪ :‬با تعریف قبلی‪ ،‬سمافور هرگز نمی تواند‬
‫ارزش منفی داشته باشد‪ .‬آیا تفاوتی در تأثیر دو مجموعه از تعاریف هنگام استفاده در برنامه ها وجود دارد؟ یعنی آیا می توانید‬
‫بدون تغییر معنای برنامه‪ ،‬یک مجموعه را جایگزین دیگری کنید؟‬

‫‪ .5.13‬یک منبع قابل اشتراک گذاری با ویژگی های زیر را در نظر بگیرید‪ 1 :‬تا زمانی که کمتر از سه فرآیند از منبع استفاده می‬
‫کنند‪ ،‬فرآیندهای جدید می توانند بالفاصله از آن استفاده کنند‪ 2 .‬هنگامی که سه فرآیند از منبع استفاده می کنند‪ ،‬هر سه باید‬
‫قبل از شروع هر فرآیند جدیدی از آن استفاده کنند‪ .‬میدانیم که شمارندهها برای پیگیری تعداد فرآیندهای منتظر و فعال مورد‬
‫نیاز هستند‪ ،‬و این شمارندهها خود منابع مشترکی هستند که باید با طرد متقابل محافظت شوند‪ .‬بنابراین ممکن است راه حل‬
‫زیر را ایجاد کنیم‪:‬‬

‫‪313‬‬
‫سیستم عامل های داخلی و اصول طراحی‪314.........................................................................................................................‬‬

‫به نظر می رسد که راه حل همه چیز را به درستی انجام می دهد‪ :‬همه دسترسی ها به متغیرهای مشترک با طرد متقابل‬
‫محافظت می شوند‪ ،‬فرآیندها خود را مسدود نمی کنند در حالی که در طرد متقابل‪ ،‬در صورت وجود یا وجود سه کاربر فعال‪ ،‬از‬
‫استفاده از منبع فرآیندهای جدید جلوگیری می شود‪ .‬و آخرین فرآیند خروج حداکثر سه فرآیند انتظار را از حالت انسداد خارج‬
‫می کند‪.‬‬

‫آ‪ .‬با این حال برنامه نادرست است‪ .‬توضیح دهد که چرا‪.‬‬

‫ب فرض کنید اگر در خط ‪ 6‬را به مقداری تغییر دهیم‪ .‬آیا با این کار مشکلی در برنامه حل می شود؟ آیا هیچ مشکلی باقی می‬
‫ماند؟‬

‫‪ .5.14‬اکنون این راه حل صحیح را برای مشکل قبلی در نظر بگیرید‪:‬‬

‫‪314‬‬
‫سیستم عامل های داخلی و اصول طراحی‪315.........................................................................................................................‬‬

‫آ‪ .‬توضیح دهید که این برنامه چگونه کار می کند و چرا درست است‪.‬‬

‫ب این راه حل به طور کامل مانع از برش فرآیندهای تازه وارد نمی شود‪ ،‬اما احتمال آن را کاهش می دهد‪ .‬مثالی از برش در خط‬
‫بزنید‪.‬‬

‫ج این برنامه نمونه ای از یک الگوی طراحی کلی است که روشی یکسان برای پیاده سازی راه حل های بسیاری از مسائل‬
‫همزمانی با استفاده از سمافورها است‪ .‬از آن به عنوان الگوی ‪ I'll Do It For You‬نام برده شده است‪ .‬الگو را شرح دهید‪.‬‬

‫‪ .5.15‬اکنون راه حل صحیح دیگری را برای مشکل قبلی در نظر بگیرید‪:‬‬

‫‪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‬با استفاده از تکنیک‬
‫آبشاری مشابه آنچه در قسمت اول استفاده شد‪ ،‬وارد بخشهای بحرانی خود میشوند‪ .‬الگوریتمی را تعریف کنید که با این‬
‫توضیحات مطابقت داشته باشد‪.‬‬

‫‪ .5.18‬مشکل زیر یک بار در یک امتحان استفاده شد‪:‬‬

‫پارک ژوراسیک متشکل از موزه دایناسورها و پارکی برای سافاری سواری است‪ .‬تعداد مسافر و ‪ 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.24‬نشان دهید که ارسال پیام و سمافورها دارای عملکردی معادل هستند‬

‫آ‪ .‬پیاده سازی ارسال پیام با استفاده از سمافورها‪ .‬نکته‪ :‬از یک ناحیه بافر مشترک برای نگهداری صندوق های پستی استفاده‬
‫کنید که هر کدام از آرایه ای از اسالت پیام تشکیل شده است‪.‬‬

‫ب پیاده سازی سمافور با استفاده از ارسال پیام نکته‪ :‬یک فرآیند همگام سازی جداگانه را معرفی کنید‪.‬‬

‫‪ .5.25‬توضیح دهید که مشکل این اجرای مسئله تکنویسنده چند خوان چیست؟‬

‫‪320‬‬
‫سیستم عامل های داخلی و اصول طراحی‪321.........................................................................................................................‬‬

‫فصل ‪6‬‬

‫همزمانی‪ :‬وقفه و ‪starving‬‬

‫‪ 6.1‬اصول وقفه‬

‫نمودارهای تخصیص منابع منابع قابل مصرف منابع قابل استفاده مجدد شرایط برای وقفه‬

‫‪ 6.2‬پیشگیری از وقفه‬

‫طرد متقابل منتظر بمانید و منتظر بمانید‬

‫‪ 6.3‬اجتناب از وقفه‬

‫آغاز فرآیند انکار تخصیص منابع‬

‫‪ 6.4‬تشخیص وقفه‬

‫بازیابی الگوریتم تشخیص وقفه‬

‫‪ 6.5‬یک استراتژی وقفه یکپارچه‬

‫‪ 6.6‬مسئله فیلسوفان غذاخوری‬

‫راه حل با استفاده از سمافورها راه حل با استفاده از مانیتور‬

‫‪ 6.7‬مکانیسم های همزمانی یونیکس‬

‫پیام های ‪ pipe‬ها‬

‫سیگنال های سمافور حافظه مشترک‬

‫‪ 6.8‬مکانیسم های همزمانی هسته لینوکس‬

‫عملیات اتمی موانع سمافورها را به هم می زند‬

‫‪Solaris Thread Synchronization Primitives Mutual Exclusion Lock Semaphores 6.9‬‬


‫‪321‬‬
‫سیستم عامل های داخلی و اصول طراحی‪322.........................................................................................................................‬‬

‫متغیرهای شرط قفل ‪Readers/Writer‬‬

‫‪ 6.10‬مکانیسم های همزمانی ویندوز ‪7‬‬

‫‪Wait Functions Dispatcher Objects Critical Sections‬‬


‫قفل های ‪ Slim Reader–Writer‬و متغیرهای شرایط همگام سازی بدون قفل‬

‫‪ 6.11‬ارتباطات بین پردازشی اندروید‬

‫‪ 6.12‬خالصه‬

‫‪ 6.13‬خواندن و انیمیشن های توصیه شده‬

‫‪ 6.14‬اصطالحات کلیدی‪ ،‬بررسی سواالت و مشکالت‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬شرایط وقفه را فهرست کرده و توضیح دهید‪.‬‬

‫‪ -‬پیشگیری از وقفه را تعریف کنید و راهبردهای پیشگیری از وقفه را در رابطه با هر یک از شرایط وقفه شرح دهید‪.‬‬

‫‪ -‬تفاوت بین پیشگیری از وقفه و اجتناب از وقفه را توضیح دهید‪.‬‬

‫‪ -‬دو رویکرد برای اجتناب از وقفه را درک کنید‪.‬‬

‫‪ -‬تفاوت اساسی در رویکرد بین تشخیص وقفه و پیشگیری یا اجتناب از وقفه را توضیح دهید‪.‬‬

‫‪ -‬درک کنید که چگونه یک استراتژی وقفه یکپارچه می تواند طراحی شود‪.‬‬

‫‪ -‬مشکل فیلسوفان ناهارخوری را تحلیل کنید‪.‬‬

‫‪ -‬روش های همزمانی و همگام سازی مورد استفاده در یونیکس‪ ،‬لینوکس‪ ،‬سوالریس‪ ،‬ویندوز و اندروید را توضیح دهید‪.‬‬

‫این فصل دو مشکل را بررسی میکند که همه تالشها برای پشتیبانی از پردازش همزمان را آزار میدهد‪ :‬بنبست و گرسنگی‪ .‬ما‬
‫با بحث در مورد اصول اساسی وقفه و مشکل مربوط به گرسنگی شروع می کنیم‪ .‬سپس سه رویکرد رایج برای مقابله با وقفه را‬
‫بررسی می کنیم‪ :‬پیشگیری‪ ،‬تشخیص و اجتناب‪ .‬سپس به یکی از مسائل کالسیک که برای نشان دادن مسائل مربوط به همگام‬
‫سازی و وقفه استفاده می شود نگاه می کنیم‪ :‬مسئله فیلسوفان غذاخوری‪.‬‬
‫‪322‬‬
‫سیستم عامل های داخلی و اصول طراحی‪323.........................................................................................................................‬‬

‫مانند فصل ‪ ،5‬بحث در این فصل به بررسی همزمانی و وقفه در یک سیستم محدود می شود‪ .‬اقدامات برای مقابله با مشکالت‬
‫وقفه توزیع شده در فصل ‪ 18‬ارزیابی شده است‪ .‬انیمیشنی که وقفه را نشان می دهد به صورت آنالین در دسترس است‪ .‬برای‬
‫دسترسی‪ ،‬روی کره در حال چرخش در ‪ WilliamStallings.com/OS/OS7e.html‬کلیک کنید‪.‬‬

‫‪ 6.1‬اصول وقفه‬

‫وقفه را می توان به عنوان مسدود کردن دائمی مجموعه ای از فرآیندها تعریف کرد که یا برای منابع سیستم رقابت می کنند یا با‬
‫یکدیگر ارتباط برقرار می کنند‪ .‬هنگامی که هر فرآیند در مجموعه در انتظار یک رویداد معموالً آزاد شدن برخی از منابع‬
‫درخواستی که فقط می تواند توسط یک فرآیند مسدود شده دیگر در مجموعه راه اندازی شود‪ ،‬مجموعه ای از فرآیندها به وقفه‬
‫می رسد‪ .‬وقفه دائمی است زیرا هیچ یک از رویدادها هرگز آغاز نمی شود‪ .‬برخالف سایر مشکالت در مدیریت فرآیند همزمان‪،‬‬
‫هیچ راه حل کارآمدی در حالت کلی وجود ندارد‪.‬‬

‫همه وقفه ها شامل نیازهای متناقض برای منابع توسط دو یا چند فرآیند است‪ .‬یک مثال رایج‪ ،‬وقفه ترافیکی است‪ .‬شکل ‪a6.1‬‬
‫وضعیتی را نشان می دهد که در آن چهار اتومبیل تقریباً در یک زمان به یک تقاطع توقف چهار طرفه رسیده اند‪ .‬چهار ربع‬
‫تقاطع منابعی هستند که کنترل روی آنها الزم است‪ .‬به ویژه‪ ،‬اگر هر چهار خودرو بخواهند مستقیماً از تقاطع عبور کنند‪ ،‬منابع‬
‫مورد نیاز به شرح زیر است‪:‬‬

‫‪ -‬ماشین ‪ ،1‬در حال حرکت به سمت شمال‪ ،‬به ربع ‪ a‬و ‪ b‬نیاز دارد‪.‬‬

‫‪ -‬ماشین ‪ 2‬به ربع ‪ b‬و ‪ c‬نیاز دارد‪.‬‬

‫‪ -‬ماشین ‪ 3‬به ربع ‪ c‬و ‪ d‬نیاز دارد‪.‬‬

‫‪ -‬ماشین ‪ 4‬به ربع ‪ d‬و ‪ a‬نیاز دارد‪.‬‬

‫قانون جاده در ‪ States‬متحده این است که یک اتومبیل در یک توقف چهار طرفه باید بالفاصله به اتومبیلی که در سمت راست‬
‫آن قرار دارد موکول کند‪ .‬این قانون اگر فقط دو یا سه ماشین در تقاطع وجود داشته باشد کار می کند‪ .‬به عنوان مثال‪ ،‬اگر فقط‬
‫خودروهای شمال و غرب به تقاطع برسند‪ ،‬خودروی شمال منتظر خواهد ماند و ماشین به سمت غرب ادامه میدهد‪ .‬اما اگر هر‬
‫چهار خودرو تقریباً در یک زمان وارد شوند و هر چهار خودرو از این قانون پیروی کنند‪ ،‬هر کدام از ورود به چهارراه خودداری‬
‫میکنند‪ .‬این باعث یک وقفه بالقوه می شود‪ .‬این فقط یک وقفه بالقوه است‪ ،‬زیرا منابع الزم برای ادامه حرکت هر یک از خودروها‬
‫در دسترس است‪ .‬اگر یک خودرو در نهایت تصمیم به ادامه کار بگیرد‪ ،‬می تواند این کار را انجام دهد‪.‬‬

‫‪323‬‬
‫سیستم عامل های داخلی و اصول طراحی‪324.........................................................................................................................‬‬

‫با این حال‪ ،‬اگر هر چهار خودرو قوانین را نادیده بگیرند و همزمان با احتیاط وارد تقاطع شوند‪ ،‬هر خودرو یک منبع یک ربع را‬
‫تصاحب می کند اما نمی تواند ادامه دهد زیرا منبع دوم مورد نیاز قبالً توسط ماشین دیگری توقیف شده است‪ .‬این یک وقفه‬
‫واقعی است‪ .‬اجازه دهید اکنون به تصویری از وقفه مربوط به فرآیندها و منابع رایانه نگاه کنیم‪ .‬شکل ‪ 6.2‬که از آن به عنوان‬
‫نمودار پیشرفت مشترک یاد می کنیم‪ ،‬پیشرفت دو فرآیند را نشان می دهد که برای دو منبع رقابت می کنند‪ .‬هر فرآیند نیاز به‬
‫استفاده انحصاری از هر دو منبع برای یک دوره زمانی معین دارد‪ .‬دو فرآیند ‪ P‬و ‪ Q‬شکل کلی زیر را دارند‪:‬‬

‫شکل ‪ 6.1‬تصویر وقفه‬

‫شکل ‪ 6.2‬مثالی از وقفه‬

‫‪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.........................................................................................................................‬‬

‫شکل ‪ 6.3‬مثال بدون وقفه ‪BACO03‬‬

‫شکل ‪ 6.4‬مثالی از دو فرآیند در رقابت برای منابع قابل استفاده مجدد‬

‫ممکن است به نظر برسد که این یک خطای برنامه نویسی است تا یک مشکل برای طراح سیستم عامل‪ .‬با این حال‪ ،‬دیدیم که‬
‫طراحی برنامه همزمان چالش برانگیز است‪ .‬چنین بنبستهایی اتفاق میافتد‪ ،‬و علت اغلب در منطق برنامه پیچیده قرار میگیرد‬
‫و تشخیص را دشوار میکند‪ .‬یکی از استراتژیهای مقابله با چنین بنبستی‪ ،‬تحمیل محدودیتهای طراحی سیستم در مورد‬
‫ترتیب درخواست منابع است‪.‬‬

‫مثال دیگری از وقفه با یک منبع قابل استفاده مجدد مربوط به درخواست برای حافظه اصلی است‪ .‬فرض کنید فضای موجود‬
‫برای تخصیص ‪ 200‬کیلوبایت است و دنباله درخواستهای زیر رخ میدهد‪:‬‬

‫‪327‬‬
‫سیستم عامل های داخلی و اصول طراحی‪328.........................................................................................................................‬‬

‫وقفه زمانی رخ می دهد که هر دو فرآیند به درخواست دوم خود پیش بروند‪ .‬اگر مقدار حافظه درخواستی از قبل مشخص نباشد‪،‬‬
‫مقابله با این نوع وقفه با استفاده از محدودیت های طراحی سیستم دشوار است‪ .‬بهترین راه برای مقابله با این مشکل خاص‪ ،‬در‬
‫واقع حذف این امکان با استفاده از حافظه مجازی است که در فصل ‪ 8‬مورد بحث قرار گرفته است‪.‬‬

‫منابع مصرفی‬

‫یک منبع مصرفی منبعی است که می تواند ایجاد تولید و نابود شود مصرف شود‪ .‬به طور معمول‪ ،‬محدودیتی در تعداد منابع‬
‫مصرفی یک نوع خاص وجود ندارد‪ .‬یک فرآیند تولید بدون انسداد ممکن است تعدادی از این منابع را ایجاد کند‪ .‬هنگامی که‬
‫یک منبع توسط یک فرآیند مصرف کننده به دست می آید‪ ،‬منبع از بین می رود‪ .‬نمونههایی از منابع مصرفی وقفهها‪ ،‬سیگنالها‪،‬‬
‫پیامها و اطالعات در بافرهای ورودی‪/‬خروجی هستند‪.‬‬

‫به عنوان نمونه ای از وقفه شامل منابع مصرفی‪ ،‬جفت فرآیندهای زیر را در نظر بگیرید‪ ،‬که در آن هر فرآیند سعی می کند پیامی‬
‫را از فرآیند دیگر دریافت کند و سپس پیامی را به فرآیند دیگر ارسال کند‪:‬‬

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

‫‪328‬‬
‫سیستم عامل های داخلی و اصول طراحی‪329.........................................................................................................................‬‬

‫جدول ‪ 6.1‬خالصه رویکردهای تشخیص‪ ،‬پیشگیری و اجتناب از وقفه برای سیستم های عامل ‪ISLO80‬‬

‫سیاست‬
‫طرح‬ ‫مزایای عمده‬ ‫معایب عمده‬
‫تخصیص‬
‫رویکرد‬ ‫های‬
‫منابع‬
‫مختلف‬
‫درخواست‬ ‫برای فرآیندهایی که یک‬ ‫ناکارآمد‬
‫سری فعالیت را انجام می همه منابع‬
‫به یکباره‬ ‫دهند به خوبی کار می‬
‫کند‬
‫جلوگیری‬ ‫محافظه‬ ‫پیشدستی‬ ‫هیچ پیشدستی الزم‬ ‫شروع فرآیند را به‬
‫کار؛ منابع‬ ‫نیست‬ ‫تأخیر می اندازد‬
‫را کم‬ ‫نیازهای منابع آینده‬
‫تعهد می‬ ‫باید توسط آنها‬
‫کند‬ ‫شناخته شوند‬
‫سفارش‬ ‫هنگام استفاده از منابعی‬ ‫فرآیندها‬
‫منابع‬ ‫که وضعیت آنها را می‬
‫توان به راحتی ذخیره‬
‫و بازیابی کرد‪ ،‬راحت‬
‫است‬
‫اجتناب‬ ‫میانه راه‬ ‫دستکاری‬ ‫امکان اجرا از‬ ‫بیشتر از آنچه الزم است‪،‬‬
‫بین‬ ‫کنید تا‬ ‫طریق بررسی‬ ‫پیشی گرفته است‬
‫تشخیص و‬ ‫حداقل یک‬ ‫های زمان اجرا‬
‫پیشگیری‬ ‫مسیر امن‬
‫پیدا کنید‬
‫تشخیص‬ ‫بسیار‬ ‫برای‬ ‫نیازی به محاسبه‬ ‫درخواستهای‬
‫لیبرال؛‬ ‫تست‬ ‫زمان اجرا ندارد‬ ‫منابع افزایشی را‬
‫منابع‬ ‫وقفه به‬ ‫زیرا مشکل در‬ ‫مجاز نمیداند‬

‫‪329‬‬
‫سیستم عامل های داخلی و اصول طراحی‪330.........................................................................................................................‬‬

‫درخواستی‬ ‫صورت‬ ‫طراحی سیستم‬


‫در صورت‬ ‫دوره ای‬ ‫حل شده است‬
‫امکان اعطا‬ ‫فراخوانی‬
‫می شود‬ ‫کنید‬

‫توسعه یافته است‪ :‬پیشگیری‪ ،‬اجتناب‪ ،‬و تشخیص‪ .‬پس از معرفی نمودارهای تخصیص منابع و سپس بحث در مورد شرایط وقفه ‪،‬‬
‫هر یک از این موارد را به نوبه خود بررسی می کنیم‪.‬‬

‫نمودارهای تخصیص منابع‬

‫یک ابزار مفید در توصیف تخصیص منابع به فرآیندها‪ ،‬نمودار تخصیص منابع است که توسط ‪ Holt HOLT72‬معرفی شده‬
‫است‪ .‬گراف تخصیص منبع یک گراف جهت دار است که وضعیتی از سیستم منابع و فرآیندها را به تصویر می کشد که هر‬
‫فرآیند و هر منبع توسط یک گره نمایش داده می شود‪ .‬یک یال گراف که از یک فرآیند به یک منبع هدایت می شود منبعی را‬
‫نشان می دهد که توسط فرآیند درخواست شده است اما هنوز به آن اعطا نشده است شکل ‪ .a6.5‬در یک گره منبع‪ ،‬یک نقطه‬
‫برای هر نمونه از آن منبع نشان داده می شود‪ .‬نمونههایی از انواع منابع که ممکن است چندین نمونه داشته باشند‪ ،‬دستگاههای‬
‫ورودی‪/‬خروجی هستند که توسط یک ماژول مدیریت منابع در سیستمعامل تخصیص داده میشوند‪ .‬یک لبه گراف که از نقطه‬
‫گره منبع قابل استفاده مجدد به یک فرآیند هدایت می شود‪ ،‬درخواستی را نشان می دهد که اعطا شده است شکل ‪ .b6.5‬یعنی‬
‫یک واحد از آن منبع به فرآیند اختصاص داده شده است‪ .‬یک یال گراف که از نقطه گره منبع مصرفی به یک فرآیند هدایت می‬
‫شود نشان می دهد که فرآیند تولید کننده آن منبع است‪.‬‬

‫‪330‬‬
‫سیستم عامل های داخلی و اصول طراحی‪331.........................................................................................................................‬‬

‫شکل ‪ 6.5‬نمونه هایی از نمودارهای تخصیص منابع‬

‫شکل ‪ 6.6‬نمودار تخصیص منابع برای شکل ‪b6.1‬‬

‫شکل ‪ 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.7‬تعیین حالت ایمن‬

‫شکل ‪ 6.8‬تعیین وضعیت ناامن‬

‫شکل ‪ 6.9‬یک نسخه انتزاعی از منطق اجتناب از وقفه را نشان می دهد‪ .‬الگوریتم اصلی در قسمت ب نشان داده شده است‪ .‬با‬
‫وضعیت سیستم تعریف شده توسط حالت ساختار داده‪ ،‬درخواست* برداری است که منابع درخواست شده توسط فرآیند ‪ i‬را‬
‫تعریف می کند‪ .‬ابتدا‪ ،‬بررسی می شود تا اطمینان حاصل شود که درخواست از ادعای اصلی فرآیند فراتر نمی رود‪.‬‬
‫‪338‬‬
‫سیستم عامل های داخلی و اصول طراحی‪339.........................................................................................................................‬‬

‫اگر درخواست معتبر باشد‪ ،‬گام بعدی تعیین این است که آیا امکان انجام درخواست وجود دارد یعنی منابع کافی در دسترس‬
‫است‪ .‬اگر امکان پذیر نباشد‪ ،‬فرآیند به حالت تعلیق در می آید‪ .‬در صورت امکان‪ ،‬مرحله نهایی این است که تعیین کنیم آیا انجام‬
‫درخواست امن است یا خیر‪ .‬برای انجام این کار‪ ،‬منابع به طور آزمایشی به پردازش ‪ i‬اختصاص داده می شود تا ‪ newstate‬را‬
‫تشکیل دهد‪ .‬سپس تست ایمنی با استفاده از الگوریتم شکل ‪ c6.9‬انجام می شود‪.‬‬

‫اجتناب از وقفه این مزیت را دارد که مانند تشخیص وقفه ‪ ،‬نیازی به بازگرداندن و بازگرداندن فرآیندها نیست و نسبت به‬
‫پیشگیری از وقفه محدودیت کمتری دارد‪ .‬با این حال‪ ،‬تعدادی محدودیت در استفاده از آن دارد‪:‬‬

‫‪ -‬حداکثر منبع مورد نیاز برای هر فرآیند باید از قبل بیان شود‪.‬‬

‫‪ -‬فرآیندهای مورد بررسی باید مستقل باشند‪ .‬به این معنا که ترتیب اجرای آنها باید با هیچ گونه الزامات همگام سازی محدود‬
‫نشده باشد‪.‬‬

‫‪ -‬باید تعداد ثابتی از منابع برای تخصیص وجود داشته باشد‪.‬‬

‫‪ -‬هیچ فرآیندی ممکن است هنگام نگهداری منابع خارج شود‪.‬‬

‫الف ساختارهای داده جهانی‬

‫ب الگوریتم تخصیص منابع‬

‫‪339‬‬
‫سیستم عامل های داخلی و اصول طراحی‪340.........................................................................................................................‬‬

‫ج تست الگوریتم ایمنی الگوریتم بانکدار‬

‫شکل ‪ 6.9‬منطق اجتناب از وقفه‬

‫‪ 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‬برای نشان دادن الگوریتم تشخیص وقفه استفاده کنیم‪ .‬الگوریتم به صورت زیر پیش می رود‪:‬‬

‫‪ P4 .1‬را عالمت گذاری کنید‪ ،‬زیرا ‪ P4‬هیچ منبع تخصیصی ندارد‪.‬‬

‫‪ 1 0 0 0 0 W .2‬را تنظیم کنید‪.‬‬

‫‪ .3‬درخواست فرآیند ‪ P3‬کمتر یا مساوی ‪ W‬است‪ ،‬بنابراین ‪ P3‬را عالمت زده و تنظیم کنید‬

‫‪.W = W + 10 0 0 1 02 = 10 0 0 1 02‬‬

‫‪ .4‬هیچ فرآیند بدون عالمت دیگری در ‪ Q‬ردیفی کمتر یا مساوی ‪ W‬ندارد‪ .‬بنابراین‪ ،‬الگوریتم را خاتمه دهید‪.‬‬

‫الگوریتم با عالمت گذاری نشده ‪ P1‬و ‪ P2‬به پایان می رسد‪ ،‬که نشان می دهد این فرآیندها به وقفه رسیده اند‪.‬‬

‫شکل ‪ 6.10‬مثالی برای تشخیص وقفه‬


‫‪341‬‬
‫سیستم عامل های داخلی و اصول طراحی‪342.........................................................................................................................‬‬

‫بهبود‬

‫هنگامی که وقفه شناسایی شد‪ ،‬برخی استراتژی ها برای بازیابی مورد نیاز است‪ .‬روشهای زیر به ترتیب افزایش پیچیدگی‬
‫فهرست شدهاند‪:‬‬

‫‪ .1‬تمام فرآیندهای وقفه را لغو کنید‪ .‬این‪ ،‬باور کنید یا نه‪ ،‬یکی از رایج ترین‪ ،‬اگر نگوییم رایج ترین راه حل های اتخاذ شده در‬
‫سیستم عامل ها است‪.‬‬

‫‪ .2‬از هر فرآیند وقفه در برخی از نقاط بازرسی از قبل تعریف شده نسخه پشتیبان تهیه کنید و همه فرآیندها را مجدداً راه اندازی‬
‫کنید‪ .‬این امر مستلزم آن است که مکانیسم های بازگشت و راه اندازی مجدد در سیستم تعبیه شود‪ .‬خطر در این رویکرد این‬
‫است که وقفه اصلی ممکن است دوباره عود کند‪ .‬با این حال‪ ،‬عدم تعیین پردازش همزمان ممکن است تضمین کند که این اتفاق‬
‫نمی افتد‪.‬‬

‫‪ .3‬فرآیندهای وقفه را به طور متوالی متوقف کنید تا زمانی که دیگر وقفه وجود نداشته باشد‪ .‬ترتیب انتخاب فرآیندهای سقط‬
‫جنین باید بر اساس معیار حداقل هزینه باشد‪ .‬پس از هر سقط جنین‪ ،‬الگوریتم تشخیص باید دوباره فراخوانی شود تا ببینیم آیا‬
‫وقفه هنوز وجود دارد یا خیر‪.‬‬

‫‪ .4‬منابع را تا زمانی که دیگر وقفه وجود نداشته باشد‪ ،‬پیش دستی کنید‪ .‬همانطور که در ‪ ،3‬یک انتخاب مبتنی بر هزینه باید‬
‫استفاده شود‪ ،‬و فراخوانی مجدد از الگوریتم تشخیص پس از هر پیشگیری الزم است‪ .‬فرآیندی که منبعی از آن پیشی گرفته‬
‫است‪ ،‬باید قبل از دستیابی به آن منبع‪ ،‬به نقطه ای برگردد‪.‬‬

‫برای ‪ 3‬و ‪ ،4‬معیارهای انتخاب می تواند یکی از موارد زیر باشد‪ .‬فرآیند را با کمترین مقدار زمان پردازنده تا کنون مصرف شده‬
‫است‬

‫کمترین میزان خروجی تولید شده تاکنون‪:‬‬

‫‪ -‬بیشترین زمان باقی مانده تخمین زده می شود‬

‫حداقل کل منابع تخصیص یافته تاکنون‬

‫‪ -‬کمترین اولویت‬

‫اندازه گیری برخی از این مقادیر آسان تر از بقیه است‪ .‬زمان تخمینی باقی مانده به ویژه مشکوک است‪ .‬همچنین‪ ،‬به غیر از معیار‬
‫اولویت‪ ،‬هیچ نشانه ای از "هزینه" برای کاربر وجود ندارد‪ ،‬برخالف هزینه کل سیستم‪.‬‬

‫‪342‬‬
‫سیستم عامل های داخلی و اصول طراحی‪343.........................................................................................................................‬‬

‫‪ 6.5‬یک استراتژی وقفه یکپارچه‬

‫همانطور که جدول ‪ 6.1‬نشان می دهد‪ ،‬تمام استراتژی ها برای مقابله با وقفه دارای نقاط قوت و ضعف هستند‪ .‬به جای تالش‬
‫برای طراحی یک سیستم عامل که تنها یکی از این استراتژی ها را به کار می گیرد‪ ،‬ممکن است استفاده از استراتژی های‬
‫مختلف در موقعیت های مختلف کارآمدتر باشد‪ HOWA73 .‬یک رویکرد را پیشنهاد میکند‪:‬‬

‫‪ -‬منابع را به تعدادی از کالس های منابع مختلف گروه بندی کنید‪.‬‬

‫‪ -‬برای جلوگیری از انتظار دایره ای برای جلوگیری از وقفه بین کالس های منبع‪ ،‬از استراتژی ترتیب خطی که قبال تعریف شده‬
‫است استفاده کنید‪.‬‬

‫‪ -‬در یک کالس منبع‪ ،‬از الگوریتمی استفاده کنید که برای آن کالس مناسبتر است‪ .‬به عنوان نمونه ای از این تکنیک‪ ،‬کالس‬
‫های منابع زیر را در نظر بگیرید‪:‬‬

‫‪ -‬فضای قابل تعویض‪ :‬بلوک های حافظه در حافظه ثانویه برای استفاده در فرآیندهای مبادله‬

‫‪ -‬منابع پردازش‪ :‬دستگاه های قابل تخصیص‪ ،‬مانند درایوهای نوار‪ ،‬و فایل ها‬

‫‪ -‬حافظه اصلی‪ :‬قابل تخصیص به پردازش های موجود در صفحات یا بخش ها‬

‫‪ -‬منابع داخلی‪ :‬مانند کانال های ‪I/O‬‬

‫ترتیب فهرست قبلی نشان دهنده ترتیب تخصیص منابع است‪ .‬با توجه به توالی مراحلی که ممکن است یک فرآیند در طول عمر‬
‫خود طی کند‪ ،‬دستور معقول است‪ .‬در هر کالس می توان از استراتژی های زیر استفاده کرد‪:‬‬

‫فضای قابل تعویض‪ :‬پیشگیری از وقفه ها با الزام به تخصیص همه منابع مورد نیاز که ممکن است مورد استفاده قرار گیرد‪ ،‬مانند‬
‫استراتژی پیشگیری از نگه داشتن و انتظار‪ .‬این استراتژی در صورتی معقول است که حداکثر نیازهای ذخیره سازی شناخته شده‬
‫باشند‪ ،‬که اغلب چنین است‪ .‬اجتناب از وقفه نیز یک امکان است‪.‬‬

‫‪ -‬منابع فرآیندی‪ :‬اجتناب اغلب در این دسته موثر خواهد بود‪ ،‬زیرا منطقی است که انتظار داشته باشیم فرآیندها منابعی را که در‬
‫این کالس نیاز دارند‪ ،‬زودتر اعالم کنند‪ .‬پیشگیری از طریق سفارش منابع در این کالس نیز امکان پذیر است‪.‬‬

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

‫‪343‬‬
‫سیستم عامل های داخلی و اصول طراحی‪344.........................................................................................................................‬‬

‫شکل ‪ 6.11‬ترتیب غذا برای فیلسوفان‬

‫‪ 6.6‬مشکل فیلسوفان ناهار خوری‬

‫اکنون به مسئله فیلسوفان ناهار خوری می پردازیم که توسط ‪ Dijkstra DIJK71‬معرفی شده است‪ .‬پنج فیلسوف در خانه ای‬
‫زندگی می کنند که برای آنها سفره ای می چینند‪ .‬زندگی هر فیلسوف اصوالً شامل اندیشیدن و خوردن است‪ ،‬و طی سالها‬
‫تفکر‪ ،‬همه فیلسوفان توافق کردند که تنها غذایی که به تالشهای فکری آنها کمک میکند اسپاگتی است‪ .‬به دلیل عدم مهارت‬
‫دستی‪ ،‬هر فیلسوف برای خوردن اسپاگتی به دو چنگال نیاز دارد‪.‬‬

‫ترتیب غذا خوردن ساده است شکل ‪ :6.11‬یک میز گرد که روی آن یک کاسه بزرگ اسپاگتی‪ ،‬پنج بشقاب‪ ،‬یک عدد برای هر‬
‫فیلسوف‪ ،‬و پنج چنگال قرار دارد‪ .‬فیلسوفی که میخواهد غذا بخورد‪ ،‬به محل تعیین شدهاش سر میز میرود و با استفاده از دو‬
‫چنگال در دو طرف بشقاب‪ ،‬مقداری اسپاگتی میگیرد و میخورد‪ .‬مشکل‪ :‬تشریفاتی الگوریتمی ابداع کنید که به فیلسوفان اجازه‬
‫غذا خوردن بدهد‪ .‬الگوریتم باید طرد متقابل را برآورده کند هیچ دو فیلسوف نمی توانند همزمان از یک چنگال استفاده کنند در‬
‫حالی که از وقفه و گرسنگی اجتناب می کند در این مورد‪ ،‬این اصطالح دارای معنای تحت اللفظی و همچنین معنای الگوریتمی‬
‫است!‪ .‬این مشکل ممکن است به خودی خود مهم یا مرتبط به نظر نرسد‪ .‬با این حال‪ ،‬مشکالت اساسی در وقفه و گرسنگی را‬
‫نشان می دهد‪ .‬عالوه بر این‪ ،‬تالشها برای توسعه راهحلها بسیاری از مشکالت را در برنامهنویسی همزمان آشکار میکنند به‬
‫عنوان مثال‪ GING90 ،‬را ببینید‪ .‬عالوه بر این‪ ،‬مسئله فیلسوفان ناهار خوری را می توان به عنوان نماینده مشکالت مربوط به‬
‫هماهنگی منابع مشترک در نظر گرفت‪ ،‬که ممکن است زمانی رخ دهد که یک برنامه شامل رشته های اجرایی همزمان باشد‪ .‬بر‬
‫این اساس‪ ،‬این مشکل یک مورد آزمون استاندارد برای ارزیابی رویکردهای همگام سازی است‪.‬‬

‫‪344‬‬
‫سیستم عامل های داخلی و اصول طراحی‪345.........................................................................................................................‬‬

‫شکل ‪ 6.12‬اولین راه حل برای مسئله فیلسوفان غذاخوری‬

‫راه حل با استفاده از سمافورها‬

‫شکل ‪ 6.12‬راه حلی را با استفاده از سمافورها پیشنهاد می کند‪ .‬هر فیلسوف ابتدا چنگال سمت چپ و سپس چنگال سمت‬
‫راست را برمی دارد‪ .‬بعد از اینکه فیلسوف غذا خوردن را تمام کرد‪ ،‬دو چنگال روی میز عوض می شوند‪ .‬این راه حل‪ ،‬افسوس‪ ،‬به‬
‫وقفه می انجامد‪ :‬اگر همه فیلسوفان در یک زمان گرسنه باشند‪ ،‬همه می نشینند‪ ،‬همگی چنگال سمت چپ خود را برمی دارند و‬
‫همه دستشان را به سمت چنگال دیگر دراز می کنند که آنجا نیست‪ . .‬در این موقعیت ناپسند‪ ،‬همه فیلسوفان از گرسنگی می‬
‫میرند‪.‬‬

‫برای غلبه بر خطر وقفه ‪ ،‬می توانیم پنج چنگال اضافی بخریم راه حل بهداشتی تر! یا به فیلسوفان یاد دهیم که اسپاگتی را فقط‬
‫با یک چنگال بخورند‪ .‬به عنوان یک رویکرد دیگر‪ ،‬میتوانیم یک خدمتکار اضافه کنیم که تنها به چهار فیلسوف در یک زمان‬
‫اجازه ورود به اتاق غذاخوری را میدهد‪ .‬با حداکثر چهار فیلسوف نشسته‪ ،‬حداقل یک فیلسوف به دو چنگال دسترسی خواهد‬
‫داشت‪ .‬شکل ‪ 6.13‬چنین راه حلی را با استفاده از سمافورها نشان می دهد‪ .‬این راه حل عاری از وقفه و گرسنگی است‪.‬‬

‫راه حل با استفاده از مانیتور‬

‫شکل ‪ 6.14‬راه حلی برای مشکل فیلسوفان ناهار خوری با استفاده از مانیتور نشان می دهد‪ .‬یک بردار از پنج متغیر شرط تعریف‬
‫شده است‪ ،‬یک متغیر شرط در هر ‪ . fork‬از این متغیرهای شرط استفاده میشود تا فیلسوف را قادر میسازد تا منتظر در‬
‫دسترس بودن چنگال بماند‪ .‬عالوه بر این‪ ،‬یک بردار ‪ Boolean‬وجود دارد که وضعیت در دسترس بودن هر ‪ fork‬را ثبت می‬
‫کند درست به این معنی است که ‪ fork‬در دسترس است‪ .‬مانیتور از دو رویه تشکیل شده است‪ .‬روش ‪ get_forks‬توسط یک‬
‫فیلسوف برای گرفتن چنگال چپ و راست خود استفاده می شود‪ .‬اگر هر دو ‪ fork‬در دسترس نباشد‪ ،‬فرآیند فیلسوف در متغیر‬
‫شرایط مناسب در صف قرار می گیرد‪ .‬این فرآیند فیلسوف دیگری را قادر می سازد تا وارد مانیتور شود‪ .‬روش آزاد کردن چنگال‬
‫‪345‬‬
‫سیستم عامل های داخلی و اصول طراحی‪346.........................................................................................................................‬‬

‫برای در دسترس قرار دادن دو چنگال استفاده می شود‪ .‬توجه داشته باشید که ساختار این راه حل شبیه به راه حل سمافور ارائه‬
‫شده در شکل ‪ 6.12‬است‪ .‬در هر دو مورد‪ ،‬فیلسوف ابتدا چنگال چپ و سپس چنگال راست را می گیرد‪ .‬بر خالف راه حل‬
‫سمافور‪ ،‬این راه حل مانیتور از وقفه رنج نمی برد‪ ،‬زیرا ممکن است تنها یک فرآیند در هر زمان در مانیتور باشد‪ .‬به عنوان مثال‪،‬‬
‫اولین فرآیند فیلسوفی که وارد مانیتور می شود تضمین می کند که می تواند چنگال سمت راست را پس از برداشتن چنگال‬
‫چپ قبل از اینکه فیلسوف بعدی در سمت راست فرصتی برای گرفتن چنگال چپ خود که همان چنگال راست این فیلسوف‬
‫است را بگیرد‪ ،‬بردارد‪.‬‬

‫شکل ‪ 6.13‬راه حل دوم برای مسئله فیلسوفان غذاخوری‬

‫‪ 6.7‬مکانیسم های همزمانی یونیکس‬

‫یونیکس مکانیسمهای مختلفی را برای ارتباطات بین پردازنده و همگامسازی فراهم میکند‪ .‬در اینجا به مهمترین آنها می‬
‫پردازیم‪:‬‬

‫‪ -‬لوله ها‬

‫‪ -‬پیام ها‬

‫‪ -‬حافظه مشترک‬

‫‪ -‬سمافورها‬

‫‪ -‬سیگنال ها‬

‫‪346‬‬
‫سیستم عامل های داخلی و اصول طراحی‪347.........................................................................................................................‬‬

‫شکل ‪ 6.14‬راه حلی برای مشکل فیلسوفان غذاخوری با استفاده از مانیتور‬

‫لولهها‪ ،‬پیامها و حافظه مشترک را میتوان برای برقراری ارتباط دادهها بین فرآیندها استفاده کرد‪ ،‬در حالی که سمافورها و‬
‫سیگنالها برای تحریک اقدامات توسط سایر فرآیندها استفاده میشوند‪.‬‬

‫‪ 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‬را فهرست می کند‪.‬‬

‫جدول ‪ 6.2‬سیگنال های یونیکس‬

‫جایگاه‬ ‫نام‬ ‫شرح‬


‫‪01‬‬ ‫‪SIGHU‬‬ ‫قطع کن؛ زمانی به پردازش فرستاده می شود که کرنل فرض می کند که کاربر‬
‫‪P‬‬ ‫آن فرآیند هیچ کار مفیدی انجام نمی دهد‬
‫‪02‬‬ ‫‪SIGINT‬‬ ‫قطع کنید‬
‫‪03‬‬ ‫ترک؛ ارسال شده توسط کاربر برای القای توقف فرآیند و تولید تخلیه هسته ‪SIGQUI‬‬
‫‪T‬‬
‫‪04‬‬ ‫‪SIGILL‬‬ ‫آموزش غیر قانونی‬
‫‪05‬‬ ‫‪SIGTR‬‬ ‫تله ردیابی؛ اجرای کد برای ردیابی فرآیند را آغاز می کند‬
‫‪AP‬‬
‫‪06‬‬ ‫‪SIGIOT‬‬ ‫دستورالعمل‪IOT‬‬
‫‪07‬‬ ‫‪SIGEM‬‬ ‫دستورالعمل‪EMT‬‬
‫‪T‬‬
‫‪08‬‬ ‫‪SIGFPE‬‬ ‫استثنای ممیز شناور‬
‫‪09‬‬ ‫‪SIGKIL‬‬ ‫کشتن؛ فرآیند را خاتمه دهید‬

‫‪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‬‬

‫‪ 6.8‬مکانیسم های همزمانی هسته لینوکس‬

‫لینوکس شامل تمام مکانیسم های همزمانی موجود در سایر سیستم های یونیکس مانند ‪ ،SVR4‬از جمله لوله ها‪ ،‬پیام ها‪،‬‬
‫حافظه مشترک و سیگنال ها است‪ .‬لینوکس همچنین از نوع خاصی از سیگنالینگ به نام سیگنال های بالدرنگ ‪ RT‬پشتیبانی‬
‫می کند‪ .‬اینها بخشی از ویژگی ‪ POSIX.1b Real-time Extensions‬هستند‪ .‬سیگنالهای ‪ RT‬با سیگنالهای استاندارد‬
‫یونیکس یا ‪ POSIX.1‬از سه طریق اصلی متفاوت هستند‪:‬‬

‫‪ -‬تحویل سیگنال به ترتیب اولویت پشتیبانی می شود‪.‬‬

‫‪ -‬سیگنال های متعدد را می توان در صف قرار داد‪.‬‬

‫‪351‬‬
‫سیستم عامل های داخلی و اصول طراحی‪352.........................................................................................................................‬‬

‫‪ -‬با سیگنال های استاندارد‪ ،‬هیچ مقدار یا پیامی نمی تواند به فرآیند هدف ارسال شود‪ .‬این فقط یک اطالعیه است با سیگنال‬
‫های ‪ RT‬امکان ارسال یک مقدار یک عدد صحیح یا یک اشاره گر به همراه سیگنال وجود دارد‪.‬‬

‫لینوکس همچنین شامل مجموعهای غنی از مکانیسمهای همزمانی است که بهطور خاص برای استفاده در هنگام اجرای یک‬
‫رشته در حالت هسته در نظر گرفته شده است‪ .‬یعنی اینها مکانیسم هایی هستند که در هسته برای ایجاد همزمانی در اجرای کد‬
‫هسته استفاده می شوند‪ .‬این بخش مکانیسم های همزمانی هسته لینوکس را بررسی می کند‪.‬‬

‫عملیات اتمی‬

‫لینوکس مجموعه ای از عملیات را ارائه می دهد که عملیات اتمی روی یک متغیر را تضمین می کند‪ .‬از این عملیات می توان‬
‫برای جلوگیری از شرایط مسابقه ساده استفاده کرد‪ .‬یک عملیات اتمی بدون وقفه و بدون تداخل اجرا می شود‪ .‬در یک سیستم‬
‫تک پردازنده‪ ،‬رشته ای که یک عملیات اتمی را انجام می دهد نمی تواند پس از شروع عملیات تا پایان عملیات قطع شود‪ .‬عالوه‬
‫بر این‪ ،‬در یک سیستم چند پردازنده‪ ،‬متغیری که روی آن کار میشود‪ ،‬تا زمانی که این عملیات تکمیل شود‪ ،‬از دسترسی‬
‫رشتههای دیگر قفل میشود‪.‬‬

‫دو نوع عملیات اتمی در لینوکس تعریف شده است‪ :‬عملیات عدد صحیح که بر روی یک متغیر عدد صحیح عمل می کند و‬
‫عملیات بیت مپ که بر روی یک بیت در یک بیت مپ عمل می کند جدول ‪ .6.3‬این عملیات باید بر روی هر معماری که‬
‫لینوکس را پیاده سازی می کند‪ ،‬اجرا شود‪ .‬برای برخی از معماری ها‪ ،‬دستورالعمل های زبان اسمبلی مربوطه برای عملیات اتمی‬
‫وجود دارد‪ .‬در معماری های دیگر‪ ،‬عملیاتی که گذرگاه حافظه را قفل می کند برای تضمین اتمی بودن عملیات استفاده می شود‪.‬‬

‫‪352‬‬
‫سیستم عامل های داخلی و اصول طراحی‪353.........................................................................................................................‬‬

‫جدول ‪ 6.3‬عملیات اتمی لینوکس‬

‫عملیات عدد صحیح اتمی‬


‫‪ATOMIC_INIT int i‬‬ ‫در اعالن‪ :‬یک ‪ atomic_t‬را به ‪i‬‬
‫مقداردهی کنید‬
‫‪int atomic_readatomic_t *v‬‬ ‫مقدار صحیح ‪ v‬را بخوانید‬
‫‪void atomic_setatomic_t *v, int i‬‬ ‫مقدار ‪ v‬را روی عدد صحیح ‪ i‬قرار دهید‬
‫‪void atomic_addint i, atomic_t *v‬‬ ‫‪i‬را به ‪ v‬اضافه کنید‬
‫‪void atomic_subint i, atomic_t *v‬‬ ‫‪i‬را از ‪ v‬کم کنید‬
‫‪void atomic_incatomic_t *v‬‬ ‫‪1‬را به ‪ v‬اضافه کنید‬
‫‪void atomic_decatomic_t *v‬‬ ‫‪1‬را از ‪ v‬کم کنید‬
‫‪int‬‬ ‫‪i‬را از ‪ v‬کم کنید‪ .‬اگر نتیجه صفر باشد‪،‬‬
‫‪atomic_sub_and_testint i,‬‬ ‫‪ 1‬را برگردانید‪ .‬در غیر این صورت ‪0‬‬
‫‪atomic_t *v‬‬
‫برگردانید‬
‫‪int‬‬ ‫‪i‬را به ‪ v‬اضافه کنید‪ .‬اگر نتیجه منفی‬
‫‪atomic_add_negativeint‬‬ ‫بود‪ 1 ،‬را برگردانید‪ .‬در غیر این صورت ‪0‬‬
‫‪i,atomic_t *v‬‬
‫را برگردانید برای پیاده سازی سمافورها‬
‫استفاده می شود‬
‫‪int atomic_dec_and_testatomic_t‬‬ ‫‪1‬را از ‪ v‬کم کنید‪ .‬اگر نتیجه صفر باشد‪،‬‬
‫‪*v‬‬ ‫‪ 1‬را برگردانید‪ .‬در غیر این صورت ‪0‬‬
‫برگردانید‬
‫‪int atomic_inc_and_testatomic_t *v‬‬ ‫‪1‬را به ‪ v‬اضافه کنید‪ .‬اگر نتیجه صفر‬
‫باشد‪ 1 ،‬را برگردانید‪ .‬در غیر این صورت ‪0‬‬
‫برگردانید‬
‫عملیات بیت مپ اتمی‬
‫‪void set_bitint nr, void *addr‬‬ ‫بیت ‪ nr‬را در نقشه بیتی که توسط ‪addr‬‬
‫به آن اشاره شده است‪ ،‬تنظیم کنید‬
‫‪353‬‬
‫سیستم عامل های داخلی و اصول طراحی‪354.........................................................................................................................‬‬

‫‪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‬در یک برنامه به آن اجازه می دهد تا مستقل از اجرای آن بر روی یک سیستم تک پردازنده یا چند پردازنده باشد‪.‬‬

‫جدول ‪ Spinlocks 6.4‬لینوکس‬

‫‪void spin_lockspinlock_t *lock‬‬ ‫قفل مشخص شده را به دست می آورد‪،‬‬


‫در صورت نیاز می چرخد تا زمانی که در‬
‫دسترس باشد‬
‫‪void spin_lock_irqspinlock_t *lock‬‬ ‫مانند‪ ، spin_lock‬اما وقفه های‬
‫پردازنده محلی را نیز غیرفعال می کند‬
‫‪void spin_lock_irqsavespinlock_t‬‬ ‫مانند‪ ، spin_lock_irq‬اما همچنین‬
‫‪*lock,unsigned long flags‬‬ ‫وضعیت وقفه فعلی را در پرچم ها ذخیره‬
‫می کند‬

‫‪356‬‬
‫سیستم عامل های داخلی و اصول طراحی‪357.........................................................................................................................‬‬

‫‪void spin_lock_bhspinlock_t *lock‬‬ ‫مانند‪ ، spin_lock‬اما اجرای تمام‬


‫نیمه های پایینی را نیز غیرفعال می‬
‫کند‬
‫‪void spin_unlockspinlock_t *lock‬‬ ‫قفل داده شده را آزاد می کند‬
‫‪void spin_unlock_irqspinlock_t‬‬ ‫قفل داده شده را آزاد می کند و وقفه های‬
‫‪*lock‬‬ ‫محلی را فعال می کند‬
‫‪void‬‬ ‫قفل داده شده را آزاد می کند و وقفه های‬
‫‪spin_unlock_irqrestorespinlock_t‬‬ ‫محلی را به حالت قبلی باز می گرداند‬
‫‪*lock, unsigned long flags‬‬
‫‪void spin_unlock_bhspinlock_t‬‬ ‫قفل داده شده را آزاد می کند و نیمه های‬
‫‪*lock‬‬ ‫پایینی را فعال می کند‬
‫‪void spin_lock_initspinlock_t‬‬ ‫اسپینالک داده شده را راه اندازی می کند‬
‫‪*lock‬‬
‫‪int spin_trylockspinlock_t *lock‬‬ ‫تالش برای به دست آوردن قفل مشخص‪.‬‬
‫اگر قفل در حال حاضر نگه داشته شود‬
‫غیر صفر و در غیر این صورت صفر را‬
‫برمی گرداند‬
‫‪int spin_is_lockedspinlock_t *lock‬‬ ‫اگر قفل در حال حاضر نگه داشته شود‬
‫غیر صفر و در غیر این صورت صفر را‬
‫برمیگرداند‬

‫‪ SPINLOCK READER-WRITER‬چرخش خواننده‪-‬نویسنده مکانیزمی است که اجازه می دهد تا درجه بیشتری از‬
‫همزمانی در هسته نسبت به اسپینالک اصلی وجود داشته باشد‪ .‬اسپینالک خواننده‪-‬نویسنده به چندین رشته اجازه میدهد تا‬
‫دسترسی همزمان به ساختار داده یکسان را فقط برای خواندن داشته باشند‪ ،‬اما برای رشتهای که قصد بهروزرسانی ساختار داده‬
‫را دارد‪ ،‬دسترسی انحصاری به اسپینالک میدهد‪ .‬هر اسپینالک خواننده‪-‬نویسنده از یک شمارنده خواننده ‪ 24‬بیتی و یک پرچم‬
‫باز کردن قفل با تفسیر زیر تشکیل شده است‪:‬‬

‫‪357‬‬
‫سیستم عامل های داخلی و اصول طراحی‪358.........................................................................................................................‬‬

‫‪Counter‬‬ ‫‪Fla‬‬ ‫تفسیر‬


‫‪g‬‬
‫‪0‬‬ ‫‪1‬‬ ‫اسپینالک آزاد شده و برای استفاده در‬
‫دسترس است‪.‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪Spinlock‬برای نوشتن توسط یک رشته به‬
‫دست آمده است‪.‬‬
‫‪nn 0‬‬ ‫‪0‬‬ ‫‪Spinlock‬برای خواندن توسط ‪ n‬رشته به‬
‫دست آمده است‪.‬‬
‫‪nn 0‬‬ ‫‪1‬‬ ‫معتبر نیست‬

‫همانند اسپینالک اصلی‪ ،‬نسخه های ساده‪ irq_ ،‬و _‪ irqsave‬اسپینالک خواننده‪-‬نویسنده وجود دارد‪ .‬توجه داشته باشید که‬
‫چرخش خواننده‪-‬نویسنده خوانندگان را بر نویسنده ها ترجیح می دهد‪ .‬اگر چرخش برای خوانندگان نگه داشته شود‪ ،‬تا زمانی‬
‫که حداقل یک خواننده وجود داشته باشد‪ ،‬یک نویسنده نمی تواند جلوی چرخش را بگیرد‪ .‬عالوه بر این‪ ،‬حتی زمانی که‬
‫نویسنده منتظر است‪ ،‬ممکن است خوانندگان جدیدی به قفل اسپینالک اضافه شوند‪.‬‬

‫سمافورها‬

‫در سطح کاربر‪ ،‬لینوکس یک رابط سمافور مطابق با آن در ‪ UNIX SVR4‬فراهم می کند‪ .‬در داخل‪ ،‬لینوکس پیاده سازی‬
‫سمافورها را برای استفاده خود فراهم می کند‪ .‬یعنی کدی که بخشی از هسته است می تواند سمافورهای هسته را فراخوانی کند‪.‬‬
‫این سمافورهای هسته نمی توانند مستقیماً توسط برنامه کاربر از طریق فراخوانی سیستم قابل دسترسی باشند‪ .‬آنها به عنوان‬
‫توابعی در هسته پیاده سازی می شوند و بنابراین کارآمدتر از سمافورهای قابل مشاهده توسط کاربر هستند‪.‬‬

‫لینوکس سه نوع تسهیالت سمافور را در هسته فراهم می کند‪ :‬سمافورهای باینری‪ ،‬سمافورهای شمارش و سمافورهای خواننده‪-‬‬
‫نویسنده‪.‬‬

‫سمافورهای باینری و شمارش سمافورهای باینری و شمارش تعریف شده در لینوکس ‪ 2.6‬جدول ‪ 6.5‬همان عملکردی را دارند‬
‫که برای این سمافورها در فصل ‪ 5‬توضیح داده شد‪ .‬نام تابع پایین و باال برای توابع ذکر شده در فصل ‪ 5‬به عنوان ‪ semWait‬و‬
‫‪ semSignal‬استفاده می شود‪.‬به ترتیب‪.‬‬

‫‪358‬‬
‫سیستم عامل های داخلی و اصول طراحی‪359.........................................................................................................................‬‬

‫یک سمافور شمارش با استفاده از تابع ‪ sema_init‬مقداردهی اولیه می شود که به سمافور یک نام می دهد و مقدار اولیه را به‬
‫سمافور اختصاص می دهد‪ .‬سمافورهای باینری که در لینوکس ‪ MUTEX‬نامیده می شوند‪ ،‬با استفاده از توابع‬
‫‪ init_MUTEX‬و ‪ init_ MUTEX_LOCKED‬مقداردهی اولیه می شوند که سمافور را به ترتیب به ‪ 1‬یا ‪ 0‬مقداردهی‬
‫می کنند‪.‬‬

‫لینوکس سه نسخه از عملیات ‪ down semWait‬را ارائه می دهد‪.‬‬

‫‪ .1‬تابع ‪ down‬مربوط به عملیات ‪ semWait‬سنتی است‪ .‬یعنی ‪ thread‬سمافور را آزمایش می کند و اگر سمافور در دسترس‬
‫نباشد مسدود می شود‪ .‬زمانی که یک عملیات باال بر روی این سمافور اتفاق می افتد‪ ،‬موضوع بیدار می شود‪ .‬توجه داشته باشید‬
‫که این نام تابع برای عملیات بر روی یک سمافور شمارش یا یک سمافور باینری استفاده می شود‪.‬‬

‫‪ .2‬تابع ‪ down_interruptible‬به ‪ thread‬اجازه می دهد تا سیگنال هسته را دریافت کند و به آن پاسخ دهد در حالی که در‬
‫عملیات ‪ down‬مسدود شده است‪ .‬اگر ‪ thread‬توسط یک سیگنال بیدار شود‪ ،‬تابع ‪ down_interruptible‬مقدار شمارش‬
‫سمافور را افزایش میدهد و یک کد خطا که در لینوکس به نام ‪ EINTR-‬شناخته میشود‪ ،‬برمیگرداند‪ .‬این موضوع به رشته‬
‫هشدار می دهد که تابع سمافور فراخوانی شده قطع شده است‪ .‬در واقع‪ ،‬رشته مجبور شده است که سمافور را «دست بکشد»‪.‬‬
‫این ویژگی برای درایورهای دستگاه و سایر سرویس هایی که در آنها به راحتی می توان عملیات سمافور را نادیده گرفت مفید‬
‫است‪.‬‬

‫‪ .3‬تابع ‪ down_trylock‬این امکان را فراهم می کند که سعی کنید یک سمافور را بدون مسدود شدن به دست آورید‪ .‬اگر‬
‫سمافور موجود باشد‪ ،‬اکتسابی است‪ .‬در غیر این صورت‪ ،‬این تابع یک مقدار غیر صفر را بدون مسدود کردن ‪ thread‬برمی‬
‫گرداند‪.‬‬

‫سمافورهای خواننده‪-‬نویسنده سمافور خواننده‪-‬نویسنده کاربران را به خوانندگان و نویسنده ها تقسیم می کند‪ .‬چندین خواننده‬
‫همزمان بدون نویسنده اما فقط یک نویسنده واحد بدون خواننده همزمان اجازه می دهد‪ .‬در واقع‪ ،‬سمافور به عنوان یک سمافور‬
‫شمارش برای خوانندگان اما یک سمافور باینری ‪ MUTEX‬برای نویسندگان عمل می کند‪ .‬جدول ‪ 6.5‬عملیات اصلی سمافور‬
‫خواننده‪-‬نویسنده را نشان می دهد‪ .‬سمافور خواننده‪-‬نویسنده از خواب بی وقفه استفاده می کند‪ ،‬بنابراین تنها یک نسخه از هر‬
‫یک از عملیات پایین وجود دارد‪.‬‬

‫‪359‬‬
‫سیستم عامل های داخلی و اصول طراحی‪360.........................................................................................................................‬‬

‫جدول ‪ 6.5‬سمافورهای لینوکس‬

‫سمافورهای سنتی‬
‫‪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.........................................................................................................................‬‬

‫‪void down_readstruct‬‬ ‫عملیات پایین برای خوانندگان‬


‫‪rw_semaphore,‬‬
‫‪*rwsem‬‬
‫‪void up_readstruct‬‬ ‫عملیات باال برای خوانندگان‬
‫‪rw_semaphore,‬‬
‫‪*rwsem‬‬
‫‪void down_writestruct‬‬ ‫عملیات پایین برای نویسندگان‬
‫‪rw_semaphore,‬‬
‫‪*rwsem‬‬
‫‪void up_writestruct‬‬ ‫عملیات باال برای نویسندگان‬
‫‪rw_semaphore,‬‬
‫‪*rwsem‬‬

‫موانع‬

‫در برخی از معماریها‪ ،‬اجرارها و‪/‬یا سختافزار پردازنده ممکن است برای بهینهسازی عملکرد‪ ،‬دسترسیهای حافظه را در کد‬
‫منبع تغییر ترتیب دهند‪ .‬این ترتیببندی مجدد برای بهینهسازی استفاده از خط لوله دستورالعمل در پردازنده انجام میشود‪.‬‬
‫الگوریتمهای مرتبسازی مجدد شامل بررسیهایی هستند تا اطمینان حاصل شود که وابستگیهای دادهها نقض نمیشوند‪ .‬به‬
‫عنوان مثال‪ ،‬کد‪:‬‬

‫‪; b = 1;a = 1‬‬


‫ممکن است دوباره ترتیب داده شود تا مکان حافظه ‪ b‬قبل از مکان حافظه ‪ a‬به روز شود‬

‫به روز می شود‪ .‬با این حال‪ ،‬کد‪:‬‬

‫‪; b = a; a = 1‬‬
‫دوباره سفارش داده نخواهد شد با این حال‪ ،‬مواردی وجود دارد که مهم است که خواندن یا نوشتن به ترتیب مشخص شده به‬
‫دلیل استفاده از اطالعاتی که توسط رشته دیگر یا یک دستگاه سخت افزاری ایجاد می شود‪ ،‬اجرا شود‪.‬‬

‫لینوکس برای اجرای ترتیبی که دستورالعملها اجرا میشوند‪ ،‬تسهیالت مانع حافظه را فراهم میکند‪ .‬جدول ‪ 6.6‬مهمترین توابع‬
‫تعریف شده برای این تسهیالت را فهرست می کند‪ .‬عملیات ‪ rmb‬تضمین می کند که هیچ خواندنی در سرتاسر مانعی که توسط‬

‫‪361‬‬
‫سیستم عامل های داخلی و اصول طراحی‪362.........................................................................................................................‬‬

‫محل ‪ rmb‬در کد تعریف شده است‪ ،‬رخ نمی دهد‪ .‬به طور مشابه‪ ،‬عملیات ‪ wmb‬تضمین می کند که هیچ نوشته ای در سرتاسر‬
‫مانعی که توسط محل ‪ wmb‬در کد تعریف شده است‪ ،‬رخ نمی دهد‪ .‬عملیات ‪ mb‬هم یک بار و هم یک مانع ذخیره می کند‪.‬‬

‫دو نکته مهم در مورد عملیات مانع باید به آن توجه شود‪:‬‬

‫‪ .1‬موانع مربوط به دستورالعمل های ماشین‪ ،‬یعنی بارها و انبارها است‪ .‬بنابراین‪ ،‬دستور زبان سطح باالتر ‪ a = b‬شامل یک بار‬
‫خواندن از مکان ‪ b‬و یک ذخیره نوشتن به مکان ‪ a‬است‪.‬‬

‫‪ .2‬عملیات ‪ wmb ،rmb‬و ‪ mb‬رفتار اجرار و پردازنده را دیکته می کنند‪ .‬در مورد اجرار‪ ،‬عملیات مانع حکم می کند که اجرار‬
‫دستورات را در طول فرآیند اجرا دوباره ترتیب ندهد‪ .‬در مورد پردازنده‪ ،‬عملیات مانع حکم می کند که هر دستورالعملی که در‬
‫خط لوله قبل از مانع وجود دارد‪ ،‬باید قبل از هر دستورالعملی که بعد از مانع با آن مواجه می شود‪ ،‬برای اجرا متعهد شود‪.‬‬

‫جدول ‪ 6.6‬عملیات مانع حافظه لینوکس‬

‫‪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.........................................................................................................................‬‬

‫‪SOLARIS thread primitives synchronization primitives 6.9‬‬

‫عالوه بر مکانیسمهای همزمانی یونیکس ‪ ،SVR4‬سوالریس از چهار حالت اولیه همگامسازی رشته پشتیبانی میکند‪:‬‬

‫‪ -‬قفل های محرومیت متقابل ‪.mutex‬‬

‫‪ -‬سمافورها‬

‫‪ -‬خواننده های متعدد‪ ،‬قفل های تک نویسنده خوانندگان‪/‬نویسنده‪.‬‬

‫‪ -‬متغیرهای شرط‬

‫سوالریس این موارد اولیه را در هسته برای رشتههای هسته پیادهسازی میکند‪ .‬آنها همچنین در کتابخانه ‪ threads‬برای‬
‫موضوعات سطح کاربر ارائه شده اند‪ .‬شکل ‪ 6.15‬ساختارهای داده را برای این نمونه های اولیه نشان می دهد‪ .‬توابع اولیه برای‬
‫اولیه ها برخی از اعضای داده را پر می کنند‪ .‬هنگامی که یک شی همگام سازی ایجاد می شود‪ ،‬اساساً تنها دو عملیات وجود دارد‬
‫که می توان انجام داد‪ enter :‬قفل گرفتن و آزاد کردن باز کردن قفل‪ .‬هیچ مکانیزمی در هسته یا کتابخانه رشته ها برای تحمیل‬
‫طرد متقابل یا جلوگیری از وقفه وجود ندارد‪ .‬اگر یک رشته سعی کند به یک قطعه داده یا کدی که قرار است محافظت شود اما‬
‫از اولیه همگام سازی مناسب استفاده نمی کند‪ ،‬دسترسی پیدا کند‪ ،‬چنین دسترسی رخ می دهد‪ .‬اگر یک رشته یک شی را قفل‬
‫کند و سپس قفل آن را باز نکند‪ ،‬هیچ اقدامی برای هسته انجام نمی شود‪.‬‬

‫همه اصول اولیه همگام سازی به وجود یک دستورالعمل سخت افزاری نیاز دارند که به یک شی اجازه می دهد تا در یک عملیات‬
‫اتمی آزمایش و تنظیم شود‪.‬‬

‫قفل محرومیت متقابل‬

‫یک ‪ mutex‬برای اطمینان از اینکه فقط یک رشته در یک زمان می تواند به منبع محافظت شده توسط ‪ mutex‬دسترسی‬
‫داشته باشد استفاده می شود‪ .‬رشته ای که ‪ mutex‬را قفل می کند باید همان رشته ای باشد که قفل آن را باز می کند‪ .‬یک‬
‫‪ thread‬با اجرای ‪ mutex_enter‬اولیه تالش می کند تا قفل ‪ mutex‬را بدست آورد‪ .‬اگر ‪ mutex_enter‬نتواند قفل را‬
‫تنظیم کند چون قبالً توسط رشته دیگری تنظیم شده است‪ ،‬عمل مسدود کردن به اطالعات نوع خاصی که در شی ‪mutex‬‬
‫ذخیره شده است بستگی دارد‪ .‬سیاست مسدودسازی پیشفرض یک ‪ spinlock‬است‪ :‬یک رشته مسدود شده وضعیت قفل را در‬
‫حین اجرا در یک حلقه انتظار مشغول بررسی میکند‪ .‬مکانیزم مسدودسازی مبتنی بر وقفه اختیاری است‪ .‬در این مورد اخیر‪،‬‬
‫‪ mutex‬شامل یک شناسه گردان است که صفی از رشتههای خوابیده روی این قفل را مشخص میکند‪.‬‬

‫‪363‬‬
‫سیستم عامل های داخلی و اصول طراحی‪364.........................................................................................................................‬‬

‫شکل ‪ 6.15‬ساختار داده های همگام سازی سوالریس‬

‫عملیات روی قفل ‪ mutex‬عبارتند از‪:‬‬

‫‪ mutex_tryenter‬اولیه یک روش غیر مسدود کننده برای اجرای تابع طرد متقابل ارائه می دهد‪ .‬این برنامهنویس را قادر‬
‫میسازد تا از یک رویکرد انتظار اشغالی برای رشتههای سطح کاربر استفاده کند‪ ،‬که از مسدود کردن کل فرآیند به دلیل مسدود‬
‫شدن یک رشته جلوگیری میکند‪.‬‬

‫سمافورها‬

‫سوالریس سمافورهای شمارش کالسیک را با موارد اولیه زیر ارائه می کند‪:‬‬

‫باز هم‪ sema_tryp ،‬اولیه اجازه انتظار مشغول را می دهد‪.‬‬

‫قفل خواننده‪/‬نویسنده‬

‫قفل خواننده‪/‬نویسنده به چندین رشته اجازه می دهد تا به طور همزمان به یک شی محافظت شده توسط قفل دسترسی فقط‬
‫خواندنی داشته باشند‪ .‬همچنین به یک رشته اجازه می دهد تا در یک زمان به شی برای نوشتن دسترسی داشته باشد‪ ،‬در حالی‬
‫که همه خوانندگان را حذف می کند‪ .‬وقتی قفل برای نوشتن به دست میآید‪ ،‬وضعیت قفل نوشتن را به خود میگیرد‪ :‬همه‬
‫‪364‬‬
‫سیستم عامل های داخلی و اصول طراحی‪365.........................................................................................................................‬‬

‫رشتههایی که سعی در دسترسی برای خواندن یا نوشتن دارند باید منتظر بمانند‪ .‬اگر یک یا چند خواننده قفل را دریافت کرده‬
‫باشند‪ ،‬وضعیت آن قفل خوانده شده است‪ .‬ابتدایی ها به شرح زیر است‪:‬‬

‫متغیرهای شرط‬

‫یک متغیر شرط برای صبر کردن تا زمانی که یک شرط خاص درست باشد استفاده می شود‪ .‬متغیرهای شرط باید همراه با قفل‬
‫‪ mutex‬استفاده شوند‪ .‬این یک مانیتور از نوع نشان داده شده در شکل ‪ 6.14‬را پیاده سازی می کند‪ .‬ابتدایی ها به شرح زیر‬
‫است‪:‬‬

‫آن را قبل از بازگشت از آنجایی که ممکن است دریافت مجدد ‪ mutex‬توسط رشته های دیگری که منتظر ‪ mutex‬هستند‬
‫مسدود شود‪ ،‬شرایطی که باعث انتظار می شود باید دوباره آزمایش شود‪ .‬بنابراین‪ ،‬استفاده معمولی به شرح زیر است‪:‬‬

‫این اجازه می دهد تا شرط یک عبارت پیچیده باشد‪ ،‬زیرا توسط ‪ mutex‬محافظت می شود‪.‬‬

‫‪ 6.10‬ویندوز‪ 7‬مکانیسم های همزمانی‬

‫ویندوز همگام سازی بین رشته ها را به عنوان بخشی از معماری شی فراهم می کند‪ .‬مهمترین روشهای همگامسازی عبارتند از‬
‫اشیاء توزیعکننده اجرایی‪ ،‬بخشهای حیاتی حالت کاربر‪ ،‬قفلهای باریک خواننده‪-‬نویسنده‪ ،‬متغیرهای شرط‪ ،‬و عملیات بدون‬

‫‪365‬‬
‫سیستم عامل های داخلی و اصول طراحی‪366.........................................................................................................................‬‬

‫قفل‪ .‬اشیاء ‪ Dispatcher‬از توابع انتظار استفاده می کنند‪ .‬ابتدا توابع انتظار را شرح می دهیم و سپس به روش های همگام‬
‫سازی نگاه می کنیم‪.‬‬

‫توابع انتظار‬

‫توابع انتظار به یک رشته اجازه می دهد تا اجرای خود را مسدود کند‪ .‬توابع انتظار تا زمانی که معیارهای مشخص شده برآورده‬
‫نشده باشند باز نمی گردند‪ .‬نوع تابع انتظار مجموعه معیارهای مورد استفاده را تعیین می کند‪ .‬هنگامی که یک تابع انتظار‬
‫فراخوانی می شود‪ ،‬بررسی می کند که آیا معیارهای انتظار برآورده شده اند یا خیر‪ .‬اگر معیارها برآورده نشده باشند‪ ،‬رشته‬
‫فراخوان وارد حالت انتظار می شود‪ .‬در حالی که منتظر برآورده شدن معیارها است‪ ،‬از زمان پردازشگر استفاده نمی کند‪ .‬ساده‬
‫ترین نوع تابع انتظار‪ ،‬تابعی است که روی یک شی منتظر می ماند‪ .‬تابع ‪ WaitForSingleObject‬به یک دسته برای یک‬
‫‪ -synchroni‬نیاز دارد‬

‫شیء زاسیون تابع زمانی که یکی از موارد زیر رخ می دهد برمی گردد‪:‬‬

‫‪ -‬شی مشخص شده در حالت سیگنال قرار دارد‪.‬‬

‫‪ -‬فاصله زمانی سپری می شود‪ .‬بازه وقفه را می توان روی ‪ INFINITE‬تنظیم کرد تا مشخص شود که زمان انتظار تمام نمی‬
‫شود‪.‬‬

‫اشیاء توزیع کننده‬

‫مکانیزمی که توسط ‪ Windows Executive‬برای پیاده سازی تسهیالت همگام سازی استفاده می شود‪ ،‬خانواده اشیاء توزیع‬
‫کننده است که با توضیحات مختصری در جدول ‪ 6.7‬فهرست شده است‪.‬‬

‫‪366‬‬
‫سیستم عامل های داخلی و اصول طراحی‪367.........................................................................................................................‬‬

‫جدول ‪ 6.7‬اشیاء همگام سازی ویندوز‬

‫نوع شی‬ ‫تعریف‬ ‫روی حالت سیگنال‬ ‫تأثیر بر‬


‫موضوعات انتظار وقتی تنظیم کنید‬
‫رویداد اطالع‬ ‫اعالمیه ای مبنی بر اینکه‬ ‫موضوع رویداد را‬ ‫همه آزاد شدند‬
‫رسانی‬ ‫یک رویداد سیستمی رخ‬ ‫تنظیم می کند‬
‫داده است‬
‫رویداد همگام‬ ‫اعالمیه ای مبنی بر اینکه‬ ‫یک تاپیک منتشر موضوع رویداد را‬
‫سازی‬ ‫یک رویداد سیستمی رخ‬ ‫تنظیم می کند‬ ‫شد‬
‫داده است‬
‫موتکس‬ ‫مکانیزمی که قابلیت های‬ ‫یک تاپیک منتشر داشتن رشته یا‬
‫طرد متقابل را فراهم می‬ ‫رشته دیگر‪،‬‬ ‫شد‬
‫کند‪ .‬معادل سمافور باینری‬ ‫‪mutex‬را آزاد می‬
‫کند‬
‫سمافور‬ ‫شمارنده ای که تعداد رشته‬ ‫تعداد سمافورها به‬ ‫همه آزاد شدند‬
‫هایی را که می توانند از یک‬ ‫صفر می رسد‬
‫منبع استفاده کنند تنظیم می‬
‫کند‬
‫تایمر قابل‬ ‫شمارنده ای که گذر زمان را‬ ‫زمان تنظیم می‬ ‫همه آزاد شدند‬
‫انتظار‬ ‫ثبت می کند‬ ‫رسد یا فاصله‬
‫زمانی منقضی می‬
‫شود‬
‫فایل‬ ‫نمونه ای از یک فایل باز‬ ‫عملیات ‪ I/O‬تکمیل‬ ‫همه آزاد شدند‬
‫شده یا دستگاه‪I/O‬‬ ‫می شود‬
‫روند‬ ‫فراخوانی برنامه‪ ،‬شامل فضای‬ ‫آخرین موضوع پایان‬ ‫همه آزاد شدند‬
‫آدرس و منابع مورد نیاز برای‬ ‫می یابد‬
‫اجرای برنامه‬

‫‪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‬را نتوان در تعداد معقولی از تکرارها بدست آورد‪ ،‬از یک شی‬
‫توزیع کننده برای مسدود کردن رشته استفاده می شود تا هسته بتواند رشته دیگری را به پردازنده ارسال کند‪.‬‬

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

‫قفل های ‪ Slim Reader–Writer‬و متغیرهای شرایط‬

‫ویندوز ویستا یک خواننده‪-‬نویسنده حالت کاربر اضافه کرد‪ .‬مانند بخشهای حیاتی‪ ،‬قفل خواننده‪-‬نویسنده تنها پس از تالش‬
‫برای استفاده از قفل چرخشی وارد هسته میشود تا مسدود شود‪ .‬باریک است به این معنا که معموالً فقط به تخصیص یک تکه‬
‫حافظه به اندازه اشاره گر نیاز دارد‪.‬‬

‫برای استفاده از یک قفل ‪ ،SRW‬یک فرآیند یک متغیر از نوع ‪ SRWLOCK‬را اعالم میکند و یک‬
‫‪ InitializeSRWLock‬را فراخوانی میکند تا آن را اولیه کند‪.‬‬

‫ویندوز نیز دارای متغیرهای شرطی است‪ .‬این فرآیند باید یک ‪ CONDITION_VARIABLE‬را اعالم کند و با فراخوانی‬
‫‪ InitializeConditionVariable‬آن را در یک رشته مقداردهی اولیه کند‪ .‬متغیرهای ‪ Condition‬را میتوان با بخشهای‬
‫بحرانی یا قفلهای ‪ SRW‬استفاده کرد‪ ،‬بنابراین دو روش وجود دارد‪ SleepConditionVariableCS ،‬و‬

‫‪369‬‬
‫سیستم عامل های داخلی و اصول طراحی‪370.........................................................................................................................‬‬

‫‪ SleepConditionVariableCS‬و ‪ ،SleepConditionVariableSRW‬شرط را مشخص میکند‪ .‬قفل به عنوان یک‬


‫عملیات اتمی‪.‬‬

‫دو روش ‪ wake‬وجود دارد‪ WakeConditionVariable ،‬و ‪ Wake AllConditionVariable‬که به ترتیب یک یا همه‬
‫رشته های خواب را بیدار می کنند‪ .‬متغیرهای شرط به صورت زیر استفاده می شوند‪:‬‬

‫‪ .1‬به دست آوردن قفل منحصر به فرد‬

‫‪while predicate == FALSE SleepConditionVariable .2‬‬

‫‪ .3‬عملیات محافظت شده را انجام دهید‬

‫‪ .4‬قفل را آزاد کنید‬

‫همگام سازی بدون قفل‬

‫ویندوز همچنین برای همگام سازی به شدت به عملیات در هم قفل شده متکی است‪ .‬عملیات در هم قفل شده از امکانات سخت‬
‫افزاری استفاده می کند تا تضمین کند که مکان های حافظه را می توان در یک عملیات اتمی خواند‪ ،‬اصالح کرد و نوشت‪ .‬به‬
‫عنوان مثال می توان به ‪ InterlockedIncrement‬و ‪ InterlockedCompareExchange‬اشاره کرد‪ .‬دومی اجازه می‬
‫دهد تا یک مکان حافظه فقط در صورتی به روز شود که از زمان خواندن مقادیر آن تغییر نکرده باشد‪.‬‬

‫بسیاری از اولیههای همگامسازی از عملیات به هم پیوسته در پیادهسازی خود استفاده میکنند‪ ،‬اما این عملیات برای‬
‫برنامهنویسان برای موقعیتهایی که میخواهند بدون گرفتن قفل نرمافزاری همگامسازی شوند نیز در دسترس هستند‪ .‬این به‬
‫اصطالح اولیههای همگامسازی بدون قفل این مزیت را دارند که یک رشته هرگز نمیتواند از پردازنده جدا شود‪ ،‬مثالً در پایان‬
‫زمانش‪ ،‬در حالی که هنوز یک قفل را نگه داشته است‪ .‬بنابراین آنها نمی توانند از اجرای رشته دیگری جلوگیری کنند‪.‬‬

‫بدوی پیچیدهتر بدون قفل را میتوان از عملیاتهای درهمبسته‪ ،‬بهویژه ‪ ،Windows SLists‬که یک صف ‪ LIFO‬بدون قفل‬
‫ایجاد میکند‪ ،‬ساخت‪ .‬لیست های ‪ SL‬با استفاده از توابعی مانند ‪ InterlockedPushEntrySList‬و‬
‫‪ InterlockedPopEntrySList‬مدیریت می شوند‪.‬‬

‫‪ 6.11‬ارتباطات بین فرآیندی اندروید‬

‫هسته لینوکس شامل تعدادی ویژگی است که می تواند برای ارتباطات بین فرآیندی ‪ IPC‬استفاده شود‪ ،‬از جمله لوله ها‪ ،‬حافظه‬
‫مشترک‪ ،‬پیام ها‪ ،‬سوکت ها‪ ،‬سمافورها و سیگنال ها‪ .‬اندروید از این ویژگی ها برای ‪ IPC‬استفاده نمی کند‪ ،‬بلکه قابلیت جدیدی‬

‫‪370‬‬
‫سیستم عامل های داخلی و اصول طراحی‪371.........................................................................................................................‬‬

‫به نام ‪ Binder‬را به هسته اضافه می کند‪ Binder .‬یک قابلیت فراخوانی روش از راه دور ‪ RPC‬سبک وزن را ارائه می دهد که‬
‫هم از نظر حافظه و هم نیازهای پردازش کارآمد است و به خوبی برای نیازهای یک سیستم تعبیه شده مناسب است‪.‬‬

‫بایندر برای میانجی گری تمام تعامل بین دو فرآیند استفاده می شود‪ .‬یک جزء در یک فرآیند مشتری یک تماس صادر می کند‪.‬‬
‫این فراخوانی به ‪ Binder‬در هسته هدایت می شود که در فرآیند مقصد سرویس تماس را به مؤلفه مقصد ارسال می کند‪.‬‬
‫بازگشت از مقصد از طریق ‪ Binder‬انجام می شود و در فرآیند فراخوانی به مؤلفه فراخوان تحویل داده می شود‪.‬‬

‫به طور سنتی‪ ،‬اصطالح ‪ RPC‬به تعامل تماس‪/‬بازگشت بین یک فرآیند مشتری در یک ماشین و یک فرآیند سرور در ماشین‬
‫دیگر اشاره دارد‪ .‬در مورد اندروید‪ ،‬مکانیسم ‪ RPC‬بین دو فرآیند در یک سیستم اما در ماشینهای مجازی متفاوت اجرا میشود‪.‬‬

‫روش مورد استفاده برای برقراری ارتباط با ‪ Binder‬فراخوانی سیستم ‪ ioctl‬است‪ .‬فراخوانی ‪ ioctl‬یک فراخوانی سیستمی همه‬
‫منظوره برای عملیات ورودی‪/‬خروجی خاص دستگاه است‪ .‬می توان از آن برای دسترسی به درایورهای دستگاه و همچنین‬
‫درایورهای شبه دستگاه استفاده کرد که ‪ Binder‬نمونه ای از آن است‪ .‬درایور شبه دستگاه از رابط عمومی مشابه درایور دستگاه‬
‫استفاده می کند‪ ،‬اما برای کنترل برخی از عملکردهای هسته استفاده می شود‪ .‬فراخوانی ‪ ioctl‬شامل پارامترهایی است که باید‬
‫انجام شود و آرگومان های مناسب‪.‬‬

‫شکل ‪ 6.16‬استفاده معمولی از ‪ Binder‬را نشان می دهد‪ .‬خطوط عمودی بریده شده نشان دهنده رشته ها در یک فرآیند‬
‫هستند‪ .‬قبل از اینکه فرآیند بتواند از یک سرویس استفاده کند‪ ،‬آن سرویس باید شناخته شود‪ .‬فرآیندی که یک سرویس را‬
‫میزبانی می کند‪ ،‬چندین رشته ایجاد می کند تا بتواند چندین درخواست را به طور همزمان مدیریت کند‪ .‬هر رشته با یک ‪ioctl‬‬
‫مسدود کننده خود را به ‪ Binder‬می شناسد‪.‬‬

‫شکل ‪ 6.16‬عملیات بایندر‬

‫‪371‬‬
‫سیستم عامل های داخلی و اصول طراحی‪372.........................................................................................................................‬‬

‫تعامل به شرح زیر انجام می شود‪:‬‬

‫‪ .1‬یک جزء مشتری‪ ،‬مانند یک اکتیویتی‪ ،‬یک سرویس را به صورت فراخوانی با داده های آرگومان فراخوانی می کند‪.‬‬

‫‪ .2‬تماس یک پروکسی را فراخوانی می کند که می تواند تماس را به تراکنش با درایور ‪ Binder‬تبدیل کند‪ .‬پروکسی رویه ای به‬
‫نام مارشالینگ را انجام می دهد که ساختارهای داده برنامه های کاربردی سطح باالتر یعنی پارامترهای درخواست‪/‬پاسخ را به‬
‫یک بسته تبدیل می کند‪ .‬بسته محفظه ای برای یک پیام مرجع داده ها و شی است که می تواند از طریق درایور ‪Binder‬‬
‫ارسال شود‪ .‬سپس پروکسی تراکنش را با یک تماس مسدود کننده ‪ ioctl‬به بایندر ارسال می کند‪.‬‬

‫‪ Binder .3‬سیگنالی را به رشته هدف می فرستد که رشته را از تماس مسدود کننده ‪ ioctl‬بیدار می کند‪ .‬بسته در فرآیند‬
‫هدف به یک جزء خرد تحویل داده می شود‪.‬‬

‫‪ .4‬خرد رویهای به نام ‪ unmarshalling‬را انجام میدهد که ساختارهای داده برنامههای سطح باالتر را از بستههای دریافتشده‬
‫از طریق تراکنشهای بایندر بازسازی میکند‪ .‬سپس پروکسی مؤلفه سرویس را با تماسی که با تماس صادر شده توسط مؤلفه‬
‫مشتری یکسان است فراخوانی می کند‪.‬‬

‫‪ .5‬قطعه بندی سرویس فراخوانده شده نتیجه مناسب را به ‪ stub‬برمی گرداند‪.‬‬

‫‪ .6‬خرد‪ ،‬داده های برگشتی را در یک بسته پاسخ قرار می دهد و سپس بسته پاسخ را از طریق یک ‪ ioctl‬به ‪ Binder‬ارسال می‬
‫کند‪.‬‬

‫‪ Binder ioctl .7‬فراخوانی را در پروکسی مشتری بیدار می کند‪ ،‬که داده های پاسخ تراکنش را دریافت می کند‪.‬‬

‫‪ .8‬پروکسی نتیجه را از بسته پاسخ جدا می کند و نتیجه را به مؤلفه مشتری که تماس سرویس را صادر کرده است برمی گرداند‪.‬‬

‫‪ 6.12‬خالصه‬

‫وقفه مسدود کردن مجموعه ای از فرآیندها است که یا برای منابع سیستم رقابت می کنند یا با یکدیگر ارتباط برقرار می کنند‪.‬‬
‫انسداد دائمی است مگر اینکه سیستمعامل اقدامات خارقالعادهای مانند از بین بردن یک یا چند فرآیند یا مجبور کردن یک یا‬
‫چند فرآیند به عقب نشینی انجام دهد‪ .‬وقفه ممکن است شامل منابع قابل استفاده مجدد یا منابع قابل مصرف باشد‪ .‬منبع قابل‬
‫استفاده مجدد منبعی است که در اثر استفاده از بین نمی رود‪ ،‬مانند کانال ‪ I/O‬یا ناحیه ای از حافظه‪ .‬یک منبع مصرفی منبعی‬
‫است که در صورت به دست آوردن آن توسط یک فرآیند از بین می رود‪ .‬مثالها شامل پیامها و اطالعات در بافرهای‬
‫ورودی‪/‬خروجی است‪.‬‬

‫‪372‬‬
‫سیستم عامل های داخلی و اصول طراحی‪373.........................................................................................................................‬‬

‫سه رویکرد کلی برای مقابله با وقفه وجود دارد‪ :‬پیشگیری‪ ،‬تشخیص و اجتناب‪ .‬پیشگیری از وقفه با اطمینان از برآورده نشدن‬
‫یکی از شرایط الزم برای وقفه ‪ ،‬عدم وقوع وقفه را تضمین می کند‪ .‬اگر سیستم عامل همیشه مایل به اعطای درخواست های‬
‫منابع باشد‪ ،‬تشخیص وقفه مورد نیاز است‪ .‬به طور دوره ای‪ ،‬سیستم عامل باید وقفه را بررسی کند و برای رفع وقفه اقدام کند‪.‬‬
‫اجتناب از وقفه شامل تجزیه و تحلیل هر درخواست منبع جدید برای تعیین اینکه آیا می تواند منجر به وقفه شود یا خیر‪ ،‬و‬
‫اعطای آن تنها در صورت عدم امکان وقفه است‪.‬‬

‫‪ 6.13‬خواندن و انیمیشن های توصیه شده‬

‫مقاله کالسیک در مورد وقفه ها‪ ،HOLT72 ،‬همچنان ارزش خواندن را دارد‪ ،‬مانند ‪ .COFF71‬نظرسنجی خوب دیگر‬
‫‪ ISLO80‬است‪ CORB96 .‬یک درمان کامل برای تشخیص وقفه است‪ DIMI98 .‬نمای کلی خوبی از وقفه ها است‪ .‬دو مقاله‬
‫توسط لوین ‪ LEVI03a, LEVI03b‬برخی از مفاهیم مورد استفاده در بحث وقفه را روشن می کند‪ SHUB03 .‬یک نمای‬
‫کلی مفید از وقفه است‪ ABRA06 .‬یک بسته تشخیص وقفه را توصیف می کند‪.‬‬

‫مکانیسم های همزمانی در ‪ ،Linux ،UNIX SVR4‬و ‪ Solaris 2‬به ترتیب در ‪ LOVE10 ،GRAY97‬و ‪MCDO07‬‬
‫به خوبی پوشش داده شده اند‪ HALL10 .‬یک درمان کامل از همزمانی یونیکس و مکانیسم های ارتباطی بین فرآیندی است‪.‬‬

‫‪ SCHR11‬یک بحث مفصل عالی از ‪ Android Binder‬است‪.‬‬

‫‪ ABRA06‬آبرامسون‪" .T ،‬تشخیص وقفه های بالقوه‪ ".‬مجله دکتر داب‪ ،‬ژانویه ‪.2006‬‬

‫‪ COFF71‬کافمن‪ ،‬ای‪ .‬الفیک‪ ،‬م‪ .‬و شوشانی‪ ،‬ع‪« .‬وقفه های سیستم»‪ .‬بررسی های محاسباتی‪ ،‬ژوئن ‪.1971‬‬

‫‪" .CORB96 Corbett, J‬ارزیابی روش های تشخیص وقفه برای نرم افزار همزمان‪ ".‬معامالت ‪ IEEE‬در مهندسی نرم افزار‪،‬‬
‫مارس ‪.1996‬‬

‫‪" .G ،DIMI98 Dimitoglou‬وقفه ها و روش هایی برای تشخیص‪ ،‬پیشگیری و بازیابی آنها در سیستم عامل های مدرن‪".‬‬
‫بررسی سیستم عامل ها‪ ،‬جوالی ‪.1998‬‬

‫‪ .GRAY97 Gray, J‬ارتباطات بین فرآیندی در یونیکس‪ :‬گوشه ها و شکاف ها‪.‬‬

‫رودخانه فوقانی زین‪ ،‬نیوجرسی‪ :‬سالن پرنتیس‪.1997 ،‬‬

‫سالن ‪ ،HALL10‬راهنمای ‪ B. Beej‬برای ‪/Unix IPC. 2010. http://beej.us/guide/bgipc‬‬

‫‪" .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‬موجود است‪ .‬خواننده تشویق می شود که انیمیشن را برای‬
‫تقویت مفاهیم این فصل مشاهده کند‪.‬‬

‫‪ 6.14‬اصطالحات کلیدی‪ ،‬سؤاالت و مشکالت را مرور کنید‬

‫شرایط کلیدی‬

‫الگوریتم بانکدار‬ ‫پیشگیری از بن بست‬ ‫لوله‬

‫انتظار دایره ای‬ ‫نگه دارید و صبر کنید‬ ‫پیشدستی‬

‫منبع مصرفی‬ ‫نمودار پیشرفت مشترک‬ ‫نمودار تخصیص منابع‬

‫بن بست‬ ‫سد حافظه‬ ‫منبع قابل استفاده مجدد‬

‫اجتناب از بن بست‬ ‫پیام‬ ‫اسپینالک‬

‫تشخیص بن بست‬ ‫طرد متقابل‬ ‫گرسنگی‬

‫‪374‬‬
‫سیستم عامل های داخلی و اصول طراحی‪375.........................................................................................................................‬‬

‫بررسی سواالت‬

‫‪ .6.1‬مثال هایی از منابع قابل استفاده مجدد و قابل مصرف بیاورید‪.‬‬

‫‪ .6.2‬سه شرطی که باید وجود داشته باشد تا امکان وقفه وجود داشته باشد چیست؟‬

‫‪ .6.3‬چهار شرط ایجاد وقفه چیست؟‬

‫‪ .6.4‬چگونه می توان از وضعیت انتظار و انتظار جلوگیری کرد؟‬

‫‪ .6.5‬دو راه را فهرست کنید که از طریق آنها می توان از شرط عدم پیش گیری جلوگیری کرد‪.‬‬

‫‪ .6.6‬چگونه می توان از وضعیت انتظار دایره ای جلوگیری کرد؟‬

‫‪ .6.7‬تفاوت بین اجتناب‪ ،‬تشخیص و پیشگیری از وقفه چیست؟‬

‫چالش ها و مسائل‬

‫‪ .6.1‬نشان دهید که چهار شرط وقفه در شکل ‪ a6.1‬اعمال می شود‪.‬‬

‫‪ .6.2‬نشان دهید که چگونه هر یک از تکنیک های پیشگیری‪ ،‬اجتناب‪ ،‬و تشخیص را می توان در شکل ‪ 6.1‬به کار برد‪.‬‬

‫‪ .6.3‬برای شکل ‪ ،6.3‬یک شرح روایی از هر یک از شش مسیر به تصویر کشیده شده‪ ،‬مشابه شرح مسیرهای شکل ‪ 6.2‬ارائه شده‬
‫در بخش ‪ 6.1‬ارائه دهید‪.‬‬

‫‪ .6.4‬بیان شد که وقفه نمی تواند برای وضعیت منعکس شده در شکل ‪ 6.3‬رخ دهد‪ .‬آن جمله را توجیه کنید‪.‬‬

‫‪ .6.5‬با توجه به حالت زیر برای الگوریتم ‪ Banker. 6‬پردازش ‪ P0‬تا ‪P5‬‬

‫‪ 4‬نوع منبع‪ 15 A :‬نمونه؛ ‪ 6 B‬مورد‬

‫ج ‪ 9‬مورد؛ ‪ 10 D‬نمونه عکس فوری در زمان ‪:T0‬‬

‫‪375‬‬
‫سیستم عامل های داخلی و اصول طراحی‪376.........................................................................................................................‬‬

‫آ‪ .‬بررسی کنید که آرایه ‪ Available‬به درستی محاسبه شده است‪.‬‬

‫ب ماتریس ‪ Need‬را محاسبه کنید‪.‬‬

‫ج نشان دهید که وضعیت فعلی ایمن است‪ ،‬یعنی یک توالی امن از فرآیندها را نشان دهید‪ .‬عالوه بر این‪ ،‬به دنباله نشان می دهد‬
‫که چگونه در دسترس آرایه کاری با پایان هر فرآیند تغییر می کند‪.‬‬

‫د با توجه به درخواست ‪ 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‬یک درام پیشساز دیسک برای ذخیرهسازی ثانویه به بافرهای ورودی‪،‬‬
‫مناطق پردازش و بافرهای خروجی‪ ،‬با مرزهای شناور‪ ،‬بسته به سرعت فرآیندهای درگیر‪ ،‬تقسیم میشود‪ .‬وضعیت فعلی درام را‬
‫می توان با پارامترهای زیر مشخص کرد‪:‬‬

‫حداکثر تعداد صفحات درام‬

‫تعداد صفحات ورودی در درام‬

‫‪ p‬تعداد صفحات پردازش در درام‬

‫‪ o‬تعداد صفحات خروجی در درام‬

‫‪ reso‬حداقل تعداد صفحات رزرو شده برای خروجی‬

‫‪ resp‬حداقل تعداد صفحات رزرو شده برای پردازش‬


‫‪377‬‬
‫سیستم عامل های داخلی و اصول طراحی‪378.........................................................................................................................‬‬

‫محدودیت های منابع الزم را تدوین کنید که تضمین می کند از ظرفیت درام تجاوز نمی شود و حداقل تعداد صفحات به طور‬
‫دائم برای خروجی و پردازش رزرو می شود‪.‬‬

‫‪ .6.10‬در سیستم چندبرنامهنویسی ‪ ،THE‬یک صفحه میتواند تغییر حالتهای زیر را انجام دهد‪:‬‬

‫‪ .1‬بافر ورودی خالی تولید ورودی‬

‫‪ .2‬ناحیه پردازش بافر ورودی مصرف ورودی‬

‫‪ .3‬بافر خروجی منطقه پردازش تولید خروجی‬

‫‪ .4‬بافر خروجی خالی مصرف خروجی‬

‫‪ .5‬منطقه پردازش خالی تماس رویه‬

‫‪ .6‬منطقه پردازش خالی بازگشت رویه‬

‫آ‪ .‬تأثیر این انتقال ها را بر حسب مقادیر ‪ o ،i‬و ‪ p‬تعریف کنید‪.‬‬

‫ب اگر مفروضات مطرح شده در مسئله ‪ 6.6‬در مورد فرآیندهای ورودی‪ ،‬فرآیندهای کاربر و فرآیندهای خروجی برقرار باشد‪ ،‬آیا‬
‫هر یک از آنها می تواند منجر به وقفه شود؟‬

‫‪ .6.11‬سیستمی را در نظر بگیرید که مجموعاً ‪ 150‬واحد حافظه دارد که به سه فرآیند تخصیص داده شده است‪:‬‬

‫الگوریتم بانکدار را برای تعیین اینکه آیا اعطای هر یک از درخواست های زیر ایمن است یا خیر‪ ،‬اعمال کنید‪ .‬اگر بله‪ ،‬دنباله ای‬
‫از خاتمه هایی را که می توان تضمین کرد مشخص کنید‪ .‬اگر نه‪ ،‬کاهش جدول تخصیص حاصل را نشان دهید‪.‬‬

‫آ‪ .‬فرآیند چهارم با حداکثر نیاز به حافظه ‪ 60‬و نیاز اولیه ‪ 25‬واحد وارد می شود‪.‬‬

‫ب فرآیند چهارم با حداکثر نیاز به حافظه ‪ 60‬و نیاز اولیه ‪ 35‬واحد وارد می شود‪.‬‬

‫‪ .6.12‬الگوریتم بانکدار را برای سودمندی آن در یک سیستم عامل ارزیابی کنید‪.‬‬

‫‪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.21‬قطعه کد زیر را در یک سیستم لینوکس در نظر بگیرید‪;read_lock&mr_rwlock; write_lock&mr_rwlock .‬‬


‫جایی که ‪ mr_rwlock‬یک قفل خواننده‪-‬نویسنده است‪ .‬تاثیر این کد چیست؟‬

‫شکل ‪ 6.18‬راه حل دیگری برای مشکل فیلسوفان غذاخوری با استفاده از مانیتور‬

‫‪ .6.22‬دو متغیر ‪ a‬و ‪ b‬به ترتیب دارای مقادیر اولیه ‪ 1‬و ‪ 2‬هستند‪ .‬کد زیر برای سیستم لینوکس است‪:‬‬

‫‪381‬‬
‫سیستم عامل های داخلی و اصول طراحی‪382.........................................................................................................................‬‬

‫با استفاده از موانع حافظه از چه خطاهای احتمالی جلوگیری می شود؟‬

‫‪382‬‬
‫سیستم عامل های داخلی و اصول طراحی‪383.........................................................................................................................‬‬

‫قسمت ‪ 3‬حافظه‬

‫فصل ‪7‬‬

‫مدیریت حافظه‬

‫‪ 7.1‬الزامات مدیریت حافظه‬

‫به اشتراک گذاری حفاظت از جابجایی‬

‫سازمان منطقی سازمان فیزیکی‬

‫‪ 7.2‬پارتیشن بندی حافظه‬

‫پارتیشن بندی ثابت پارتیشن بندی پویا جابجایی سیستم ‪Buddy‬‬

‫‪ 7.3‬صفحه بندی‬

‫‪ 7.4‬تقسیم بندی‬

‫‪ 7.5‬خالصه‬

‫‪ 7.6‬خواندن و انیمیشن های توصیه شده‬

‫‪ 7.7‬واژههای کلیدی‪ ،‬سؤاالت مروری‪ ،‬و مشکالت پیوست ‪ A7‬بارگیری و پیوند دادن‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬الزامات اصلی مدیریت حافظه را مورد بحث قرار دهید‪.‬‬

‫‪ -‬دلیل پارتیشن بندی حافظه را درک کنید و تکنیک های مختلفی را که استفاده می شود توضیح دهید‪.‬‬

‫‪ -‬مفهوم صفحه بندی را درک کرده و توضیح دهید‪.‬‬

‫‪383‬‬
‫سیستم عامل های داخلی و اصول طراحی‪384.........................................................................................................................‬‬

‫‪ -‬مفهوم تقسیم بندی را درک و توضیح دهید‪.‬‬

‫‪ -‬مزایای نسبی صفحه بندی و تقسیم بندی را ارزیابی کنید‪.‬‬

‫‪ -‬مفاهیم بارگذاری و پیوند را توضیح دهید‪.‬‬

‫در یک سیستم برنامه نویسی تک‪ ،‬حافظه اصلی به دو بخش تقسیم می شود‪ :‬یک بخش برای سیستم عامل مانیتور مقیم‪ ،‬هسته‬
‫و بخش دیگر برای برنامه در حال اجرا‪ .‬در یک سیستم چندبرنامهنویسی‪ ،‬بخش «کاربر» حافظه باید بیشتر تقسیم شود تا چندین‬
‫فرآیند را در خود جای دهد‪ .‬وظیفه تقسیم به صورت پویا توسط سیستم عامل انجام می شود و به عنوان مدیریت حافظه شناخته‬
‫می شود‪.‬‬

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

‫ما با الزاماتی شروع می کنیم که مدیریت حافظه در نظر گرفته شده است تا آنها را برآورده کند‪ .‬در مرحله بعد‪ ،‬ما در مورد انواع‬
‫طرح های ساده ای که برای مدیریت حافظه استفاده شده اند صحبت می کنیم‪.‬‬

‫جدول ‪ 7.1‬برخی از اصطالحات کلیدی را برای بحث ما معرفی می کند‪.‬‬

‫‪ 7.1‬الزامات مدیریت حافظه‬

‫در حین بررسی مکانیسمها و سیاستهای مختلف مرتبط با مدیریت حافظه‪ ،‬در نظر گرفتن الزاماتی که مدیریت حافظه برای‬
‫برآورده کردن آنها در نظر گرفته شده است مفید است‪ .‬این الزامات شامل موارد زیر است‪:‬‬

‫‪ -‬جابجایی‬

‫‪ -‬حفاظت‬

‫‪ -‬اشتراک گذاری‬

‫‪ -‬سازماندهی منطقی‬

‫‪ -‬سازماندهی فیزیکی‬

‫‪384‬‬
‫سیستم عامل های داخلی و اصول طراحی‪385.........................................................................................................................‬‬

‫جدول ‪ 7.1‬شرایط مدیریت حافظه‬

‫قاب‬ ‫بلوک حافظه اصلی با طول ثابت‪.‬‬

‫صفحه‬ ‫یک بلوک داده با طول ثابت که در حافظه ثانویه مانند دیسک قرار دارد‪ .‬یک‬
‫صفحه از داده ها ممکن است به طور موقت در یک فریم از حافظه اصلی کپی‬
‫شود‪.‬‬

‫بلوک داده با طول متغیر که در حافظه ثانویه قرار دارد‪ .‬کل بخش ممکن است به بخش‬
‫طور موقت در یک منطقه موجود از حافظه اصلی تقسیم بندی کپی شود یا بخش‬
‫ممکن است به صفحاتی تقسیم شود که می توانند به صورت جداگانه در حافظه‬
‫اصلی کپی شوند بخش بندی و صفحه بندی ترکیبی‪.‬‬

‫جابجایی‬

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

‫بنابراین‪ ،‬ما نمیتوانیم از قبل بدانیم که یک برنامه در کجا قرار میگیرد‪ ،‬و باید امکان جابهجایی برنامه در حافظه اصلی را به‬
‫دلیل جابجایی فراهم کنیم‪ .‬همانطور که در شکل ‪ 7.1‬نشان داده شده است‪ ،‬این حقایق برخی از نگرانی های فنی مربوط به‬
‫پرداختن را ایجاد می کند‪ .‬شکل یک تصویر فرآیند را نشان می دهد‪ .‬برای سادگی‪ ،‬اجازه دهید فرض کنیم که تصویر فرآیند یک‬
‫منطقه پیوسته از حافظه اصلی را اشغال می کند‪ .‬واضح است که سیستم عامل باید مکان اطالعات کنترل فرآیند و پشته اجرا و‬
‫همچنین نقطه ورود را برای شروع اجرای برنامه برای این فرآیند بداند‪ .‬از آنجایی که سیستم عامل حافظه را مدیریت می کند و‬
‫مسئول وارد کردن این فرآیند به حافظه اصلی است‪ ،‬دسترسی به این آدرس ها آسان است‪ .‬عالوه بر این‪ ،‬با این حال‪ ،‬پردازنده‬
‫باید با مراجع حافظه در داخل برنامه سروکار داشته باشد‪ .‬دستورالعمل های شعبه حاوی آدرسی برای ارجاع به دستورالعملی‬
‫است که در مرحله بعد اجرا می شود‪ .‬دستورالعمل های مرجع داده حاوی آدرس بایت یا کلمه داده ارجاع شده است‪ .‬به نحوی‪،‬‬

‫‪385‬‬
‫سیستم عامل های داخلی و اصول طراحی‪386.........................................................................................................................‬‬

‫سخت افزار پردازنده و نرم افزار سیستم عامل باید بتوانند مراجع حافظه موجود در کد برنامه را به آدرس های حافظه فیزیکی‬
‫واقعی ترجمه کنند و مکان فعلی برنامه را در حافظه اصلی منعکس کنند‪.‬‬

‫اطالعات کنترل‬
‫فرآیند‬
‫نقطه ورود‬
‫به برنامه‬ ‫دستورالعمل‬
‫شعبه‬

‫افزایش مقادیر‬
‫آدرس‬
‫ارجاع به داده ها‬

‫باالی پشته‬
‫فعلی‬

‫شکل ‪ 7.1‬پرداختن به الزامات یک فرآیند‬

‫حفاظت‬

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

‫به طور معمول‪ ،‬یک فرآیند کاربر نمی تواند به هیچ بخشی از سیستم عامل‪ ،‬نه برنامه و نه داده‪ ،‬دسترسی داشته باشد‪ .‬باز هم‪،‬‬
‫معموالً یک برنامه در یک فرآیند نمی تواند به یک دستورالعمل در فرآیند دیگر منشعب شود‪ .‬بدون ترتیب خاصی‪ ،‬یک برنامه در‬

‫‪386‬‬
‫سیستم عامل های داخلی و اصول طراحی‪387.........................................................................................................................‬‬

‫یک فرآیند نمی تواند به ناحیه داده یک فرآیند دیگر دسترسی داشته باشد‪ .‬پردازنده باید بتواند چنین دستوراتی را در نقطه اجرا‬
‫لغو کند‪.‬‬

‫توجه داشته باشید که الزامات حفاظت از حافظه باید توسط پردازنده سخت افزار به جای سیستم عامل نرم افزار برآورده شود‪.‬‬
‫این به این دلیل است که سیستم عامل نمی تواند تمام مراجع حافظه را که یک برنامه ایجاد می کند پیش بینی کند‪ .‬حتی اگر‬
‫چنین پیشبینیهایی امکانپذیر بود‪ ،‬غربال کردن هر برنامه از قبل برای نقض احتمالی مرجع حافظه بسیار زمانبر خواهد بود‪.‬‬
‫بنابراین‪ ،‬ارزیابی مجاز بودن یک مرجع حافظه دسترسی به داده یا شاخه تنها در زمان اجرای دستورالعملی که مرجع است‪،‬‬
‫امکان پذیر است‪ .‬برای انجام این کار‪ ،‬سخت افزار پردازنده باید این قابلیت را داشته باشد‪.‬‬

‫اشتراک گذاری‬

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

‫سازمان منطقی‬

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

‫‪ .1‬ماژول ها را می توان به طور مستقل نوشت و اجرا کرد‪ ،‬با تمام ارجاعات از یک ماژول به ماژول دیگر توسط سیستم در زمان‬
‫اجرا حل می شود‪.‬‬

‫‪ .2‬با سربار اضافی متوسط‪ ،‬درجات مختلف حفاظت فقط خواندن‪ ،‬فقط اجرا می تواند به ماژول های مختلف داده شود‪.‬‬
‫‪387‬‬
‫سیستم عامل های داخلی و اصول طراحی‪388.........................................................................................................................‬‬

‫‪ .3‬می توان مکانیسم هایی را معرفی کرد که به وسیله آنها می توان ماژول ها را در بین فرآیندها به اشتراک گذاشت‪ .‬مزیت ارائه‬
‫اشتراک گذاری در سطح ماژول این است که با نحوه مشاهده مشکل توسط کاربر مطابقت دارد و از این رو برای کاربر آسان است‬
‫که به اشتراک گذاری مورد نظر را مشخص کند‪.‬‬

‫ابزاری که به راحتی این الزامات را برآورده می کند‪ ،‬بخش بندی است که یکی از تکنیک های مدیریت حافظه است که در این‬
‫فصل بررسی شده است‪.‬‬

‫سازمان فیزیکی‬

‫همانطور که در بخش ‪ 1.5‬بحث کردیم‪ ،‬حافظه کامپیوتر حداقل در دو سطح سازماندهی شده است که به آنها حافظه اصلی و‬
‫حافظه ثانویه گفته می شود‪ .‬حافظه اصلی دسترسی سریع را با هزینه نسبتاً باال فراهم می کند‪ .‬عالوه بر این‪ ،‬حافظه اصلی فرار‬
‫است‪ .‬یعنی ذخیره سازی دائمی فراهم نمی کند‪ .‬حافظه ثانویه کندتر و ارزانتر از حافظه اصلی است و معموالً فرار نیست‪ .‬بنابراین‬
‫حافظه ثانویه با ظرفیت زیاد می تواند برای ذخیره سازی طوالنی مدت برنامه ها و داده ها فراهم شود‪ ،‬در حالی که یک حافظه‬
‫اصلی کوچکتر برنامه ها و داده های در حال استفاده را در خود نگه می دارد‪.‬‬

‫در این طرح دو سطحی‪ ،‬سازماندهی جریان اطالعات بین حافظه اصلی و ثانویه یک نگرانی عمده سیستم است‪ .‬مسئولیت این‬
‫جریان را می توان به هر برنامه نویس اختصاص داد‪ ،‬اما این امر به دو دلیل غیرعملی و نامطلوب است‪:‬‬

‫‪ .1‬حافظه اصلی موجود برای یک برنامه به اضافه داده های آن ممکن است ناکافی باشد‪ .‬در آن صورت‪ ،‬برنامه نویس باید در‬
‫عملی به نام همپوشانی شرکت کند‪ ،‬که در آن برنامه و داده ها به گونه ای سازماندهی می شوند که بتوان به ماژول های مختلف‬
‫یک ناحیه از حافظه اختصاص داد‪ ،‬با یک برنامه اصلی که وظیفه تعویض ماژول ها را بر عهده دارد‪ .‬در صورت نیاز خارج شود‪.‬‬
‫حتی با کمک ابزارهای اجرار‪ ،‬برنامه نویسی همپوشانی زمان برنامه نویس را تلف می کند‪.‬‬

‫‪ .2‬در یک محیط چندبرنامهنویسی‪ ،‬برنامهنویس در زمان کدنویسی نمیداند چقدر فضا در دسترس خواهد بود یا آن فضا کجا‬
‫خواهد بود‪ .‬پس واضح است که وظیفه انتقال اطالعات بین دو سطح حافظه باید یک مسئولیت سیستم باشد‪ .‬این وظیفه جوهره‬
‫مدیریت حافظه است‪.‬‬

‫‪ 7.2‬پارتیشن بندی حافظه‬

‫عملیات اصلی مدیریت حافظه‪ ،‬آوردن فرآیندها به حافظه اصلی برای اجرا توسط پردازنده است‪ .‬تقریباً در تمام سیستمهای‬
‫چندبرنامهنویسی مدرن‪ ،‬این شامل یک طرح پیچیده به نام حافظه مجازی است‪ .‬حافظه مجازی نیز به نوبه خود مبتنی بر‬
‫استفاده از یک یا هر دو تکنیک اساسی است‪ :‬بخشبندی و صفحهبندی‪ .‬قبل از اینکه بتوانیم به این تکنیک های حافظه مجازی‬

‫‪388‬‬
‫سیستم عامل های داخلی و اصول طراحی‪389.........................................................................................................................‬‬

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

‫پارتیشن بندی ثابت‬

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

‫اندازه های پارتیشن شکل ‪ 7.2‬نمونه هایی از دو گزینه برای پارتیشن بندی ثابت را نشان می دهد‪ .‬یک امکان استفاده از‬
‫پارتیشن های با اندازه مساوی است‪ .‬در این حالت‪ ،‬هر فرآیندی که اندازه آن کمتر یا برابر با اندازه پارتیشن باشد‪ ،‬می تواند در هر‬
‫پارتیشن موجود بارگذاری شود‪ .‬اگر همه پارتیشنها پر باشند و هیچ فرآیندی در حالت آماده یا در حال اجرا نباشد‪ ،‬سیستم‬
‫عامل میتواند یک فرآیند را از هر یک از پارتیشنها جابجا کند و در یک فرآیند دیگر بارگذاری کند تا مقداری کار برای پردازنده‬
‫وجود داشته باشد‪ .‬استفاده از پارتیشن های ثابت با اندازه مساوی دو مشکل دارد‪:‬‬

‫‪ -‬ممکن است یک برنامه خیلی بزرگ باشد که در یک پارتیشن قرار بگیرد‪ .‬در این حالت‪ ،‬برنامه نویس باید برنامه را با استفاده از‬
‫همپوشانی طراحی کند تا تنها بخشی از برنامه در هر لحظه در حافظه اصلی باشد‪ .‬هنگامی که به ماژولی نیاز است که وجود‬
‫ندارد‪ ،‬برنامه کاربر باید آن ماژول را در پارتیشن برنامه بارگذاری کند و هر برنامه یا داده ای را که در آنجا وجود دارد‪ ،‬پوشش‬
‫دهد‪.‬‬

‫‪ -‬استفاده از حافظه اصلی بسیار ناکارآمد است‪ .‬هر برنامه ای‪ ،‬هر چقدر هم که کوچک باشد‪ ،‬یک پارتیشن کامل را اشغال می‬
‫کند‪ .‬در مثال ما‪ ،‬ممکن است برنامه ای وجود داشته باشد که طول آن کمتر از ‪ 2‬مگابایت باشد‪ .‬با این حال هر پارتیشن ‪8‬‬
‫مگابایتی را اشغال میکند‪ .‬این پدیده که در آن فضای داخلی یک پارتیشن تلف میشود به دلیل این واقعیت که بلوک دادههای‬
‫بارگذاری شده کوچکتر از پارتیشن است‪ ،‬به عنوان داخلی نامیده میشود‪ .‬تکه تکه شدن هر دوی این مشکالت را می توان با‬
‫استفاده از پارتیشن هایی با اندازه نابرابر کاهش داد‪ ،‬اگرچه حل نشد شکل ‪b. 7.2‬در این مثال‪ ،‬برنامه هایی به بزرگی ‪16‬‬
‫مگابایت را می توان بدون همپوشانی جای داد‪ .‬پارتیشنهای کوچکتر از ‪ 8‬مگابایت به برنامههای کوچکتر اجازه میدهند تا با‬
‫پراکندگی داخلی کمتری جاسازی شوند‪.‬‬

‫‪389‬‬
‫سیستم عامل های داخلی و اصول طراحی‪390.........................................................................................................................‬‬

‫جدول ‪ 7.2‬تکنیک های مدیریت حافظه‬

‫تکنیک‬ ‫شرح‬ ‫نقاط قوت‬ ‫نقاط ضعف‬

‫پیاده سازی ساده؛ سربار حافظه اصلی در زمان تولید پارتیشن بندی‬ ‫استفاده ناکارآمد از‬
‫ثابت‬ ‫سیستم به تعدادی‬ ‫حافظه به دلیل تکه تکه سیستم عامل کمی‬
‫پارتیشن ثابت تقسیم می‬ ‫شدن داخلی‪ .‬حداکثر‬
‫شود‪.‬‬ ‫تعداد فرآیندهای فعال‬
‫ثابت است‪.‬‬

‫یک فرآیند ممکن است در پارتیشن بندی‬ ‫عدم تکه تکه شدن‬ ‫استفاده ناکارآمد از‬
‫دینامیک‬ ‫پردازنده به دلیل نیاز به داخلی؛ استفاده کارآمدتر یک پارتیشن با اندازه‬
‫مساوی یا بزرگتر بارگذاری‬ ‫تراکم برای مقابله با تکه از حافظه اصلی‬
‫شود‪.‬‬ ‫تکه شدن خارجی‪.‬‬

‫پارتیشن ها به صورت پویا صفحه بندی‬ ‫مقدار کمی از تکه تکه بدون تکه تکه شدن‬
‫ایجاد می شوند‪ ،‬به طوری ساده‬ ‫خارجی‬ ‫شدن داخلی‪.‬‬
‫که هر فرآیند‬

‫در پارتیشنی با همان اندازه تقسیم بندی‬ ‫تکه تکه شدن خارجی عدم تکه تکه شدن‬
‫ساده‬ ‫داخلی؛ بهبود استفاده از آن فرآیند بارگذاری می‬
‫حافظه و کاهش سربار در شود‪.‬‬
‫مقایسه با پارتیشن بندی‬
‫پویا‪.‬‬

‫صفحه بندی‬ ‫حافظه اصلی به تعدادی‬ ‫بدون تکه تکه شدن‬ ‫سربار مدیریت حافظه‬
‫حافظه مجازی‬ ‫خارجی؛ درجه باالتری از فریم با اندازه مساوی‬ ‫پیچیده‬
‫چندبرنامه ریزی؛ فضای تقسیم می شود‪ .‬هر فرآیند‬
‫به تعدادی صفحه با اندازه‬ ‫آدرس مجازی بزرگ‬
‫مساوی با طول فریم ها‬
‫تقسیم می شود‪ .‬یک‬
‫‪390‬‬
‫سیستم عامل های داخلی و اصول طراحی‪391.........................................................................................................................‬‬

‫فرآیند با بارگیری تمام‬


‫صفحات آن در فریم های‬
‫موجود و نه لزوماً پیوسته‬
‫بارگذاری می شود‪.‬‬

‫هر فرآیند به تعدادی بخش تقسیم بندی‬ ‫بدون تکه تکه شدن‬ ‫سربار مدیریت حافظه‬
‫حافظه مجازی‬ ‫داخلی‪ ،‬درجه باالتری از تقسیم می شود‪ .‬یک‬ ‫پیچیده‬
‫چندبرنامه ریزی‪ .‬فضای فرآیند با بارگذاری تمام‬
‫بخش های آن در پارتیشن‬ ‫بزرگ آدرس مجازی؛‬
‫حفاظت و پشتیبانی به های پویا که نیازی به‬
‫پیوستگی ندارند‪ ،‬بارگذاری‬ ‫اشتراک گذاری‬
‫می شود‪.‬‬

‫الگوریتم قرار دادن با پارتیشن های با اندازه مساوی‪ ،‬قرار دادن فرآیندها در حافظه بی اهمیت است‪ .‬تا زمانی که هر پارتیشن‬
‫موجود باشد‪ ،‬می توان یک فرآیند را در آن پارتیشن بارگذاری کرد‪ .‬از آنجایی که همه پارتیشن ها اندازه یکسانی دارند‪ ،‬فرقی‬
‫نمی کند که از کدام پارتیشن استفاده شود‪ .‬اگر تمام پارتیشنها با فرآیندهایی اشغال شدهاند که آماده اجرا نیستند‪ ،‬باید یکی از‬
‫این فرآیندها تعویض شود تا فضا برای یک فرآیند جدید باز شود‪ .‬اینکه کدام یک را عوض کنیم یک تصمیم زمان بندی است‪.‬‬
‫این موضوع در قسمت چهارم بررسی شده است‪.‬‬

‫با پارتیشنهایی با اندازه نابرابر‪ ،‬دو راه ممکن برای تخصیص فرآیندها به پارتیشنها وجود دارد‪ .‬سادهترین راه این است که هر‬
‫فرآیند را به کوچکترین پارتیشنی که در آن قرار میگیرد اختصاص دهیم‪ 1.‬در این مورد‪ ،‬یک صف زمانبندی برای هر پارتیشن‬
‫مورد نیاز است تا فرآیندهای مبادلهشده را برای آن پارتیشن نگهداری کند شکل ‪a. 7.3‬مزیت این رویکرد این است که فرآیندها‬
‫همیشه به گونه ای تخصیص داده می شوند که حافظه هدر رفته در یک پارتیشن به حداقل برسد تجزیه داخلی‪.‬‬

‫اگرچه این تکنیک از دیدگاه یک پارتیشن فردی بهینه به نظر می رسد‪ ،‬اما از نظر سیستم به عنوان یک کل بهینه نیست‪.‬‬

‫‪391‬‬
‫سیستم عامل های داخلی و اصول طراحی‪392.........................................................................................................................‬‬

‫شکل ‪ 7.2‬نمونه ای از پارتیشن بندی ثابت یک حافظه ‪ 64‬مگابایتی‬

‫پارتیشن هایی با اندازه مساوی‬ ‫پارتیشن هایی با اندازه نابرابر‬

‫شکل ‪ 7.3‬تخصیص حافظه برای پارتیشن بندی ثابت‬

‫به عنوان مثال‪ ،‬در شکل ‪ ،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.........................................................................................................................‬‬

‫شکل ‪ 7.4‬اثر پارتیشن بندی پویا‬

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

‫یکی از تکنیکهای غلبه بر تکه تکه شدن خارجی‪ ،‬فشردهسازی است‪ :‬هر از گاهی‪ ،‬سیستمعامل فرآیندها را بهگونهای تغییر‬
‫میدهد که به هم پیوسته باشند و به طوری که تمام حافظه آزاد با هم در یک بلوک باشد‪ .‬به عنوان مثال‪ ،‬در شکل ‪،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.........................................................................................................................‬‬

‫شکل ‪ 7.5‬مثالی از پیکربندی حافظه قبل و بعد از تخصیص بلوک ‪ 16‬مگابایتی‬

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

‫سیستم ‪Buddy‬‬

‫هر دو طرح پارتیشن بندی ثابت و پویا دارای اشکاالتی هستند‪ .‬یک طرح پارتیشن بندی ثابت تعداد فرآیندهای فعال را محدود‬
‫می کند و ممکن است در صورت عدم تطابق ضعیف بین اندازه های پارتیشن موجود و اندازه فرآیند‪ ،‬از فضا به طور ناکارآمد‬
‫استفاده کند‪ .‬یک طرح پارتیشن بندی پویا برای نگهداری پیچیده تر است و شامل سربار تراکم است‪ .‬یک مصالحه جالب‪ ،‬سیستم‬
‫‪PETE77 ،KNUT97 Buddy‬است‪ .‬در یک سیستم ‪ ،Buddy‬بلوک های حافظه با اندازه ‪ K2‬کلمه‪ ،L K U ،‬در دسترس‬
‫هستند‬

‫‪ L2‬کوچکترین بلوک که اختصاص داده شده است‬

‫‪ 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.........................................................................................................................‬‬

‫شکل ‪ 7.6‬نمونه ای از سیستم ‪Buddy‬‬

‫جابجایی‬

‫قبل از اینکه راههای مقابله با کاستیهای پارتیشنبندی را در نظر بگیریم‪ ،‬باید یک پایان ضعیف را که مربوط به قرار دادن‬
‫فرآیندها در حافظه است‪ ،‬پاک کنیم‪ .‬هنگامی که از طرح پارتیشن ثابت شکل ‪ a7.3‬استفاده می شود‪ ،‬می توانیم انتظار داشته‬
‫باشیم که یک فرآیند همیشه به همان پارتیشن اختصاص داده شود‪ .‬یعنی هر پارتیشنی که هنگام بارگیری یک فرآیند جدید‬
‫انتخاب شود‪ ،‬همیشه برای تعویض آن فرآیند به حافظه پس از تعویض آن استفاده می شود‪ .‬در آن صورت‪ ،‬میتوان از یک لودر‬
‫جابجایی ساده‪ ،‬مانند آنچه در ضمیمه ‪ A7‬توضیح داده شده است‪ ،‬استفاده کرد‪ :‬هنگامی که فرآیند برای اولین بار بارگذاری‬
‫میشود‪ ،‬تمام مراجع حافظه نسبی در کد با آدرسهای حافظه اصلی مطلق جایگزین میشوند که توسط آدرس پایه تعیین‬
‫میشود‪ .‬فرآیند بارگذاری شده‬

‫گره برگ برای‬ ‫گره برگ برای بلوک‬ ‫گره غیر برگ‬
‫بلوک اختصاص‬ ‫تخصیص نیافته‬
‫داده شده‬
‫شکل ‪ 7.7‬نمایش درختی از سیستم ‪Buddy‬‬
‫‪398‬‬
‫سیستم عامل های داخلی و اصول طراحی‪399.........................................................................................................................‬‬

‫در مورد پارتیشنهای با اندازه مساوی شکل ‪ 7.2‬و در مورد یک صف پردازش واحد برای پارتیشنهای با اندازه نابرابر شکل‬
‫‪ ،b7.3‬یک فرآیند ممکن است در طول عمر خود پارتیشنهای مختلفی را اشغال کند‪ .‬هنگامی که یک تصویر فرآیند برای اولین‬
‫بار ایجاد می شود‪ ،‬در برخی از پارتیشن ها در حافظه اصلی بارگذاری می شود‪ .‬بعداً‪ ،‬این فرآیند ممکن است جایگزین شود‪.‬‬
‫هنگامی که متعاقباً مجدداً جایگزین می شود‪ ،‬ممکن است به پارتیشن متفاوتی نسبت به دفعه قبل اختصاص داده شود‪.‬‬

‫همین امر در مورد پارتیشن بندی پویا نیز صادق است‪ .‬در شکل ‪ c7.4‬و شکل ‪ h7.4‬مشاهده کنید که فرآیند ‪ 2‬در دو نوبت‬
‫زمانی که وارد می شود‪ ،‬دو ناحیه متفاوت از حافظه را اشغال می کند‪ .‬بنابراین‪ ،‬مکانها دستورالعملها و دادهها که توسط یک‬
‫فرآیند ارجاع میشوند‪ ،‬ثابت نیستند‪ .‬هر بار که فرآیندی مبادله یا جابجا می شود‪ ،‬آنها تغییر می کنند‪ .‬برای حل این مشکل‪ ،‬بین‬
‫چندین نوع آدرس تمایز قائل شده است‪ .‬آدرس منطقی ارجاع به مکان حافظه مستقل از تخصیص فعلی داده ها به حافظه است‪.‬‬
‫قبل از دستیابی به دسترسی به حافظه‪ ،‬باید یک ترجمه به یک آدرس فیزیکی انجام شود‪ .‬آدرس نسبی نمونه خاصی از آدرس‬
‫منطقی است که در آن آدرس به عنوان یک مکان نسبت به یک نقطه شناخته شده‪ ،‬معموالً یک مقدار در یک ثبات پردازنده‬
‫بیان می شود‪ .‬آدرس فیزیکی یا آدرس مطلق‪ ،‬یک مکان واقعی در حافظه اصلی است‪ .‬برنامه هایی که از آدرس های نسبی در‬
‫حافظه استفاده می کنند با استفاده از بارگذاری پویا در زمان اجرا بارگذاری می شوند برای بحث به پیوست ‪ A7‬مراجعه کنید‪ .‬به‬
‫طور معمول‪ ،‬تمام مراجع حافظه در فرآیند بارگذاری شده نسبت به مبدا برنامه هستند‪ .‬بنابراین‪ ،‬مکانیزم سخت افزاری برای‬
‫ترجمه آدرس های نسبی به آدرس های حافظه اصلی فیزیکی در زمان اجرای دستورالعمل مورد نیاز است که حاوی مرجع است‪.‬‬

‫شکل ‪ 7.8‬پشتیبانی سخت افزاری برای جابجایی‬

‫شکل ‪ 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.9‬تخصیص فرآیند به فریم های آزاد‬

‫شکل ‪ 7.10‬ساختارهای داده برای مثال شکل ‪ 7.9‬در دوره زمانی ‪f‬‬

‫عواقب استفاده از اندازه صفحه که توان ‪ 2‬است دوچندان است‪ .‬اول‪ ،‬طرح آدرس دهی منطقی برای برنامه نویس‪ ،‬اسمبلر و پیوند‬
‫دهنده شفاف است‪ .‬هر آدرس منطقی شماره صفحه‪ ،‬افست یک برنامه با آدرس نسبی آن یکسان است‪ .‬دوم‪ ،‬اجرای یک تابع در‬
‫سخت افزار برای انجام ترجمه پویا آدرس در زمان اجرا‪ ،‬کار نسبتاً آسانی است‪ .‬آدرسی متشکل از ‪ n m‬بیت را در نظر بگیرید‪،‬‬
‫که در آن ‪ n‬بیت سمت چپ‪ ،‬شماره صفحه و سمت راست ترین ‪ m‬بیت‪ ،‬آفست است‪ .‬در مثال ما شکل ‪ n 6 ،b7.11‬و ‪m 10.‬‬
‫مراحل زیر برای ترجمه آدرس مورد نیاز است‪:‬‬

‫‪ -‬شماره صفحه را به عنوان ‪ n‬بیت سمت چپ آدرس منطقی استخراج کنید‪.‬‬

‫‪402‬‬
‫سیستم عامل های داخلی و اصول طراحی‪403.........................................................................................................................‬‬

‫‪ -‬از شماره صفحه به عنوان نمایه در جدول صفحه فرآیند برای یافتن شماره فریم‪ k ،‬استفاده کنید‪.‬‬

‫‪ -‬آدرس فیزیکی شروع قاب ‪ k 2m‬است و آدرس فیزیکی بایت ارجاع شده همان عدد به اضافه افست است‪ .‬این آدرس فیزیکی‬
‫نیازی به محاسبه نیست‪ .‬با اضافه کردن شماره فریم به افست به راحتی ساخته می شود‪.‬‬

‫شکل ‪ 7.11‬آدرس های منطقی‬

‫شکل ‪ 7.12‬نمونه هایی از ترجمه آدرس منطقی به فیزیکی‬

‫‪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‬است‪ .‬مراحل زیر برای‬
‫ترجمه آدرس مورد نیاز است‪:‬‬

‫‪ -‬عدد قطعه را به عنوان ‪ n‬بیت سمت چپ آدرس منطقی استخراج کنید‪.‬‬

‫‪ -‬از شماره بخش به عنوان یک شاخص در جدول بخش فرآیند برای یافتن آدرس فیزیکی شروع بخش استفاده کنید‪.‬‬

‫‪ -‬افست را که در سمت راست ترین بیت بیان می شود‪ ،‬با طول بخش مقایسه کنید‪ .‬اگر افست بزرگتر یا مساوی طول باشد‪،‬‬
‫آدرس نامعتبر است‪.‬‬

‫‪ -‬آدرس فیزیکی مورد نظر مجموع آدرس فیزیکی ابتدایی بخش به اضافه مقدار افست است‪.‬‬

‫در مثال ما‪ ،‬ما آدرس منطقی ‪ 0001001011110000‬را داریم‪ ،‬که بخش ‪ 1‬شماره ‪ Offset 752 ،1‬است‪ .‬فرض کنید که این‬
‫بخش در ‪ Main Membery‬شروع به کار در آدرس فیزیکی ‪ 0010000000100000‬می باشد‪ .‬سپس آدرس فیزیکی‬
‫‪. 0010001000100000000000000000000000000 001011110000 0010000000100000‬‬

‫به طور خالصه‪ ،‬با تقسیم بندی ساده‪ ،‬یک فرآیند به تعدادی بخش تقسیم می شود که نیازی به اندازه مساوی ندارند‪ .‬هنگامی که‬
‫یک فرآیند وارد می شود‪ ،‬تمام بخش های آن در مناطق در دسترس حافظه بارگذاری می شوند و یک جدول بخش تنظیم می‬
‫شود‪.‬‬

‫‪ 7.5‬خالصه‬

‫یکی از مهمترین و پیچیده ترین وظایف یک سیستم عامل مدیریت حافظه است‪ .‬مدیریت حافظه شامل تلقی حافظه اصلی به‬
‫عنوان منبعی است که باید به تعدادی از فرآیندهای فعال تخصیص داده شود و به اشتراک گذاشته شود‪ .‬برای استفاده کارآمد از‬
‫پردازنده و امکانات ورودی‪/‬خروجی‪ ،‬حفظ هر چه بیشتر فرآیندها در حافظه اصلی مطلوب است‪ .‬عالوه بر این‪ ،‬مطلوب است که‬
‫برنامه نویسان از محدودیت های اندازه در توسعه برنامه رها شوند‪ .‬ابزارهای اساسی مدیریت حافظه صفحه بندی و بخش بندی‬
‫هستند‪ .‬با صفحه بندی‪ ،‬هر فرآیند به صفحات نسبتاً کوچک و با اندازه ثابت تقسیم می شود‪ .‬تقسیم بندی استفاده از قطعات با‬
‫اندازه های مختلف را فراهم می کند‪ .‬همچنین امکان ترکیب بخش بندی و صفحه بندی در یک طرح مدیریت حافظه واحد‬
‫وجود دارد‪.‬‬

‫‪405‬‬
‫سیستم عامل های داخلی و اصول طراحی‪406.........................................................................................................................‬‬

‫‪ 7.6‬خواندن و انیمیشن های توصیه شده‬

‫یک بحث کامل در مورد استراتژی های پارتیشن بندی در ‪KNUT97‬یافت می شود‪PRES72 .‬یک درمان کالسیک از‬
‫لینکرها و بارگذارها است که هنوز ارزش خواندن دارد‪BEAZ01 .‬مقدمه ای مفید برای پیوند دهنده ها‪ ،‬کتابخانه های مشترک‪،‬‬
‫و ماژول های افزونه قابل بارگذاری پویا ارائه می دهد‪ .‬بحث عملی پیوند و بارگذاری‪ ،‬با مثالهای متعدد سیستمعامل‪،‬‬
‫‪LEVI00‬است‪.‬‬

‫تصاویر متحرک‬

‫مجموعه ای از انیمیشن که مفاهیم این فصل را نشان می دهد در وب سایت ‪ Premium‬موجود است‪ .‬خواننده تشویق می شود‬
‫که انیمیشن ها را برای تقویت مفاهیم این فصل مشاهده کند‪.‬‬

‫‪406‬‬
‫سیستم عامل های داخلی و اصول طراحی‪407.........................................................................................................................‬‬

‫‪ 7.7‬اصطالحات کلیدی‪ ،‬سؤاالت و مشکالت را مرور کنید‬

‫شرایط کلیدی‬

‫سیستم رفیق بارگذاری مطلق‬ ‫پیوند پویا فشرده سازی‬ ‫پارتیشن بندی پویا بارگذاری زمان‬
‫اجرا پویا‬

‫تکه تکه شدن خارجی‬ ‫سازماندهی منطقی‬ ‫حفاظت‬

‫پارتیشن بندی ثابت‬ ‫مدیریت حافظه‬ ‫آدرس نسبی‬

‫قاب‬ ‫صفحه‬ ‫بارگیری قابل جابجایی‬

‫تکه تکه شدن داخلی‬ ‫جدول صفحه‬ ‫جابجایی‬

‫ویرایشگر پیوند‬ ‫صفحه بندی‬ ‫بخش‬

‫ربط دادن‬ ‫پارتیشن بندی‬ ‫تقسیم بندی‬

‫بارگذاری‬ ‫آدرس حقیقی‬ ‫اشتراک گذاری‬

‫آدرس منطقی‬ ‫سازمان فیزیکی‬

‫بررسی سواالت‬

‫‪ .7.1‬مدیریت حافظه برای ارضای چه الزاماتی در نظر گرفته شده است؟‬

‫‪ .7.2‬چرا قابلیت جابجایی فرآیندها مطلوب است؟‬

‫‪ .7.3‬چرا نمی توان حفاظت حافظه را در زمان اجرا اعمال کرد؟‬

‫‪ .7.4‬دالیلی برای اجازه دادن به دو یا چند فرآیند برای دسترسی به یک منطقه خاص از حافظه چیست؟‬

‫‪ .7.5‬در طرح پارتیشن بندی ثابت‪ ،‬استفاده از پارتیشن های با اندازه نابرابر چه مزایایی دارد؟‬

‫‪ .7.6‬تفاوت بین پراکندگی داخلی و خارجی چیست؟‬

‫‪407‬‬
‫سیستم عامل های داخلی و اصول طراحی‪408.........................................................................................................................‬‬

‫‪ .7.7‬تفاوت بین آدرس های منطقی‪ ،‬نسبی و فیزیکی چیست؟‬

‫‪ .7.8‬تفاوت صفحه و فریم چیست؟‬

‫‪ .7.9‬تفاوت بین یک صفحه و یک بخش چیست؟‬

‫چالش ها و مسائل‬

‫‪ .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.7‬یک بلوک ‪ 1‬مگابایتی از حافظه با استفاده از سیستم ‪ Buddy‬تخصیص داده می شود‪.‬‬

‫آ‪ .‬نتایج دنباله زیر را در شکلی مشابه شکل ‪ 7.6‬نشان دهید‪ :‬درخواست ‪ ;70‬درخواست ‪ ;35‬درخواست ‪ ;80‬بازگشت ;‪A‬‬
‫درخواست ‪ ;60‬بازگشت ;‪B‬بازگشت ;‪D‬بازگشت ‪C.‬‬

‫ب نمایش درخت باینری را به دنبال بازگشت ‪ B‬نشان دهید‪.‬‬

‫‪ .7.8‬یک سیستم ‪Buddy‬ه را در نظر بگیرید که در آن یک بلوک خاص تحت تخصیص فعلی دارای آدرس ‪011011110000‬‬
‫است‪.‬‬

‫آ‪ .‬اگر بلوک اندازه ‪ 4‬باشد‪ ،‬آدرس باینری ‪ Buddy‬آن چیست؟‬

‫ب اگر بلوک اندازه ‪ 16‬باشد‪ ،‬آدرس باینری ‪ Buddy‬آن چیست؟‬

‫‪ .7.9‬اجازه دهید ‪ buddykx‬آدرس ‪ Buddy‬بلوک با اندازه ‪ k2‬که آدرس آن ‪ x‬است‪ .‬یک عبارت کلی برای ‪buddykx‬‬
‫بنویسید‪.‬‬

‫‪ .7.10‬دنباله فیبوناچی به صورت زیر تعریف می شود‪:‬‬

‫آ‪ .‬آیا می توان از این دنباله برای ایجاد یک سیستم ‪ 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‬برای فشرده سازی صرف می شود از نابرابری زیر پیروی می کند‬

‫طول متوسط یک بخش‪ ،‬بر حسب کلمات‬

‫‪ t‬میانگین طول عمر یک بخش‪ ،‬در مراجع حافظه‬

‫‪411‬‬
‫سیستم عامل های داخلی و اصول طراحی‪412.........................................................................................................................‬‬

‫‪ f‬کسری از حافظه که در شرایط تعادل استفاده نمی شود‬

‫راهنمایی‪ :‬میانگین سرعت عبور مرز از حافظه را پیدا کنید و فرض کنید که کپی کردن یک کلمه به حداقل دو مرجع حافظه نیاز‬
‫دارد‪.‬‬

‫ب ‪ F‬را برای ‪ t 1000 ،f 0.2‬و ‪ s 50‬پیدا کنید‪.‬‬

‫ضمیمه ‪ A7‬بارگیری و پیوند‬

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

‫شکل ‪ 7.13‬تابع بارگذاری‬

‫‪412‬‬
‫سیستم عامل های داخلی و اصول طراحی‪413.........................................................................................................................‬‬

‫شکل ‪ 7.14‬سناریوی پیوند و بارگذاری‬

‫بارگذاری‬

‫در شکل ‪ ،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‬ماژول های بار مطلق و قابل جابجایی‬

‫برنامه نویس باید استراتژی تخصیص مورد نظر را برای قرار دادن ماژول ها در حافظه اصلی بداند‪ .‬ثانیاً‪ ،‬اگر تغییراتی در برنامه‬
‫انجام شود که شامل درج یا حذف در بدنه ماژول باشد‪ ،‬تمام آدرسها باید تغییر کنند‪ .‬بر این اساس‪ ،‬ترجیح داده می شود که‬
‫منابع حافظه در برنامه ها به صورت نمادین بیان شوند و سپس آن ارجاعات نمادین در زمان اجرا یا مونتاژ حل شوند‪ .‬این در‬
‫شکل ‪ 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.4‬مدیریت حافظه لینوکس‪ /‬تخصیص حافظه هسته حافظه مجازی لینوکس‬

‫‪ 8.5‬مدیریت حافظه ویندوز نقشه آدرس مجازی ویندوز صفحه بندی ویندوز‪ /‬تعویض ویندوز ‪8‬‬

‫‪ 8.6‬مدیریت حافظه اندروید‬

‫‪ 8.7‬خالصه‬

‫‪ 8.8‬خواندن و انیمیشن های توصیه شده‬

‫‪ 8.9‬اصطالحات کلیدی‪ ،‬بررسی سواالت و مشکالت‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬حافظه مجازی را تعریف کنید‪.‬‬

‫‪ -‬سخت افزار و ساختارهای کنترلی که از حافظه مجازی پشتیبانی می کنند را توضیح دهید‪.‬‬

‫‪ -‬مکانیسم های مختلف سیستم عامل مورد استفاده برای پیاده سازی حافظه مجازی را توضیح دهید‪.‬‬

‫‪420‬‬
‫سیستم عامل های داخلی و اصول طراحی‪421.........................................................................................................................‬‬

‫‪ -‬مکانیسم های مدیریت حافظه مجازی را در یونیکس‪ ،‬لینوکس و ویندوز ‪ 7‬توضیح دهید‪.‬‬

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

‫جدول ‪ 8.1‬برخی از اصطالحات کلیدی مرتبط با حافظه مجازی را تعریف می کند‪.‬‬

‫‪ 8.1‬ساختارهای سخت افزاری و کنترلی‬

‫با مقایسه صفحه بندی ساده و تقسیم بندی ساده‪ ،‬از یک سو‪ ،‬با پارتیشن بندی ثابت و پویا‪ ،‬از سوی دیگر‪ ،‬پایه و اساس یک‬
‫پیشرفت اساسی در مدیریت حافظه را می بینیم‪ .‬دو ویژگی صفحه بندی و تقسیم بندی‪ ،‬کلیدهای این پیشرفت هستند‪:‬‬

‫‪ .1‬تمام مراجع حافظه در یک فرآیند آدرس های منطقی هستند که در زمان اجرا به صورت پویا به آدرس های فیزیکی ترجمه‬
‫می شوند‪ .‬این به این معنی است که یک فرآیند ممکن است در حافظه اصلی و یا خارج از آن جابجا شود به طوری که مناطق‬
‫مختلف حافظه اصلی را در زمان های مختلف در طول دوره اجرا اشغال کند‪.‬‬

‫جدول ‪ 8.1‬اصطالحات حافظه مجازی‬

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

‫‪421‬‬
‫سیستم عامل های داخلی و اصول طراحی‪422.........................................................................................................................‬‬

‫آدرسی که به یک مکان در حافظه مجازی اختصاص داده شده است تا آدرس مجازی‬
‫به آن مکان دسترسی داشته باشید‪ ،‬انگار که بخشی از حافظه اصلی‬
‫است‪.‬‬

‫فضای آدرس مجازی‬ ‫حافظه مجازی اختصاص داده شده به یک فرآیند‪.‬‬

‫فضای آدرس‬ ‫محدوده آدرس های حافظه موجود برای یک فرآیند‪.‬‬

‫آدرس حقیقی‬ ‫آدرس محل ذخیره سازی در حافظه اصلی‪.‬‬

‫‪ .2‬یک فرآیند ممکن است به تعدادی از قطعات صفحات یا بخشها تقسیم شود و الزم نیست این قطعات در حین اجرا به طور‬
‫پیوسته در حافظه اصلی قرار گیرند‪ .‬ترکیبی از ترجمه آدرس پویا در زمان اجرا و استفاده از جدول صفحه یا بخش این اجازه را‬
‫می دهد‪.‬‬

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

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

‫‪422‬‬
‫سیستم عامل های داخلی و اصول طراحی‪423.........................................................................................................................‬‬

‫فرآیند دیگری را برای اجرا در حین انجام ‪ I/O‬دیسک ارسال کند‪ .‬هنگامی که قطعه مورد نظر به حافظه اصلی وارد شد‪ ،‬یک‬
‫وقفه ورودی‪/‬خروجی صادر میشود که کنترل را به سیستمعامل باز میگرداند‪ ،‬که فرآیند آسیبدیده را به حالت آماده‬
‫برمیگرداند‪.‬‬

‫ممکن است فوراً به ذهنتان خطور کند که کارآیی این مانور را زیر سوال ببرید‪ ،‬که در آن فرآیندی ممکن است در حال اجرا باشد‬
‫و مجبور نباشید به دلیل دیگری به جز اینکه در بارگذاری همه قطعات مورد نیاز فرآیند شکست خورده اید‪ ،‬قطع شود‪ .‬در حال‬
‫حاضر‪ ،‬اجازه دهید بررسی این سوال را با اطمینان از اینکه کارایی ممکن است به تعویق بیندازیم‪ .‬در عوض‪ ،‬اجازه دهید در مورد‬
‫پیامدهای استراتژی جدید خود فکر کنیم‪ .‬دو مفهوم وجود دارد‪ ،‬دومی شگفتانگیزتر از اولی‪ ،‬و هر دو منجر به بهبود استفاده از‬
‫سیستم میشوند‪:‬‬

‫‪ .1‬ممکن است فرآیندهای بیشتری در حافظه اصلی نگهداری شوند‪ .‬از آنجایی که ما فقط برخی از قطعات هر فرآیند خاصی را‬
‫بارگذاری می کنیم‪ ،‬فضای بیشتری برای فرآیندهای بیشتر وجود دارد‪ .‬این منجر به استفاده کارآمدتر از پردازنده می شود‪ ،‬زیرا‬
‫احتمال بیشتری وجود دارد که حداقل یکی از فرآیندهای متعدد در هر زمان خاص در حالت آماده باشد‪.‬‬

‫‪ .2‬یک پردازش ممکن است بزرگتر از تمام حافظه اصلی باشد‪ .‬یکی از اساسی ترین محدودیت ها در برنامه نویسی برداشته شده‬
‫است‪ .‬بدون طرحی که ما در مورد آن بحث کردیم‪ ،‬یک برنامه نویس باید کامالً از مقدار حافظه موجود آگاه باشد‪ .‬اگر برنامه ای‬
‫که نوشته می شود خیلی بزرگ باشد‪ ،‬برنامه نویس باید راه هایی را برای ساختاربندی برنامه به قطعاتی که می توانند به طور‬
‫جداگانه در نوعی استراتژی همپوشانی بارگذاری شوند‪ ،‬ابداع کند‪ .‬با حافظه مجازی مبتنی بر صفحه بندی یا بخش بندی‪ ،‬این‬
‫کار به سیستم عامل و سخت افزار واگذار می شود‪ .‬تا آنجا که به برنامه نویس مربوط می شود‪ ،‬او با یک حافظه بزرگ‪ ،‬به اندازه‬
‫ای که با ذخیره سازی دیسک مرتبط است‪ ،‬سروکار دارد‪ .‬سیستم عامل به طور خودکار قطعات یک فرآیند را در صورت لزوم در‬
‫حافظه اصلی بارگذاری می کند‪.‬‬

‫از آنجا که یک فرآیند فقط در حافظه اصلی اجرا می شود‪ ،‬به آن حافظه به عنوان حافظه حقیقی گفته می شود‪ .‬اما یک برنامه‬
‫نویس یا کاربر یک حافظه بالقوه بسیار بزرگتر را درک می کند ‪ -‬حافظه ای که روی دیسک تخصیص داده می شود‪ .‬این دومی‬
‫به عنوان حافظه مجازی شناخته می شود‪ .‬حافظه مجازی امکان چندبرنامهنویسی بسیار مؤثر را فراهم میکند و کاربر را از‬
‫محدودیتهای غیرضروری سخت حافظه اصلی خالص میکند‪ .‬جدول ‪ 8.2‬خصوصیات صفحه بندی و تقسیم بندی با و بدون‬
‫استفاده از حافظه مجازی را خالصه می کند‪.‬‬

‫‪423‬‬
‫سیستم عامل های داخلی و اصول طراحی‪424.........................................................................................................................‬‬

‫موقعیت و حافظه مجازی‬

‫مزایای حافظه مجازی جذاب است‪ ،‬اما آیا این طرح کاربردی است؟ زمانی بحث های قابل توجهی در این مورد وجود داشت‪ ،‬اما‬
‫تجربه با سیستم عامل های متعدد بدون شک نشان داده است که حافظه مجازی کار می کند‪.‬‬

‫جدول ‪ 8.2‬ویژگی های صفحه بندی و تقسیم بندی‬

‫صفحه بندی ساده‬ ‫صفحه بندی حافظه‬ ‫تقسیم بندی ساده‬ ‫تقسیم بندی حافظه‬
‫مجازی‬ ‫مجازی‬

‫حافظه اصلی به قطعات کوچک با اندازه ثابت‬ ‫حافظه اصلی پارتیشن بندی نشده است‪.‬‬
‫به نام فریم تقسیم می شود‪.‬‬

‫بخش های برنامه مشخص شده توسط برنامه برنامه ای که توسط اجرار یا سیستم مدیریت‬
‫حافظه به صفحات تقسیم می شود‪.‬‬ ‫نویس برای اجرار یعنی تصمیم توسط برنامه‬
‫نویس گرفته می شود‪.‬‬

‫تکه تکه شدن داخلی در فریم ها‬ ‫بدون تکه تکه شدن داخلی‬

‫بدون تکه تکه شدن خارجی‬ ‫تکه تکه شدن خارجی‬

‫سیستم عامل باید یک جدول بخش برای هر سیستم عامل باید برای هر فرآیند یک جدول‬
‫صفحه داشته باشد که نشان دهد هر صفحه‬ ‫فرآیند داشته باشد که آدرس بار و طول هر‬
‫کدام فریم را اشغال می کند‪.‬‬ ‫بخش را نشان دهد‪.‬‬

‫سیستم عامل باید لیستی از حفره های آزاد در سیستم عامل باید یک لیست فریم آزاد داشته‬
‫باشد‪.‬‬ ‫حافظه اصلی داشته باشد‪.‬‬

‫پردازنده برای محاسبه آدرس مطلق از شماره‬ ‫پردازنده برای محاسبه آدرس مطلق از عدد‬
‫صفحه استفاده می کند‪.‬‬ ‫قطعه استفاده می کند‪.‬‬

‫تمام صفحات یک‬ ‫الزم نیست همه بخش تمام بخشهای یک الزم نیست همه‬
‫فرآیند باید در حافظه صفحات یک فرآیند در فرآیند باید در حافظه‬ ‫های یک فرآیند در‬
‫فریم های حافظه اصلی اصلی برای اجرای‬ ‫اصلی برای اجرای‬ ‫حافظه اصلی برای‬

‫‪424‬‬
‫سیستم عامل های داخلی و اصول طراحی‪425.........................................................................................................................‬‬

‫فرآیند باشند‪ ،‬مگر‬ ‫باشند تا فرآیند اجرا‬ ‫فرآیند باشند‪ ،‬مگر‬ ‫اجرای فرآیند باشند‪.‬‬
‫بخش ها ممکن است اینکه از همپوشانی شود‪ .‬صفحات ممکن اینکه از همپوشانی‬
‫استفاده شود‪.‬‬ ‫است در صورت نیاز‬ ‫در صورت نیاز خوانده استفاده شود‪.‬‬
‫خوانده شوند‪.‬‬ ‫شوند‪.‬‬

‫خواندن یک صفحه در‬ ‫خواندن یک قطعه در‬


‫حافظه اصلی ممکن‬ ‫حافظه اصلی ممکن‬
‫است نیاز به نوشتن‬ ‫است نیاز به نوشتن‬
‫یک صفحه روی دیسک‬ ‫یک یا چند بخش در‬
‫داشته باشد‪.‬‬ ‫دیسک داشته باشد‪.‬‬

‫بر این اساس‪ ،‬حافظه مجازی‪ ،‬مبتنی بر صفحهبندی یا صفحهبندی به عالوه بخشبندی‪ ،‬به جزء ضروری سیستم عامل های‬
‫معاصر تبدیل شده است‪.‬‬

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

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

‫‪425‬‬
‫سیستم عامل های داخلی و اصول طراحی‪426.........................................................................................................................‬‬

‫می کند‪ .‬اجتناب از کوبیدن یک حوزه تحقیقاتی عمده در دهه ‪ 1970‬بود و منجر به الگوریتمهای پیچیده اما مؤثر مختلفی شد‪.‬‬
‫در اصل‪ ،‬سیستم عامل بر اساس تاریخ اخیر تالش می کند حدس بزند که کدام قطعات در آینده نزدیک کمتر مورد استفاده قرار‬
‫می گیرند‪.‬‬

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

‫اصل محلی بودن نشان می دهد که یک طرح حافظه مجازی ممکن است موثر باشد‪ .‬برای اینکه حافظه مجازی کاربردی و موثر‬
‫باشد‪ ،‬دو عنصر الزم است‪ .‬اول‪ ،‬باید پشتیبانی سخت افزاری برای طرح صفحه بندی و‪/‬یا تقسیم بندی به کار گرفته شود‪ .‬دوم‪،‬‬
‫سیستم عامل باید دارای نرم افزاری برای مدیریت حرکت صفحات و‪/‬یا بخش ها بین حافظه ثانویه و حافظه اصلی باشد‪ .‬در این‬
‫بخش‪ ،‬جنبه سخت افزاری را بررسی می کنیم و ساختارهای کنترلی الزم را که توسط سیستم عامل ایجاد و نگهداری می شوند‪،‬‬
‫اما توسط سخت افزار مدیریت حافظه استفاده می شوند‪ ،‬بررسی می کنیم‪ .‬بررسی مشکالت سیستم عامل در بخش بعدی ارائه‬
‫شده است‪.‬‬

‫صفحه بندی‬

‫اصطالح حافظه مجازی معموالً با سیستم هایی مرتبط است که از صفحه بندی استفاده می کنند‪ ،‬اگرچه حافظه مجازی مبتنی‬
‫بر تقسیم بندی نیز مورد استفاده قرار می گیرد و در ادامه مورد بحث قرار می گیرد‪ .‬استفاده از صفحه بندی برای دستیابی به‬
‫حافظه مجازی برای اولین بار برای کامپیوتر ‪ Atlas KILB62‬گزارش شد و به زودی مورد استفاده تجاری گسترده قرار گرفت‪.‬‬

‫‪426‬‬
‫سیستم عامل های داخلی و اصول طراحی‪427.........................................................................................................................‬‬

‫(الف) فقط صفحه بندی‬

‫(ب) فقط بخش بندی‬

‫ج) تقسیم بندی و صفحه بندی ترکیبی‬


‫شکل ‪ 8.1‬فرمت های معمول مدیریت حافظه‬

‫در بحث صفحه بندی ساده اشاره کردیم که هر فرآیند جدول صفحه مخصوص به خود را دارد و زمانی که تمام صفحات آن در‬
‫حافظه اصلی بارگذاری می شوند‪ ،‬جدول صفحه یک فرآیند ایجاد شده و در حافظه اصلی بارگذاری می شود‪ .‬هر ورودی جدول‬
‫صفحه ‪PTE‬شامل شماره فریم صفحه مربوطه در حافظه اصلی است‪ .‬یک جدول صفحه نیز برای طرح حافظه مجازی مبتنی بر‬
‫صفحه بندی مورد نیاز است‪ .‬باز هم‪ ،‬معمول است که یک جدول صفحه منحصر به فرد را با هر فرآیند مرتبط کنیم‪ .‬با این حال‪،‬‬
‫در این مورد‪ ،‬ورودی های جدول صفحه پیچیده تر می شوند شکل ‪a. 8.1‬از آنجایی که ممکن است فقط برخی از صفحات یک‬
‫فرآیند در حافظه اصلی باشند‪ ،‬در هر ورودی جدول صفحه به بیتی نیاز است تا نشان دهد آیا صفحه مربوطه ‪P‬در حافظه اصلی‬
‫وجود دارد یا خیر‪ .‬اگر بیت نشان می دهد که صفحه در حافظه است‪ ،‬ورودی شامل شماره فریم آن صفحه نیز می شود‪.‬‬

‫ورودی جدول صفحه شامل یک بیت اصالح ‪M‬است که نشان می دهد آیا محتوای صفحه مربوطه از آخرین بارگذاری صفحه در‬
‫حافظه اصلی تغییر کرده است یا خیر‪ .‬اگر تغییری صورت نگرفته باشد‪ ،‬الزم نیست وقتی زمان تعویض صفحه در کادری که در‬
‫حال حاضر آن را اشغال کرده است‪ ،‬صفحه را بنویسید‪ .‬بیت های کنترل دیگری نیز ممکن است وجود داشته باشد‪ .‬به عنوان‬
‫مثال‪ ،‬اگر حفاظت یا اشتراک گذاری در سطح صفحه مدیریت شود‪ ،‬بیت هایی برای این منظور مورد نیاز خواهند بود‪.‬‬

‫‪427‬‬
‫سیستم عامل های داخلی و اصول طراحی‪428.........................................................................................................................‬‬

‫شکل ‪ 8.2‬ترجمه آدرس در یک سیستم صفحه بندی‬

‫ساختار جدول صفحه مکانیسم اصلی برای خواندن یک کلمه از حافظه شامل ترجمه یک آدرس مجازی یا منطقی‪ ،‬متشکل از‬
‫شماره صفحه و افست‪ ،‬به یک آدرس فیزیکی‪ ،‬متشکل از شماره فریم و افست‪ ،‬با استفاده از جدول صفحه است‪ .‬از آنجایی که‬
‫جدول صفحه دارای طول متغیر است‪ ،‬بسته به اندازه فرآیند‪ ،‬نمی توان انتظار داشت که آن را در ثبات ها نگهداری کنیم‪ .‬در‬
‫عوض‪ ،‬برای دسترسی باید در حافظه اصلی باشد‪ .‬شکل ‪ 8.2‬اجرای سخت افزاری را نشان می دهد‪ .‬هنگامی که یک فرآیند خاص‬
‫در حال اجرا است‪ ،‬یک ثبات آدرس شروع جدول صفحه را برای آن فرآیند نگه می دارد‪ .‬شماره صفحه یک آدرس مجازی برای‬
‫نمایه سازی آن جدول و جستجوی شماره فریم مربوطه استفاده می شود‪ .‬این با قسمت افست آدرس مجازی ترکیب می شود تا‬
‫آدرس واقعی مورد نظر را ایجاد کند‪ .‬به طور معمول‪ ،‬زمینه شماره صفحه طوالنی تر از زمینه شماره قاب ‪n m‬است‪.‬‬

‫در اکثر سیستم ها‪ ،‬یک جدول صفحه در هر فرآیند وجود دارد‪ .‬اما هر فرآیند می تواند حجم عظیمی از حافظه مجازی را اشغال‬
‫کند‪ .‬به عنوان مثال‪ ،‬در معماری ‪ ،VAX Virtual Address Extension‬هر فرآیند می تواند تا ‪ 2 231‬گیگابایت حافظه‬
‫مجازی داشته باشد‪ .‬استفاده از ‪ 29‬صفحه ‪ 512‬بایتی به این معنی است که در هر فرآیند به ‪ 222‬صفحه ورودی جدول نیاز‬
‫است‪ .‬واضح است که مقدار حافظه اختصاص داده شده به جداول صفحه به تنهایی می تواند به طور غیرقابل قبولی زیاد باشد‪.‬‬
‫برای غلبه بر این مشکل‪ ،‬اکثر طرح های حافظه مجازی جداول صفحه را به جای حافظه حقیقی در حافظه مجازی ذخیره می‬
‫کنند‪ .‬این بدان معناست که جداول صفحه نیز مانند سایر صفحات در معرض صفحه بندی هستند‪ .‬هنگامی که یک فرآیند در‬
‫حال اجرا است‪ ،‬حداقل بخشی از جدول صفحه آن باید در حافظه اصلی باشد‪ ،‬از جمله ورودی جدول صفحه صفحه در حال اجرا‪.‬‬
‫برخی از پردازنده ها از یک طرح دو سطحی برای سازماندهی جداول صفحات بزرگ استفاده می کنند‪ .‬در این طرح‪ ،‬یک‬
‫دایرکتوری صفحه وجود دارد که در آن هر ورودی به یک جدول صفحه اشاره می کند‪ .‬بنابراین‪ ،‬اگر طول دایرکتوری صفحه ‪X‬‬
‫باشد‪ ،‬و اگر حداکثر طول جدول صفحه ‪ Y‬باشد‪ ،‬یک فرآیند می تواند حداکثر از صفحات ‪ X Y‬تشکیل شود‪ .‬به طور معمول‪،‬‬

‫‪428‬‬
‫سیستم عامل های داخلی و اصول طراحی‪429.........................................................................................................................‬‬

‫حداکثر طول جدول صفحه برابر با یک صفحه محدود می شود‪ .‬به عنوان مثال‪ ،‬پردازنده ‪ Pentium‬از این روش استفاده می‬
‫کند‪.‬‬

‫شکل ‪ 8.3‬جدول صفحه سلسله مراتبی دو سطحی‬

‫شکل ‪ 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.4‬ترجمه آدرس در یک سیستم صفحه بندی دو سطحی‬

‫شکل ‪ 8.5‬یک پیاده سازی معمولی از رویکرد جدول صفحه معکوس را نشان می دهد‪ .‬برای اندازه حافظه فیزیکی ‪ 2‬متر فریم‪،‬‬
‫جدول صفحه معکوس حاوی ‪ 2‬متر ورودی است‪ ،‬به طوری که ورودی ‪ i‬به فریم ‪ i‬اشاره دارد‪ .‬هر ورودی در جدول صفحه شامل‬
‫موارد زیر است‪:‬‬

‫‪ -‬شماره صفحه‪ :‬این قسمت شماره صفحه آدرس مجازی است‪.‬‬

‫‪ -‬شناسه فرآیند‪ :‬فرآیندی که مالک این صفحه است‪ .‬ترکیبی از شماره صفحه و شناسه فرآیند‪ ،‬صفحه ای را در فضای آدرس‬
‫مجازی یک فرآیند خاص شناسایی می کند‪.‬‬

‫‪ -‬بیت های کنترل‪ :‬این زمینه شامل پرچم هایی مانند معتبر‪ ،‬ارجاع شده و اصالح شده است‪ .‬و اطالعات حفاظت و قفل‪.‬‬

‫‪ -‬نشانگر زنجیره ای‪ :‬اگر هیچ ورودی زنجیره ای برای این ورودی وجود نداشته باشد‪ ،‬این زمینه خالی است شاید با یک بیت‬
‫جداگانه نشان داده شود‪ .‬در غیر این صورت‪ ،‬زمینه حاوی مقدار شاخص عدد بین ‪ 0‬و ‪m − 1 2‬ورودی بعدی در زنجیره است‪.‬‬

‫‪430‬‬
‫سیستم عامل های داخلی و اصول طراحی‪431.........................................................................................................................‬‬

‫شکل ‪ 8.5‬ساختار جدول صفحه معکوس‬

‫در این مثال‪ ،‬آدرس مجازی شامل یک شماره صفحه ‪ n‬بیتی با ‪ n m‬است‪ .‬تابع هش شماره صفحه ‪ n‬بیتی را به یک کمیت ‪m-‬‬
‫‪ bit‬ترسیم می کند که برای فهرست کردن در جدول صفحه معکوس استفاده می شود‪.‬‬

‫‪ TRANSLATION LOOKASIDE BUFFER‬در اصل‪ ،‬هر مرجع حافظه مجازی می تواند باعث دو دسترسی به‬
‫حافظه فیزیکی شود‪ :‬یکی برای واکشی ورودی جدول صفحه مناسب و دیگری برای واکشی داده های مورد نظر‪ .‬بنابراین‪ ،‬یک‬
‫طرح حافظه مجازی ساده می تواند زمان دسترسی به حافظه را دو برابر کند‪ .‬برای غلبه بر این مشکل‪ ،‬اکثر طرحهای حافظه‬
‫مجازی از یک حافظه پنهان با سرعت باال برای ورودیهای جدول صفحه استفاده میکنند که معموالً بافر نگاهبانی ترجمه‬
‫‪TLB‬نامیده میشود‪ .‬این کش مانند حافظه نهان به فصل ‪ 1‬مراجعه کنید عمل می کند و شامل ورودی های جدول صفحه‬
‫است که اخیراً استفاده شده است‪ .‬سازماندهی سخت افزار صفحه بندی به دست آمده در شکل ‪ 8.6‬نشان داده شده است‪ .‬با دادن‬
‫یک آدرس مجازی‪ ،‬پردازنده ابتدا ‪ TLB‬را بررسی می کند‪ .‬اگر ورودی جدول صفحه مورد نظر وجود داشته باشد ‪،TLB hit‬‬
‫سپس شماره فریم بازیابی می شود و آدرس واقعی تشکیل می شود‪ .‬اگر ورودی جدول صفحه مورد نظر پیدا نشد ‪،TLB miss‬‬
‫سپس پردازنده از شماره صفحه برای فهرست کردن جدول صفحه پردازش و بررسی ورودی جدول صفحه مربوطه استفاده می‬
‫کند‪ .‬اگر "بیت فعلی" تنظیم شود‪ ،‬صفحه در حافظه اصلی است و پردازنده می تواند شماره فریم را از ورودی جدول صفحه‬
‫بازیابی کند تا آدرس واقعی را تشکیل دهد‪ .‬پردازنده همچنین ‪ TLB‬را به روز می کند تا این ورودی جدول صفحه جدید را‬
‫شامل شود‪ .‬در نهایت اگر بیت فعلی تنظیم نشده باشد‪ ،‬صفحه مورد نظر در حافظه اصلی نیست و یک خطای دسترسی به‬
‫حافظه به نام خطای صفحه صادر می شود‪ .‬در این مرحله از حوزه سخت افزار خارج می شویم و سیستم عامل را فراخوانی می‬
‫کنیم که صفحه مورد نیاز را بارگیری می کند و جدول صفحه را به روز می کند‪.‬‬

‫‪431‬‬
‫سیستم عامل های داخلی و اصول طراحی‪432.........................................................................................................................‬‬

‫شکل ‪ 8.6‬استفاده از بافر ‪ Lookaside‬ترجمه‬

‫شکل ‪ 8.7‬فلوچارتی است که استفاده از ‪ TLB‬را نشان می دهد‪ .‬فلوچارت نشان می دهد که اگر صفحه مورد نظر در حافظه‬
‫اصلی نباشد‪ ،‬یک وقفه خطای صفحه باعث می شود تا روال رسیدگی به خطای صفحه فراخوانی شود‪ .‬برای ساده نگه داشتن‬
‫فلوچارت‪ ،‬این واقعیت که سیستم عامل ممکن است فرآیند دیگری را در حالی که ورودی‪/‬خروجی دیسک در حال انجام است‬
‫ارسال کند‪ ،‬نشان داده نشده است‪ .‬بر اساس اصل محلی بودن‪ ،‬بیشتر ارجاعات حافظه مجازی به مکان هایی در صفحات اخیرا‬
‫استفاده شده خواهد بود‪ .‬بنابراین‪ ،‬بیشتر مراجع شامل ورودیهای جدول صفحه در حافظه پنهان هستند‪ .‬مطالعات ‪VAX‬‬
‫‪ TLB‬نشان داده است که این طرح می تواند به طور قابل توجهی عملکرد را بهبود بخشد ‪SATY81. ،CLAR85‬‬

‫تعدادی جزئیات اضافی در مورد سازماندهی واقعی ‪ TLB‬وجود دارد‪ .‬از آنجایی که ‪ TLB‬فقط شامل برخی از ورودیهای یک‬
‫جدول کامل صفحه است‪ ،‬نمیتوانیم به سادگی بر اساس شماره صفحه در ‪ TLB‬فهرست کنیم‪ .‬در عوض‪ ،‬هر ورودی در ‪TLB‬‬
‫باید شامل شماره صفحه و همچنین ورودی جدول صفحه کامل باشد‪ .‬پردازنده مجهز به سخت افزاری است که به آن امکان می‬
‫دهد همزمان تعدادی از ورودی های ‪ TLB‬را بررسی کند تا مشخص کند که آیا با شماره صفحه مطابقت دارد یا خیر‪ .‬این‬
‫تکنیک به عنوان نقشه برداری انجمنی نامیده می شود و با نگاشت مستقیم یا نمایه سازی که برای جستجو در جدول صفحه در‬
‫شکل ‪ 8.8‬استفاده می شود‪ ،‬در تضاد است‪.‬‬

‫طراحی ‪ TLB‬همچنین باید نحوه سازماندهی ورودی ها در ‪ TLB‬و جایگزینی با ورود ورودی جدید را در نظر بگیرد‪ .‬این‬
‫مسائل باید در هر طراحی کش سخت افزاری در نظر گرفته شوند‪ .‬این موضوع در اینجا دنبال نمی شود‪ .‬خواننده ممکن است‬
‫برای جزئیات بیشتر از روش طراحی کش استفاده کند به عنوان مثال‪STAL13. ،‬‬

‫‪432‬‬
‫سیستم عامل های داخلی و اصول طراحی‪433.........................................................................................................................‬‬

‫بازگشت به‬ ‫شروع‬


‫دستورالعمل خطا‬

‫روال رسیدگی به خطاهای‬


‫صفحه‬
‫سیستم عامل به ‪CPU‬‬ ‫صفحه در حافظه‬
‫دستور می دهد صفحه را‬
‫از روی دیسک بخواند‬ ‫اصلی؟‬

‫صفحه از دیسک به‬


‫حافظه اصلی منتقل می‬
‫شود‬ ‫آدرس فیزیکی ‪CPU‬‬
‫تولید می کند‬

‫انجام تعویض صفحه‬

‫جداول صفحه به روز‬


‫شد‬

‫شکل ‪ 8.7‬عملکرد صفحه بندی و بافر نگاهی به ترجمه ‪TLB‬‬

‫در نهایت‪ ،‬مکانیسم حافظه مجازی باید با سیستم کش نه کش ‪ ،TLB‬بلکه کش حافظه اصلی تعامل داشته باشد‪ .‬این در شکل‬
‫‪ 8.9‬نشان داده شده است‪ .‬یک آدرس مجازی عموماً به شکل شماره صفحه‪ ،‬افست خواهد بود‪ .‬ابتدا‪ ،‬سیستم حافظه با ‪TLB‬‬
‫مشورت می کند تا ببیند آیا ورودی جدول صفحه منطبق وجود دارد یا خیر‪ .‬اگر چنین باشد‪ ،‬آدرس واقعی فیزیکی با ترکیب‬
‫عدد فریم با افست ایجاد می شود‪ .‬اگر نه‪ ،‬ورودی از یک جدول صفحه قابل دسترسی است‪ .‬پس از ایجاد آدرس واقعی‪ ،‬که به‬
‫صورت برچسب ‪ 2‬و باقیمانده است‪ ،‬از حافظه پنهان استفاده می شود تا ببینیم آیا بلوک حاوی آن کلمه وجود دارد یا خیر‪ .‬اگر‬
‫چنین است‪ ،‬به ‪ CPU‬برگردانده می شود‪ .‬اگر نه‪ ،‬کلمه از حافظه اصلی بازیابی می شود‬

‫‪433‬‬
‫سیستم عامل های داخلی و اصول طراحی‪434.........................................................................................................................‬‬

‫(الف) نقشه برداری‬ ‫(ب) نقشه برداری انجمنی‬


‫مستقیم‬
‫شکل ‪ 8.8‬جستجوی مستقیم در مقابل جستجوی انجمنی برای ورودی های جدول صفحه‬

‫شکل ‪ 8.9‬عملیات بافر و حافظه پنهان ترجمه ‪Lookaside‬‬

‫خواننده باید بتواند پیچیدگی سخت افزار ‪ CPU‬درگیر در یک مرجع حافظه را درک کند‪ .‬آدرس مجازی به آدرس واقعی ترجمه‬
‫می شود‪ .‬این شامل ارجاع به ورودی جدول صفحه است که ممکن است در ‪ ،TLB‬در حافظه اصلی یا روی دیسک باشد‪ .‬کلمه‬
‫ارجاع شده ممکن است در حافظه پنهان‪ ،‬حافظه اصلی یا روی دیسک باشد‪ .‬اگر کلمه ارجاع شده فقط روی دیسک باشد‪ ،‬صفحه‬
‫حاوی کلمه باید در حافظه اصلی بارگذاری شود و بلوک آن در حافظه نهان بارگذاری شود‪ .‬عالوه بر این‪ ،‬ورودی جدول صفحه‬
‫برای آن صفحه باید به روز شود‪.‬‬

‫اندازه صفحه یک تصمیم مهم در طراحی سخت افزار اندازه صفحه مورد استفاده است‪ .‬چندین عامل وجود دارد که باید در نظر‬
‫گرفته شود‪ .‬یکی پراکندگی داخلی است‪ .‬واضح است که هرچه اندازه صفحه کوچکتر باشد‪ ،‬میزان پراکندگی داخلی کمتر است‪.‬‬
‫‪434‬‬
‫سیستم عامل های داخلی و اصول طراحی‪435.........................................................................................................................‬‬

‫برای بهینهسازی استفاده از حافظه اصلی‪ ،‬میخواهیم تکه تکه شدن داخلی را کاهش دهیم‪ .‬از طرف دیگر‪ ،‬هرچه صفحه کوچکتر‬
‫باشد‪ ،‬تعداد صفحات مورد نیاز برای هر فرآیند بیشتر است‪ .‬صفحات بیشتر در هر فرآیند به معنی جداول صفحات بزرگتر است‪.‬‬
‫برای برنامه های بزرگ در یک محیط به شدت چندبرنامه ای‪ ،‬این ممکن است به این معنی باشد که بخشی از جداول صفحه‬
‫فرآیندهای فعال باید در حافظه مجازی باشد‪ ،‬نه در حافظه اصلی‪.‬‬

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

‫پیچیدهتر کردن این مسائل‪ ،‬تأثیر اندازه صفحه بر سرعت رخ دادن خطاهای صفحه است‪ .‬این رفتار‪ ،‬به طور کلی‪ ،‬در شکل‬
‫‪ a8.10‬نشان داده شده است و بر اساس اصل محلی بودن است‪ .‬اگر اندازه صفحه بسیار کوچک باشد‪ ،‬معموالً تعداد نسبتاً زیادی‬
‫از صفحات برای یک فرآیند در حافظه اصلی موجود خواهد بود‪ .‬پس از مدتی‪ ،‬صفحات موجود در حافظه همه شامل بخشهایی‬
‫از فرآیند نزدیک به مراجع اخیر خواهند بود‪ .‬بنابراین‪ ،‬نرخ خطای صفحه باید کم باشد‪ .‬همانطور که اندازه صفحه افزایش می‬
‫یابد‪ ،‬هر صفحه جداگانه حاوی مکان هایی بیشتر و دورتر از هر مرجع خاص اخیر است‪ .‬بنابراین‪ ،‬اثر اصل محلی بودن ضعیف می‬
‫شود و نرخ خطای صفحه شروع به افزایش می کند‪ .‬با این حال‪ ،‬در نهایت‪ ،‬با نزدیک شدن اندازه یک صفحه به اندازه کل فرآیند‬
‫نقطه ‪ P‬در نمودار‪ ،‬نرخ خطای صفحه شروع به کاهش خواهد کرد‪ .‬هنگامی که یک صفحه تمام فرآیند را در بر می گیرد‪ ،‬هیچ‬
‫خطای صفحه وجود نخواهد داشت‪.‬‬

‫یک پیچیدگی دیگر این است که نرخ خطای صفحه نیز با تعداد فریم های اختصاص داده شده به یک فرآیند تعیین می شود‪.‬‬
‫شکل ‪ b8.10‬نشان می دهد که برای اندازه صفحه ثابت‪ ،‬با افزایش تعداد صفحات نگهداری شده در حافظه اصلی‪ ،‬نرخ خطا‬
‫کاهش می یابد‪ .‬اندازه صفحه‪.‬‬

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

‫‪ -‬برنامه های چند رشته ای ممکن است منجر به تغییرات ناگهانی در جریان دستورالعمل ها و منابع حافظه پراکنده شوند‪.‬‬

‫‪435‬‬
‫سیستم عامل های داخلی و اصول طراحی‪436.........................................................................................................................‬‬

‫اندازه صفحه‬ ‫تعداد فریم های صفحه اختصاص‬


‫داده شده‬
‫اندازه کل فرآیند = ‪P‬‬
‫اندازه مجموعه کار = ‪W‬‬
‫تعداد کل صفحات در حال پردازش = ‪N‬‬

‫شکل ‪ 8.10‬رفتار صفحه بندی معمولی یک برنامه‬

‫جدول ‪ 8.3‬نمونه ای از اندازه صفحه‬

‫برای اندازه معینی از ‪ ،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.11‬ترجمه آدرس در یک سیستم تقسیم بندی‬

‫صفحه بندی و تقسیم بندی ترکیبی‬

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

‫در یک سیستم صفحه بندی‪/‬بخش بندی ترکیبی‪ ،‬فضای آدرس کاربر به صالحدید برنامه نویس به تعدادی بخش تقسیم می‬
‫شود‪ .‬هر بخش به نوبه خود به تعدادی صفحه با اندازه ثابت تقسیم می شود که طول آنها برابر با یک فریم حافظه اصلی است‪ .‬اگر‬
‫طول یک بخش کمتر از طول یک صفحه باشد‪ ،‬آن بخش فقط یک صفحه را اشغال می کند‪ .‬از دیدگاه برنامه نویس‪ ،‬یک آدرس‬
‫منطقی همچنان از یک شماره بخش و یک قطعه افست تشکیل شده است‪ .‬از نقطه نظر سیستم‪ ،‬افست بخش به عنوان شماره‬
‫صفحه و افست صفحه برای یک صفحه در بخش مشخص شده مشاهده می شود‪.‬‬

‫شکل ‪ 8.12‬ساختاری را برای پشتیبانی از صفحه بندی‪/‬بخش بندی ترکیبی پیشنهاد می کند به شباهت با شکل ‪ 8.4‬توجه‬
‫کنید‪ .‬با هر فرآیند یک جدول بخش و تعدادی جداول صفحه‪ ،‬یکی در هر بخش فرآیند مرتبط است‪ .‬هنگامی که یک فرآیند‬
‫خاص در حال اجرا است‪ ،‬یک ثبات آدرس شروع جدول بخش را برای آن فرآیند نگه می دارد‪ .‬پردازنده که با یک آدرس مجازی‬
‫ارائه میشود‪ ،‬از قسمت شماره بخش برای فهرست کردن جدول بخش فرآیند برای یافتن جدول صفحه برای آن بخش استفاده‬

‫‪439‬‬
‫سیستم عامل های داخلی و اصول طراحی‪440.........................................................................................................................‬‬

‫میکند‪ .‬سپس از قسمت شماره صفحه آدرس مجازی برای نمایه سازی جدول صفحه و جستجوی شماره فریم مربوطه استفاده‬
‫می شود‪ .‬این با قسمت افست آدرس مجازی ترکیب می شود تا آدرس واقعی مورد نظر را ایجاد کند‪.‬‬

‫شکل ‪ 8.12‬ترجمه آدرس در یک سیستم تقسیم بندی‪/‬صفحه بندی‬

‫شکل ‪ c8.1‬فرمت های ورودی جدول بخش و ورود جدول صفحه را نشان می دهد‪ .‬مانند قبل‪ ،‬ورودی جدول بخش شامل طول‬
‫قطعه است‪ .‬همچنین حاوی یک زمینه پایه است که اکنون به جدول صفحه اشاره می کند‪ .‬بیت های فعلی و اصالح شده مورد‬
‫نیاز نیستند زیرا این مسائل در سطح صفحه انجام می شود‪ .‬سایر بیت های کنترل ممکن است برای اهداف اشتراک گذاری و‬
‫حفاظت استفاده شوند‪ .‬ورودی جدول صفحه اساساً همان چیزی است که در یک سیستم صفحه بندی خالص استفاده می شود‪.‬‬
‫اگر صفحه در حافظه اصلی وجود داشته باشد‪ ،‬هر شماره صفحه در یک شماره فریم مربوطه نگاشت می شود‪ .‬بیت اصالح شده‬
‫نشان میدهد که آیا این صفحه باید هنگام تخصیص فریم به صفحه دیگری بازنویسی شود یا خیر‪ .‬ممکن است بیت های کنترل‬
‫دیگری نیز وجود داشته باشد که با حفاظت یا سایر جنبه های مدیریت حافظه سروکار دارند‪.‬‬

‫حفاظت و اشتراک گذاری‬

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

‫با این حال‪ ،‬در این مورد‪ ،‬ساختار صفحه برنامهها و دادهها برای برنامهنویس قابل مشاهده نیست‪ ،‬و این باعث میشود که‬
‫مشخصات حفاظت و نیازهای اشتراکگذاری ناخوشایندتر شود‪ .‬شکل ‪ 8.13‬انواع روابط حفاظتی را نشان می دهد که می توانند‬
‫در چنین سیستمی اعمال شوند‪.‬‬

‫‪440‬‬
‫سیستم عامل های داخلی و اصول طراحی‪441.........................................................................................................................‬‬

‫مکانیسم های پیچیده تری نیز می توانند ارائه شوند‪ .‬یک طرح متداول استفاده از ساختار محافظ حلقه ای است‪ ،‬از نوعی که در‬
‫فصل ‪ 3‬به آن اشاره کردیم شکل ‪ .3.18‬در این طرح‪ ،‬حلقههای با شماره پایینتر یا داخلی از امتیاز بیشتری نسبت به حلقههای‬
‫با شمارههای باالتر یا بیرونی برخوردار هستند‪ .‬به طور معمول‪ ،‬حلقه ‪ 0‬برای توابع هسته سیستم عامل با برنامه های کاربردی در‬
‫سطح باالتر رزرو می شود‪ .‬برخی از خدمات یا خدمات سیستم عامل ممکن است یک حلقه میانی را اشغال کنند‪ .‬اصول اولیه‬
‫سیستم حلقه به شرح زیر است‪:‬‬

‫‪ .1‬یک برنامه ممکن است فقط به داده هایی دسترسی داشته باشد که در همان حلقه یا یک حلقه با امتیاز کمتر قرار دارند‪.‬‬

‫‪ .2‬یک برنامه ممکن است خدماتی را که در همان حلقه یا یک حلقه ممتازتر هستند فراخوانی کند‪.‬‬

‫‪ 8.2‬نرم افزار سیستم عامل‬

‫طراحی بخش مدیریت حافظه یک سیستم عامل به سه حوزه اساسی انتخاب بستگی دارد‪:‬‬

‫‪ -‬آیا از تکنیک های حافظه مجازی استفاده شود یا خیر‬

‫‪ -‬استفاده از صفحه بندی یا بخش بندی یا هر دو‬

‫‪ -‬الگوریتم های مورد استفاده برای جنبه های مختلف مدیریت حافظه‬

‫شکل ‪ 8.13‬روابط حفاظتی بین بخش ها‬

‫‪441‬‬
‫سیستم عامل های داخلی و اصول طراحی‪442.........................................................................................................................‬‬

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

‫دو نظر اضافی در مورد دو مورد اول در لیست قبلی‪ :‬اول‪ ،‬به استثنای سیستمعاملهای برخی از رایانههای شخصی قدیمیتر‪،‬‬
‫مانند ‪ MS-DOS‬و سیستمهای تخصصی‪ ،‬همه سیستمعاملهای مهم حافظه مجازی ارائه میدهند‪ .‬دوم‪ ،‬سیستم های تقسیم‬
‫بندی خالص به طور فزاینده ای نادر می شوند‪ .‬هنگامی که بخش بندی با صفحه بندی ترکیب می شود‪ ،‬بیشتر مسائل مدیریت‬
‫حافظه که طراح سیستم عامل با آن مواجه است در حوزه صفحه بندی است‪.‬‬

‫انتخاب های مربوط به مورد سوم حوزه نرم افزار سیستم عامل و موضوع این قسمت می باشد‪ .‬جدول ‪ 8.4‬عناصر کلیدی طراحی‬
‫را که بررسی می کنیم فهرست می کند‪ .‬در هر مورد‪ ،‬مسئله کلیدی یکی از عملکردها است‪ :‬ما می خواهیم سرعت رخ دادن‬
‫خطاهای صفحه را به حداقل برسانیم‪ ،‬زیرا خطاهای صفحه باعث سربار قابل توجه نرم افزار می شود‪ .‬حداقل‪ ،‬سربار شامل تصمیم‬
‫گیری برای جایگزینی کدام صفحه یا صفحات مقیم و ‪ I/O‬صفحات مبادله می شود‪ .‬همچنین‪ ،‬سیستم عامل باید فرآیند دیگری‬
‫را برنامه ریزی کند تا در طول صفحه ورودی‪/‬خروجی اجرا شود که باعث تغییر فرآیند می شود‪ .‬بر این اساس‪ ،‬ما می خواهیم‬
‫موارد را طوری ترتیب دهیم که در طول مدت اجرای یک فرآیند‪ ،‬احتمال ارجاع یک کلمه در صفحه گم شده به حداقل برسد‪.‬‬
‫در تمام زمینه های ذکر شده در جدول ‪ ،8.4‬هیچ خط مشی قطعی وجود ندارد که بهترین کار را داشته باشد‪.‬‬

‫جدول ‪ 8.4‬سیاست های سیستم عامل برای حافظه مجازی‬

‫واکشی خط مشی تقاضای صفحه بندی پیش‬ ‫مدیریت مجموعه مقیم‬


‫آماده سازی‬
‫اندازه مجموعه مقیم متغیر ثابت‬
‫سیاست جایگزینی سیاست گذاری‬
‫جایگزینی دامنه جهانی‬
‫الگوریتم های پایه‬
‫محلی‬
‫بهینه‬
‫سیاست نظافت تقاضای پیش پاکسازی‬
‫ساعتی که اخیرا کمتر استفاده شده است‬
‫‪ (FIFO).‬اولین در اول خروج )‪(LRU‬‬ ‫کنترل بار‬

‫بافر صفحه‬ ‫درجه چند برنامه نویسی‬

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

‫‪442‬‬
‫سیستم عامل های داخلی و اصول طراحی‪443.........................................................................................................................‬‬

‫خواننده نباید در اینجا یا هیچ کجا انتظار پاسخ نهایی را داشته باشد‪ .‬برای سیستمهای کوچکتر‪ ،‬طراح سیستمعامل باید تالش‬
‫کند مجموعهای از خطمشیها را انتخاب کند که در طیف وسیعی از شرایط «خوب» به نظر میرسند‪ ،‬بر اساس وضعیت فعلی‬
‫دانش‪ .‬برای سیستمهای بزرگتر‪ ،‬بهویژه مینفریمها‪ ،‬سیستم عامل باید مجهز به ابزارهای نظارت و کنترل باشد که به مدیر‬
‫سایت اجازه میدهد تا سیستم عامل را تنظیم کند تا نتایج «خوب» بر اساس شرایط سایت به دست آید‪.‬‬

‫سیاست واکشی‬

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

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

‫خطمشی پیشپیجنگاری میتواند زمانی که یک فرآیند برای اولین بار راهاندازی میشود به کار گرفته شود‪ ،‬در این صورت‬
‫برنامهنویس باید به نحوی صفحات مورد نظر را تعیین کند‪ ،‬یا هر بار که خطای صفحه رخ میدهد‪ .‬این دوره دوم ترجیح داده می‬
‫شود زیرا برای برنامه نویس نامرئی است‪ .‬با این حال‪ ،‬ابزار پیشپیجینگ ایجاد نشده است ‪MAEK87.‬‬

‫پیش آماده سازی نباید با تعویض اشتباه گرفته شود‪ .‬هنگامی که یک فرآیند از حافظه جابجا می شود و در حالت تعلیق قرار می‬
‫گیرد‪ ،‬تمام صفحات ساکن آن خارج می شوند‪ .‬هنگامی که فرآیند از سر گرفته می شود‪ ،‬تمام صفحاتی که قبالً در حافظه اصلی‬
‫بودند به حافظه اصلی بازگردانده می شوند‪.‬‬

‫سیاست قرار دادن‬

‫خط مشی جایگذاری تعیین می کند که یک قطعه فرآیند در کجای حافظه حقیقی قرار گیرد‪ .‬در یک سیستم تقسیم بندی‬
‫خالص‪ ،‬خط مشی قرار دادن یک موضوع طراحی مهم است‪ .‬سیاست هایی مانند بهترین تناسب‪ ،‬اولین تناسب و غیره که در فصل‬
‫‪443‬‬
‫سیستم عامل های داخلی و اصول طراحی‪444.........................................................................................................................‬‬

‫‪ 7‬مورد بحث قرار گرفت‪ ،‬جایگزین های احتمالی هستند‪ .‬با این حال‪ ،‬برای سیستمی که از صفحهبندی خالص یا صفحهبندی‬
‫همراه با تقسیمبندی استفاده میکند‪ ،‬قرار دادن معموالً بیربط است‪ ،‬زیرا سختافزار ترجمه آدرس و سختافزار دسترسی به‬
‫حافظه اصلی میتوانند وظایف خود را برای هر ترکیب صفحه‪-‬فریم با کارایی یکسان انجام دهند‪.‬‬

‫یک زمینه وجود دارد که قرار دادن در آن به یک نگرانی تبدیل می شود‪ ،‬و این موضوع تحقیق و توسعه است‪ .‬در چند پردازنده‬
‫به اصطالح دسترسی غیریکنواخت به حافظه ‪ ،NUMA‬حافظه مشترک و توزیع شده دستگاه می تواند توسط هر پردازنده روی‬
‫دستگاه ارجاع داده شود‪ ،‬اما زمان دسترسی به یک مکان فیزیکی خاص با فاصله بین پردازنده و حافظه متفاوت است‪ .‬مدول‪.‬‬
‫بنابراین‪ ،‬عملکرد به شدت به میزان قرار گرفتن داده ها در نزدیکی پردازنده هایی که از آنها استفاده می کنند بستگی دارد‬
‫‪COX89. ،BOLO89 ،LARO92‬برای سیستمهای ‪ ،NUMA‬یک استراتژی قرار دادن خودکار برای تخصیص صفحات به‬
‫ماژول حافظه که بهترین عملکرد را ارائه میکند‪ ،‬مطلوب است‪.‬‬

‫سیاست جایگزینی‬

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

‫‪ -‬باید چند فریم صفحه به هر فرآیند فعال اختصاص داده شود؟ آیا مجموعه صفحاتی که باید برای جایگزینی در نظر گرفته‬
‫شوند باید به صفحاتی که باعث خطای صفحه شده اند محدود شود یا همه فریم های صفحه در حافظه اصلی را در برگیرد‪.‬‬

‫‪ -‬در میان مجموعه صفحات در نظر گرفته شده‪ ،‬کدام صفحه خاص باید برای جایگزینی انتخاب شود‬

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

‫حوزه سیاست جایگزینی احتماالً بیشترین مطالعه در بین هر حوزه مدیریت حافظه است‪ .‬هنگامی که تمام فریم های حافظه‬
‫اصلی اشغال شده است و الزم است صفحه جدیدی وارد شود تا خطای صفحه برطرف شود‪ ،‬سیاست جایگزینی تعیین می کند‬
‫که کدام صفحه در حافظه فعلی جایگزین شود‪ .‬هدف همه سیاستها این است که صفحهای که حذف میشود باید صفحهای‬
‫باشد که در آینده نزدیک کمتر به آن ارجاع داده شود‪ .‬به دلیل اصل محلی بودن‪ ،‬اغلب همبستگی باالیی بین تاریخچه ارجاع‬
‫اخیر و الگوهای ارجاع در آینده نزدیک وجود دارد‪ .‬بنابراین‪ ،‬بیشتر سیاست ها سعی می کنند رفتار آینده را بر اساس رفتار‬
‫گذشته پیش بینی کنند‪ .‬یکی از معاوضه هایی که باید در نظر گرفته شود این است که هرچه سیاست جایگزینی پیچیده تر و‬
‫پیچیده تر باشد‪ ،‬هزینه سخت افزاری و نرم افزاری برای اجرای آن بیشتر خواهد بود‪.‬‬

‫‪444‬‬
‫سیستم عامل های داخلی و اصول طراحی‪445.........................................................................................................................‬‬

‫قفل فریم قبل از بررسی الگوریتمهای مختلف باید یک محدودیت در سیاست جایگزینی ذکر شود‪ :‬ممکن است برخی از‬
‫فریمهای حافظه اصلی قفل شده باشند‪ .‬هنگامی که یک فریم قفل است‪ ،‬ممکن است صفحه ای که در حال حاضر در آن قاب‬
‫ذخیره شده است جایگزین نشود‪ .‬بخش اعظم هسته سیستم عامل و همچنین ساختارهای کنترل کلیدی در قاب های قفل شده‬
‫نگهداری می شوند‪ .‬عالوه بر این‪ ،‬بافرهای ورودی‪/‬خروجی و سایر مناطق حساس زمانی ممکن است در فریم های حافظه اصلی‬
‫قفل شوند‪ .‬قفل کردن با مرتبط کردن یک بیت قفل با هر فریم به دست می آید‪ .‬این بیت ممکن است در یک جدول فریم و‬
‫همچنین در جدول صفحه فعلی گنجانده شود‪.‬‬

‫الگوریتمهای اساسی صرفنظر از استراتژی مدیریت مجموعه مقیم که در بخش بعدی مورد بحث قرار میگیرد‪ ،‬الگوریتمهای‬
‫اساسی خاصی وجود دارند که برای انتخاب صفحه مورد استفاده قرار میگیرند‪ .‬الگوریتم های جایگزینی که در ادبیات مورد بحث‬
‫قرار گرفته اند عبارتند از‬

‫‪ -‬بهینه‬

‫‪ -‬کمترین استفاده اخیر ‪LRU‬‬

‫‪ -‬اول به اول ‪FIFO‬‬

‫‪ -‬ساعت‬

‫خط مشی بهینه صفحه ای را برای جایگزینی انتخاب می کند که زمان رسیدن به مرجع بعدی طوالنی ترین است‪ .‬می توان‬
‫نشان داد که این سیاست منجر به کمترین تعداد خطاهای صفحه می شود ‪BELA66.‬بدیهی است که اجرای این سیاست‬
‫غیرممکن است‪ ،‬زیرا به سیستم عامل نیاز دارد که اطالعات کاملی از رویدادهای آینده داشته باشد‪ .‬با این حال‪ ،‬به عنوان یک‬
‫استاندارد برای قضاوت در مورد الگوریتم های دنیای واقعی عمل می کند‪.‬‬

‫‪445‬‬
‫سیستم عامل های داخلی و اصول طراحی‪446.........................................................................................................................‬‬

‫شکل ‪ 8.14‬رفتار الگوریتم های جایگزینی چهار صفحه‬

‫شکل ‪ 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.15‬مثالی از عملیات سیاست ساعت‬

‫تعداد فریم های اختصاص داده شده‬


‫شکل ‪ 8.16‬مقایسه الگوریتم های جایگزینی صفحه محلی با تخصیص ثابت‬

‫شکل ‪ 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 = 0‬؛ ‪m = 0‬‬

‫‪ -‬اخیراً دسترسی پیدا کرده است‪ ،‬تغییر نکرده است ‪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‬یک مجموعه ساکن ثابت مستلزم یک سیاست‬
‫جایگزینی محلی است‪ :‬برای ثابت نگه داشتن اندازه یک مجموعه مقیم‪ ،‬صفحه ای که از حافظه اصلی حذف می شود باید با‬
‫صفحه دیگری از همان فرآیند جایگزین شود‪ .‬یک خط مشی تخصیص متغیر به وضوح می تواند یک خط مشی جایگزینی جهانی‬
‫را به کار گیرد‪ :‬جایگزینی یک صفحه از یک فرآیند در حافظه اصلی با دیگری باعث می شود که تخصیص یک فرآیند یک صفحه‬
‫افزایش یابد و دیگری یک صفحه کوچک شود‪ .‬صفحه همچنین خواهیم دید که تخصیص متغیر و جایگزینی محلی یک ترکیب‬
‫معتبر است‪ .‬اکنون این سه ترکیب را بررسی می کنیم‪.‬‬

‫جدول ‪ 8.5‬مدیریت مجموعه مقیم‬

‫جایگزینی محلی‬ ‫جایگزینی جهانی‬

‫‪r‬تعداد فریم های تخصیص یافته به یک‬ ‫‪r‬امکان پذیر نیست‪.‬‬


‫فرآیند ثابت است‪.‬‬

‫‪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.........................................................................................................................‬‬

‫این مفهوم از مجموعه کاری را می توان برای راهنمایی یک استراتژی برای اندازه مجموعه مقیم استفاده کرد‪:‬‬

‫‪ .1‬بر مجموعه کاری هر فرآیند نظارت کنید‪.‬‬

‫‪ .2‬به طور دوره ای صفحاتی را که در مجموعه کاری آن نیستند از مجموعه مقیم یک فرآیند حذف کنید‪ .‬این اساساً یک سیاست‬
‫‪ LRU‬است‪.‬‬

‫‪ .3‬یک فرآیند تنها در صورتی ممکن است اجرا شود که مجموعه کاری آن در حافظه اصلی باشد به عنوان مثال‪ ،‬اگر مجموعه‬
‫مقیم آن شامل مجموعه کاری آن باشد‪.‬‬

‫شکل ‪ 8.18‬نمودار معمولی اندازه مجموعه کاری ‪MAEK87‬‬

‫این استراتژی جذاب است زیرا از یک اصل پذیرفته شده استفاده می کند‪ ،‬اصل محلی بودن‪ ،‬و از آن برای دستیابی به یک‬
‫استراتژی مدیریت حافظه استفاده می کند که باید خطاهای صفحه را به حداقل برساند‪ .‬متأسفانه‪ ،‬تعدادی از مشکالت در راهبرد‬
‫مجموعه کاری وجود دارد‪:‬‬

‫‪ .1‬گذشته همیشه آینده را پیش بینی نمی کند‪ .‬هم اندازه و هم عضویت مجموعه کاری در طول زمان تغییر خواهد کرد به‬
‫عنوان مثال‪ ،‬شکل ‪ 8.18‬را ببینید‪.‬‬

‫‪ .2‬اندازه گیری واقعی مجموعه کاری برای هر فرآیند غیرعملی است‪ .‬الزم است هر مرجع صفحه را برای هر فرآیند با استفاده از‬
‫زمان مجازی آن فرآیند‪ ،‬مهر زمانی تعیین کنید و سپس برای هر فرآیند‪ ،‬صفی از صفحات به ترتیب زمان نگه دارید‪.‬‬

‫‪ .3‬مقدار بهینه ‪ Δ‬ناشناخته است و در هر صورت متغیر است‪.‬‬

‫با این وجود‪ ،‬روح این استراتژی معتبر است و تعدادی از سیستم های عامل تالش می کنند تا یک استراتژی مجموعه کاری را‬
‫تقریب بزنند‪ .‬یکی از راههای انجام این کار این است که روی ارجاعات دقیق صفحه تمرکز نکنید‪ ،‬بلکه روی نرخ خطای صفحه‬

‫‪458‬‬
‫سیستم عامل های داخلی و اصول طراحی‪459.........................................................................................................................‬‬

‫یک فرآیند تمرکز کنید‪ .‬همانطور که شکل ‪ b8.10‬نشان می دهد‪ ،‬با افزایش اندازه مجموعه مقیم یک فرآیند‪ ،‬نرخ خطای صفحه‬
‫کاهش می یابد‪ .‬اندازه مجموعه کاری باید در نقطهای از این منحنی باشد که با ‪ W‬در شکل نشان داده شده است‪ .‬بنابراین‪ ،‬به‬
‫جای نظارت مستقیم بر اندازه مجموعه کاری‪ ،‬میتوانیم با نظارت بر نرخ خطای صفحه به نتایج مشابهی دست یابیم‪ .‬خط‬
‫استدالل به شرح زیر است‪:‬‬

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

‫الگوریتمی که از این استراتژی پیروی می کند‪ ،‬الگوریتم فرکانس خطای صفحه ‪ GUPT78 ،PFF CHU72‬است‪ .‬به یک بیت‬
‫استفاده نیاز دارد که با هر صفحه در حافظه مرتبط شود‪ .‬وقتی به آن صفحه دسترسی پیدا کرد بیت روی ‪ 1‬تنظیم می شود‪.‬‬
‫هنگامی که یک خطای صفحه رخ می دهد‪ ،‬سیستم عامل زمان مجازی را از آخرین خطای صفحه برای آن فرآیند یادداشت می‬
‫کند‪ .‬این را می توان با نگهداری شمارنده از مراجع صفحه انجام داد‪ .‬یک آستانه ‪ F‬تعریف شده است‪ .‬اگر مقدار زمان از آخرین‬
‫خطای صفحه کمتر از ‪ F‬باشد‪ ،‬یک صفحه به مجموعه ساکن فرآیند اضافه می شود‪ .‬در غیر این صورت‪ ،‬تمام صفحات با بیت‬
‫استفاده ‪ 0‬را دور بیندازید و مجموعه ساکن را بر این اساس کوچک کنید‪ .‬در همان زمان‪ ،‬بیت استفاده را در صفحات باقیمانده‬
‫فرآیند به ‪ 0‬بازنشانی کنید‪ .‬استراتژی را میتوان با استفاده از دو آستانه اصالح کرد‪ :‬یک آستانه باال که برای ایجاد رشد در اندازه‬
‫مجموعه مقیم استفاده میشود‪ ،‬و یک آستانه پایینتر که برای ایجاد انقباض در اندازه مجموعه مقیم استفاده می شود‪.‬‬

‫زمان بین خطاهای صفحه‪ ،‬متقابل نرخ خطای صفحه است‪ .‬اگرچه به نظر می رسد بهتر است میانگین جاری نرخ خطای صفحه‬
‫حفظ شود‪ ،‬استفاده از یک اندازه گیری زمانی یک سازش منطقی است که اجازه می دهد تصمیمات در مورد اندازه مجموعه‬
‫مقیم براساس نرخ خطای صفحه باشد‪ .‬اگر چنین استراتژی با بافر صفحه تکمیل شود‪ ،‬عملکرد حاصل باید کامالً خوب باشد‪.‬‬

‫با این وجود‪ ،‬یک نقص عمده در رویکرد ‪ PFF‬وجود دارد‪ ،‬و آن این است که در طول دورههای گذرا که جابجایی به یک محل‬
‫جدید وجود دارد‪ ،‬عملکرد خوبی ندارد‪ .‬با ‪ ،PFF‬هیچ صفحهای از مجموعه مقیم خارج نمیشود قبل از اینکه واحدهای زمان‬
‫مجازی ‪ F‬از آخرین باری که به آن ارجاع شده است سپری شود‪ .‬در طول انتقال بین محلی‪ ،‬پیاپی سریع خطاهای صفحه باعث‬
‫می شود که مجموعه ساکن یک فرآیند قبل از بیرون راندن صفحات محلی قدیمی متورم شود‪ .‬پیکهای ناگهانی تقاضای حافظه‬
‫ممکن است باعث غیرفعالسازی و فعالسازی مجدد فرآیند غیرضروری‪ ،‬با سوئیچینگ و تعویض سربار نامطلوب مربوطه شود‪.‬‬

‫‪459‬‬
‫سیستم عامل های داخلی و اصول طراحی‪460.........................................................................................................................‬‬

‫رویکردی که تالش میکند با پدیده انتقال بینمحلی با سربار نسبتاً کم مشابه با ‪ PFF‬مقابله کند‪ ،‬خطمشی مجموعه کاری‬
‫نمونهبرداری شده با فاصله متغیر ‪ VSWS FERR83‬است‪ .‬خط مشی ‪ VSWS‬مجموعه کاری یک فرآیند را در نمونه های‬
‫نمونه بر اساس زمان مجازی سپری شده ارزیابی می کند‪.‬‬

‫در ابتدای یک بازه نمونهبرداری‪ ،‬بیتهای استفاده از تمام صفحات ساکن برای فرآیند بازنشانی میشوند‪ .‬در پایان‪ ،‬فقط صفحاتی‬
‫که در طول بازه به آنها ارجاع داده شده اند‪ ،‬بیت استفاده خود را دارند‪ .‬این صفحات در طول بازه بعدی در مجموعه مقیم فرآیند‬
‫حفظ می شوند‪ ،‬در حالی که بقیه دور انداخته می شوند‪ .‬بنابراین اندازه مجموعه مقیم فقط می تواند در پایان یک بازه کاهش‬
‫یابد‪ .‬در طول هر بازه‪ ،‬هر صفحه خطا به مجموعه ساکن اضافه می شود‪ .‬بنابراین مجموعه ساکن ثابت می ماند یا در طول بازه‬
‫رشد می کند‪ .‬خط مشی ‪ VSWS‬توسط سه پارامتر هدایت می شود‪:‬‬

‫‪M:‬حداقل مدت زمان نمونه برداری‬

‫‪L:‬حداکثر مدت زمان نمونه برداری‬

‫س‪ :‬تعداد خطاهای صفحه ای که مجاز است بین نمونه های نمونه گیری رخ دهد‪ ،‬خط مشی ‪ VSWS‬به شرح زیر است‪:‬‬

‫‪ .1‬اگر زمان مجازی از آخرین نمونه نمونه برداری به ‪ L‬رسید‪ ،‬فرآیند را به حالت تعلیق درآورید و بیت های استفاده را اسکن‬
‫کنید‪.‬‬

‫‪ .2‬اگر قبل از سپری شدن زمان مجازی ‪ ،L‬خطاهای صفحه ‪ Q‬رخ دهد‪،‬‬

‫آ‪ .‬اگر زمان مجازی از آخرین نمونه نمونه برداری کمتر از ‪ M‬باشد‪ ،‬منتظر بمانید تا زمان مجازی سپری شده به ‪ 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‬‬
‫نگه دارد‪ .‬باز هم‪ ،‬مطالعات عملکرد نشان می دهد که این نقطه حداکثر استفاده از پردازنده است‪.‬‬

‫شکل ‪ 8.19‬جلوه های چندبرنامه ریزی‬

‫روش دیگر تطبیق الگوریتم جایگزینی صفحه ساعت است که قبال توضیح داده شد شکل ‪CARR81 .8.15‬تکنیکی را با‬
‫استفاده از یک دامنه جهانی توصیف میکند که شامل نظارت بر سرعتی است که نشانگر بافر دایرهای فریمها را اسکن میکند‪.‬‬
‫اگر نرخ کمتر از یک آستانه پایین معین باشد‪ ،‬این یک یا هر دو مورد از دو حالت را نشان می دهد‪:‬‬

‫‪ .1‬تعداد کمی خطا در صفحه رخ می دهد که منجر به درخواست های کمی برای پیشبرد اشاره گر می شود‪.‬‬

‫‪ .2‬برای هر درخواست‪ ،‬میانگین تعداد فریم های اسکن شده توسط نشانگر کم است‪ ،‬که نشان می دهد بسیاری از صفحات ساکن‬
‫وجود دارند که به آنها ارجاع داده نمی شود و به راحتی قابل تعویض هستند‪.‬‬

‫‪462‬‬
‫سیستم عامل های داخلی و اصول طراحی‪463.........................................................................................................................‬‬

‫در هر دو مورد‪ ،‬سطح چندبرنامهنویسی را میتوان با خیال راحت افزایش داد‪ .‬از طرف دیگر‪ ،‬اگر نرخ اسکن اشاره گر از آستانه‬
‫باالیی فراتر رود‪ ،‬این نشان دهنده نرخ خطا یا مشکل در مکان یابی صفحات قابل تعویض است‪ ،‬که نشان می دهد سطح‬
‫چندبرنامه ریزی بسیار باال است‪.‬‬

‫تعلیق فرآیند اگر قرار است درجه چندبرنامهنویسی کاهش یابد‪ ،‬یک یا چند مورد از فرآیندهای ساکن فعلی باید به حالت تعلیق‬
‫درآیند‪CARR81 .‬شش احتمال را فهرست می کند‪:‬‬

‫‪ -‬فرآیند با کمترین اولویت‪ :‬این یک تصمیم سیاست زمانبندی را اجرا میکند و به مسائل عملکرد مرتبط نیست‪.‬‬

‫‪ -‬فرآیند خطا‪ :‬استدالل این است که احتمال بیشتری وجود دارد که کار خطای مجموعه کاری خود را ثابت نداشته باشد و‬
‫عملکرد با تعلیق آن کمترین آسیب را ببیند‪ .‬عالوه بر این‪ ،‬این انتخاب بازدهی فوری دارد زیرا فرآیندی را که به هر حال در‬
‫شرف مسدود شدن است مسدود میکند و هزینههای سربار جایگزینی صفحه و عملیات ‪ I/O‬را حذف میکند‪.‬‬

‫‪ -‬آخرین فرآیند فعال شده‪ :‬این فرآیندی است که کمترین احتمال را دارد که مجموعه کاری آن ساکن باشد‪.‬‬

‫‪ -‬فرآیند با کوچکترین مجموعه ساکن‪ :‬این کار به کمترین تالش آینده برای بارگیری مجدد نیاز دارد‪ .‬با این حال‪ ،‬برنامه هایی با‬
‫محلی قوی را جریمه می کند‪.‬‬

‫‪ -‬بزرگترین فرآیند‪ :‬این بیشترین فریم های رایگان را در یک حافظه بیش از حد متعهد به دست می آورد و غیرفعال کردن‬
‫اضافی را به زودی بعید می کند‪.‬‬

‫‪ -‬فرآیند با بزرگترین پنجره اجرای باقیمانده‪ :‬در اکثر طرحهای زمانبندی فرآیند‪ ،‬یک فرآیند ممکن است قبل از قطع شدن و‬
‫قرار گرفتن در انتهای صف آماده‪ ،‬فقط برای مدت زمان مشخصی اجرا شود‪ .‬این تقریباً یک رشته زمانبندی کوتاهترین زمان‬
‫پردازش و اول است‪.‬‬

‫مانند بسیاری دیگر از حوزههای طراحی سیستمعامل‪ ،‬انتخاب خطمشی یک موضوع قضاوتی است و به بسیاری دیگر از عوامل‬
‫طراحی در سیستمعامل و همچنین ویژگیهای برنامههای در حال اجرا بستگی دارد‪.‬‬

‫‪ 8.3‬مدیریت حافظه یونیکس و سوالریس‬

‫از آنجایی که یونیکس قرار است مستقل از ماشین باشد‪ ،‬طرح مدیریت حافظه آن از یک سیستم به سیستم دیگر متفاوت خواهد‬
‫بود‪ .‬نسخه های قبلی یونیکس به سادگی از پارتیشن بندی متغیر بدون طرح حافظه مجازی استفاده می کردند‪ .‬پیاده سازی های‬
‫فعلی یونیکس و سوالریس از حافظه مجازی صفحه شده استفاده می کنند‪.‬‬

‫‪463‬‬
‫سیستم عامل های داخلی و اصول طراحی‪464.........................................................................................................................‬‬

‫در ‪ SVR4‬و ‪ ،Solaris‬در واقع دو طرح مدیریت حافظه مجزا وجود دارد‪ .‬سیستم صفحه بندی قابلیت حافظه مجازی را فراهم‬
‫می کند که فریم های صفحه را در حافظه اصلی به پردازش ها اختصاص می دهد و همچنین فریم های صفحه را به بافرهای‬
‫بلوک دیسک اختصاص می دهد‪.‬‬

‫اگرچه این یک طرح مدیریت حافظه موثر برای فرآیندهای کاربر و ورودی‪/‬خروجی دیسک است‪ ،‬اما یک طرح حافظه مجازی‬
‫صفحهدار برای مدیریت تخصیص حافظه برای هسته مناسب نیست‪ .‬برای این منظور اخیر‪ ،‬از یک تخصیص دهنده حافظه هسته‬
‫استفاده می شود‪ .‬ما به نوبه خود این دو مکانیسم را بررسی می کنیم‪.‬‬

‫سیستم پیجینگ‬

‫ساختارهای داده برای حافظه مجازی صفحه شده‪ ،‬یونیکس از تعدادی ساختار داده استفاده می کند که با تنظیمات جزئی‪،‬‬
‫مستقل از ماشین هستند شکل ‪ 8.20‬و جدول ‪:8.6‬‬

‫‪ -‬جدول صفحه‪ :‬به طور معمول‪ ،‬یک جدول صفحه در هر فرآیند وجود دارد‪ ،‬با یک ورودی برای هر صفحه در حافظه مجازی‬
‫برای آن فرآیند‪.‬‬

‫‪ -‬توصیفگر بلوک دیسک‪ :‬مرتبط با هر صفحه از یک فرآیند‪ ،‬ورودی در این جدول است که کپی دیسک صفحه مجازی را توصیف‬
‫می کند‪.‬‬

‫‪ -‬جدول داده قاب صفحه‪ :‬هر فریم از حافظه حقیقی را توصیف می کند و با شماره فریم نمایه می شود‪ .‬این جدول توسط‬
‫الگوریتم جایگزینی استفاده می شود‪.‬‬

‫‪ -‬جدول استفاده تعویض‪ :‬برای هر دستگاه تعویض یک جدول استفاده تعویض وجود دارد که برای هر صفحه روی دستگاه یک‬
‫ورودی وجود دارد‪.‬‬

‫‪464‬‬
‫سیستم عامل های داخلی و اصول طراحی‪465.........................................................................................................................‬‬

‫(الف) ورودی جدول صفحه‬

‫(ب) توصیفگر بلوک دیسک‬

‫(ج) ورودی جدول داده قاب صفحه‬

‫(د) ورودی جدول استفاده از مبادله‬


‫شکل ‪ 8.20‬فرمت های مدیریت حافظه یونیکس ‪SVR4‬‬

‫بسیاری از زمینه های تعریف شده در جدول ‪ 8.6‬خود توضیحی هستند‪ .‬چند مورد نظر بیشتر را تضمین می کند‪ .‬زمینه ‪Age‬‬
‫در ورودی جدول صفحه نشان دهنده مدت زمانی است که یک برنامه به این فریم ارجاع داده است‪ .‬با این حال‪ ،‬تعداد بیت ها و‬
‫دفعات به روز رسانی این زمینه به پیاده سازی بستگی دارد‪ .‬بنابراین‪ ،‬هیچ استفاده جهانی یونیکس از این زمینه برای سیاست‬
‫جایگزینی صفحه وجود ندارد‪.‬‬

‫زمینه ‪ Type of Storage‬در توصیفگر بلوک دیسک به دالیل زیر مورد نیاز است‪ :‬هنگامی که یک فایل اجرایی برای اولین بار‬
‫برای ایجاد یک فرآیند جدید استفاده می شود‪ ،‬تنها بخشی از برنامه و داده های آن فایل ممکن است در حافظه حقیقی‬
‫بارگذاری شود‪ .‬بعداً با رخ دادن خطاهای صفحه‪ ،‬بخشهای جدیدی از برنامه و دادهها بارگذاری میشوند‪.‬‬

‫تنها در زمان بارگیری اول است که صفحات حافظه مجازی ایجاد میشوند و به مکانهایی در یکی از دستگاهها اختصاص‬
‫مییابند تا برای تعویض استفاده شوند‪ .‬در آن زمان‪ ،‬به سیستمعامل گفته میشود که آیا باید قبل از اولین بارگیری یک بلوک از‬
‫برنامه یا داده‪ ،‬مکانهای قاب صفحه را پاک کند بر روی ‪ 0‬تنظیم کنید‪.‬‬

‫‪ PAGE REPLACEMENT‬جدول داده قاب صفحه برای جایگزینی صفحه استفاده می شود‪ .‬چندین اشاره گر برای ایجاد‬
‫لیست در این جدول استفاده می شود‪ .‬همه فریمهای موجود در فهرستی از فریمهای رایگان موجود برای وارد کردن صفحات به‬
‫یکدیگر پیوند داده شدهاند‪ .‬هنگامی که تعداد فریم های موجود به زیر یک آستانه خاص کاهش می یابد‪ ،‬هسته برای جبران‪،‬‬
‫تعدادی فریم را می دزدد‪.‬‬

‫‪465‬‬
‫سیستم عامل های داخلی و اصول طراحی‪466.........................................................................................................................‬‬

‫الگوریتم جایگزینی صفحه مورد استفاده در ‪ SVR4‬اصالحی از الگوریتم خط مشی ساعت شکل ‪ 8.15‬است که به الگوریتم‬
‫ساعت دو دستی معروف است شکل ‪ .8.21‬الگوریتم از بیت مرجع در ورودی جدول صفحه برای هر صفحه در حافظه استفاده می‬
‫کند که واجد شرایط قفل نشده برای تعویض است‪ .‬هنگامی که صفحه برای اولین بار وارد می شود‪ ،‬این بیت روی ‪ 0‬تنظیم می‬
‫شود و زمانی که صفحه برای خواندن یا نوشتن ارجاع داده می شود‪ ،‬روی ‪ 1‬تنظیم می شود‪ .‬یک عقربه در الگوریتم ساعت‪،‬‬
‫جلودست‪ ،‬صفحات موجود در لیست صفحات واجد شرایط را مرور می کند و بیت مرجع را در هر صفحه روی ‪ 0‬تنظیم می کند‪.‬‬
‫مدتی بعد‪ ،‬پشتیبان همان لیست را مرور می کند و بیت مرجع را بررسی می کند‪ .‬اگر بیت روی ‪ 1‬تنظیم شده باشد‪ ،‬آن صفحه‬
‫از زمانی که صفحه جلویی جاروب شده است‪ ،‬ارجاع داده شده است‪ .‬این فریم ها نادیده گرفته می شوند‪ .‬اگر بیت همچنان روی‬
‫‪ 0‬تنظیم شود‪ ،‬در این صورت صفحه در فاصله زمانی بین بازدید از طریق جلو و بک هند ارجاع داده نشده است‪ .‬این صفحات در‬
‫لیستی قرار می گیرند تا صفحه بندی شوند‪.‬‬

‫لیست انتهای‬ ‫شروع لیست‬


‫صفحه‬ ‫صفحات‬

‫شکل ‪ 8.21‬الگوریتم جایگزینی صفحه ساعت دو دست‬

‫دو پارامتر عملکرد الگوریتم را تعیین می کنند‪:‬‬

‫‪Scanrate: -‬سرعتی که دو دست در فهرست صفحات‪ ،‬بر حسب صفحات در ثانیه اسکن می کنند‬

‫‪ Handspread: -‬فاصله بین جلو و بک هند این دو پارامتر دارای مقادیر پیش فرض هستند که در زمان بوت بر اساس مقدار‬
‫حافظه فیزیکی تنظیم شده اند‪ .‬پارامتر ‪ scanrate‬را می توان برای برآورده کردن شرایط در حال تغییر تغییر داد‪ .‬پارامتر به‬
‫صورت خطی بین مقادیر ‪ slowscan‬و ‪fastscan‬تنظیم شده در زمان پیکربندی متفاوت است زیرا مقدار حافظه آزاد بین‬
‫مقادیر ‪ lotsfree‬و ‪ minfree‬متفاوت است‪.‬‬

‫‪466‬‬
‫سیستم عامل های داخلی و اصول طراحی‪467.........................................................................................................................‬‬

‫به عبارت دیگر‪ ،‬با کاهش مقدار حافظه آزاد‪ ،‬عقربه های ساعت با سرعت بیشتری حرکت می کنند تا صفحات بیشتری آزاد شوند‪.‬‬
‫پارامتر ‪ handspread‬شکاف بین جلو و بک هند را تعیین می کند و بنابراین‪ ،‬همراه با ‪ ،scanrate‬پنجره فرصت استفاده از‬
‫یک صفحه را قبل از تعویض آن به دلیل عدم استفاده مشخص می کند‪.‬‬

‫تخصیص دهنده حافظه هسته‬

‫کرنل جداول کوچک و بافرها را به طور مکرر در طول اجرا تولید و از بین می برد که هر کدام به تخصیص حافظه پویا نیاز دارند‪.‬‬
‫‪VAHA96‬نمونههای زیر را فهرست میکند‪:‬‬

‫‪ -‬مسیریابی ترجمه نام مسیر ممکن است یک بافر برای کپی نام مسیر از فضای کاربر اختصاص دهد‪.‬‬

‫‪ -‬روال ‪allocb‬بافرهای ‪ STREAMS‬را با اندازه دلخواه تخصیص می دهد‪.‬‬

‫‪ -‬بسیاری از پیاده سازی های یونیکس ساختارهای زامبی را برای حفظ وضعیت خروج و اطالعات استفاده از منابع در مورد‬
‫فرآیندهای مرده اختصاص می دهند‪.‬‬

‫‪ -‬در ‪ SVR4‬و ‪ ،Solaris‬هسته بسیاری از اشیاء مانند ساختارهای ‪ ،vnodes ،proc‬و بلوکهای توصیفگر فایل را به صورت‬
‫پویا در صورت نیاز اختصاص میدهد‪.‬‬

‫اکثر این بلوک ها به طور قابل توجهی کوچکتر از اندازه صفحه ماشین معمولی هستند و بنابراین مکانیسم صفحه بندی برای‬
‫تخصیص حافظه هسته پویا ناکارآمد است‪ .‬برای ‪ ،SVR4‬از اصالح سیستم ‪ ،Buddy‬که در بخش ‪ 7.2‬توضیح داده شده است‪،‬‬
‫استفاده می شود‪.‬‬

‫در سیستم های ‪ ،Buddy‬هزینه تخصیص و آزادسازی یک بلوک حافظه در مقایسه با سیاست های بهترین تناسب یا اولین‬
‫تناسب ‪KNUT97‬پایین است‪ .‬با این حال‪ ،‬در مورد مدیریت حافظه هسته‪ ،‬عملیات تخصیص و آزاد باید با بیشترین سرعت‬
‫ممکن انجام شود‪ .‬اشکال سیستم ‪ Buddy‬زمان مورد نیاز برای تکه تکه شدن و ادغام بلوک ها است‪.‬‬

‫بارکلی و لی در ‪ AT&T‬یک تغییر به نام سیستم ‪ Buddy‬تنبل ‪BARK89‬را پیشنهاد کردند‪ ،‬و این تکنیکی است که برای‬
‫‪ SVR4‬به کار گرفته شده است‪ .‬نویسندگان مشاهده کردند که یونیکس اغلب رفتار حالت پایدار را در تقاضای حافظه هسته‬
‫نشان می دهد‪ .‬یعنی میزان تقاضا برای بلوکهای یک اندازه خاص در زمان به کندی تغییر میکند‪ .‬بنابراین‪ ،‬اگر یک بلوک با‬
‫اندازه ‪ i2‬آزاد شود و بالفاصله با ‪ Buddy‬خود در یک بلوک ادغام شود ‪ .‬با اندازه ‪ ،i + 12‬هسته ممکن است بعداً یک بلوک با‬
‫اندازه ‪ i2‬درخواست کند‪ ،‬که ممکن است نیاز به تقسیم مجدد بلوک بزرگتر داشته باشد‪ .‬برای جلوگیری از این ادغام و تقسیم‬
‫غیر ضروری‪،‬‬

‫‪467‬‬
‫سیستم عامل های داخلی و اصول طراحی‪468.........................................................................................................................‬‬

‫سیستم رفیق تنبل ادغام شدن را تا زمانی که احتمال نیاز به نظر برسد به تعویق می اندازد و سپس تا آنجا که ممکن است بلوک‬
‫ها را با هم ترکیب می کند‪.‬‬

‫سیستم تنبل ‪ Buddy‬از پارامترهای زیر استفاده می کند‪:‬‬

‫‪ Ni‬تعداد بلوک های فعلی اندازه ‪i.2‬‬

‫‪ Ai‬تعداد بلوکهای فعلی با اندازه ‪ i2‬که تخصیص داده شدهاند اشغال شدهاند‪.‬‬

‫تعداد بلوکهای فعلی با اندازه ‪ i2‬که در سطح جهانی رایگان هستند را مشخص کنید‪ .‬اینها بلوک هایی هستند که واجد شرایط‬
‫ادغام هستند‪ .‬اگر ‪ Buddy‬چنین بلوکی در سطح جهانی آزاد شود‪ ،‬آنگاه دو بلوک در یک بلوک آزاد جهانی به اندازه ‪i + 12‬‬
‫ادغام میشوند‪ .‬همه بلوکهای آزاد حفرهها در سیستم ‪ Buddy‬استاندارد میتوانند در سطح جهانی آزاد در نظر گرفته شوند‪.‬‬

‫تعداد فعلی بلوکهای با اندازه ‪ i2‬که به صورت محلی رایگان هستند‪ .‬اینها بلوک هایی هستند که واجد شرایط ادغام نیستند‪.‬‬
‫حتی اگر ‪ Buddy‬چنین بلوکی آزاد شود‪ ،‬این دو بلوک با هم ادغام نمی شوند‪ .‬در عوض‪ ،‬بلوکهای آزاد محلی با پیشبینی‬
‫تقاضای آینده برای بلوکی با آن اندازه حفظ میشوند‪ .‬رابطه زیر برقرار است‪:‬‬

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

‫اغلب اوقات‪ ،‬زمانی که یک بلوک آزاد می شود‪ ،‬ادغام اتفاق نمی افتد‪ ،‬بنابراین حداقل هزینه های حسابداری و عملیاتی وجود‬
‫دارد‪ .‬هنگامی که یک بلوک قرار است تخصیص داده شود‪ ،‬هیچ تمایزی بین بلوک های رایگان محلی و جهانی ایجاد نمی شود‪.‬‬
‫دوباره‪ ،‬این امر حسابداری را به حداقل می رساند‪ .‬معیاری که برای ادغام استفاده می شود این است که تعداد بلوک های آزاد‬
‫محلی با اندازه معین نباید از تعداد بلوک های اختصاص داده شده در آن اندازه تجاوز کند یعنی باید ‪ Li Ai‬داشته باشیم‪ .‬این‬
‫یک دستورالعمل منطقی برای محدود کردن رشد بلوکهای آزاد محلی است‪ ،‬و آزمایشها در ‪BARK89‬تأیید میکنند که این‬
‫طرح منجر به صرفهجویی قابلتوجهی میشود‪ ..‬برای پیاده سازی این طرح‪ ،‬نویسندگان یک متغیر تاخیر را به صورت زیر تعریف‬
‫می کنند‪:‬‬

‫‪468‬‬
‫سیستم عامل های داخلی و اصول طراحی‪469.........................................................................................................................‬‬

‫شکل ‪ 8.22‬الگوریتم را نشان می دهد‪.‬‬

‫شکل ‪ 8.22‬الگوریتم سیستم ‪ Buddy‬تنبل‬

‫‪ 8.4‬مدیریت حافظه لینوکس‬

‫لینوکس بسیاری از ویژگی های طرح های مدیریت حافظه سایر پیاده سازی های یونیکس را به اشتراک می گذارد‪ ،‬اما ویژگی‬
‫های منحصر به فرد خود را دارد‪ .‬به طور کلی‪ ،‬طرح مدیریت حافظه لینوکس بسیار پیچیده است ‪DUBE98.‬در این بخش‪،‬‬
‫مروری کوتاه بر دو جنبه اصلی مدیریت حافظه لینوکس ارائه می کنیم‪ :‬حافظه مجازی پردازش و تخصیص حافظه هسته‪.‬‬

‫حافظه مجازی لینوکس‬

‫آدرس دهی حافظه مجازی لینوکس از ساختار جدول صفحه سه سطحی استفاده می کند که از انواع جداول زیر تشکیل شده‬
‫است هر جدول به اندازه یک صفحه است‪:‬‬

‫‪ -‬دایرکتوری صفحه‪ :‬یک فرآیند فعال دارای یک دایرکتوری صفحه است که به اندازه یک صفحه است‪ .‬هر ورودی در دایرکتوری‬
‫صفحه به یک صفحه از دایرکتوری میانی صفحه اشاره می کند‪ .‬دایرکتوری صفحه باید در حافظه اصلی برای یک فرآیند فعال‬
‫باشد‪.‬‬

‫‪469‬‬
‫سیستم عامل های داخلی و اصول طراحی‪470.........................................................................................................................‬‬

‫شکل ‪ 8.23‬ترجمه آدرس در طرح حافظه مجازی لینوکس‬

‫‪ -‬دایرکتوری میانی صفحه‪ :‬دایرکتوری میانی صفحه ممکن است چندین صفحه را شامل شود‪ .‬هر ورودی در فهرست میانی‬
‫صفحه به یک صفحه در جدول صفحه اشاره می کند‪.‬‬

‫‪ -‬جدول صفحه‪ :‬جدول صفحه همچنین ممکن است چندین صفحه را شامل شود‪ .‬هر ورودی جدول صفحه به یک صفحه مجازی‬
‫از فرآیند اشاره دارد‪.‬‬

‫برای استفاده از این ساختار جدول صفحه سه سطحی‪ ،‬یک آدرس مجازی در لینوکس به صورت متشکل از چهار زمینه مشاهده‬
‫می شود شکل ‪ .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‬دفعه بعد که به آن صفحه دسترسی پیدا کرد‪ ،‬به لیست فعال منتقل می شود‪ .‬یعنی برای اینکه یک صفحه فعال اعالم شود دو‬
‫دسترسی الزم است‪ .‬به طور دقیق تر‪ ،‬برای فعال شدن یک صفحه‪ ،‬دو دسترسی در اسکن های مختلف الزم است‪.‬‬

‫‪ .3‬اگر دسترسی دوم به زودی اتفاق نیفتد‪ PG_referenced ،‬بازنشانی میشود‪.‬‬


‫‪471‬‬
‫سیستم عامل های داخلی و اصول طراحی‪472.........................................................................................................................‬‬

‫‪ .4‬به همین ترتیب‪ ،‬برای صفحات فعال‪ ،‬دو تایم اوت برای انتقال صفحه به لیست غیرفعال مورد نیاز است‪.‬‬

‫سپس صفحات موجود در لیست غیرفعال برای جایگزینی صفحه با استفاده از یک نوع الگوریتم ‪ LRU‬در دسترس هستند‪.‬‬

‫تخصیص حافظه هسته‬

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

‫اساس تخصیص حافظه هسته برای لینوکس مکانیسم تخصیص صفحه است که برای مدیریت حافظه مجازی کاربر استفاده می‬
‫شود‪ .‬همانطور که در طرح حافظه مجازی‪ ،‬یک الگوریتم ‪ Buddy‬استفاده می شود تا حافظه برای هسته را بتوان در واحدهای‬
‫یک یا چند صفحه تخصیص داد و تخصیص داد‪.‬‬

‫از آنجایی که حداقل مقدار حافظه ای که می توان به این روش اختصاص داد یک صفحه است‪ ،‬تخصیص دهنده صفحه به تنهایی‬
‫ناکارآمد خواهد بود زیرا هسته به تکه های کوچک حافظه کوتاه مدت در اندازه های فرد نیاز دارد‪ .‬برای جا دادن این تکه های‬
‫کوچک‪ ،‬لینوکس از طرحی به نام تخصیص اسلب ‪BONW94‬در یک صفحه اختصاص داده شده استفاده می کند‪ .‬در دستگاه‬
‫‪ ،Pentium/x86‬اندازه صفحه ‪ 4‬کیلوبایت است و تکه های داخل صفحه ممکن است در اندازه های ‪،508 ،252 ،128 ،64 ،32‬‬
‫‪ 2040‬و ‪ 4080‬بایت تخصیص داده شوند‪.‬‬

‫تخصیص دهنده دال نسبتاً پیچیده است و در اینجا به تفصیل بررسی نشده است‪ .‬یک توصیف خوب را می توان در‬
‫‪VAHA96‬یافت‪ .‬در اصل‪ ،‬لینوکس مجموعهای از لیستهای پیوندی را نگه میدارد‪ ،‬یکی برای هر اندازه تکه‪ .‬تکه ها ممکن‬
‫است به روشی مشابه الگوریتم ‪ Buddy‬تقسیم و جمع شوند و بر این اساس بین لیست ها جابجا شوند‪.‬‬

‫‪472‬‬
‫سیستم عامل های داخلی و اصول طراحی‪473.........................................................................................................................‬‬

‫شکل ‪ 8.24‬بازیابی صفحه لینوکس‬

‫‪ 8.5‬مدیریت حافظه ویندوز‬

‫مدیر حافظه مجازی ویندوز نحوه تخصیص حافظه و نحوه انجام صفحه بندی را کنترل می کند‪ .‬مدیر حافظه برای کار بر روی‬
‫پلتفرم های مختلف و استفاده از اندازه های صفحه از ‪ 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‬کیلوبایتی برای‬


‫تخصیص نشانگر ‪NULL‬‬
‫غیرقابل دسترسی‬

‫فضای آدرس کاربر ‪2‬‬


‫گیگابایت (غیررزرو‪،‬‬
‫قابل استفاده)‬

‫منطقه ‪ 64‬کیلوبایتی‬
‫برای تخصیص نشانگر‬
‫بد (غیرقابل دسترسی)‬

‫منطقه ‪ 2‬گیگابایتی برای‬


‫سیستم عامل (غیرقابل‬
‫دسترسی)‬

‫شکل ‪ 8.25‬فضای آدرس مجازی ‪ 32‬بیتی پیش فرض ویندوز‬

‫‪ r 0x80000000‬تا ‪xFFFFFFFF: 0‬فضای آدرس سیستم‪ .‬این فرآیند ‪ 2‬گیگابایتی برای درایورهای اجرایی ویندوز‪ ،‬کرنل‪،‬‬
‫‪ HAL‬و دستگاه استفاده می شود‪.‬‬

‫در سیستم عامل های ‪ 64‬بیتی‪ 8 ،‬ترابایت فضای آدرس کاربر در ویندوز ‪ 7‬موجود است‪.‬‬

‫صفحه بندی ویندوز‬

‫هنگامی که یک فرآیند ایجاد می شود‪ ،‬در اصل می تواند از کل فضای کاربر تقریباً ‪ 2‬گیگابایت یا ‪ 8‬ترابایت در ویندوز ‪ 64‬بیتی‬
‫استفاده کند‪ .‬این فضا به صفحات با اندازه ثابت تقسیم می شود که هر کدام را می توان به حافظه اصلی آورد‪ ،‬اما سیستم عامل‬
‫آدرس ها را در مناطق به هم پیوسته تخصیص داده شده در مرزهای ‪ 64‬کیلوبایتی مدیریت می کند‪ .‬یک منطقه می تواند در‬
‫یکی از سه حالت باشد‪:‬‬

‫‪ -‬موجود‪ :‬آدرسهایی که در حال حاضر توسط این فرآیند استفاده نمیشوند‪.‬‬

‫‪474‬‬
‫سیستم عامل های داخلی و اصول طراحی‪475.........................................................................................................................‬‬

‫‪ -‬رزرو شده‪ :‬آدرس هایی که مدیر حافظه مجازی برای یک فرآیند کنار گذاشته است تا نتوان آنها را به استفاده دیگری اختصاص‬
‫داد به عنوان مثال‪ ،‬صرفه جویی در فضای پیوسته برای رشد یک پشته‪.‬‬

‫‪ Committed: -‬آدرس هایی که مدیر حافظه مجازی برای استفاده توسط فرآیند برای دسترسی به صفحات حافظه مجازی‬
‫مقداردهی اولیه کرده است‪ .‬این صفحات می توانند روی دیسک یا حافظه فیزیکی قرار گیرند‪ .‬هنگامی که روی دیسک هستند‪،‬‬
‫میتوانند در فایلها صفحات نقشهبرداری شده نگهداری شوند یا فضایی را در فایل صفحهبندی اشغال کنند یعنی فایل دیسکی‬
‫که هنگام حذف آنها از حافظه اصلی‪ ،‬صفحات را روی آن مینویسد‪ .‬تمایز بین حافظه ذخیره شده و متعهد به این دلیل مفید‬
‫است‬

‫‪ 1‬مقدار کل فضای حافظه مجازی مورد نیاز سیستم را کاهش می دهد و به فایل صفحه اجازه می دهد کوچکتر شود‪ .‬و ‪ 2‬به‬
‫برنامهها اجازه میدهد تا آدرسها را بدون دسترسی به آنها برای برنامه یا هزینهکردن آنها در برابر سهمیه منابع خود رزرو‬
‫کنند‪.‬‬

‫طرح مدیریت مجموعه مقیم مورد استفاده ویندوز تخصیص متغیر‪ ،‬محدوده محلی است جدول ‪ 8.5‬را ببینید‪ .‬هنگامی که یک‬
‫فرآیند برای اولین بار فعال می شود‪ ،‬ساختارهای داده ای برای مدیریت مجموعه کاری آن به آن اختصاص داده می شود‪.‬‬
‫همانطور که صفحات مورد نیاز فرآیند به حافظه فیزیکی وارد می شوند‪ ،‬مدیر حافظه از ساختارهای داده برای پیگیری صفحات‬
‫اختصاص داده شده به فرآیند استفاده می کند‪ .‬مجموعههای کاری فرآیندهای فعال با استفاده از قراردادهای کلی زیر تنظیم‬
‫میشوند‪:‬‬

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

‫‪ -‬هنگامی که حافظه کمیاب می شود‪ ،‬مدیر حافظه مجازی با حذف صفحات کمتر استفاده شده از مجموعه های کاری‬
‫فرآیندهای فعال‪ ،‬حافظه را برای سیستم بازیابی می کند و اندازه آن مجموعه های ساکن را کاهش می دهد‪.‬‬

‫حتی زمانی که حافظه فراوان است‪ ،‬ویندوز فرآیندهای بزرگی را که به سرعت در حال افزایش استفاده از حافظه هستند‪ ،‬بررسی‬
‫می کند‪ .‬سیستم شروع به حذف صفحاتی می کند که اخیراً استفاده نشده اند از فرآیند‪ .‬این خط مشی سیستم را پاسخگوتر می‬
‫کند زیرا یک برنامه جدید به طور ناگهانی باعث کمبود حافظه نمی شود و کاربر را مجبور نمی کند تا زمانی که سیستم سعی‬
‫می کند مجموعه های ساکن فرآیندهایی را که قبالً در حال اجرا هستند کاهش دهد صبر کند‪.‬‬

‫‪475‬‬
‫سیستم عامل های داخلی و اصول طراحی‪476.........................................................................................................................‬‬

‫تعویض ویندوز ‪8‬‬

‫با ‪ Metro UI‬یک سیستم حافظه مجازی جدید برای رسیدگی به درخواستهای وقفه از برنامههای فروشگاه ویندوز ارائه‬
‫میشود‪ Swapfile.sys .‬به همتای آشنای ویندوز خود ‪ pagefile.sys‬می پیوندد تا دسترسی به حافظه موقت روی هارد‬
‫دیسک را فراهم کند‪ .‬صفحهبندی مواردی را نگه میدارد که برای مدت طوالنی به آنها دسترسی نداشتهاند‪ ،‬در حالی که مبادله‬
‫مواردی را که اخیراً از حافظه حذف شدهاند نگهداری میکند‪ .‬ممکن است برای مدت طوالنی به آیتم های موجود در پیجینگ‬
‫فایل دیگر دسترسی نیابید‪ ،‬در حالی که موارد موجود در فایل ‪ swap‬ممکن است خیلی زودتر قابل دسترسی باشند‪ .‬فقط‬
‫برنامههای ‪ Store‬از فایل ‪ swapfile.sys‬استفاده میکنند و به دلیل حجم نسبتاً کوچک برنامههای ‪ ،Store‬اندازه ثابت آن‬
‫تنها ‪ 256‬مگابایت است‪ .‬فایل ‪ pagefile.sys‬تقریباً یک تا دو برابر مقدار ‪ RAM‬فیزیکی موجود در سیستم خواهد بود‪.‬‬
‫‪ Swapfile.sys‬با تعویض کل فرآیند از حافظه سیستم به فایل ‪ swap‬عمل می کند‪ .‬این بالفاصله حافظه را برای سایر برنامه‬
‫ها آزاد می کند‪ .‬در مقابل‪ ،‬فایل های صفحه بندی با انتقال "صفحات" یک برنامه از حافظه سیستم به فایل پیجینگ کار می‬
‫کنند‪ .‬حجم این صفحات ‪ 4‬کیلوبایت می باشد‪ .‬کل برنامه به صورت عمده در فایل صفحه بندی تعویض نمی شود‪.‬‬

‫‪ 8.6‬مدیریت حافظه اندروید‬

‫اندروید شامل تعدادی افزونه برای تسهیالت مدیریت حافظه هسته لینوکس معمولی است‪ .‬این موارد شامل موارد زیر است‪:‬‬

‫‪ ASHMem: -‬این ویژگی حافظه مشترک ناشناس را فراهم می کند که حافظه را به عنوان توصیف کننده فایل خالصه می‬
‫کند‪ .‬یک توصیفگر فایل می تواند برای اشتراک گذاری حافظه به فرآیند دیگری منتقل شود‪.‬‬

‫‪ Pmem: -‬این ویژگی حافظه مجازی را به گونه ای اختصاص می دهد که از نظر فیزیکی به هم پیوسته باشد‪ .‬این ویژگی برای‬
‫سخت افزارهایی که از حافظه مجازی پشتیبانی نمی کنند مفید است‪.‬‬

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

‫‪ 8.7‬خالصه‬

‫برای استفاده کارآمد از پردازنده و امکانات ورودی‪/‬خروجی‪ ،‬حفظ هر چه بیشتر فرآیندها در حافظه اصلی مطلوب است‪ .‬عالوه بر‬
‫این‪ ،‬مطلوب است که برنامه نویسان از محدودیت های اندازه در توسعه برنامه رها شوند‪.‬‬

‫‪476‬‬
‫سیستم عامل های داخلی و اصول طراحی‪477.........................................................................................................................‬‬

‫راه حل هر دوی این نگرانی ها حافظه مجازی است‪ .‬با حافظه مجازی‪ ،‬همه مراجع آدرس‪ ،‬مراجع منطقی هستند که در زمان‬
‫اجرا به آدرس های واقعی ترجمه می شوند‪ .‬این اجازه می دهد تا یک فرآیند در هر نقطه از حافظه اصلی قرار گیرد و آن مکان‬
‫در طول زمان تغییر کند‪ .‬حافظه مجازی همچنین اجازه می دهد تا یک فرآیند به قطعات تقسیم شود‪ .‬الزم نیست این قطعات در‬
‫حین اجرا به طور پیوسته در حافظه اصلی قرار گیرند و در واقع‪ ،‬حتی الزم نیست که تمام قطعات فرآیند در حین اجرا در حافظه‬
‫اصلی باشند‪.‬‬

‫دو رویکرد اساسی برای ارائه حافظه مجازی صفحه بندی و تقسیم بندی هستند‪ .‬با صفحه بندی‪ ،‬هر فرآیند به صفحات نسبتاً‬
‫کوچک و با اندازه ثابت تقسیم می شود‪ .‬تقسیم بندی استفاده از قطعات با اندازه های مختلف را فراهم می کند‪ .‬همچنین امکان‬
‫ترکیب تقسیم بندی و صفحه بندی در یک طرح مدیریت حافظه واحد وجود دارد‪.‬‬

‫یک طرح مدیریت حافظه مجازی به پشتیبانی سخت افزاری و نرم افزاری نیاز دارد‪ .‬پشتیبانی سخت افزاری توسط پردازنده ارائه‬
‫می شود‪ .‬پشتیبانی شامل ترجمه پویا آدرس های مجازی به آدرس های فیزیکی و ایجاد وقفه زمانی است که صفحه یا بخش‬
‫ارجاع شده در حافظه اصلی نباشد‪ .‬چنین وقفه ای باعث فعال شدن نرم افزار مدیریت حافظه در سیستم عامل می شود‪.‬‬

‫تعدادی از مسائل طراحی مربوط به پشتیبانی سیستم عامل برای مدیریت حافظه است‪:‬‬

‫‪ -‬واکشی خطمشی‪ :‬صفحات فرآیند را میتوان در صورت تقاضا وارد کرد‪ ،‬یا میتوان از یک خطمشی پیشصفحهسازی استفاده‬
‫کرد که فعالیت ورودی را با وارد کردن چند صفحه بهصورت همزمان خوشهبندی میکند‪.‬‬

‫‪ -‬خطمشی قرارگیری‪ :‬با یک سیستم تقسیمبندی خالص‪ ،‬یک بخش ورودی باید در فضای موجود در حافظه قرار گیرد‪.‬‬

‫‪ -‬سیاست تعویض‪ :‬وقتی حافظه پر است‪ ،‬باید تصمیم گیری شود که کدام صفحه یا صفحات جایگزین شوند‪.‬‬

‫‪ -‬مدیریت مجموعه مقیم‪ :‬سیستم عامل باید تصمیم بگیرد که چه مقدار حافظه اصلی را به یک فرآیند خاص تخصیص دهد که‬
‫آن فرآیند در آن جابجا می شود‪.‬‬

‫‪ -‬خطمشی پاکسازی‪ :‬صفحات فرآیند اصالحشده را میتوان در زمان جایگزینی نوشت‪ ،‬یا میتوان از یک خطمشی پیش تمیز‬
‫کردن استفاده کرد‪ ،‬که فعالیت خروجی را با نوشتن تعدادی صفحه بهطور همزمان خوشهبندی میکند‪.‬‬

‫کنترل بار‪ :‬کنترل بار مربوط به تعیین تعداد فرآیندهایی است که در هر زمان معین در حافظه اصلی ساکن خواهند بود‪.‬‬

‫‪477‬‬
‫سیستم عامل های داخلی و اصول طراحی‪478.........................................................................................................................‬‬

‫‪ 8.8‬خواندن و انیمیشن های توصیه شده‬

‫‪CARR81‬یک بررسی عمیق عالی از مسائل عملکرد ارائه می دهد‪ .‬مقاله کالسیک ‪DENN70‬هنوز ارزش خواندن دارد‪.‬‬
‫‪JACO98a‬یک بررسی خوب از مسائل در طراحی حافظه مجازی است‪ .‬شامل بحث جداول صفحه معکوس است‪.‬‬
‫‪JACO98b‬به سازمانهای سختافزار حافظه مجازی در ریزپردازندههای مختلف نگاه میکند‪.‬‬

‫‪VAHA96‬یکی از بهترین درمانهای طرحهای مدیریت حافظه است که در طعمهای مختلف یونیکس استفاده میشود‪.‬‬
‫‪GORM04‬درمان کاملی برای مدیریت حافظه لینوکس است‪.‬‬

‫تصاویر متحرک‬

‫مجموعه ای از انیمیشن که مفاهیم این فصل را نشان می دهد در وب سایت ‪ Premium‬موجود است‪ .‬خواننده تشویق می شود‬
‫که انیمیشن ها را برای تقویت مفاهیم این فصل مشاهده کند‪.‬‬

‫‪478‬‬
‫سیستم عامل های داخلی و اصول طراحی‪479.........................................................................................................................‬‬

‫‪ 8.9‬اصطالحات کلیدی‪ ،‬سؤاالت و مشکالت را مرور کنید‬

‫شرایط کلیدی‬

‫نقشه برداری انجمنی‬ ‫صفحه‬ ‫مدیریت مجموعه مقیم‬

‫صفحه بندی تقاضا‬ ‫خطای صفحه‬ ‫بخش‬

‫تکه تکه شدن خارجی‬ ‫سیاست قرار دادن صفحه‬ ‫جدول بخش‬

‫سیاست واکشی‬ ‫سیاست تعویض صفحه‬ ‫تقسیم بندی‬

‫قاب‬ ‫جدول صفحه‬ ‫تخصیص اسلب‬

‫جدول هش‬ ‫صفحه بندی‬ ‫کوبیدن‬

‫هش کردن‬ ‫آماده سازی‬ ‫بافر کناری ترجمه‬

‫تکه تکه شدن داخلی‬ ‫حافظه واقعی‬ ‫حافظه مجازی‬

‫محل‬ ‫مجموعه مقیم‬ ‫مجموعه کاری‬

‫بررسی سواالت‬

‫‪ .8.1‬تفاوت بین صفحه بندی ساده و صفحه بندی حافظه مجازی چیست؟‬

‫‪ .8.2‬کوبیدن را توضیح دهید‬

‫‪ .8.3‬چرا اصل محلی بودن برای استفاده از حافظه مجازی بسیار مهم است؟‬

‫‪ .8.4‬چه عناصری معموالً در ورودی جدول صفحه یافت می شوند؟ هر عنصر را به طور خالصه تعریف کنید‪.‬‬

‫‪ .8.5‬هدف از یک بافر کناری ترجمه چیست؟‬

‫‪ .8.6‬به طور خالصه سیاست های واکشی صفحه جایگزین را تعریف کنید‪.‬‬

‫‪479‬‬
‫سیستم عامل های داخلی و اصول طراحی‪480.........................................................................................................................‬‬

‫‪ .8.7‬تفاوت بین مدیریت مجموعه مقیم و سیاست تعویض صفحه چیست؟‬

‫‪ .8.8‬رابطه بین ‪ FIFO‬و الگوریتم های جایگزینی صفحه ساعت چیست؟‬

‫‪ .8.9‬چه چیزی با بافر صفحه انجام می شود؟‬

‫‪ .8.10‬چرا ترکیب سیاست جایگزینی جهانی و سیاست تخصیص ثابت ممکن نیست؟‬

‫‪ .8.11‬تفاوت بین ست رزیدنت و ست کار چیست؟‬

‫‪ .8.12‬تفاوت بین تمیز کردن تقاضا و پیش تمیز کردن چیست؟‬

‫چالش ها و مسائل‬

‫‪ .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.4‬رشته زیر از مراجع صفحه ‪ 2 ،3 ،0 ،3 ،2 ،4 ،0 ،3 ،0 ،2 ،1 ،0 ،7‬را در نظر بگیرید‪.‬‬

‫آ‪FIFO .‬اول در اولین خروج‬

‫ب ‪LRU‬کمترین استفاده اخیر‬


‫‪481‬‬
‫سیستم عامل های داخلی و اصول طراحی‪482.........................................................................................................................‬‬

‫ج ساعت‬

‫د بهینه فرض کنید رشته مرجع صفحه با ‪ 1 ،0 ،7 ،1 ،0 ،2 ،1‬ادامه یابد‬

‫ه‪ .‬تعداد کل خطاهای صفحه و میزان خطا را برای هر خط مشی فهرست کنید‪ .‬شمارش خطاهای صفحه فقط پس از اینکه همه‬
‫فریم ها مقداردهی اولیه شدند‪.‬‬

‫‪ .8.5‬یک فرآیند به پنج صفحه ‪ D ،C ،B ،A‬و ‪ E‬به ترتیب زیر ارجاع میدهد‪:‬‬

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

‫‪ .8.6‬یک فرآیند شامل هشت صفحه مجازی روی دیسک است و یک تخصیص ثابت از چهار فریم صفحه در حافظه اصلی به آن‬
‫اختصاص داده می شود‪ .‬ردیابی صفحه زیر رخ می دهد‪:‬‬

‫آ‪ .‬صفحات متوالی ساکن در چهار فریم را با استفاده از سیاست جایگزینی ‪ LRU‬نشان دهید‪ .‬نسبت ضربه را در حافظه اصلی‬
‫محاسبه کنید‪ .‬فرض کنید فریم ها در ابتدا خالی هستند‪.‬‬

‫ب قسمت الف را برای سیاست جایگزینی ‪ FIFO‬تکرار کنید‪.‬‬

‫ج دو نسبت ضربه را مقایسه کنید و در مورد اثربخشی استفاده از ‪ FIFO‬برای تقریب ‪ LRU‬با توجه به این ردیابی خاص اظهار‬
‫نظر کنید‪.‬‬

‫‪ .8.7‬در ‪ ،VAX‬جداول صفحات کاربر در آدرس های مجازی در فضای سیستم قرار دارند‪ .‬مزیت وجود جداول صفحات کاربر در‬
‫حافظه مجازی به جای حافظه اصلی چیست؟ چه ضرری دارد؟‬

‫‪ .8.8‬بیانیه برنامه را فرض کنید‬

‫‪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‬چقدر است؟‬

‫ج توضیح دهید که نرخ ضربه ‪ 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.........................................................................................................................‬‬

‫قسمت ‪ 4‬برنامه ریزی‬

‫فصل ‪9‬‬

‫برنامه ریزی تک پردازنده‬

‫‪ 9.1‬انواع زمانبندی پردازنده‬

‫برنامه ریزی بلند مدت برنامه ریزی میان مدت برنامه ریزی کوتاه مدت‬

‫‪ 9.2‬الگوریتم های زمان بندی‬

‫معیارهای برنامه ریزی کوتاه مدت استفاده از اولویت ها مقایسه عملکرد سیاست های زمان بندی جایگزین‬

‫برنامه ریزی اشتراک منصفانه‬

‫‪ 9.3‬برنامه ریزی سنتی یونیکس‬

‫‪ 9.4‬خالصه‬

‫‪ 9.5‬خواندن و انیمیشن های توصیه شده‬

‫‪ 9.6‬اصطالحات کلیدی‪ ،‬بررسی سواالت و مشکالت‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬تفاوت بین برنامه ریزی بلند مدت‪ ،‬میان مدت و کوتاه مدت را توضیح دهید‪.‬‬

‫‪ -‬عملکرد سیاست های زمان بندی مختلف را ارزیابی کنید‪.‬‬

‫‪ -‬درک تکنیک زمان بندی مورد استفاده در یونیکس سنتی‪.‬‬

‫‪486‬‬
‫سیستم عامل های داخلی و اصول طراحی‪487.........................................................................................................................‬‬

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

‫کلید برنامه نویسی چندگانه‪ ،‬زمان بندی است‪ .‬در واقع‪ ،‬چهار نوع زمانبندی معموالً درگیر هستند جدول ‪ .9.1‬یکی از اینها‪،‬‬
‫زمانبندی ورودی‪/‬خروجی‪ ،‬در فصل ‪ ،11‬جایی که ‪ I/O‬مورد بحث قرار میگیرد‪ ،‬راحتتر به آن پرداخته شده است‪ .‬سه نوع‬
‫زمانبندی باقیمانده‪ ،‬که انواع زمانبندی پردازنده هستند‪ ،‬در این فصل و فصل بعدی مورد بررسی قرار میگیرند‪.‬‬

‫این فصل با بررسی سه نوع زمانبندی پردازنده آغاز میشود و نحوه ارتباط آنها را نشان میدهد‪ .‬ما می بینیم که برنامه ریزی‬
‫بلندمدت و برنامه ریزی میان مدت عمدتاً ناشی از نگرانی های عملکرد مربوط به درجه چندبرنامه ریزی است‪ .‬این مسائل تا‬
‫حدی در فصل ‪ 3‬و با جزئیات بیشتر در فصل های ‪ 7‬و ‪ 8‬مورد بررسی قرار می گیرند‪.‬‬

‫بنابراین‪ ،‬بقیه این فصل بر زمان بندی کوتاه مدت متمرکز است و به بررسی زمان بندی در یک سیستم تک پردازنده محدود می‬
‫شود‪ .‬از آنجایی که استفاده از چندین پردازنده پیچیدگی بیشتری میافزاید‪ ،‬بهتر است ابتدا روی مورد تکپردازنده تمرکز کنید‬
‫تا تفاوتهای بین الگوریتمهای زمانبندی به وضوح دیده شود‪.‬‬

‫بخش ‪ 9.2‬به الگوریتم های مختلفی می پردازد که ممکن است برای تصمیم گیری های زمان بندی کوتاه مدت استفاده شوند‪.‬‬

‫‪ 9.1‬انواع زمانبندی پردازنده‬

‫هدف از زمانبندی پردازنده‪ ،‬تخصیص فرآیندهایی است که باید توسط پردازنده یا پردازندهها در طول زمان اجرا شوند‪ ،‬به نحوی‬
‫که اهداف سیستم‪ ،‬مانند زمان پاسخ‪ ،‬توان عملیاتی و کارایی پردازنده را برآورده کند‪ .‬در بسیاری از سیستمها‪ ،‬این فعالیت‬
‫زمانبندی به سه عملکرد مجزا تقسیم میشود‪ :‬زمانبندی بلندمدت‪ ،‬میانمدت و کوتاهمدت‪ .‬نام ها نشان دهنده مقیاس های‬
‫زمانی نسبی است که این عملکردها با آن انجام می شوند‪.‬‬

‫‪487‬‬
‫سیستم عامل های داخلی و اصول طراحی‪488.........................................................................................................................‬‬

‫جدید‬

‫برنامه ریزی‬ ‫برنامه ریزی‬


‫بلند مدت‬ ‫بلند مدت‬

‫خروج‬
‫برنامه‬ ‫برنامه‬
‫ریزی میان‬ ‫ریزی کوتاه‬
‫مدت‬ ‫مدت‬

‫برنامه ریزی‬
‫میان مدت‬
‫شکل ‪ 9.1‬زمانبندی و انتقال وضعیت فرآیند‬

‫شکل ‪ 9.1‬توابع زمان بندی را به نمودار انتقال وضعیت فرآیند مرتبط می کند برای اولین بار در شکل ‪ b3.9‬نشان داده شده‬
‫است‪ .‬زمانبندی بلندمدت زمانی انجام میشود که فرآیند جدیدی ایجاد شود‪ .‬این تصمیمی است که آیا یک فرآیند جدید به‬
‫مجموعه فرآیندهایی که در حال حاضر فعال هستند اضافه شود یا خیر‪ .‬برنامه ریزی میان مدت بخشی از عملکرد مبادله است‪.‬‬
‫این تصمیمی است که آیا باید فرآیندی را به مواردی اضافه کرد که حداقل تا حدی در حافظه اصلی هستند و بنابراین برای اجرا‬
‫در دسترس هستند‪ .‬زمانبندی کوتاهمدت تصمیم واقعی است که کدام فرآیند آماده اجرا میشود‪ .‬شکل ‪ 9.2‬نمودار انتقال حالت‬
‫شکل ‪ b3.9‬را مجددا سازماندهی می کند تا توابع توابع زمان بندی را نشان دهد‪.‬‬

‫زمانبندی بر عملکرد سیستم تأثیر میگذارد‪ ،‬زیرا تعیین میکند کدام فرآیندها منتظر بمانند و کدام پیشرفت کنند‪ .‬این دیدگاه‬
‫در شکل ‪ 9.3‬ارائه شده است که صفهای دخیل در انتقال حالت یک فرآیند را نشان میدهد‪ .‬اساساً‪ ،‬زمانبندی یک موضوع‬
‫مدیریت صفها برای به حداقل رساندن تأخیر صف و بهینهسازی عملکرد در یک محیط صف است‪.‬‬

‫برنامه ریزی بلند مدت‬

‫زمانبندی بلند مدت تعیین می کند که کدام برنامه ها برای پردازش در سیستم پذیرفته می شوند‪ .‬بنابراین‪ ،‬درجه‬
‫چندبرنامهنویسی را کنترل میکند‪ .‬پس از پذیرش‪ ،‬یک برنامه شغلی یا کاربری به یک فرآیند تبدیل می شود و به صف زمانبندی‬
‫کوتاه مدت اضافه می شود‪ .‬در برخی از سیستم ها‪ ،‬یک فرآیند جدید ایجاد شده در یک شرایط تعویض شده آغاز می شود‪ ،‬در‬
‫این صورت به یک صف برای زمانبندی میان مدت اضافه می شود‪.‬‬

‫در یک سیستم دسته ای یا برای بخش دسته ای یک سیستم عامل‪ ،‬کارهای ارسالی جدید به دیسک هدایت می شوند و در یک‬
‫صف دسته ای نگهداری می شوند‪ .‬زمانبندی بلندمدت زمانی که بتواند فرآیندهایی را از صف ایجاد می کند‪ .‬دو تصمیم درگیر‬

‫‪488‬‬
‫سیستم عامل های داخلی و اصول طراحی‪489.........................................................................................................................‬‬

‫است‪ .‬زمانبند باید تصمیم بگیرد که چه زمانی سیستم عامل می تواند یک یا چند فرآیند اضافی را انجام دهد‪ .‬و برنامهریز باید‬
‫تصمیم بگیرد که کدام شغل یا مشاغل را بپذیرد و به فرآیند تبدیل کند‪ .‬این دو تصمیم را به اختصار بررسی می کنیم‪.‬‬

‫تصمیم در مورد زمان ایجاد یک فرآیند جدید عموماً توسط درجه مطلوب چندبرنامهنویسی هدایت میشود‪ .‬هرچه فرآیندهای‬
‫بیشتری ایجاد شوند‪ ،‬درصد زمانی که هر فرآیند میتواند اجرا شود کمتر است یعنی‪ ،‬فرآیندهای بیشتری برای مدت زمان یکسان‬
‫پردازنده رقابت میکنند‪ .‬بنابراین‪ ،‬زمانبندی بلندمدت ممکن است درجه چندبرنامهنویسی را برای ارائه خدمات رضایتبخش به‬
‫مجموعه فعلی فرآیندها محدود کند‪ .‬هر بار که یک کار خاتمه می یابد‪ ،‬زمانبندی ممکن است تصمیم بگیرد که یک یا چند کار‬
‫جدید اضافه کند‪ .‬عالوه بر این‪ ،‬اگر کسری از زمانی که پردازنده بیکار است از یک آستانه خاص فراتر رود‪ ،‬ممکن است زمانبندی‬
‫بلندمدت فراخوانی شود‪ .‬تصمیم گیری در مورد اینکه کدام شغل بعدی پذیرفته شود‪ ،‬می تواند بر اساس اولین خدمت اولیه‬
‫‪FCFS‬باشد‪ ،‬یا می تواند ابزاری برای مدیریت عملکرد سیستم باشد‪ .‬معیارهای مورد استفاده ممکن است شامل اولویت‪ ،‬زمان‬
‫اجرای مورد انتظار و الزامات ‪ I/O‬باشد‪.‬‬

‫جدید‬ ‫خروج‬

‫شکل ‪ 9.2‬سطوح زمان بندی‬

‫‪489‬‬
‫سیستم عامل های داخلی و اصول طراحی‪490.........................................................................................................................‬‬

‫شکل ‪ 9.3‬نمودار صف برای زمان بندی‬

‫برای مثال‪ ،‬اگر اطالعات در دسترس باشد‪ ،‬زمانبند ممکن است سعی کند ترکیبی از فرآیندهای محدود به پردازنده و‬
‫ورودی‪/‬خروجی را حفظ کند‪ .‬برای متعادل کردن استفاده ‪ I/O‬برای برنامههای تعاملی در یک سیستم اشتراکگذاری زمانی‪ ،‬یک‬
‫درخواست ایجاد فرآیند میتواند با اقدام یک کاربر برای اتصال به سیستم ایجاد شود‪ .‬کاربران اشتراک زمان به سادگی در صف‬
‫قرار نمی گیرند و منتظر می مانند تا سیستم بتواند آنها را بپذیرد‪ .‬در عوض‪ ،‬سیستم عامل تا زمانی که سیستم اشباع نشده باشد‪،‬‬
‫با استفاده از معیارهای از پیش تعریف شده اشباع‪ ،‬تمامی کاربران مجاز را می پذیرد‪ .‬در آن مرحله‪ ،‬یک درخواست اتصال با‬
‫پیامی مواجه می شود که نشان می دهد سیستم پر است و کاربر باید بعداً دوباره امتحان کند‪.‬‬

‫برنامه ریزی میان مدت‬

‫برنامه ریزی میان مدت بخشی از عملکرد مبادله است‪ .‬مسائل مربوط در فصل های ‪ 7 ،3‬و ‪ 8‬مورد بحث قرار می گیرند‪ .‬معموالً‪،‬‬
‫تصمیم مبادله بر اساس نیاز به مدیریت درجه چندبرنامه ریزی است‪ .‬در سیستمی که از حافظه مجازی استفاده نمی کند‪،‬‬
‫مدیریت حافظه نیز یک مشکل است‪ .‬بنابراین‪ ،‬تصمیم مبادله‪ ،‬الزامات حافظه فرآیندهای مبادله شده را در نظر می گیرد‪.‬‬

‫برنامه ریزی کوتاه مدت‬

‫از نظر فراوانی اجرا‪ ،‬زمانبندیکننده بلندمدت نسبتاً مکرر اجرا میکند و تصمیم میگیرد که آیا فرآیند جدیدی را انجام دهد یا‬
‫نه و کدام یک را اتخاذ کند‪ .‬زمانبندی میانمدت برای تصمیمگیری مبادله به دفعات بیشتر اجرا میشود‪ .‬زمانبندی کوتاهمدت‪،‬‬
‫که به عنوان توزیعکننده نیز شناخته میشود‪ ،‬اغلب اجرا میشود و تصمیم میگیرد که کدام فرآیند بعدی را اجرا کند‪.‬‬

‫‪490‬‬
‫سیستم عامل های داخلی و اصول طراحی‪491.........................................................................................................................‬‬

‫زمانی که رویدادی رخ می دهد که ممکن است منجر به مسدود شدن فرآیند جاری شود یا ممکن است فرصتی برای جلوگیری‬
‫از یک فرآیند در حال اجرا به نفع دیگری فراهم کند‪ ،‬زمانبندی کوتاه مدت فراخوانی می شود‪ .‬نمونه هایی از چنین رویدادهایی‬
‫عبارتند از‪:‬‬

‫‪ -‬ساعت قطع می شود‬

‫‪ I/O-‬قطع می شود‬

‫‪ -‬تماس های سیستم عامل‬

‫‪ -‬سیگنال ها به عنوان مثال‪ ،‬سمافورها‬

‫‪ 9.2‬الگوریتم های زمان بندی‬

‫معیارهای برنامه ریزی کوتاه مدت‬

‫هدف اصلی برنامه ریزی کوتاه مدت تخصیص زمان پردازنده به گونه ای است که یک یا چند جنبه از رفتار سیستم را بهینه کند‪.‬‬
‫به طور کلی‪ ،‬مجموعهای از معیارها ایجاد میشود که براساس آنها میتوان سیاستهای زمانبندی مختلف را ارزیابی کرد‪.‬‬

‫معیارهای رایج مورد استفاده را می توان در دو بعد دسته بندی کرد‪ .‬اول‪ ،‬ما می توانیم بین معیارهای کاربر محور و سیستم‬
‫محور تمایز قائل شویم‪ .‬معیارهای کاربرمدار به رفتار سیستم که توسط کاربر یا فرآیند منفرد درک می شود‪ ،‬مربوط می شود‪.‬‬
‫یک مثال زمان پاسخگویی در یک سیستم تعاملی است‪ .‬زمان پاسخ‪ ،‬زمان سپری شده بین ارسال درخواست تا زمانی که پاسخ به‬
‫عنوان خروجی ظاهر شود‪ .‬این مقدار برای کاربر قابل مشاهده است و طبیعتاً برای کاربر جالب است‪ .‬ما یک خطمشی زمانبندی‬
‫میخواهیم که خدمات "خوب" را به کاربران مختلف ارائه دهد‪ .‬در مورد زمان پاسخ‪ ،‬ممکن است یک آستانه تعریف شود‪ ،‬مثالً‬
‫دو ثانیه‪ .‬سپس هدف مکانیسم زمانبندی باید به حداکثر رساندن تعداد کاربرانی باشد که میانگین زمان پاسخگویی دو ثانیه یا‬
‫کمتر را تجربه میکنند‪.‬‬

‫معیارهای دیگر سیستم گرا هستند‪ .‬یعنی تمرکز بر استفاده موثر و کارآمد از پردازنده است‪ .‬یک مثال توان عملیاتی است که‬
‫سرعت تکمیل فرآیندها است‪ .‬این مطمئناً معیار ارزشمندی از عملکرد سیستم است و ما می خواهیم آن را به حداکثر برسانیم‪ .‬با‬
‫این حال‪ ،‬به جای خدمات ارائه شده به کاربر‪ ،‬بر عملکرد سیستم تمرکز دارد‪ .‬بنابراین‪ ،‬توان عملیاتی برای یک مدیر سیستم‬
‫نگران کننده است اما برای جمعیت کاربر نه‪.‬‬

‫‪491‬‬
‫سیستم عامل های داخلی و اصول طراحی‪492.........................................................................................................................‬‬

‫در حالی که معیارهای کاربر محور تقریباً در همه سیستم ها مهم هستند‪ ،‬معیارهای سیستم گرا معموالً در سیستم های تک‬
‫کاربره اهمیت کمی دارند‪ .‬در یک سیستم تک کاربره‪ ،‬تا زمانی که پاسخگویی سیستم به برنامه های کاربر قابل قبول باشد‪،‬‬
‫احتماالً دستیابی به استفاده از پردازنده یا توان عملیاتی باال مهم نیست‪.‬‬

‫بعد دیگری که معیارها را می توان بر اساس آن طبقه بندی کرد‪ ،‬آنهایی است که به عملکرد مرتبط هستند و آنهایی که مستقیماً‬
‫به عملکرد مرتبط نیستند‪ .‬معیارهای مربوط به عملکرد کمی هستند و عموماً به راحتی قابل اندازه گیری هستند‪ .‬به عنوان مثال‬
‫می توان به زمان پاسخگویی و توان عملیاتی اشاره کرد‪ .‬معیارهایی که مربوط به عملکرد نیستند یا ماهیت کیفی دارند یا به‬
‫راحتی به اندازه گیری و تجزیه و تحلیل نمی رسند‪ .‬نمونه ای از چنین معیاری قابل پیش بینی است‪ .‬ما می خواهیم خدمات ارائه‬
‫شده به کاربران در طول زمان‪ ،‬مستقل از سایر کارهایی که توسط سیستم انجام می شود‪ ،‬همان ویژگی ها را نشان دهد‪ .‬تا حدی‪،‬‬
‫این معیار را می توان با محاسبه واریانس به عنوان تابعی از حجم کار اندازه گیری کرد‪ .‬با این حال‪ ،‬این تقریباً به اندازه اندازه‬
‫گیری توان عملیاتی یا زمان پاسخ به عنوان تابعی از حجم کار ساده نیست‪.‬‬

‫جدول ‪ 9.2‬معیارهای کلیدی زمان بندی را خالصه می کند‪ .‬اینها به یکدیگر وابسته هستند و بهینه سازی همه آنها به طور‬
‫همزمان غیرممکن است‪ .‬به عنوان مثال‪ ،‬ارائه زمان پاسخ خوب ممکن است به یک الگوریتم زمان بندی نیاز داشته باشد که بین‬
‫فرآیندها سوئیچ کند‬

‫‪492‬‬
‫سیستم عامل های داخلی و اصول طراحی‪493.........................................................................................................................‬‬

‫جدول ‪ 9.2‬معیارهای زمانبندی‬

‫کاربر گرا‪ ،‬مربوط به عملکرد‬


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

‫اهمیت این نیاز‪ ،‬و از آنجایی که تعریف کفایت از یک کاربرد به برنامه دیگر متفاوت است‪ ،‬موضوع در پیوست ‪ G‬بیشتر مورد‬
‫بررسی قرار گرفته است‪.‬‬

‫‪493‬‬
‫سیستم عامل های داخلی و اصول طراحی‪494.........................................................................................................................‬‬

‫استفاده از اولویت ها‬

‫در بسیاری از سیستمها‪ ،‬به هر فرآیند یک اولویت اختصاص داده میشود و زمانبندیکننده همیشه یک فرآیند با اولویت باالتر را‬
‫نسبت به یکی از اولویتهای پایینتر انتخاب میکند‪ .‬شکل ‪ 9.4‬استفاده از اولویت ها را نشان می دهد‪ .‬برای وضوح‪ ،‬نمودار صف‬
‫ساده شده است و وجود صف های مسدود شده متعدد و حالت های معلق را نادیده می گیرد شکل ‪ a3.8‬را مقایسه کنید‪ .‬به‬
‫جای یک صف آماده‪ ،‬مجموعه ای از صف ها را به ترتیب اولویت نزولی ارائه می دهیم‪. . . , RQn, ،RQ1 ،RQ0 :‬با‬
‫اولویت ‪RQi‬اولویت ‪RQj‬برای ‪ i j.3‬هنگامی که یک انتخاب زمانبندی قرار است انجام شود‪ ،‬زمانبندی از صف آماده با باالترین‬
‫اولویت ‪RQ0‬شروع می شود‪ .‬اگر یک یا چند فرآیند در صف وجود داشته باشد‪ ،‬یک فرآیند با استفاده از برخی از سیاست های‬
‫زمان بندی انتخاب می شود‪ .‬اگر ‪ RQ0‬خالی باشد‪ RQ1 ،‬بررسی می شود و غیره‪.‬‬

‫شکل ‪ 9.4‬صف اولویت‬

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

‫سیاست های زمان بندی جایگزین‬

‫جدول ‪ 9.3‬اطالعات خالصه ای را در مورد سیاست های زمان بندی مختلف ارائه می کند که در این بخش فرعی بررسی می‬
‫شوند‪ .‬تابع انتخاب تعیین می کند که کدام فرآیند‪ ،‬از بین فرآیندهای آماده‪ ،‬بعداً برای اجرا انتخاب می شود‪ .‬تابع ممکن است بر‬
‫اساس اولویت‪ ،‬منابع مورد نیاز‪ ،‬یا ویژگی های اجرای فرآیند باشد‪ .‬در مورد دوم‪ ،‬سه مقدار قابل توجه است‪:‬‬

‫‪494‬‬
‫سیستم عامل های داخلی و اصول طراحی‪495.........................................................................................................................‬‬

‫زمان صرف شده در سیستم تا کنون‪ ،‬در انتظار زمان صرف شده در اجرا تا کنون کل زمان خدمات مورد نیاز فرآیند‪ ،‬از جمله ;‪e‬‬
‫به طور کلی‪ ،‬این مقدار باید توسط کاربر برآورد یا عرضه شود به عنوان مثال‪ ،‬تابع انتخاب ‪ maxw‬یک رشته ‪ FCFS‬را نشان‬
‫می دهد‬

‫جدول ‪ 9.3‬ویژگی های سیاست های مختلف زمان بندی‬

‫درخواست‬
‫‪FCFS‬‬ ‫‪SPN‬‬ ‫‪SRT‬‬ ‫‪HRR‬‬ ‫‪Feedba‬‬
‫کتبی‬ ‫‪N‬‬ ‫‪ck‬‬

‫تابع‬ ‫حداکثر‪w‬‬ ‫دقیقه‪s‬‬ ‫‪max a w‬‬ ‫متن را‬


‫‪e mins‬‬ ‫ببینید‬
‫انتخاب‬ ‫‪+ sb‬‬
‫‪s‬‬
‫حالت‬ ‫مقدار ثابت غیر‬ ‫پیشگیرانه در غیر پیشگیرانه پیشگیرانه غیر‬

‫تصم‬ ‫پیشگیرانه‬ ‫در بدو ورود پیشگیرانه‬ ‫زمان‬

‫یم‬ ‫کوانتومی‬

‫گیری‬
‫توان‬ ‫پیشگیرانه در تاکید نشده‬ ‫تاکید نشده‬
‫عملیاتی‬ ‫است‬ ‫زمان‬ ‫است‬
‫کوانتومی‬

‫زمان‬ ‫اگر کوانتوم ممکن است‬ ‫باال‬ ‫باال‬ ‫باال‬


‫پاسخ‬ ‫باال باشد‪ ،‬به‬ ‫خیلی‬
‫کوچک باشد خصوص اگر‬
‫ممکن است وجود داشته‬
‫پایین باشد باشد‬

‫در باالی‬ ‫اختالف‬


‫سر‬ ‫زیادی در‬
‫زمان اجرای‬
‫فرآیند‬

‫‪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‬است‪ .‬افزایش مقادیر با کاهش سطح خدمات مطابقت دارد‪.‬‬

‫جدول ‪ 9.4‬مثال زمانبندی فرآیند‬

‫‪Process Arrival‬‬ ‫‪Service‬‬


‫‪Time‬‬ ‫‪Time‬‬
‫‪A‬‬ ‫‪0‬‬ ‫‪3‬‬
‫‪B‬‬ ‫‪2‬‬ ‫‪6‬‬
‫‪C‬‬ ‫‪4‬‬ ‫‪4‬‬
‫‪D‬‬ ‫‪6‬‬ ‫‪5‬‬
‫‪E‬‬ ‫‪8‬‬ ‫‪2‬‬

‫‪497‬‬
‫سیستم عامل های داخلی و اصول طراحی‪498.........................................................................................................................‬‬

‫شکل ‪ 9.5‬مقایسه سیاست های زمان بندی‬

‫‪ FIRST-COME-FIRST-SERVED‬ساده ترین خط مشی زمان بندی‪ ،‬اولین خدمت اولیه ‪FCFS‬است که به عنوان‬
‫اولین در اولین خروج ‪FIFO‬یا یک طرح صف بندی دقیق نیز شناخته می شود‪ .‬با آماده شدن هر فرآیند‪ ،‬به صف آماده می‬
‫پیوندد‪ .‬هنگامی که فرآیند در حال اجرا متوقف می شود‪ ،‬فرآیندی که طوالنی ترین مدت در صف آماده بوده برای اجرا انتخاب‬
‫می شود‪.‬‬

‫جدول ‪ 9.5‬مقایسه سیاست های زمان بندی‬

‫‪Process‬‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪E‬‬


‫‪Arrival Time‬‬ ‫‪0‬‬ ‫‪2‬‬ ‫‪4‬‬ ‫‪6‬‬ ‫‪8‬‬
‫‪Service Time‬‬ ‫‪3‬‬ ‫‪6‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪2‬‬ ‫‪Mea‬‬
‫‪Ts‬‬ ‫‪n‬‬
‫‪FCF‬‬
‫‪S‬‬
‫‪Finish Time‬‬ ‫‪3‬‬ ‫‪9‬‬ ‫‪13‬‬ ‫‪18‬‬ ‫‪20‬‬
‫‪Turnaround‬‬ ‫‪3‬‬ ‫‪7‬‬ ‫‪9‬‬ ‫‪12‬‬ ‫‪12‬‬ ‫‪8.60‬‬
‫‪Time Tr‬‬
‫‪Tr/Ts‬‬ ‫‪1.00‬‬ ‫‪1.17‬‬ ‫‪2.25‬‬ ‫‪2.40‬‬ ‫‪6.00‬‬ ‫‪2.56‬‬
‫‪498‬‬
499.........................................................................................................................‫سیستم عامل های داخلی و اصول طراحی‬

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‬در نظر‬
‫بگیرید‪:‬‬

‫زمان‬ ‫زمان‬ ‫زمان‬ ‫زمان چرخش‬


‫فرآیند‬ ‫رسید‬ ‫سرویس‬ ‫پایان زمان شروع‬ ‫‪Tr‬‬ ‫‪Tr /Ts‬‬

‫ن‬ ‫‪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‬و افزایش واریانس زمان پاسخ می شود‪.‬‬

‫کوانتومی زمان‬ ‫تعامل کامل شد‬


‫تخصیص یافته فرآیند‬

‫(الف) کوانتوم زمانی بیشتر از اندرکنش معمولی‬

‫کوانتومی زمان‬ ‫فرآیند از پیش‬ ‫کوانتومی زمان‬ ‫تعامل کامل شد‬


‫تخصیص یافته فرآیند‬ ‫تعیین شده است‬ ‫تخصیص یافته فرآیند‬

‫(ب) کوانتوم زمانی کمتر از اندرکنش معمولی‬

‫شکل ‪ 9.6‬اثر اندازه کوانتومی زمان ‪preemption‬‬

‫‪ HALD91‬اصالحاتی را برای دور روبین پیشنهاد میکند که از آن به عنوان یک گردونه مجازی ‪VRR‬یاد میکند و از این‬
‫بیعدالتی جلوگیری میکند‪ .‬شکل ‪ 9.7‬این طرح را نشان می دهد‪ .‬فرآیندهای جدید وارد می شوند و به صف آماده می پیوندند‬
‫که بر اساس ‪ FCFS‬مدیریت می شود‪ .‬زمانی که یک فرآیند در حال اجرا به پایان برسد‪ ،‬به صف آماده بازگردانده می شود‪.‬‬
‫هنگامی که یک فرآیند برای ‪ I/O‬مسدود می شود‪ ،‬به صف ‪ I/O‬می پیوندد‪ .‬تا اینجای کار طبق معمول است‪.‬‬

‫‪502‬‬
‫سیستم عامل های داخلی و اصول طراحی‪503.........................................................................................................................‬‬

‫ویژگی جدید یک صف کمکی ‪ FCFS‬است که فرآیندها پس از آزاد شدن از یک بلوک ‪ I/O‬به آن منتقل می شوند‪ .‬زمانی که‬
‫قرار است تصمیمی برای دیسپاچینگ گرفته شود‪ ،‬فرآیندهای موجود در صف کمکی نسبت به آنهایی که در صف آماده اصلی‬
‫هستند اولویت دارند‪ .‬هنگامی که یک فرآیند از صف کمکی ارسال می شود‪ ،‬بیش از زمانی برابر با کوانتوم اولیه منهای کل زمان‬
‫صرف شده در اجرا از آخرین باری که از صف آماده اصلی انتخاب شده است‪ ،‬اجرا نمی شود‪ .‬مطالعات عملکرد توسط نویسندگان‬
‫نشان میدهد که این رویکرد واقعاً از نظر انصاف برتر از دور روبین است‪.‬‬

‫شکل ‪ 9.7‬نمودار صف برای زمانبندی گرد رابین مجازی‬

‫کوتاهترین فرآیند بعدی رویکرد دیگری برای کاهش تعصب به نفع فرآیندهای طوالنی ذاتی در ‪ ،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.........................................................................................................................‬‬

‫شکل ‪ 9.8‬ضرایب هموارسازی نمایی‬

‫شکل ‪ 9.9‬استفاده از میانگین نمایی‬

‫‪ SRT‬به نفع فرآیندهای طوالنی موجود در ‪ FCFS‬تعصب ندارد‪ .‬بر خالف دور رابین‪ ،‬هیچ وقفه اضافی ایجاد نمی شود‪ ،‬که‬
‫سربار را کاهش می دهد‪ .‬از سوی دیگر‪ ،‬زمانهای سرویس سپری شده باید ثبت شود که به سربار کمک میکند‪SRT .‬‬
‫همچنین باید عملکرد بهتری در زمان چرخش به ‪ SPN‬بدهد‪ ،‬زیرا یک کار کوتاه به یک کار طوالنی تر ترجیح فوری داده می‬
‫شود‪.‬‬

‫توجه داشته باشید که در مثال ما جدول ‪ ،9.5‬سه کوتاهترین فرآیند‪ ،‬همگی خدمات فوری دریافت میکنند‪ ،‬که یک زمان‬
‫چرخش عادی برای هر یک از ‪ 1.0‬را ایجاد میکند‪.‬‬

‫‪506‬‬
‫سیستم عامل های داخلی و اصول طراحی‪507.........................................................................................................................‬‬

‫باالترین نسبت پاسخ بعدی در جدول ‪ ،9.5‬ما از زمان چرخش نرمال شده‪ ،‬که نسبت زمان چرخش به زمان خدمات واقعی است‪،‬‬
‫به عنوان یک رقم شایستگی استفاده کرده ایم‪ .‬برای هر فرآیند جداگانه‪ ،‬ما میخواهیم این نسبت را به حداقل برسانیم‪ ،‬و‬
‫میخواهیم مقدار متوسط را در تمام فرآیندها به حداقل برسانیم‪ .‬به طور کلی‪ ،‬ما نمیتوانیم از قبل بدانیم زمان سرویس چقدر‬
‫خواهد بود‪ ،‬اما میتوانیم آن را بر اساس تاریخچه گذشته یا برخی ورودیهای کاربر یا یک مدیر پیکربندی تقریبی کنیم‪ .‬نسبت‬
‫زیر را در نظر بگیرید‪:‬‬

‫نسبت پاسخ ‪R‬‬

‫زمان صرف شده برای انتظار برای پردازنده‬

‫زمان مورد انتظار سرویس‬

‫اگر فرآیند با این مقدار فوراً ارسال شود‪ R ،‬برابر با زمان چرخش عادی شده است‪ .‬توجه داشته باشید که حداقل مقدار ‪R 1.0‬‬
‫است که زمانی اتفاق می افتد که یک فرآیند برای اولین بار وارد سیستم می شود‪.‬‬

‫بنابراین‪ ،‬قانون زمانبندی ما به صورت زیر میشود‪ :‬هنگامی که فرآیند فعلی کامل شد یا مسدود شد‪ ،‬فرآیند آماده را با بیشترین‬
‫مقدار ‪ R‬انتخاب کنید‪ .‬این رویکرد جذاب است زیرا سن فرآیند را محاسبه میکند‪ .‬در حالی که مشاغل کوتاهتر مورد عالقه‬
‫هستند مخرج کوچکتر نسبت بیشتری را به همراه دارد‪ ،‬پیری بدون خدمات این نسبت را افزایش میدهد به طوری که یک‬
‫فرآیند طوالنیتر در نهایت از مشاغل کوتاهتر رقابتی عبور میکند‪.‬‬

‫مانند ‪ SRT‬و ‪ ،SPN‬زمان خدمات مورد انتظار باید برای استفاده از باالترین نسبت پاسخ بعدی ‪HRRN‬تخمین زده شود‪.‬‬

‫بازخورد اگر هیچ نشانه ای از طول نسبی فرآیندهای مختلف نداشته باشیم‪ ،‬هیچ یک از ‪ SRT ،SPN‬و ‪ HRRN‬را نمی توان‬
‫استفاده کرد‪ .‬راه دیگر برای ایجاد اولویت برای مشاغل کوتاه تر‪ ،‬جریمه کردن مشاغلی است که مدت طوالنی تری داشته اند‪ .‬به‬
‫عبارت دیگر‪ ،‬اگر نمیتوانیم روی زمان باقیمانده برای اجرا تمرکز کنیم‪ ،‬بگذارید روی زمان صرف شده در اجرا تا کنون تمرکز‬
‫کنیم‪.‬‬

‫روش انجام این کار به شرح زیر است‪ .‬زمانبندی بر مبنای پیشگیرانه در زمان کوانتومی انجام میشود و از مکانیزم اولویت پویا‬
‫استفاده میشود‪ .‬هنگامی که یک فرآیند برای اولین بار وارد سیستم می شود‪ ،‬در ‪ RQ0‬قرار می گیرد شکل ‪ 9.4‬را ببینید‪ .‬پس‬
‫از اولین پیشپرداخت‪ ،‬وقتی به حالت آماده برمیگردد‪ ،‬در ‪ RQ1‬قرار میگیرد‪ .‬هر بار بعدی که از قبل انتخاب می شود‪ ،‬به صف‬

‫‪507‬‬
‫سیستم عامل های داخلی و اصول طراحی‪508.........................................................................................................................‬‬

‫با اولویت پایین بعدی تنزل می یابد‪ .‬یک فرآیند کوتاه به سرعت تکمیل می شود‪ ،‬بدون اینکه در سلسله مراتب صف های آماده‬
‫مهاجرت کند‪ .‬یک فرآیند طوالنیتر به تدریج به سمت پایین حرکت میکند‪ .‬بنابراین‪ ،‬فرآیندهای جدیدتر و کوتاهتر بر‬
‫فرآیندهای قدیمیتر و طوالنیتر ترجیح داده میشوند‪ .‬در هر صف‪ ،‬به جز صف با کمترین اولویت‪ ،‬یک مکانیسم ساده ‪FCFS‬‬
‫استفاده می شود‪ .‬هنگامی که در صف با کمترین اولویت قرار می گیرد‪ ،‬یک فرآیند نمی تواند پایین تر برود‪ ،‬اما به طور مکرر به‬
‫این صف بازگردانده می شود تا زمانی که اجرا کامل شود‪ .‬بنابراین‪ ،‬این صف به صورت گردونه رفتار می شود‪.‬‬

‫شکل ‪ 9.10‬زمان بندی بازخورد‬

‫شکل ‪ 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‬زمان گردش یا زمان اقامت‪ .‬کل زمان در سیستم‪ ،‬انتظار به عالوه اجرا‬

‫میانگین زمان سرویس ;‪Ts‬میانگین زمان صرف شده در حالت ‪Running‬‬

‫استفاده از پردازنده‬

‫به طور خاص‪ ،‬یک زمانبندی مبتنی بر اولویت‪ ،‬که در آن اولویت هر فرآیند مستقل از زمان خدمات مورد انتظار تخصیص داده‬
‫میشود‪ ،‬همان میانگین زمان چرخش و متوسط زمان چرخش عادی شده را به عنوان یک رشته ساده ‪ FCFS‬ارائه میکند‪.‬‬
‫عالوه بر این‪ ،‬وجود یا عدم وجود حق تقدم تفاوتی در این میانگین ها ایجاد نمی کند‪ .‬به استثنای دوره گرد و ‪ ،FCFS‬رشتههای‬
‫زمانبندی مختلفی که تاکنون در نظر گرفته شدهاند‪ ،‬بر اساس زمان خدمات مورد انتظار انتخاب میکنند‪ .‬متأسفانه‪ ،‬به نظر می‬
‫رسد که توسعه مدل های تحلیلی بسته از این رشته ها بسیار دشوار است‪ .‬با این حال‪ ،‬میتوانیم با در نظر گرفتن زمانبندی‬
‫اولویت که در آن اولویت بر اساس زمان سرویس است‪ ،‬ایدهای از عملکرد نسبی چنین الگوریتمهای زمانبندی در مقایسه با‬
‫‪ FCFS‬به دست آوریم‪ .‬اگر زمانبندی بر اساس اولویت انجام شود و اگر فرآیندها بر اساس زمان سرویس به یک کالس اولویت‬

‫‪509‬‬
‫سیستم عامل های داخلی و اصول طراحی‪510.........................................................................................................................‬‬

‫اختصاص داده شوند‪ ،‬تفاوتها ظاهر میشوند‪ .‬جدول ‪ 9.6‬فرمول هایی را نشان می دهد که وقتی دو کالس اولویت را با زمان‬
‫های مختلف سرویس برای هر کالس فرض می کنیم‪ ،‬به دست می آیند‪ .‬در جدول‪ λ ،‬به نرخ ورود اشاره دارد‪ .‬این نتایج را می‬
‫توان به هر تعداد از کالس های اولویت تعمیم داد‪ .‬توجه داشته باشید که فرمول ها برای برنامه ریزی غیر پیشگیرانه در مقابل‬
‫برنامه ریزی پیشگیرانه متفاوت است‪ .‬در مورد دوم‪ ،‬فرض بر این است که یک فرآیند با اولویت پایینتر بالفاصله با آماده شدن‬
‫یک فرآیند با اولویت باالتر قطع میشود‪.‬‬

‫جدول ‪ 9.6‬فرمول های صف های تک سرور با دو دسته اولویت‬

‫‪ .1‬فرضیات‪ .1 :‬نرخ ورود پواسون‪.‬‬


‫‪ .2‬اقالم اولویت ‪ 1‬قبل از اولویت ‪ 2‬سرویس می شوند‪.‬‬
‫‪ .3‬اعزام اول به اقالم با اولویت مساوی‪.‬‬
‫‪ .4‬هیچ موردی در حین ارائه قطع نمی شود‪.‬‬

‫‪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.........................................................................................................................‬‬

‫‪r2 s2‬‬ ‫‪1 - r1‬‬ ‫‪1 s2‬‬

‫‪1-r‬‬

‫به عنوان مثال‪ ،‬اجازه دهید مورد دو کالس اولویت را در نظر بگیریم‪ ،‬با تعداد مساوی ورود فرآیند در هر کالس و با میانگین زمان‬
‫سرویس برای کالس با اولویت پایین تر‪ ،‬پنج برابر کالس اولویت باال‪ .‬بنابراین‪ ،‬ما می خواهیم به فرآیندهای کوتاه تر اولویت‬
‫دهیم‪ .‬شکل ‪ 9.11‬نتیجه کلی را نشان می دهد‪ .‬با ارجحیت دادن به مشاغل کوتاهتر‪ ،‬متوسط زمان چرخش عادی شده در سطوح‬
‫باالتر استفاده بهبود مییابد‪ .‬همانطور که ممکن است انتظار می رود‪ ،‬بهبود با استفاده از ‪ preemption‬بیشتر است‪ .‬با این حال‬
‫توجه داشته باشید که عملکرد کلی چندان تحت تأثیر قرار نمی گیرد‪.‬‬

‫با این حال‪ ،‬زمانی که دو کالس اولویت را جداگانه در نظر می گیریم‪ ،‬تفاوت های قابل توجهی ظاهر می شود‪ .‬شکل ‪ 9.12‬نتایج‬
‫را برای فرآیندهای با اولویت باالتر و کوتاهتر نشان می دهد‪ .‬برای مقایسه‪ ،‬خط باالیی در نمودار فرض میکند که اولویتها‬
‫استفاده نمیشوند‪ ،‬بلکه ما صرفاً به عملکرد نسبی نیمی از تمام فرآیندهایی که زمان پردازش کوتاهتری دارند‪ ،‬نگاه میکنیم‪ .‬دو‬
‫خط دیگر فرض می کنند که این فرآیندها اولویت بیشتری دارند‪ .‬هنگامی که سیستم با استفاده از زمانبندی اولویت بدون‬
‫پیشپرداخت اجرا میشود‪ ،‬پیشرفتها قابل توجه هستند‪ .‬زمانی که از پیشپرداخت استفاده میشود‪ ،‬اهمیت بیشتری دارند‪.‬‬

‫شکل ‪ 9.11‬زمان پاسخ عادی شده کلی‬

‫‪511‬‬
‫سیستم عامل های داخلی و اصول طراحی‪512.........................................................................................................................‬‬

‫شکل ‪ 9.12‬زمان پاسخ عادی برای فرآیندهای کوتاهتر‬

‫شکل ‪ 9.13‬زمان پاسخ عادی برای فرآیندهای طوالنی تر‬

‫شکل ‪ 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 ،‬برای فرآیندهای کوتاه بسیار‬
‫خوب عمل می کند‪.‬‬

‫شکل ‪ 9.14‬نتیجه شبیه سازی برای زمان گردش عادی شده‬

‫‪513‬‬
‫سیستم عامل های داخلی و اصول طراحی‪514.........................................................................................................................‬‬

‫شکل ‪ 9.15‬نتیجه شبیه سازی برای زمان انتظار‬

‫برنامه ریزی اشتراک منصفانه‬

‫همه الگوریتمهای زمانبندی که تاکنون مورد بحث قرار گرفتهاند‪ ،‬مجموعه فرآیندهای آماده را به عنوان یک مجموعه واحد از‬
‫فرآیندها در نظر میگیرند که از میان آنها میتوان فرآیند در حال اجرا بعدی را انتخاب کرد‪ .‬این مجموعه ممکن است بر اساس‬
‫اولویت شکسته شود‪ ،‬اما در غیر این صورت همگن است‪.‬‬

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

‫اصطالح سهم منصفانه نشان دهنده فلسفه پشت چنین زمانبندی است‪ .‬به هر کاربر یک نوع وزن اختصاص داده می شود که‬
‫سهم آن کاربر از منابع سیستم را به عنوان کسری از کل استفاده از آن منابع تعریف می کند‪ .‬به طور خاص‪ ،‬به هر کاربر سهمی‬
‫از پردازنده اختصاص داده می شود‪ .‬چنین طرحی باید به شکلی کم و بیش خطی عمل کند‪ ،‬به طوری که اگر وزن کاربر ‪ 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‬را مسدود کنید‬

‫‪ -‬دستکاری فایل‬

‫‪ -‬کاراکتر ‪ I/O‬کنترل دستگاه‬

‫‪ -‬فرآیندهای کاربر‬

‫این سلسله مراتب باید کارآمدترین استفاده را از دستگاه های ورودی‪/‬خروجی فراهم کند‪ .‬در باند فرآیند کاربر‪ ،‬استفاده از‬
‫تاریخچه اجرا باعث جریمه کردن فرآیندهای محدود به پردازشگر به قیمت فرآیندهای ‪ 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.........................................................................................................................‬‬

‫شکل ‪ 9.16‬مثالی از زمانبندی سهم منصفانه ‪ -‬سه فرآیند‪ ،‬دو گروه‬

‫‪ 9.3‬برنامه ریزی سنتی یونیکس‬

‫در این بخش به بررسی زمانبندی سنتی یونیکس میپردازیم که در یونیکس ‪ SVR3‬و ‪ BSD 4.3‬استفاده میشود‪ .‬این‬
‫سیستم ها در درجه اول در محیط تعاملی اشتراک گذاری زمانی هدف قرار می گیرند‪ .‬الگوریتم زمانبندی به گونهای طراحی‬
‫شده است که زمان پاسخگویی خوبی را برای کاربران تعاملی فراهم کند و در عین حال اطمینان حاصل کند که کارهای‬
‫پسزمینه با اولویت پایین گرسنه نمیمانند‪ .‬اگرچه این الگوریتم در سیستمهای یونیکس مدرن جایگزین شده است‪ ،‬ارزش‬
‫بررسی این رویکرد را دارد زیرا نشاندهنده الگوریتمهای زمانبندی اشتراک زمانی عملی است‪ .‬طرح زمانبندی برای ‪SVR4‬‬
‫شامل یک تطبیق برای نیازمندیهای زمان حقیقی است‪ ،‬و بنابراین بحث آن به فصل ‪ 10‬موکول میشود‪.‬‬

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

‫‪517‬‬
‫سیستم عامل های داخلی و اصول طراحی‪518.........................................................................................................................‬‬

‫‪ CPUj1i2‬اندازه گیری استفاده از پردازنده توسط فرآیند ‪ j‬تا بازه ‪ Pj1i2 i‬اولویت فرآیند ‪ j‬در ابتدای بازه ‪i.‬مقادیر کمتر برابر‬
‫با اولویت های باالتر ‪ Basej‬اولویت پایه فرآیند ‪ nicej j‬ضریب تنظیم قابل کنترل توسط کاربر اولویت هر فرآیند یک بار در‬
‫ثانیه محاسبه می شود و در آن زمان یک تصمیم زمان بندی جدید گرفته می شود‪ .‬هدف از اولویت پایه تقسیم تمام فرآیندها به‬
‫باندهای ثابت سطوح اولویت است‪ CPU .‬و اجزای خوب برای جلوگیری از مهاجرت یک فرآیند به خارج از باند اختصاص داده‬
‫شده تخصیص یافته توسط سطح اولویت پایه محدود شده اند‪ .‬این باندها برای بهینهسازی دسترسی به دستگاههای مسدود مانند‬
‫دیسک و اجازه دادن به سیستم عامل برای پاسخ سریع به تماسهای سیستم استفاده میشوند‪ .‬به ترتیب اولویت‪ ،‬باندها عبارتند‬
‫از‪:‬‬

‫‪ -‬مبادله کننده‬

‫‪ -‬کنترل دستگاه ‪ I/O‬را مسدود کنید‬

‫‪ -‬دستکاری فایل‬

‫‪ -‬کاراکتر ‪ I/O‬کنترل دستگاه‬

‫‪ -‬فرآیندهای کاربر‬

‫این سلسله مراتب باید کارآمدترین استفاده را از دستگاه های ورودی‪/‬خروجی فراهم کند‪ .‬در باند فرآیند کاربر‪ ،‬استفاده از‬
‫تاریخچه اجرا باعث جریمه کردن فرآیندهای محدود به پردازشگر به قیمت فرآیندهای ‪ I/O-Bound‬می شود‪ .‬باز هم‪ ،‬این باید‬
‫کارایی را بهبود بخشد‪ .‬همراه با طرح پیشگیرانه دور رفت‪ ،‬استراتژی زمانبندی به خوبی مجهز است تا الزامات اشتراک زمانی همه‬
‫منظوره را برآورده کند‪.‬‬

‫نمونه ای از زمان بندی فرآیند در شکل ‪ 9.17‬نشان داده شده است‪ .‬فرآیندهای ‪ B ،A‬و ‪ C‬همزمان با اولویت های پایه ‪ 60‬ایجاد‬
‫می شوند مقدار خوب را نادیده می گیریم‪ .‬ساعت سیستم را ‪ 60‬بار در ثانیه قطع می کند و یک شمارنده برای فرآیند در حال‬
‫اجرا افزایش می دهد‪ .‬مثال فرض می کند که هیچ یک از فرآیندها خود را مسدود نمی کنند و هیچ فرآیند دیگری آماده اجرا‬
‫نیست‪ .‬این را با شکل ‪ 9.16‬مقایسه کنید‪.‬‬

‫‪518‬‬
‫سیستم عامل های داخلی و اصول طراحی‪519.........................................................................................................................‬‬

‫شکل ‪ 9.17‬نمونه ای از زمان بندی فرآیند یونیکس سنتی‬

‫‪ 9.4‬خالصه‬

‫سیستم عامل باید سه نوع تصمیم زمان بندی را در رابطه با اجرای فرآیندها اتخاذ کند‪ .‬زمانبندی بلندمدت تعیین میکند که‬
‫چه زمانی فرآیندهای جدید در سیستم پذیرفته میشوند‪ .‬زمانبندی میانمدت بخشی از تابع مبادله است و تعیین میکند که‬
‫یک برنامه به طور جزئی یا کامل در حافظه اصلی آورده شود تا بتوان آن را اجرا کرد‪ .‬زمانبندی کوتاهمدت تعیین میکند که‬
‫کدام فرآیند آماده بعدی توسط پردازنده اجرا شود‪ .‬این فصل بر روی مسائل مربوط به برنامه ریزی کوتاه مدت تمرکز دارد‪.‬‬

‫معیارهای مختلفی در طراحی زمانبندی کوتاه مدت استفاده می شود‪ .‬برخی از این معیارها مربوط به رفتار سیستم است که‬
‫توسط کاربر فردی کاربر محور درک می شود‪ ،‬در حالی که برخی دیگر اثربخشی کلی سیستم را در برآوردن نیازهای همه‬
‫کاربران سیستم محور می بینند‪ .‬برخی از معیارها به طور خاص به معیارهای کمی عملکرد مربوط می شوند‪ ،‬در حالی که برخی‬
‫دیگر ماهیت کیفی دارند‪ .‬از دیدگاه کاربر‪ ،‬زمان پاسخ به طور کلی مهمترین ویژگی یک سیستم است‪ ،‬در حالی که از دیدگاه‬
‫سیستم‪ ،‬توان عملیاتی یا استفاده از پردازنده مهم است‪.‬‬

‫الگوریتمهای مختلفی برای تصمیمگیری برنامهریزی کوتاهمدت در بین تمام فرآیندهای آماده توسعه داده شده است‪:‬‬

‫‪First-Come-First-served: -‬فرآیندی را انتخاب کنید که طوالنی ترین زمان را برای سرویس دهی منتظر بوده است‪.‬‬

‫‪519‬‬
‫سیستم عامل های داخلی و اصول طراحی‪520.........................................................................................................................‬‬

‫‪Round Robin: -‬از برش زمان استفاده کنید تا هر فرآیند در حال اجرا را به مدت کوتاهی از زمان پردازنده محدود کنید و‬
‫بین تمام فرآیندهای آماده بچرخید‪.‬‬

‫‪ -‬کوتاهترین فرآیند بعدی‪ :‬فرآیندی را با کوتاهترین زمان پردازش مورد انتظار انتخاب کنید و از انجام فرآیند جلوگیری نکنید‪.‬‬

‫‪ -‬کوتاهترین زمان باقیمانده‪ :‬فرآیندی را با کمترین زمان باقیمانده مورد انتظار انتخاب کنید‪ .‬هنگامی که فرآیند دیگری آماده‬
‫می شود‪ ،‬ممکن است از یک فرآیند جلوگیری شود‪.‬‬

‫‪ -‬باالترین نسبت پاسخ بعدی‪ :‬تصمیم برنامه ریزی را بر اساس تخمین زمان چرخش نرمال شده قرار دهید‪.‬‬

‫‪ -‬بازخورد‪ :‬مجموعه ای از صف های زمان بندی را ایجاد کنید و فرآیندها را بر اساس تاریخچه اجرا و سایر معیارها به صف ها‬
‫تخصیص دهید‪.‬‬

‫انتخاب الگوریتم زمانبندی به عملکرد مورد انتظار و پیچیدگی اجرا بستگی دارد‪.‬‬

‫‪ 9.5‬خواندن و انیمیشن های توصیه شده‬

‫تحلیلهای صف دقیق سیاستهای زمانبندی مختلف در ‪KLEI04‬و ‪CONW67‬ارائه شدهاند‪.‬‬

‫تصاویر متحرک‬

‫مجموعه ای از انیمیشن که مفاهیم این فصل را نشان می دهد در وب سایت ‪ Premium‬موجود است‪ .‬خواننده تشویق می شود‬
‫که انیمیشن ها را برای تقویت مفاهیم این فصل مشاهده کند‪.‬‬

‫‪520‬‬
‫سیستم عامل های داخلی و اصول طراحی‪521.........................................................................................................................‬‬

‫‪ 9.6‬اصطالحات کلیدی‪ ،‬سؤاالت و مشکالت را مرور کنید‬

‫کلمات کلیدی‬

‫نرخ ورود‬ ‫زمانبندی میان مدت‬ ‫زمانبندی کوتاه مدت‬

‫اعزام کننده‬ ‫بازخورد چند سطحی‬ ‫توان عملیاتی‬

‫میانگین گیری نمایی‬ ‫قابل پیش بینی بودن‬ ‫برش زمان‬

‫زمان بندی سهم منصفانه‬ ‫زمان اقامت‬ ‫زمان چرخش‬

‫انصاف‬ ‫زمان پاسخ‬ ‫استفاده‬

‫اولین خدمت‬ ‫درخواست کتبی‬ ‫زمان انتظار‬

‫اولین ورودی اولین خروجی‬ ‫اولویت برنامه ریزی‬

‫برنامه ریزی بلند مدت‬ ‫زمان سرویس‬

‫بررسی سواالت‬

‫‪ .9.1‬سه نوع زمان بندی پردازنده را به اختصار توضیح دهید‪.‬‬

‫‪ .9.2‬معموالً الزامات عملکرد حیاتی در یک سیستم عامل تعاملی چیست؟‬

‫‪ .9.3‬تفاوت بین زمان چرخش و زمان پاسخ چیست؟‬

‫‪ .9.4‬برای زمانبندی فرآیند‪ ،‬آیا یک مقدار با اولویت پایین نشاندهنده اولویت کم است یا یک اولویت باال؟‬

‫‪ .9.5‬تفاوت بین برنامه ریزی پیشگیرانه و غیر پیشگیرانه چیست؟‬

‫‪ .9.6‬به طور خالصه برنامه ریزی ‪ FCFS‬را تعریف کنید‪.‬‬

‫‪ .9.7‬به طور خالصه برنامه ریزی دوره ای را تعریف کنید‪.‬‬

‫‪ .9.8‬به طور خالصه زمانبندی کوتاهترین فرآیند بعدی را تعریف کنید‪.‬‬


‫‪521‬‬
‫سیستم عامل های داخلی و اصول طراحی‪522.........................................................................................................................‬‬

‫‪ .9.9‬زمانبندی کوتاهترین زمان باقیمانده را به طور خالصه تعریف کنید‪.‬‬

‫‪ .9.10‬به طور خالصه زمانبندی باالترین پاسخ‪-‬نسبت‪-‬بعدی را تعریف کنید‪.‬‬

‫‪ .9.11‬زمان بندی بازخورد را به طور خالصه تعریف کنید‪.‬‬

‫چالش ها و مسائل‬

‫‪ .9.1‬حجم کار زیر را در نظر بگیرید‪:‬‬

‫‪Proc‬‬ ‫‪Burst‬‬ ‫‪Prior‬‬ ‫‪Arrival‬‬


‫‪ess‬‬ ‫‪Time‬‬ ‫‪ity‬‬ ‫‪Time‬‬
‫‪P1‬‬ ‫‪50 ms‬‬ ‫‪4‬‬ ‫‪0 ms‬‬
‫‪P2‬‬ ‫‪20 ms‬‬ ‫‪1‬‬ ‫‪20‬‬
‫‪ms‬‬
‫‪P3‬‬ ‫‪100 ms‬‬ ‫‪3‬‬ ‫‪40‬‬
‫‪ms‬‬
‫‪P4‬‬ ‫‪40 ms‬‬ ‫‪2‬‬ ‫‪60‬‬
‫‪ms‬‬

‫آ‪ .‬برنامه را با استفاده از کوتاهترین زمان باقیمانده‪ ،‬اولویت غیر پیشگیرانه تعداد اولویت کوچکتر نشاندهنده اولویت باالتر و دور‬
‫دور با کوانتومی ‪ 30‬میلیثانیه نشان دهید‪ .‬از نمودار مقیاس زمانی همانطور که در زیر نشان داده شده است برای مثال ‪FCFS‬‬
‫برای نشان دادن زمانبندی برای هر خط مشی زمانبندی درخواستی استفاده کنید‪.‬‬

‫مثال برای ‪ FCFS 1‬واحد ‪ 10‬میلی ثانیه‪:‬‬

‫ب میانگین زمان انتظار سیاست های زمان بندی فوق چقدر است؟‬

‫‪ .9.2‬مجموعه فرآیندهای زیر را در نظر بگیرید‪:‬‬

‫‪Proc‬‬ ‫‪Arrival‬‬ ‫‪Processing‬‬


‫‪ess‬‬ ‫‪Time‬‬ ‫‪Time‬‬
‫‪A‬‬ ‫‪0‬‬ ‫‪3‬‬
‫‪522‬‬
‫سیستم عامل های داخلی و اصول طراحی‪523.........................................................................................................................‬‬

‫‪B‬‬ ‫‪1‬‬ ‫‪5‬‬


‫‪C‬‬ ‫‪3‬‬ ‫‪2‬‬
‫‪D‬‬ ‫‪9‬‬ ‫‪5‬‬
‫‪E‬‬ ‫‪12‬‬ ‫‪5‬‬
‫همان تحلیلی را که در جدول ‪ 9.5‬و شکل ‪ 9.5‬نشان داده شده است را برای این مجموعه انجام دهید‪.‬‬

‫‪ .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.18‬نسبت پاسخ به عنوان تابعی از زمان‬

‫‪ .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‬یک سیستم تعاملی با استفاده از زمانبندی و مبادله دورهای سعی میکند به درخواستهای بیاهمیت پاسخ تضمینی‬
‫بدهد‪ :‬پس از تکمیل یک چرخه دور برگشتی در بین تمام فرآیندهای آماده‪ ،‬سیستم برش زمانی را برای تخصیص به هر فرآیند‬
‫آماده برای فرآیند بعدی تعیین میکند‪ .‬چرخه با تقسیم حداکثر زمان پاسخ بر تعداد فرآیندهایی که نیاز به سرویس دارند‪ .‬آیا‬
‫این یک سیاست معقول است؟‬

‫شکل ‪ Rubbin 9.19‬خودخواه‬

‫‪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‬‬

‫چند پردازنده‪ ،‬چند هسته‪ ،‬و برنامه ریزی در زمان حقیقی‬

‫‪ 10.1‬برنامه ریزی چند پردازنده و چند هسته ای‬

‫مسائل طراحی دانه بندی زمانبندی فرآیند زمانبندی رشته‬

‫زمانبندی موضوعات چند هسته ای‬

‫‪ 10.2‬برنامه ریزی زمان حقیقی‬

‫ویژگی های سیستم عامل های بالدرنگ زمان بندی زمان حقیقی‬

‫زمان بندی مهلت‬

‫نرخ وارونگی اولویت برنامه ریزی یکنواخت‬

‫‪ 10.3‬برنامه ریزی لینوکس‬

‫برنامه ریزی زمان حقیقی‬

‫برنامه ریزی غیر حقیقی‬

‫‪UNIX SVR4 Scheduling 10.4‬‬

‫‪UNIX FreeBSD Scheduling 10.5‬‬

‫کالس های اولویت دار‬

‫‪ SMP‬و پشتیبانی چند هسته ای‬

‫‪ 10.6‬برنامه ریزی ویندوز‬

‫اولویتهای فرآیند و موضوع زمانبندی چند پردازنده‬

‫‪527‬‬
‫سیستم عامل های داخلی و اصول طراحی‪528.........................................................................................................................‬‬

‫‪ 10.7‬خالصه‬

‫‪ 10.8‬مطالعه توصیه شده‬

‫‪ 10.9‬اصطالحات کلیدی‪ ،‬بررسی سواالت و مشکالت‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬مفهوم دانه بندی رشته را درک کنید‪.‬‬

‫‪ -‬در مورد مسائل طراحی کلیدی در زمانبندی رشته چندپردازنده و برخی از رویکردهای کلیدی زمانبندی بحث کنید‪.‬‬

‫‪ -‬الزامات تحمیل شده توسط زمانبندی بالدرنگ را درک کنید‪.‬‬

‫‪ -‬روش های زمان بندی مورد استفاده در لینوکس‪ ،‬یونیکس ‪ SVR4‬و ویندوز ‪ 7‬را توضیح دهید‪.‬‬

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

‫‪ 10.1‬برنامه ریزی چند پردازنده ای و چند هسته ای‬

‫هنگامی که یک سیستم کامپیوتری شامل بیش از یک پردازنده باشد‪ ،‬چندین مسئله جدید در طراحی تابع زمانبندی مطرح می‬
‫شود‪ .‬ما با یک مرور مختصر از چند پردازنده شروع می کنیم و سپس به مالحظات نسبتاً متفاوت زمانی که زمان بندی در سطح‬
‫فرآیند و در سطح رشته انجام می شود نگاه می کنیم‪.‬‬

‫ما می توانیم سیستم های چند پردازنده ای را به صورت زیر طبقه بندی کنیم‪:‬‬

‫‪ -‬چند پردازنده یا خوشه با جفت یا توزیع آزاد‪ :‬از مجموعه ای از سیستم های نسبتاً مستقل تشکیل شده است که هر پردازنده‬
‫حافظه اصلی و کانال های ورودی‪/‬خروجی خود را دارد‪ .‬ما به این نوع پیکربندی در فصل ‪ 16‬می پردازیم‪.‬‬

‫‪528‬‬
‫سیستم عامل های داخلی و اصول طراحی‪529.........................................................................................................................‬‬

‫‪ -‬پردازنده های تخصصی کاربردی‪ :‬به عنوان مثال یک پردازنده ‪ I/O‬است‪ .‬در این مورد‪ ،‬یک پردازنده اصلی و همه منظوره وجود‬
‫دارد‪ .‬پردازنده های تخصصی توسط پردازنده اصلی کنترل می شوند و به آن خدمات ارائه می دهند‪ .‬مسائل مربوط به پردازنده‬
‫های ورودی‪/‬خروجی در فصل ‪ 11‬بررسی شده است‪.‬‬

‫‪ -‬چندپردازنده محکم جفت شده‪ :‬از مجموعه ای از پردازنده ها تشکیل شده است که یک حافظه اصلی مشترک دارند و تحت‬
‫کنترل یکپارچه یک سیستم عامل هستند‪.‬‬

‫نگرانی ما در این بخش مربوط به آخرین دسته و به طور خاص در مورد مسائل مربوط به زمان بندی است‪.‬‬

‫دانه دانه بودن‬

‫یک راه خوب برای مشخص کردن چند پردازنده ها و قرار دادن آنها در زمینه با معماری های دیگر‪ ،‬در نظر گرفتن دانه بندی‬
‫همگام سازی یا فرکانس همگام سازی بین فرآیندهای یک سیستم است‪ .‬ما می توانیم پنج دسته موازی را که در درجه دانه‬
‫بندی متفاوت هستند تشخیص دهیم‪ .‬این موارد در جدول ‪ 10.1‬خالصه شده است‪.‬‬

‫جدول ‪ 10.1‬همگام سازی دانه بندی و فرآیندها‬

‫اندازه دانه‬ ‫فاصله همگام سازی شرح‬


‫دستورالعمل ها‬
‫خوب‬ ‫توازی ذاتی در یک جریان دستورالعمل واحد‬ ‫‪< 20‬‬

‫پردازش موازی یا چند وظیفه ای در یک برنامه واحد متوسط‬ ‫‪20–200‬‬

‫پردازش چندگانه فرآیندهای همزمان در یک محیط درشت‬ ‫–‪200‬‬


‫چندبرنامهنویسی‬ ‫‪2,000‬‬

‫پردازش توزیع شده در گره های شبکه برای تشکیل خیلی درشت‬ ‫–‪2,000‬‬
‫یک محیط محاسباتی واحد‬ ‫‪1M‬‬

‫مستقل‬ ‫چندین فرآیند نامرتبط‬ ‫‪Not‬‬


‫‪applicab‬‬
‫‪le‬‬

‫‪529‬‬
‫سیستم عامل های داخلی و اصول طراحی‪530.........................................................................................................................‬‬

‫موازی سازی مستقل با موازی سازی مستقل‪ ،‬هیچ هماهنگی صریحی بین فرآیندها وجود ندارد‪ .‬هر یک نشان دهنده یک برنامه‬
‫یا شغل مستقل و جداگانه است‪ .‬یک استفاده معمولی از این نوع موازی سازی در سیستم اشتراک زمانی است‪ .‬هر کاربر در حال‬
‫انجام یک برنامه خاص مانند پردازش کلمه یا استفاده از صفحه گسترده است‪ .‬چند پردازنده همان خدماتی را ارائه می دهد که‬
‫یک تک پردازنده چندبرنامه شده است‪ .‬از آنجایی که بیش از یک پردازنده در دسترس است‪ ،‬میانگین زمان پاسخگویی به‬
‫کاربران کمتر خواهد بود‪.‬‬

‫می توان با ارائه یک رایانه شخصی یا ایستگاه کاری برای هر کاربر به افزایش عملکرد مشابهی دست یافت‪ .‬اگر قرار است هر فایل‬
‫یا اطالعاتی به اشتراک گذاشته شود‪ ،‬سیستمهای جداگانه باید به یک سیستم توزیعشده که توسط شبکه پشتیبانی میشود‬
‫متصل شوند‪ .‬این رویکرد در فصل ‪ 16‬مورد بررسی قرار می گیرد‪ .‬از سوی دیگر‪ ،‬یک سیستم مشترک تک پردازنده ای در‬
‫بسیاری از موارد مقرون به صرفه تر از یک سیستم توزیع شده است و امکان صرفه جویی در مقیاس در دیسک ها و سایر‬
‫تجهیزات جانبی را فراهم می کند‪.‬‬

‫موازی سازی درشت و بسیار درشت دانه با موازی سازی درشت و بسیار درشت‪ ،‬هماهنگی بین فرآیندها وجود دارد‪ ،‬اما در سطح‬
‫بسیار ناخالص‪ .‬این نوع وضعیت به راحتی به عنوان مجموعه ای از فرآیندهای همزمان اجرا می شود که بر روی یک تک پردازنده‬
‫چندبرنامه ای اجرا می شوند و می توان آنها را با تغییرات کم یا بدون تغییر در نرم افزار کاربر روی یک پردازنده چندگانه‬
‫پشتیبانی کرد‪.‬‬

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

‫به طور کلی‪ ،‬هر مجموعه ای از فرآیندهای همزمان که نیاز به ارتباط یا همگام سازی دارند‪ ،‬می توانند از استفاده از معماری چند‬
‫پردازنده بهره ببرند‪ .‬در مورد تعامل بسیار نادر بین فرآیندها‪ ،‬یک سیستم توزیع شده می تواند پشتیبانی خوبی ارائه دهد‪ .‬با این‬
‫حال‪ ،‬اگر تعامل تا حدودی مکرر باشد‪ ،‬آنگاه سربار ارتباط در سراسر شبکه ممکن است برخی از افزایش سرعت بالقوه را نفی‬
‫کند‪ .‬در آن صورت‪ ،‬سازمان چندپردازنده مؤثرترین پشتیبانی را ارائه می دهد‪.‬‬

‫‪530‬‬
‫سیستم عامل های داخلی و اصول طراحی‪531.........................................................................................................................‬‬

‫توازی با دانه متوسط در فصل ‪ 4‬دیدیم که یک برنامه کاربردی می تواند به طور موثر به عنوان مجموعه ای از رشته ها در یک‬
‫فرآیند واحد پیاده سازی شود‪ .‬در این مورد‪ ،‬برنامه نویس باید به صراحت موازی بالقوه یک برنامه کاربردی را مشخص کند‪ .‬به‬
‫طور معمول‪ ،‬نیاز به درجه باالیی از هماهنگی و تعامل بین رشتههای یک برنامه وجود دارد که منجر به همگامسازی با دانه‬
‫متوسط میشود‪ .‬در حالی که موازیسازی مستقل‪ ،‬بسیار درشت و درشت را میتوان بر روی یک تکپردازنده چندبرنامهای یا‬
‫چندپردازنده با تأثیر کم یا بدون تأثیر بر عملکرد زمانبندی پشتیبانی کرد‪ ،‬در زمانبندی رشتهها باید زمانبندی را دوباره‬
‫بررسی کنیم‪ .‬از آنجایی که رشته های مختلف یک برنامه به طور مکرر با هم تعامل دارند‪ ،‬تصمیمات زمان بندی مربوط به یک‬
‫رشته ممکن است بر‬

‫عملکرد کل برنامه در ادامه این بخش به این موضوع باز می گردیم‪.‬‬

‫موازیسازی ریزدانه‪ ،‬موازیسازی ریزدانه نشاندهنده استفاده بسیار پیچیدهتر از موازیسازی است که در استفاده از رشته ها‬
‫یافت میشود‪ .‬اگرچه کارهای زیادی روی کاربردهای بسیار موازی انجام شده است‪ ،‬اما تاکنون این یک حوزه تخصصی و پراکنده‬
‫است‪ ،‬با رویکردهای مختلف‪.‬‬

‫فصل ‪ 4‬مثالی از استفاده از ‪ granularity‬برای نرم افزار بازی ‪ Valve‬ارائه می دهد‪.‬‬

‫مسائل طراحی‬

‫زمانبندی روی چند پردازنده شامل سه موضوع مرتبط با یکدیگر است‪:‬‬

‫‪ -‬تخصیص فرآیندها به پردازنده ها‬

‫‪ -‬استفاده از برنامه نویسی چندگانه بر روی پردازنده های جداگانه‬

‫‪ -‬ارسال واقعی یک فرآیند‬

‫در بررسی این سه موضوع‪ ،‬مهم است که در نظر داشته باشید که رویکرد اتخاذ شده‪ ،‬به طور کلی‪ ،‬به درجه جزئیات برنامه ها و‬
‫تعداد پردازنده های موجود بستگی دارد‪.‬‬

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

‫‪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.........................................................................................................................‬‬

‫شکل ‪ 10.1‬مقایسه عملکرد زمانبندی برای یک و دو پردازنده‬

‫زمان بندی موضوع‬

‫همانطور که دیدیم‪ ،‬با رشته ها‪ ،‬مفهوم اجرا از بقیه تعریف یک فرآیند جدا می شود‪ .‬یک برنامه کاربردی را می توان به عنوان‬
‫مجموعه ای از رشته ها پیاده سازی کرد که با هم همکاری می کنند و در فضای آدرس یکسانی اجرا می شوند‪.‬‬

‫در یک تک پردازنده‪ thread ،‬ها می توانند به عنوان کمک ساختار برنامه و همپوشانی ‪ I/O‬با پردازش استفاده شوند‪ .‬به دلیل‬
‫حداقل جریمه در انجام سوئیچ رشته در مقایسه با سوئیچ فرآیند‪ ،‬این مزایا با هزینه کمی محقق می شوند‪ .‬با این حال‪ ،‬قدرت‬
‫کامل ‪ thread‬ها در یک سیستم چند پردازنده آشکار می شود‪ .‬در این محیط می توان از رشته ها برای بهره برداری از موازی‬
‫سازی واقعی در یک برنامه استفاده کرد‪ .‬اگر رشته های مختلف یک برنامه به طور همزمان بر روی پردازنده های جداگانه اجرا‬
‫شوند‪ ،‬دستاوردهای چشمگیری در عملکرد ممکن است‪ .‬با این حال‪ ،‬میتوان نشان داد که برای برنامههایی که نیاز به تعامل‬
‫قابلتوجهی بین رشتهها دارند موازی دانههای متوسط‪ ،‬تفاوتهای کوچک در مدیریت رشته و زمانبندی میتواند تأثیر عملکرد‬
‫قابلتوجهی داشته باشد ‪ANDE89.‬‬

‫در میان بسیاری از پیشنهادها برای زمانبندی رشتههای چند پردازندهای و تخصیص پردازنده‪ ،‬چهار رویکرد کلی برجسته‬
‫هستند‪:‬‬

‫‪ -‬اشتراک گذاری بار‪ :‬فرآیندها به پردازنده خاصی اختصاص داده نمی شوند‪ .‬یک صف سراسری از رشتههای آماده حفظ میشود‬
‫و هر پردازنده در حالت بیکار‪ ،‬یک رشته را از صف انتخاب میکند‪ .‬اصطالح اشتراک بار برای تمایز این استراتژی از طرحهای‬
‫متعادلسازی بار استفاده میشود که در آن کار بر مبنای دائمیتر تخصیص داده میشود به عنوان مثال‪FEIT90a ،‬را ببینید‪.‬‬

‫‪535‬‬
‫سیستم عامل های داخلی و اصول طراحی‪536.........................................................................................................................‬‬

‫‪ -‬برنامهریزی گروهی‪ :‬مجموعهای از رشتههای مرتبط برنامهریزی شده است تا روی مجموعهای از پردازندهها به صورت همزمان‬
‫اجرا شوند‪.‬‬

‫‪ -‬تخصیص پردازنده اختصاصی‪ :‬این برعکس رویکرد اشتراک بار است و زمانبندی ضمنی تعریف شده توسط تخصیص رشته ها به‬
‫پردازنده ها را ارائه می دهد‪ .‬به هر برنامه در طول مدت اجرای خود‪ ،‬تعدادی پردازنده برابر تعداد رشته های موجود در برنامه‬
‫اختصاص می یابد‪ .‬هنگامی که برنامه خاتمه می یابد‪ ،‬پردازنده ها برای تخصیص احتمالی به برنامه دیگر به مجموعه عمومی باز‬
‫می گردند‪.‬‬

‫‪ -‬زمانبندی پویا‪ :‬تعداد رشتهها در یک فرآیند را میتوان در طول اجرا تغییر داد‪.‬‬

‫اشتراک بار اشتراک گذاری بار شاید ساده ترین رویکرد باشد و به طور مستقیم از یک محیط تک پردازنده منتقل می شود‪.‬‬
‫چندین مزیت دارد‪:‬‬

‫‪ -‬بار به طور مساوی در بین پردازنده ها توزیع می شود‪ ،‬و این اطمینان را می دهد که هیچ پردازنده ای بیکار نباشد در حالی که‬
‫کار برای انجام دادن در دسترس است‪.‬‬

‫‪ -‬هیچ زمانبندی متمرکزی مورد نیاز نیست‪ .‬هنگامی که یک پردازنده در دسترس است‪ ،‬روال برنامه ریزی سیستم عامل بر روی‬
‫آن پردازنده اجرا می شود تا رشته بعدی انتخاب شود‪.‬‬

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

‫‪LEUT90‬سه نسخه مختلف اشتراک بار را تحلیل میکند‪:‬‬

‫‪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‬درصد کاهش می دهد‪.‬‬

‫تقسیم یکنواخت‬ ‫تقسیم بر وزن‬

‫شکل ‪ 10.2‬نمونه ای از گروه های زمان بندی با چهار و یک رشته ‪FEIT90b‬‬

‫تخصیص پردازنده اختصاصی یک شکل افراطی از زمانبندی گروهی‪ ،‬که در ‪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‬تجاوز کند و بنابراین تعداد‬
‫کل فرآیندهای سیستم از تعداد پردازنده ها بیشتر شود‪ .‬عالوه بر این‪ ،‬هرچه تعداد رشته ها بیشتر باشد‪ ،‬عملکرد بدتر میشود‪،‬‬
‫زیرا فرکانس بیشتری از پیشپرداخت رشته ها و زمانبندی مجدد وجود دارد‪ .‬این پیشگیری بیش از حد منجر به ناکارآمدی‬
‫بسیاری از منابع میشود‪ ،‬از جمله زمان صرف شده برای خروج یک رشته معلق برای خروج از بخش بحرانی‪ ،‬زمان تلف شده در‬
‫تعویض فرآیند و رفتار حافظه پنهان ناکارآمد‪ .‬نویسندگان نتیجه می گیرند که یک استراتژی موثر محدود کردن تعداد رشته های‬
‫فعال به تعداد پردازنده های سیستم است‪ .‬اگر اکثر برنامهها یا یک رشته باشند یا بتوانند از ساختار صف‪-‬تسک استفاده کنند‪،‬‬
‫این کار استفاده مؤثر و نسبتاً کارآمدی از منابع پردازنده را فراهم میکند‪.‬‬

‫جدول ‪ 10.2‬افزایش سرعت برنامه به عنوان تابعی از تعداد رشته ها‬

‫تعداد موضوعات در هر‬ ‫ضرب ماتریس‬


‫‪FF‬‬
‫برنامه‬
‫‪T‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪2‬‬ ‫‪1.8‬‬ ‫‪1.8‬‬
‫‪4‬‬ ‫‪3.8‬‬ ‫‪3.8‬‬
‫‪8‬‬ ‫‪6.5‬‬ ‫‪6.1‬‬
‫‪12‬‬ ‫‪5.2‬‬ ‫‪5.1‬‬
‫‪16‬‬ ‫‪3.9‬‬ ‫‪3.8‬‬
‫‪20‬‬ ‫‪3.3‬‬ ‫‪3‬‬
‫‪24‬‬ ‫‪2.8‬‬ ‫‪2.4‬‬

‫‪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‬را ببینید‪.‬‬

‫شکل ‪ 10.3‬معماری بولدوزر ‪AMD‬‬

‫‪543‬‬
‫سیستم عامل های داخلی و اصول طراحی‪544.........................................................................................................................‬‬

‫‪ 10.2‬برنامه ریزی در زمان حقیقی‬

‫پیش زمینه‬

‫محاسبات بالدرنگ در حال تبدیل شدن به یک رشته مهم است‪ .‬سیستم عامل‪ ،‬و به ویژه زمانبندی‪ ،‬شاید مهمترین جزء یک‬
‫سیستم بالدرنگ باشد‪ .‬نمونه هایی از کاربردهای فعلی سیستم های بالدرنگ شامل کنترل آزمایش های آزمایشگاهی‪ ،‬کنترل‬
‫فرآیند در کارخانه های صنعتی‪ ،‬روباتیک‪ ،‬کنترل ترافیک هوایی‪ ،‬مخابرات و سیستم های فرماندهی و کنترل نظامی است‪.‬‬
‫سیستمهای نسل بعدی شامل زمیننورد مستقل‪ ،‬کنترلکنندههای روباتهای با مفاصل االستیک‪ ،‬سیستمهای موجود در تولید‬
‫هوشمند‪ ،‬ایستگاه فضایی و اکتشافات زیردریایی خواهند بود‪.‬‬

‫محاسبات بالدرنگ ممکن است به عنوان آن نوع محاسباتی تعریف شود که در آن صحت سیستم نه تنها به نتیجه منطقی‬
‫محاسبات بلکه به زمان تولید نتایج نیز بستگی دارد‪ .‬ما میتوانیم یک سیستم بالدرنگ را با تعریف اینکه منظور از یک فرآیند یا‬
‫وظیفه بالدرنگ تعریف میکنیم‪ 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.........................................................................................................................‬‬

‫درخواست از یک فرآیند‬ ‫فرآیند بیدرنگ به صف اجرا اضافه شد تا در‬


‫بالدرنگ‬ ‫انتظار قطعه بعدی باشد‬

‫فرآیند بالدرنگ‬

‫زمان بندی‬

‫(الف) زمانبندی پیشگیرانه دور برگشت‬

‫درخواست از یک فرآیند بالدرنگ‬


‫فرآیند بیدرنگ به صف اجرا اضافه شد‬

‫روند فعلی‬ ‫فرآیند بالدرنگ‬

‫زمان بندی‬ ‫فرآیند فعلی مسدود یا تکمیل شده است‬

‫(ب) زمانبندی غیر پیشگیرانه اولویت محور‬

‫درخواست از یک فرآیند بالدرنگ‬ ‫منتظر نقطه پیشدستی‬


‫بعدی باشید‬

‫روند فعلی‬ ‫فرآیند بالدرنگ‬

‫نقطه‬
‫پیشدستی‬
‫(ج) زمانبندی پیشگیرانه مبتنی بر اولویت در نقاط پیشگیرانه‬

‫درخواست از یک‬ ‫فرآیند بالدرنگ از فرآیند فعلی جلوگیری می کند‬


‫فرآیند بالدرنگ‬ ‫و بالفاصله اجرا می شود‬

‫روند فعلی‬ ‫فرآیند بالدرنگ‬

‫(د) زمانبندی پیشگیرانه فوری‬

‫شکل ‪ 10.4‬برنامه ریزی فرآیند زمان حقیقی‬

‫یک کار در حال رسیدن فقط در صورتی برای اجرا پذیرفته می شود که امکان برآورده کردن محدودیت های زمانی آن وجود‬
‫داشته باشد‪ .‬یکی از نتایج تحلیل امکان سنجی‪ ،‬برنامه یا برنامه ای است که برای تصمیم گیری در مورد زمان اعزام این کار‬
‫استفاده می شود‪.‬‬

‫‪ -‬رویکردهای بهترین تالش پویا‪ :‬هیچ تحلیل امکان سنجی انجام نشده است‪ .‬این سیستم سعی می کند تمام ضرب االجل ها را‬
‫رعایت کند و هر فرآیند شروع شده ای را که مهلت آن از دست رفته است‪ ،‬لغو می کند‪.‬‬
‫‪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.3‬نمایه اجرای دو وظیفه ادواری‬

‫‪Process‬‬ ‫‪Arrival‬‬ ‫‪Execution‬‬ ‫‪Ending‬‬


‫‪Time‬‬ ‫‪Time‬‬ ‫‪Deadline‬‬
‫‪A1‬‬ ‫‪0‬‬ ‫‪10‬‬ ‫‪20‬‬
‫‪A2‬‬ ‫‪20‬‬ ‫‪10‬‬ ‫‪40‬‬
‫‪A3‬‬ ‫‪40‬‬ ‫‪10‬‬ ‫‪60‬‬
‫‪A4‬‬ ‫‪60‬‬ ‫‪10‬‬ ‫‪80‬‬
‫‪A5‬‬ ‫‪80‬‬ ‫‪10‬‬ ‫‪100‬‬
‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬
‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬
‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬
‫‪B1‬‬ ‫‪0‬‬ ‫‪25‬‬ ‫‪50‬‬
‫‪B2‬‬ ‫‪50‬‬ ‫‪25‬‬ ‫‪100‬‬
‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬
‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬
‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬

‫کامپیوتر میتواند هر ‪ 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.4‬نمایه اجرای پنج وظیفه دوره ای‬

‫فرآیند‬ ‫زمان رسیدن‬ ‫زمان اجرا‬ ‫مهلت شروع‬


‫‪A‬‬ ‫‪10‬‬ ‫‪20‬‬ ‫‪110‬‬
‫‪B‬‬ ‫‪20‬‬ ‫‪20‬‬ ‫‪20‬‬
‫‪C‬‬ ‫‪40‬‬ ‫‪20‬‬ ‫‪50‬‬
‫‪D‬‬ ‫‪50‬‬ ‫‪20‬‬ ‫‪90‬‬
‫‪E‬‬ ‫‪60‬‬ ‫‪20‬‬ ‫‪70‬‬
‫‪555‬‬
‫سیستم عامل های داخلی و اصول طراحی‪556.........................................................................................................................‬‬

‫باالترین نرخ و‬
‫باالترین اولویت‬
‫کار‬

‫کمترین نرخ و‬
‫کمترین اولویت‬
‫کار‬

‫شکل ‪ 10.7‬مجموعه وظایف با ‪RMS WARR91‬‬

‫شکل ‪ 10.8‬پارامترهای مربوطه را برای وظایف دوره ای نشان می دهد‪ .‬دوره وظیفه‪ ،T ،‬مقدار زمان بین رسیدن یک نمونه از کار‬
‫و رسیدن نمونه بعدی از کار است‪ .‬نرخ یک کار به هرتز به سادگی معکوس دوره آن بر حسب ثانیه است‪ .‬به عنوان مثال‪ ،‬یک کار‬
‫با دوره ‪ 50‬میلی ثانیه با نرخ ‪ 20‬هرتز انجام می شود‪ .‬به طور معمول‪ ،‬پایان دوره یک کار‪ ،‬مهلت سخت کار نیز است‪ ،‬اگرچه‬
‫ممکن است برخی از کارها مهلت های زودتر داشته باشند‪ .‬زمان اجرا یا محاسبه‪ ،C ،‬مقدار زمان پردازش مورد نیاز برای هر وقوع‬
‫کار است‪ .‬باید واضح باشد که در یک سیستم تک پردازنده‪ ،‬زمان اجرا نباید بیشتر از دوره باشد باید ‪ C≤ T‬داشته باشد‪ .‬اگر یک‬
‫کار دوره ای همیشه تا تکمیل انجام شود‪ ،‬یعنی اگر هیچ نمونه ای از کار به دلیل نارسایی از خدمت رد نشود‪.‬‬

‫منابع کارآمد‪ ،‬پس استفاده از پردازنده توسط این وظیفه ‪ U = C/T‬است‪ .‬به عنوان مثال‪ ،‬اگر یک کار دارای دوره زمانی ‪80‬‬
‫میلیثانیه و زمان اجرای آن ‪ 55‬میلیثانیه باشد‪ ،‬میزان استفاده از پردازنده آن ‪ 0.6875 = 55/80‬است‪.‬‬

‫یکی از معیارهای اثربخشی الگوریتم زمان بندی دوره ای این است که آیا یا نه‪ ،‬تضمین می کند که تمام ضرب االجل های‬
‫سخت رعایت شده است‪ .‬فرض کنید ‪ n‬وظیفه داریم که هر کدام یک دوره و زمان اجرای ثابت دارند‪ .‬سپس برای اینکه بتوان‬
‫تمام مهلتها را رعایت کرد‪ ،‬نابرابری زیر باید برقرار باشد‪:‬‬

‫شکل ‪ 10.8‬نمودار زمان بندی وظایف دوره ای‬

‫‪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‬همه وظایف با موفقیت برنامه ریزی می شوند‪.‬‬

‫جدول ‪ 10.5‬مقدار کران باالیی ‪RMS‬‬

‫‪n‬‬ ‫‪n121>n - 12‬‬


‫‪1‬‬ ‫‪1.0‬‬
‫‪2‬‬ ‫‪0.828‬‬
‫‪3‬‬ ‫‪0.779‬‬
‫‪4‬‬ ‫‪0.756‬‬
‫‪5‬‬ ‫‪0.743‬‬
‫‪6‬‬ ‫‪0.734‬‬
‫‪r‬‬ ‫‪r‬‬
‫‪r‬‬ ‫‪r‬‬
‫‪r‬‬ ‫‪r‬‬

‫‪557‬‬
‫سیستم عامل های داخلی و اصول طراحی‪558.........................................................................................................................‬‬

‫∞‬ ‫‪ln 2 ≈ 0.693‬‬


‫همچنین می توان نشان داد که کران باالیی معادله ‪ 10.1‬برای برنامه ریزی زودترین ضرب االجل برقرار است‪ .‬بنابراین‪ ،‬میتوان‬
‫به استفاده کلی بیشتر از پردازنده دست یافت و بنابراین وظایف دورهای بیشتری را با زمانبندی زودهنگام انجام داد‪ .‬با این‬
‫وجود‪ RMS ،‬به طور گسترده برای استفاده در کاربردهای صنعتی مورد استفاده قرار گرفته است‪SHA91 .‬توضیح زیر را ارائه‬
‫می دهد‪:‬‬

‫‪ .1‬تفاوت عملکرد در عمل کم است‪ .‬حد باالیی معادله ‪ 10.2‬یک مرز محافظه کارانه است و در عمل‪ ،‬استفاده تا ‪ %90‬اغلب به‬
‫دست می آید‪.‬‬

‫‪ .2‬اکثر سیستمهای بالدرنگ سخت دارای اجزای نرمافزار بالدرنگ هستند‪ ،‬مانند نمایشگرهای غیر بحرانی خاص و‬
‫خودآزماییهای داخلی که میتوانند در سطوح اولویت پایینتر اجرا شوند تا زمان پردازشگر را که با زمانبندی ‪ RMS‬استفاده‬
‫نمیشود‪ ،‬جذب کنند‪ .‬وظایف زمان حقیقی‬

‫‪ .3‬دستیابی به ثبات با ‪ RMS‬آسانتر است‪ .‬هنگامی که یک سیستم به دلیل اضافه بار یا خطاهای گذرا نمی تواند تمام ضرب‬
‫االجل ها را برآورده کند‪ ،‬ضرب االجل وظایف ضروری باید تضمین شود مشروط بر اینکه این زیرمجموعه وظایف قابل برنامه‬
‫ریزی باشد‪.‬‬

‫در رویکرد تخصیص اولویت ایستا‪ ،‬تنها باید اطمینان حاصل شود که وظایف اساسی دارای اولویت های نسبتاً باالیی هستند‪ .‬این‬
‫را می توان در ‪ RMS‬با ساختاردهی وظایف ضروری برای داشتن دوره های کوتاه مدت یا با اصالح اولویت های ‪ RMS‬برای در‬
‫نظر گرفتن وظایف ضروری انجام داد‪ .‬با برنامه ریزی زودهنگام‪ ،‬اولویت یک کار دوره ای از یک دوره به دوره دیگر تغییر می کند‪.‬‬
‫این امر اطمینان از اینکه وظایف اساسی به ضرب االجل خود می رسند دشوارتر می شود‪.‬‬

‫وارونگی اولویت‬

‫وارونگی اولویت پدیدهای است که میتواند در هر طرح زمانبندی پیشگیرانه مبتنی بر اولویت رخ دهد‪ ،‬اما به ویژه در زمینه‬
‫زمانبندی بالدرنگ مرتبط است‪ .‬شناخته شده ترین نمونه وارونگی اولویت شامل مأموریت رهیاب مریخ بود‪ .‬این ربات مریخ نورد‬
‫در ‪ 4‬جوالی ‪ 1997‬بر روی مریخ فرود آمد و شروع به جمع آوری و انتقال داده های حجیم به زمین کرد‪ .‬اما چند روز پس از‬
‫مأموریت‪ ،‬نرمافزار فرودگر شروع به بازنشانی کلی سیستم کرد که هر کدام منجر به از دست رفتن دادهها میشد‪ .‬پس از تالش‬
‫زیاد توسط تیم آزمایشگاه پیشرانه جت ‪JPL‬که ‪ Pathfinder‬را ساخت‪ ،‬مشکل در وارونگی اولویت ‪ JONE97‬ردیابی شد‪.‬‬

‫در هر طرح زمانبندی اولویت‪ ،‬سیستم باید همیشه وظیفه را با باالترین اولویت اجرا کند‪ .‬وارونگی اولویت زمانی اتفاق میافتد که‬
‫شرایط درون سیستم یک کار با اولویت باالتر را مجبور میکند تا برای یک کار با اولویت پایینتر منتظر بماند‪ .‬یک مثال ساده از‬

‫‪558‬‬
‫سیستم عامل های داخلی و اصول طراحی‪559.........................................................................................................................‬‬

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

‫یک وضعیت جدی تر به عنوان وارونگی اولویت نامحدود نامیده می شود‪ ،‬که در آن مدت زمان وارونگی اولویت نه تنها به زمان‬
‫مورد نیاز برای مدیریت یک منبع مشترک‪ ،‬بلکه به اقدامات غیرقابل پیش بینی سایر وظایف نامرتبط بستگی دارد‪ .‬وارونگی‬
‫اولویت تجربه شده در نرم افزار ‪ Pathfinder‬نامحدود بود و نمونه خوبی از این پدیده است‪ .‬بحث ما از ‪TIME02‬پیروی می‬
‫کند‪ .‬نرم افزار ‪ Pathfinder‬سه وظیفه زیر را به ترتیب اولویت شامل می شود‪:‬‬

‫‪T1:‬به طور دوره ای سالمت سیستم ها و نرم افزار فضاپیما را بررسی می کند ‪T2:‬داده های تصویر را پردازش می کند‬

‫‪T3:‬یک آزمایش گاه به گاه در مورد وضعیت تجهیزات انجام می دهد‬

‫پس از اجرای ‪ ،T1‬یک تایمر را مجدداً به حداکثر مقدار خود راه اندازی می کند‪ .‬اگر این تایمر منقضی شود‪ ،‬فرض بر این است‬
‫که یکپارچگی نرم افزار فرودگر به نوعی به خطر افتاده است‪ .‬پردازنده متوقف میشود‪ ،‬همه دستگاهها ریست میشوند‪ ،‬نرمافزار‬
‫بهطور کامل بارگیری میشود‪ ،‬سیستمهای فضاپیما آزمایش میشوند و سیستم دوباره شروع به کار میکند‪ .‬این توالی بهبودی تا‬
‫روز بعد کامل نمی شود‪ T1 .‬و ‪ T3‬یک ساختار داده مشترک دارند که توسط یک سمافور باینری محافظت می شود‪ .‬شکل‬
‫‪ a10.9‬دنباله ای را نشان می دهد که باعث وارونگی اولویت شده است‪:‬‬

‫‪ t1: T3‬شروع به اجرا می کند‪.‬‬

‫‪ t2: T3‬سمافور ‪ s‬را قفل می کند و وارد بخش بحرانی آن می شود‪.‬‬

‫‪ 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‬را حل می کند‪ .‬توالی رویدادهای مربوطه به شرح زیر است‪:‬‬

‫‪ t1: T3‬شروع به اجرا می کند‪.‬‬

‫‪ t2: T3‬سمافور ‪ s‬را قفل می کند و وارد بخش بحرانی آن می شود‪.‬‬

‫‪ t3: T1‬که اولویت باالتری نسبت به ‪ T3‬دارد‪ ،‬از ‪ T3‬جلوگیری می کند و اجرا را آغاز می کند‪ t4: T1 .‬سعی می کند وارد‬
‫بخش بحرانی خود شود اما به دلیل سمافور مسدود می شود‬

‫توسط ‪ T3‬قفل شده است‪ .‬به ‪ T3‬فورا و به طور موقت همان اولویت ‪ T1‬اختصاص داده می شود‪ T3 .‬اجرا را در بخش بحرانی‬
‫خود از سر می گیرد‪.‬‬

‫‪ t5: T2‬آماده اجرا است‪ ،‬اما از آنجایی که ‪ T3‬اکنون اولویت بیشتری دارد‪ T2 ،‬نمی تواند از ‪ T3‬جلوگیری کند‪.‬‬

‫(الف) وارونگی اولویت نامحدود‬

‫‪560‬‬
‫سیستم عامل های داخلی و اصول طراحی‪561.........................................................................................................................‬‬

‫ب) استفاده از وراثت اولویت دار‬

‫اجرای عادی‬ ‫اجرا در بخش بحرانی‬

‫شکل ‪ 10.9‬وارونگی اولویت‬

‫‪ t6: T3‬بخش بحرانی خود را ترک می کند و قفل سمافور را باز می کند‪ :‬سطح اولویت آن به سطح پیش فرض قبلی کاهش می‬
‫یابد‪ T1 .‬از ‪ T3‬جلوگیری می کند‪ ،‬سمافور را قفل می کند و وارد بخش بحرانی آن می شود‪.‬‬

‫‪ t7: T1‬به دالیلی غیر مرتبط با ‪ T2‬به حالت تعلیق درآمده و ‪ T2‬شروع به اجرا می کند‪ .‬این رویکردی بود که برای حل مشکل‬
‫‪ Pathfinder‬اتخاذ شد‪ .‬در رویکرد سقف اولویت‪ ،‬یک اولویت با هر منبع مرتبط است‪ .‬اولویت اختصاص داده شده به یک منبع‬
‫یک سطح باالتر از اولویت کاربر با باالترین اولویت آن است‪ .‬سپس زمانبند به صورت پویا این اولویت را به هر کاری که به منبع‬
‫دسترسی دارد اختصاص می دهد‪ .‬پس از اتمام کار با منبع‪ ،‬اولویت آن به حالت عادی باز می گردد‪.‬‬

‫‪ 10.3‬برنامه ریزی لینوکس‬

‫برای لینوکس ‪ 2.4‬و پیش از آن‪ ،‬لینوکس یک قابلیت زمانبندی بیدرنگ همراه با یک زمانبندی برای فرآیندهای غیرحقیقی‬
‫ارائه کرد که از الگوریتم زمانبندی سنتی یونیکس که در بخش ‪ 9.3‬توضیح داده شد‪ ،‬استفاده میکرد‪ .‬لینوکس ‪ 2.6‬اساساً دارای‬
‫همان قابلیت زمانبندی بالدرنگ نسخههای قبلی و یک زمانبندی اصالحشده اساسی برای فرآیندهای غیرحقیقی است‪ .‬این دو‬
‫حوزه را به ترتیب بررسی می کنیم‪.‬‬

‫‪561‬‬
‫سیستم عامل های داخلی و اصول طراحی‪562.........................................................................................................................‬‬

‫برنامه ریزی زمان حقیقی‬

‫سه کالس زمانبندی لینوکس به شرح زیر است‪:‬‬

‫‪r SCHED_FIFO:‬رشتههای همزمان اول به اول‬

‫‪r SCHED_RR:‬رشتههای همزمان دورگرد‬

‫‪r SCHED_OTHER:‬رشتههای دیگر‪ ،‬غیر همزمان‬

‫در هر کالس‪ ،‬چندین اولویت ممکن است استفاده شود‪ ،‬با اولویتهای کالسهای همزمان باالتر از اولویتهای کالس‬
‫‪SCHED_OTHER.‬مقادیر پیشفرض به شرح زیر است‪ :‬کالسهای اولویت بالدرنگ از ‪ 0‬تا ‪ 99‬شامل‪ ،‬و کالسهای‬
‫‪ SCHED_ OTHER‬از ‪ 100‬تا ‪ 139‬متغیر هستند‪ .‬عدد کمتر برابر با اولویت باالتر است‪.‬‬

‫برای موضوعات ‪ ،FIFO‬قوانین زیر اعمال می شود‪:‬‬

‫‪ .1‬سیستم یک رشته ‪ FIFO‬در حال اجرا را قطع نمی کند مگر در موارد زیر‪:‬‬

‫آ‪ .‬یکی دیگر از موضوعات ‪ FIFO‬با اولویت باالتر آماده می شود‪.‬‬

‫ب رشته ‪ FIFO‬در حال اجرا در انتظار یک رویداد‪ ،‬مانند ‪ ،I/O‬مسدود می شود‪.‬‬

‫ج رشته ‪ 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‬است‪ .‬یک رشته در این‬
‫کالس تنها در صورتی می تواند اجرا شود که هیچ رشته ای در زمان حقیقی آماده اجرا نباشد‪.‬‬

‫(الف) اولویت های نخ نسبی‬ ‫(ب) جریان با زمانبندی‪FIFO‬‬

‫(ج) جریان با برنامه ریزی‪RR‬‬

‫شکل ‪ 10.10‬نمونه ای از زمان بندی بالدرنگ لینوکس‬

‫برنامه ریزی غیرحقیقی‬

‫زمانبندی لینوکس ‪ 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‬امکان پذیر نیست‪ .‬این بدان معنی است که یک کار با اولویت پایین تر می تواند‬
‫اجرا شود در حالی که یک کار با اولویت باالتر منتظر تکمیل آن است‪.‬‬

‫شکل ‪ 10.11‬ساختارهای داده زمانبندی لینوکس برای هر پردازنده‬

‫برای اصالح این مشکالت‪ ،‬لینوکس ‪ 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‬هرگز تغییر نمی کنند‪.‬‬

‫اثر این قوانین این است که جابجایی بین لیست صف فعال و لیست صف منقضی شده تنها زمانی اتفاق می افتد که هیچ کار‬
‫بالدرنگ آماده ای در انتظار اجرا نباشد‪.‬‬

‫‪ 10.4‬برنامه ریزی ‪UNIX SVR4‬‬

‫الگوریتم زمانبندی مورد استفاده در ‪ UNIX SVR4‬یک بازنگری کامل از الگوریتم زمانبندی مورد استفاده در سیستمهای‬
‫یونیکس قبلی است شرح شده در بخش ‪ .9.3‬الگوریتم جدید به گونهای طراحی شده است که باالترین اولویت را به فرآیندهای‬
‫بالدرنگ‪ ،‬باالترین اولویت را به فرآیندهای حالت هسته‪ ،‬و کمترین اولویت را به سایر فرآیندهای حالت کاربر‪ ،‬که فرآیندهای‬
‫اشتراک زمانی نامیده میشوند‪ ،‬بدهد‪.‬‬

‫دو تغییر عمده در ‪ SVR4‬به شرح زیر است‪:‬‬

‫‪ .1‬اضافه شدن یک برنامه زمانبندی اولویت ایستا پیشگیرانه و معرفی مجموعه ای از ‪ 160‬سطح اولویت تقسیم شده به سه کالس‬
‫اولویت‪.‬‬

‫‪ .2‬درج امتیازهای پیش دستی‪ .‬از آنجایی که هسته اصلی پیشگیرانه نیست‪ ،‬فقط می تواند به مراحل پردازشی تقسیم شود که‬
‫باید بدون وقفه کامل شوند‪ .‬در بین مراحل پردازش‪ ،‬مکانهای امنی که به عنوان نقاط ‪ preemption‬شناخته میشوند‪،‬‬
‫شناسایی شدهاند که هسته میتواند با خیال راحت پردازش را قطع کند و یک فرآیند جدید را برنامهریزی کند‪ .‬مکان امن به‬
‫عنوان منطقه ای از کد تعریف می شود که در آن تمام ساختارهای داده هسته یا به روز و سازگار هستند یا از طریق یک سمافور‬
‫قفل شده اند‪ .‬شکل ‪ 160 10.12‬سطح اولویت تعریف شده در ‪ SVR4‬را نشان می دهد‪ .‬هر فرآیند به یکی از سه کالس اولویت‬
‫تعلق دارد و یک سطح اولویت در آن کالس به آن اختصاص داده می شود‪ .‬کالس ها به شرح زیر است‪:‬‬

‫‪ -‬زمان حقیقی ‪ :100-159‬فرآیندهای این سطوح اولویت تضمین می شوند که قبل از هر هسته یا فرآیند اشتراک زمانی انتخاب‬
‫شوند‪ .‬عالوه بر این‪ ،‬فرآیندهای بالدرنگ می توانند از نقاط ‪ preemption‬برای جلوگیری از فرآیندهای هسته و فرآیندهای‬
‫کاربر استفاده کنند‪.‬‬

‫‪566‬‬
‫سیستم عامل های داخلی و اصول طراحی‪567.........................................................................................................................‬‬

‫کالس‬ ‫ارزش‬ ‫ترتیب‬


‫اولویت‬ ‫جهانی‬ ‫زمان بندی‬

‫شکل ‪ 10.12‬صف های اعزام ‪SVR4‬‬

‫شکل ‪ 10.13‬کالس های اولویت ‪SVR4‬‬

‫‪r Kernel 99-60:‬فرآیندهای این سطوح اولویت تضمین شده برای اجرا قبل از هر فرآیند اشتراک زمانی انتخاب می شوند‪،‬‬
‫اما باید به فرآیندهای زمان حقیقی موکول شوند‪.‬‬

‫‪ -‬زمان اشتراک گذاری ‪ :0-59‬فرآیندهای با کمترین اولویت‪ ،‬در نظر گرفته شده برای برنامه های کاربر به غیر از برنامه های‬
‫زمان حقیقی‪.‬‬

‫شکل ‪ 10.13‬نحوه اجرای زمان بندی در ‪ SVR4‬را نشان می دهد‪ .‬یک صف اعزام با هر سطح اولویت مرتبط است و فرآیندها‬
‫در یک سطح اولویت معین به صورت دور برگشتی اجرا می شوند‪ .‬یک بردار ‪ ،dqactmap ،bit-map‬حاوی یک بیت برای هر‬
‫سطح اولویت است‪ .‬بیت برای هر سطح اولویت با یک صف غیر خالی روی یک تنظیم می شود‪ .‬هر زمان که یک فرآیند در حال‬
‫اجرا به دلیل بلوک‪ ،‬انقضای زمان یا پیشپرداخت از حالت ‪ Running‬خارج میشود‪ ،‬توزیعکننده ‪ dqactmap‬را بررسی‬
‫میکند و یک فرآیند آماده را از صف غیر خالی با باالترین اولویت ارسال میکند‪ .‬عالوه بر این‪ ،‬هر زمان که به یک نقطه‬
‫‪ preemption‬تعریف شده رسید‪ ،‬هسته پرچمی به نام ‪ kprunrun‬را بررسی می کند‪ .‬اگر تنظیم شود‪ ،‬این نشان میدهد که‬

‫‪567‬‬
‫سیستم عامل های داخلی و اصول طراحی‪568.........................................................................................................................‬‬

‫حداقل یک فرآیند بالدرنگ در حالت آماده است‪ ،‬و هسته فرآیند فعلی را در صورتی که اولویت کمتری نسبت به فرآیند آماده‬
‫بالدرنگ با باالترین اولویت داشته باشد‪ ،‬پیشی میگیرد‪.‬‬

‫در کالس اشتراک زمانی‪ ،‬اولویت یک فرآیند متغیر است‪ .‬زمانبند هر بار که از یک کوانتوم زمانی استفاده می کند‪ ،‬اولویت یک‬
‫فرآیند را کاهش می دهد و اگر روی یک رویداد یا منبع مسدود شود‪ ،‬اولویت آن را افزایش می دهد‪ .‬کوانتوم زمانی تخصیص‬
‫یافته به یک فرآیند اشتراک زمانی به اولویت آن بستگی دارد‪ ،‬از ‪ 100‬میلی ثانیه برای اولویت ‪ 0‬تا ‪ 10‬میلی ثانیه برای اولویت‬
‫‪ .59‬هر فرآیند بالدرنگ دارای یک اولویت ثابت و یک کوانتوم زمان ثابت است‪.‬‬

‫‪ 10.5‬برنامه ریزی ‪UNIX FREEBSD‬‬

‫زمانبند یونیکس ‪ FreeBSD‬به گونهای طراحی شده است که عملکرد کارآمدتری نسبت به زمانبندیهای قبلی یونیکس در‬
‫زیر بار سنگین و زمانی که روی یک پلتفرم چند پردازنده یا چند هستهای استفاده میشود‪ ،‬ارائه دهد‪ .‬زمانبندی بسیار پیچیده‬
‫است و در اینجا مروری بر مهم ترین ویژگی های طراحی ارائه می دهیم‪ .‬برای جزئیات بیشتر‪MCKU05 ،‬و ‪ROBE03‬را‬
‫ببینید‪.‬‬

‫کالس های اولویت دار‬

‫مکانیسم اولویت اساسی در زمانبندی ‪ FreeBSD 5.1‬مشابه مکانیسم ‪ UNIX SVR4‬است‪ .‬برای ‪ ،FreeBSD‬پنج کالس‬
‫اولویت تعریف شده است جدول ‪ .10.6‬دو کالس اول برای رشتههای حالت هسته و کالسهای باقیمانده برای رشتههای حالت‬
‫کاربر هستند‪ .‬رشتههای هسته کدی را اجرا میکنند که در تصویر بارگذاری هسته اجرا شده و با کد اجرای ممتاز هسته کار‬
‫میکند‪.‬‬

‫موضوعات با باالترین اولویت به عنوان هسته نیمه پایین نامیده می شوند‪ .‬موضوعات این کالس که در هسته اجرا می شوند بر‬
‫اساس اولویت های وقفه برنامه ریزی می شوند‪ .‬این اولویتها زمانی تنظیم میشوند که دستگاههای مربوطه پیکربندی شدهاند و‬
‫تغییر نمیکنند‪ .‬رشته های نیمه باالی هسته نیز در هسته اجرا می شوند و توابع مختلف هسته را اجرا می کنند‪ .‬این اولویت ها‬
‫بر اساس اولویت های از پیش تعریف شده تنظیم می شوند و هرگز تغییر نمی کنند‪.‬‬

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

‫‪568‬‬
‫سیستم عامل های داخلی و اصول طراحی‪569.........................................................................................................................‬‬

‫منابع‪ ،‬دوباره محاسبه میشود‪ .‬پایین ترین محدوده اولویت ها به عنوان کالس کاربر بیکار نامیده می شود‪ .‬این کالس برای برنامه‬
‫هایی در نظر گرفته شده است که تنها زمانی زمان پردازشگر را مصرف می کنند که هیچ رشته دیگری آماده اجرا نباشد‪.‬‬

‫‪ SMP‬و پشتیبانی چند هسته ای‬

‫آخرین نسخه زمانبندی ‪ FreeBSD‬که با ‪ FreeBSD 5.0‬معرفی شد‪ ،‬برای ارائه زمانبندی موثر برای یک سیستم ‪ SMP‬یا‬
‫چند هسته ای طراحی شده است‪ .‬زمانبندی جدید سه هدف طراحی را برآورده می کند‪:‬‬

‫‪ -‬به نیاز به میل پردازنده در سیستم های ‪ SMP‬و چند هسته ای توجه کنید‪ .‬اصطالح ‪ Craft Affinity‬به زمانبندی اشاره‬
‫دارد که فقط در صورت لزوم یک رشته را منتقل میکند رشته را از یک پردازنده به پردازنده دیگر منتقل میکند تا از داشتن‬
‫یک پردازنده بیکار جلوگیری کند‪.‬‬

‫‪ -‬پشتیبانی بهتری برای چند رشته ای در سیستم های چند هسته ای ارائه دهید‪.‬‬

‫‪ -‬عملکرد الگوریتم زمانبندی را بهبود بخشید‪ ،‬به طوری که دیگر تابعی از تعداد رشتههای موجود در سیستم نباشد‪.‬‬

‫در این بخش فرعی‪ ،‬ما به سه ویژگی کلیدی زمانبندی جدید نگاه می کنیم‪ :‬ساختار صف‪ ،‬امتیازدهی تعاملی‪ ،‬و مهاجرت رشته‪.‬‬

‫جدول ‪ 10.6‬کالس های زمان بندی موضوع ‪FreeBSD‬‬

‫کالس اولویت‬ ‫نوع موضوع‬ ‫شرح‬

‫‪0–63‬‬ ‫با وقفه برنامه ریزی شده است‪ .‬می تواند برای منتظر ماندن منبع هسته نیمه پایین‬
‫مسدود شود‬

‫‪64–127‬‬ ‫هسته نیمه باالیی‬ ‫اجرا می شود تا زمانی که مسدود یا تمام شود‪ .‬می تواند برای‬
‫منتظر ماندن منبع مسدود شود‬

‫‪128–159‬‬ ‫مجاز به اجرا تا زمانی که مسدود شود یا تا زمانی که یک رشته با کاربر بالدرنگ‬
‫اولویت باالتر در دسترس قرار گیرد‪ .‬برنامه ریزی پیشگیرانه‬

‫‪160–223‬‬ ‫کاربر اشتراک زمان‬ ‫اولویت ها را بر اساس استفاده از پردازنده تنظیم می کند‬

‫‪224–255‬‬ ‫کاربر بیکار‬ ‫فقط زمانی اجرا شود که اشتراکگذاری زمانی یا رشتههای‬
‫بالدرنگ برای اجرا وجود نداشته باشد‬

‫‪569‬‬
‫سیستم عامل های داخلی و اصول طراحی‪570.........................................................................................................................‬‬

‫توجه‪ :‬عدد کمتر مربوط به اولویت باالتر است‪.‬‬

‫شکل ‪ 10.14‬اولویت های توزیع موضوع ویندوز‬

‫ساختار صف نسخه قبلی زمانبندی ‪ FreeBSD‬از یک صف زمانبندی جهانی برای همه پردازنده ها استفاده می کرد که یک بار‬
‫در ثانیه برای محاسبه مجدد اولویت های آنها از آن عبور می کرد‪ .‬استفاده از یک لیست واحد برای همه رشتهها به این معنی‬
‫است که عملکرد زمانبند به تعداد وظایف سیستم بستگی دارد و با افزایش تعداد وظایف‪ ،‬زمان پردازشگر بیشتری باید در‬
‫زمانبندی برای حفظ لیست صرف شود‪.‬‬

‫زمانبند جدید برنامه ریزی را به طور مستقل برای هر پردازنده انجام می دهد‪ .‬برای هر پردازنده‪ ،‬سه صف نگهداری می شود‪ .‬هر‬
‫یک از صف ها دارای ساختاری هستند که در شکل ‪ 10.14‬برای ‪ SVR4‬نشان داده شده است‪ .‬دو ردیف‪ ،‬کالسهای زمانبندی‬
‫هسته‪ ،‬بالدرنگ و اشتراک زمانی را پیادهسازی میکنند اولویتهای ‪ 0‬تا ‪ .223‬صف سوم فقط برای کالس بیکار است اولویت‬
‫های ‪ 224‬تا ‪.255‬‬

‫دو ران صف فعلی و بعدی تعیین می شوند‪ .‬هر رشته ای که به آن یک تایم الیس محل در حالت آماده اعطا می شود‪ ،‬در صف‬
‫فعلی یا صف بعدی‪ ،‬همانطور که در ادامه توضیح داده شد‪ ،‬در اولویت مناسب برای آن رشته قرار می گیرد‪ .‬زمانبند برای یک‬
‫پردازنده رشته ها را از صف فعلی به ترتیب اولویت انتخاب می کند تا زمانی که صف فعلی خالی شود‪ .‬هنگامی که صف فعلی‬
‫خالی است‪ ،‬زمانبندیکننده صف فعلی و بعدی را تعویض میکند و شروع به زمانبندی رشتهها از صف فعلی جدید میکند‪.‬‬
‫استفاده از دو صف را تضمین می کند که به هر رشته حداقل یک بار در هر دو سوئیچ صف بدون توجه به اولویت زمان پردازش‬
‫داده می شود و از گرسنگی جلوگیری می کند‪ .‬چندین قانون تخصیص یک رشته را به صف فعلی یا صف بعدی تعیین می کند‪:‬‬
‫‪570‬‬
‫سیستم عامل های داخلی و اصول طراحی‪571.........................................................................................................................‬‬

‫‪ .1‬هسته و رشته های زمان حقیقی همیشه در صف فعلی درج می شوند‪.‬‬

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

‫امتیازدهی تعاملی اگر نسبت زمان خواب داوطلبانه آن به زمان اجرای آن کمتر از یک آستانه معین باشد‪ ،‬رشته ای تعاملی در‬
‫نظر گرفته می شود‪ .‬رشته های تعاملی معموالً زمانی که منتظر ورودی کاربر هستند‪ ،‬زمان خواب باالیی دارند‪ .‬این فواصل خواب‬
‫با انبوهی از فعالیت های پردازنده دنبال می شود زیرا رشته درخواست کاربر را پردازش می کند‪.‬‬

‫آستانه تعامل در کد زمانبندی تعریف شده است و قابل تنظیم نیست‪ .‬زمانبند از دو معادله برای محاسبه امتیاز تعاملی یک رشته‬
‫استفاده می کند‪ .‬ابتدا یک ضریب مقیاس بندی را تعریف می کنیم‪:‬‬

‫برای رشته هایی که زمان خواب آنها از زمان اجرای آنها بیشتر است‪ ،‬از معادله زیر استفاده می شود‪:‬‬

‫زمانی که زمان اجرای یک رشته از زمان خواب آن بیشتر شود‪ ،‬به جای آن از معادله زیر استفاده می شود‪:‬‬

‫نتیجه این است که رشتههایی که زمان خواب آنها بیشتر از زمان اجرای آنها است‪ ،‬در نیمه پایین دامنه امتیازات تعاملی‪ ،‬و‬
‫رشتههایی که زمان اجرای آنها از زمان خواب آنها بیشتر است‪ ،‬در نیمه باالیی محدوده امتیاز میگیرند‪.‬‬

‫‪ THREAD MIGRATION‬به طور کلی‪ ،‬مطلوب است که یک ‪ Thread‬آماده بر روی آخرین پردازنده ای که روی آن‬
‫اجرا شده است‪ ،‬برنامه ریزی شود‪ .‬به این میل پردازنده می گویند‪ .‬گزینه جایگزین این است که اجازه دهید یک رشته برای برش‬
‫زمان اجرای بعدی خود به پردازنده دیگری مهاجرت کند‪ .‬وابستگی پردازنده به دلیل حافظه پنهان محلی اختصاص داده شده به‬
‫یک پردازنده قابل توجه است‪ .‬هنگامی که یک رشته اجرا می شود‪ ،‬ممکن است هنوز اطالعاتی در حافظه پنهان آخرین پردازنده‬
‫خود داشته باشد‪ .‬تغییر به پردازنده دیگر به این معنی است که داده های الزم باید در حافظه پنهان در پردازنده جدید بارگذاری‬
‫شوند و خطوط کش از پردازنده قبلی باید باطل شوند‪ .‬از سوی دیگر‪ ،‬مهاجرت پردازنده ممکن است به تعادل بار بهتر اجازه دهد‬

‫‪571‬‬
‫سیستم عامل های داخلی و اصول طراحی‪572.........................................................................................................................‬‬

‫و ممکن است از دورههای بیکاری در برخی پردازندهها جلوگیری کند‪ ،‬در حالی که سایر پردازندهها بیش از آن چیزی که‬
‫میتوانند به موقع کار کنند‪ ،‬کار میکنند‪.‬‬

‫زمانبندی ‪ FreeBSD‬از دو مکانیسم برای انتقال رشته برای متعادل کردن بار پشتیبانی می کند‪ :‬کشیدن و فشار دادن‪ .‬با‬
‫مکانیزم کشش‪ ،‬یک پردازنده بیکار‪ ،‬رشته ای را از یک پردازنده غیر فعال می رباید‪ .‬هنگامی که یک پردازنده کاری برای انجام‬
‫دادن ندارد‪ ،‬یک بیت را در یک بیت ماسک جهانی تنظیم می کند که نشان می دهد بیکار است‪ .‬هنگامی که یک پردازنده فعال‬
‫می خواهد کار را به صف اجرای خود اضافه کند‪ ،‬ابتدا این بیت های بیکار را بررسی می کند و اگر بیت بیکار مجموعه ای پیدا‬
‫شد‪ ،‬رشته را به پردازنده بیکار ارسال می کند‪ .‬در درجه اول زمانی مفید است که بار سبک یا پراکنده وجود داشته باشد‪ ،‬یا در‬
‫شرایطی که فرآیندها به طور مکرر شروع و خارج می شوند‪.‬‬

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

‫‪ 10.6‬برنامه ریزی ویندوز‬

‫ویندوز به گونه ای طراحی شده است که تا حد امکان به نیازهای یک کاربر در یک محیط بسیار تعاملی یا در نقش یک سرور‬
‫پاسخگو باشد‪ .‬ویندوز یک زمانبندی پیشگیرانه را با یک سیستم انعطافپذیر از سطوح اولویت پیادهسازی میکند که شامل‬
‫زمانبندی دورهای در هر سطح و‪ ،‬برای برخی سطوح‪ ،‬تغییرات اولویت پویا بر اساس فعالیت رشته فعلی آنها است‪ 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.........................................................................................................................‬‬

‫شکل ‪ 10.15‬مثالی از رابطه اولویت ویندوز‬

‫زمانبندی چند پردازنده‬

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

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

‫هنگامی که ویندوز روی یک پردازنده اجرا می شود‪ ،‬رشته با باالترین اولویت همیشه فعال است مگر اینکه در انتظار یک رویداد‬
‫باشد‪ .‬اگر بیش از یک رشته وجود داشته باشد که دارای باالترین اولویت یکسانی باشد‪ ،‬آنگاه پردازنده‪ ،‬در میان تمام رشتههای‬
‫موجود در آن سطح اولویت‪ ،‬به اشتراک گذاشته میشود‪ .‬در یک سیستم چند پردازندهای با ‪ N‬پردازنده‪ ،‬هسته سعی میکند ‪N‬‬
‫پردازندهها را به ‪ N‬رشتههای با اولویت باالتری که آماده اجرا هستند بدهد‪ .‬رشته های باقی مانده با اولویت پایین تر باید منتظر‬
‫بمانند تا رشته های دیگر مسدود شوند یا اولویت آنها کاهش یابد‪ .‬رشتههای با اولویت پایینتر نیز ممکن است برای مدت‬
‫کوتاهی اولویت خود را به ‪ 15‬افزایش دهند‪ ،‬اگر گرسنه باشند‪ ،‬صرفاً برای تصحیح موارد وارونگی اولویت‪.‬‬

‫‪574‬‬
‫سیستم عامل های داخلی و اصول طراحی‪575.........................................................................................................................‬‬

‫نظم زمانبندی فوق تحت تأثیر ویژگی میل پردازشگر یک رشته است‪ .‬اگر رشته ای آماده اجرا باشد اما تنها پردازنده های موجود‬
‫در مجموعه وابستگی پردازنده آن نباشد‪ ،‬آن رشته مجبور می شود منتظر بماند و هسته رشته موجود بعدی را برنامه ریزی می‬
‫کند‪.‬‬

‫‪ 10.7‬خالصه‬

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

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

‫‪ 10.8‬خواندن توصیه شده‬

‫‪WEND89‬بحث جالبی از رویکردهای زمانبندی چند پردازنده است‪ZHUR12 .‬یک بررسی جامع از مسائل مربوط به‬
‫زمانبندی رشتههای چند هستهای ارائه میکند‪ .‬مجموعههای مقاالت زیر همگی حاوی مقاالت مهمی در مورد سیستم عامل‬
‫های بیدرنگ و زمانبندی هستند‪ LEE93 ،STAN93 ،KRIS94 :‬و ‪ TILB91. SHA90‬توضیح خوبی در مورد وارونگی‬
‫اولویت‪ ،‬وراثت اولویت و سقف اولویت ارائه می دهد‪ZEAD97 .‬عملکرد زمانبندی زمان حقیقی ‪ SVR4‬را تجزیه و تحلیل می‬
‫کند‪LIND04 .‬یک نمای کلی از زمانبندی لینوکس ‪ 2.6‬ارائه می دهد‪LOVE10 .‬شامل بحث مفصل تری است‪.‬‬

‫‪575‬‬
‫سیستم عامل های داخلی و اصول طراحی‪576.........................................................................................................................‬‬

‫‪ 10.9‬اصطالحات کلیدی‪ ،‬سؤاالت و مشکالت را مرور کنید‬

‫کلمات کلیدی‬

‫برنامه ریزی‬ ‫وارونگی اولویت‬ ‫پاسخگویی زمانبندی‬


‫ضرب االجل غیر‬ ‫کار دوره ای به‬ ‫بالدرنگ‬
‫متناوب‬ ‫اشتراک گذاری‬ ‫اولویت نامحدود برنامه‬
‫عملکرد قطعی‬ ‫بار کار بالدرنگ‬ ‫زمانبندی رشته وظیفه‬
‫سیستم عامل‬ ‫نرخ سیستم عامل‬ ‫بالدرنگ‬
‫شکست‪-‬نرم‬ ‫زمانبندی یکنواخت‬ ‫وارونگی‬
‫دانه بندی‬ ‫در زمان حقیقی‬
‫زمان بندی‬
‫باند‬

‫بررسی سواالت‬

‫‪ .10.1‬پنج دسته مختلف از دانه بندی همگام سازی را فهرست کرده و به طور خالصه تعریف کنید‪.‬‬

‫‪ .10.2‬چهار تکنیک برای زمانبندی رشته را فهرست کرده و به طور خالصه تعریف کنید‪.‬‬

‫‪ .10.3‬سه نسخه اشتراک بار را فهرست کرده و به طور خالصه تعریف کنید‪.‬‬

‫‪ .10.4‬تفاوت بین کارهای سخت و نرم در زمان حقیقی چیست؟‬

‫‪576‬‬
‫سیستم عامل های داخلی و اصول طراحی‪577.........................................................................................................................‬‬

‫‪ .10.5‬تفاوت بین وظایف زمان حقیقی دوره ای و دوره ای چیست؟‬

‫‪ .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‬سرویس میشوند‪.‬‬

‫جدول ‪ 10.7‬نمایه اجرای مسئله ‪10.1‬‬

‫فرآیند‬ ‫زمان رسیدن‬ ‫زمان اجرا‬ ‫پایان مهلت‬


‫‪A1‬‬ ‫‪0‬‬ ‫‪10‬‬ ‫‪20‬‬
‫‪A2‬‬ ‫‪20‬‬ ‫‪10‬‬ ‫‪40‬‬
‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬
‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬
‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬
‫‪B1‬‬ ‫‪0‬‬ ‫‪10‬‬ ‫‪50‬‬
‫‪B2‬‬ ‫‪50‬‬ ‫‪10‬‬ ‫‪100‬‬
‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬
‫‪577‬‬
‫سیستم عامل های داخلی و اصول طراحی‪578.........................................................................................................................‬‬

‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬


‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬
‫‪C1‬‬ ‫‪0‬‬ ‫‪15‬‬ ‫‪50‬‬
‫‪C2‬‬ ‫‪50‬‬ ‫‪15‬‬ ‫‪100‬‬
‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬
‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬
‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬ ‫‪r‬‬

‫جدول ‪ 10.8‬نمایه اجرای مسئله ‪10.2‬‬

‫فرآیند‬ ‫زمان رسیدن‬ ‫زمان اجرا‬ ‫پایان مهلت‬


‫‪A‬‬ ‫‪10‬‬ ‫‪20‬‬ ‫‪100‬‬
‫‪B‬‬ ‫‪20‬‬ ‫‪20‬‬ ‫‪30‬‬
‫‪C‬‬ ‫‪40‬‬ ‫‪20‬‬ ‫‪60‬‬
‫‪D‬‬ ‫‪50‬‬ ‫‪20‬‬ ‫‪80‬‬
‫‪E‬‬ ‫‪60‬‬ ‫‪20‬‬ ‫‪70‬‬

‫آ‪ .‬فرض کنید یک کار در حال حاضر دارای سستی ‪ 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.9‬نمایه های اجرا برای مسائل ‪ 10.3‬تا ‪10.6‬‬

‫بار سبک ‪a‬‬


‫‪Task‬‬ ‫دوره‬ ‫زمان اجرا‬
‫‪A‬‬ ‫‪6‬‬ ‫‪2‬‬
‫‪B‬‬ ‫‪8‬‬ ‫‪2‬‬
‫‪C‬‬ ‫‪12‬‬ ‫‪3‬‬
‫بار سنگین ‪b‬‬
‫‪Task‬‬ ‫دوره‬ ‫زمان اجرا‬
‫‪A‬‬ ‫‪6‬‬ ‫‪2‬‬
‫‪B‬‬ ‫‪8‬‬ ‫‪5‬‬
‫‪C‬‬ ‫‪12‬‬ ‫‪3‬‬

‫‪ .10.7‬این مشکل نشان میدهد که اگرچه معادله ‪ 10.2‬برای زمانبندی یکنواخت نرخ‪ ،‬شرط کافی برای زمانبندی موفق است‪،‬‬
‫اما شرط الزم نیست یعنی گاهی اوقات برنامهریزی موفق ممکن است حتی اگر معادله ‪ 10.2‬برآورده نشود‪.‬‬

‫آ‪ .‬مجموعه ای از وظایف را با وظایف دوره ای مستقل زیر در نظر بگیرید‪:‬‬

‫‪ r‬وظیفه ‪ r /P1:C1 20; T1 100‬وظیفه ‪P2:C2 30; T2 145‬‬

‫‪579‬‬
‫سیستم عامل های داخلی و اصول طراحی‪580.........................................................................................................................‬‬

‫آیا می توان این وظایف را با استفاده از زمان بندی یکنواخت نرخ با موفقیت برنامه ریزی کرد؟‬

‫ب حاال وظیفه زیر را به مجموعه اضافه کنید‪:‬‬

‫‪ r‬وظیفه ‪ /P3:C3 68; T3 150‬آیا معادله ‪ 10.2‬راضی است؟‬

‫ج فرض کنید که اولین نمونه از سه کار قبلی در زمان می رسد‪ .‬فرض کنید اولین مهلت برای هر کار به شرح زیر است‪:‬‬

‫با استفاده از زمانبندی یکنواخت نرخ‪ ،‬آیا هر سه مهلت برآورده میشوند؟ در مورد ضرباالجلهای تکرار هر کار در آینده چطور؟‬

‫‪ .10.8‬نموداری شبیه به شکل ‪ b10.9‬رسم کنید که توالی رویدادها را برای همین مثال با استفاده از سقف اولویت نشان می‬
‫دهد‪.‬‬

‫‪580‬‬
‫سیستم عامل های داخلی و اصول طراحی‪581.........................................................................................................................‬‬

‫بخش ‪ 5‬ورودی‪/‬خروجی و فایل ها‬

‫فصل ‪11‬‬

‫مدیریت ورودی‪/‬خروجی و زمانبندی دیسک‬

‫‪ 11.1‬دستگاه های ورودی‪/‬خروجی‬

‫‪ 11.2‬سازماندهی عملکرد ‪I/O‬‬

‫تکامل عملکرد ‪ I/O‬دسترسی مستقیم به حافظه‬

‫‪ 11.3‬مسائل طراحی سیستم عامل اهداف طراحی‬

‫ساختار منطقی تابع ‪I/O‬‬

‫‪ 11.4‬بافر ‪I/O‬‬

‫تک بافر دو بافر دایره ای بافر ‪ /‬کاربرد بافرینگ‬

‫‪ 11.5‬زمان بندی دیسک‬

‫پارامترهای عملکرد دیسک سیاست های زمان بندی دیسک‬

‫‪RAID 11.6‬‬

‫‪ 11.7‬کش دیسک‬

‫مالحظات طراحی مالحظات عملکرد‬

‫‪UNIX SVR4 I/O 11.8‬‬

‫صف کاراکتر کش بافر دستگاه های یونیکس ورودی‪/‬خروجی بافر نشده‬

‫‪ 11.9‬لینوکس ‪I/O‬‬

‫‪581‬‬
‫سیستم عامل های داخلی و اصول طراحی‪582.........................................................................................................................‬‬

‫زمانبندی دیسک کش صفحه لینوکس‬

‫‪ Windows I/O 11.10‬امکانات اولیه ورودی‪/‬خروجی‬

‫‪ RAID‬نرم افزار ورودی‪/‬خروجی ناهمزمان و همزمان‬

‫‪Volume Shadow Copies Volume Encryption‬‬


‫‪ 11.11‬خالصه‬

‫‪ 11.12‬خواندن و انیمیشن های توصیه شده‬

‫‪ 11.13‬اصطالحات کلیدی‪ ،‬بررسی سواالت و مشکالت‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬دسته های کلیدی دستگاه های ورودی‪/‬خروجی را در رایانه ها خالصه کنید‪.‬‬

‫‪ -‬سازماندهی تابع ‪ I/O‬را مورد بحث قرار دهید‪.‬‬

‫‪ -‬برخی از مسائل کلیدی در طراحی پشتیبانی سیستم عامل برای ‪ I/O‬را توضیح دهید‪.‬‬

‫‪ -‬مفاهیم عملکرد جایگزین های مختلف بافر ورودی‪/‬خروجی را تجزیه و تحلیل کنید‪.‬‬

‫‪ -‬مسائل عملکرد مربوط به دسترسی به دیسک مغناطیسی را درک کنید‪.‬‬

‫‪ -‬مفهوم ‪ RAID‬را توضیح دهید و سطوح مختلف را شرح دهید‪.‬‬

‫‪ -‬مفاهیم عملکرد حافظه پنهان دیسک را درک کنید‪.‬‬

‫‪ -‬مکانیسم های ‪ I/O‬را در یونیکس‪ ،‬لینوکس و ویندوز ‪ 7‬توضیح دهید‪.‬‬

‫شاید آشفته ترین جنبه طراحی سیستم عامل ورودی‪/‬خروجی باشد‪ .‬از آنجایی که دستگاهها و برنامههای کاربردی این دستگاهها‬
‫بسیار متنوع هستند‪ ،‬ایجاد یک راهحل کلی و سازگار دشوار است‪.‬‬

‫ما با بحث مختصری در مورد دستگاه های ‪ I/O‬و سازماندهی عملکرد ‪ I/O‬شروع می کنیم‪ .‬این موضوعات‪ ،‬که عموماً در محدوده‬
‫معماری کامپیوتر قرار می گیرند‪ ،‬زمینه را برای بررسی ‪ I/O‬از دیدگاه سیستم عامل فراهم می کنند‪.‬‬

‫‪582‬‬
‫سیستم عامل های داخلی و اصول طراحی‪583.........................................................................................................................‬‬

‫بخش بعدی به بررسی مسائل طراحی سیستم عامل‪ ،‬از جمله اهداف طراحی‪ ،‬و روشی که عملکرد ‪ I/O‬را می توان ساختار داد‪،‬‬
‫می پردازد‪ .‬سپس بافر ‪ I/O‬مورد بررسی قرار می گیرد‪ .‬یکی از خدمات اولیه ورودی‪/‬خروجی ارائه شده توسط سیستم عامل یک‬
‫تابع بافر است که عملکرد کلی را بهبود می بخشد‪.‬‬

‫بخش های بعدی این فصل به ورودی‪/‬خروجی دیسک مغناطیسی اختصاص دارد‪ .‬در سیستمهای معاصر‪ ،‬این شکل از‬
‫ورودی‪/‬خروجی مهمترین است و کلید عملکردی است که توسط کاربر درک میشود‪ .‬ما با توسعه یک مدل از عملکرد‬
‫ورودی‪/‬خروجی دیسک شروع می کنیم و سپس چندین تکنیک را بررسی می کنیم که می توانند برای بهبود عملکرد مورد‬
‫استفاده قرار گیرند‪.‬‬

‫ضمیمه ‪ J‬ویژگی های دستگاه های ذخیره سازی ثانویه‪ ،‬از جمله دیسک مغناطیسی و حافظه نوری را خالصه می کند‪.‬‬

‫‪ 11.1‬دستگاه های ورودی‪/‬خروجی‬

‫همانطور که در فصل ‪ 1‬ذکر شد‪ ،‬دستگاه های خارجی که با سیستم های کامپیوتری درگیر ‪ I/O‬می شوند را می توان به طور‬
‫تقریبی به سه دسته تقسیم کرد‪:‬‬

‫‪ -‬قابل خواندن توسط انسان‪ :‬مناسب برای برقراری ارتباط با کاربر کامپیوتر‪ .‬به عنوان مثال می توان به چاپگرها و پایانه ها اشاره‬
‫کرد که مورد دوم شامل نمایشگر ویدئو‪ ،‬صفحه کلید و شاید دستگاه های دیگری مانند ماوس است‪.‬‬

‫‪ -‬قابل خواندن با ماشین‪ :‬مناسب برای برقراری ارتباط با تجهیزات الکترونیکی‪.‬‬

‫به عنوان مثال درایوهای دیسک‪ ،‬کلیدهای ‪ ،USB‬حسگرها‪ ،‬کنترلکنندهها و محرکها هستند‪.‬‬

‫‪ -‬ارتباط‪ :‬مناسب برای برقراری ارتباط با دستگاه های راه دور‪ .‬به عنوان مثال درایورهای خط دیجیتال و مودم ها هستند‪.‬‬

‫‪583‬‬
‫سیستم عامل های داخلی و اصول طراحی‪584.........................................................................................................................‬‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬دسته های کلیدی دستگاه های ورودی‪/‬خروجی را در رایانه ها خالصه کنید‪.‬‬

‫‪ -‬سازماندهی تابع ‪ I/O‬را مورد بحث قرار دهید‪.‬‬

‫‪ -‬برخی از مسائل کلیدی در طراحی پشتیبانی سیستم عامل برای ‪ I/O‬را توضیح دهید‪.‬‬

‫‪ -‬مفاهیم عملکرد جایگزین های مختلف بافر ورودی‪/‬خروجی را تجزیه و تحلیل کنید‪.‬‬

‫‪ -‬مسائل عملکرد مربوط به دسترسی به دیسک مغناطیسی را درک کنید‪.‬‬

‫‪ -‬مفهوم ‪ RAID‬را توضیح دهید و سطوح مختلف را شرح دهید‪.‬‬

‫‪ -‬مفاهیم عملکرد حافظه پنهان دیسک را درک کنید‪.‬‬

‫‪ -‬مکانیسم های ‪ I/O‬را در یونیکس‪ ،‬لینوکس و ویندوز ‪ 7‬توضیح دهید‪.‬‬

‫شاید آشفته ترین جنبه طراحی سیستم عامل ورودی‪/‬خروجی باشد‪ .‬از آنجایی که دستگاهها و برنامههای کاربردی این دستگاهها‬
‫بسیار متنوع هستند‪ ،‬ایجاد یک راهحل کلی و سازگار دشوار است‪.‬‬

‫ما با بحث مختصری در مورد دستگاه های ‪ I/O‬و سازماندهی عملکرد ‪ I/O‬شروع می کنیم‪ .‬این موضوعات‪ ،‬که عموماً در محدوده‬
‫معماری کامپیوتر قرار می گیرند‪ ،‬زمینه را برای بررسی ‪ I/O‬از دیدگاه سیستم عامل فراهم می کنند‪.‬‬

‫بخش بعدی به بررسی مسائل طراحی سیستم عامل‪ ،‬از جمله اهداف طراحی‪ ،‬و روشی که عملکرد ‪ I/O‬را می توان ساختار داد‪،‬‬
‫می پردازد‪ .‬سپس بافر ‪ I/O‬مورد بررسی قرار می گیرد‪ .‬یکی از خدمات اولیه ورودی‪/‬خروجی ارائه شده توسط سیستم عامل یک‬
‫تابع بافر است که عملکرد کلی را بهبود می بخشد‪.‬‬

‫بخش های بعدی این فصل به ورودی‪/‬خروجی دیسک مغناطیسی اختصاص دارد‪ .‬در سیستمهای معاصر‪ ،‬این شکل از‬
‫ورودی‪/‬خروجی مهمترین است و کلید عملکردی است که توسط کاربر درک میشود‪ .‬ما با توسعه یک مدل از عملکرد‬
‫ورودی‪/‬خروجی دیسک شروع می کنیم و سپس چندین تکنیک را بررسی می کنیم که می توانند برای بهبود عملکرد مورد‬
‫استفاده قرار گیرند‪.‬‬

‫‪584‬‬
‫سیستم عامل های داخلی و اصول طراحی‪585.........................................................................................................................‬‬

‫‪ 11.2‬سازماندهی عملکرد ‪I/O‬‬

‫ضمیمه ‪ C‬سه تکنیک برای انجام ‪ I/O‬را خالصه می کند‪:‬‬

‫‪ -‬ورودی‪/‬خروجی برنامه ریزی شده‪ :‬پردازنده یک فرمان ‪ I/O‬را از طرف یک فرآیند به یک ماژول ‪ I/O‬صادر می کند‪ .‬سپس آن‬
‫فرآیند مشغول منتظر می ماند تا عملیات قبل از ادامه تکمیل شود‪.‬‬

‫‪ I/O-‬مبتنی بر وقفه‪ :‬پردازنده یک فرمان ‪ I/O‬را از طرف یک فرآیند صادر می کند‪ .‬سپس دو احتمال وجود دارد‪ .‬اگر دستور‬
‫‪ I/O‬از فرآیند غیرمسدود کننده باشد‪ ،‬پردازنده به اجرای دستورات از فرآیندی که دستور ‪ I/O‬را صادر کرده است ادامه می‬
‫دهد‪ .‬اگر دستور ورودی‪/‬خروجی مسدود می شود‪ ،‬دستور بعدی که پردازنده اجرا می کند از سیستم عامل است که فرآیند فعلی‬
‫را در حالت مسدود قرار می دهد و فرآیند دیگری را برنامه ریزی می کند‪.‬‬

‫‪ -‬دسترسی مستقیم به حافظه ‪DMA:‬یک ماژول ‪ DMA‬تبادل داده بین حافظه اصلی و یک ماژول ‪ I/O‬را کنترل می کند‪.‬‬
‫پردازنده درخواستی برای انتقال بلوک داده به ماژول ‪ DMA‬ارسال می کند و تنها پس از انتقال کل بلوک قطع می شود‪.‬‬

‫جدول ‪ 11.1‬رابطه بین این سه تکنیک را نشان می دهد‪ .‬در اکثر سیستم های کامپیوتری‪ DMA ،‬شکل غالب انتقال است که‬
‫باید توسط سیستم عامل پشتیبانی شود‪.‬‬

‫تکامل تابع ‪I/O‬‬

‫همانطور که سیستم های کامپیوتری تکامل یافته اند‪ ،‬الگویی از افزایش پیچیدگی و پیچیدگی اجزای جداگانه وجود داشته است‪.‬‬
‫این در هیچ کجا به اندازه تابع ‪ I/O‬مشهود نیست‪ .‬مراحل تکامل را می توان به صورت زیر خالصه کرد‪:‬‬

‫‪ .1‬پردازنده به طور مستقیم یک دستگاه جانبی را کنترل می کند‪ .‬این امر در دستگاه های ساده کنترل شده با ریز پردازنده دیده‬
‫می شود‪.‬‬

‫‪ .2‬یک کنترلر یا ماژول ‪ I/O‬اضافه شده است‪ .‬پردازنده از ‪ I/O‬برنامه ریزی شده بدون وقفه استفاده می کند‪ .‬با این مرحله‪،‬‬
‫پردازنده تا حدودی از جزئیات خاص رابط های دستگاه خارجی جدا می شود‪.‬‬

‫‪585‬‬
‫سیستم عامل های داخلی و اصول طراحی‪586.........................................................................................................................‬‬

‫جدول ‪ 11.1‬تکنیک های ورودی‪/‬خروجی‬

‫بدون وقفه‬ ‫استفاده از وقفه ها‬

‫انتقال ورودی‪/‬خروجی به‬ ‫ورودی‪/‬خروجی مبتنی بر وقفه ‪I/O‬برنامه ریزی شده‬


‫حافظه از طریق پردازنده‬

‫انتقال مستقیم ورودی‪/‬خروجی‬ ‫دسترسی مستقیم به حافظه‬


‫به حافظه‬ ‫‪DMA‬‬

‫‪ .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‬در ثبات‬
‫آدرس خود ذخیره می شود‪.‬‬

‫‪ -‬تعداد کلماتی که باید خوانده یا نوشته شوند‪ ،‬دوباره از طریق خطوط داده ارسال شده و در ثبت شمارش دادهها ذخیره‬
‫میشوند‪.‬‬

‫شکل ‪ 11.2‬نمودار بلوکی ‪ 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‬خارج از گذرگاه سیستم انجام می شود‪.‬‬

‫شکل ‪ 11.3‬تنظیمات جایگزین ‪DMA‬‬

‫‪588‬‬
‫سیستم عامل های داخلی و اصول طراحی‪589.........................................................................................................................‬‬

‫‪ 11.3‬مسائل مربوط به طراحی سیستم عامل‬

‫اهداف طراحی‬

‫دو هدف در طراحی تسهیالت ورودی‪/‬خروجی مهم هستند‪ :‬کارایی و عمومیت‪ .‬کارایی مهم است زیرا عملیات ‪ I/O‬اغلب یک‬
‫گلوگاه در یک سیستم محاسباتی ایجاد می کند‪ .‬با نگاهی دوباره به شکل ‪ ،11.1‬می بینیم که اکثر دستگاه های ورودی‪/‬خروجی‬
‫در مقایسه با حافظه اصلی و پردازنده بسیار کند هستند‪ .‬یکی از راههای مقابله با این مشکل‪ ،‬چندبرنامهنویسی است‪ ،‬که همانطور‬
‫که دیدیم‪ ،‬به برخی از فرآیندها اجازه میدهد در عملیات ورودی‪/‬خروجی منتظر بمانند‪ ،‬در حالی که فرآیند دیگری در حال اجرا‬
‫است‪ .‬با این حال‪ ،‬حتی با وجود حجم وسیع حافظه اصلی در ماشینهای امروزی‪ ،‬اغلب اوقات ‪ I/O‬با فعالیتهای پردازنده‬
‫هماهنگ نیست‪ Swapping .‬برای وارد کردن فرآیندهای آماده اضافی برای مشغول نگه داشتن پردازنده استفاده می شود‪ ،‬اما‬
‫این خود یک عملیات ‪ I/O‬است‪ .‬بنابراین‪ ،‬یک تالش عمده در طراحی ‪ ،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.........................................................................................................................‬‬

‫شکل ‪ 11.4‬مدلی از سازمان ‪I/O‬‬

‫‪File system: -‬این الیه با ساختار منطقی فایل ها و با عملیاتی که کاربران می توانند مشخص کنند‪ ،‬مانند باز کردن‪ ،‬بستن‪،‬‬
‫خواندن و نوشتن سر و کار دارد‪ .‬حقوق دسترسی نیز در این الیه مدیریت می شود‪.‬‬

‫‪ -‬سازماندهی فیزیکی‪ :‬همانطور که آدرسهای حافظه مجازی باید به آدرسهای حافظه اصلی فیزیکی تبدیل شوند‪ ،‬با در نظر‬
‫گرفتن ساختار تقسیمبندی و صفحهبندی‪ ،‬ارجاعات منطقی به فایلها و رکوردها نیز باید با در نظر گرفتن مسیر و بخش فیزیکی‬
‫به آدرسهای ذخیرهسازی ثانویه فیزیکی تبدیل شوند‪ .‬ساختار دستگاه ذخیره سازی ثانویه تخصیص فضای ذخیره سازی ثانویه و‬
‫بافرهای ذخیره سازی اصلی به طور کلی در این الیه نیز انجام می شود‪.‬‬

‫به دلیل اهمیت سیستم فایل‪ ،‬در این فصل و فصل بعدی‪ ،‬مدتی را صرف بررسی اجزای مختلف آن خواهیم کرد‪ .‬بحث در این‬
‫فصل بر روی سه الیه پایین متمرکز است‪ ،‬در حالی که دو الیه باالیی در فصل ‪ 12‬مورد بررسی قرار گرفته است‪.‬‬

‫‪I/O BUFFERING 11.4‬‬

‫فرض کنید که یک فرآیند کاربر می خواهد بلوک های داده را از روی یک دیسک در یک زمان بخواند‪ ،‬با طول هر بلوک ‪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.........................................................................................................................‬‬

‫شکل ‪ 11.5‬طرح های بافر ورودی‪/‬خروجی ورودی‬

‫برای دستگاه های بلوک گرا‪ ،‬طرح تک بافر را می توان به صورت زیر توصیف کرد‪ :‬انتقال ورودی به بافر سیستم انجام می شود‪.‬‬
‫هنگامی که انتقال کامل شد‪ ،‬فرآیند بلوک را به فضای کاربر منتقل می کند و بالفاصله بلوک دیگری را درخواست می کند‪ .‬به‬
‫این کار خواندن پیشرو یا ورودی پیشبینیشده گفته میشود‪ .‬با این انتظار انجام می شود که در نهایت بلوک مورد نیاز باشد‪.‬‬
‫برای بسیاری از انواع محاسبات‪ ،‬این یک فرض معقول در اکثر مواقع است زیرا معموالً داده ها به صورت متوالی قابل دسترسی‬
‫هستند‪ .‬فقط در پایان یک توالی پردازش‪ ،‬یک بلوک به صورت غیر ضروری خوانده می شود‪.‬‬

‫این رویکرد به طور کلی در مقایسه با فقدان بافر سیستم افزایش سرعت می دهد‪ .‬فرآیند کاربر می تواند یک بلوک از داده ها را‬
‫پردازش کند در حالی که بلوک بعدی در حال خواندن است‪ .‬سیستم عامل می تواند فرآیند را جابجا کند زیرا عملیات ورودی به‬
‫جای حافظه پردازش کاربر در حافظه سیستم انجام می شود‪ .‬با این حال‪ ،‬این تکنیک منطق سیستم عامل را پیچیده می کند‪.‬‬
‫سیستم عامل باید تخصیص بافرهای سیستم به فرآیندهای کاربر را پیگیری کند‪ .‬منطق جابجایی نیز تحت تأثیر قرار میگیرد‪:‬‬
‫اگر عملیات ‪ 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‬و‬
‫فعالیتهای فرآیندی متنوعی برای سرویس وجود دارد‪ ،‬بافر یکی از ابزارهایی است که میتواند کارایی سیستمعامل و عملکرد‬
‫فرآیندهای فردی را افزایش دهد‪.‬‬

‫‪ 11.5‬برنامه ریزی دیسک‬

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

‫‪595‬‬
‫سیستم عامل های داخلی و اصول طراحی‪596.........................................................................................................................‬‬

‫پارامترهای عملکرد دیسک‬

‫جزئیات واقعی عملیات ورودی‪/‬خروجی دیسک به سیستم کامپیوتر‪ ،‬سیستم عامل و ماهیت کانال ورودی‪/‬خروجی و سخت افزار‬
‫کنترل کننده دیسک بستگی دارد‪ .‬نمودار زمان بندی کلی انتقال ورودی‪/‬خروجی دیسک در شکل ‪ 11.6‬نشان داده شده است‪.‬‬

‫هنگامی که درایو دیسک کار می کند‪ ،‬دیسک با سرعت ثابت در حال چرخش است‪ .‬برای خواندن یا نوشتن‪ ،‬هد باید در مسیر‬
‫مورد نظر و در ابتدای بخش مورد نظر در آن مسیر قرار گیرد‪ .‬انتخاب مسیر شامل حرکت دادن سر در یک سیستم هد متحرک‬
‫یا انتخاب الکترونیکی یک هد بر روی یک سر ثابت است‪ .‬سیستم سر در یک سیستم هد متحرک‪ ،‬زمان الزم برای قرار دادن سر‬
‫در مسیر به عنوان زمان جستجو شناخته می شود‪.‬‬

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

‫شکل ‪ 11.6‬زمان بندی انتقال ورودی‪/‬خروجی دیسک‬

‫عالوه بر زمان دسترسی و زمان انتقال‪ ،‬چندین تاخیر در صف معموالً با عملیات ورودی‪/‬خروجی دیسک مرتبط است‪ .‬هنگامی که‬
‫یک فرآیند یک درخواست ‪ I/O‬صادر می کند‪ ،‬ابتدا باید در یک صف منتظر بماند تا دستگاه در دسترس باشد‪ .‬در آن زمان‪،‬‬
‫دستگاه به فرآیند اختصاص داده می شود‪ .‬اگر دستگاه یک کانال ورودی‪/‬خروجی یا مجموعهای از کانالهای ورودی‪/‬خروجی را با‬
‫درایوهای دیسک دیگر به اشتراک بگذارد‪ ،‬ممکن است منتظر ماندن بیشتری برای در دسترس بودن کانال باشد‪ .‬در آن نقطه‪،‬‬
‫جستجو برای شروع دسترسی به دیسک انجام می شود‪.‬‬

‫در برخی از سیستم های پیشرفته برای سرورها‪ ،‬تکنیکی به نام سنجش موقعیت چرخشی ‪RPS‬استفاده می شود‪ .‬این کار به‬
‫شرح زیر است‪ :‬هنگامی که فرمان جستجو صادر شد‪ ،‬کانال برای انجام سایر عملیات ‪ I/O‬آزاد می شود‪ .‬هنگامی که جستجو به‬
‫پایان رسید‪ ،‬دستگاه تعیین می کند که چه زمانی داده ها در زیر سر بچرخند‪ .‬با نزدیک شدن آن بخش به سر‪ ،‬دستگاه سعی می‬
‫کند مسیر ارتباطی را دوباره به میزبان بازگرداند‪ .‬اگر واحد کنترل یا کانال با ورودی‪/‬خروجی دیگری مشغول باشد‪ ،‬تالش برای‬

‫‪596‬‬
‫سیستم عامل های داخلی و اصول طراحی‪597.........................................................................................................................‬‬

‫اتصال مجدد با شکست مواجه میشود و دستگاه باید یک دور کامل بچرخد تا بتواند دوباره وصل شود‪ ،‬که به آن خطا ‪RPS‬‬
‫میگویند‪ .‬این یک عنصر تاخیر اضافی است که باید به خط زمانی شکل ‪ 11.6‬اضافه شود‪.‬‬

‫زمان جستجو زمان جستجو زمان مورد نیاز برای حرکت بازوی دیسک به مسیر مورد نیاز است‪ .‬به نظر می رسد که تعیین این‬
‫مقدار دشوار است‪ .‬زمان جستجو از دو جزء کلیدی تشکیل شده است‪ :‬زمان راه اندازی اولیه و زمان الزم برای عبور از مسیرهایی‬
‫که پس از باال آمدن سرعت بازوی دسترسی باید از آنها عبور کرد‪ .‬متأسفانه‪ ،‬زمان پیمایش یک تابع خطی از تعداد مسیرها‬
‫نیست‪ ،‬بلکه شامل یک زمان ته نشینی است زمان پس از قرار دادن سر بر روی مسیر هدف تا زمانی که شناسایی مسیر تأیید‬
‫شود‪.‬‬

‫بهبود زیادی از اجزای دیسک کوچکتر و سبکتر حاصل می شود‪ .‬چند سال پیش‪ ،‬قطر یک دیسک معمولی ‪ 14‬اینچ ‪36‬‬
‫سانتیمتر بود‪ ،‬در حالی که رایجترین اندازه امروزی آن ‪ 3.5‬اینچ ‪ 8.9‬سانتیمتر است که مسافتی را که بازو باید طی کند کاهش‬
‫میدهد‪ .‬میانگین زمان جستجو در هارد دیسک های امروزی کمتر از ‪ 10‬میلی ثانیه است‪.‬‬

‫تأخیر چرخشی تأخیر چرخشی زمان مورد نیاز برای چرخش ناحیه آدرسدهی شده دیسک به موقعیتی است که توسط هد‬
‫خواندن‪/‬نوشتن قابل دسترسی باشد‪ .‬دیسکها با سرعتهای ‪ 3600‬دور در دقیقه برای دستگاههای دستی مانند دوربینهای‬
‫دیجیتال تا ‪ 15000‬دور در دقیقه میچرخند‪ .‬در این سرعت اخیر‪ ،‬یک دور در هر ‪ 4‬میلی ثانیه وجود دارد‪ .‬بنابراین‪ ،‬به طور‬
‫متوسط‪ ،‬تاخیر چرخشی ‪ 2‬میلی ثانیه خواهد بود‪.‬‬

‫زمان انتقال زمان انتقال به یا از دیسک به سرعت چرخش دیسک به شکل زیر بستگی دارد‪:‬‬

‫زمان انتقال = ‪T‬‬

‫تعداد بایت هایی که باید منتقل شوند = ‪b‬‬

‫تعداد بایت ها در یک آهنگ = ‪N‬‬

‫سرعت چرخش‪ ،‬بر حسب دور بر ثانیه = ‪r‬‬

‫بنابراین‪ ،‬کل میانگین زمان دسترسی را می توان به صورت بیان کرد‬

‫‪597‬‬
‫سیستم عامل های داخلی و اصول طراحی‪598.........................................................................................................................‬‬

‫که در آن ‪ Ts‬میانگین زمان جستجو است‪.‬‬

‫مقایسه زمان بندی با تعریف پارامترهای فوق‪ ،‬اجازه دهید به دو عملیات ورودی‪/‬خروجی متفاوت نگاه کنیم که خطر تکیه بر‬
‫مقادیر متوسط را نشان می دهد‪ .‬دیسکی را با میانگین زمان جستجوی ‪ 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‬کنترل زمان بندی خارج از کنترل نرم افزار مدیریت دیسک است‪ .‬چنین رویکردی‬
‫برای بهینه سازی استفاده از دیسک نیست‪ ،‬بلکه برای دستیابی به اهداف دیگر در سیستم عامل در نظر گرفته شده است‪ .‬اغلب‬
‫کارهای دسته ای کوتاه و کارهای تعاملی اولویت بیشتری نسبت به کارهای طوالنی تری دارند که به محاسبات طوالنی تری نیاز‬
‫دارند‪ .‬این اجازه می دهد تا بسیاری از کارهای کوتاه به سرعت از طریق سیستم شسته شوند و ممکن است زمان پاسخ تعاملی‬
‫خوبی را فراهم کند‪ .‬با این حال‪ ،‬مشاغل طوالنی تر ممکن است مجبور باشند زمان زیادی را منتظر بمانند‪ .‬عالوه بر این‪ ،‬چنین‬
‫سیاستی میتواند منجر به اقدامات متقابل از سوی کاربران شود که مشاغل خود را به قطعات کوچکتر تقسیم میکنند تا‬
‫سیستم را شکست دهند‪ .‬این نوع سیاست برای سیستم های پایگاه داده ضعیف است‪.‬‬

‫شکل ‪ 11.7‬مقایسه الگوریتمهای زمانبندی دیسک جدول ‪ 11.2‬را ببینید‬

‫‪600‬‬
601.........................................................................................................................‫سیستم عامل های داخلی و اصول طراحی‬

‫ مقایسه الگوریتم های زمان بندی دیسک‬11.2 ‫جدول‬

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.........................................................................................................................‬‬

‫جدول ‪ 11.3‬الگوریتم های زمان بندی دیسک‬

‫نام‬ ‫توصیف‬ ‫نکات‬


‫انتخاب بر اساس درخواست کننده‬
‫‪Random‬‬ ‫برنامه ریزی تصادفی‬ ‫برای تحلیل و شبیه سازی‬
‫‪FIFO‬‬ ‫اولین ورودی اولین خروجی‬ ‫منصفتر از همشون‬
‫‪PRI‬‬ ‫اولویت بر اساس فرآیند‬ ‫کنترل خارج از مدیریت صف دیسک‬
‫‪LIFO‬‬ ‫آخرین در اولین بیرون‬ ‫استفاده از محل و منابع را به حداکثر‬
‫برسانید‬
‫انتخاب با توجه به مورد درخواستی‬
‫‪SSTF‬‬ ‫اول کوتاهترین زمان خدمت‬ ‫استفاده زیاد‪ ،‬صف های کوچک‬
‫‪SCAN‬‬ ‫جلو و عقب روی دیسک‬ ‫توزیع خدمات بهتر‬
‫‪C-SCAN‬‬ ‫یک طرفه با برگشت سریع‬ ‫تنوع خدمات کمتر‬
‫‪N-step-‬‬ ‫اسکن ‪ N‬رکورد در یک زمان‬ ‫گارانتی خدمات‬
‫‪SCAN‬‬
‫‪FSCAN‬‬ ‫‪N-step-SCAN‬با = ‪N‬‬ ‫حساس به بار‬
‫اندازه صف در ابتدای چرخه‬
‫‪SCAN‬‬

‫آخرین در اولین خروجی با کمال تعجب‪ ،‬یک خط مشی که همیشه آخرین درخواست را انجام می دهد‪ ،‬شایستگی دارد‪ .‬در‬
‫سیستمهای پردازش تراکنش‪ ،‬دادن دستگاه به آخرین کاربر باید باعث حرکت کم یا بدون حرکت بازو برای حرکت در یک فایل‬
‫متوالی شود‪ .‬استفاده از این موقعیت باعث بهبود توان عملیاتی و کاهش طول صف می شود‪ .‬تا زمانی که یک کار بتواند به طور‬
‫فعال از سیستم فایل استفاده کند‪ ،‬با بیشترین سرعت ممکن پردازش می شود‪ .‬با این حال‪ ،‬اگر دیسک به دلیل حجم کاری زیاد‬
‫مشغول نگه داشته شود‪ ،‬احتمال گرسنگی مشخص وجود دارد‪ .‬هنگامی که یک کار وارد یک درخواست ‪ 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.........................................................................................................................‬‬

‫جدول ‪ 11.4‬سطوح ‪RAID‬‬

‫دسته‬ ‫سطح‬ ‫شرح‬ ‫در دسترس بودن داده دیسک‬ ‫ظرفیت انتقال‬ ‫نرخ درخواست‬
‫بندی‬ ‫های‬ ‫ها‬ ‫داده ‪ 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.........................................................................................................................‬‬

‫‪5‬‬ ‫کمتر از یک دیسک‬ ‫دیسک برای نوشتن‬


‫برای نوشتن‬
‫‪5‬‬ ‫برابری توزیع‬ ‫‪1 N‬‬ ‫بسیار باالتر از تک‬ ‫مشابه ‪RAID 0‬‬ ‫مشابه ‪ RAID 0‬برای‬
‫شده با بلوک‬ ‫دیسک‪ .‬قابل مقایسه‬ ‫برای خواندن‪ .‬پایین‬ ‫خواندن‪ .‬به طور کلی پایین‬
‫با‪ 3 ، RAID 2‬یا‬ ‫تر از یک دیسک‬ ‫تر از یک دیسک برای‬
‫‪5‬‬ ‫برای نوشتن‬ ‫نوشتن‬
‫‪6‬‬ ‫برابری توزیع‬ ‫‪2 N‬‬ ‫بسیار باالتر از‬ ‫مشابه ‪RAID 0‬‬ ‫مشابه ‪ RAID 0‬برای‬
‫شده دوگانه در‬ ‫تک دیسک‪.‬‬ ‫برای خواندن‪ .‬کمتر‬ ‫خواندن‪ .‬به طور قابل‬
‫هم آمیخته‬ ‫قابل مقایسه با‬ ‫از ‪ RAID 5‬برای‬ ‫توجهی کمتر از ‪RAID‬‬
‫شده با بلوک‬ ‫‪3 ،RAID 2‬‬ ‫نوشتن‬ ‫‪5‬برای نوشتن‬
‫یا ‪4‬‬

‫شکل ‪ 11.8‬سطوح ‪RAID‬‬

‫‪608‬‬
‫سیستم عامل های داخلی و اصول طراحی‪609.........................................................................................................................‬‬

‫شکل ‪ 11.8‬سطوح ‪RAID‬‬

‫شکل ‪ 11.8‬سطوح ‪RAID‬ادامه‬

‫‪ 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 .‬همچنین می تواند بدون نوار داده ها پیاده سازی شود‪ ،‬اگرچه کمتر رایج است‪.‬‬

‫چندین جنبه مثبت برای سازمان ‪ 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‬به صورت زیر محاسبه می شود‪:‬‬

‫که در آن ⊕ تابع انحصاری‪ OR-‬است‪.‬‬

‫فرض کنید درایو ‪ 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‬جایگزین چهار مورد اول می شود‪.‬‬

‫شرایط توسط ‪X4 i.‬‬

‫برای محاسبه برابری جدید‪ ،‬نرم افزار مدیریت آرایه باید نوار کاربر قدیمی و نوار برابری قدیمی را بخواند‪ .‬سپس می تواند این دو‬
‫نوار را با داده های جدید و برابری محاسبه شده جدید به روز کند‪ .‬بنابراین‪ ،‬هر نوشتن نواری شامل دو خواندن و دو نوشتن است‪.‬‬

‫در مورد یک نوشتار ورودی‪/‬خروجی با اندازه بزرگتر که شامل نوارهایی در تمام درایوهای دیسک است‪ ،‬برابری به راحتی با‬
‫محاسبه تنها با استفاده از بیت های داده جدید محاسبه می شود‪ .‬بنابراین‪ ،‬درایو برابری را می توان به صورت موازی با درایوهای‬
‫داده به روز کرد و هیچ خواندن یا نوشتن اضافی وجود ندارد‪.‬‬

‫در هر صورت‪ ،‬هر عملیات نوشتن باید شامل دیسک برابری باشد‪ ،‬که در نتیجه می تواند به یک گلوگاه تبدیل شود‪.‬‬

‫‪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‬قابل مقایسه است‪.‬‬

‫‪ 11.7‬حافظه پنهان دیسک‬

‫در بخش ‪ 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‬افزایش می یابد‪ .‬با توجه به یک بخش جدید به اندازه کافی بزرگ‪ ،‬این منجر به تعداد‬
‫مراجع برای بلوک هایی می شود که به طور مکرر در یک فاصله زمانی کوتاه بدون تغییر باقی می مانند‪ .‬در یک اشتباه‪ ،‬بلوک با‬
‫کوچکترین تعداد مرجع که در بخش جدید نیست برای جایگزینی انتخاب می شود‪ .‬در صورت تساوی‪ ،‬چنین بلوکی که اخیراً‬
‫کمتر استفاده شده است‪ ،‬انتخاب می شود‪.‬‬

‫شکل ‪ 11.9‬جایگزینی مبتنی بر فرکانس‬

‫نویسندگان گزارش می دهند که این استراتژی نسبت به ‪ 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.10‬برخی از نتایج عملکرد حافظه پنهان دیسک با استفاده از ‪LRU‬‬

‫شکل ‪ 11.11‬عملکرد حافظه پنهان دیسک با استفاده از جایگزینی مبتنی بر فرکانس‬

‫‪UNIX SVR4 I/O 11.8‬‬

‫در یونیکس‪ ،‬هر دستگاه ورودی‪/‬خروجی جداگانه با یک فایل خاص مرتبط است‪ .‬اینها توسط سیستم فایل مدیریت می شوند و به‬
‫همان روشی که فایل های داده کاربر خوانده و نوشته می شوند‪ .‬این یک رابط تمیز و یکنواخت برای کاربران و فرآیندها فراهم‬
‫می کند‪ .‬برای خواندن یا نوشتن در یک دستگاه‪ ،‬درخواست های خواندن و نوشتن برای فایل ویژه مرتبط با دستگاه انجام می‬
‫شود‪.‬‬

‫شکل ‪ 11.12‬ساختار منطقی تسهیالت ‪ I/O‬را نشان می دهد‪ .‬زیرسیستم فایل فایل ها را روی دستگاه های ذخیره سازی ثانویه‬
‫مدیریت می کند‪ .‬عالوه بر این‪ ،‬به عنوان رابط فرآیند برای دستگاه ها عمل می کند‪ ،‬زیرا آنها به عنوان فایل در نظر گرفته می‬
‫شوند‪.‬‬

‫‪619‬‬
‫سیستم عامل های داخلی و اصول طراحی‪620.........................................................................................................................‬‬

‫دو نوع ‪ I/O‬در یونیکس وجود دارد‪ :‬بافر و بدون بافر‪ .‬ورودی‪/‬خروجی بافر از میان بافرهای سیستم عبور می کند‪ ،‬در حالی که‬
‫ورودی‪/‬خروجی بافر نشده معموالً تسهیالت ‪ DMA‬را در بر می گیرد و انتقال مستقیماً بین ماژول ‪ I/O‬و ناحیه ‪ I/O‬فرآیند‬
‫انجام می شود‪ .‬برای ورودی‪/‬خروجی بافر‪ ،‬از دو نوع بافر استفاده می شود‪ :‬کش های بافر سیستم و صف های کاراکتر‪.‬‬

‫بافر کش‬

‫کش بافر در یونیکس اساساً یک کش دیسک است‪ .‬عملیات ورودی‪/‬خروجی با دیسک از طریق کش بافر انجام می شود‪ .‬انتقال‬
‫داده بین کش بافر و فضای پردازش کاربر همیشه با استفاده از ‪ DMA‬انجام می شود‪ .‬از آنجایی که هم حافظه پنهان بافر و هم‬
‫ناحیه ورودی‪/‬خروجی فرآیند در حافظه اصلی قرار دارند‪ ،‬در این مورد از تسهیالت ‪ DMA‬برای انجام یک کپی از حافظه به‬
‫حافظه استفاده می شود‪ .‬این هیچ چرخه پردازنده را مصرف نمی کند‪ ،‬اما چرخه های اتوبوس را مصرف می کند‪.‬‬

‫برای مدیریت کش بافر‪ ،‬سه لیست نگهداری می شود‪:‬‬

‫‪ -‬لیست رایگان‪ :‬فهرستی از تمام اسالت ها در حافظه نهان یک اسالت در یونیکس بافر نامیده می شود‪ ،‬هر شکاف دارای یک‬
‫بخش دیسک است که برای تخصیص در دسترس هستند‪.‬‬

‫‪Device list: -‬فهرست تمام بافرهایی که در حال حاضر با هر دیسک مرتبط هستند‬

‫‪Driver I/O queue: -‬فهرست بافرهایی که در یک دستگاه خاص در حال انجام یا در انتظار ‪ I/O‬هستند‪.‬‬

‫همه بافرها باید در لیست رایگان یا در لیست صف ورودی‪/‬خروجی راننده قرار داشته باشند‪ .‬یک بافر‪ ،‬زمانی که با یک دستگاه‬
‫مرتبط شود‪ ،‬حتی اگر در لیست رایگان باشد‪ ،‬با دستگاه همراه میماند‪ ،‬تا زمانی که واقعاً دوباره استفاده شود و با دستگاه دیگری‬
‫مرتبط شود‪ .‬این فهرستها بهعنوان نشانگرهای مرتبط با هر بافر بهجای فهرستهای مجزای فیزیکی نگهداری میشوند‪.‬‬

‫شکل ‪ 11.12‬ساختار ورودی‪/‬خروجی یونیکس‬

‫‪620‬‬
‫سیستم عامل های داخلی و اصول طراحی‪621.........................................................................................................................‬‬

‫شکل ‪ 11.13‬سازمان کش بافر یونیکس‬

‫هنگامی که به یک شماره بلوک فیزیکی در یک دستگاه خاص اشاره می شود‪ ،‬سیستم عامل ابتدا بررسی می کند که آیا بلوک‬
‫در حافظه نهان بافر قرار دارد یا خیر‪ .‬برای به حداقل رساندن زمان جستجو‪ ،‬لیست دستگاه به عنوان یک جدول هش سازماندهی‬
‫می شود‪ ،‬با استفاده از تکنیکی شبیه به روش سرریز با زنجیره ای که در پیوست ‪F‬شکل ‪F.1b‬بحث شده است‪ .‬شکل ‪11.13‬‬
‫سازماندهی کلی حافظه پنهان بافر را نشان می دهد‪.‬‬

‫یک جدول هش با طول ثابت وجود دارد که حاوی نشانگرهایی در حافظه پنهان بافر است‪ .‬هر ارجاع به یک دستگاه‪ ،#‬بلوک‪ #‬به‬
‫یک ورودی خاص در جدول هش نگاشت می شود‪ .‬اشاره گر در آن ورودی به اولین بافر در زنجیره اشاره می کند‪ .‬یک اشاره گر‬
‫هش مرتبط با هر بافر به بافر بعدی در زنجیره برای ورودی جدول هش اشاره می کند‪ .‬بنابراین‪ ،‬برای همه ارجاعات دستگاه‪،#‬‬
‫بلوک‪ #‬که در یک ورودی جدول هش نگاشت می شوند‪ ،‬اگر بلوک مربوطه در حافظه پنهان بافر باشد‪ ،‬آن بافر در زنجیره آن‬
‫ورودی جدول هش خواهد بود‪ .‬بنابراین‪ ،‬طول جستجوی حافظه پنهان بافر با یک عامل به ترتیب ‪ N‬کاهش می یابد‪ ،‬جایی که‬
‫‪ N‬طول جدول هش است‪.‬‬

‫برای جایگزینی بلوک‪ ،‬از الگوریتمی استفاده میشود که اخیراً کمتر استفاده شده است‪ :‬پس از تخصیص یک بافر به یک بلوک‬
‫دیسک‪ ،‬تا زمانی که تمام بافرهای دیگر اخیراً استفاده نشده باشند‪ ،‬نمیتوان از آن برای بلوک دیگری استفاده کرد‪ .‬لیست رایگان‬
‫این سفارش کم استفاده اخیر را حفظ می کند‪.‬‬

‫‪621‬‬
‫سیستم عامل های داخلی و اصول طراحی‪622.........................................................................................................................‬‬

‫صف کاراکتر‬

‫دستگاههای بلوکگرا‪ ،‬مانند دیسک و کلیدهای ‪ ،USB‬میتوانند به طور مؤثری توسط حافظه پنهان سرویس دهی شوند‪ .‬شکل‬
‫متفاوتی از بافر برای دستگاه های شخصیت گرا مانند پایانه ها و چاپگرها مناسب است‪ .‬صف کاراکتر یا توسط دستگاه‬
‫ورودی‪/‬خروجی نوشته میشود و توسط فرآیند خوانده میشود یا توسط فرآیند نوشته میشود و توسط دستگاه خوانده میشود‪.‬‬
‫در هر دو مورد از مدل تولیدکننده‪/‬مصرف کننده معرفی شده در فصل ‪ 5‬استفاده می شود‪ .‬بنابراین‪ ،‬صف های کاراکتر ممکن‬
‫است فقط یک بار خوانده شود‪ .‬همانطور که هر شخصیت خوانده می شود‪ ،‬به طور موثری از بین می رود‪ .‬این برخالف حافظه‬
‫پنهان بافر است که ممکن است چندین بار خوانده شود و از این رو از مدل خواننده‪/‬نویسنده پیروی می کند همچنین در فصل ‪5‬‬
‫مورد بحث قرار گرفت‪.‬‬

‫ورودی‪/‬خروجی بافر نشده‬

‫‪ I/O‬بدون بافر‪ ،‬که به سادگی ‪ DMA‬بین دستگاه و فضای پردازش است‪ ،‬همیشه سریعترین روش برای انجام ‪ I/O‬یک فرآیند‬
‫است‪ .‬فرآیندی که ‪ I/O‬بدون بافر را انجام می دهد در حافظه اصلی قفل شده است و نمی توان آن را جایگزین کرد‪ .‬این امر‬
‫فرصت های مبادله را با بستن بخشی از حافظه اصلی کاهش می دهد و در نتیجه عملکرد کلی سیستم را کاهش می دهد‪.‬‬
‫همچنین‪ ،‬دستگاه ورودی‪/‬خروجی در طول مدت انتقال با فرآیند مرتبط است و آن را برای سایر فرآیندها در دسترس نیست‪.‬‬

‫دستگاه های یونیکس‬

‫در میان دستههای دستگاههایی که توسط یونیکس به رسمیت شناخته شدهاند‪ ،‬میتوان به موارد زیر اشاره کرد‪:‬‬

‫‪ -‬درایوهای دیسک ‪ r‬درایوهای نوار ‪ r‬پایانه ها‬

‫‪ -‬خطوط ارتباطی‬

‫‪ -‬چاپگرها‬

‫جدول ‪ 11.5‬انواع ورودی‪/‬خروجی مناسب برای هر نوع دستگاه را نشان می دهد‪ .‬درایوهای دیسک به شدت در یونیکس مورد‬
‫استفاده قرار می گیرند‪ ،‬بلوک گرا هستند و پتانسیل باالیی برای توان عملیاتی قابل قبولی دارند‪ .‬بنابراین‪ ،‬ورودی‪/‬خروجی برای‬
‫این دستگاهها بدون بافر یا از طریق کش بافر است‪ .‬درایوهای نوار از نظر عملکردی شبیه درایوهای دیسک هستند و از طرحهای‬
‫‪ I/O‬مشابه استفاده میکنند‪ .‬از آنجا که پایانه ها شامل تبادل نسبتاً کند کاراکترها هستند‪ ،‬ورودی‪/‬خروجی ترمینال معموالً از‬
‫صف کاراکتر استفاده می کند‪ .‬به طور مشابه‪ ،‬خطوط ارتباطی نیاز به پردازش سریالی بایت های داده برای ورودی یا خروجی‬
‫دارند و به بهترین وجه توسط صف های کاراکتر مدیریت می شوند‪ .‬در نهایت‪ ،‬نوع ورودی‪/‬خروجی مورد استفاده برای چاپگر به‬

‫‪622‬‬
‫سیستم عامل های داخلی و اصول طراحی‪623.........................................................................................................................‬‬

‫طور کلی به سرعت آن بستگی دارد‪ .‬چاپگرهای آهسته معموالً از صف کاراکتر استفاده می کنند‪ ،‬در حالی که چاپگر سریع‬
‫ممکن است از ورودی‪/‬خروجی بافر نشده استفاده کند‪ .‬برای چاپگر سریع می توان از کش بافر استفاده کرد‪ .‬با این حال‪ ،‬به دلیل‬
‫داده ها رفتن به چاپگر هرگز مورد استفاده مجدد قرار نمی گیرد‪ ،‬سربار حافظه پنهان بافر غیر ضروری است‪.‬‬

‫جدول ‪ 11.5‬ورودی‪/‬خروجی دستگاه در یونیکس‬

‫‪Unbuffered‬‬ ‫‪Buffer Cache‬‬ ‫‪Character‬‬


‫‪I/O‬‬ ‫‪Queue‬‬
‫دیسک خوان‬ ‫‪X‬‬ ‫‪X‬‬
‫نوار درایو‬ ‫‪X‬‬ ‫‪X‬‬
‫پایانه ها‬ ‫‪X‬‬
‫خطوط ارتباطی‬ ‫‪X‬‬
‫چاپگرها‬ ‫‪X‬‬ ‫‪X‬‬

‫‪I/O LINUX 11.9‬‬

‫به طور کلی‪ ،‬تسهیالت هسته ‪ 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‬زمانبندی مهلت ورودی‪/‬خروجی لینوکس‬

‫برای غلبه بر این مشکالت‪ ،‬زمانبندی مهلت ورودی‪/‬خروجی از سه صف استفاده می کند شکل ‪ .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.........................................................................................................................‬‬

‫‪WINDOWS I/O 11.10‬‬

‫شکل ‪ 11.15‬اجزای کلیدی حالت هسته مربوط به مدیر ‪ I/O‬ویندوز را نشان می دهد‪ .‬مدیر ورودی‪/‬خروجی مسئولیت تمام‬
‫ورودی‪/‬خروجی های سیستم عامل را بر عهده دارد و یک رابط یکنواخت فراهم می کند که همه انواع درایورها می توانند با آن‬
‫تماس بگیرند‪.‬‬

‫امکانات اولیه ورودی‪/‬خروجی‬

‫مدیر ‪ I/O‬با چهار نوع مؤلفه هسته کار می کند‪:‬‬

‫‪Cache manager: -‬مدیر کش کش کردن فایل را برای همه سیستم های فایل مدیریت می کند‪ .‬این می تواند به صورت‬
‫پویا اندازه حافظه پنهان اختصاص داده شده به یک فایل خاص را افزایش و کاهش دهد زیرا مقدار حافظه فیزیکی موجود‬
‫متفاوت است‪ .‬سیستم به روز رسانی ها را فقط در حافظه پنهان و نه روی دیسک ضبط می کند‪ .‬یک رشته هسته‪ ،‬نویسنده‬
‫تنبل‪ ،‬بهروزرسانیها را به صورت دورهای دستهبندی میکند تا روی دیسک بنویسد‪ .‬نوشتن بهروزرسانیها به صورت دستهای‬
‫باعث میشود که ‪ I/O‬کارآمدتر باشد‪ .‬مدیر کش با نگاشت مناطق فایل ها در حافظه مجازی هسته کار می کند و سپس با تکیه‬
‫بر مدیر حافظه مجازی بیشتر کار را برای کپی کردن صفحات به و از فایل های روی دیسک انجام می دهد‪.‬‬

‫‪ -‬درایورهای سیستم فایل‪ :‬مدیر ‪ I/O‬با یک درایور سیستم فایل فقط به عنوان یک درایور دستگاه دیگر رفتار می کند و‬
‫درخواست های ‪ I/O‬را برای حجم های سیستم فایل به درایور نرم افزار مناسب برای آن حجم هدایت می کند‪ .‬سیستم فایل به‬
‫نوبه خود درخواست های ورودی‪/‬خروجی را به درایورهای نرم افزاری که آداپتور دستگاه سخت افزاری را مدیریت می کنند‬
‫ارسال می کند‪.‬‬

‫‪ -‬درایورهای شبکه‪ :‬ویندوز دارای قابلیت های شبکه یکپارچه و پشتیبانی از سیستم های فایل راه دور است‪ .‬امکانات بهعنوان‬
‫درایورهای نرمافزار به جای بخشی از ‪ Windows Executive‬پیادهسازی میشوند‪.‬‬

‫‪ -‬درایورهای دستگاه سخت افزاری‪ :‬این درایورهای نرم افزاری با استفاده از نقاط ورودی در الیه انتزاعی سخت افزار به‬
‫رجیسترهای سخت افزاری دستگاه های جانبی دسترسی دارند‪ .‬مجموعه ای از این روال ها برای هر پلتفرمی که ویندوز‬
‫پشتیبانی می کند وجود دارد‪ .‬از آنجایی که نامهای روتین برای همه پلتفرمها یکسان است‪ ،‬کد منبع درایورهای دستگاه ویندوز‬
‫در انواع مختلف پردازنده قابل حمل است‪.‬‬

‫‪627‬‬
‫سیستم عامل های داخلی و اصول طراحی‪628.........................................................................................................................‬‬

‫ورودی‪/‬خروجی آسنکرون و همزمان‬

‫ویندوز دو حالت عملکرد ورودی‪/‬خروجی را ارائه می دهد‪ :‬ناهمزمان و همزمان‪ .‬حالت ناهمزمان در صورت امکان برای بهینه‬
‫سازی عملکرد برنامه استفاده می شود‪.‬‬

‫شکل ‪Windows I/O Manager 11.15‬‬

‫با ‪ 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‬روی همان دیسک وجود داشته باشد‪ .‬هدف از زمانبندی دیسک برآوردن‬
‫این درخواستها بهگونهای است که این درخواستها را به حداقل برساند‬

‫زمان جستجوی مکانیکی دیسک و در نتیجه بهبود عملکرد‪ .‬طرح فیزیکی درخواست های در حال انتظار به عالوه مالحظات‬
‫محلی وارد عمل می شوند‪.‬‬

‫کش دیسک یک بافر است که معموالً در حافظه اصلی نگهداری می شود و به عنوان کش بلوک های دیسک بین حافظه دیسک‬
‫و بقیه حافظه اصلی عمل می کند‪ .‬به دلیل اصل محلی بودن‪ ،‬استفاده از کش دیسک باید به طور قابل مالحظه ای تعداد بلوک‬
‫های انتقال ورودی‪/‬خروجی بین حافظه اصلی و دیسک را کاهش دهد‪.‬‬

‫‪ 11.12‬خواندن و انیمیشن های توصیه شده‬

‫بحثهای کلی در مورد ورودی‪/‬خروجی کامپیوتر را میتوان در بیشتر کتابهای مربوط به معماری کامپیوتر‪ ،‬مانند ‪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‬موجود است‪ .‬خواننده تشویق می شود‬
‫که انیمیشن ها را برای تقویت مفاهیم این فصل مشاهده کند‪.‬‬

‫‪ 11.13‬اصطالحات کلیدی‪ ،‬سؤاالت و مشکالت را مرور کنید‬

‫کلمات کلیدی‬

‫مسدود کردن‬ ‫ورودی‪/‬خروجی‬ ‫آرایه اضافی از‬


‫بافر دایره ای دستگاه بلوک‬ ‫‪I/O‬بافر‪I/O‬‬ ‫دیسک های‬
‫گرا‬ ‫‪I/O‬کانال‬ ‫مستقل‬

‫ورودی‪/‬خروجی دستگاه‬ ‫‪I/O‬پردازنده‬ ‫بخش تاخیر‬


‫منطقی ‪I/O‬‬ ‫چرخشی‬
‫زمان دسترسی به دیسک‬
‫دیسک‬ ‫به دنبال زمان‬
‫دسترسی مستقیم به‬
‫مغناطیسی‬
‫حافظه‬ ‫آهنگ دستگاه‬
‫هد‬

‫‪632‬‬
‫سیستم عامل های داخلی و اصول طراحی‪633.........................................................................................................................‬‬

‫شکاف کش دیسک‬ ‫خواندن‪/‬نوشت‬ ‫جریان گرا‬


‫ورودی‪/‬خروجی مبتنی بر‬ ‫ن‬ ‫زمان انتقال‬
‫وقفه‬ ‫ورودی‪/‬خروج‬
‫ی برنامه‬
‫ریزی شده‬

‫بررسی سواالت‬

‫‪ .11.1‬سه تکنیک برای انجام ‪ I/O‬را فهرست کرده و به طور خالصه تعریف کنید‪.‬‬

‫‪ .11.2‬تفاوت بین ‪ I/O‬منطقی و ‪ I/O‬دستگاه چیست؟‬

‫‪ .11.3‬تفاوت بین دستگاه های بلوک گرا و دستگاه های جریان گرا چیست؟ از هر کدام چند مثال بزنید‪.‬‬

‫‪ .11.4‬چرا انتظار دارید عملکرد بهتری با استفاده از یک بافر دوگانه به جای یک بافر واحد برای ‪ I/O‬داشته باشید؟‬

‫‪ .11.5‬چه عناصر تاخیری در خواندن یا نوشتن دیسک دخیل هستند؟‬

‫‪ .11.6‬به طور خالصه سیاست های زمان بندی دیسک نشان داده شده در شکل ‪ 11.7‬را تعریف کنید‪.‬‬

‫‪ .11.7‬به طور خالصه هفت سطح ‪ RAID‬را تعریف کنید‪.‬‬

‫‪ .11.8‬اندازه بخش معمولی دیسک چقدر است؟‬

‫چالش ها و مسائل‬

‫‪ .11.1‬برنامه ای را در نظر بگیرید که به یک دستگاه ورودی‪/‬خروجی واحد دسترسی دارد و ‪ I/O‬بافر نشده را با استفاده از بافر‬
‫مقایسه کنید‪ .‬نشان دهید که استفاده از بافر می تواند زمان اجرا را حداکثر تا دو برابر کاهش دهد‪.‬‬

‫‪ .11.2‬نتیجه مسئله ‪ 11.1‬را به حالتی تعمیم دهید که در آن برنامه به ‪ n‬اشاره می کند‬

‫‪ .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. ،‬مشخص‬
‫کردن خط مشی زمانی که‬

‫آ‪Fold = 1 - Fnew .‬‬

‫ب ‪Fold = 1> 1cache size2‬‬

‫‪ .11.7‬اگر دیسک سکتور ثابت با ‪ 512‬بایت در سکتور‪ ،‬با ‪ 96‬سکتور‪/‬تراک‪ 110 ،‬تراک در هر سطح و ‪ 8‬باشد‪ ،‬چقدر فضای‬
‫دیسک در بخش ها‪ ،‬تراک ها و سطوح برای ذخیره ‪ 300000‬رکورد منطقی ‪ 120‬بایتی مورد نیاز است‪ .‬سطوح قابل استفاده هر‬
‫رکوردهای هدر فایل و فهرست های ردیابی را نادیده بگیرید و فرض کنید که رکوردها نمی توانند دو بخش را پوشش دهند‪.‬‬

‫‪634‬‬
‫سیستم عامل های داخلی و اصول طراحی‪635.........................................................................................................................‬‬

‫‪ .11.8‬سیستم دیسک توضیح داده شده در مسئله ‪ 11.7‬را در نظر بگیرید و فرض کنید که دیسک با سرعت ‪ 360‬دور در دقیقه‬
‫می چرخد‪ .‬یک پردازنده یک بخش از دیسک را با استفاده از ‪ I/O‬مبتنی بر وقفه‪ ،‬با یک وقفه در هر بایت می خواند‪ .‬اگر پردازش‬
‫هر وقفه ‪ 2.5‬میکروثانیه طول بکشد‪ ،‬پردازنده چند درصد از زمان را صرف مدیریت ‪ I/O‬خواهد کرد بی توجهی به زمان‬
‫جستجو؟‬

‫‪ .11.9‬مشکل قبلی را با استفاده از ‪ DMA‬تکرار کنید و یک وقفه در هر بخش فرض کنید‪.‬‬

‫‪ .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‬فهرست فایل‬

‫نامگذاری ساختار محتوا‬

‫‪ 12.5‬به اشتراک گذاری فایل‬

‫حقوق دسترسی دسترسی همزمان‬

‫‪ 12.6‬مسدود کردن رکورد‬

‫‪ 12.7‬مدیریت ذخیره سازی ثانویه‬

‫تخصیص فایل‬

‫حجم های مدیریت فضای آزاد‬

‫قابلیت اطمینان‬

‫‪ 12.8‬مدیریت فایل یونیکس‬

‫‪ inode‬ها‬

‫ساختار حجم فهرست راهنماهای تخصیص فایل‬


‫‪636‬‬
‫سیستم عامل های داخلی و اصول طراحی‪637.........................................................................................................................‬‬

‫‪ 12.9‬سیستم فایل مجازی لینوکس‬

‫شی ‪ Superblock‬شی ‪Inode‬‬

‫شیء دندانپزشکی شیء فایل حافظه پنهان‬

‫‪ 12.10‬سیستم فایل ویندوز‬

‫ویژگی های کلیدی ‪NTFS‬‬

‫قابلیت بازیابی حجم و ساختار فایل ‪NTFS‬‬

‫‪ 12.11‬مدیریت فایل اندروید‬

‫سیستم فایل ‪SQLite‬‬

‫‪ 12.12‬خالصه‬

‫‪ 12.13‬مطالعه توصیه شده‬

‫‪ 12.14‬اصطالحات کلیدی‪ ،‬سؤاالت مروری و مشکالت‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬مفاهیم اساسی فایل ها و سیستم های فایل را توضیح دهید‪.‬‬

‫‪ -‬تکنیک های اصلی سازماندهی پرونده و دسترسی را بدانید‪.‬‬

‫‪ -‬درختان ‪ B‬را تعریف کنید‪.‬‬

‫‪ -‬دایرکتوری های فایل را توضیح دهید‪.‬‬

‫‪ -‬الزامات اشتراک گذاری فایل را درک کنید‪.‬‬

‫‪ -‬مفهوم مسدود کردن رکورد را درک کنید‪.‬‬

‫‪ -‬مسائل طراحی اصلی را برای مدیریت ذخیره سازی ثانویه توضیح دهید‪.‬‬

‫‪ -‬مسائل طراحی برای امنیت سیستم فایل را درک کنید‪.‬‬


‫‪637‬‬
‫سیستم عامل های داخلی و اصول طراحی‪638.........................................................................................................................‬‬

‫‪ -‬فایل سیستم عامل مورد استفاده در لینوکس‪ ،‬یونیکس و ویندوز ‪ 7‬را توضیح دهید‪.‬‬

‫در اکثر برنامه ها‪ ،‬فایل عنصر مرکزی است‪ .‬به استثنای برنامه های بالدرنگ و برخی برنامه های تخصصی دیگر‪ ،‬ورودی برنامه از‬
‫طریق یک فایل است‪ .‬و تقریباً در همه برنامه ها‪ ،‬خروجی در یک فایل برای ذخیره سازی طوالنی مدت و برای دسترسی بعدی‬
‫توسط کاربر و سایر برنامه ها ذخیره می شود‪.‬‬

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

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

‫‪ 12.1‬نمای کلی‬

‫فایل ها و سیستم های فایل‬

‫از دیدگاه کاربر‪ ،‬یکی از مهم ترین بخش های یک سیستم عامل‪ ،‬سیستم فایل است‪ .‬سیستم فایل به کاربران اجازه می دهد تا‬
‫مجموعه های داده ای به نام فایل ها را با ویژگی های مطلوب ایجاد کنند‪ ،‬مانند‪:‬‬

‫‪ -‬وجود طوالنی مدت‪ :‬فایل ها بر روی دیسک یا سایر حافظه های ثانویه ذخیره می شوند و زمانی که کاربر از سیستم خارج می‬
‫شود ناپدید نمی شوند‪.‬‬

‫‪ -‬قابل اشتراک گذاری بین فرآیندها‪ :‬فایل ها دارای نام هستند و می توانند مجوزهای دسترسی مرتبطی داشته باشند که به‬
‫اشتراک گذاری کنترل شده اجازه می دهد‪.‬‬

‫‪ -‬ساختار‪ :‬بسته به سیستم فایل‪ ،‬یک فایل می تواند ساختار داخلی داشته باشد که برای برنامه های خاص مناسب است‪ .‬عالوه بر‬
‫این‪ ،‬فایل ها را می توان در ساختار سلسله مراتبی یا پیچیده تر سازماندهی کرد تا روابط بین فایل ها را منعکس کند‪.‬‬

‫‪638‬‬
‫سیستم عامل های داخلی و اصول طراحی‪639.........................................................................................................................‬‬

‫هر سیستم فایلی نه تنها وسیله ای برای ذخیره داده های سازماندهی شده به صورت فایل‪ ،‬بلکه مجموعه ای از توابع است که می‬
‫تواند بر روی فایل ها انجام شود‪ .‬عملیات معمولی شامل موارد زیر است‪:‬‬

‫‪Create: -‬یک فایل جدید در ساختار فایل ها تعریف و قرار می گیرد‪.‬‬

‫‪ -‬حذف‪ :‬یک فایل از ساختار فایل حذف شده و از بین می رود‪.‬‬

‫‪Open: -‬یک فایل موجود اعالم می شود که توسط یک فرآیند "باز شده" است و به فرآیند اجازه می دهد تا عملکردهایی را‬
‫روی فایل انجام دهد‪.‬‬

‫‪Close: -‬فایل با توجه به یک فرآیند بسته می شود‪ ،‬به طوری که فرآیند دیگر ممکن است عملکردی را روی فایل انجام ندهد‪،‬‬
‫تا زمانی که فرآیند دوباره فایل را باز کند‪.‬‬

‫‪Read: -‬یک فرآیند تمام یا بخشی از داده های یک فایل را می خواند‪.‬‬

‫‪ -‬نوشتن‪ :‬یک فرآیند یک فایل را به روز می کند‪ ،‬یا با افزودن داده های جدید که اندازه فایل را افزایش می دهد یا با تغییر‬
‫مقادیر موارد داده موجود در فایل‪ .‬به طور معمول‪ ،‬یک سیستم فایل مجموعه ای از ویژگی های مرتبط با فایل را حفظ می کند‪.‬‬
‫این موارد شامل مالک‪ ،‬زمان ایجاد‪ ،‬زمان آخرین تغییر و امتیازات دسترسی است‪.‬‬

‫ساختار فایل‬

‫هنگام بحث در مورد پرونده ها‪ ،‬چهار اصطالح رایج است‪:‬‬

‫‪ -‬زمینه‬

‫‪ -‬ضبط کنید‬

‫‪ -‬فایل‬

‫‪ -‬پایگاه داده‬

‫زمینه عنصر اصلی داده است‪ .‬یک زمینه مجزا حاوی یک مقدار واحد است‪ ،‬مانند نام خانوادگی کارمند‪ ،‬تاریخ یا مقدار قرائت‬
‫سنسور‪ .‬این با طول و نوع داده آن مشخص می شود به عنوان مثال‪ ،‬رشته ‪ ،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‬برای انواع دستگاه های ذخیره سازی‬

‫‪ -‬برای به حداقل رساندن یا حذف پتانسیل از دست دادن یا از بین رفتن داده ها‬

‫‪ -‬برای ارائه مجموعه ای استاندارد از روال های رابط ورودی‪/‬خروجی به فرآیندهای کاربر‬

‫‪ -‬برای ارائه پشتیبانی ‪ I/O‬برای چندین کاربر‪ ،‬در مورد سیستم های چند کاربره‬

‫با توجه به اولین نکته‪ ،‬برآورده کردن نیازهای کاربر‪ ،‬میزان چنین الزاماتی به تنوع برنامه ها و محیطی که سیستم کامپیوتری در‬
‫آن استفاده خواهد شد‪ ،‬بستگی دارد‪ .‬برای یک سیستم تعاملی و همه منظوره‪ ،‬موارد زیر حداقل مجموعه ای از الزامات را تشکیل‬
‫می دهند‪:‬‬

‫‪ .1‬هر کاربر باید قادر به ایجاد‪ ،‬حذف‪ ،‬خواندن‪ ،‬نوشتن و اصالح فایل ها باشد‪.‬‬

‫‪ .2‬هر کاربر ممکن است دسترسی کنترل شده ای به فایل های کاربران دیگر داشته باشد‪.‬‬

‫‪ .3‬هر کاربر ممکن است کنترل کند که چه نوع دسترسی هایی به فایل های کاربر مجاز است‪.‬‬

‫‪ .4‬هر کاربر باید بتواند داده ها را بین فایل ها جابجا کند‪.‬‬

‫‪ .5‬هر کاربر باید بتواند از فایل های کاربر در صورت آسیب بک آپ گیری و بازیابی کند‪.‬‬

‫‪ .6‬هر کاربر باید بتواند به فایل های خود با نام دسترسی داشته باشد نه با شناسه عددی‪.‬‬

‫این اهداف و الزامات باید در طول بحث ما در مورد سیستم های مدیریت فایل در نظر گرفته شود‪.‬‬

‫معماری سیستم فایل یکی از راههای درک حوزه مدیریت فایل‪ ،‬نگاه کردن به تصویری از یک سازمان نرمافزار معمولی است‪،‬‬
‫همانطور که در شکل ‪ 12.1‬پیشنهاد شده است‪ .‬البته‪ ،‬سیستم های مختلف به طور متفاوتی سازماندهی خواهند شد‪ ،‬اما این‬
‫سازمان نماینده معقولی است‪ .‬در پایینترین سطح‪ ،‬درایورهای دستگاه مستقیماً با دستگاههای جانبی یا کنترلکنندهها یا‬

‫‪642‬‬
‫سیستم عامل های داخلی و اصول طراحی‪643.........................................................................................................................‬‬

‫کانالهای آنها ارتباط برقرار میکنند‪ .‬درایور دستگاه مسئول شروع عملیات ‪ I/O‬روی دستگاه و پردازش تکمیل درخواست ‪I/O‬‬
‫است‪ .‬برای عملیات فایل‪ ،‬دستگاه های معمولی کنترل شده دیسک و درایو نوار هستند‪ .‬درایورهای دستگاه معموالً بخشی از‬
‫سیستم عامل در نظر گرفته می شوند‪.‬‬

‫شکل ‪ 12.1‬معماری نرم افزار سیستم فایل‬

‫بهینه سازی عملکرد بافرهای ورودی‪/‬خروجی اختصاص داده شده و حافظه ثانویه در این سطح تخصیص داده می شود‪ .‬ناظر‬
‫اصلی ‪ I/O‬بخشی از سیستم عامل است‪ Logical I/O .‬به کاربران و برنامه ها امکان دسترسی به رکوردها را می دهد‪ .‬بنابراین‪،‬‬
‫در حالی که سیستم فایل اصلی با بلوک های داده سر و کار دارد‪ ،‬ماژول ‪ I/O‬منطقی با رکوردهای فایل سروکار دارد‪Logical .‬‬
‫‪ I/O‬یک قابلیت ورودی‪/‬خروجی رکورد همه منظوره را فراهم می کند و داده های اولیه را در مورد فایل ها نگهداری می کند‪.‬‬

‫نزدیکترین سطح فایل سیستم به کاربر اغلب روش دسترسی نامیده می شود‪ .‬این یک رابط استاندارد بین برنامهها و سیستمهای‬
‫فایل و دستگاههایی که دادهها را نگهداری میکنند‪ ،‬فراهم میکند‪ .‬روشهای دسترسی مختلف ساختارهای مختلف فایل و‬
‫روشهای مختلف دسترسی و پردازش دادهها را منعکس میکنند‪ .‬برخی از متداولترین روشهای دسترسی در شکل ‪ 12.1‬نشان‬
‫داده شدهاند‪ ،‬و به طور خالصه در بخش ‪ 12.2‬توضیح داده شدهاند‪.‬‬

‫توابع مدیریت فایل روش دیگری برای مشاهده عملکردهای یک سیستم فایل در شکل ‪ 12.2‬نشان داده شده است‪ .‬اجازه دهید‬
‫این نمودار را از چپ به راست دنبال کنیم‪ .‬کاربران و برنامه های کاربردی با استفاده از دستوراتی برای ایجاد و حذف فایل ها و‬
‫برای انجام عملیات روی فایل ها با سیستم فایل تعامل دارند‪ .‬قبل از انجام هر عملیاتی‪ ،‬سیستم فایل باید فایل انتخاب شده را‬
‫شناسایی و مکان یابی کند‪ .‬این امر مستلزم استفاده از نوعی دایرکتوری است که برای توصیف مکان همه فایلها‪ ،‬به عالوه‬
‫ویژگیهای آنها عمل میکند‪ .‬عالوه بر این‪ ،‬اکثر سیستم های مشترک کنترل دسترسی کاربر را اعمال می کنند‪ :‬فقط کاربران‬
‫مجاز مجاز به دسترسی به فایل های خاص به روش های خاص هستند‪ .‬عملیات اساسی که یک کاربر یا یک برنامه ممکن است‬
‫روی یک فایل انجام دهد در سطح رکورد انجام می شود‪ .‬کاربر یا برنامه‪ ،‬فایل را دارای ساختاری میبیند که سوابق را سازماندهی‬

‫‪643‬‬
‫سیستم عامل های داخلی و اصول طراحی‪644.........................................................................................................................‬‬

‫میکند‪ ،‬مانند ساختار متوالی به عنوان مثال‪ ،‬سوابق پرسنل بر اساس حروف الفبا بر اساس نام خانوادگی ذخیره میشوند‪.‬‬
‫بنابراین‪ ،‬برای ترجمه دستورات کاربر به دستورات دستکاری فایل خاص‪ ،‬باید از روش دسترسی مناسب برای این ساختار فایل‬
‫استفاده شود‪ .‬در حالی که کاربران و برنامه ها با رکوردها یا زمینه ها سروکار دارند‪ I/O ،‬بر اساس بلوک انجام می شود‪ .‬بنابراین‪،‬‬
‫رکوردها یا زمینه های یک فایل باید بهعنوان دنبالهای از بلوکها برای خروجی سازماندهی شوند و پس از ورودی‪ ،‬مسدود شوند‪.‬‬
‫برای پشتیبانی از بلوک ورودی‪/‬خروجی فایل ها‪ ،‬چندین عملکرد مورد نیاز است‪ .‬ذخیره سازی ثانویه باید مدیریت شود‪.‬‬

‫این شامل تخصیص فایلها به بلوکهای رایگان در حافظه ثانویه و مدیریت فضای ذخیرهسازی رایگان است تا بدانیم چه‬
‫بلوکهایی برای فایلهای جدید و رشد فایلهای موجود در دسترس هستند‪ .‬عالوه بر این‪ ،‬درخواستهای ورودی‪/‬خروجی بالک‬
‫منفرد باید زمانبندی شوند‪ .‬این موضوع در فصل ‪ 11‬مورد بررسی قرار گرفت‪ .‬هم زمانبندی دیسک و هم تخصیص فایل مربوط‬
‫به بهینهسازی عملکرد هستند‪ .‬همانطور که انتظار می رود‪ ،‬بنابراین این توابع باید با هم در نظر گرفته شوند‪ .‬عالوه بر این‪ ،‬بهینه‬
‫سازی به ساختار فایل ها و الگوهای دسترسی بستگی دارد‪ .‬بر این اساس‪ ،‬توسعه یک سیستم مدیریت فایل بهینه از نقطه نظر‬
‫عملکرد یک کار بسیار پیچیده است‪.‬‬

‫شکل ‪ 12.2‬تقسیمی را بین آنچه که ممکن است نگرانی های سیستم مدیریت فایل به عنوان یک ابزار سیستم مجزا در نظر‬
‫گرفته شود و نگرانی های سیستم عامل‪ ،‬با نقطه تقاطع پردازش رکوردها نشان می دهد‪ .‬این تقسیم دلخواه است‪ .‬رویکردهای‬
‫مختلفی در سیستم های مختلف اتخاذ می شود‪.‬‬

‫سوابق‬ ‫بلوک های فیزیکی‬ ‫بلوک های فیزیکی در ذخیره‬


‫در بافرهای حافظه‬ ‫سازی ثانویه (دیسک)‬
‫ساختار‬ ‫اصلی‬
‫فایل‬
‫مدیران‬ ‫روش‬ ‫زمان بندی‬
‫دسترسی‬ ‫دیسک‬
‫دایرکتوری‬

‫دستورات‬
‫کاربر و برنامه‬ ‫توابع‬ ‫مدیریت فضای‬
‫دستکاری‬ ‫ذخیره سازی‬
‫فایل‬ ‫رایگان‬
‫تخصیص‬
‫فایل‬
‫کنترل دسترسی‬
‫کاربر‬

‫نگرانی های مدیریت فایل‬

‫نگرانی های سیستم عامل‬


‫شکل ‪ 12.2‬عناصر مدیریت فایل‬

‫‪644‬‬
‫سیستم عامل های داخلی و اصول طراحی‪645.........................................................................................................................‬‬

‫در ادامه این فصل‪ ،‬به برخی از مسائل طراحی پیشنهاد شده در شکل ‪ 12.2‬نگاه می کنیم‪ .‬ما با بحث در مورد سازماندهی فایل و‬
‫روش های دسترسی شروع می کنیم‪ .‬اگرچه این موضوع فراتر از محدوده چیزی است که معموالً نگرانی های سیستم عامل در‬
‫نظر گرفته می شود‪ ،‬ارزیابی سایر مسائل مربوط به طراحی فایل بدون قدردانی از سازماندهی پرونده و دسترسی غیرممکن است‪.‬‬
‫در مرحله بعد‪ ،‬به مفهوم فهرست فایل ها نگاه می کنیم‪ .‬اینها اغلب توسط سیستم عامل به نمایندگی از سیستم مدیریت فایل‬
‫مدیریت می شوند‪.‬‬

‫موضوعات باقی مانده به جنبه های فیزیکی ‪ I/O‬مدیریت فایل می پردازند و به درستی به عنوان جنبه های طراحی سیستم‬
‫عامل در نظر گرفته می شوند‪ .‬یکی از این مسائل نحوه سازماندهی رکوردهای منطقی در بلوک های فیزیکی است‪ .‬در نهایت‪،‬‬
‫مسائل مربوط به تخصیص فایل در ذخیره سازی ثانویه و مدیریت ذخیره سازی ثانویه رایگان وجود دارد‪.‬‬

‫‪ 12.2‬سازماندهی و دسترسی به فایل‬

‫در این بخش‪ ،‬ما از اصطالح سازماندهی پرونده برای اشاره به ساختار منطقی رکوردها که بر اساس روش دسترسی به آنها تعیین‬
‫می شود‪ ،‬استفاده می کنیم‪ .‬سازماندهی فیزیکی فایل در ذخیره سازی ثانویه به استراتژی مسدود کردن و استراتژی تخصیص‬
‫فایل بستگی دارد‪ ،‬مسائلی که در ادامه این فصل به آنها پرداخته می شود‪.‬‬

‫در انتخاب یک سازمان پرونده‪ ،‬چندین معیار مهم هستند‪:‬‬

‫‪ -‬زمان دسترسی کوتاه‬

‫‪ -‬سهولت به روز رسانی‬

‫‪ -‬صرفه جویی در ذخیره سازی‬

‫‪ -‬تعمیر و نگهداری ساده‬

‫‪ -‬قابلیت اطمینان‬

‫اولویت نسبی این معیارها به برنامه هایی که از فایل استفاده می کنند بستگی دارد‪ .‬برای مثال‪ ،‬اگر قرار است یک فایل فقط در‬
‫حالت دستهای پردازش شود‪ ،‬و هر بار به همه رکوردها دسترسی داشته باشید‪ ،‬دسترسی سریع برای بازیابی یک رکورد تنها‬
‫کمترین نگرانی را دارد‪ .‬فایل ذخیره شده در ‪ CD-ROM‬هرگز به روز نمی شود‪ ،‬و بنابراین سهولت به روز رسانی مشکلی‬
‫نیست‪.‬‬

‫‪645‬‬
‫سیستم عامل های داخلی و اصول طراحی‪646.........................................................................................................................‬‬

‫این معیارها ممکن است در تضاد باشند‪ .‬به عنوان مثال‪ ،‬برای صرفه جویی در ذخیره سازی‪ ،‬باید حداقل افزونگی در داده ها‬
‫وجود داشته باشد‪ .‬از سوی دیگر‪ ،‬افزونگی ابزار اصلی افزایش سرعت دسترسی به داده ها است‪ .‬نمونه ای از این موارد استفاده از‬
‫شاخص ها است‪.‬‬

‫تعداد سازمانهای فایل جایگزینی که پیادهسازی شدهاند یا به تازگی پیشنهاد شدهاند‪ ،‬بهطور غیرقابل مدیریتی زیاد است‪ ،‬حتی‬
‫برای کتابی که به سیستمهای فایل اختصاص داده شده است‪ .‬در این بررسی مختصر‪ ،‬پنج سازمان اساسی را تشریح خواهیم کرد‪.‬‬
‫اکثر ساختارهای مورد استفاده در سیستم های واقعی یا در یکی از این دسته بندی ها قرار می گیرند یا می توانند با ترکیبی از‬
‫این سازمان ها پیاده سازی شوند‪ .‬پنج سازمان‪ ،‬چهار سازمان اول که در شکل ‪ 12.3‬نشان داده شده اند‪ ،‬به شرح زیر هستند‪:‬‬

‫‪ -‬شمع‬

‫‪ -‬فایل متوالی‬

‫‪ -‬فایل متوالی نمایه شده‬

‫‪ -‬فایل نمایه شده‬

‫‪ -‬فایل مستقیم یا هش شده‬

‫‪646‬‬
‫سیستم عامل های داخلی و اصول طراحی‪647.........................................................................................................................‬‬

‫رکوردهای با طول متغیر مجموعه‬ ‫رکوردهای با طول ثابت ‪/‬مجموعه زمینه های ثابت‬
‫متغیر زمینه ها ترتیب زمانی‬ ‫به ترتیب ثابت ترتیب ترتیبی بر اساس زمینه کلیدی‬

‫(ب) فایل متوالی‬


‫(الف) فایل شمع‬

‫(ج) فایل متوالی نمایه شده‬

‫(د) فایل نمایه شده‬


‫شکل ‪ 12.3‬سازمان های فایل مشترک‬

‫توده‬

‫کم پیچیده ترین شکل سازماندهی پرونده را می توان انبوه نامید‪ .‬داده ها به ترتیبی که می رسند جمع آوری می شوند‪ .‬هر‬
‫رکورد از یک سری داده تشکیل شده است‪ .‬هدف از شمع صرفاً جمع آوری انبوه داده و ذخیره آن است‪ .‬رکوردها ممکن است‬
‫زمینه های متفاوتی داشته باشند یا زمینه های مشابهی به ترتیب متفاوت داشته باشند‪ .‬بنابراین‪ ،‬هر زمینه باید خود توصیف‬
‫کننده باشد‪ ،‬شامل نام زمینه و همچنین مقدار‪ .‬طول هر زمینه باید به طور ضمنی با جداکننده ها مشخص شود‪ ،‬به طور صریح‬
‫به عنوان یک زیرزمینه درج شود‪ ،‬یا به عنوان پیش فرض برای آن نوع زمینه شناخته شود‪.‬‬

‫‪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.........................................................................................................................‬‬

‫شکل ‪ 12.4‬یک گره درخت ‪ B‬با ‪ k‬فرزند‬

‫قبل از تشریح مفهوم ‪ ،B-tree‬اجازه دهید درخت ‪ B‬و ویژگی های آن را دقیق تر تعریف کنیم‪ B-tree .‬یک ساختار درختی‬
‫است بدون حلقه بسته با ویژگی های زیر شکل ‪:12.4‬‬

‫‪ .1‬درخت از تعدادی گره و برگ تشکیل شده است‪.‬‬

‫‪ .2‬هر گره حاوی حداقل یک کلید است که به طور منحصر به فرد یک رکورد فایل را شناسایی می کند‪ ،‬و بیش از یک اشاره گر‬
‫به گره ها یا برگه های فرزند‪ .‬تعداد کلیدها و اشاره گرهای موجود در یک گره ممکن است در محدوده های توضیح داده شده در‬
‫زیر متفاوت باشد‪.‬‬

‫‪ .3‬هر گره به همان تعداد کلید حداکثر محدود می شود‪.‬‬

‫‪ .4‬کلیدهای یک گره به ترتیب غیر کاهشی ذخیره می شوند‪ .‬هر کلید دارای یک فرزند مرتبط است که ریشه یک زیردرخت‬
‫حاوی تمام گرههای دارای کلیدهای کوچکتر یا مساوی با کلید اما بزرگتر از کلید قبلی است‪ .‬یک گره همچنین دارای یک فرزند‬
‫سمت راست اضافی است که ریشه برای زیردرختی است که شامل همه کلیدها بزرگتر از هر کلید در گره است‪ .‬بنابراین‪ ،‬هر گره‬
‫یک اشاره گر بیشتر از کلیدها دارد‪.‬‬

‫یک درخت ‪ B‬با حداقل درجه ‪ d‬مشخص می شود و ویژگی های زیر را برآورده می کند‪:‬‬

‫‪ .1‬هر گره حداکثر دارای کلیدهای ‪ d 12‬و فرزندان ‪ d2‬یا به طور معادل‪ ،‬اشاره گرهای ‪ d2‬است‪.‬‬

‫‪ .2‬هر گره‪ ،‬به جز ریشه‪ ،‬حداقل دارای ‪ d 1‬کلید و ‪ d‬اشاره گر است‪ .‬در نتیجه‪ ،‬هر گره داخلی‪ ،‬به جز ریشه‪ ،‬حداقل نیمه پر است‬
‫و حداقل ‪ d‬فرزند دارد‪.‬‬

‫‪ .3‬ریشه حداقل ‪ 1‬کلید و ‪ 2‬فرزند دارد‪.‬‬

‫‪ .4‬همه برگها در یک سطح ظاهر می شوند و هیچ اطالعاتی ندارند‪ .‬این یک ساختار منطقی برای پایان دادن به درخت است‪.‬‬
‫اجرای واقعی ممکن است متفاوت باشد‪ .‬به عنوان مثال‪ ،‬هر گره سطح پایین ممکن است حاوی کلیدهای متناوب با اشاره گرهای‬
‫تهی باشد‪.‬‬

‫‪652‬‬
‫سیستم عامل های داخلی و اصول طراحی‪653.........................................................................................................................‬‬

‫‪ .5‬یک گره بدون برگ با ‪ K‬نشانگر حاوی کلیدهای ‪ k 1‬است‪.‬‬

‫به طور معمول‪ ،‬درخت ‪ 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‬‬

‫شکل ‪ 12.5‬فرآیند درج را بر روی یک درخت ‪ B‬با درجه ‪ d 3‬نشان می دهد‪ .‬در هر قسمت از شکل‪ ،‬گره های تحت تأثیر فرآیند‬
‫درج بدون سایه هستند‪.‬‬

‫‪654‬‬
‫سیستم عامل های داخلی و اصول طراحی‪655.........................................................................................................................‬‬

‫‪ 12.4‬دایرکتوری های فایل‬

‫فهرست‬

‫مرتبط با هر سیستم مدیریت فایل و مجموعه ای از فایل ها یک فهرست فایل است‪ .‬دایرکتوری حاوی اطالعاتی درباره فایل ها‪،‬‬
‫از جمله ویژگی ها‪ ،‬مکان و مالکیت است‪ .‬بسیاری از این اطالعات‪ ،‬به ویژه اطالعات مربوط به ذخیره سازی‪ ،‬توسط سیستم عامل‬
‫مدیریت می شود‪ .‬دایرکتوری خود یک فایل است که با روال های مختلف مدیریت فایل قابل دسترسی است‪ .‬اگرچه برخی از‬
‫اطالعات دایرکتوری ها در دسترس کاربران و برنامه های کاربردی است‪ ،‬اما عموماً به طور غیر مستقیم توسط روتین های‬
‫سیستم ارائه می شود‪.‬‬

‫جدول ‪ 12.1‬عناصر اطالعاتی یک فهرست فایل‬

‫اطالعات اولیه‬
‫نام فایل انتخاب شده توسط سازنده (کاربر یا برنامه)‪ .‬باید در یک فهرست خاص منحصر به فرد باشد‬
‫نوع فایل به عنوان مثال‪ :‬متن‪ ،‬باینری‪ ،‬ماژول بارگذاری و غیره‪.‬‬
‫سازماندهی فایل برای سیستم هایی که از سازمان های مختلف پشتیبانی می کنند‬
‫اطالعات نشانی‬
‫‪Volume‬دستگاهی را نشان می دهد که فایل در آن ذخیره شده است‬
‫آدرس شروع آدرس فیزیکی شروع در حافظه ثانویه (به عنوان مثال‪ ،‬شماره سیلندر‪ ،‬مسیر و بلوک روی دیسک)‬
‫اندازه مورد استفاده اندازه فعلی فایل بر حسب بایت‪ ،‬کلمات یا بلوک‬
‫‪Size Allocated‬حداکثر اندازه فایل‬
‫اطالعات کنترل دسترسی‬
‫کاربر مالک که کنترل این فایل به او اختصاص داده شده است‪ .‬مالک ممکن است بتواند دسترسی به سایر کاربران را اعطا یا رد کند و‬
‫این امتیازات را تغییر دهد‪.‬‬
‫اطالعات دسترسی یک نسخه ساده از این عنصر شامل نام و رمز عبور کاربر برای هر کاربر مجاز است‪.‬‬
‫اقدامات مجاز خواندن‪ ،‬نوشتن‪ ،‬اجرا و انتقال از طریق شبکه را کنترل می کند‬
‫اطالعات استفاده‬
‫تاریخ ایجاد زمانی که فایل برای اولین بار در فهرست قرار گرفت‪.‬‬
‫تاریخ آخرین تغییر تاریخ آخرین به روز رسانی‪ ،‬درج یا حذف‬
‫هویت آخرین کاربر اصالح کننده که اصالح را انجام داده است‬
‫تاریخ آخرین پشتیبان گیری تاریخ آخرین باری که از فایل در یک رسانه ذخیره سازی دیگر نسخه پشتیبان تهیه شده است‬
‫استفاده فعلی اطالعات مربوط به فعالیت فعلی روی فایل‪ ،‬مانند فرآیند یا فرآیندهایی که فایل را باز کرده است‪ ،‬اینکه آیا توسط یک‬
‫اصلی به روز شده است اما هنوز روی دیسک نیست‪.‬‬ ‫‪655‬‬
‫فرآیند قفل شده است‪ ،‬و اینکه آیا فایل در حافظه‬
‫سیستم عامل های داخلی و اصول طراحی‪656.........................................................................................................................‬‬

‫جدول ‪ 12.1‬اطالعاتی را که معموالً در فهرست برای هر فایل در سیستم ذخیره می شود‪ ،‬نشان می دهد‪ .‬از دیدگاه کاربر‪،‬‬
‫دایرکتوری نقشهای بین نام فایلها که برای کاربران و برنامهها شناخته شده است و خود فایلها ارائه میکند‪ .‬بنابراین‪ ،‬هر ورودی‬
‫فایل شامل نام فایل است‪ .‬تقریباً همه سیستم ها با انواع فایل ها و سازماندهی فایل های مختلف سروکار دارند و این اطالعات نیز‬
‫ارائه می شود‪ .‬دسته مهمی از اطالعات در مورد هر فایل مربوط به ذخیره سازی آن‪ ،‬از جمله مکان و اندازه آن است‪.‬‬

‫در سیستم های اشتراکی‪ ،‬ارائه اطالعاتی که برای کنترل دسترسی به فایل استفاده می شود نیز مهم است‪ .‬به طور معمول‪ ،‬یک‬
‫کاربر مالک فایل است و ممکن است امتیازات دسترسی خاصی را به کاربران دیگر اعطا کند‪ .‬در نهایت‪ ،‬اطالعات استفاده برای‬
‫مدیریت استفاده فعلی از فایل و ثبت تاریخچه استفاده از آن مورد نیاز است‪.‬‬

‫ساختار‬

‫روشی که در آن اطالعات جدول ‪ 12.1‬ذخیره می شود در بین سیستم های مختلف بسیار متفاوت است‪ .‬برخی از اطالعات‬
‫ممکن است در یک رکورد هدر مرتبط با فایل ذخیره شود‪ .‬این مقدار فضای ذخیره سازی مورد نیاز برای دایرکتوری را کاهش‬
‫می دهد و نگهداری تمام یا بیشتر دایرکتوری را در حافظه اصلی برای بهبود سرعت آسان تر می کند‪.‬‬

‫سادهترین شکل ساختار یک فهرست‪ ،‬فهرستی از ورودیها است که برای هر فایل یکی است‪ .‬این ساختار را می توان با یک فایل‬
‫متوالی ساده نشان داد که نام فایل به عنوان کلید عمل می کند‪ .‬در برخی از سیستم های تک کاربره قبلی‪ ،‬از این تکنیک‬
‫استفاده شده است‪ .‬با این حال‪ ،‬زمانی که چندین کاربر یک سیستم را به اشتراک میگذارند و حتی برای کاربران تکی با‬
‫فایلهای زیاد‪ ،‬کافی نیست‪.‬‬

‫برای درک الزامات ساختار فایل‪ ،‬در نظر گرفتن انواع عملیاتی که ممکن است روی دایرکتوری انجام شوند مفید است‪:‬‬

‫‪ -‬جستجو‪ :‬هنگامی که کاربر یا برنامه ای به فایلی ارجاع می دهد‪ ،‬دایرکتوری باید جستجو شود تا ورودی مربوط به آن فایل را‬
‫پیدا کند‪.‬‬

‫‪ -‬ایجاد فایل‪ :‬هنگامی که یک فایل جدید ایجاد می شود‪ ،‬یک ورودی باید به دایرکتوری اضافه شود‪.‬‬

‫‪ -‬حذف فایل‪ :‬هنگامی که یک فایل حذف می شود‪ ،‬یک ورودی باید از فهرست حذف شود‪.‬‬

‫‪ -‬فهرست فهرست‪ :‬ممکن است تمام یا بخشی از دایرکتوری درخواست شود‪ .‬به طور کلی‪ ،‬این درخواست توسط یک کاربر انجام‬
‫می شود و منجر به فهرستی از تمام فایل های متعلق به آن کاربر‪ ،‬به اضافه برخی از ویژگی های هر فایل به عنوان مثال‪ ،‬نوع‪،‬‬
‫اطالعات کنترل دسترسی‪ ،‬اطالعات استفاده می شود‪.‬‬

‫‪656‬‬
‫سیستم عامل های داخلی و اصول طراحی‪657.........................................................................................................................‬‬

‫‪Update directory: -‬از آنجایی که برخی از ویژگی های فایل در فهرست ذخیره می شوند‪ ،‬تغییر در یکی از این ویژگی ها‬
‫مستلزم تغییر در ورودی دایرکتوری مربوطه است‪.‬‬

‫لیست ساده برای پشتیبانی از این عملیات مناسب نیست‪ .‬نیازهای یک کاربر را در نظر بگیرید‪ .‬کاربر ممکن است انواع مختلفی از‬
‫فایل ها‪ ،‬از جمله فایل های متنی‪ ،‬فایل های گرافیکی و صفحات گسترده داشته باشد‪ .‬کاربر ممکن است بخواهد اینها را بر اساس‬
‫پروژه‪ ،‬نوع یا به روشی مناسب دیگر سازماندهی کند‪ .‬اگر دایرکتوری یک لیست متوالی ساده باشد‪ ،‬هیچ کمکی به سازماندهی‬
‫فایل ها نمی کند و کاربر را وادار می کند که مراقب باشد از یک نام برای دو نوع مختلف فایل استفاده نکند‪ .‬مشکل در یک‬
‫سیستم مشترک بسیار بدتر است‪ .‬نامگذاری منحصر به فرد به یک مشکل جدی تبدیل می شود‪ .‬عالوه بر این‪ ،‬زمانی که هیچ‬
‫ساختار ذاتی در فهرست وجود ندارد‪ ،‬پنهان کردن بخشهایی از فهرست کلی از کاربران دشوار است‪.‬‬

‫شروع برای حل این مشکالت‪ ،‬رفتن به یک طرح دو سطحی است‪ .‬در این حالت برای هر کاربر یک دایرکتوری و یک دایرکتوری‬
‫اصلی وجود دارد‪ .‬دایرکتوری اصلی یک ورودی برای هر دایرکتوری کاربر دارد که آدرس و اطالعات کنترل دسترسی را ارائه می‬
‫کند‪ .‬هر فهرست کاربری یک لیست ساده از فایل های آن کاربر است‪.‬‬

‫این ترتیب به این معنی است که نام ها باید فقط در مجموعه فایل های یک کاربر منحصر به فرد باشند و سیستم فایل می تواند‬
‫به راحتی محدودیت دسترسی را در فهرست ها اعمال کند‪ .‬با این حال‪ ،‬هنوز هیچ کمکی در ساختار مجموعه فایل ها به کاربران‬
‫ارائه نمی دهد‪.‬‬

‫یک رویکرد قدرتمندتر و منعطف تر‪ ،‬و تقریباً به طور جهانی پذیرفته شده است‪ ،‬رویکرد سلسله مراتبی یا ساختار درختی است‬
‫شکل ‪ .12.6‬مانند قبل‪ ،‬یک فهرست اصلی وجود دارد که در زیر آن تعدادی دایرکتوری کاربر وجود دارد‪ .‬هر یک از این‬
‫دایرکتوری های کاربر به نوبه خود ممکن است زیر شاخه ها و فایل هایی را به عنوان ورودی داشته باشند‪ .‬این در هر سطحی‬
‫صادق است‪ :‬یعنی در هر سطحی‪ ،‬دایرکتوری ممکن است شامل ورودیهایی برای زیر شاخهها و‪/‬یا ورودیهایی برای فایلها‬
‫باشد‪.‬‬

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

‫‪657‬‬
‫سیستم عامل های داخلی و اصول طراحی‪658.........................................................................................................................‬‬

‫شکل ‪ 12.6‬فهرست درختی‬

‫نامگذاری‬

‫کاربران باید بتوانند به یک فایل با نام نمادین اشاره کنند‪ .‬واضح است که هر فایل در سیستم باید یک نام منحصر به فرد داشته‬
‫باشد تا ارجاعات فایل بدون ابهام باشد‪ .‬از سوی دیگر‪ ،‬این بار غیرقابل قبولی بر دوش کاربران است که بخواهند نامهای‬
‫منحصربهفرد را ارائه دهند‪ ،‬مخصوصاً در یک سیستم مشترک‪.‬‬

‫استفاده از دایرکتوری با ساختار درختی‪ ،‬مشکل در اختصاص نام های منحصر به فرد را به حداقل می رساند‪ .‬هر فایلی در‬
‫سیستم را میتوان با دنبال کردن مسیری از دایرکتوری اصلی یا اصلی در شاخههای مختلف تا رسیدن به فایل پیدا کرد‪.‬‬
‫مجموعه ای از نام های دایرکتوری که در نام خود فایل به اوج می رسد‪ ،‬یک نام مسیر برای فایل تشکیل می دهد‪ .‬به عنوان‬
‫مثال‪ ،‬فایل در گوشه سمت چپ پایین شکل ‪ 12.7‬دارای نام مسیر ‪ User_B/Word/Unit_A/ABC‬است‪ .‬اسلش برای‬
‫محدود کردن نام ها در دنباله استفاده می شود‪ .‬نام دایرکتوری اصلی به طور ضمنی است‪ ،‬زیرا همه مسیرها از آن دایرکتوری‬
‫شروع می شوند‪ .‬توجه داشته باشید که داشتن چندین فایل با نام فایل یکسان کامالً قابل قبول است‪ ،‬به شرطی که نام مسیرهای‬
‫منحصر به فرد داشته باشند‪ ،‬که معادل این است که بگوییم ممکن است از یک نام فایل در فهرست های مختلف استفاده شود‪.‬‬
‫در مثال ما‪ ،‬فایل دیگری در سیستم با نام فایل ‪ ABC‬وجود دارد‪ ،‬اما نام مسیر ‪ User_B/ Draw/ABC/‬را دارد‪.‬‬

‫‪658‬‬
‫سیستم عامل های داخلی و اصول طراحی‪659.........................................................................................................................‬‬

‫شکل ‪ 12.7‬مثالی از دایرکتوری با ساختار درختی‬

‫اگرچه نام مسیر انتخاب نام فایل ها را تسهیل می کند‪ ،‬اما برای کاربر دشوار است که هر بار که به یک فایل ارجاع داده می شود‪،‬‬
‫کل نام مسیر را هجی کند‪ .‬به طور معمول‪ ،‬یک کاربر تعاملی یا یک فرآیند با آن یک دایرکتوری فعلی مرتبط می کند که اغلب‬
‫به عنوان دایرکتوری کاری از آن یاد می شود‪ .‬سپس فایل ها نسبت به دایرکتوری کاری ارجاع داده می شوند‪ .‬برای مثال‪ ،‬اگر‬
‫دایرکتوری کار برای کاربر "‪B "Word‬باشد‪ ،‬نام مسیر ‪ Unit_A/ABC‬برای شناسایی فایل در گوشه سمت چپ پایین شکل‬
‫‪ 12.7‬کافی است‪ .‬هنگامی که یک کاربر تعاملی وارد سیستم می شود‪ ،‬یا زمانی که یک فرآیند ایجاد می شود‪ ،‬پیش فرض‬
‫دایرکتوری کاری‪ ،‬دایرکتوری خانه کاربر است‪ .‬در طول اجرا‪ ،‬کاربر می تواند در درخت به باال یا پایین حرکت کند تا به‬
‫دایرکتوری کاری متفاوت تغییر کند‪.‬‬

‫‪ 12.5‬به اشتراک گذاری فایل‬

‫در یک سیستم چندکاربره‪ ،‬تقریباً همیشه این نیاز برای اجازه دادن به فایلها برای اشتراکگذاری بین تعدادی از کاربران وجود‬
‫دارد‪ .‬دو مسئله مطرح می شود‪ :‬حقوق دسترسی و مدیریت دسترسی همزمان‪.‬‬

‫حقوق دسترسی‬

‫سیستم فایل باید ابزاری منعطف برای امکان اشتراک گذاری گسترده فایل بین کاربران فراهم کند‪ .‬سیستم فایل باید تعدادی‬
‫گزینه ارائه دهد تا نحوه دسترسی به یک فایل خاص را بتوان کنترل کرد‪ .‬به طور معمول‪ ،‬به کاربران یا گروه هایی از کاربران‬

‫‪659‬‬
‫سیستم عامل های داخلی و اصول طراحی‪660.........................................................................................................................‬‬

‫حقوق دسترسی خاصی به یک فایل اعطا می شود‪ .‬طیف گسترده ای از حقوق دسترسی استفاده شده است‪ .‬لیست زیر نماینده‬
‫حقوق دسترسی است که می تواند به یک کاربر خاص برای یک فایل خاص اختصاص داده شود‪:‬‬

‫‪ -‬هیچکدام‪ :‬کاربر ممکن است حتی از وجود فایل اطالعی نداشته باشد‪ ،‬حتی کمتر به آن دسترسی داشته باشد‪ .‬برای اعمال این‬
‫محدودیت‪ ،‬کاربر مجاز به خواندن دایرکتوری کاربر که شامل این فایل است‪ ،‬نخواهد بود‪.‬‬

‫‪ -‬دانش‪ :‬کاربر می تواند تعیین کند که فایل وجود دارد و صاحب آن کیست‪.‬‬

‫سپس کاربر میتواند از مالک درخواست کند تا حقوق دسترسی بیشتری را دریافت کند‪.‬‬

‫‪ -‬اجرا‪ :‬کاربر می تواند یک برنامه را بارگذاری و اجرا کند اما نمی تواند آن را کپی کند‪.‬‬

‫برنامه های اختصاصی اغلب با این محدودیت در دسترس قرار می گیرند‪.‬‬

‫‪ -‬خواندن‪ :‬کاربر می تواند فایل را برای هر منظوری از جمله کپی و اجرا بخواند‪ .‬برخی از سیستم ها می توانند بین مشاهده و‬
‫کپی کردن تمایز قائل شوند‪ .‬در حالت اول‪ ،‬محتویات فایل می تواند به کاربر نمایش داده شود‪ ،‬اما کاربر ابزاری برای کپی کردن‬
‫ندارد‪.‬‬

‫‪ -‬افزودن‪ :‬کاربر می تواند داده ها را به فایل اضافه کند‪ ،‬اغلب فقط در انتها‪ ،‬اما نمی تواند هیچ یک از محتویات فایل را اصالح یا‬
‫حذف کند‪ .‬این حق در جمع آوری داده ها از تعدادی منبع مفید است‪.‬‬

‫‪ -‬به روز رسانی‪ :‬کاربر می تواند داده های فایل را اصالح‪ ،‬حذف و اضافه کند‪ .‬این معموالً شامل نوشتن اولیه فایل‪ ،‬بازنویسی کامل‬
‫یا جزئی آن و حذف تمام یا بخشی از داده ها می شود‪ .‬برخی از سیستم ها درجات مختلف به روز رسانی را متمایز می کنند‪.‬‬

‫‪ -‬تغییر حفاظت‪ :‬کاربر می تواند حقوق دسترسی اعطا شده به سایر کاربران را تغییر دهد‪ .‬معموالً این حق فقط در اختیار صاحب‬
‫پرونده است‪ .‬در برخی از سیستم ها‪ ،‬مالک می تواند این حق را به دیگران نیز تعمیم دهد‪ .‬برای جلوگیری از سوء استفاده از این‬
‫مکانیسم‪ ،‬مالک فایل معموالً میتواند مشخص کند که دارنده این حق کدام حقوق را میتواند تغییر دهد‪.‬‬

‫‪ -‬حذف‪ :‬کاربر می تواند فایل را از سیستم فایل حذف کند‪.‬‬

‫این حقوق را می توان به عنوان یک سلسله مراتب در نظر گرفت که هر حق متضمن آنهایی است که قبل از آن هستند‪ .‬بنابراین‪،‬‬
‫اگر به یک کاربر خاص حق بهروزرسانی برای یک فایل خاص داده شود‪ ،‬آن کاربر حقوق زیر را نیز دریافت میکند‪ :‬دانش‪ ،‬اجرا‪،‬‬
‫خواندن و پیوست‪.‬‬

‫‪660‬‬
‫سیستم عامل های داخلی و اصول طراحی‪661.........................................................................................................................‬‬

‫یک کاربر به عنوان مالک یک فایل معین تعیین می شود‪ ،‬معموالً شخصی که در ابتدا فایل را ایجاد کرده است‪ .‬مالک تمام حقوق‬
‫دسترسی ذکر شده در قبل را دارد و ممکن است به دیگران حقوق بدهد‪ .‬دسترسی را می توان برای طبقات مختلف کاربران‬
‫فراهم کرد‪:‬‬

‫‪ -‬کاربر خاص‪ :‬کاربران فردی که توسط شناسه کاربر تعیین می شوند‬

‫‪ -‬گروه های کاربر‪ :‬مجموعه ای از کاربرانی که به صورت جداگانه تعریف نشده اند‪ .‬سیستم باید راهی برای پیگیری عضویت گروه‬
‫های کاربری داشته باشد‪.‬‬

‫‪All: -‬تمامی کاربرانی که به این سیستم دسترسی دارند‪ .‬این ها فایل های عمومی هستند‪.‬‬

‫دسترسی همزمان‬

‫هنگامی که دسترسی برای افزودن یا به روز رسانی یک فایل به بیش از یک کاربر داده می شود‪ ،‬سیستم عامل یا سیستم‬
‫مدیریت فایل باید نظم و انضباط را اعمال کند‪ .‬رویکرد ‪ brute-force‬این است که به کاربر اجازه میدهد کل فایل را زمانی که‬
‫قرار است بهروزرسانی شود قفل کند‪ .‬یک دانه کنترل دقیق تر‪ ،‬قفل کردن رکوردهای فردی در حین به روز رسانی است‪ .‬اساساً‪،‬‬
‫این مشکل خوانندگان‪/‬نویسندگان است که در فصل ‪ 5‬مورد بحث قرار گرفته است‪ .‬مسائل مربوط به محرومیت و وقفه متقابل‬
‫باید در طراحی قابلیت دسترسی مشترک مورد توجه قرار گیرد‪.‬‬

‫‪ 12.6‬مسدود کردن رکورد‬

‫همانطور که در شکل ‪ 12.2‬نشان داده شده است‪ ،‬رکوردها واحد منطقی دسترسی به یک فایل ساخت یافته هستند‪ ،‬در حالی که‬
‫بلوک ها واحد ورودی‪/‬خروجی با ذخیره سازی ثانویه هستند‪ .‬برای انجام ‪ ،I/O‬رکوردها باید به صورت بلوک سازماندهی شوند‪.‬‬

‫چندین موضوع وجود دارد که باید در نظر گرفته شود‪ .‬اول‪ ،‬آیا بلوک ها باید دارای طول ثابت یا متغیر باشند؟ در اکثر سیستم‬
‫ها‪ ،‬بلوک ها دارای طول ثابت هستند‪ .‬این امر ورودی‪/‬خروجی‪ ،‬تخصیص بافر در حافظه اصلی و سازماندهی بلوک ها در حافظه‬
‫ثانویه را ساده می کند‪ .‬دوم‪ ،‬اندازه نسبی یک بلوک با میانگین اندازه رکورد چقدر باید مقایسه شود؟ معامله به این صورت است‪:‬‬
‫هر چه بلوک بزرگتر باشد‪ ،‬رکوردهای بیشتری در یک عملیات ‪ I/O‬ارسال می شود‪ .‬اگر یک فایل به صورت متوالی پردازش یا‬
‫جستجو شود‪ ،‬این یک مزیت است‪ ،‬زیرا تعداد عملیات ‪ I/O‬با استفاده از بلوکهای بزرگتر کاهش مییابد و در نتیجه سرعت‬
‫پردازش را افزایش میدهد‪ .‬از سوی دیگر‪ ،‬اگر رکوردها به طور تصادفی در دسترس باشند و هیچ محل مرجع خاصی مشاهده‬
‫نشود‪ ،‬بلوک های بزرگتر منجر به انتقال غیر ضروری رکوردهای استفاده نشده می شود‪ .‬با این حال‪ ،‬با ترکیب فرکانس عملیات‬

‫‪661‬‬
‫سیستم عامل های داخلی و اصول طراحی‪662.........................................................................................................................‬‬

‫متوالی با پتانسیل محلی بودن مرجع‪ ،‬می توان گفت که زمان انتقال ‪ I/O‬با استفاده از بلوک های بزرگتر کاهش می یابد‪ .‬نگرانی‬
‫رقیب این است که بلوک های بزرگتر به بافرهای ورودی‪/‬خروجی بزرگتری نیاز دارند که مدیریت بافر را دشوارتر می کند‪.‬‬

‫با توجه به اندازه یک بلوک‪ ،‬سه روش برای مسدود کردن وجود دارد که می توان از آنها استفاده کرد‪:‬‬

‫‪ -‬مسدود کردن ثابت‪ :‬از رکوردهای با طول ثابت استفاده می شود و تعداد کاملی از رکوردها در یک بلوک ذخیره می شوند‪.‬‬
‫ممکن است فضای بال استفاده در انتهای هر بلوک وجود داشته باشد‪ .‬از این به عنوان چندپارگی داخلی یاد می شود‪.‬‬

‫‪ -‬مسدود کردن طول متغیر‪ :‬رکوردهای با طول متغیر استفاده میشوند و در بلوکهایی بدون فضای بالاستفاده بستهبندی‬
‫میشوند‪ .‬بنابراین‪ ،‬برخی از رکوردها باید دو بلوک را شامل شوند که ادامه آن با اشاره گر به بلوک جانشین نشان داده می شود‪.‬‬

‫‪ -‬انسداد بدون طول متغیر‪ :‬از رکوردهای طول متغیر استفاده می شود‪ ،‬اما از ‪ spanning‬استفاده نمی شود‪ .‬در اکثر بلوک ها‬
‫فضای هدر رفته وجود دارد‪ ،‬زیرا اگر رکورد بعدی بزرگتر از فضای استفاده نشده باقی مانده باشد‪ ،‬نمی توان از باقیمانده یک‬
‫بلوک استفاده کرد‪.‬‬

‫شکل ‪ 12.8‬این روش ها را با فرض اینکه یک فایل در بلوک های متوالی روی دیسک ذخیره می شود‪ ،‬نشان می دهد‪ .‬این شکل‬
‫فرض می کند که فایل به اندازه کافی بزرگ است که دو مسیر را در بر بگیرد‪.‬‬

‫مسدود کردن ثابت حالت رایج برای فایل های متوالی با رکوردهای با طول ثابت است‪ .‬مسدود کردن طول متغیر برای ذخیره‬
‫سازی کارآمد است و اندازه رکوردها را محدود نمی کند‪ .‬با این حال‪ ،‬اجرای این تکنیک دشوار است‪ .‬رکوردهایی که در دو بلوک‬
‫قرار دارند به دو عملیات ورودی‪/‬خروجی نیاز دارند و بهروزرسانی فایلها‪ ،‬صرف نظر از سازمان‪ ،‬دشوار است‪ .‬انسداد بدون بازه با‬
‫طول متغیر منجر به هدر رفتن فضای می شود و اندازه رکورد را به اندازه یک بلوک محدود می کند‪.‬‬

‫‪662‬‬
‫سیستم عامل های داخلی و اصول طراحی‪663.........................................................................................................................‬‬

‫داده ها‬ ‫ضایعات به دلیل تناسب رکورد با اندازه بلوک‬


‫شکاف های ناشی از طراحی سخت افزاری‬ ‫زباله به دلیل محدودیت اندازه بلوک از اندازه‬
‫ضایعات به دلیل تناسب بلوک با اندازه مسیر‬ ‫رکورد ثابت‬

‫شکل ‪ 12.8‬روش های مسدود کردن رکورد ‪WIED87‬‬

‫تکنیک مسدود کردن رکورد ممکن است با سختافزار حافظه مجازی تعامل داشته باشد‪ ،‬در صورت استفاده از این روش‪ .‬در یک‬
‫محیط حافظه مجازی‪ ،‬مطلوب است که صفحه به واحد اصلی انتقال تبدیل شود‪ .‬صفحات معموالً بسیار کوچک هستند‪ ،‬به طوری‬
‫که غیرعملی است که یک صفحه را به عنوان یک بلوک برای مسدود کردن بدون باز شدن در نظر بگیرید‪ .‬بر این اساس‪ ،‬برخی از‬
‫سیستم ها چندین صفحه را برای ایجاد یک بلوک بزرگتر برای اهداف ورودی‪/‬خروجی فایل ترکیب می کنند‪ .‬این رویکرد برای‬
‫فایل های ‪ VSAM‬در رایانه های اصلی ‪ IBM‬استفاده می شود‪.‬‬

‫‪ 12.7‬مدیریت ذخیره سازی ثانویه‬

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

‫‪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.2‬برخی از ویژگی های هر روش را خالصه می کند‪.‬‬

‫با تخصیص پیوسته‪ ،‬یک مجموعه مجزا از بلوک ها در زمان ایجاد فایل به یک فایل اختصاص می یابد شکل ‪ .12.9‬بنابراین‪ ،‬این‬
‫یک استراتژی پیش تخصیص است که از بخش های با اندازه متغیر استفاده می کند‪ .‬جدول تخصیص فایل فقط به یک ورودی‬
‫برای هر فایل نیاز دارد که بلوک شروع و طول فایل را نشان دهد‪ .‬تخصیص پیوسته از نظر فایل متوالی فردی بهترین است‪ .‬برای‬
‫بهبود عملکرد ورودی‪/‬خروجی برای پردازش متوالی‪ ،‬میتوان چندین بلوک را در یک زمان خواند‪ .‬بازیابی یک بلوک نیز آسان‬
‫است‪ .‬به عنوان مثال‪ ،‬اگر یک فایل از بلوک ‪ b‬شروع شود‪ ،‬و بلوک یکم فایل مورد نظر باشد‪ ،‬مکان آن در ذخیره سازی ثانویه به‬
‫سادگی ‪ b i 1‬است‪ .‬با این حال‪ ،‬تخصیص پیوسته مشکالتی را ایجاد می کند‪.‬‬

‫تکه تکه شدن بیرونی رخ خواهد داد و یافتن بلوک های فضایی به هم پیوسته با طول کافی را دشوار می کند‪ .‬هر از گاهی‪ ،‬الزم‬
‫است یک الگوریتم فشرده سازی برای آزاد کردن فضای اضافی روی دیسک انجام شود شکل ‪ .12.10‬همچنین با پیش تخصیص‬
‫باید حجم فایل را در زمان ایجاد با مشکالتی که قبال ذکر شد اعالم کرد‪.‬‬

‫‪666‬‬
‫سیستم عامل های داخلی و اصول طراحی‪667.........................................................................................................................‬‬

‫شکل ‪ 12.9‬تخصیص فایل پیوسته‬

‫شکل ‪ 12.10‬تخصیص فایل پیوسته پس از فشرده سازی‬

‫در نقطه مقابل تخصیص پیوسته‪ ،‬تخصیص زنجیره ای قرار دارد شکل ‪ .12.11‬به طور معمول‪ ،‬تخصیص بر اساس بلوک فردی‬
‫است‪ .‬هر بلوک حاوی یک اشاره گر به بلوک بعدی در زنجیره است‪ .‬مجدداً‪ ،‬جدول تخصیص فایل فقط به یک ورودی برای هر‬
‫فایل نیاز دارد که بلوک شروع و طول فایل را نشان دهد‪ .‬اگرچه پیش تخصیص امکان پذیر است‪ ،‬اما معمول تر است که به‬
‫سادگی بلوک ها را در صورت نیاز تخصیص دهیم‪ .‬انتخاب بلوک ها اکنون یک موضوع ساده است‪ :‬هر بلوک رایگان را می توان به‬
‫یک زنجیره اضافه کرد‪ .‬هیچ تکه تکه شدن خارجی برای نگرانی وجود ندارد زیرا هر بار فقط به یک بلوک نیاز است‪ .‬این نوع‬
‫سازماندهی فیزیکی برای فایل های متوالی که قرار است به صورت متوالی پردازش شوند‪ ،‬مناسب است‪ .‬برای انتخاب یک بلوک‬
‫جداگانه از یک فایل نیاز به ردیابی از طریق زنجیره تا بلوک مورد نظر است‪ .‬یکی از پیامدهای زنجیرهبندی‪ ،‬همانطور که تاکنون‬
‫توضیح داده شد‪ ،‬این است که اصل محلّی انطباق ندارد‪ .‬بنابراین‪ ،‬اگر الزم است چندین بلوک از یک فایل را در یک زمان وارد‬
‫کنید‪ ،‬مانند پردازش متوالی‪ ،‬یک سری دسترسی به قسمت های مختلف دیسک مورد نیاز است‪ .‬این شاید تأثیر مهم تری بر روی‬

‫‪667‬‬
‫سیستم عامل های داخلی و اصول طراحی‪668.........................................................................................................................‬‬

‫یک سیستم تک کاربره باشد‪ ،‬اما ممکن است در سیستم مشترک نیز نگران کننده باشد‪ .‬برای غلبه بر این مشکل‪ ،‬برخی از‬
‫سیستم ها به صورت دوره ای فایل ها را یکپارچه می کنند شکل ‪.12.12‬‬

‫شکل ‪ 12.11‬تخصیص زنجیره ای‬

‫شکل ‪ 12.12‬تخصیص زنجیره ای پس از ادغام‬

‫تخصیص نمایه شده به بسیاری از مشکالت تخصیص پیوسته و زنجیره ای می پردازد‪ .‬در این مورد‪ ،‬جدول تخصیص فایل شامل‬
‫یک نمایه تک سطحی جداگانه برای هر فایل است‪ .‬ایندکس یک ورودی برای هر بخش اختصاص داده شده به فایل دارد‪ .‬به طور‬
‫معمول‪ ،‬فهرست های فایل به صورت فیزیکی به عنوان بخشی از جدول تخصیص فایل ذخیره نمی شوند‪ .‬در عوض‪ ،‬فهرست فایل‬
‫برای یک فایل در یک بلوک جداگانه نگهداری می شود و ورودی فایل در جدول مکان فایل به آن بلوک اشاره می کند‪ .‬تخصیص‬
‫ممکن است بر اساس بلوک های با اندازه ثابت شکل ‪ 12.13‬یا بخش هایی با اندازه متغیر شکل ‪ 12.14‬باشد‪ .‬تخصیص توسط‬
‫بلوک ها تکه تکه شدن خارجی را حذف می کند‪ ،‬در حالی که تخصیص توسط بخش های با اندازه متغیر محل را بهبود می‬
‫بخشد‪ .‬در هر صورت‪ ،‬ادغام فایل ممکن است هر از گاهی انجام شود‪ .‬ادغام فایل در مورد بخش های با اندازه متغیر‪ ،‬اندازه‬

‫‪668‬‬
‫سیستم عامل های داخلی و اصول طراحی‪669.........................................................................................................................‬‬

‫شاخص را کاهش می دهد‪ ،‬اما در مورد تخصیص بلوک نه‪ .‬تخصیص نمایه شده هم از دسترسی متوالی و هم مستقیم به فایل‬
‫پشتیبانی می کند و بنابراین محبوب ترین شکل تخصیص فایل است‪.‬‬

‫مدیریت فضای آزاد‬

‫همانطور که فضای اختصاص داده شده به فایل ها باید مدیریت شود‪ ،‬فضایی که در حال حاضر به هیچ فایلی اختصاص داده نمی‬
‫شود نیز باید مدیریت شود‪ .‬برای انجام هر یک از تکنیک های تخصیص فایل که قبال توضیح داده شد‪ ،‬الزم است بدانیم چه بلوک‬
‫هایی روی دیسک موجود است‪ .‬بنابراین ما به یک جدول تخصیص دیسک عالوه بر جدول تخصیص فایل نیاز داریم‪ .‬ما در اینجا‬
‫تعدادی از تکنیک هایی را که اجرا شده اند مورد بحث قرار می دهیم‪.‬‬

‫شکل ‪ 12.13‬تخصیص نمایه شده با بخش های بلوکی‬

‫جداول بیت این روش از یک بردار حاوی یک بیت برای هر بلوک روی دیسک استفاده می کند‪ .‬هر ورودی ‪ 0‬مربوط به یک بلوک‬
‫آزاد و هر ‪ 1‬مربوط به یک بلوک در حال استفاده است‪ .‬به عنوان مثال‪ ،‬برای طرح دیسک شکل ‪ ،12.9‬یک بردار به طول ‪35‬‬
‫مورد نیاز است که دارای مقدار زیر است‪:‬‬

‫یک جدول بیت این مزیت را دارد که یافتن یک یا یک گروه مجاور از بلوک های آزاد نسبتاً آسان است‪ .‬بنابراین‪ ،‬یک جدول بیت‬
‫با هر یک از روشهای تخصیص فایل به خوبی کار میکند‪ .‬مزیت دیگر این است که تا حد امکان کوچک است‪.‬‬

‫‪669‬‬
‫سیستم عامل های داخلی و اصول طراحی‪670.........................................................................................................................‬‬

‫شکل ‪ 12.14‬تخصیص نمایه شده با بخش های با طول متغیر‬

‫با این حال‪ ،‬هنوز هم می تواند قابل توجه باشد‪ .‬مقدار حافظه بر حسب بایت مورد نیاز برای یک بیت مپ بلوکی است‬

‫بنابراین‪ ،‬برای یک دیسک ‪ 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 .‬یک حجم را به صورت زیر تعریف می کند‪:‬‬

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

‫در ساده ترین حالت‪ ،‬یک دیسک واحد برابر با یک حجم است‪ .‬اغلب‪ ،‬یک دیسک به پارتیشنهایی تقسیم میشود که هر‬
‫پارتیشن به عنوان یک حجم مجزا عمل میکند‪ .‬همچنین معمول است که چندین دیسک را به عنوان یک جلد یا پارتیشن های‬
‫روی چندین دیسک به عنوان یک حجم واحد در نظر بگیریم‪.‬‬

‫قابلیت اطمینان‬

‫سناریوی زیر را در نظر بگیرید‪:‬‬

‫‪ .1‬کاربر ‪ A‬درخواست تخصیص فایل برای افزودن به فایل موجود می کند‪.‬‬

‫‪ .2‬درخواست اعطا می شود و جداول تخصیص دیسک و فایل در حافظه اصلی به روز می شوند اما هنوز روی دیسک قرار نگرفته‬
‫اند‪.‬‬

‫‪672‬‬
‫سیستم عامل های داخلی و اصول طراحی‪673.........................................................................................................................‬‬

‫‪ .3‬سیستم از کار می افتد و متعاقبا دوباره راه اندازی می شود‪.‬‬

‫‪ .4‬کاربر ‪ B‬درخواست تخصیص فایل می کند و فضایی روی دیسک اختصاص می یابد که با آخرین تخصیص به کاربر ‪A‬‬
‫همپوشانی دارد‪.‬‬

‫‪ .5‬کاربر ‪ A‬از طریق مرجعی که در فایل ‪ A‬ذخیره شده است به بخش همپوشانی شده دسترسی پیدا می کند‪.‬‬

‫این مشکل به این دلیل به وجود آمد که سیستم یک نسخه از جدول مکان دیسک و جدول تخصیص فایل را برای کارایی در‬
‫حافظه اصلی نگهداری می کرد‪ .‬برای جلوگیری از این نوع خطا‪ ،‬در صورت درخواست تخصیص فایل‪ ،‬مراحل زیر را می توان‬
‫انجام داد‪:‬‬

‫‪ .1‬جدول تخصیص دیسک را روی دیسک قفل کنید‪ .‬تا زمانی که این تخصیص کامل نشود‪ ،‬این کار از ایجاد تغییرات در جدول‬
‫توسط کاربر دیگری جلوگیری می کند‪.‬‬

‫‪ .2‬جدول تخصیص دیسک را برای فضای موجود جستجو کنید‪ .‬این فرض می کند که یک کپی از جدول تخصیص دیسک‬
‫همیشه در حافظه اصلی نگهداری می شود‪ .‬اگر نه‪ ،‬ابتدا باید در آن خوانده شود‪.‬‬

‫‪ .3‬اختصاص فضا‪ ،‬به روز رسانی جدول تخصیص دیسک و به روز رسانی دیسک‪ .‬به روز رسانی دیسک شامل نوشتن جدول‬
‫تخصیص دیسک بر روی دیسک است‪ .‬برای تخصیص دیسک زنجیره ای‪ ،‬همچنین شامل به روز رسانی برخی از اشاره گرها روی‬
‫دیسک است‪.‬‬

‫‪ .4‬جدول تخصیص فایل را به روز کنید و دیسک را به روز کنید‪.‬‬

‫‪ .5‬جدول تخصیص دیسک را باز کنید‪.‬‬

‫این تکنیک از بروز خطا جلوگیری می کند‪ .‬با این حال‪ ،‬هنگامی که بخش های کوچک به طور مکرر تخصیص داده می شود‪،‬‬
‫تأثیر آن بر عملکرد قابل توجه خواهد بود‪ .‬برای کاهش این سربار‪ ،‬می توان از طرح تخصیص ذخیره سازی دسته ای استفاده‬
‫کرد‪ .‬در این مورد‪ ،‬دسته ای از بخش های رایگان روی دیسک برای تخصیص به دست می آید‪ .‬بخش های مربوطه روی دیسک با‬
‫عالمت "در حال استفاده" هستند‪ .‬تخصیص با استفاده از این دسته ممکن است در حافظه اصلی ادامه یابد‪ .‬وقتی دسته تمام‬
‫شد‪ ،‬جدول تخصیص دیسک بر روی دیسک به روز می شود و ممکن است یک دسته جدید بدست آید‪ .‬اگر خرابی سیستم اتفاق‬
‫بیفتد‪ ،‬قسمتهایی روی دیسک که «در حال استفاده» مشخص شدهاند‪ ،‬باید قبل از تخصیص مجدد به روشی تمیز شوند‪.‬‬
‫تکنیک پاکسازی به ویژگی های خاص سیستم فایل بستگی دارد‪.‬‬

‫‪673‬‬
‫سیستم عامل های داخلی و اصول طراحی‪674.........................................................................................................................‬‬

‫‪ 12.8‬مدیریت فایل یونیکس‬

‫در سیستم فایل یونیکس‪ ،‬شش نوع فایل متمایز می شود‪:‬‬

‫‪ -‬منظم یا معمولی‪ :‬حاوی داده های دلخواه در بلوک های داده صفر یا بیشتر است‪ .‬فایل های معمولی حاوی اطالعاتی هستند که‬
‫توسط یک کاربر‪ ،‬یک برنامه کاربردی یا یک برنامه کاربردی سیستم در آنها وارد شده است‪ .‬سیستم فایل هیچ ساختار داخلی را‬
‫به یک فایل معمولی تحمیل نمی کند بلکه آن را به عنوان جریانی از بایت ها در نظر می گیرد‪.‬‬

‫‪ -‬دایرکتوری حاوی لیستی از نام فایل ها به اضافه اشاره گر به ‪ inode‬های مرتبط گره های شاخص است که بعدا توضیح داده‬
‫می شود‪ .‬دایرکتوری ها به صورت سلسله مراتبی سازماندهی شده اند شکل ‪ .12.6‬فایل های دایرکتوری در واقع فایل های‬
‫معمولی با امتیازات ویژه حفاظت از نوشتن هستند به طوری که فقط سیستم فایل می تواند در آنها بنویسد‪ ،‬در حالی که‬
‫دسترسی خواندن برای برنامه های کاربر در دسترس است‪.‬‬

‫‪Special: -‬حاوی داده ای نیست اما مکانیزمی را برای نگاشت دستگاه های فیزیکی به نام فایل ها ارائه می دهد‪ .‬از نام فایل ها‬
‫برای دسترسی به دستگاه های جانبی مانند پایانه ها و چاپگرها استفاده می شود‪ .‬هر دستگاه ورودی‪/‬خروجی با یک فایل خاص‬
‫مرتبط است‪ ،‬همانطور که در بخش ‪ 11.8‬بحث شد‪.‬‬

‫‪ -‬لوله های نامگذاری شده‪ :‬همانطور که در بخش ‪ 6.7‬بحث شد‪ ،‬لوله یک مرکز ارتباطات بین فرآیندی است‪ .‬یک فایل لوله‪ ،‬داده‬
‫های دریافتی را در ورودی خود بافر می کند‪ ،‬به طوری که فرآیندی که از خروجی لوله خوانده می شود‪ ،‬داده ها را به صورت اول‬
‫در اول دریافت می کند‪.‬‬

‫‪ -‬پیوندها‪ :‬در اصل‪ ،‬پیوند یک نام فایل جایگزین برای یک فایل موجود است‪.‬‬

‫‪ -‬پیوندهای نمادین‪ :‬این یک فایل داده است که حاوی نام فایلی است که به آن پیوند داده شده است‪.‬‬

‫در این بخش‪ ،‬ما به رسیدگی به فایلهای معمولی میپردازیم که با آنچه اکثر سیستمها به عنوان فایل در نظر میگیرند‪ ،‬مطابقت‬
‫دارد‪.‬‬

‫‪ inode‬ها‬

‫سیستمعاملهای مدرن یونیکس از چندین سیستم فایل پشتیبانی میکنند اما همه اینها را در یک سیستم زیربنایی یکنواخت‬
‫برای پشتیبانی از سیستمهای فایل و تخصیص فضای دیسک به فایلها ترسیم میکنند‪ .‬همه انواع فایل های یونیکس توسط‬
‫سیستم عامل بوسیله ‪ inode‬ها مدیریت می شوند‪Inode .‬گره شاخص یک ساختار کنترلی است که حاوی اطالعات کلیدی‬

‫‪674‬‬
‫سیستم عامل های داخلی و اصول طراحی‪675.........................................................................................................................‬‬

‫مورد نیاز سیستم عامل برای یک فایل خاص است‪ .‬نام چندین فایل ممکن است با یک ایند منفرد مرتبط باشد‪ ،‬اما یک ‪inode‬‬
‫فعال دقیقاً با یک فایل مرتبط است و هر فایل دقیقاً توسط یک اینود کنترل می شود‪.‬‬

‫ویژگی های فایل و همچنین مجوزهای آن و سایر اطالعات کنترلی در ‪ inode‬ذخیره می شوند‪ .‬ساختار دقیق ‪ inode‬از یک‬
‫پیاده سازی یونیکس به دیگری متفاوت است‪ .‬ساختار ‪ inode FreeBSD‬که در شکل ‪ 12.15‬نشان داده شده است‪ ،‬شامل‬
‫عناصر داده زیر است‪:‬‬

‫‪ -‬نوع و حالت دسترسی فایل‬

‫‪ -‬شناسه های مالک فایل و دسترسی به گروه‬

‫‪ -‬زمان ایجاد فایل‪ ،‬زمانی که اخیرا خوانده و نوشته شده است‪ ،‬و زمانی که ‪ inode‬آن اخیرا توسط سیستم به روز شده است‪.‬‬

‫‪ -‬اندازه فایل بر حسب بایت‬

‫‪ -‬دنباله ای از نشانگرهای بلوک‪ ،‬که در زیربخش بعدی توضیح داده شده است‬

‫‪ -‬تعداد بلوکهای فیزیکی مورد استفاده فایل‪ ،‬از جمله بلوکهای مورد استفاده برای نگهداری نشانگرها و ویژگیهای غیرمستقیم‬

‫‪ -‬تعداد ورودی های دایرکتوری که به فایل ارجاع می دهند‬

‫‪ -‬هسته و پرچم های قابل تنظیم توسط کاربر که ویژگی های فایل را توصیف می کند‬

‫‪ -‬شماره تولید فایل عددی انتخاب شده به طور تصادفی که هر بار که فایل جدید به فایل جدید تخصیص داده می شود به‬
‫‪ inode‬اختصاص می یابد؛ شماره تولید برای شناسایی ارجاعات به فایل های حذف شده استفاده می شود‬

‫‪675‬‬
‫سیستم عامل های داخلی و اصول طراحی‪676.........................................................................................................................‬‬

‫شکل ‪ 12.15‬ساختار ‪ Inode‬و فایل ‪FreeBSD‬‬

‫‪ -‬اندازه بلوکهای دادهای که توسط ‪ 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.........................................................................................................................‬‬

‫جدول ‪ 12.3‬ظرفیت یک فایل ‪ FreeBSD‬با اندازه بلوک ‪ 4‬کیلوبایتی‬

‫مرحله‬ ‫تعداد بلوک ها‬ ‫تعداد بایت ها‬


‫مستقیم‬ ‫‪12‬‬ ‫‪48K‬‬
‫تک غیر مستقیم‬ ‫‪512‬‬ ‫‪2M‬‬
‫دو غیر مستقیم‬ ‫‪512‬‬ ‫‪512 256‬‬ ‫‪1G‬‬
‫‪K‬‬
‫‪ 512‬سه گانه غیر مستقیم‬ ‫‪25 128‬‬ ‫‪512G‬‬
‫‪6K M‬‬

‫این طرح چندین مزیت دارد‪:‬‬

‫‪ Inode .1‬اندازه ثابت و نسبتا کوچکی دارد و از این رو ممکن است برای مدت طوالنی در حافظه اصلی نگهداری شود‪.‬‬

‫‪ .2‬فایل های کوچکتر ممکن است با اندک یا بدون جهت غیر مستقیم قابل دسترسی باشند‪ ،‬که باعث کاهش پردازش و زمان‬
‫دسترسی به دیسک می شود‪.‬‬

‫‪ .3‬حداکثر اندازه نظری یک فایل به اندازه ای بزرگ است که تقریباً همه برنامه ها را برآورده کند‪.‬‬

‫دایرکتوری ها‬

‫دایرکتوری ها در یک درخت سلسله مراتبی ساختار یافته اند‪ .‬هر دایرکتوری می تواند حاوی فایل ها و‪/‬یا دایرکتوری های دیگری‬
‫باشد‪ .‬دایرکتوری که در داخل دایرکتوری دیگری قرار دارد‪ ،‬زیر شاخه نامیده می شود‪ .‬همانطور که ذکر شد‪ ،‬دایرکتوری به‬
‫سادگی فایلی است که حاوی لیستی از نام فایل ها به اضافه اشاره گر به ‪ inode‬های مرتبط است‪ .‬شکل ‪ 12.16‬ساختار کلی را‬
‫نشان می دهد‪ .‬هر ورودی دایرکتوری دنتری حاوی نامی برای فایل یا زیرشاخه مرتبط به اضافه یک عدد صحیح به نام شماره ‪i‬‬
‫شماره فهرست است‪ .‬هنگامی که به فایل یا دایرکتوری دسترسی پیدا می شود‪ ،‬شماره ‪ i‬آن به عنوان یک فهرست در جدول‬
‫‪ inode‬استفاده می شود‪.‬‬

‫ساختار حجمی‬

‫یک سیستم فایل یونیکس بر روی یک دیسک منطقی یا پارتیشن دیسک قرار دارد و با عناصر زیر چیده شده است‪:‬‬

‫‪ -‬بلوک بوت‪ :‬حاوی کد مورد نیاز برای بوت شدن سیستم عامل است‬

‫‪678‬‬
‫سیستم عامل های داخلی و اصول طراحی‪679.........................................................................................................................‬‬

‫‪Superblock: -‬حاوی ویژگی ها و اطالعات مربوط به سیستم فایل‪ ،‬مانند اندازه پارتیشن و اندازه جدول ‪ inode‬است‪.‬‬

‫‪ -‬جدول ‪Inode:‬مجموعه ای از ‪ inode‬ها برای هر فایل‬

‫‪ -‬بلوک های داده‪ :‬فضای ذخیره سازی موجود برای فایل های داده و زیر شاخه ها‬

‫شکل ‪ 12.16‬فهرست راهنماها و ‪ inode‬های یونیکس‬

‫‪ 12.9‬سیستم فایل مجازی لینوکس‬

‫لینوکس شامل یک مرکز مدیریت فایل همه کاره و قدرتمند است که برای پشتیبانی از طیف گسترده ای از سیستم های‬
‫مدیریت فایل و ساختارهای فایل طراحی شده است‪ .‬رویکرد اتخاذ شده در لینوکس استفاده از سیستم فایل مجازی ‪VFS‬است‬
‫که یک رابط سیستم فایل واحد و یکنواخت را به فرآیندهای کاربر ارائه می دهد‪ VFS .‬یک مدل فایل رایج را تعریف می کند‬
‫که می تواند هر ویژگی و رفتار کلی سیستم فایل قابل تصور را نشان دهد‪.‬‬

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

‫‪679‬‬
‫سیستم عامل های داخلی و اصول طراحی‪680.........................................................................................................................‬‬

‫سیستم فایل داخلی به هسته تبدیل می کند که به یک تابع نقشه برداری برای یک سیستم فایل خاص به عنوان مثال‪ext2 ،‬‬
‫‪FS‬دومین فایل سیستم توسعه یافته ارسال می شود‪ .‬در بیشتر موارد‪ ،‬تابع نگاشت صرفاً نگاشت فراخوانی های عملکردی‬
‫سیستم فایل از یک طرح به طرح دیگر است‪ .‬در برخی موارد‪ ،‬تابع نگاشت پیچیده تر است‪.‬‬

‫شکل ‪ 12.17‬زمینه سیستم فایل مجازی لینوکس‬

‫شکل ‪ 12.18‬مفهوم سیستم فایل مجازی لینوکس‬

‫به عنوان مثال‪ ،‬برخی از سیستم های فایل از جدول تخصیص فایل ‪FAT‬استفاده می کنند که موقعیت هر فایل را در درخت‬
‫دایرکتوری ذخیره می کند‪ .‬در این فایل سیستم ها‪ ،‬دایرکتوری ها فایل نیستند‪ .‬برای چنین سیستم های فایلی‪ ،‬تابع نگاشت باید‬
‫بتواند به صورت پویا و در صورت نیاز‪ ،‬فایل های مربوط به دایرکتوری ها را بسازد‪.‬‬

‫در هر صورت‪ ،‬فراخوانی سیستم فایل کاربر اصلی به فراخوانی تبدیل می شود که بومی سیستم فایل هدف است‪ .‬سپس نرم افزار‬
‫سیستم فایل مورد نظر برای انجام عملکرد درخواستی روی یک فایل یا دایرکتوری تحت کنترل و ذخیره سازی ثانویه فراخوانی‬
‫می شود‪ .‬سپس نتایج عملیات به روشی مشابه به کاربر مخابره می شود‪.‬‬

‫شکل ‪ 12.18‬نقشی را که ‪ VFS‬در هسته لینوکس ایفا می کند نشان می دهد‪ .‬هنگامی که یک فرآیند یک فراخوانی سیستم‬
‫فایل محور را آغاز می کند به عنوان مثال‪ ،‬خواندن‪ ،‬هسته یک تابع را در ‪ VFS‬فراخوانی می کند‪ .‬این تابع دستکاریهای‬
‫مستقل از سیستم فایل را مدیریت میکند و فراخوانی یک تابع در کد فایل سیستم هدف را آغاز میکند‪ .‬این تماس از طریق یک‬
‫تابع نگاشت که تماس را از ‪ VFS‬به فراخوانی به سیستم فایل هدف تبدیل می کند‪ ،‬می گذرد‪ VFS .‬مستقل از هر سیستم‬
‫‪680‬‬
‫سیستم عامل های داخلی و اصول طراحی‪681.........................................................................................................................‬‬

‫فایلی است‪ ،‬بنابراین اجرای یک تابع نقشه برداری باید بخشی از اجرای یک سیستم فایل در لینوکس باشد‪ .‬سیستم فایل هدف‬
‫درخواست سیستم فایل را به دستورالعمل های دستگاه گرا تبدیل می کند که با استفاده از توابع کش صفحه به درایور دستگاه‬
‫ارسال می شود‪.‬‬

‫‪ VFS‬یک طرح شی گرا است‪ .‬از آنجایی که به جای زبانی که از برنامه نویسی شی مانند ‪C++‬یا جاوا پشتیبانی می کند‪ ،‬به‬
‫زبان ‪ C‬نوشته شده است‪ ،‬اشیاء ‪ VFS‬به سادگی به عنوان ساختارهای داده ‪ C‬پیاده سازی می شوند‪ .‬هر شی شامل داده ها و‬
‫اشاره گرهایی برای توابع پیاده سازی شده در سیستم فایل است که بر روی داده ها عمل می کنند‪ .‬چهار نوع شی اصلی در‬
‫‪ VFS‬به شرح زیر است‪:‬‬

‫‪ -‬شی ‪Superblock:‬یک سیستم فایل نصب شده خاص را نشان می دهد‬

‫‪ -‬شی ‪Inode:‬یک فایل خاص را نشان می دهد‬

‫‪ -‬شیء دندانپزشکی‪ :‬یک ورودی دایرکتوری خاص را نشان می دهد‬

‫‪File object: -‬یک فایل باز مرتبط با یک فرآیند را نشان می دهد‬

‫این طرح بر اساس مفاهیم مورد استفاده در سیستم های فایل یونیکس است که در بخش ‪ 12.7‬توضیح داده شده است‪ .‬مفاهیم‬
‫کلیدی سیستم فایل یونیکس که باید به خاطر بسپارید موارد زیر است‪ .‬یک سیستم فایل از سازماندهی سلسله مراتبی‬
‫دایرکتوری ها تشکیل شده است‪ .‬دایرکتوری همان چیزی است که در بسیاری از پلتفرم های غیریونیکس به عنوان پوشه‬
‫شناخته می شود و ممکن است حاوی فایل ها و‪/‬یا دایرکتوری های دیگری باشد‪ .‬از آنجا که یک دایرکتوری ممکن است شامل‬
‫دایرکتوری های دیگری باشد‪ ،‬یک ساختار درختی تشکیل می شود‪ .‬یک مسیر از طریق ساختار درختی از ریشه شامل دنباله ای‬
‫از ورودی های دایرکتوری است که به یک ورودی دایرکتوری دنتری یا نام فایل ختم می شود‪.‬‬

‫در یونیکس‪ ،‬دایرکتوری به صورت فایلی پیاده سازی می شود که فایل ها و دایرکتوری های موجود در آن را فهرست می کند‪.‬‬
‫بنابراین‪ ،‬عملیات فایل را می توان بر روی فایل ها یا دایرکتوری ها انجام داد‪.‬‬

‫شی ‪Superblock‬‬

‫شی ‪ superblock‬اطالعاتی را ذخیره می کند که یک سیستم فایل خاص را توصیف می کند‪ .‬به طور معمول‪superblock ،‬‬
‫مربوط به ‪ superblock‬سیستم فایل یا بلوک کنترل سیستم فایل است که در بخش خاصی روی دیسک ذخیره می شود‪.‬‬

‫شی ‪ superblock‬از تعدادی آیتم داده تشکیل شده است‪ .‬به عنوان مثال می توان به موارد زیر اشاره کرد‪:‬‬

‫‪ -‬دستگاهی که این فایل سیستم روی آن نصب شده است‬


‫‪681‬‬
‫سیستم عامل های داخلی و اصول طراحی‪682.........................................................................................................................‬‬

‫‪ -‬اندازه بلوک اصلی سیستم فایل‬

‫‪ -‬پرچم کثیف‪ ،‬برای نشان دادن اینکه ‪ superblock‬تغییر کرده است اما به دیسک بازگردانده نشده است‬

‫‪ -‬نوع سیستم فایل‬

‫‪ -‬پرچمها‪ ،‬مانند یک پرچم فقط خواندنی‬

‫‪ -‬اشاره گر به ریشه فهرست فایل سیستم‬

‫‪ -‬لیست فایل های باز‬

‫‪ -‬سمافور برای کنترل دسترسی به سیستم فایل‬

‫‪ -‬لیست عملیات ‪superblock‬‬

‫آخرین مورد در لیست قبلی به یک شی عملیاتی موجود در شی ‪ superblock‬اشاره دارد‪ .‬شی عملیات‪ ،‬متدهای شی توابع را‬
‫تعریف می کند که هسته می تواند در برابر شی ‪ superblock‬فراخوانی کند‪ .‬متدهای تعریف شده برای شی ‪superblock‬‬
‫شامل موارد زیر است‪:‬‬

‫‪read_inode: -‬یک ‪ inode‬مشخص شده را از یک سیستم فایل نصب شده بخوانید‪.‬‬

‫‪ write_inode: inode-‬داده شده را روی دیسک بنویسید‪.‬‬

‫‪ put_inode: inode-‬را آزاد کنید‪.‬‬

‫‪delete_inode: -‬حذف ‪ inode‬از دیسک‪.‬‬

‫‪notify_change: -‬زمانی که ویژگی های ‪ inode‬تغییر می کنند‪ ،‬فراخوانی می شود‪.‬‬

‫‪put_super: -‬توسط ‪ VFS‬در ‪ unmount‬فراخوانی می شود تا ‪ superblock‬داده شده آزاد شود‪.‬‬

‫‪write_super: -‬زمانی فراخوانی می شود که ‪ VFS‬تصمیم بگیرد که ‪ superblock‬باید روی دیسک نوشته شود‪.‬‬

‫‪statfs: -‬آمار سیستم فایل را بدست آورید‪.‬‬

‫‪remount_fs: -‬هنگامی که فایل سیستم با گزینه های جدید ‪ mount‬مجدداً نصب می شود توسط ‪ VFS‬فراخوانی می شود‪.‬‬

‫‪ clear_inode: -inode‬را آزاد کنید و هر صفحه حاوی داده های مرتبط را پاک کنید‪.‬‬

‫‪682‬‬
‫سیستم عامل های داخلی و اصول طراحی‪683.........................................................................................................................‬‬

‫شی ‪Inode‬‬

‫یک ‪ inode‬با هر فایل مرتبط است‪ .‬شی ‪ inode‬تمام اطالعات مربوط به یک فایل نامگذاری شده را به جز نام آن و محتویات‬
‫داده واقعی فایل نگهداری می کند‪ .‬موارد موجود در یک شی ‪ inode‬شامل مالک‪ ،‬گروه‪ ،‬مجوزها‪ ،‬زمان دسترسی به یک فایل‪،‬‬
‫اندازه داده ای که در آن نگهداری می شود و تعداد پیوندها می باشد‪ .‬شی ‪ inode‬همچنین شامل یک شی عملیات ‪ inode‬است‬
‫که توابع پیاده سازی شده سیستم فایل را توصیف می کند که ‪ VFS‬می تواند در یک ‪ inode‬فراخوانی کند‪ .‬متدهای تعریف‬
‫شده برای شی ‪ inode‬شامل موارد زیر است‪:‬‬

‫‪r create:‬یک ‪ inode‬جدید برای یک فایل معمولی مرتبط با یک شیء دندانپزشکی در برخی دایرکتوری ها ایجاد می کند‬

‫‪r lookup:‬دایرکتوری را برای ‪ inode‬مربوط به نام فایل جستجو می کند‬

‫‪r mkdir:‬یک ‪ inode‬جدید برای دایرکتوری مرتبط با یک شی ‪ dentry‬در برخی دایرکتوری ها ایجاد می کند‬

‫شیء دندانپزشکی‬

‫دنتری ورودی دایرکتوری یک جزء خاص در یک مسیر است‪ .‬قطعه بندی ممکن است نام دایرکتوری یا نام فایل باشد‪ .‬اشیاء‬
‫دندانپزشکی جستجوی سریع فایلها و دایرکتوریها را تسهیل میکنند و برای این منظور در کش دندانی استفاده میشوند‪ .‬شی‬
‫دندانه دار شامل یک اشاره گر به ‪ inode‬و ‪ superblock‬است‪ .‬این همچنین شامل یک اشاره گر به دندان های والد و اشاره گر‬
‫به هر دندان های فرعی است‪.‬‬

‫شی فایل‬

‫شی فایل برای نمایش فایلی که توسط یک فرآیند باز می شود استفاده می شود‪ .‬شی در پاسخ به فراخوانی سیستم ‪open‬ایجاد‬
‫می شود و در پاسخ به فراخوانی سیستم ‪ close‬از بین می رود‪ .‬شی فایل از تعدادی آیتم تشکیل شده است‪ ،‬از جمله موارد زیر‪:‬‬

‫‪ -‬شیء دندانی مرتبط با فایل‬

‫‪ -‬سیستم فایل حاوی فایل‬

‫‪ -‬شمارنده استفاده از اشیاء فایل‬

‫‪ -‬شناسه کاربری کاربر‬

‫‪ -‬شناسه گروه کاربر‬

‫‪683‬‬
‫سیستم عامل های داخلی و اصول طراحی‪684.........................................................................................................................‬‬

‫‪ -‬نشانگر فایل‪ ،‬که موقعیت فعلی در فایلی است که عملیات بعدی از آنجا انجام خواهد شد‬

‫شی فایل همچنین شامل یک شی عملیات ‪ inode‬است که توابع پیاده سازی شده سیستم فایل را توصیف می کند که ‪VFS‬‬
‫می تواند روی یک شی فایل فراخوانی کند‪ .‬روش های تعریف شده برای شی فایل شامل خواندن‪ ،‬نوشتن‪ ،‬باز کردن‪ ،‬آزاد کردن و‬
‫قفل کردن است‪.‬‬

‫حافظه های پنهان‬

‫‪ VFS‬از سه کش برای بهبود عملکرد استفاده می کند‪:‬‬

‫‪ Inode cache: -‬از آنجا که هر فایل و دایرکتوری با یک ‪ inode VFS‬نشان داده می شود‪ ،‬یک دستور فهرست دایرکتوری یا‬
‫یک دستور دسترسی به فایل باعث می شود به تعدادی از ‪ inode‬ها دسترسی پیدا کنید‪ .‬ذخیرههای کش ‪ inode‬اخیراً از‬
‫‪ inode‬بازدید کردهاند تا دسترسی را سریعتر کنند‪.‬‬

‫‪ -‬دایرکتوری کش‪ :‬کش دایرکتوری نگاشت بین نام های کامل دایرکتوری و شماره های ورودی آنها را ذخیره می کند‪ .‬این کار‬
‫روند فهرست کردن یک فهرست را سرعت می بخشد‪.‬‬

‫‪ -‬بافر کش‪ :‬کش بافر مستقل از سیستم فایل است و در مکانیسم هایی که هسته لینوکس برای تخصیص و خواندن و نوشتن‬
‫بافرهای داده استفاده می کند‪ ،‬ادغام شده است‪ .‬از آنجایی که سیستم های فایل واقعی داده ها را از دیسک های فیزیکی زیرین‬
‫می خوانند‪ ،‬این منجر به درخواست هایی از درایورهای دستگاه بلوک می شود تا بلوک های فیزیکی را از دستگاهی که کنترل‬
‫می کنند بخوانند‪ .‬بنابراین‪ ،‬اگر همان دادهها اغلب مورد نیاز باشد‪ ،‬به جای خواندن از دیسک‪ ،‬از حافظه پنهان بافر بازیابی‬
‫میشود‪.‬‬

‫‪ 12.10‬سیستم فایل ویندوز‬

‫توسعه دهندگان ‪ Windows NT‬یک سیستم فایل جدید به نام ‪ New Technology File System NTFS‬طراحی‬
‫کردند که برای برآوردن نیازهای سطح باال برای ایستگاه های کاری و سرورها در نظر گرفته شده است‪ .‬نمونه هایی از برنامه های‬
‫کاربردی پیشرفته شامل موارد زیر است‪:‬‬

‫‪ -‬برنامه های کاربردی سرویس گیرنده‪/‬سرور مانند سرورهای فایل‪ ،‬سرورهای محاسباتی و سرورهای پایگاه داده‬

‫‪ -‬مهندسی و کاربردهای علمی با منابع فشرده‬

‫‪ -‬برنامه های کاربردی شبکه برای سیستم های شرکت های بزرگ این بخش یک نمای کلی از ‪ NTFS‬ارائه می دهد‪.‬‬

‫‪684‬‬
‫سیستم عامل های داخلی و اصول طراحی‪685.........................................................................................................................‬‬

‫ویژگی های کلیدی ‪NTFS‬‬

‫همانطور که خواهیم دید‪ NTFS ،‬یک فایل سیستم انعطاف پذیر و قدرتمند است که بر روی یک مدل فایل سیستمی ساده و‬
‫زیبا ساخته شده است‪ .‬از مهمترین ویژگی های ‪ NTFS‬می توان به موارد زیر اشاره کرد‪:‬‬

‫قابلیت بازیابی‪ :‬در فهرست الزامات سیستم فایل جدید ویندوز‪ ،‬توانایی بازیابی از خرابی سیستم و خرابی دیسک در باالترین رتبه‬
‫قرار دارد‪ .‬در صورت بروز چنین خرابی هایی‪ NTFS ،‬قادر است حجم های دیسک را بازسازی کرده و آنها را به حالت ثابت‬
‫بازگرداند‪ .‬این کار را با استفاده از یک مدل پردازش تراکنش برای تغییرات در سیستم فایل انجام می دهد‪ .‬هر تغییر قابل توجهی‬
‫به عنوان یک عمل اتمی تلقی می شود که یا به طور کامل انجام می شود یا اصال انجام نمی شود‪ .‬هر معامله ای که در زمان‬
‫شکست در حال انجام بود‪ ،‬متعاقباً عقب نشینی می کند یا تکمیل می شود‪ .‬عالوه بر این‪ NTFS ،‬از ذخیرهسازی اضافی برای‬
‫دادههای سیستم فایل حیاتی استفاده میکند‪ ،‬به طوری که خرابی بخش دیسک باعث از دست رفتن دادههایی که ساختار و‬
‫وضعیت سیستم فایل را توصیف میکنند‪ ،‬نمیشود‪.‬‬

‫‪ -‬امنیت‪ NTFS :‬از مدل شی ویندوز برای اعمال امنیت استفاده می کند‪ .‬یک فایل باز به عنوان یک شی فایل با یک توصیفگر‬
‫امنیتی که ویژگی های امنیتی آن را تعریف می کند‪ ،‬پیاده سازی می شود‪ .‬توصیفگر امنیتی به عنوان ویژگی هر فایل روی‬
‫دیسک باقی می ماند‪.‬‬

‫‪ -‬دیسکهای بزرگ و فایلهای بزرگ‪ NTFS :‬از دیسکهای بسیار بزرگ و فایلهای بسیار بزرگ با کارایی بیشتری نسبت به‬
‫سایر سیستمهای فایل مانند ‪ FAT‬پشتیبانی میکند‪.‬‬

‫‪ -‬جریان های داده چندگانه‪ :‬محتویات واقعی یک فایل به عنوان جریانی از بایت ها در نظر گرفته می شود‪ .‬در ‪ NTFS‬امکان‬
‫تعریف چندین جریان داده برای یک فایل وجود دارد‪ .‬نمونه ای از کاربرد این ویژگی این است که به ویندوز اجازه می دهد تا‬
‫توسط سیستم های مکینتاش راه دور برای ذخیره و بازیابی فایل ها استفاده شود‪ .‬در مکینتاش‪ ،‬هر فایل دارای دو جزء است‪:‬‬
‫داده های فایل و یک منبع ‪ fork‬که حاوی اطالعات مربوط به فایل است‪ NTFS .‬این دو جزء را به عنوان دو جریان داده در‬
‫یک فایل واحد در نظر می گیرد‪.‬‬

‫‪ Journaling: NTFS-‬گزارشی از تمام تغییرات ایجاد شده در فایلها روی حجمها نگه میدارد‪ .‬برنامه هایی مانند جستجوی‬
‫دسکتاپ می توانند مجله را بخوانند تا بفهمند چه فایل هایی تغییر کرده اند‪.‬‬

‫‪ -‬فشرده سازی و رمزگذاری‪ :‬کل فهرست ها و فایل های فردی را می توان به صورت شفاف فشرده و‪/‬یا رمزگذاری کرد‪.‬‬

‫پیوندهای سخت و نمادین‪ :‬به منظور پشتیبانی از ‪ ،POSIX‬ویندوز همیشه از «پیوندهای سخت» پشتیبانی میکند که به یک‬
‫فایل اجازه میدهد با نام مسیرهای متعدد در یک حجم قابل دسترسی باشد‪ .‬با شروع با ویندوز ویستا‪" ،‬پیوندهای نمادین"‬
‫‪685‬‬
‫سیستم عامل های داخلی و اصول طراحی‪686.........................................................................................................................‬‬

‫پشتیبانی می شوند که به یک فایل یا دایرکتوری اجازه می دهد با نام مسیرهای متعدد قابل دسترسی باشد‪ ،‬حتی اگر نام ها در‬
‫حجم های مختلف باشند‪ .‬ویندوز همچنین از «نقاط اتصال» پشتیبانی میکند که به حجمها اجازه میدهد در نقاط اتصال سایر‬
‫ولومها ظاهر شوند‪ ،‬نه اینکه با حروف درایور‪ ،‬مانند « »‪D:‬نامگذاری شوند‪.‬‬

‫حجم و ساختار فایل ‪NTFS‬‬

‫‪ NTFS‬از مفاهیم ذخیره سازی دیسک زیر استفاده می کند‪:‬‬

‫‪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‬ویندوز‬

‫‪Volume Size‬‬ ‫‪Sectors per‬‬ ‫‪Cluster‬‬


‫‪Cluster‬‬ ‫‪Size‬‬
‫‪512 Mbyte‬‬ ‫‪1‬‬ ‫‪512‬‬
‫‪bytes‬‬
‫‪512 Mbyte–1‬‬ ‫‪2‬‬ ‫‪1K‬‬
‫‪Gbyte‬‬
‫‪1 Gbyte–2 Gbyte‬‬ ‫‪4‬‬ ‫‪2K‬‬
‫‪2 Gbyte–4 Gbyte‬‬ ‫‪8‬‬ ‫‪4K‬‬
‫‪4 Gbyte–8 Gbyte‬‬ ‫‪16‬‬ ‫‪8K‬‬
‫‪8 Gbyte–16‬‬ ‫‪32‬‬ ‫‪16K‬‬
‫‪Gbyte‬‬
‫‪16 Gbyte–32‬‬ ‫‪64‬‬ ‫‪32K‬‬
‫‪Gbyte‬‬
‫‪32 Gbyte‬‬ ‫‪12‬‬ ‫‪64K‬‬
‫‪8‬‬

‫جدول ‪ 12.4‬اندازه های کالستر پیش فرض را برای ‪ NTFS‬نشان می دهد‪ .‬پیش فرض ها به اندازه صدا بستگی دارد‪ .‬اندازه‬
‫خوشه ای که برای یک حجم خاص استفاده می شود توسط ‪ NTFS‬زمانی تعیین می شود که کاربر درخواست فرمت کردن یک‬
‫جلد را داشته باشد‪.‬‬

‫طرح بندی حجم ‪ NTFS NTFS‬از یک رویکرد ساده اما قدرتمند برای سازماندهی اطالعات روی حجم دیسک استفاده می‬
‫کند‪ .‬هر عنصر در یک جلد یک فایل است و هر فایل از مجموعه ای از ویژگی ها تشکیل شده است‪ .‬حتی محتویات داده یک‬
‫فایل به عنوان یک ویژگی در نظر گرفته می شود‪ .‬با این ساختار ساده‪ ،‬چند تابع همه منظوره برای سازماندهی و مدیریت یک‬
‫سیستم فایل کافی است‪.‬‬

‫شکل ‪ 12.19‬طرح یک حجم ‪ NTFS‬را نشان می دهد که از چهار منطقه تشکیل شده است‪ .‬چند سکتور اول در هر حجمی‬
‫توسط بخش بوت پارتیشن اشغال می شود اگرچه به آن سکتور گفته می شود‪ ،‬اما می تواند تا ‪ 16‬سکتور طول داشته باشد که‬
‫حاوی اطالعاتی در مورد طرح حجم و ساختار سیستم فایل و همچنین بوت است‪ .‬اطالعات راه اندازی و کد به دنبال آن جدول‬
‫فایل اصلی ‪MFT‬قرار می گیرد که حاوی اطالعاتی درباره همه فایل ها و پوشه ها دایرکتوری ها در این حجم ‪ NTFS‬است‪.‬‬
‫در اصل‪ MFT ،‬لیستی از تمام فایل ها و ویژگی های آنها در این حجم ‪ NTFS‬است که به عنوان مجموعه ای از ردیف ها در‬

‫‪687‬‬
‫سیستم عامل های داخلی و اصول طراحی‪688.........................................................................................................................‬‬

‫ساختار جدول سازماندهی شده است‪ .‬پس از ‪ ،MFT‬منطقه ای حاوی فایل های سیستمی است‪ .‬از جمله فایل های موجود در‬
‫این منطقه می توان به موارد زیر اشاره کرد‪:‬‬

‫‪MFT2: -‬آینه ای از چند ردیف اول ‪ MFT‬که برای تضمین دسترسی به صدا در صورت خرابی تک بخش در بخش های‬
‫ذخیره کننده ‪ MFT‬استفاده می شود‪.‬‬

‫‪ -‬فایل گزارش‪ :‬فهرستی از مراحل تراکنش مورد استفاده برای بازیابی ‪NTFS‬‬

‫‪ -‬نقشه بیت خوشه ای‪ :‬نمایشی از فضای روی حجم‪ ،‬که نشان می دهد کدام خوشه ها در حال استفاده هستند‪.‬‬

‫شکل ‪ 12.19‬طرح حجم ‪NTFS‬‬

‫جدول ‪ 12.5‬انواع ویژگی های فایل و دایرکتوری ویندوز ‪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‬‬ ‫یک جلد آینه ای یا‬
‫راه راه‬
‫درایور مقاوم‬
‫فایل الگ را‬ ‫کش را‬ ‫در برابر خطا‬
‫فالش کنید‬ ‫بنویسید‬ ‫خواندن‪/‬نوشتن‬
‫دیسک‬
‫درایور‬
‫دیسک‬
‫مدیر کش‬ ‫بارگذاری‬
‫اطالعات از‬
‫دیسک در‬
‫به فایل نگاشت شده دسترسی‬ ‫حافظه‬
‫پیدا کنید یا کش را پاک کنید‬

‫مدیر حافظه‬
‫مجازی‬

‫شکل ‪ 12.20‬اجزای ‪ NTFS‬ویندوز‬

‫‪Cache manager: -‬مسئول ذخیره سازی خواندن و نوشتن فایل برای افزایش کارایی است‪ .‬مدیر کش ورودی‪/‬خروجی‬
‫دیسک را بهینه می کند‪.‬‬

‫‪690‬‬
‫سیستم عامل های داخلی و اصول طراحی‪691.........................................................................................................................‬‬

‫‪ -‬مدیریت حافظه مجازی‪ NTFS :‬با نگاشت ارجاعات فایل به مراجع حافظه مجازی و خواندن و نوشتن حافظه مجازی به فایل‬
‫های کش دسترسی پیدا می کند‪.‬‬

‫توجه به این نکته مهم است که رویه های بازیابی مورد استفاده توسط ‪ NTFS‬برای بازیابی فراداده سیستم فایل طراحی شده‬
‫اند‪ ،‬نه محتویات فایل‪ .‬بنابراین‪ ،‬کاربر هرگز نباید حجم یا ساختار دایرکتوری‪/‬فایل یک برنامه را به دلیل خرابی از دست بدهد‪ .‬با‬
‫این حال‪ ،‬اطالعات کاربر توسط سیستم فایل تضمین نمی شود‪ .‬ارائه قابلیت بازیابی کامل‪ ،‬از جمله دادههای کاربر‪ ،‬تسهیالت‬
‫بازیابی بسیار پیچیدهتر و مصرفبر منابع را ایجاد میکند‪.‬‬

‫ماهیت قابلیت بازیابی ‪ NTFS‬ورود به سیستم است‪ .‬هر عملیاتی که یک سیستم فایل را تغییر می دهد به عنوان یک تراکنش‬
‫در نظر گرفته می شود‪ .‬هر عملیات فرعی یک تراکنش که ساختارهای داده سیستم فایل مهم را تغییر می دهد‪ ،‬قبل از اینکه‬
‫روی حجم دیسک ثبت شود‪ ،‬در یک فایل گزارش ثبت می شود‪ .‬با استفاده از گزارش‪ ،‬یک تراکنش نیمه تکمیل شده در زمان‬
‫خرابی میتواند بعداً پس از بازیابی سیستم دوباره انجام شود یا لغو شود‪.‬‬

‫به طور کلی‪ ،‬اینها مراحلی هستند که برای اطمینان از قابلیت بازیابی‪ ،‬همانطور که در ‪RUSS11‬توضیح داده شده است‪:‬‬

‫‪ NTFS .1‬ابتدا سیستم فایل ‪ log‬را فراخوانی می کند تا هر تراکنشی را که ساختار حجم را تغییر می دهد در فایل ‪log‬در‬
‫حافظه پنهان ثبت کند‪.‬‬

‫‪ NTFS .2‬حجم را تغییر می دهد در حافظه پنهان‪.‬‬

‫‪ .3‬مدیر حافظه پنهان سیستم فایل الگ را فراخوانی می کند تا از آن بخواهد فایل گزارش را روی دیسک تخلیه کند‪.‬‬

‫‪ .4‬هنگامی که بهروزرسانی فایل الگ به طور ایمن روی دیسک قرار میگیرد‪ ،‬مدیر کش تغییرات حجم را روی دیسک پاک‬
‫میکند‪.‬‬

‫‪ 12.11‬مدیریت فایل اندروید‬

‫سیستم فایل‬

‫اندروید از قابلیت های مدیریت فایل ساخته شده در لینوکس استفاده می کند‪ .‬دایرکتوری سیستم فایل اندروید مشابه چیزی‬
‫است که در یک نصب لینوکس معمولی دیده می شود و دارای برخی ویژگی های خاص اندروید است‪ .‬شکل ‪ 12.21‬سطوح باالی‬
‫دایرکتوری سیستم فایل اندروید معمولی را نشان می دهد‪ .‬دایرکتوری سیستم شامل بخش های اصلی سیستم عامل‪ ،‬از جمله‬
‫باینری های سیستم‪ ،‬کتابخانه های سیستم و فایل های پیکربندی است‪ .‬همچنین شامل مجموعه ای اساسی از برنامه های‬
‫اندروید مانند ساعت زنگ دار‪ ،‬ماشین حساب و دوربین است‪ .‬تصویر سیستم قفل شده است‪ ،‬با دسترسی فقط خواندنی به‬

‫‪691‬‬
‫سیستم عامل های داخلی و اصول طراحی‪692.........................................................................................................................‬‬

‫کاربران سیستم فایل‪ .‬دایرکتوری های باقی مانده که در شکل ‪ 12.21‬نشان داده شده اند‪ ،‬خواندن و نوشتن هستند‪ .‬دایرکتوری‬
‫داده مکان اصلی مورد استفاده برنامه ها را برای ذخیره فایل ها فراهم می کند‪ .‬هنگامی که یک برنامه جدید در سیستم نصب‬
‫می شود‪ ،‬اقدامات زیر‪ ،‬از جمله‪ ،‬با توجه به فهرست داده ها انجام می شود‪:‬‬

‫‪ apk. -‬بسته اندروید در ‪ data/app/‬قرار می گیرد‪.‬‬

‫‪ -‬کتابخانه های برنامه محور در ‪data/data/<application name> /‬نصب می شوند‪ .‬این یک ناحیه جعبه ایمنی مخصوص‬
‫برنامه است که توسط برنامه قابل دسترسی است اما برای سایر برنامه ها قابل دسترسی نیست‪.‬‬

‫‪ -‬پایگاه داده فایل های مربوط به برنامه راه اندازی شده است‪.‬‬

‫دایرکتوری کش برای ذخیره سازی موقت برنامه ها استفاده می شود‪ .‬این پارتیشنی است که ‪ Android‬دادهها و اجزای برنامه‬
‫را که اغلب به آنها دسترسی دارند را ذخیره میکند‪ .‬پاک کردن حافظه نهان بر روی داده های شخصی شما تأثیر نمی گذارد‪،‬‬
‫بلکه به سادگی از شر داده های موجود در آنجا خالص می شود‪ ،‬که با ادامه استفاده از دستگاه‪ ،‬به طور خودکار بازسازی می‬
‫شود‪.‬‬

‫دایرکتوری ‪ mnt/sdcard‬یک پارتیشن روی حافظه داخلی دستگاه نیست‪ ،‬بلکه کارت ‪ SD‬است که یک کارت حافظه غیرفرار‬
‫است که می تواند با دستگاه های اندرویدی ادغام شود‪ .‬کارت ‪ SD‬یک کارت حافظه قابل جابجایی است که کاربر می تواند آن را‬
‫جدا کرده و به رایانه خود وصل کند‪ .‬از نظر استفاده‪ ،‬این فضای ذخیره سازی کاربر برای کاربر برای خواندن‪/‬نوشتن داده ها از هر‬
‫نوع‪ ،‬مانند داده‪ ،‬فایل های صوتی و تصویری است‪ .‬در دستگاههای دارای کارت ‪ SD‬داخلی و خارجی‪ ،‬پارتیشن ‪ sdcard/‬همیشه‬
‫برای اشاره به کارت ‪ SD‬داخلی استفاده میشود‪ .‬برای کارت ‪ SD‬خارجی‪ ،‬در صورت وجود‪ ،‬از یک پارتیشن جایگزین استفاده‬
‫می شود که از دستگاهی به دستگاه دیگر متفاوت است‪.‬‬

‫‪692‬‬
‫سیستم عامل های داخلی و اصول طراحی‪693.........................................................................................................................‬‬

‫)‪ (rw‬حافظه قابل جابجایی‬

‫به صورت فقط خواندنی نصب شده است ‪ro:‬‬

‫به صورت خواندن و نوشتن نصب شده است ‪rw:‬‬


‫شکل ‪ 12.21‬درخت دایرکتوری معمولی اندروید‬

‫‪SQLite‬‬
‫‪ SQLite‬که مبتنی بر ‪ SQL‬است‪ ،‬قابل ذکر است‪ .‬زبان پرس و جو ساختاریافته ‪SQL‬به عنوان ابزار استاندارد شده برای‬
‫تعریف و دسترسی به یک پایگاه داده رابطه ای توسط یک کاربر یا برنامه محلی یا راه دور فراهم می کند‪ .‬زبان پرس و جو‬
‫ساختاریافته ‪ ،SQL‬که در ابتدا توسط ‪ IBM‬در اواسط دهه ‪ 1970‬توسعه یافت‪ ،‬یک زبان استاندارد شده است که می تواند‬
‫برای تعریف طرحواره‪ ،‬دستکاری‪ ،‬و داده های پرس و جو در یک پایگاه داده رابطه ای استفاده شود‪ .‬نسخههای مختلفی از‬
‫استاندارد ‪ ANSI/ISO‬و انواع مختلفی از پیادهسازیها وجود دارد‪ ،‬اما همگی از یک نحو اولیه و معنایی پیروی میکنند‪.‬‬

‫‪ SQLite‬گسترده ترین موتور پایگاه داده ‪ SQL‬در جهان است‪ .‬این برای ارائه یک سیستم مدیریت پایگاه داده مبتنی بر ‪SQL‬‬
‫ساده و مناسب برای سیستم های جاسازی شده و سایر سیستم های با حافظه محدود طراحی شده است‪ .‬کتابخانه کامل‬
‫‪ SQLite‬را می توان در کمتر از ‪ 400‬کیلوبایت ‪KB‬پیاده سازی کرد‪ .‬ویژگیهای غیرضروری را میتوان در زمان اجرا غیرفعال‬
‫کرد تا در صورت تمایل‪ ،‬حجم کتابخانه را به کمتر از ‪ 190‬کیلوبایت کاهش دهد‪.‬‬

‫برخالف سایر سیستم های مدیریت پایگاه داده‪ SQLite ،‬یک فرآیند جداگانه نیست که از برنامه مشتری قابل دسترسی باشد‪.‬‬
‫درعوض‪ ،‬کتابخانه ‪ SQLite‬به آن متصل می شود و به این ترتیب بخشی جدایی ناپذیر از برنامه کاربردی می شود‪.‬‬

‫‪ 12.12‬خالصه‬

‫سیستم مدیریت فایل مجموعه ای از نرم افزارهای سیستمی است که خدماتی را به کاربران و برنامه های کاربردی در استفاده از‬
‫فایل ها از جمله دسترسی به فایل‪ ،‬نگهداری دایرکتوری و کنترل دسترسی ارائه می دهد‪.‬‬

‫‪693‬‬
‫سیستم عامل های داخلی و اصول طراحی‪694.........................................................................................................................‬‬

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

‫یک فایل از مجموعه ای از رکوردها تشکیل شده است‪ .‬نحوه دسترسی به این رکوردها سازماندهی منطقی آن و تا حدودی‬
‫سازمان فیزیکی آن بر روی دیسک را تعیین می کند‪ .‬اگر قرار است یک فایل در درجه اول به عنوان یک کل پردازش شود‪،‬‬
‫سازماندهی فایل متوالی ساده ترین و مناسب ترین است‪ .‬اگر دسترسی متوالی مورد نیاز است‪ ،‬اما دسترسی تصادفی به فایل‬
‫فردی نیز مورد نظر است‪ ،‬آنگاه یک فایل متوالی نمایه شده ممکن است بهترین عملکرد را داشته باشد‪ .‬اگر دسترسی به فایل‬
‫اصوالً تصادفی باشد‪ ،‬یک فایل نمایه شده یا فایل هش شده ممکن است مناسب ترین باشد‪.‬‬

‫هر ساختار فایلی که انتخاب شود‪ ،‬یک سرویس دایرکتوری نیز مورد نیاز است‪ .‬این اجازه می دهد تا فایل ها به صورت سلسله‬
‫مراتبی سازماندهی شوند‪ .‬این سازمان برای کاربر در پیگیری پرونده ها مفید است و برای سیستم مدیریت فایل در ارائه کنترل‬
‫دسترسی و سایر خدمات به کاربران مفید است‪.‬‬

‫رکوردهای فایل‪ ،‬حتی زمانی که اندازه ثابتی دارند‪ ،‬معموالً با اندازه یک بلوک دیسک فیزیکی مطابقت ندارند‪ .‬بر این اساس‪ ،‬نوعی‬
‫استراتژی مسدودسازی مورد نیاز است‪ .‬یک مبادله بین پیچیدگی‪ ،‬عملکرد و استفاده از فضا‪ ،‬استراتژی مسدود کردن مورد‬
‫استفاده را تعیین می کند‪.‬‬

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

‫‪ 12.13‬خواندن توصیه می شود‬

‫‪VENU09‬یک رویکرد طراحی شی گرا برای پیاده سازی ساختار فایل ارائه می دهد‪COME79 .‬بحث کاملی از درختان ‪B‬‬
‫ارائه می دهد‪CORM09 .‬و ‪KNUT98‬نیز شامل درمان های خوبی هستند‪.‬‬

‫سیستم فایل لینوکس به تفصیل در ‪LOVE10‬و ‪BOVE06‬بررسی شده است‪ .‬یک نمای کلی خوب ‪RUBI97‬است‪.‬‬

‫‪694‬‬
‫سیستم عامل های داخلی و اصول طراحی‪695.........................................................................................................................‬‬

‫‪ 12.14‬اصطالحات کلیدی‪ ،‬سؤاالت و مشکالت را مرور کنید‬

‫کلمات کلیدی‬

‫جدول بیت‬ ‫فایل‬ ‫فایل متوالی ایندکس‬


‫روش‬ ‫تخصیص فایل‬ ‫شده‪inode‬‬
‫دسترسی‬ ‫زمینه کلیدی‬
‫فهرست فایل جدول‬
‫مسدود‬ ‫تخصیص فایل‬ ‫منطقی مسیر‬
‫کردن‬ ‫ورودی‪/‬خروجی شمع‬
‫سیستم مدیریت فایل‬
‫فایل زنجیره‬ ‫فیزیکی‬
‫نام فایل فایل هش شده‬
‫ای تخصیص‬ ‫ورودی‪/‬خروجی‬
‫فایل نمایه شده‬
‫فایل پیوسته‬ ‫ضبط فایل متوالی‬
‫تخصیص فایل نمایه شده‬
‫درایور‬ ‫دایرکتوری کار‬
‫دستگاه‬
‫پایگاه داده‬
‫تخصیص‬
‫زمینه جدول‬
‫تخصیص دیسک‬

‫‪695‬‬
‫سیستم عامل های داخلی و اصول طراحی‪696.........................................................................................................................‬‬

‫بررسی سواالت‬

‫‪ .12.1‬تفاوت زمینه و رکورد چیست؟‬

‫‪ .12.2‬تفاوت بین فایل و پایگاه داده چیست؟‬

‫‪ .12.3‬سیستم مدیریت فایل چیست؟‬

‫‪ .12.4‬چه معیارهایی در انتخاب سازمان پرونده مهم است؟‬

‫‪ .12.5‬پنج سازمان فایل را فهرست کرده و به طور خالصه تعریف کنید‪.‬‬

‫‪ .12.6‬چرا میانگین زمان جستجو برای یافتن رکورد در یک فایل برای یک فایل متوالی نمایه شده کمتر از یک فایل متوالی‬
‫است؟‬

‫‪ .12.7‬عملیات معمولی که ممکن است روی دایرکتوری انجام شود چیست؟‬

‫‪ .12.8‬رابطه بین نام مسیر و فهرست کاری چیست؟‬

‫‪ .12.9‬حقوق دسترسی معمولی که ممکن است برای یک فایل خاص به یک کاربر خاص اعطا یا رد شود چیست؟‬

‫‪ .12.10‬سه روش مسدودسازی را فهرست کرده و به طور خالصه تعریف کنید‪.‬‬

‫‪ .12.11‬سه روش تخصیص فایل را فهرست کرده و به طور خالصه تعریف کنید‪.‬‬

‫چالش ها و مسائل‬

‫‪ .12.1‬تعریف کردن‪:‬‬

‫اندازه بلوک ‪B‬‬

‫اندازه رکورد ‪R‬‬

‫اندازه ‪ P‬نشانگر بلوک‬

‫فاکتور مسدودکننده ;‪F‬تعداد مورد انتظار رکورد در یک بلوک‬

‫یک فرمول برای ‪ 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‬بایت‪.‬‬

‫‪ .12.8‬مزایای استفاده از دایرکتوری ها چیست؟‬

‫‪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.........................................................................................................................‬‬

‫قسمت ‪ 6‬سیستم های جاسازی شده‬

‫فصل ‪13‬‬

‫سیستم های عامل تعبیه شده‬

‫‪ 13.1‬سیستم های جاسازی شده‬

‫‪ 13.2‬ویژگی های سیستم عامل های جاسازی شده تطبیق یک سیستم عامل تجاری موجود سیستم عامل تعبیه شده با هدف‬

‫‪ 13.3‬لینوکس جاسازی شده ‪ /‬گردآوری اندازه هسته ‪ /‬سیستم های فایل لینوکس جاسازی شده مزایای لینوکس جاسازی شده‬
‫اندروید‬

‫‪TinyOS 13.4‬‬

‫اهداف شبکه های حسگر بی سیم ‪TinyOS‬‬

‫قطعه بندی های ‪ TinyOS‬پیکربندی نمونه برنامه زمانبندی ‪ TinyOS‬رابط منبع ‪TinyOS‬‬

‫‪ 13.5‬مطالعه توصیه شده‬

‫‪ 13.6‬اصطالحات کلیدی‪ ،‬بررسی سواالت و مشکالت‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬مفهوم سیستم تعبیه شده را توضیح دهید‪.‬‬

‫‪ -‬ویژگی های سیستم عامل های تعبیه شده را درک کنید‪.‬‬

‫‪ -‬تفاوت بین لینوکس و لینوکس جاسازی شده را توضیح دهید‪.‬‬

‫‪ -‬معماری و ویژگی های کلیدی ‪ TinyOS‬را شرح دهید‪.‬‬

‫‪699‬‬
‫سیستم عامل های داخلی و اصول طراحی‪700.........................................................................................................................‬‬

‫در این فصل به بررسی یکی از مهم ترین و پرکاربردترین دسته سیستم عامل ها می پردازیم‪ :‬سیستم عامل های تعبیه شده‪.‬‬
‫محیط سیستم تعبیه شده الزامات منحصر به فرد و سختی را برای سیستم عامل ایجاد می کند و استراتژی های طراحی کامالً‬
‫متفاوت از آنچه در سیستم عامل های معمولی وجود دارد را می طلبد‪.‬‬

‫ما با مروری بر مفهوم سیستم های تعبیه شده شروع می کنیم و سپس به بررسی اصول سیستم عامل های تعبیه شده می‬
‫پردازیم‪ .‬در نهایت‪ ،‬این فصل دو رویکرد بسیار متفاوت برای طراحی سیستمعامل جاسازی شده را بررسی میکند‪ :‬لینوکس‬
‫جاسازی شده و ‪TinyOS.‬پیوست ‪ Q‬در مورد ‪ ،eCos‬یکی دیگر از سیستم عامل های جاسازی شده مهم بحث می کند‪.‬‬

‫‪ 13.1‬سیستم های تعبیه شده‬

‫اصطالح سیستم جاسازی شده به استفاده از لوازم الکترونیکی و نرم افزار در یک محصول اشاره دارد‪ ،‬برخالف رایانه های همه‬
‫منظوره‪ ،‬مانند لپ تاپ یا سیستم رومیزی‪ .‬تعریف زیر یک تعریف کلی خوب است‪1 :‬‬

‫سیستم جاسازی شده‪ :‬ترکیبی از سختافزار و نرمافزار رایانه و احتماالً قطعات مکانیکی یا دیگر قطعات دیگر که برای انجام یک‬
‫عملکرد اختصاصی طراحی شدهاند‪ .‬در بسیاری از موارد‪ ،‬سیستم های تعبیه شده بخشی از یک سیستم یا محصول بزرگتر‬
‫هستند‪ ،‬مانند سیستم ترمز ضد قفل در خودرو‪.‬‬

‫اغلب‪ ،‬سیستم های تعبیه شده به شدت با محیط خود جفت می شوند‪ .‬این میتواند باعث ایجاد محدودیتهای بالدرنگی شود که‬
‫ناشی از نیاز به تعامل با محیط است‪ .‬محدودیتها‪ ،‬مانند سرعت مورد نیاز حرکت‪ ،‬دقت مورد نیاز اندازهگیری‪ ،‬و مدت زمان مورد‬
‫نیاز‪ ،‬زمانبندی عملیات نرمافزار را دیکته میکنند‪ .‬اگر چندین فعالیت باید به طور همزمان مدیریت شوند‪ ،‬این محدودیت های‬
‫زمان حقیقی پیچیده تری را تحمیل می کند‪.‬‬

‫شکل ‪ ،13.1‬بر اساس ‪ ،KOOP96‬به طور کلی یک سازمان سیستم تعبیه شده را نشان می دهد‪ .‬عالوه بر پردازنده و حافظه‪،‬‬
‫تعدادی عنصر وجود دارد که با کامپیوترهای رومیزی یا لپ تاپ معمولی متفاوت است‪:‬‬

‫‪ -‬ممکن است واسط های مختلفی وجود داشته باشد که سیستم را قادر می سازد تا اندازه گیری‪ ،‬دستکاری و در غیر این صورت‬
‫با محیط خارجی تعامل داشته باشد‪.‬‬

‫‪700‬‬
‫سیستم عامل های داخلی و اصول طراحی‪701.........................................................................................................................‬‬

‫شکل ‪ 13.1‬سازماندهی احتمالی یک سیستم جاسازی شده‬

‫رابط انسان ممکن است به سادگی یک چراغ چشمک زن یا به پیچیدگی دید روباتیک بالدرنگ باشد‪.‬‬

‫‪ -‬پورت تشخیصی ممکن است برای عیب یابی سیستمی که در حال کنترل است استفاده شود ‪ -‬نه فقط برای عیب یابی رایانه‬
‫جاسازی شده‪.‬‬

‫‪ -‬ممکن است برای افزایش عملکرد یا ایمنی از سختافزارهای غیردیجیتال قابل برنامهریزی ‪ ،FPGA‬برنامههای کاربردی خاص‬
‫‪ASIC‬یا حتی غیردیجیتال استفاده شود‪.‬‬

‫‪ -‬نرم افزار اغلب عملکرد ثابتی دارد و مختص برنامه است‪.‬‬

‫‪ 13.2‬ویژگی های سیستم های عامل تعبیه شده‬

‫یک سیستم تعبیه شده ساده‪ ،‬با عملکرد ساده‪ ،‬ممکن است توسط یک برنامه با هدف خاص یا مجموعه ای از برنامه ها بدون نرم‬
‫افزار دیگر کنترل شود‪ .‬به طور معمول‪ ،‬سیستمهای تعبیهشده پیچیدهتر شامل یک سیستمعامل هستند‪ .‬اگرچه اصوالً استفاده از‬
‫یک سیستم عامل همه منظوره مانند لینوکس برای یک سیستم تعبیه شده امکان پذیر است‪ ،‬محدودیت فضای حافظه‪ ،‬مصرف‬
‫انرژی و نیازهای بالدرنگ معموالً استفاده از یک سیستم عامل با هدف خاص طراحی شده برای سیستم جاسازی شده را دیکته‬
‫می کند‪.‬‬

‫محیط سیستم‬

‫در زیر برخی از ویژگی های منحصر به فرد و الزامات طراحی برای سیستم عامل های تعبیه شده آورده شده است‪:‬‬

‫‪ -‬عملیات بالدرنگ‪ :‬در بسیاری از سیستم های تعبیه شده‪ ،‬صحت یک محاسبات تا حدی به زمان تحویل آن بستگی دارد‪ .‬اغلب‪،‬‬
‫محدودیتهای بالدرنگ توسط ورودی‪/‬خروجی خارجی و الزامات ثبات کنترل دیکته میشوند‪.‬‬
‫‪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‬میکرو ثانیه است‬

‫‪ -‬فواصل زمانی که وقفه ها غیرفعال می شوند را به حداقل می رساند‬

‫‪ -‬پارتیشن هایی با اندازه ثابت یا متغیر برای مدیریت حافظه و همچنین امکان قفل کردن کد و داده ها در حافظه را فراهم می‬
‫کند‪.‬‬

‫‪ -‬فایلهای متوالی خاصی را ارائه میکند که میتوانند دادهها را با سرعت باال جمعآوری کنند تا با محدودیتهای زمانبندی‬
‫مقابله کند‪ ،‬هسته‬

‫‪ -‬زمان اجرای محدود را برای اکثر موارد اولیه فراهم می کند‬

‫‪ -‬ساعت بیدرنگ را حفظ می کند‬

‫‪ -‬هشدارهای ویژه و وقفه های زمانی را فراهم می کند‬

‫‪ -‬از رشته های نوبت دهی بالدرنگ مانند اولین مهلت اولیه و موارد اولیه برای پارازیت پیام در جلوی صف پشتیبانی می کند‪.‬‬

‫‪ -‬مقدماتی را برای به تأخیر انداختن پردازش در مدت زمان ثابت و تعلیق‪/‬از سرگیری اجرا فراهم می کند‪.‬‬

‫ویژگی هایی که به تازگی ذکر شد در سیستم عامل های تعبیه شده با نیازهای بالدرنگ رایج هستند‪ .‬با این حال‪ ،‬برای‬
‫سیستمهای تعبیهشده پیچیده‪ ،‬این نیاز ممکن است بر عملیات قابل پیشبینی بیش از عملیات سریع تأکید کند‪ ،‬که نیاز به‬
‫تصمیمگیریهای مختلف طراحی‪ ،‬بهویژه در حوزه زمانبندی وظایف دارد‪.‬‬

‫‪ 13.3‬لینوکس تعبیه شده‬

‫اصطالح لینوکس جاسازی شده به سادگی به معنای نسخه ای از لینوکس است که در یک سیستم جاسازی شده اجرا می شود‪.‬‬
‫در این بخش‪ ،‬برخی از تفاوتهای کلیدی بین لینوکس تعبیهشده و نسخهای از لینوکس که روی رایانه رومیزی یا لپتاپ اجرا‬
‫میشود را برجسته میکنیم‪.‬‬

‫‪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‬به‬
‫این معنی است که شبکه باید بتواند خود را در عرض چند ثانیه پیکربندی مجدد کند‪.‬‬

‫شکل ‪ 13.2‬توپولوژی شبکه حسگر بی سیم معمولی‬

‫‪708‬‬
‫سیستم عامل های داخلی و اصول طراحی‪709.........................................................................................................................‬‬

‫اهداف ‪TinyOS‬‬

‫با در نظر گرفتن برنامه کاربردی حسگر کوچک و توزیع شده‪ ،‬گروهی از محققان از ‪ UC Berkeley HILL00‬اهداف زیر را‬
‫برای ‪ TinyOS‬تعیین کردند‪:‬‬

‫‪ -‬اجازه همزمانی باال‪ :‬در یک برنامه کاربردی شبکه حسگر بی سیم معمولی‪ ،‬دستگاه ها همزمان هستند‪ .‬چندین جریان مختلف‬
‫داده باید به طور همزمان در حال حرکت نگه داشته شوند‪ .‬در حالی که داده های حسگر در یک جریان ثابت وارد می شوند‪،‬‬
‫نتایج پردازش شده باید در یک جریان ثابت منتقل شوند‪ .‬عالوه بر این‪ ،‬کنترل های خارجی از سنسورهای راه دور یا ایستگاه‬
‫های پایه باید مدیریت شوند‪.‬‬

‫‪ -‬با منابع محدود کار کنید‪ :‬پلتفرم هدف ‪ TinyOS‬دارای حافظه و منابع محاسباتی محدودی خواهد بود و با باتری یا انرژی‬
‫خورشیدی کار میکند‪ .‬یک پلتفرم واحد ممکن است تنها کیلوبایت حافظه برنامه و صدها بایت ‪ RAM‬ارائه دهد‪ .‬نرم افزار باید‬
‫از منابع پردازشگر و حافظه موجود و در عین حال امکان برقراری ارتباط کم مصرف استفاده بهینه کند‪.‬‬

‫‪ -‬سازگاری با تکامل سخت افزار‪ :‬بیشتر سخت افزارها در حال تکامل هستند‪ .‬برنامه ها و اکثر سرویس های سیستم باید در نسل‬
‫های سخت افزاری قابل حمل باشند‪ .‬بنابراین‪ ،‬اگر عملکرد یکسان باشد‪ ،‬باید بتوان سخت افزار را با تغییر نرم افزاری کم یا بدون‬
‫تغییر ارتقا داد‪.‬‬

‫‪ -‬از طیف گسترده ای از برنامه ها پشتیبانی می کند‪ :‬برنامه ها طیف وسیعی از الزامات را از نظر طول عمر‪ ،‬ارتباطات‪ ،‬حس‬
‫کردن و غیره نشان می دهند‪ .‬یک سیستمعامل تعبیهشده مدوالر و همهمنظوره مورد نظر است تا یک رویکرد استاندارد منجر به‬
‫صرفهجویی در مقیاس در توسعه برنامهها و نرمافزارهای پشتیبانی شود‪.‬‬

‫‪ -‬از مجموعه متنوعی از پلتفرم ها پشتیبانی کنید‪ :‬مانند نکته قبل‪ ،‬یک سیستم عامل تعبیه شده با هدف عمومی مطلوب است‪.‬‬

‫‪ -‬قوی باشید‪ :‬پس از استقرار‪ ،‬یک شبکه حسگر باید برای ماه ها یا سال ها بدون مراقبت کار کند‪ .‬در حالت ایده آل‪ ،‬باید افزونگی‬
‫هم در یک سیستم واحد و هم در سراسر شبکه حسگرها وجود داشته باشد‪ .‬با این حال‪ ،‬هر دو نوع افزونگی به منابع اضافی نیاز‬
‫دارند‪ .‬یکی از ویژگیهای نرمافزاری که میتواند استحکام را بهبود بخشد‪ ،‬استفاده از مؤلفههای نرمافزار استاندارد شده و بسیار‬
‫ماژوالر است‪.‬‬

‫شایان ذکر است که در مورد نیاز همزمانی توضیح داده شود‪ .‬در یک کاربرد معمولی‪ ،‬ده ها‪ ،‬صدها یا حتی هزاران حسگر وجود‬
‫خواهد داشت که با هم شبکه شده اند‪ .‬معموالً به دلیل مشکالت تأخیر‪ ،‬بافر کمی انجام می شود‪ .‬به عنوان مثال‪ ،‬اگر هر ‪ 5‬دقیقه‬
‫یکبار نمونه برداری می کنید و می خواهید چهار نمونه را قبل از ارسال بافر کنید‪ ،‬میانگین تأخیر ‪ 10‬دقیقه است‪ .‬بنابراین‪،‬‬
‫اطالعات معموالً در یک جریان پیوسته گرفته‪ ،‬پردازش و به شبکه منتقل میشوند‪ .‬بعالوه‪ ،‬اگر نمونه گیری حسگر مقدار قابل‬
‫‪709‬‬
‫سیستم عامل های داخلی و اصول طراحی‪710.........................................................................................................................‬‬

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

‫اجزای سیستم عامل ‪TinyOS‬‬

‫یک سیستم نرمافزاری تعبیهشده که با استفاده از ‪ TinyOS‬ساخته میشود شامل مجموعهای از ماژولهای کوچک به نام‬
‫مؤلفهها است که هر کدام یک کار ساده یا مجموعهای از وظایف را انجام میدهند و با یکدیگر و با سختافزار به روشهای‬
‫محدود و به خوبی تعریف شدهاند‪ .‬تنها ماژول نرم افزاری دیگر زمانبندی است که بعداً مورد بحث قرار گرفت‪ .‬در واقع‪ ،‬چون‬
‫هسته ای وجود ندارد‪ ،‬سیستم عامل واقعی وجود ندارد‪ .‬اما می توانیم دیدگاه زیر را داشته باشیم‪.‬‬

‫منطقه کاربردی مورد عالقه شبکه حسگر بی سیم ‪WSN‬است‪ .‬برای برآوردن نیازهای نرم افزاری سخت این برنامه‪ ،‬یک‬
‫معماری نرم افزاری ساده و سفت و سخت‪ ،‬متشکل از اجزاء دیکته شده است‪ .‬جامعه توسعه ‪ TinyOS‬تعدادی مولفه منبع باز را‬
‫پیاده سازی کرده است که عملکردهای اساسی مورد نیاز برای برنامه ‪ WSN‬را فراهم می کند‪ .‬نمونه هایی از چنین اجزای‬
‫استاندارد شده عبارتند از‪ :‬شبکه تک هاپ‪ ،‬مسیریابی موقت‪ ،‬مدیریت توان‪ ،‬تایمر‪ ،‬و کنترل ذخیره سازی غیرفرار‪ .‬برای‬
‫پیکربندیها و برنامههای خاص‪ ،‬کاربران قطعه بندی های با هدف ویژه دیگری را میسازند و همه مؤلفههای مورد نیاز برای‬
‫برنامه کاربر را پیوند و بارگذاری میکنند‪ .‬پس ‪ TinyOS‬از مجموعه ای از اجزای استاندارد تشکیل شده است‪.‬‬

‫برخی اما نه همه این مؤلفهها‪ ،‬همراه با مؤلفههای نوشتهشده توسط کاربر خاص برنامه‪ ،‬برای هر پیادهسازی مشخصی استفاده‬
‫میشوند‪ .‬سیستم عامل برای آن پیاده سازی به سادگی مجموعه ای از مؤلفه های استاندارد شده از مجموعه ‪ TinyOS‬است‪.‬‬
‫تمام اجزای یک پیکربندی ‪ TinyOS‬ساختار یکسانی دارند که نمونهای از آن در شکل ‪ a13.3‬نشان داده شده است‪ .‬کادر‬
‫سایهدار در نمودار مؤلفهای را نشان میدهد که به عنوان یک شی در نظر گرفته میشود که فقط با رابطهای تعریفشده قابل‬
‫دسترسی است که با کادرهای سفید نشان داده شده است‪ .‬یک جزء ممکن است سخت افزار یا نرم افزار باشد‪ .‬مؤلفههای نرمافزار‬
‫در ‪ nesC‬پیادهسازی میشوند‪ ،‬که توسعهای از ‪ C‬با دو ویژگی متمایز است‪ :‬یک مدل برنامهنویسی که در آن مؤلفهها از طریق‬
‫رابطها تعامل دارند‪ ،‬و یک مدل همزمانی مبتنی بر رویداد با کار اجرا تا تکمیل و کنترل کننده های وقفه‪ ،‬در ادامه توضیح داده‬
‫شد‪.‬‬

‫معماری از آرایش الیه ای از اجزا تشکیل شده است‪ .‬هر جزء می تواند تنها به دو جزء دیگر پیوند دهد‪ ،‬یکی زیر آن در سلسله‬
‫مراتب و دیگری باالی آن‪ .‬یک جزء دستورات را به جزء سطح پایین خود صادر می کند و سیگنال های رویداد را از آن دریافت‬
‫‪710‬‬
‫سیستم عامل های داخلی و اصول طراحی‪711.........................................................................................................................‬‬

‫می کند‪ .‬به طور مشابه‪ ،‬مؤلفه دستورات را از مؤلفه سطح باالی خود می پذیرد و سیگنال های رویداد را برای آن صادر می کند‪.‬‬
‫در پایین سلسله مراتب‪ ،‬اجزای سخت افزاری و در باالی سلسله مراتب‪ ،‬اجزای برنامه قرار دارند که ممکن است بخشی از‬
‫مجموعه استاندارد ‪ TinyOS‬نباشند‪ ،‬اما باید با ساختار مؤلفه ‪ TinyOS‬مطابقت داشته باشند‪.‬‬

‫شکل ‪ 13.3‬مثالی از قطعه بندی و پیکربندی‬

‫یک جزء نرم افزاری یک یا چند کار را پیاده سازی می کند‪ .‬هر وظیفه در یک جزء شبیه به یک رشته در یک سیستم عامل‬
‫معمولی است‪ ،‬با محدودیتهای خاصی‪ .‬در یک مؤلفه‪ ،‬وظایف اتمی هستند‪ :‬هنگامی که یک کار شروع شد‪ ،‬تا تکمیل انجام می‬
‫شود‪ .‬نمی توان آن را با کار دیگری در همان مؤلفه پیشی گرفت‪ ،‬و هیچ برش زمانی وجود ندارد‪ .‬با این حال‪ ،‬یک کار می تواند‬
‫توسط یک رویداد پیشی گرفته شود‪ .‬یک کار نمی تواند انتظار را مسدود یا چرخش کند‪ .‬این محدودیت ها زمان بندی و مدیریت‬
‫وظایف را در یک جزء بسیار ساده می کند‪ .‬تنها یک پشته وجود دارد که به وظیفه فعلی اختصاص داده شده است‪ .‬وظایف می‬
‫توانند محاسبات را انجام دهند‪ ،‬اجزای سطح پایین تر فرمان ها را فراخوانی کنند و رویدادهای سطح باالتر را سیگنال دهند و‬
‫کارهای دیگر را برنامه ریزی کنند‪.‬‬

‫دستورات درخواست های غیر مسدود کننده هستند‪ .‬یعنی وظیفه ای که دستوری را صادر می کند‪ ،‬منتظر پاسخ از مؤلفه سطح‬
‫پایین تر را مسدود نمی کند یا نمی چرخد‪ .‬یک فرمان معموالً درخواستی است برای مؤلفه سطح پایین برای انجام برخی‬
‫خدمات‪ ،‬مانند شروع خواندن سنسور‪ .‬تأثیر بر مؤلفهای که فرمان را دریافت میکند‪ ،‬مختص فرمان داده شده و وظیفه مورد نیاز‬
‫برای برآورده کردن فرمان است‪ .‬به طور کلی‪ ،‬هنگامی که یک فرمان دریافت می شود‪ ،‬یک کار برای اجرای بعدی برنامه ریزی‬
‫می شود‪ ،‬زیرا یک فرمان نمی تواند از کار در حال اجرا جلوگیری کند‪ .‬دستور بالفاصله به مؤلفه فراخوان باز می گردد‪ .‬در زمان‬
‫بعدی‪ ،‬یک رویداد سیگنال تکمیل را به مؤلفه فراخوان می دهد‪ .‬بنابراین‪ ،‬یک فرمان باعث پیشپرداخت در مؤلفه فراخوانی‬

‫‪711‬‬
‫سیستم عامل های داخلی و اصول طراحی‪712.........................................................................................................................‬‬

‫نمیشود و باعث مسدود شدن مؤلفه فراخوان نمیشود‪ .‬رویدادها در ‪ TinyOS‬ممکن است مستقیم یا غیرمستقیم با رویدادهای‬
‫سخت افزاری مرتبط باشند‪.‬‬

‫اجزای نرمافزاری پایینترین سطح مستقیماً با وقفههای سختافزاری که ممکن است وقفههای خارجی‪ ،‬رویدادهای تایمر یا‬
‫رویدادهای متقابل باشند‪ ،‬رابط دارند‪ .‬یک کنترل کننده رویداد در یک مؤلفه سطح پایین ممکن است خود وقفه را مدیریت کند‬
‫یا ممکن است پیام های رویداد را از طریق سلسله مراتب مؤلفه منتشر کند‪ .‬یک فرمان می تواند وظیفه ای را ارسال کند که در‬
‫آینده نشان دهنده یک رویداد باشد‪ .‬در این مورد‪ ،‬هیچ ارتباطی با یک رویداد سخت افزاری وجود ندارد‪.‬‬

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

‫مؤلفه نشان داده شده در شکل ‪ ،TimerM ،a13.3‬بخشی از سرویس تایمر ‪ TinyOS‬است‪ .‬این قطعه بندی رابط‬
‫‪ StdControl‬و ‪ Timer‬را فراهم می کند و از رابط ساعت استفاده می کند‪ .‬ارائهدهندگان دستورات را پیادهسازی میکنند‬
‫یعنی منطق در این جزء‪ .‬کاربران رویدادها را پیاده سازی می کنند به عنوان مثال‪ ،‬خارج از مؤلفه‪ .‬بسیاری از اجزای ‪TinyOS‬‬
‫از رابط ‪ StdControl‬برای مقداردهی اولیه‪ ،‬راه اندازی یا توقف استفاده می کنند‪ TimerM .‬منطقی را ارائه می دهد که از‬
‫ساعت سخت افزاری به انتزاع تایمر ‪ TinyOS‬نگاشت می شود‪ .‬انتزاع تایمر را می توان برای شمارش معکوس یک بازه زمانی‬
‫معین استفاده کرد‪ .‬شکل ‪ a13.3‬همچنین مشخصات رسمی رابط های ‪ TimerM‬را نشان می دهد‪.‬‬

‫رابط های مرتبط با ‪ 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‬جزء سطح‬
‫کاربرد است که عملیات پیکربندی را هماهنگ می کند‪.‬‬

‫شکل ‪ 13.4‬نمونه هایی از برنامه ‪TinyOS‬‬

‫شکل ‪ b13.4‬بخشی از پیکربندی برنامه ‪ Surge‬را نشان می دهد‪ .‬در زیر گزیده ای ساده از مشخصات ‪ SurgeM‬است‪.‬‬

‫‪714‬‬
‫سیستم عامل های داخلی و اصول طراحی‪715.........................................................................................................................‬‬

‫این مثال قدرت رویکرد ‪ TinyOS‬را نشان می دهد‪ .‬این نرم افزار به صورت مجموعه ای به هم پیوسته از ماژول های ساده‬
‫سازماندهی شده است که هر کدام یک یا چند وظیفه را تعریف می کنند‪ .‬قطعه بندی ها رابط ساده و استاندارد شده ای با سایر‬
‫اجزا دارند‪ ،‬خواه سخت افزار یا نرم افزار باشند‪ .‬بنابراین‪ ،‬قطعات را می توان به راحتی جایگزین کرد‪ .‬اجزاء می توانند سخت افزار‬
‫یا نرم افزار باشند‪ ،‬با تغییر مرزی که برای برنامه نویس برنامه قابل مشاهده نیست‪.‬‬

‫رابط منبع ‪TinyOS‬‬

‫‪ TinyOS‬مجموعه ای ساده اما قدرتمند از قراردادها را برای مقابله با منابع فراهم می کند‪ .‬سه انتزاع برای منابع در ‪TinyOS‬‬
‫استفاده می شود‪:‬‬

‫‪ -‬اختصاصی‪ :‬منبعی که یک زیرسیستم همیشه نیاز به دسترسی انحصاری به آن دارد‪ .‬در این دسته از منابع‪ ،‬هیچ خط مشی‬
‫اشتراکی مورد نیاز نیست‪ ،‬زیرا تنها یک جزء به استفاده از منبع نیاز دارد‪ .‬نمونه هایی از انتزاعات اختصاصی شامل وقفه ها و‬
‫شمارنده ها هستند‪.‬‬

‫‪ -‬مجازی سازی شده‪ :‬هر کالینت یک منبع مجازی شده با آن به گونه ای تعامل می کند که گویی یک منبع اختصاصی است‪ ،‬با‬
‫تمام نمونه های مجازی شده در باالی یک منبع زیربنایی منفرد‪ .‬انتزاع مجازی سازی شده ممکن است زمانی استفاده شود که‬
‫منبع اصلی نیازی به محافظت متقابل نداشته باشد‪ .‬به عنوان مثال یک ساعت یا تایمر است‪.‬‬

‫‪715‬‬
‫سیستم عامل های داخلی و اصول طراحی‪716.........................................................................................................................‬‬

‫‪Shared: -‬انتزاع منبع مشترک دسترسی به یک منبع اختصاصی را از طریق یک جزء داور فراهم می کند‪ .‬داور‪ ،‬محرومیت‬
‫متقابل را اعمال می کند‪ ،‬و تنها به یک کاربر به نام کالینت در هر زمان اجازه می دهد تا به یک منبع دسترسی داشته باشد و‬
‫مشتری را قادر می سازد منبع را قفل کند‪.‬‬

‫در ادامه این بخش فرعی‪ ،‬ما به طور مختصر امکانات منابع مشترک ‪ TinyOS‬را تعریف می کنیم‪ .‬داور تعیین می کند که کدام‬
‫مشتری در چه زمانی به منبع دسترسی داشته باشد‪ .‬در حالی که مشتری یک منبع را در اختیار دارد‪ ،‬کنترل کامل و بدون‬
‫محدودیت دارد‪ .‬داوران فرض میکنند که مشتریان همکاری میکنند‪ ،‬فقط در صورت نیاز منبع را به دست میآورند و بیش از‬
‫زمان الزم آن را نگه میدارند‪ .‬مشتریان به صراحت منابع را آزاد می کنند‪ :‬هیچ راهی برای داوری وجود ندارد که به زور آن را‬
‫پس بگیرد‪.‬‬

‫شکل ‪ 13.5‬پیکربندی منابع مشترک‬

‫شکل ‪ 13.5‬یک نمای ساده از پیکربندی منبع مشترک مورد استفاده برای دسترسی به یک منبع زیربنایی را نشان می دهد‪ .‬با‬
‫هر منبعی که باید به اشتراک گذاشته شود‪ ،‬یک جزء داور مرتبط است‪ .‬داور سیاستی را اعمال می کند که به مشتری امکان می‬
‫دهد منبع را قفل کند‪ ،‬از آن استفاده کند و سپس منبع را آزاد کند‪ .‬پیکربندی منبع مشترک‪ ،‬اینترفیس های زیر را برای یک‬
‫کالینت فراهم می کند‪:‬‬

‫‪Resource: -‬مشتری در این رابط درخواستی را صادر می کند و درخواست دسترسی به منبع را می دهد‪ .‬اگر منبع در حال‬
‫حاضر قفل شده باشد‪ ،‬داور درخواست را در یک صف قرار می دهد‪ .‬هنگامی که یک کالینت با منبع به پایان می رسد‪ ،‬دستور‬
‫انتشار را در این رابط صادر می کند‪.‬‬

‫‪ -‬منبع درخواستی‪ :‬این شبیه به رابط منبع است‪ .‬در این حالت‪ ،‬مشتری می تواند یک منبع را تا زمانی که به مشتری اطالع داده‬
‫شود که شخص دیگری به منبع نیاز دارد‪ ،‬نگه دارد‪.‬‬

‫‪716‬‬
‫سیستم عامل های داخلی و اصول طراحی‪717.........................................................................................................................‬‬

‫‪ Resource configure: -‬این رابط به یک منبع اجازه می دهد تا درست قبل از دسترسی مشتری به آن به طور خودکار‬
‫پیکربندی شود‪ .‬مؤلفههایی که رابط پیکربندی منابع را ارائه میکنند‪ ،‬از رابطهای ارائهشده توسط یک منبع اختصاصی زیربنایی‬
‫برای پیکربندی آن در یکی از حالتهای عملکرد مورد نظر خود استفاده میکنند‪.‬‬

‫‪ -‬واسط های خاص منبع‪ :‬هنگامی که مشتری به یک منبع دسترسی پیدا می کند‪ ،‬از رابط های خاص منبع برای تبادل داده و‬
‫کنترل اطالعات با منبع استفاده می کند‪.‬‬

‫عالوه بر منبع اختصاصی‪ ،‬پیکربندی منبع مشترک از دو جزء تشکیل شده است‪ Arbiter .‬درخواستهای دسترسی و پیکربندی‬
‫از یک کالینت را میپذیرد و قفل را بر روی منبع اصلی اعمال میکند‪ .‬جزء منبع مشترک تبادل داده بین مشتری و منبع اصلی‬
‫را واسطه می کند‪ .‬اطالعات داور ارسال شده از داور به جزء منبع مشترک‪ ،‬دسترسی مشتری به منبع اصلی را کنترل می کند‪.‬‬

‫‪ 13.5‬خواندن توصیه می شود‬

‫‪KOOP96‬یک بحث سیستماتیک در مورد الزامات سیستم های تعبیه شده ارائه می دهد‪STAN96 .‬یک نمای کلی مفید از‬
‫سیستم های زمان حقیقی و تعبیه شده است‪.‬‬

‫‪HILL00‬یک نمای کلی و منطق طراحی برای ‪ TinyOS‬ارائه می دهد‪GAY05 .‬بحث جالبی در مورد استراتژی های‬
‫طراحی نرم افزار با استفاده از ‪ TinyOS‬است‪BUON01 .‬مثال خوبی از استفاده از ‪ TinyOS‬در ساخت شبکه یا حسگرهای‬
‫بی سیم ارائه می دهد‪ .‬دو مرجع عالی برای نسخه فعلی ‪ TinyOS GAY03‬و ‪LEVI05‬هستند‪.‬‬

‫‪717‬‬
‫سیستم عامل های داخلی و اصول طراحی‪718.........................................................................................................................‬‬

‫‪ 13.6‬اصطالحات کلیدی‪ ،‬سؤاالت و مشکالت را مرور کنید‬

‫کلمات کلیدی‬

‫بررسی سواالت‬

‫‪ .13.1‬سیستم تعبیه شده چیست؟‬

‫‪ .13.2‬برخی از الزامات یا محدودیت های معمول در سیستم های تعبیه شده چیست؟‬

‫‪ .13.3‬سیستم عامل تعبیه شده چیست؟‬

‫‪ .13.4‬برخی از ویژگی های کلیدی یک سیستم عامل تعبیه شده چیست؟‬

‫‪ .13.5‬مزایا و معایب نسبی سیستمعامل تعبیهشده مبتنی بر سیستمعامل تجاری موجود در مقایسه با سیستمعامل تعبیهشده‬
‫هدفمند را توضیح دهید‪.‬‬

‫‪ .13.6‬برنامه هدف ‪ TinyOS‬چیست؟‬

‫‪ .13.7‬اهداف طراحی ‪ TinyOS‬چیست؟‬

‫‪ .13.8‬قطعه بندی ‪ TinyOS‬چیست؟‬

‫‪ .13.9‬سیستم عامل ‪ TinyOS‬از چه نرم افزاری تشکیل شده است؟‬

‫‪ .13.10‬نظم برنامه ریزی پیش فرض برای ‪ TinyOS‬چیست؟‬

‫چالش ها و مسائل‬

‫‪ .13.1‬زمانبندی ‪ TinyOS‬وظایف را به ترتیب ‪ FIFO‬انجام می دهد‪ .‬بسیاری از زمانبندیهای دیگر برای ‪ TinyOS‬پیشنهاد‬
‫شدهاند‪ ،‬اما هیچکدام مورد توجه قرار نگرفتند‪ .‬چه ویژگی های حوزه حسگر ممکن است باعث عدم نیاز به زمان بندی پیچیده تر‬
‫شود؟‬

‫‪718‬‬
‫سیستم عامل های داخلی و اصول طراحی‪719.........................................................................................................................‬‬

‫‪ .13.2‬آ‪ .‬رابط ‪ TinyOS Resource‬به مؤلفهای که قبالً درخواستی در صف منبع دارد اجازه نمیدهد درخواست دوم را ارسال‬
‫کند‪ .‬دلیلی پیشنهاد کنید‬

‫ب با این حال‪ ،‬رابط ‪ TinyOS Resource‬به مؤلفهای که قفل منبع را نگه میدارد اجازه میدهد تا قفل را دوباره درخواست‬
‫کند‪ .‬این درخواست برای کمک هزینه بعدی در نوبت قرار می گیرد‪ .‬دلیلی برای این سیاست پیشنهاد کنید‪ .‬نکته‪ :‬چه چیزی‬
‫ممکن است باعث ایجاد تأخیر بین یک جزء که یک قفل را آزاد می کند و درخواست کننده بعدی آن را اعطا کند‪ ،‬وجود داشته‬
‫باشد؟ توجه‪ :‬مشکالت باقیمانده مربوط به ‪ eCos‬است که در ضمیمه ‪ Q‬بحث شده است‪.‬‬

‫‪ .13.3‬با توجه به رابط درایور دستگاه به هسته ‪eCos‬جدول ‪ ،Q.1‬توصیه میشود که درایورهای دستگاه باید از گونههای‬
‫_ ‪intsave‬برای ادعا و انتشار ‪spinlock‬ها به جای گونههای غیر_ ‪intsave‬استفاده کنند‪ .‬توضیح دهد که چرا‪.‬‬

‫‪ .13.4‬همچنین در جدول ‪ ،Q.1‬توصیه میشود که ‪ cyg_drv_spinlock_spin‬باید به مقدار کم و در شرایطی که‬


‫بنبست‪/‬قفل زنده رخ نمیدهد استفاده شود‪ .‬توضیح دهد که چرا‪.‬‬

‫‪ .13.5‬در جدول ‪ ،Q.1‬محدودیت های استفاده از _‪cyg_drv_spinlock‬از بین می رود؟ توضیح‪.‬‬

‫‪ .13.6‬در جدول ‪ ،Q.1‬چه محدودیت هایی باید در استفاده از _‪cyg_drv_mutex‬تخریب قرار داد؟‬

‫‪ .13.7‬چرا زمانبندی بیت مپ ‪ eCos‬از برش زمان پشتیبانی نمیکند؟‬

‫‪ .13.8‬اجرای ‪ mutexes‬در هسته ‪ eCos‬از قفل های بازگشتی پشتیبانی نمی کند‪ .‬اگر نخی یک ‪ mutex‬را قفل کرده باشد و‬
‫سپس دوباره سعی کند ‪ mutex‬را قفل کند‪ ،‬معموالً در نتیجه برخی از فراخوانی بازگشتی در یک گراف فراخوانی پیچیده‪ ،‬در‬
‫این صورت یا شکست ادعا گزارش میشود یا رشته به وقفه میرسد‪ .‬دلیلی برای این سیاست پیشنهاد کنید‪.‬‬

‫‪ .13.9‬شکل ‪ 13.6‬فهرستی از کدهایی است که برای استفاده در هسته ‪ eCos‬در نظر گرفته شده است‪.‬‬

‫آ‪ .‬عملکرد کد را توضیح دهید‪ .‬فرض کنید ‪ thread B‬ابتدا اجرا را آغاز می کند و رشته ‪ A‬پس از وقوع رویدادی شروع به اجرا‬
‫می کند‪.‬‬

‫ب اگر اجرای کد بازگشایی و انتظار ‪ mutex‬در تماس با ‪ ،cyg_cond_wait‬در خط ‪ ،30‬اتمی نباشد‪ ،‬چه اتفاقی میافتد؟‬

‫ج چرا حلقه ‪ while‬در خط ‪ 26‬مورد نیاز است؟‬

‫‪ .13.10‬بحث در مورد اسپینالکهای ‪ eCos‬شامل مثالی بود که نشان میداد چرا اسپینالکها نباید در یک سیستم‬
‫تکپردازندهای استفاده شوند‪ ،‬اگر دو رشته با اولویتهای مختلف بتوانند برای یک اسپینالک با هم رقابت کنند‪ .‬توضیح دهید که‬
‫چرا مشکل همچنان وجود دارد حتی اگر فقط رشتههایی با اولویت یکسان بتوانند اسپینالک یکسانی را ادعا کنند‪.‬‬
‫‪719‬‬
‫سیستم عامل های داخلی و اصول طراحی‪720.........................................................................................................................‬‬

‫شکل ‪ 13.6‬متغیر شرط کد مثال‬

‫‪720‬‬
‫سیستم عامل های داخلی و اصول طراحی‪721.........................................................................................................................‬‬

‫فصل ‪14‬‬

‫ماشین های مجازی‬

‫‪ 14.1‬رویکردهای مجازی سازی‬

‫‪ 14.2‬مسائل مربوط به پردازنده‬

‫‪ 14.3‬مدیریت حافظه‬

‫‪ 14.4‬مدیریت ‪I/O‬‬

‫‪VMware ESXi 14.5‬‬

‫‪ 14.6‬مایکروسافت ‪ Hyper-V‬و انواع ‪Xen‬‬

‫‪ 14.7‬جاوا ‪VM‬‬

‫‪ 14.8‬معماری ماشین مجازی ‪Linux Vserver‬‬

‫زمانبندی فرآیند معماری‬

‫‪ 14.9‬ماشین مجازی اندروید ‪ /‬فرمت فایل ‪Dex Zygote‬‬

‫‪ 14.10‬خالصه‬

‫‪ 14.11‬مطالعه توصیه شده‬

‫‪ 14.12‬اصطالحات کلیدی‪ ،‬سؤاالت مروری و مشکالت‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬رویکردهای مختلف مجازی سازی را شرح دهید‪.‬‬

‫‪721‬‬
‫سیستم عامل های داخلی و اصول طراحی‪722.........................................................................................................................‬‬

‫‪ -‬مسائل مربوط به پردازنده در پیاده سازی ماشین مجازی را درک کنید‪.‬‬

‫‪ -‬مسائل مربوط به مدیریت حافظه مربوط به پیاده سازی یک ماشین مجازی را درک کنید‪.‬‬

‫‪ -‬مسائل مربوط به مدیریت ‪ I/O‬را که در پیاده سازی یک ماشین مجازی دخیل هستند‪ ،‬درک کنید‪.‬‬

‫‪ Xen ،Hyper-V ،VMware ESXi -‬و ‪ Java VM‬را مقایسه و مقایسه کنید‪.‬‬

‫‪ -‬عملکرد ماشین مجازی لینوکس را توضیح دهید‪.‬‬

‫‪ -‬یک نمای کلی از عملکرد ‪ Zygote‬ارائه دهید‪.‬‬

‫به طور سنتی‪ ،‬برنامه ها مستقیماً بر روی یک سیستم عامل ‪OS‬در رایانه شخصی ‪PC‬یا روی یک سرور اجرا می شوند‪ .‬هر‬
‫رایانه شخصی یا سرور تنها یک سیستم عامل را در یک زمان اجرا می کند‪ .‬بنابراین‪ ،‬فروشنده برنامه مجبور بود قسمتهایی از‬
‫برنامههای کاربردی خود را برای هر سیستمعامل‪/‬پلتفرمی که روی آن اجرا و پشتیبانی میکرد‪ ،‬بازنویسی کند‪ .‬برای پشتیبانی از‬
‫سیستم عامل های متعدد‪ ،‬فروشندگان برنامه نیاز به ایجاد‪ ،‬مدیریت و پشتیبانی از چندین زیرساخت سخت افزاری و سیستم‬
‫عامل دارند‪ ،‬فرآیندی پرهزینه و نیازمند منابع‪ .‬یکی از استراتژی های موثر برای مقابله با این مشکل به عنوان مجازی سازی‬
‫شناخته می شود‪ .‬فناوری مجازی سازی یک رایانه شخصی یا سرور را قادر می سازد تا چندین سیستم عامل یا چندین جلسه از‬
‫یک سیستم عامل را به طور همزمان اجرا کند‪ .‬یک ماشین با نرمافزار مجازیسازی میتواند برنامههای متعددی را میزبانی کند‪،‬‬
‫از جمله برنامههایی که روی سیستمعاملهای مختلف اجرا میشوند‪ ،‬بر روی یک پلتفرم واحد‪ .‬در اصل‪ ،‬سیستم عامل میزبان‬
‫میتواند تعدادی ماشین مجازی ‪VM‬را پشتیبانی کند‪ ،‬که هر کدام ویژگیهای یک سیستمعامل خاص و در برخی نسخههای‬
‫مجازیسازی‪ ،‬ویژگیهای یک پلتفرم سختافزاری خاص را دارند‪.‬‬

‫مجازی سازی فناوری جدیدی نیست‪ .‬در طول دهه ‪ ،1970‬سیستمهای اصلی آیبیام اولین قابلیتهایی را ارائه کردند که به‬
‫برنامهها اجازه میداد تنها از بخشی از منابع یک سیستم استفاده کنند‪ .‬اشکال مختلفی از این توانایی از آن زمان بر روی پلتفرم‬
‫ها در دسترس بوده است‪ .‬مجازی سازی در اوایل دهه ‪ 2000‬زمانی که این فناوری به صورت تجاری در سرورهای ‪ x86‬در‬
‫دسترس بود‪ ،‬وارد محاسبات اصلی شد‪ .‬سازمان ها به دلیل استراتژی «یک برنامه‪ ،‬یک سرور» مبتنی بر ویندوز مایکروسافت از‬
‫انبوه سرورها رنج می بردند‪ .‬قانون مور پیشرفتهای سختافزاری سریعی را انجام داد که از توانایی نرمافزار پیشی گرفت‪ ،‬و بیشتر‬
‫این سرورها بهشدت مورد استفاده قرار نگرفتند و اغلب کمتر از ‪ 5‬درصد از منابع موجود در هر سرور را مصرف میکردند‪ .‬عالوه‬
‫بر این‪ ،‬این فراوانی سرورها مراکز داده را پر کرده و مقادیر زیادی نیرو و خنک کننده مصرف می کند و توانایی شرکت برای‬
‫مدیریت و حفظ زیرساخت های خود را تحت فشار قرار می دهد‪ .‬مجازی سازی به کاهش این استرس کمک کرد‪.‬‬

‫‪722‬‬
‫سیستم عامل های داخلی و اصول طراحی‪723.........................................................................................................................‬‬

‫راه حلی که مجازیسازی را فعال میکند‪ ،‬یک مانیتور ماشین مجازی ‪VMM‬یا معموالً امروزه به عنوان ‪ Hypervisor‬شناخته‬
‫میشود‪ .‬این نرمافزار بین سختافزار و ماشینهای مجازی قرار میگیرد و بهعنوان یک کارگزار منبع عمل میکند شکل ‪ .14.1‬به‬
‫عبارت ساده‪ ،‬به چندین ماشین مجازی اجازه می دهد تا به طور ایمن در یک هاست سرور فیزیکی واحد وجود داشته باشند و‬
‫منابع آن میزبان را به اشتراک بگذارند‪ .‬تعداد مهمانهایی که میتوانند روی یک میزبان وجود داشته باشند با نسبت تجمیع‬
‫اندازهگیری میشوند‪ .‬به عنوان مثال‪ ،‬گفته می شود میزبانی که از ‪ 6‬ماشین مجازی پشتیبانی می کند دارای نسبت تجمیع ‪ 6‬به‬
‫‪ 1‬است که به صورت ‪ 6:1‬نیز نوشته شده است شکل ‪.14.2‬‬

‫برنامه ها‬ ‫برنامه ها‬ ‫برنامه ها‬


‫و فرآیندها‬ ‫و فرآیندها‬ ‫و فرآیندها‬

‫ماشین‬ ‫ماشین‬ ‫ماشین‬


‫مجازی ‪1‬‬ ‫مجازی ‪2‬‬ ‫مجازی‪n‬‬

‫مدیر ماشین مجازی‬

‫سخت افزار مشترک‬

‫شکل ‪ 14.1‬مفهوم ماشین مجازی‬

‫‪Hypervisor‬های اولیه در فضای تجاری می توانند نسبت های یکپارچه سازی را بین ‪ 4:1‬و ‪ 12:1‬ارائه دهند‪ ،‬اما حتی در‬
‫سطح پایین‪ ،‬اگر یک شرکت تمام سرورهای خود را مجازی کند‪ ،‬می تواند ‪ 75‬درصد از سرورها را از مراکز داده خود حذف کند‪. .‬‬
‫مهمتر از آن‪ ،‬آنها می توانند هزینه را نیز حذف کنند‪ ،‬که اغلب به میلیون ها یا ده ها میلیون دالر در سال می رسد‪.‬‬

‫با سرورهای فیزیکی کمتر‪ ،‬برق کمتری مورد نیاز بود‪ ،‬سرمایش کمتری نیاز بود و کابلهای کمتر‪ ،‬سوئیچهای شبکه کمتر‪،‬‬
‫فضای کف کمتر و غیره مورد نیاز بود‪ .‬یکپارچه سازی سرور تبدیل به یک راه بسیار ارزشمند برای حل یک مشکل پرهزینه و‬
‫بیهوده شد و همچنان می باشد‪ .‬از سال ‪ ،2009‬سرورهای مجازی بیشتر از سرورهای فیزیکی در جهان مستقر شدند و استقرار‬
‫سرور مجازی همچنان به سرعت در حال افزایش است‪.‬‬

‫رویکرد ‪ VM‬در حال تبدیل شدن به روشی متداول برای مشاغل و افراد برای مقابله با برنامههای قدیمی و بهینهسازی استفاده‬
‫از سختافزار با به حداکثر رساندن تعداد انواع برنامههایی است که یک رایانه میتواند از عهده آن برآید‪ .‬پیشنهادات تجاری ‪VM‬‬
‫توسط شرکت هایی مانند ‪ VMware‬و ‪ Microsoft‬به طور گسترده مورد استفاده قرار می گیرند و میلیون ها نسخه از آن‬
‫فروخته شده است‪ .‬یکی از جنبه های کلیدی مجازی سازی سرور این است که عالوه بر قابلیت اجرای چندین ماشین مجازی‬
‫روی یک ماشین‪ ،‬ماشین های مجازی را می توان به عنوان منابع شبکه مشاهده کرد‪ .‬مجازیسازی سرور‪ ،‬منابع سرور‪ ،‬از جمله‬
‫تعداد و هویت سرورهای فیزیکی‪ ،‬پردازندهها و سیستم عامل های را از کاربران سرور پنهان میکند‪ .‬این امکان پارتیشن بندی‬
‫‪723‬‬
‫سیستم عامل های داخلی و اصول طراحی‪724.........................................................................................................................‬‬

‫یک هاست را به چندین سرور مستقل فراهم می کند و منابع سخت افزاری را حفظ می کند‪ .‬همچنین انتقال سریع سرور از یک‬
‫دستگاه به دستگاه دیگر برای متعادل کردن بار یا برای تغییر پویا در صورت خرابی دستگاه امکان پذیر است‪ .‬مجازی سازی سرور‬
‫به یک عنصر اصلی در برخورد با برنامه های کاربردی "داده های بزرگ" و در پیاده سازی زیرساخت های محاسبات ابری تبدیل‬
‫شده است‪.‬‬

‫این فناوریهای مجازی عالوه بر استفاده در محیطهای سرور‪ ،‬در محیطهای دسکتاپ نیز برای اجرای چندین سیستم عامل‪،‬‬
‫معموالً ویندوز و لینوکس‪ ،‬استفاده میشوند‪.‬‬

‫میزبان مجازی‬
‫سازی‬

‫سرورهای‬ ‫نسبت تجمیع ‪6:1‬‬


‫فیزیکی‬

‫شکل ‪ 14.2‬ادغام ماشین مجازی‬

‫‪ 14.1‬رویکردهای مجازی سازی‬

‫مجازی سازی همه چیز در مورد انتزاع است‪ .‬درست مانند یک سیستم عامل که دستورات ورودی‪/‬خروجی دیسک را از طریق‬
‫استفاده از الیهها و رابطهای برنامه از کاربر انتزاع میکند‪ ،‬مجازیسازی نیز سختافزار فیزیکی را از ماشینهای مجازی که‬
‫پشتیبانی میکند انتزاع میکند‪ .‬مانیتور ماشین مجازی یا ‪ 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.‬‬

‫برنامه های کاربردی‬ ‫برنامه های کاربردی‬

‫ماشین مجازی ‪1‬‬ ‫ماشین مجازی ‪2‬‬

‫مانیتور ماشین مجازی‬


‫سخت افزار مشترک‬

‫الف) ‪ VMM‬نوع ‪1‬‬

‫برنامه های کاربردی‬ ‫برنامه های کاربردی‬

‫ماشین مجازی ‪1‬‬ ‫ماشین مجازی ‪2‬‬

‫مانیتور ماشین مجازی‬


‫سیستم عامل میزبان‬
‫سخت افزار مشترک‬

‫ب) ‪ VMM‬نوع ‪2‬‬

‫شکل ‪ 14.3‬مانیتورهای ماشین مجازی نوع ‪ 1‬و نوع ‪2‬‬

‫تفاوت های مهمی بین ‪ 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.........................................................................................................................‬‬

‫باشد‪ ،‬و عملیاتهایی که پشتیبانی میکنند بسیار سریعتر هستند‪ ،‬زیرا به طور کامل روی آن انجام میشوند‪ .‬پردازنده این‬
‫پشتیبانی به کمک سختافزار بر خالف مجازیسازی به یک سیستم عامل اصالحشده نیاز ندارد‪.‬‬

‫‪ 14.2‬مسائل مربوط به پردازنده‬

‫در یک محیط مجازی‪ ،‬دو استراتژی اصلی برای تامین منابع پردازنده وجود دارد‪ .‬اولین مورد شبیه سازی یک تراشه به عنوان نرم‬
‫افزار و فراهم کردن دسترسی به آن منبع است‪ .‬نمونه هایی از این روش ‪ 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‬اشتراک گذاری صفحه‬

‫‪ 14.4‬مدیریت ‪I/O‬‬

‫عملکرد برنامه اغلب مستقیماً به پهنای باندی که به سرور اختصاص داده شده است مرتبط است‪ .‬چه دسترسی به فضای‬
‫ذخیرهسازی محدود شده باشد و چه ترافیک شبکه را محدود کرده باشد‪ ،‬هر دو مورد باعث میشوند که یک برنامه کاربردی‬
‫ضعیف تلقی شود‪ .‬به این ترتیب‪ ،‬در طول مجازیسازی حجمهای کاری‪ ،‬مجازیسازی ‪ I/O‬یک مورد حیاتی است‪ .‬معماری نحوه‬
‫مدیریت ‪ I/O‬در یک محیط مجازی ساده است شکل ‪ .14.5‬در ماشین مجازی‪ ،‬سیستم عامل مانند یک سرور فیزیکی با درایور‬
‫دستگاه تماس می گیرد‪ .‬سپس درایور دستگاه به دستگاه متصل می شود‪ .‬اگرچه در مورد سرور مجازی‪ ،‬دستگاه یک دستگاه‬
‫شبیه سازی شده است که توسط ‪ Hypervisor‬مرحله بندی و مدیریت می شود‪.‬‬

‫این دستگاه های شبیه سازی شده معموالً یک دستگاه واقعی معمولی هستند‪ ،‬مانند کارت رابط شبکه ‪ Intel e1000‬یا‬
‫کنترلرهای ساده عمومی ‪ SGVA‬یا ‪IDE.‬این دستگاه مجازی به پشته ورودی‪/‬خروجی ‪ Hypervisor‬متصل میشود که با‬
‫درایور دستگاه که به یک دستگاه فیزیکی در سرور میزبان نگاشت شده ارتباط برقرار میکند و آدرسهای ورودی‪/‬خروجی مهمان‬
‫را به آدرسهای ورودی‪/‬خروجی میزبان فیزیکی ترجمه میکند‪.‬‬

‫‪ Hypervisor‬درخواستهای بین درایور دستگاه ماشین مجازی را از طریق پشته ورودی‪/‬خروجی‪ ،‬خارج از دستگاه فیزیکی و‬
‫مجدداً کنترل و نظارت میکند و تماسهای ورودی‪/‬خروجی را به دستگاههای صحیح در ماشینهای مجازی صحیح مسیریابی‬
‫میکند‪ .‬برخی از تفاوت های معماری بین فروشندگان وجود دارد‪ ،‬اما مدل اصلی مشابه است‪.‬‬

‫شکل ‪ I/O 14.5‬در یک محیط مجازی‬

‫‪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‬مجازی فراهم می کند‪.‬‬

‫‪VMWARE ESXI 14.5‬‬

‫‪ ESXi‬یک ‪ Hypervisor‬تجاری در دسترس از ‪ VMware‬است که به کاربران یک ‪ Hypervisor‬نوع ‪ 1‬یا ‪baremetal‬‬


‫برای میزبانی ماشین های مجازی روی سرورهای خود ارائه می دهد‪ VMware .‬راه حل های اولیه مبتنی بر ‪ x86‬خود را در‬
‫اواخر دهه ‪ 1990‬توسعه داد و اولین شرکتی بود که یک محصول تجاری را به بازار عرضه کرد‪ .‬این زمانبندی اولین ورود به بازار‪،‬‬
‫همراه با نوآوریهای مستمر‪ VMware ،‬را محکم در باالی سهم بازار حفظ کرده است‪ ،‬اما مهمتر از آن از نظر ویژگیها و بلوغ‬
‫راهحل‪ ،‬پیشتاز است‪ .‬رشد بازار مجازی سازی و تغییرات در راه حل های ‪ VMware‬در جاهای دیگر تشریح شده است‪ ،‬اما‬
‫تفاوت های اساسی خاصی در معماری ‪ ESXi‬نسبت به سایر راه حل های موجود وجود دارد‪.‬‬

‫هسته مجازی سازی ‪VMkernel‬هسته ‪ Hypervisor‬است و تمام توابع مجازی سازی را انجام می دهد‪ .‬در نسخه های قبلی‬
‫‪ESX‬شکل ‪ Hypervisor ،14.6‬در کنار یک نصب لینوکس که به عنوان یک الیه مدیریت عمل می کرد‪ ،‬مستقر شد‪ .‬برخی‬
‫از عملکردهای مدیریتی مانند ورود به سیستم‪ ،‬خدمات نام‪ ،‬و اغلب عوامل شخص ثالث برای پشتیبان گیری یا نظارت بر سخت‬
‫افزار در این کنسول سرویس نصب شده بودند‪ .‬همچنین مکانی عالی برای مدیران برای اجرای اسکریپت ها و برنامه های دیگر‬
‫ایجاد کرد‪ .‬کنسول سرویس دو مشکل داشت‪ .‬اولین مورد این بود که به طور قابل توجهی بزرگتر از ‪ Hypervisor‬بود‪ .‬یک‬
‫نصب معمولی به حدود ‪ 32‬مگابایت برای ‪ Hypervisor‬و حدود ‪ 900‬مگابایت برای کنسول سرویس نیاز دارد‪ .‬مورد دوم این‬
‫بود که کنسول سرویس مبتنی بر لینوکس یک رابط و سیستم کامالً قابل درک بود و در برابر حمالت بدافزار یا افراد آسیب پذیر‬
‫بود‪ VMware .‬سپس ‪ ESX‬را مجدداً طراحی کرد تا بدون کنسول سرویس نصب و مدیریت شود‪.‬‬

‫این معماری جدید که ‪ ESXi‬نامیده میشود‪i» « ،‬برای یکپارچهسازی‪ ،‬همه خدمات مدیریتی را به عنوان بخشی از‬
‫‪ VMkernel‬دارد شکل ‪ .14.7‬این یک بسته کوچکتر و بسیار امن تر از قبل فراهم می کند‪ .‬نسخه های فعلی در همسایگی‬
‫حدود ‪ 100‬مگابایت هستند‪ .‬این اندازه کوچک به فروشندگان سرور اجازه میدهد تا سختافزاری را با ‪ ESXi‬که از قبل بر روی‬
‫حافظه فلش در سرور موجود است‪ ،‬تحویل دهند‪ .‬مدیریت پیکربندی‪ ،‬نظارت و اسکریپت نویسی اکنون از طریق ابزارهای رابط‬
‫خط فرمان در دسترس هستند‪ .‬عوامل شخص ثالث نیز پس از تایید و امضای دیجیتال در ‪ VMkernel‬اجرا می شوند‪ .‬به عنوان‬
‫مثال‪ ،‬یک فروشنده سرور که نظارت سختافزاری را ارائه میکند‪ ،‬اجازه میدهد تا عاملی را در ‪ VMkernel‬بگنجاند که‬

‫‪735‬‬
‫سیستم عامل های داخلی و اصول طراحی‪736.........................................................................................................................‬‬

‫میتواند بهطور یکپارچه معیارهای سختافزار مانند دمای داخلی یا وضعیت اجزا را به ابزارهای مدیریت ‪ VMware‬یا سایر‬
‫ابزارهای مدیریتی بازگرداند‪.‬‬

‫عوامل نظارت‬ ‫عوامل مدیریت‬ ‫عوامل‬


‫بر سخت افزار‬ ‫‪VMware‬‬ ‫مدیریت سیستم‬

‫دستورات ‪CLI‬‬
‫برای پیکربندی و‬
‫پشتیبانی‬
‫و ‪ VM‬پشتیبانی‬
‫مدیریت منابع‬

‫شکل ‪ESX 14.6‬‬

‫دستورات ‪ CLI‬برای‬
‫پیکربندی و پشتیبانی‬

‫مدیریت سیستم های‬ ‫نظارت بر سخت‬


‫بدون عامل‬ ‫افزار بدون عامل‬

‫عوامل زیرساخت‬
‫چارچوب مدیریت‬ ‫مدل اطالعات رایج‬ ‫پشتیبانی ‪ VM‬و‬
‫‪VMware‬‬ ‫)‪(NTP ،Syslog‬‬ ‫مدیریت منابع‬

‫کنسول های پشتیبانی محلی‬

‫شکل ‪ESXi 14.7‬‬

‫ماشینهای مجازی از طریق خدمات زیرساختی در ‪ 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.........................................................................................................................‬‬

‫‪ 14.6‬انواع مایکروسافت ‪ HYPER-V‬و ‪XEN‬‬

‫در اوایل دهه ‪ ،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‬نیست‪،‬‬
‫اگرچه با هر نسخه‪ ،‬ویژگی های اضافی ظاهر می شود و ویژگی های موجود بهبود می یابد‪.‬‬

‫شکل ‪Xen 14.8‬‬

‫‪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‬مورد استفاده قرار نمی گیرد زیرا هنوز در بازار نسبتاً جدید است‪ .‬با گذشت زمان و ظاهر‬
‫شدن عملکردهای جدید‪ ،‬پذیرش احتماال افزایش خواهد یافت‪.‬‬

‫شکل ‪Hyper-V 14.9‬‬

‫‪JAVA VM 14.7‬‬

‫اگرچه ماشین مجازی جاوا ‪JVM‬اصطالح ماشین مجازی را به عنوان بخشی از نام خود دارد‪ ،‬پیاده سازی و کاربردهای آن با‬
‫مدل هایی که ما پوشش داده ایم متفاوت است‪Hypervisor .‬ها از یک یا چند ماشین مجازی روی یک هاست پشتیبانی می‬
‫کنند‪ .‬این ماشینهای مجازی حجمهای کاری مستقلی هستند که از یک سیستم عامل و برنامههای کاربردی پشتیبانی میکنند‬
‫و از منظر آنها به مجموعهای از دستگاههای سختافزاری دسترسی دارند که محاسبات‪ ،‬ذخیرهسازی و منابع ورودی‪/‬خروجی را‬
‫فراهم میکنند‪.‬‬

‫‪739‬‬
‫سیستم عامل های داخلی و اصول طراحی‪740.........................................................................................................................‬‬

‫هدف یک ماشین مجازی جاوا این است که یک فضای زمان اجرا برای مجموعه ای از کدهای جاوا برای اجرا بر روی هر سیستم‬
‫عاملی که روی هر پلتفرم سخت افزاری مرحله بندی شده است‪ ،‬بدون نیاز به ایجاد تغییرات کد برای تطبیق با سیستم عامل ها‬
‫یا سخت افزارهای مختلف‪ ،‬اجرا شود‪ .‬هدف هر دو مدل مستقل بودن از پلتفرم از طریق استفاده از درجه ای از انتزاع است‪.‬‬

‫‪ JVM‬به عنوان یک ماشین محاسباتی انتزاعی‪ ،‬متشکل از یک مجموعه دستورالعمل‪ ،‬یک رجیستر کامپیوتر شمارگر برنامه‪ ،‬یک‬
‫پشته برای نگهداری متغیرها و نتایج‪ ،‬یک پشته برای داده های زمان اجرا و جمع آوری زباله‪ ،‬و یک ناحیه روش برای کد و ثابت‬
‫ها توصیف می شود‪ JVM . .‬میتواند چندین رشته را پشتیبانی کند و هر رشته دارای مناطق ثبت و پشته مخصوص به خود‬
‫است‪ ،‬اگرچه مناطق ‪ heap‬و روش در بین تمام رشتهها به اشتراک گذاشته میشوند‪ .‬هنگامی که ‪ JVM‬نمونه سازی می شود‪،‬‬
‫محیط زمان اجرا شروع می شود‪ ،‬ساختارهای حافظه با متد کد و متغیرهای انتخاب شده تخصیص داده شده و پر می شوند و‬
‫برنامه شروع می شود‪ .‬کدی که در ‪ JVM‬اجرا می شود در زمان حقیقی از زبان جاوا به کد باینری مناسب تفسیر می شود‪ .‬اگر‬
‫آن کد معتبر باشد و استانداردهای مورد انتظار را رعایت کند‪ ،‬پردازش آن آغاز خواهد شد‪ .‬اگر نامعتبر باشد و فرآیند با شکست‬
‫مواجه شود‪ ،‬یک شرط خطا مطرح شده و به ‪ JVM‬و کاربر برگردانده می شود‪.‬‬

‫جاوا و ‪ JVM‬در زمینههای بسیار متنوعی از جمله برنامههای کاربردی وب‪ ،‬دستگاههای تلفن همراه و دستگاههای هوشمند از‬
‫دستگاههای تلویزیون گرفته تا دستگاههای بازی گرفته تا پخشکنندههای ‪ Blue-Ray‬و سایر مواردی که از کارتهای هوشمند‬
‫استفاده میکنند‪ ،‬استفاده میشوند‪ .‬وعده جاوا مبنی بر "یک بار بنویسید‪ ،‬هرجا اجرا کنید" یک مدل استقرار چابک و ساده را‬
‫ارائه می دهد که به برنامه ها اجازه می دهد مستقل از پلت فرم اجرا توسعه یابند‪.‬‬

‫‪ 14.8‬معماری ماشین مجازی ‪LINUX VSERVER‬‬

‫‪ 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.10‬معماری لینوکس ‪VServer‬‬

‫شکل ‪ 14.11‬مفهوم ‪ TBF‬را نشان می دهد‪ .‬برای هر ماشین مجازی‪ ،‬یک سطل با ظرفیت توکن های ‪ S‬تعریف شده است‪.‬‬
‫توکنها با نرخ ‪ R‬در هر بازه زمانی به طول ‪ T‬به سطل اضافه میشوند‪ .‬وقتی سطل پر است‪ ،‬نشانههای ورودی اضافی به سادگی‬
‫دور ریخته میشوند‪ .‬هنگامی که یک فرآیند در این ماشین مجازی در حال اجرا است‪ ،‬برای هر تیک ساعت تایمر یک توکن‬
‫مصرف می کند‪.‬‬

‫اگر سطل خالی شود‪ ،‬فرآیند در حالت نگهداری قرار میگیرد و تا زمانی که سطل تا حداقل مقدار آستانه ‪ M‬توکن پر نشود‪،‬‬
‫نمیتوان آن را دوباره شروع کرد‪ .‬در آن مرحله‪ ،‬روند دوباره برنامه ریزی می شود‪ .‬یک پیامد مهم رویکرد ‪ TBF‬این است که یک‬
‫ماشین مجازی ممکن است توکنها را در طول دورهای از سکون جمعآوری کند و بعداً در صورت لزوم از توکنها بهصورت پشت‬
‫سر هم استفاده کند‪.‬‬

‫‪742‬‬
‫سیستم عامل های داخلی و اصول طراحی‪743.........................................................................................................................‬‬

‫نرخ ورودی رمز = نشانه‬ ‫توکن ها می توانند تا اندازه‬


‫های ‪ R/T‬در ثانیه‬ ‫سطل جمع شوند‪ .‬اضافی‬
‫توکن ها دور ریخته شد‬

‫اندازه سطل =‬
‫توکن‪S‬‬
‫اشغال سطل فعلی‬
‫حداقل‬
‫آستانه =‬
‫توکن های‬
‫‪S‬‬

‫فرآیند اجرا ‪ 1‬تیک‬


‫توکن‪/‬تایمر مصرف می کند‬

‫شکل ‪ 14.11‬طرح سطل توکن لینوکس ‪VServer‬‬

‫تنظیم مقادیر ‪ 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‬توکن‪.‬‬

‫‪ 14.9‬دستگاه مجازی اندروید‬

‫به ماشین مجازی پلتفرم اندروید دالویک گفته می شود‪ Dalvik VM DVM .‬فایلها را با فرمت ‪Dalvik Executable‬‬
‫‪ .dex‬اجرا میکند‪ ،‬فرمتی که برای ذخیرهسازی کارآمد و اجرای نقشهبرداری با حافظه بهینه شده است‪ .‬ماشین مجازی می تواند‬
‫کالس های اجرا شده توسط یک اجرار زبان جاوا را اجرا کند که با استفاده از ابزار " "‪dx‬موجود به فرمت اصلی خود تبدیل شده‬
‫اند‪ VM .‬در باالی هسته لینوکس اجرا می شود‪ ،‬که برای عملکردهای زیربنایی مانند ‪ threading‬و مدیریت حافظه سطح‬
‫پایین به آن متکی است‪ .‬کتابخانه کالس هسته ‪ Dalvik‬برای ارائه یک پایگاه توسعه آشنا برای کسانی که برای برنامه نویسی با‬
‫‪ Java Standard Edition‬استفاده می شوند در نظر گرفته شده است‪ ،‬اما به طور خاص برای نیازهای یک دستگاه تلفن‬
‫همراه کوچک تنظیم شده است‪.‬‬

‫هر برنامه اندرویدی در فرآیند خاص خود اجرا می شود‪ ،‬با نمونه ای از ‪ Dalvik VM. Dalvik‬طوری نوشته شده است که‬
‫یک دستگاه بتواند چندین ‪ VM‬را به طور موثر اجرا کند‪.‬‬

‫فرمت فایل ‪Dex‬‬

‫‪ DVM‬برنامه ها و کدهای نوشته شده در جاوا را اجرا می کند‪ .‬یک اجرار استاندارد جاوا کد منبع نوشته شده به صورت فایل‬
‫متنی را به بایت کد تبدیل می کند‪ .‬سپس بایت کد در یک فایل ‪ dex.‬که ‪ Dalvik VM‬می تواند بخواند و استفاده کند‪ ،‬اجرا‬
‫می شود‪ .‬در اصل‪ ،‬فایلهای کالس به فایلهای ‪ dex.‬تبدیل میشوند مثل یک فایل ‪ jar‬اگر از جاوا ‪ VM‬استاندارد استفاده‬
‫میشود و سپس توسط ‪ DVM‬خوانده و اجرا میشوند‪ .‬داده های تکراری مورد استفاده در فایل های کالس فقط یک بار در‬
‫فایل ‪ dex.‬گنجانده می شود که باعث صرفه جویی در فضا و مصرف سربار کمتری می شود‪ .‬فایل های اجرایی را می توان با‬
‫نصب برنامه مجدداً تغییر داد تا همه چیز برای موبایل بهینه تر شود‪.‬‬

‫شکل ‪ 14.12‬طرح کلی یک فایل جاوا ‪ jar.‬را نشان می دهد که حاوی یک یا چند فایل کالس است‪ .‬فایلهای کالس در یک‬
‫فایل ‪ dex.‬جمعآوری میشوند که به عنوان یک نوع فایل بسته اندروید ‪apk.‬ذخیره میشود‪ .‬دادههای موجود در مخزنهای‬
‫ثابت ناهمگن همه فایلهای کالس در یک بلوک واحد جمعآوری میشوند که بر اساس نوع ثابت در فایل ‪ dex.‬سازماندهی‬

‫‪744‬‬
‫سیستم عامل های داخلی و اصول طراحی‪745.........................................................................................................................‬‬

‫میشوند‪ .‬با اجازه دادن به کالس ها برای به اشتراک گذاشتن استخرهای ثابت‪ ،‬تکرار مقادیر ثابت به حداقل ممکن می رسد‪ .‬به‬
‫طور مشابه‪ ،‬زمینه های کالس‪ ،‬زمینه ‪ ،‬روش و ویژگیها در فایلهای کالس در یک مکان در فایل ‪ dex.‬جمعآوری میشوند‪.‬‬

‫شکل ‪ 14.12‬فرمت های جاوا و دالویک‬

‫زیگوت‬

‫‪ 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‬این‬
‫است که یک فضای زمان اجرا برای مجموعه ای از کدهای جاوا برای اجرا بر روی هر سیستم عاملی که روی هر پلتفرم سخت‬
‫افزاری اجرا می شود‪ ،‬بدون نیاز به ایجاد تغییرات کد برای تطبیق با سیستم عامل ها یا سخت افزارهای مختلف‪ ،‬فراهم کند‪.‬‬

‫‪ 14.11‬خواندن توصیه می شود‬

‫‪BUZE73‬و ‪GOLD74‬حسابهای کالسیک ماشینهای مجازی هستند که ارزش خواندن دارند‪ROSE04 .‬انگیزه‬
‫رویکردهای مجازی سازی معاصر را مورد بحث قرار می دهد‪ROSE05 .‬یک بررسی مفید از مانیتورهای ماشین مجازی است‪.‬‬
‫‪WHIT05‬یک رویکرد برای مجازی سازی را مورد بحث قرار می دهد‪NAND05 .‬یک بررسی جالب از پیاده سازی های‬
‫مختلف مفهوم ماشین مجازی ارائه می دهد‪ .‬یکی دیگر از بررسی های ارزشمند ‪LI10‬است‪SMIT05 .‬شامل طبقه بندی‬
‫مفیدی از معماری ماشین مجازی است که تا حدودی با رویکرد این فصل متفاوت است‪PEAR13 .‬یک بررسی عالی از مجازی‬
‫سازی است‪ ،‬با تاکید بر مسائل امنیتی‪.‬‬

‫‪UHLI05‬پشتیبانی سخت افزاری را که اکنون در معماری ‪ x86‬ارائه شده است‪ ،‬توصیف می کند‪ ،‬در حالی که ‪ADAM06‬‬
‫برخی از مشکالت استفاده از تکنیک های مجازی سازی به کمک سخت افزار را در ‪ x86‬بررسی می کند‪.‬‬

‫‪SUGE01‬رویکرد ‪ VMware Workstation‬را برای مجازی سازی دستگاه های ‪ I/O‬توضیح می دهد‪OH12 .‬یک نمای‬
‫کلی از ‪ Dalvik‬و بحثی در مورد عملکرد آن ارائه می دهد‪.‬‬

‫‪746‬‬
‫سیستم عامل های داخلی و اصول طراحی‪747.........................................................................................................................‬‬

‫‪ 14.12‬اصطالحات کلیدی‪ ،‬سؤاالت و مشکالت را مرور کنید‬

‫شرایط کلیدی‬

‫‪Hypervisor‬‬ ‫حافظه بیش از حد‬ ‫مجازی سازی‬


‫نسبت تجمیع‬ ‫مانیتور ماشین مجازی‪ VM‬به اشتراک گذاری‬
‫‪Dalvi006B‬‬ ‫صفحه اشتراک‬
‫بالون کردن حافظه ماشین‬ ‫‪VMM‬‬
‫گذاری مجازی‬ ‫زیگوت‬
‫مجازی جاوا‪JVM.‬‬
‫سازی نوع ‪1‬‬
‫‪Hypervisor‬‬
‫نوع ‪2‬‬
‫‪Hypervisor‬‬

‫بررسی سواالت‬

‫‪ .14.1‬روش های مختلف مجازی سازی را به اختصار توضیح دهید‪.‬‬

‫‪ .14.2‬مفهوم بادکش را توضیح دهید‪.‬‬

‫‪ .14.3‬توضیح مختصری در مورد ‪ Java VM‬ارائه دهید‪.‬‬

‫‪747‬‬
‫سیستم عامل های داخلی و اصول طراحی‪748.........................................................................................................................‬‬

‫‪ .14.4‬عناصر کلیدی ماشین مجازی اندروید را توضیح دهید‪.‬‬

‫چالش ها و مسائل‬

‫‪ .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.1‬مخالن و نرم افزارهای مخرب دسترسی به سیستم تهدیدات اقدامات متقابل‬

‫‪ 15.2‬سرریز بافر‬

‫حمالت سرریز بافر اجرا‪-‬زمان دفاع دفاع در زمان اجرا‬

‫‪ 15.3‬کنترل دسترسی‬

‫سیاست های کنترل دسترسی کنترل دسترسی به سیستم فایل‬

‫‪ 15.4‬کنترل دسترسی یونیکس‬

‫کنترل دسترسی به فایل یونیکس سنتی لیست های کنترل دسترسی در یونیکس‬

‫‪ 15.5‬سخت شدن سیستم عامل‬

‫نصب سیستم عامل‪ :‬راه اندازی اولیه و وصله حذف سرویس ها‪ ،‬برنامه ها و پروتکل های غیر ضروری پیکربندی کاربران‪ ،‬گروه ها‬
‫و احراز هویت‬

‫پیکربندی کنترل های منابع نصب کنترل های امنیتی اضافی امنیت سیستم را آزمایش کنید‬

‫‪ 15.6‬نگهداری امنیتی‬

‫ورود به سیستم‬

‫پشتیبان گیری و آرشیو داده ها‬

‫‪ 15.7‬امنیت ویندوز‬

‫توکن دسترسی طرح کنترل دسترسی‬

‫توصیفگرهای امنیتی‬
‫‪749‬‬
‫سیستم عامل های داخلی و اصول طراحی‪750.........................................................................................................................‬‬

‫‪ 15.8‬خالصه‬

‫‪ 15.9‬خواندن و وب سایت های توصیه شده‬

‫‪ 15.10‬اصطالحات کلیدی‪ ،‬سؤاالت مروری و مشکالت‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬مسائل امنیتی کلیدی مربوط به سیستم عامل ها را ارزیابی کنید‪.‬‬

‫‪ -‬مسائل طراحی برای امنیت سیستم فایل را درک کنید‪.‬‬

‫‪ -‬بین انواع مختلف الگوهای رفتار متجاوزان تمایز قائل شوید و انواع تکنیک های نفوذ مورد استفاده برای نقض امنیت رایانه را‬
‫درک کنید‪.‬‬

‫‪ -‬مقایسه و مقایسه دو روش کنترل دسترسی‪.‬‬

‫‪ -‬نحوه دفاع در برابر حمالت سرریز بافر را بدانید‪.‬‬

‫‪ 15.1‬مخالن و نرم افزارهای مخرب‬

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

‫در یک سیستم معمولی‪ ،‬باالترین سطح امتیاز به عنوان دسترسی مدیر‪ ،‬سرپرست‪ ،‬یا دسترسی ریشه نامیده می شود‪ .‬دسترسی‬
‫ریشه دسترسی به تمام عملکردها و خدمات سیستم عامل را فراهم می کند‪ .‬با دسترسی ریشه‪ ،‬یک فرآیند کنترل کامل سیستم‬
‫را در اختیار دارد و می تواند برنامه ها و فایل ها را اضافه یا تغییر دهد‪ ،‬سایر فرآیندها را نظارت کند‪ ،‬ترافیک شبکه را ارسال و‬
‫دریافت کند و امتیازات را تغییر دهد‪.‬‬

‫یکی از مسائل امنیتی کلیدی در طراحی هر سیستمعامل‪ ،‬جلوگیری یا حداقل شناسایی تالشهای کاربر یا بخشی از نرمافزارهای‬
‫مخرب بدافزار برای به دست آوردن امتیازات غیرمجاز روی سیستم و بهویژه دسترسی ریشهای است‪ . .‬در این بخش‪ ،‬تهدیدها و‬

‫‪750‬‬
‫سیستم عامل های داخلی و اصول طراحی‪751.........................................................................................................................‬‬

‫اقدامات متقابل مرتبط با این موضوع امنیتی را به اختصار بیان می کنیم‪ .‬بخش های بعدی برخی از موضوعات مطرح شده در‬
‫این بخش را با جزئیات بیشتری بررسی می کند‪.‬‬

‫تهدیدات دسترسی به سیستم‬

‫تهدیدات دسترسی به سیستم به دو دسته کلی تقسیم می شوند‪ :‬مخالن و نرم افزارهای مخرب‪.‬‬

‫نفوذگران یکی از رایج ترین تهدیدات برای امنیت‪ ،‬نفوذگر دیگری ویروس ها است که اغلب به عنوان هکر یا کرکر از آن یاد می‬
‫شود‪ .‬در یک مطالعه اولیه مهم در مورد نفوذ‪ ،‬اندرسون ‪ANDE80‬سه دسته از نفوذگران را شناسایی می کند‪:‬‬

‫‪Masquerader: -‬فردی که مجاز به استفاده از رایانه نیست و به کنترل های دسترسی سیستم نفوذ می کند تا از حساب‬
‫کاربری قانونی سوء استفاده کند‪.‬‬

‫‪Misfeasor: -‬کاربر قانونی که به دادهها‪ ،‬برنامهها یا منابعی دسترسی پیدا میکند که چنین دسترسی برای آنها مجاز نیست‪ ،‬یا‬
‫مجاز به چنین دسترسی است اما از امتیازات خود سوء استفاده میکند‪.‬‬

‫‪ -‬کاربر مخفی‪ :‬فردی که کنترل نظارتی سیستم را به دست می گیرد و از این کنترل برای فرار از حسابرسی و کنترل های‬
‫دسترسی یا سرکوب مجموعه حسابرسی استفاده می کند‪.‬‬

‫خطاکار عموماً یک خودی است‪ .‬و کاربر مخفی می تواند یا یک خارجی یا یک خودی باشد‪ .‬حمالت مزاحم از خوش خیم تا‬
‫جدی متغیر است‪ .‬در انتهای خوش خیم مقیاس‪ ،‬افراد زیادی هستند که به سادگی می خواهند اینترنت را کاوش کنند و ببینند‬
‫چه چیزی در آنجا وجود دارد‪ .‬در پایان جدی افرادی هستند که سعی در خواندن داده های ممتاز‪ ،‬انجام تغییرات غیرمجاز در‬
‫داده ها‪ ،‬یا اختالل در سیستم دارند‪.‬‬

‫هدف نفوذگر دستیابی به یک سیستم یا افزایش دامنه امتیازات قابل دسترسی در یک سیستم است‪ .‬اکثر حمالت اولیه از‬
‫آسیبپذیریهای سیستم یا نرمافزار استفاده میکنند که به کاربر اجازه میدهد کدی را اجرا کند که درب پشتی را به سیستم‬
‫باز میکند‪ .‬مخالن می توانند با سوء استفاده از حمالتی مانند سرریز بافر در برنامه ای که با امتیازات خاصی اجرا می شود‪ ،‬به‬
‫یک سیستم دسترسی پیدا کنند‪ .‬ما حمالت سرریز بافر را در بخش ‪ 15.2‬معرفی می کنیم‪ .‬از طرف دیگر‪ ،‬متجاوز تالش می کند‬
‫تا اطالعاتی را به دست آورد که باید محافظت می شد‪ .‬در برخی موارد‪ ،‬این اطالعات به صورت رمز عبور کاربر است‪ .‬با آگاهی از‬
‫رمز عبور برخی دیگر از کاربران‪ ،‬یک مزاحم می تواند به سیستم وارد شود و از تمام امتیازات اعطا شده به کاربر قانونی استفاده‬
‫کند‪.‬‬

‫‪751‬‬
‫سیستم عامل های داخلی و اصول طراحی‪752.........................................................................................................................‬‬

‫نرم افزارهای مخرب شاید پیچیده ترین انواع تهدیدات برای سیستم های کامپیوتری توسط برنامه هایی ارائه شود که از آسیب‬
‫پذیری های سیستم های محاسباتی سوء استفاده می کنند‪ .‬از چنین تهدیدهایی به عنوان نرم افزار مخرب یا بدافزار یاد می شود‪.‬‬
‫در این زمینه‪ ،‬ما نگران تهدیدات برنامه های کاربردی و همچنین برنامه های کاربردی‪ ،‬مانند ویرایشگرها و اجرارها‪ ،‬و برنامه های‬
‫سطح هسته هستیم‪.‬‬

‫نرم افزارهای مخرب را می توان به دو دسته تقسیم کرد‪ :‬آنهایی که به برنامه میزبان نیاز دارند و آنهایی که مستقل هستند‪ .‬اولی‬
‫که به عنوان انگلی شناخته می شود‪ ،‬اساساً قطعاتی از برنامه ها هستند که نمی توانند مستقل از برخی برنامه های کاربردی‬
‫واقعی‪ ،‬ابزارها یا برنامه های سیستمی وجود داشته باشند‪ .‬ویروس ها‪ ،‬بمب های منطقی و درهای پشتی نمونه هایی هستند‪.‬‬
‫دومی برنامه های مستقلی هستند که می توانند توسط سیستم عامل برنامه ریزی و اجرا شوند‪ .‬کرمها و برنامههای ربات‬
‫نمونههایی هستند‪.‬‬

‫همچنین میتوانیم بین آن دسته از تهدیدات نرمافزاری که تکرار نمیشوند و آنهایی که تکرار میشوند‪ ،‬تفاوت قائل شویم‪ .‬اولی‬
‫برنامه ها یا قطعاتی از برنامه ها هستند که توسط یک ماشه فعال می شوند‪ .‬به عنوان مثال بمب های منطقی‪ ،‬درهای پشتی و‬
‫برنامه های ربات هستند‪ .‬دومی شامل یک قطعه برنامه یا یک برنامه مستقل است که هنگام اجرا‪ ،‬ممکن است یک یا چند نسخه‬
‫از خود تولید کند تا بعداً در همان سیستم یا سیستم دیگری فعال شود‪ .‬ویروس ها و کرم ها نمونه هایی هستند‪.‬‬

‫نرم افزارهای مخرب می توانند نسبتاً بی ضرر باشند یا ممکن است یک یا چند مورد از تعدادی از اقدامات مضر را انجام دهند‪ ،‬از‬
‫جمله از بین بردن فایل ها و داده ها در حافظه اصلی‪ ،‬دور زدن کنترل ها برای دستیابی به دسترسی ممتاز‪ ،‬و ارائه وسیله ای‬
‫برای نفوذگران برای دور زدن کنترل های دسترسی‪.‬‬

‫اقدامات متقابل‬

‫تشخیص نفوذ ‪ RFC 4949‬واژه نامه امنیت اینترنت تشخیص نفوذ را به شرح زیر تعریف می کند‪ :‬یک سرویس امنیتی که‬
‫رویدادهای سیستم را به منظور یافتن‪ ،‬و ارائه هشدارهای بالدرنگ یا نزدیک به زمان حقیقی‪ ،‬نظارت و تجزیه و تحلیل می کند‪،‬‬
‫تالش می کند به منابع سیستم در یک سیستم دسترسی پیدا کند‪ .‬روش غیر مجاز‬

‫سیستم های تشخیص نفوذ ‪IDS‬را می توان به صورت زیر طبقه بندی کرد‪:‬‬

‫‪ IDS ‬مبتنی بر میزبان‪ :‬ویژگیهای یک میزبان و رویدادهایی را که در آن میزبان رخ میدهد برای فعالیت مشکوک‬
‫نظارت میکند‪.‬‬
‫‪ IDS ‬مبتنی بر شبکه‪ :‬ترافیک شبکه را برای بخشها یا دستگاههای خاص شبکه نظارت میکند و پروتکلهای شبکه‪،‬‬
‫حملونقل و برنامه کاربردی را برای شناسایی فعالیتهای مشکوک تجزیه و تحلیل میکند‪.‬‬

‫‪752‬‬
‫سیستم عامل های داخلی و اصول طراحی‪753.........................................................................................................................‬‬

‫یک ‪ IDS‬شامل سه جزء منطقی است‪:‬‬

‫‪ -‬حسگرها‪ :‬حسگرها مسئول جمع آوری داده ها هستند‪ .‬ورودی یک حسگر ممکن است هر بخشی از یک سیستم باشد که می‬
‫تواند حاوی شواهدی از نفوذ باشد‪ .‬انواع ورودی به حسگر شامل بسته های شبکه‪ ،‬فایل های گزارش و ردیابی تماس های‬
‫سیستمی است‪ .‬حسگرها این اطالعات را جمع آوری و به تحلیلگر ارسال می کنند‪.‬‬

‫‪ -‬آناالیزرها‪ :‬آناالیزرها ورودی را از یک یا چند حسگر یا از آناالیزرهای دیگر دریافت می کنند‪ .‬آناالیزر مسئول تعیین اینکه آیا‬
‫نفوذ رخ داده است یا خیر‪ .‬خروجی این قطعه بندی نشانه رخ دادن نفوذ است‪ .‬خروجی ممکن است شامل شواهدی باشد که از‬
‫این نتیجه گیری حمایت می کند که یک نفوذ رخ داده است‪ .‬تحلیلگر ممکن است راهنمایی هایی در مورد اقداماتی که در نتیجه‬
‫نفوذ انجام شود را ارائه دهد‪.‬‬

‫‪ -‬رابط کاربری‪ :‬رابط کاربری به ‪ IDS‬کاربر را قادر می سازد تا خروجی سیستم را مشاهده کند یا رفتار سیستم را کنترل کند‪.‬‬
‫در برخی از سیستم ها‪ ،‬رابط کاربری ممکن است برابر با یک مدیر‪ ،‬مدیر یا جزء کنسول باشد‪.‬‬

‫سیستمهای تشخیص نفوذ معموالً برای تشخیص رفتار متجاوزان انسانی و همچنین رفتار نرمافزارهای مخرب طراحی میشوند‪.‬‬

‫احراز هویت در اکثر زمینه های امنیتی رایانه‪ ،‬احراز هویت کاربر بلوک اساسی ساختمان و خط دفاع اولیه است‪ .‬احراز هویت‬
‫کاربر اساس اکثر انواع کنترل دسترسی و مسئولیت پذیری کاربر است‪ RFC 4949 .‬احراز هویت کاربر را به صورت زیر تعریف‬
‫می کند‪:‬‬

‫فرآیند تأیید هویت ادعا شده توسط یا برای یک موجودیت سیستم‪ .‬فرآیند احراز هویت شامل دو مرحله است‪:‬‬

‫‪ -‬مرحله شناسایی‪ :‬ارائه یک شناسه به سیستم امنیتی شناسه ها باید با دقت تخصیص داده شوند‪ ،‬زیرا هویت های احراز هویت‬
‫شده مبنایی برای سایر خدمات امنیتی مانند سرویس کنترل دسترسی هستند‪.‬‬

‫‪ -‬مرحله تأیید‪ :‬ارائه یا تولید اطالعات احراز هویت که پیوند بین موجودیت و شناسه را تأیید می کند‪.‬‬

‫به عنوان مثال‪ ،‬کاربر ‪ Alice Toklas‬می تواند شناسه کاربر ‪ ABTOKLAS‬را داشته باشد‪ .‬این اطالعات باید در هر سرور یا‬
‫سیستم رایانهای که آلیس مایل به استفاده از آن است ذخیره شود و مدیران سیستم و سایر کاربران آن را بشناسند‪ .‬یک مورد‬
‫معمول از اطالعات احراز هویت مرتبط با این شناسه کاربری یک رمز عبور است که مخفی نگه داشته می شود فقط برای آلیس و‬
‫سیستم شناخته شده است‪ .‬اگر کسی نتواند رمز عبور آلیس را بدست آورد یا حدس بزند‪ ،‬ترکیب شناسه کاربری و رمز عبور‬
‫آلیس به مدیران امکان میدهد مجوزهای دسترسی آلیس را تنظیم کرده و فعالیت او را بررسی کنند‪ .‬از آنجایی که شناسه آلیس‬
‫مخفی نیست‪ ،‬کاربران سیستم می توانند برای او ایمیل بفرستند‪ ،‬اما چون رمز عبور او مخفی است‪ ،‬هیچ کس نمی تواند وانمود‬
‫کند که آلیس است‪.‬‬
‫‪753‬‬
‫سیستم عامل های داخلی و اصول طراحی‪754.........................................................................................................................‬‬

‫در اصل‪ ،‬شناسایی وسیله ای است که کاربر به وسیله آن هویت ادعایی را به سیستم ارائه می دهد‪ .‬احراز هویت کاربر ابزاری برای‬
‫اثبات اعتبار ادعا است‪.‬‬

‫چهار روش کلی برای احراز هویت یک کاربر وجود دارد که می تواند به تنهایی یا ترکیبی از آنها استفاده شود‪:‬‬

‫چیزی که فرد میداند‪ :‬مثالً یک رمز عبور‪ ،‬یک شماره شناسایی شخصی ‪ ،PIN‬یا پاسخ به مجموعهای از سؤاالت از پیش تعیین‬
‫شده است‪.‬‬

‫چیزی که فرد در اختیار دارد‪ :‬به عنوان مثال می توان به کارت های کلید الکترونیکی‪ ،‬کارت های هوشمند و کلیدهای فیزیکی‬
‫اشاره کرد‪ .‬به این نوع احراز هویت توکن گفته می شود‪.‬‬

‫‪ -‬چیزی که فرد وجود دارد بیومتریک ایستا‪ :‬به عنوان مثال می توان به تشخیص اثر انگشت‪ ،‬شبکیه چشم و صورت اشاره کرد‪.‬‬

‫کاری که فرد انجام می دهد بیومتریک پویا‪ :‬نمونه هایی از جمله تشخیص با الگوی صدا‪ ،‬ویژگی های دست خط و ریتم تایپ‬
‫است‪.‬‬

‫همه این روش ها‪ ،‬به درستی اجرا و استفاده می شوند‪ ،‬می توانند احراز هویت ایمن کاربر را فراهم کنند‪ .‬با این حال‪ ،‬هر روش‬
‫مشکالتی دارد‪ .‬یک دشمن ممکن است بتواند رمز عبور را حدس بزند یا بدزدد‪ .‬به طور مشابه‪ ،‬یک دشمن ممکن است بتواند یک‬
‫توکن جعل یا سرقت کند‪ .‬کاربر ممکن است رمز عبور را فراموش کند یا رمزی را گم کند‪ .‬عالوه بر این‪ ،‬هزینه اداری قابل‬
‫توجهی برای مدیریت اطالعات رمز و رمز در سیستم ها و ایمن سازی چنین اطالعاتی در سیستم ها وجود دارد‪ .‬با توجه به احراز‬
‫هویت بیومتریک‪ ،‬مشکالت مختلفی وجود دارد‪ ،‬از جمله برخورد با موارد مثبت کاذب و منفی کاذب‪ ،‬پذیرش کاربر‪ ،‬هزینه و‬
‫راحتی‪ .‬کنترل دسترسی کنترل دسترسی یک سیاست امنیتی را اجرا می کند که مشخص می کند چه کسی یا چه چیزی به‬
‫عنوان مثال‪ ،‬در مورد یک فرآیند ممکن است به هر منبع سیستم خاص و نوع دسترسی مجاز در هر نمونه دسترسی داشته باشد‪.‬‬
‫مکانیزم کنترل دسترسی میان کاربر یا فرآیندی که از طرف کاربر اجرا میشود و منابع سیستم‪ ،‬مانند برنامهها‪ ،‬سیستمهای‬
‫عامل‪ ،‬فایروالها‪ ،‬مسیریابها‪ ،‬فایلها و پایگاههای داده واسطه میشود‪ .‬سیستم ابتدا باید کاربری که به دنبال دسترسی است را‬
‫احراز هویت کند‪ .‬به طور معمول‪ ،‬تابع احراز هویت تعیین می کند که آیا کاربر اصالً مجاز به دسترسی به سیستم است یا خیر‪.‬‬
‫سپس تابع کنترل دسترسی تعیین می کند که آیا دسترسی درخواستی خاص توسط این کاربر مجاز است یا خیر‪ .‬یک مدیر‬
‫امنیتی یک پایگاه داده مجوز نگهداری می کند که مشخص می کند چه نوع دسترسی به کدام منابع برای این کاربر مجاز است‪.‬‬
‫تابع کنترل دسترسی با این پایگاه داده مشورت می کند تا مشخص کند که آیا اجازه دسترسی را می دهد یا خیر‪ .‬یک تابع‬
‫ممیزی‪ ،‬دسترسی کاربر به منابع سیستم را رصد و ثبت می کند‪.‬‬

‫‪754‬‬
‫سیستم عامل های داخلی و اصول طراحی‪755.........................................................................................................................‬‬

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

‫‪BELL94‬اهداف طراحی زیر را برای فایروال فهرست می کند‪:‬‬

‫‪ .1‬فایروال به عنوان یک نقطه خفه عمل می کند‪ ،‬به طوری که تمام ترافیک ورودی و تمام ترافیک خروجی باید از فایروال عبور‬
‫کنند‪ .‬این امر با مسدود کردن فیزیکی تمام دسترسی به شبکه محلی به جز از طریق فایروال به دست می آید‪.‬‬

‫‪ .2‬فایروال سیاست امنیتی محلی را اعمال می کند‪ ،‬که ترافیک مجاز برای عبور را تعریف می کند‪ .‬انواع مختلفی از فایروال ها‬
‫استفاده می شود که انواع مختلفی از سیاست های امنیتی را اجرا می کنند‪ ،‬همانطور که در ادامه این فصل توضیح داده شد‪.‬‬

‫‪ .3‬فایروال در برابر حمالت ایمن است‪ .‬این به معنای استفاده از یک سیستم سخت شده با یک سیستم عامل ایمن است‪ .‬سیستم‬
‫های کامپیوتری قابل اعتماد برای میزبانی فایروال مناسب هستند و اغلب در برنامه های دولتی مورد نیاز هستند‪.‬‬

‫‪ 15.2‬سرریز بافر‬

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

‫حمالت سرریز بافر‬

‫سرریز بافر که به عنوان سرریز بافر نیز شناخته می شود‪ ،‬در واژه نامه اصطالحات امنیت اطالعات کلیدی ‪NIST‬موسسه ملی‬
‫استانداردها و فناوری به شرح زیر تعریف شده است‪:‬‬

‫‪755‬‬
‫سیستم عامل های داخلی و اصول طراحی‪756.........................................................................................................................‬‬

‫سرریز بافر‪ :‬شرایطی در یک رابط که تحت آن می توان ورودی بیشتری نسبت به ظرفیت تخصیص داده شده در یک بافر یا‬
‫ناحیه نگهداری داده قرار داد و اطالعات دیگر را بازنویسی کرد‪ .‬مهاجمان از چنین شرایطی برای از کار انداختن یک سیستم یا‬
‫وارد کردن کدهای ساخته شده ویژه که به آنها اجازه می دهد کنترل سیستم را به دست آورند‪ ،‬سوء استفاده می کنند‪ .‬سرریز‬
‫بافر میتواند در نتیجه یک خطای برنامهنویسی رخ دهد‪ ،‬زمانی که یک فرآیند تالش میکند دادهها را فراتر از محدودیتهای یک‬
‫بافر با اندازه ثابت ذخیره کند و در نتیجه مکانهای حافظه مجاور را بازنویسی کند‪ .‬این مکانها میتوانند سایر متغیرها یا‬
‫پارامترهای برنامه یا دادههای جریان کنترل برنامه مانند آدرسها و نشانگرها را به فریمهای پشته قبلی برگردانند‪ .‬بافر می تواند‬
‫در پشته‪ ،‬در پشته‪ ،‬یا در بخش داده فرآیند قرار گیرد‪ .‬پیامدهای این خطا شامل خراب شدن داده های استفاده شده توسط‬
‫برنامه‪ ،‬انتقال غیرمنتظره کنترل در برنامه‪ ،‬احتماالً نقض دسترسی به حافظه و به احتمال زیاد خاتمه نهایی برنامه است‪ .‬هنگامی‬
‫که به عمد به عنوان بخشی از حمله به یک سیستم انجام می شود‪ ،‬انتقال کنترل می تواند به کد مورد نظر مهاجم انجام شود‪،‬‬
‫که منجر به توانایی اجرای کد دلخواه با امتیازات فرآیند مورد حمله می شود‪ .‬حمالت سرریز بافر یکی از رایج ترین و خطرناک‬
‫ترین انواع حمالت امنیتی است‪ .‬برای نشان دادن عملکرد اصلی یک نوع معمول سرریز بافر‪ ،‬که به سرریز پشته معروف است‪،‬‬
‫تابع اصلی ‪ C‬را در شکل ‪ a15.1‬در نظر بگیرید‪ .‬این شامل سه متغیر معتبر‪ str1 ،‬و ‪ 2 ،str2‬است که مقادیر آنها معموالً در‬
‫مکان های حافظه مجاور ذخیره می شود‪ .‬ترتیب و مکان آنها به نوع متغیر محلی یا جهانی‪ ،‬زبان و اجرار مورد استفاده و معماری‬
‫ماشین هدف بستگی دارد‪ .‬برای این مثال‪ ،‬فرض میکنیم که آنها در مکانهای حافظه متوالی‪ ،‬از باالترین به پایینترین ذخیره‬
‫میشوند‪ ،‬همانطور که در شکل ‪ 15.2.3‬نشان داده شده است‪ .‬هدف قطعه کد فراخوانی تابع ‪ next_tagstr1‬برای کپی کردن‬
‫مقدار تگ مورد انتظار در ‪ str1‬است‪ .‬بیایید فرض کنیم که این رشته ‪ START‬خواهد بود‪.‬‬

‫شکل ‪ 15.1‬مثال سرریز اولیه بافر‬

‫‪756‬‬
‫سیستم عامل های داخلی و اصول طراحی‪757.........................................................................................................................‬‬

‫شکل ‪ 15.2‬مقادیر پایه سرریز بافر پشته‬

‫سپس خط بعدی را از ورودی استاندارد برنامه با استفاده از تابع ‪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.........................................................................................................................‬‬

‫عامل ممکن است به کاربر اجازه دسترسی به یک فایل یا استفاده از یک برنامه کاربردی را بدهد‪ ،‬پس از آن هیچ بررسی امنیتی‬
‫دیگری وجود ندارد‪ ،‬سیستم مدیریت پایگاه داده باید در مورد هر تالش فردی برای دسترسی تصمیم گیری کند‪ .‬این تصمیم نه‬
‫تنها به هویت کاربر‪ ،‬بلکه به بخشهای خاصی از دادههای مورد دسترسی و حتی اطالعاتی که قبالً برای کاربر فاش شده است نیز‬
‫بستگی دارد‪.‬‬

‫شکل ‪ 15.3‬مثالی از ساختارهای کنترل دسترسی‬

‫یک بعد ماتریس شامل افراد شناسایی شده است که ممکن است به داده ها دسترسی داشته باشند‪ .‬به طور معمول‪ ،‬این فهرست‬
‫شامل کاربران یا گروههای کاربری منفرد میشود‪ ،‬اگرچه دسترسی میتواند برای پایانهها‪ ،‬میزبانها یا برنامهها به جای یا عالوه بر‬
‫کاربران کنترل شود‪ .‬بعد دیگر اشیایی را که ممکن است به آنها دسترسی داشته باشید فهرست می کند‪ .‬در باالترین سطح‬
‫جزئیات‪ ،‬اشیا ممکن است زمینه های داده جداگانه باشند‪ .‬گروه بندی های انبوه بیشتر‪ ،‬مانند رکوردها‪ ،‬فایل ها‪ ،‬یا حتی کل‬
‫پایگاه داده نیز ممکن است اشیایی در ماتریس باشند‪ .‬هر ورودی در ماتریس حقوق دسترسی آن موضوع را برای آن شی نشان‬
‫می دهد‪.‬‬

‫در عمل‪ ،‬یک ماتریس دسترسی معموالً پراکنده است و با تجزیه به یکی از دو روش پیادهسازی میشود‪ .‬ماتریس ممکن است‬
‫توسط ستون ها تجزیه شود و لیست های کنترل دسترسی به دست می آید شکل ‪b. 15.3‬بنابراین برای هر شی‪ ،‬یک لیست‬
‫کنترل دسترسی‪ ،‬کاربران و حقوق دسترسی مجاز آنها را فهرست می کند‪ .‬لیست کنترل دسترسی ممکن است حاوی یک ورودی‬
‫پیش فرض یا عمومی باشد‪ .‬این به کاربرانی که صراحتاً بهعنوان دارای حقوق ویژه فهرست نشدهاند اجازه میدهد مجموعهای از‬
‫حقوق پیشفرض داشته باشند‪ .‬عناصر لیست ممکن است شامل کاربران فردی و همچنین گروهی از کاربران باشد‪.‬‬

‫تجزیه بر اساس ردیف‪ ،‬بلیط های قابلیت را به دست می دهد شکل ‪c. 15.3‬یک بلیط قابلیت‪ ،‬اشیا و عملیات مجاز را برای کاربر‬
‫مشخص می کند‪ .‬هر کاربر تعدادی بلیط دارد و ممکن است مجاز به قرض دادن یا دادن آنها به دیگران باشد‪ .‬از آنجایی که بلیط‬
‫‪765‬‬
‫سیستم عامل های داخلی و اصول طراحی‪766.........................................................................................................................‬‬

‫ها ممکن است در سراسر سیستم پراکنده شوند‪ ،‬مشکل امنیتی بیشتری نسبت به لیست های کنترل دسترسی دارند‪ .‬به ویژه‪،‬‬
‫بلیط باید غیرقابل جعل باشد‪ .‬یکی از راههای انجام این کار این است که سیستم عامل همه بلیطها را از طرف کاربران نگه دارد‪.‬‬
‫این بلیط ها باید در منطقه ای از حافظه غیرقابل دسترس کاربران نگهداری شوند‪.‬‬

‫مالحظات شبکه برای کنترل دسترسی داده گرا به موازات مالحظات کنترل دسترسی کاربر محور است‪ .‬اگر فقط کاربران خاصی‬
‫مجاز به دسترسی به موارد خاصی از داده ها هستند‪ ،‬ممکن است برای محافظت از آن موارد در حین انتقال به کاربران مجاز به‬
‫رمزگذاری نیاز باشد‪ .‬به طور معمول‪ ،‬کنترل دسترسی به داده ها غیرمتمرکز است‪ ،‬یعنی توسط سیستم های مدیریت پایگاه داده‬
‫مبتنی بر میزبان کنترل می شود‪ .‬اگر یک سرور پایگاه داده شبکه در یک شبکه وجود داشته باشد‪ ،‬کنترل دسترسی به داده ها به‬
‫یک عملکرد شبکه تبدیل می شود‪.‬‬

‫سیاست های کنترل دسترسی‬

‫یک خط مشی کنترل دسترسی تعیین می کند که چه نوع دسترسی‪ ،‬تحت چه شرایطی و توسط چه کسی مجاز است‪ .‬سیاست‬
‫های کنترل دسترسی به طور کلی به دسته های زیر دسته بندی می شوند‪:‬‬

‫‪ -‬کنترل دسترسی اختیاری ‪DAC:‬دسترسی را بر اساس هویت درخواستکننده و قوانین دسترسی مجوزها کنترل میکند که‬
‫بیان میکند درخواستکنندگان چه کاری مجاز هستند یا نمیتوانند انجام دهند‪ .‬این خطمشی اختیاری نامیده میشود زیرا یک‬
‫موجودیت ممکن است حقوق دسترسی داشته باشد که به آن موجودیت اجازه میدهد‪ ،‬با میل خود‪ ،‬موجودیت دیگری را قادر به‬
‫دسترسی به برخی منابع کند‪.‬‬

‫‪ -‬کنترل دسترسی اجباری ‪MAC:‬دسترسی را بر اساس مقایسه برچسب های امنیتی که نشان می دهد منابع سیستم چقدر‬
‫حساس یا حیاتی هستند با مجوزهای امنیتی که نشان می دهد نهادهای سیستم واجد شرایط دسترسی به منابع خاص هستند‬
‫را کنترل می کند‪ .‬این خطمشی اجباری نامیده میشود زیرا نهادی که مجوز دسترسی به یک منبع را دارد‪ ،‬ممکن است تنها با‬
‫اراده خود‪ ،‬موجودیت دیگری را قادر به دسترسی به آن منبع نباشد‪.‬‬

‫‪ -‬کنترل دسترسی مبتنی بر نقش ‪RBAC:‬دسترسی را بر اساس نقشهایی که کاربران در سیستم دارند و قوانینی که بیان‬
‫میکند چه دسترسیهایی برای کاربران در نقشهای معین مجاز است‪ ،‬کنترل میکند‪.‬‬

‫‪766‬‬
‫سیستم عامل های داخلی و اصول طراحی‪767.........................................................................................................................‬‬

‫سیاست کنترل‬ ‫سیاست کنترل‬


‫دسترسی‬ ‫دسترسی‬
‫اختیاری‬ ‫اجباری‬

‫سیاست کنترل‬
‫دسترسی‬
‫مبتنی بر نقش‬

‫شکل ‪ 15.4‬سیاست های کنترل دسترسی‬

‫‪ 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‬ماژول هر‬
‫درخواست یک سوژه برای دسترسی به یک شی را ارزیابی می کند تا تعیین کند که آیا حق دسترسی وجود دارد یا خیر‪ .‬یک‬
‫تالش برای دسترسی‪ ،‬مراحل زیر را راهاندازی میکند‪:‬‬

‫‪ .1‬یک موضوع ‪ S0‬درخواستی از نوع ‪ a‬برای شی ‪ X‬صادر می کند‪.‬‬

‫‪ .2‬درخواست باعث می شود که سیستم سیستم عامل یا یک نوع ماژول رابط کنترل دسترسی پیامی به شکل ‪S0, a, X‬برای‬
‫کنترلر ‪ X‬ایجاد کند‪.‬‬

‫‪ .3‬کنترل کننده ماتریس دسترسی ‪ A‬را بازجویی می کند تا مشخص کند ‪ a‬در ‪ AS0, X‬است یا خیر‪ .‬اگر چنین است‪،‬‬
‫دسترسی مجاز است‪ .‬در غیر این صورت‪ ،‬دسترسی ممنوع می شود و یک نقض حفاظت رخ می دهد‪ .‬نقض باید باعث هشدار و‬
‫اقدام مناسب شود‪.‬‬

‫شکل ‪ 15.6‬نشان می دهد که هر دسترسی توسط یک موضوع به یک شی توسط کنترل کننده برای آن شی انجام می شود و‬
‫تصمیم کنترل کننده بر اساس محتوای فعلی ماتریس است‪ .‬بعالوه‪ ،‬موضوعات خاصی این اختیار را دارند که تغییرات خاصی در‬
‫ماتریس دسترسی ایجاد کنند‪ .‬درخواست تغییر ماتریس دسترسی به عنوان دسترسی به ماتریس در نظر گرفته می شود و‬
‫ورودی های جداگانه در ماتریس به عنوان اشیا در نظر گرفته می شود‪ .‬چنین دسترسی هایی توسط یک کنترل کننده ماتریس‬
‫دسترسی‪ ،‬که به روز رسانی های ماتریس را کنترل می کند‪ ،‬واسطه می شوند‪.‬‬

‫‪768‬‬
‫سیستم عامل های داخلی و اصول طراحی‪769.........................................................................................................................‬‬

‫شکل ‪ 15.5‬ماتریس کنترل دسترسی گسترده‬

‫این مدل همچنین شامل مجموعه ای از قوانین است که بر تغییرات ماتریس دسترسی‪ ،‬نشان داده شده در جدول ‪ ،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.6‬سازمانی از عملکرد کنترل دسترسی‬

‫قوانین باقی مانده در جدول ‪ 15.1‬بر ایجاد و حذف موضوعات و اشیاء حاکم است‪ .‬قانون ‪ R5‬بیان می کند که هر موضوعی می‬
‫تواند یک شی جدید ایجاد کند که مالک آن است‪ ،‬و سپس می تواند دسترسی به شی را اعطا و حذف کند‪ .‬تحت قانون ‪،R6‬‬
‫صاحب یک شی می تواند شی را از بین ببرد و در نتیجه ستون مربوطه از ماتریس دسترسی حذف شود‪ .‬قانون ‪ R7‬هر موضوعی‬
‫را قادر می سازد تا یک موضوع جدید ایجاد کند‪ .‬خالق صاحب موضوع جدید است و موضوع جدید به خودش دسترسی کنترلی‬
‫دارد‪ .‬قانون ‪ R8‬به مالک یک موضوع اجازه می دهد تا سطر و ستون در صورت وجود ستون های موضوعی از ماتریس دسترسی‬
‫تعیین شده توسط آن موضوع را حذف کند‪ .‬مجموعه قوانین در جدول ‪ 15.1‬نمونه ای از مجموعه قوانینی است که می تواند‬
‫برای سیستم کنترل دسترسی موارد زیر نمونه هایی از قوانین اضافی یا جایگزینی هستند که می توانند شامل شوند‪ .‬حق انتقال‬
‫فقط می تواند تعریف شود که منجر به اضافه شدن حق منتقل شده به موضوع مورد نظر و حذف از موضوع انتقال دهنده می‬
‫شود‪ .‬با اجازه ندادن پرچم کپی به همراه حق مالک‪ ،‬تعداد صاحبان یک شی یا موضوع را می توان به یک نفر محدود کرد‪.‬‬

‫توانایی یک موضوع برای ایجاد موضوع دیگر و داشتن حق دسترسی مالک به آن موضوع می تواند برای تعریف سلسله مراتبی از‬
‫موضوعات مورد استفاده قرار گیرد‪ .‬به عنوان مثال‪ ،‬در شکل ‪ S1 ،15.5‬مالک ‪ S2‬و ‪ S3‬است‪ ،‬به طوری که ‪ S2‬و ‪ S3‬تابع ‪S1‬‬
‫هستند‪ .‬طبق قوانین جدول ‪ S1 ،15.1‬می تواند حقوق دسترسی ‪ S2‬را که ‪ S1‬قبالً دارد‪ ،‬اعطا و حذف کند‪ .‬بنابراین‪ ،‬یک‬
‫موضوع می تواند موضوع دیگری را با زیرمجموعه ای از حقوق دسترسی خود ایجاد کند‪ .‬این ممکن است مفید باشد‪ ،‬برای مثال‪،‬‬

‫‪770‬‬
771.........................................................................................................................‫سیستم عامل های داخلی و اصول طراحی‬

‫ و نمیخواهد آن برنامه بتواند حقوق دسترسی را به‬،‫اگر سوژهای برنامهای را فراخوانی میکند که کامالً قابل اعتماد نیست‬
.‫موضوعات دیگر منتقل کند‬

‫ دستورات سیستم کنترل دسترسی‬15.1 ‫جدول‬

‫قانون‬ S0‫فرمان توسط‬ ‫مجوز‬ ‫عمل‬


R1 transfer e a* ‘a*’ in AS0, X store e a* f in AS,
f to S, X X
a a
R2 grant e a* f to ‘owner’ in AS0, X store e a* f in AS,
S, X X
a a
R3 delete a from ‘control’ in delete a from AS,
S, X AS0, X
S or
‘owner’ in AS0, X
R4 w read S, X ‘control’ in copy AS, X into w
AS0,
S or
‘owner’ in AS0, X
R5 create object X None add column for X
to A; store ‘owner’
in AS0, X
R6 destroy object ‘owner’ in AS0, X delete column for
X X from A
R7 create subject None add row for S to
S A; execute create
object S; store
‘control’ in AS, S
R8 destroy ‘owner’ in AS0, S delete row
subject S for S from A;
execute
destroy
object S
771
‫سیستم عامل های داخلی و اصول طراحی‪772.........................................................................................................................‬‬

‫کنترل دسترسی مبتنی بر نقش سیستمهای ‪ DAC‬سنتی حقوق دسترسی تک تک کاربران و گروههایی از کاربران را تعریف‬
‫میکنند‪ .‬در مقابل‪ RBAC ،‬بر اساس نقشهایی است که کاربران در یک سیستم به عهده میگیرند تا هویت کاربر‪ .‬به طور‬
‫معمول‪ ،‬مدل های ‪ RBAC‬نقش را به عنوان یک کارکرد شغلی در یک سازمان تعریف می کنند‪ .‬سیستم های ‪ RBAC‬به‬
‫جای تک تک کاربران‪ ،‬حقوق دسترسی را به نقش ها اختصاص می دهند‪ .‬به نوبه خود‪ ،‬کاربران با توجه به مسئولیت های خود به‬
‫نقش های مختلف‪ ،‬چه به صورت ایستا یا پویا‪ ،‬اختصاص داده می شوند‪.‬‬

‫‪ RBAC‬در حال حاضر از استفاده تجاری گسترده ای برخوردار است و منطقه ای برای تحقیقات فعال باقی مانده است‪ .‬مؤسسه‬
‫ملی استانداردها و فناوری ‪NIST‬استانداردی به نام الزامات امنیتی برای ماژول های رمزنگاری ‪ 25 ،FIPS PUB 140-2‬مه‬
‫‪ 2001‬صادر کرده است که به پشتیبانی برای کنترل دسترسی و مدیریت از طریق نقش ها نیاز دارد‪.‬‬

‫شکل ‪ 15.7‬کاربران‪ ،‬نقش ها و منابع‬

‫ارتباط کاربران با نقشها‪ ،‬مانند رابطه نقشها با منابع یا اشیاء سیستم‪ ،‬بسیار به بسیاری از آنها است شکل ‪ .15.7‬مجموعه ای از‬
‫کاربران در برخی محیط ها به طور مکرر تغییر می کند و انتساب یک کاربر به یک یا چند نقش نیز ممکن است پویا باشد‪.‬‬
‫مجموعه نقشها در سیستم در اکثر محیطها احتماالً ثابت هستند و فقط گاهی اوقات اضافه یا حذف میشوند‪ .‬هر نقش حقوق‬
‫دسترسی خاصی به یک یا چند منبع خواهد داشت‪ .‬مجموعه منابع و حقوق دسترسی خاص مرتبط با یک نقش خاص نیز‬
‫احتماالً به ندرت تغییر می کند‪.‬‬

‫همانطور که در شکل ‪ 15.8‬نشان داده شده است‪ ،‬می توانیم از نمایش ماتریس دسترسی برای به تصویر کشیدن عناصر کلیدی‬
‫یک سیستم ‪ RBAC‬به زبان ساده استفاده کنیم‪ .‬ماتریس باالیی‪ ،‬کاربران فردی را به نقش ها مرتبط می کند‪ .‬به طور معمول‬
‫تعداد کاربران بسیار بیشتر از نقش هاست‪ .‬هر ورودی ماتریس یا خالی است یا عالمت گذاری شده است‪ ،‬دومی نشان می دهد که‬
‫این کاربر به این نقش اختصاص داده شده است‪ .‬توجه داشته باشید که ممکن است به یک کاربر چند نقش اختصاص داده شود‬

‫‪772‬‬
‫سیستم عامل های داخلی و اصول طراحی‪773.........................................................................................................................‬‬

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

‫‪ RBAC‬خود را به اجرای مؤثر اصل کمترین امتیاز وامی دارد‪ .‬یعنی هر نقش باید حداقل مجموعه ای از حقوق دسترسی مورد‬
‫نیاز برای آن نقش را داشته باشد‪ .‬یک کاربر به نقشی اختصاص داده می شود که او را قادر می سازد فقط آنچه را که برای آن‬
‫نقش الزم است انجام دهد‪ .‬چندین کاربر که به یک نقش اختصاص داده شده اند از حداقل مجموعه حقوق دسترسی یکسانی‬
‫برخوردار هستند‪.‬‬

‫شکل ‪ 15.8‬نمایش ماتریس کنترل دسترسی ‪RBAC‬‬

‫‪773‬‬
‫سیستم عامل های داخلی و اصول طراحی‪774.........................................................................................................................‬‬

‫‪ 15.4‬کنترل دسترسی یونیکس‬

‫کنترل دسترسی به فایل یونیکس سنتی‬

‫اکثر سیستمهای یونیکس به طرح کنترل دسترسی به فایل که با نسخههای اولیه یونیکس معرفی شد‪ ،‬وابسته هستند یا حداقل‬
‫بر اساس آن هستند‪ .‬به هر کاربر یونیکس یک شماره شناسایی منحصر به فرد کاربر شناسه کاربر اختصاص داده می شود‪ .‬یک‬
‫کاربر همچنین عضو یک گروه اصلی و احتماالً تعدادی از گروه های دیگر است که هر کدام با یک شناسه گروهی شناسایی می‬
‫شوند‪ .‬هنگامی که یک فایل ایجاد می شود‪ ،‬به عنوان متعلق به یک کاربر خاص تعیین می شود و با شناسه آن کاربر عالمت‬
‫گذاری می شود‪ .‬همچنین به یک گروه خاص تعلق دارد که در ابتدا یا گروه اصلی سازنده آن یا گروه دایرکتوری والد آن است اگر‬
‫آن دایرکتوری دارای مجموعه مجوز ‪ SetGID‬باشد‪ .‬به هر فایل مجموعه ای از ‪ 12‬بیت حفاظتی مربوط می شود‪ .‬شناسه مالک‪،‬‬
‫شناسه گروه و بیتهای حفاظتی بخشی از ‪ inode‬فایل هستند‪.‬‬

‫‪ 9‬بیت حفاظتی مجوز خواندن‪ ،‬نوشتن و اجرا را برای صاحب فایل‪ ،‬سایر اعضای گروهی که این فایل به آن تعلق دارد و همه‬
‫کاربران دیگر مشخص می کند‪ .‬اینها سلسله مراتبی از مالک‪ ،‬گروه و همه موارد دیگر را تشکیل می دهند که باالترین مجموعه‬
‫مجوزهای مربوطه استفاده می شود‪ .‬شکل ‪ a15.9‬مثالی را نشان می دهد که در آن مالک فایل دسترسی خواندن و نوشتن دارد‪.‬‬
‫همه اعضای دیگر گروه فایل دسترسی خواندن دارند و کاربران خارج از گروه هیچ حق دسترسی به فایل ندارند‪ .‬هنگامی که بر‬
‫روی یک فهرست اعمال می شود‪ ،‬بیت های خواندن و نوشتن حق فهرست کردن و ایجاد‪/‬تغییر نام‪/‬حذف فایل ها را در‬
‫دایرکتوری اعطا می کند‪.‬‬

‫‪774‬‬
‫سیستم عامل های داخلی و اصول طراحی‪775.........................................................................................................................‬‬

‫(الف) رویکرد سنتی یونیکس (لیست کنترل دسترسی‬


‫حداقل)‬

‫(ب) لیست کنترل دسترسی گسترده‬


‫شکل ‪ 15.9‬کنترل دسترسی به فایل یونیکس‬

‫سه بیت باقیمانده رفتار اضافی ویژه ای را برای فایل ها یا دایرکتوری ها تعریف می کند‪ .‬دو مورد از آنها مجوزهای "تنظیم‬
‫شناسه کاربر" ‪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‬‬
‫بررسی می کند که آیا ورودی منطبق دارای مجوزهای کافی است یا خیر‪ .‬یک فرآیند می تواند در بیش از یک گروه عضو باشد‪.‬‬
‫بنابراین بیش از یک ورودی گروهی می تواند مطابقت داشته باشد‪ .‬اگر هر یک از این ورودیهای گروه منطبق حاوی مجوزهای‬
‫درخواستی باشد‪ ،‬ورودیهای حاوی مجوزهای درخواستی انتخاب میشوند‬

‫بدون توجه به اینکه کدام ورودی انتخاب شده‪ ،‬نتیجه یکسان است‪ .‬اگر هیچ یک از ورودی های گروه منطبق حاوی مجوزهای‬
‫درخواستی نباشد‪ ،‬بدون توجه به اینکه کدام ورودی انتخاب شده است‪ ،‬دسترسی ممنوع خواهد بود‪.‬‬

‫‪ 15.5‬سخت شدن سیستم های عامل‬

‫اولین گام حیاتی در ایمن سازی یک سیستم‪ ،‬ایمن سازی سیستم عامل پایه است که همه برنامه ها و سرویس های دیگر به آن‬
‫متکی هستند‪ .‬یک پایه امنیتی خوب به یک سیستم عامل به درستی نصب شده‪ ،‬وصله شده و پیکربندی شده نیاز دارد‪.‬‬
‫متأسفانه‪ ،‬پیکربندی پیشفرض برای بسیاری از سیستمعاملها اغلب سهولت استفاده و عملکرد را به جای امنیت به حداکثر‬
‫میرساند‪ .‬عالوه بر این‪ ،‬از آنجایی که هر سازمانی نیازهای امنیتی خاص خود را دارد‪ ،‬مشخصات امنیتی مناسب و در نتیجه‬
‫پیکربندی نیز متفاوت خواهد بود‪ .‬آنچه برای یک سیستم خاص مورد نیاز است باید در مرحله برنامه ریزی شناسایی شود‪،‬‬
‫همانطور که قبالً بحث کردیم‪.‬‬

‫‪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‬های‬
‫مدیریت شده ویژه برای مدیریت ایمن طراحی شده اند‪ .‬آنها از سیاست های رمز عبور معمولی حساب های انسانی استفاده نمی‬
‫کنند‪.‬‬

‫(الف) نشانه‬ ‫(ب) توصیف کننده‬


‫دسترسی‬ ‫امنیتی‬ ‫(ج) لیست کنترل دسترسی‬

‫شکل ‪ 15.10‬ساختارهای امنیتی ویندوز‬

‫‪ -‬گروه ‪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.........................................................................................................................‬‬

‫حذف‬

‫کنترل را بخوانید‬

‫را بنویسید ‪DAC‬‬

‫بنویسید مالک‬
‫انواع دسترسی عمومی‬
‫همگام سازی کنید‬

‫انواع دسترسی استاندارد‬ ‫انواع دسترسی خاص‬

‫دسترسی به امنیت سیستم‬


‫حداکثر مجاز‬

‫شکل ‪ 15.11‬ماسک دسترسی‬

‫‪Write_DAC: -‬به برنامه اجازه می دهد تا ‪ DACL‬و در نتیجه حفاظت از این شی را تغییر دهد‪.‬‬

‫‪Read_control: -‬به برنامه اجازه می دهد تا از مالک و زمینه های ‪ DACL‬توصیفگر امنیتی این شی پرس و جو کند‪.‬‬

‫‪Delete: -‬به برنامه اجازه می دهد این شی را حذف کند‬

‫نیمه درجه باالی ماسک دسترسی نیز شامل چهار نوع دسترسی عمومی است‪ .‬این بیت ها راه مناسبی برای تنظیم انواع‬
‫دسترسی خاص در تعدادی از انواع شیء مختلف ارائه می کنند‪ .‬به عنوان مثال‪ ،‬فرض کنید یک برنامه کاربردی می خواهد‬
‫چندین نوع شی ایجاد کند و اطمینان حاصل کند که کاربران دسترسی خواندنی به اشیا دارند‪ ،‬حتی اگر خواندن برای هر نوع‬
‫شی معنای متفاوتی دارد‪ .‬برای محافظت از هر شی از هر نوع بدون بیت های دسترسی عمومی‪ ،‬برنامه باید یک ‪ ACE‬متفاوت‬
‫برای هر نوع شی بسازد و مراقب باشد که ‪ ACE‬صحیح را هنگام ایجاد هر شیء ارسال کند‪ .‬ایجاد یک ‪ ACE‬منفرد که مفهوم‬
‫عمومی «اجازه خواندن» را بیان میکند‪ ،‬راحتتر است و به سادگی این ‪ ACE‬را برای هر شیئی که ایجاد میشود اعمال میکند‬
‫و اتفاق درست را میدهد‪ .‬این هدف بیت های دسترسی عمومی است که به شرح زیر است‪:‬‬

‫‪Generic_all:‬به همه دسترسی ها اجازه می دهد‬ ‫‪‬‬


‫‪Generic_execute:‬در صورت قابل اجرا بودن اجازه اجرا را می دهد‬ ‫‪‬‬
‫‪Generic_write:‬اجازه دسترسی به نوشتن را می دهد‬ ‫‪‬‬

‫‪789‬‬
‫سیستم عامل های داخلی و اصول طراحی‪790.........................................................................................................................‬‬

‫‪Generic_read:‬اجازه دسترسی فقط خواندنی را می دهد‬ ‫‪‬‬

‫بیتهای عمومی نیز بر انواع دسترسی استاندارد تأثیر میگذارند‪ .‬به عنوان مثال‪ ،‬برای یک شی فایل‪ ،‬بیت ‪ 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.9‬خواندن توصیه شده‬

‫موضوعات این فصل با جزئیات بیشتر در ‪STAL12‬پوشش داده شده است‪.‬‬

‫‪ 15.10‬اصطالحات کلیدی‪ ،‬سؤاالت و مشکالت را مرور کنید‬

‫شرایط کلیدی‬

‫کنترل دسترسی‬ ‫بلیط قابلیت‬ ‫مزاحم‬


‫لیست کنترل دسترسی‬ ‫سرریز بافر‬ ‫ورود به سیستم تشخیص‬
‫‪ACL‬ماتریس دسترسی‬ ‫کنترل دسترسی‬ ‫نفوذ‬
‫سیاست کنترل دسترسی‬ ‫اختیاری‪DAC‬‬ ‫بدافزار نرم افزار مخرب‬
‫تصادفی سازی فضای‬ ‫کنترل دسترسی‬ ‫کنترل دسترسی مبتنی بر‬
‫آدرس‬ ‫به سیستم فایل‬ ‫نقش‪RBAC‬‬
‫بیش از حد‬ ‫صفحه‬ ‫سرریز پشته‬
‫بافر احراز‬ ‫محافظ‬
‫هویت‬ ‫فایروال‬

‫بررسی سواالت‬

‫‪ .15.1‬حقوق دسترسی معمولی که ممکن است برای یک فایل خاص به یک کاربر خاص اعطا یا رد شود چیست؟‬

‫‪ .15.2‬سه دسته از مخالن را فهرست کرده و به طور خالصه تعریف کنید‪.‬‬

‫‪ .15.3‬به طور کلی‪ ،‬چهار روش برای احراز هویت یک کاربر چیست؟‬

‫‪ .15.4‬تفاوت بین ‪ DAC‬و ‪ RBAC‬را به اختصار توضیح دهید‪.‬‬


‫‪792‬‬
‫سیستم عامل های داخلی و اصول طراحی‪793.........................................................................................................................‬‬

‫‪ .15.5‬چه نوع زبان های برنامه نویسی در برابر سرریزهای بافر آسیب پذیر هستند؟‬

‫‪ .15.6‬دو دسته کلی دفاع در برابر سرریز بافر کدامند؟‬

‫‪ .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.2‬ارسال پیام توزیع شده‬

‫قابلیت اطمینان در مقابل انسداد غیرقابل اعتماد در مقابل غیر انسداد‬

‫‪ 16.3‬تماس های رویه از راه دور‬

‫عبور پارامتر نمایش پارامتر اتصال کالینت‪/‬سرور‬

‫مکانیسم های شی گرا سنکرون در مقابل ناهمزمان‬

‫‪ 16.4‬خوشه ها‬

‫تنظیمات کالستر مسائل طراحی سیستم عامل خوشه های معماری کامپیوتر خوشه در مقایسه با ‪SMP‬‬

‫‪Windows Cluster Server 16.5‬‬

‫‪ 16.6‬خوشه های ‪ Beowulf‬و ‪Linux‬‬

‫ویژگی های ‪ Beowulf‬نرم افزار ‪Beowulf‬‬

‫‪ 16.7‬خالصه‬

‫‪ 16.8‬مطالعه توصیه شده‬

‫‪ 16.9‬اصطالحات کلیدی‪ ،‬بررسی سواالت و مشکالت‬

‫‪796‬‬
‫سیستم عامل های داخلی و اصول طراحی‪797.........................................................................................................................‬‬

‫اهداف یادگیری‬

‫پس از مطالعه این فصل‪ ،‬شما باید بتوانید‪:‬‬

‫‪ -‬خالصه ای از جنبه های کلیدی محاسبات مشتری‪/‬سرور را ارائه دهید‪.‬‬

‫‪ -‬مسائل طراحی اصلی برای ارسال پیام توزیع شده را درک کنید‪.‬‬

‫‪ -‬مسائل طراحی اصلی برای فراخوانی روش از راه دور را درک کنید‪.‬‬

‫‪ -‬مسائل طراحی اصلی برای خوشه ها را درک کنید‪.‬‬

‫‪ -‬مکانیسم های کالستر را در ویندوز ‪ 7‬و ‪ Beowulf‬توضیح دهید‪.‬‬

‫در این فصل‪ ،‬ما با بررسی برخی از مفاهیم کلیدی در نرم افزارهای توزیع شده‪ ،‬از جمله معماری سرویس گیرنده‪/‬سرور‪ ،‬ارسال‬
‫پیام و فراخوانی رویه از راه دور‪ ،‬شروع می کنیم‪ .‬سپس معماری خوشهای که اهمیت فزایندهای دارد را بررسی میکنیم‪.‬‬

‫فصل ‪ 17‬و ‪ 18‬بحث ما را در مورد سیستم های توزیع شده کامل می کند‪.‬‬

‫‪ 16.1‬محاسبات مشتری‪/‬سرور‬

‫مفهوم محاسبات مشتری‪/‬سرور و مفاهیم مرتبط‪ ،‬در سیستم های فناوری اطالعات اهمیت فزاینده ای پیدا کرده است‪ .‬این بخش‬
‫با توضیح ماهیت کلی محاسبات مشتری‪/‬سرور آغاز می شود‪ .‬این با بحث در مورد روش های جایگزین سازماندهی عملکرد‬
‫مشتری‪/‬سرور دنبال می شود‪ .‬سپس موضوع سازگاری حافظه پنهان فایل‪ ،‬که با استفاده از سرورهای فایل مطرح می شود‪ ،‬مورد‬
‫بررسی قرار می گیرد‪ .‬در نهایت‪ ،‬این بخش به معرفی مفهوم میان افزار می پردازد‪.‬‬

‫محاسبات مشتری‪/‬سرور چیست؟‬

‫مانند سایر امواج جدید در زمینه کامپیوتر‪ ،‬محاسبات مشتری‪/‬سرور با مجموعه ای از کلمات اصطالحات خاص خود همراه است‪.‬‬
‫جدول ‪ 16.1‬برخی از اصطالحاتی را که معموالً در توضیحات محصوالت و برنامه های کاربردی سرویس گیرنده‪/‬سرور یافت می‬
‫شوند فهرست می کند‪.‬‬

‫شکل ‪ 16.1‬تالش می کند تا ماهیت مفهوم مشتری‪/‬سرور را به تصویر بکشد‪ .‬همانطور که از اصطالح نشان می دهد‪ ،‬یک محیط‬
‫کالینت‪/‬سرور توسط کالینت ها و سرورها پر شده است‪ .‬ماشینهای سرویس گیرنده معموالً رایانههای شخصی یا ایستگاههای‬
‫کاری تک کاربره هستند که یک رابط کاربری بسیار کاربرپسند را برای کاربر نهایی فراهم میکنند‪ .‬ایستگاه مبتنی بر مشتری به‬
‫طور کلی نوع رابط گرافیکی را ارائه می دهد که برای کاربران راحت تر است‪ ،‬از جمله استفاده از ویندوز و ماوس‪Microsoft .‬‬
‫‪797‬‬
‫سیستم عامل های داخلی و اصول طراحی‪798.........................................................................................................................‬‬

‫‪ Windows‬و ‪ Macintosh OS‬نمونه هایی از این رابط ها را ارائه می دهند‪ .‬برنامه های کاربردی مبتنی بر مشتری برای‬
‫سهولت استفاده طراحی شده اند و شامل ابزارهای آشنا مانند صفحه گسترده هستند‪.‬‬

‫هر سرور در محیط کالینت‪/‬سرور مجموعه ای از خدمات مشترک را به مشتریان ارائه می دهد‪ .‬رایج ترین نوع سرور در حال‬
‫حاضر سرور پایگاه داده است که معموالً یک پایگاه داده رابطه ای را کنترل می کند‪ .‬سرور بسیاری از مشتریان را قادر می سازد‬
‫تا دسترسی به یک پایگاه داده را به اشتراک بگذارند و استفاده از یک سیستم کامپیوتری با کارایی باال را برای مدیریت پایگاه‬
‫داده امکان پذیر می سازد‪.‬‬

‫جدول ‪ 16.1‬اصطالحات مشتری‪/‬سرور‬

‫رابط برنامه نویسی برنامه ها)‪(API‬‬


‫مجموعه ای از برنامه های کاربردی و فراخوانی که به کالینت ها و سرورها اجازه می دهد تا با یکدیگر ارتباط برقرار‬
‫کنند‪.‬‬
‫مشتری‬
‫یک درخواست کننده اطالعات شبکه ای‪ ،‬معموالً یک رایانه شخصی یا ایستگاه کاری‪ ،‬که می تواند پایگاه داده و‪/‬یا‬
‫سایر اطالعات را از یک سرور جستجو کند‪.‬‬
‫میان افزار‬
‫مجموعهای از درایورها‪API ،‬ها یا نرمافزارهای دیگر که ارتباط بین برنامههای کالینت و سرور را بهبود میبخشد‪.‬‬
‫پایگاه داده رابطه ای‬
‫پایگاه داده ای که در آن دسترسی به اطالعات محدود به انتخاب ردیف هایی است که تمام معیارهای جستجو را‬
‫برآورده می کند‪.‬‬
‫سرور‬
‫یک رایانه‪ ،‬معموالً یک ایستگاه کاری پرقدرت‪ ،‬یک مینی رایانه یا یک رایانه بزرگ‪ ،‬که اطالعات را برای دستکاری‬
‫مشتریان شبکه در خود جای می دهد‪.‬‬
‫زبان جستجوی ساختاریافته)‪(SQL‬‬
‫زبانی که توسط ‪ IBM‬توسعه یافته و توسط ‪ ANSI‬برای آدرسدهی‪ ،‬ایجاد‪ ،‬بهروزرسانی یا جستجو در پایگاههای‬
‫داده رابطهای استاندارد شده است‪.‬‬

‫عالوه بر کالینت ها و سرورها‪ ،‬سومین عنصر ضروری محیط کالینت‪/‬سرور‪ ،‬شبکه است‪ .‬محاسبات مشتری‪/‬سرور معموالً‬
‫محاسبات توزیع شده است‪ .‬کاربران‪ ،‬برنامهها و منابع در پاسخ به نیازهای تجاری توزیع شده و توسط یک شبکه ‪ LAN‬یا‬
‫‪ WAN‬یا توسط اینترنت شبکهها به هم متصل میشوند‪.‬‬

‫‪798‬‬
‫سیستم عامل های داخلی و اصول طراحی‪799.........................................................................................................................‬‬

‫شکل ‪ 16.1‬محیط کلی مشتری‪/‬سرور‬

‫چگونه پیکربندی مشتری‪/‬سرور با هر راه حل پردازش توزیع شده دیگری متفاوت است؟ تعدادی ویژگی وجود دارد که برجسته‬
‫میشوند و با هم‪ ،‬مشتری‪/‬سرور را از دیگر انواع پردازش توزیع شده متمایز میکنند‪:‬‬

‫‪ r‬وابستگی زیادی به ارائه برنامه های کاربردی کاربر پسند برای کاربر در سیستم او وجود دارد‪ .‬این به کاربر کنترل زیادی بر‬
‫زمان و سبک استفاده از رایانه می دهد و به مدیران سطح بخش این توانایی را می دهد که به نیازهای محلی خود پاسخ دهند‪.‬‬

‫گرچه برنامه های کاربردی پراکنده هستند‪ ،‬تاکید بر متمرکز کردن پایگاه های داده شرکتی و بسیاری از مدیریت شبکه و توابع‬
‫سودمند وجود دارد‪ .‬این امر مدیریت شرکت را قادر میسازد تا کنترل کلی سرمایهگذاری کل در سیستمهای محاسباتی و‬
‫اطالعاتی را حفظ کند و قابلیت همکاری را فراهم کند تا سیستمها به هم متصل شوند‪ .‬در عین حال‪ ،‬بخشها و بخشها را از‬
‫بسیاری از هزینههای سربار نگهداری تسهیالت پیچیده مبتنی بر رایانه خالص میکند‪ ،‬اما آنها را قادر میسازد تقریباً هر نوع‬
‫ماشین و رابطی را که برای دسترسی به دادهها و اطالعات نیاز دارند‪ ،‬انتخاب کنند‪.‬‬

‫‪ r‬تعهدی هم از سوی سازمان های کاربر و هم فروشندگان به سیستم های باز و مدوالر وجود دارد‪ .‬این بدان معناست که کاربر‬
‫در انتخاب محصوالت و اختالط تجهیزات از تعدادی فروشنده حق انتخاب بیشتری دارد‪.‬‬

‫‪ r‬شبکه برای عملیات اساسی است‪ .‬بنابراین مدیریت شبکه و امنیت شبکه در سازماندهی و راه اندازی سیستم های اطالعاتی از‬
‫اولویت باالیی برخوردار است‪.‬‬

‫برنامه های کاربردی مشتری‪/‬سرور‬

‫ویژگی کلیدی معماری کالینت‪/‬سرور‪ ،‬تخصیص وظایف در سطح برنامه بین کالینت ها و سرورها است‪ .‬شکل ‪ 16.2‬حالت کلی را‬
‫نشان می دهد‪ .‬البته هم در کالینت و هم در سرور‪ ،‬نرم افزار اصلی یک سیستم عامل است که بر روی پلت فرم سخت افزاری‬
‫اجرا می شود‪ .‬پلتفرم ها و سیستم عامل های مشتری و سرور ممکن است متفاوت باشند‪.‬‬

‫‪799‬‬
‫سیستم عامل های داخلی و اصول طراحی‪800.........................................................................................................................‬‬

‫در واقع‪ ،‬ممکن است انواع مختلفی از پلتفرمها و سیستمعاملهای کالینت و تعدادی از انواع مختلف پلتفرم سرور در یک محیط‬
‫واحد وجود داشته باشد‪ .‬تا زمانی که یک کالینت و سرور خاص پروتکل های ارتباطی یکسانی را به اشتراک می گذارند و از‬
‫برنامه های مشابه پشتیبانی می کنند‪ ،‬این تفاوت های سطح پایین بی ربط هستند‪.‬‬
‫ایستگاه کاری مشتری‬

‫خدمات ارائه‬ ‫سرور‬


‫درخواست‬

‫منطق برنامه (بخش‬ ‫منطق برنامه (بخش‬


‫مشتری)‬ ‫سرور)‬
‫واکنش‬
‫نرم افزارهای ارتباطی‬ ‫نرم افزارهای ارتباطی‬
‫تعامل‬
‫سیستم عامل مشتری‬ ‫پروتکل‬
‫سیستم عامل سرور‬

‫پلت فرم سخت افزاری‬ ‫پلت فرم سخت افزاری‬

‫شکل ‪ 16.2‬معماری کلی مشتری‪/‬سرور‬

‫این نرم افزار ارتباطی است که مشتری و سرور را قادر می سازد تا با یکدیگر همکاری کنند‪ .‬مثال اصلی چنین نرم افزاری‬
‫‪ TCP/IP‬است‪ .‬البته هدف همه این نرم افزارهای پشتیبانی ارتباطات و سیستم عامل فراهم کردن بستری برای اپلیکیشن های‬
‫توزیع شده است‪ .‬در حالت ایده آل‪ ،‬عملکردهای واقعی انجام شده توسط برنامه را می توان بین کالینت و سرور به گونه ای‬
‫تقسیم کرد که استفاده از منابع را بهینه کند‪ .‬در برخی موارد‪ ،‬بسته به نیاز برنامه‪ ،‬بخش عمده ای از نرم افزارهای کاربردی در‬
‫سرور اجرا می شوند‪ ،‬در حالی که در موارد دیگر‪ ،‬بیشتر منطق برنامه در مشتری قرار دارد‪.‬‬

‫یک عامل اساسی در موفقیت یک محیط کالینت‪/‬سرور‪ ،‬نحوه تعامل کاربر با سیستم به عنوان یک کل است‪ .‬بنابراین‪ ،‬طراحی‬
‫رابط کاربری در دستگاه مشتری بسیار مهم است‪ .‬در اکثر سیستم های سرویس گیرنده‪/‬سرور‪ ،‬تاکید زیادی بر ارائه یک رابط‬
‫کاربری گرافیکی ‪GUI‬است که استفاده از آن آسان‪ ،‬یادگیری آسان‪ ،‬در عین حال قدرتمند و انعطاف پذیر باشد‪ .‬بنابراین‪ ،‬ما‬
‫میتوانیم به یک ماژول خدمات ارائه در ایستگاه کاری مشتری فکر کنیم که مسئول ارائه یک رابط کاربر پسند برای برنامههای‬
‫کاربردی توزیع شده موجود در محیط است‪.‬‬

‫برنامه های کاربردی پایگاه داده به عنوان مثالی که مفهوم تقسیم منطق برنامه بین کالینت و سرور را نشان می دهد‪ ،‬اجازه دهید‬
‫یکی از رایج ترین خانواده های برنامه های کاربردی کالینت‪/‬سرور را در نظر بگیریم‪ :‬آنهایی که از پایگاه های داده رابطه ای‬

‫‪800‬‬
‫سیستم عامل های داخلی و اصول طراحی‪801.........................................................................................................................‬‬

‫استفاده می کنند‪ .‬در این محیط‪ ،‬سرور در اصل یک سرور پایگاه داده است‪ .‬تعامل بین کالینت و سرور به صورت تراکنش هایی‬
‫است که در آن کالینت درخواست پایگاه داده را می دهد و پاسخ پایگاه داده را دریافت می کند‪.‬‬

‫شکل ‪ 16.3‬به طور کلی معماری چنین سیستمی را نشان می دهد‪ .‬سرور وظیفه نگهداری پایگاه داده را بر عهده دارد که برای‬
‫این منظور به یک ماژول نرم افزاری سیستم مدیریت پایگاه داده پیچیده نیاز است‪ .‬انواع برنامه های کاربردی مختلف که از پایگاه‬
‫داده استفاده می کنند را می توان در ماشین های مشتری قرار داد‪« .‬چسب» که کالینت و سرور را به هم متصل میکند‪،‬‬
‫نرمافزاری است که مشتری را قادر میسازد برای دسترسی به پایگاه داده سرور درخواست کند‪ .‬یک مثال محبوب از چنین‬
‫منطقی‪ ،‬زبان پرس و جو ساخت یافته ‪SQL‬است‪.‬‬
‫ایستگاه کاری مشتری‬

‫خدمات ارائه‬

‫سرور‬
‫منطق کاربردی‬
‫درخواست‬
‫منطق پایگاه داده‬ ‫منطق پایگاه داده‬
‫واکنش‬
‫نرم افزارهای ارتباطی‬ ‫نرم افزارهای ارتباطی‬ ‫سامانه ی مدیریت پایگاه‬
‫داده‬
‫تعامل پروتکل‬
‫سیستم عامل سرور‬
‫سیستم عامل مشتری‬

‫پلت فرم سخت افزاری‬ ‫پلت فرم سخت افزاری‬

‫شکل ‪ 16.3‬معماری سرویس گیرنده‪/‬سرور برای برنامه های کاربردی پایگاه داده‬

‫شکل ‪ 16.3‬نشان می دهد که تمام منطق برنامه ‪ -‬نرم افزار برای "تخریب اعداد" یا انواع دیگر تجزیه و تحلیل داده ها ‪ -‬در‬
‫سمت مشتری است‪ ،‬در حالی که سرور فقط به مدیریت پایگاه داده می پردازد‪ .‬مناسب بودن چنین پیکربندی به سبک و هدف‬
‫برنامه بستگی دارد‪ .‬به عنوان مثال‪ ،‬فرض کنید که هدف اصلی فراهم کردن دسترسی آنالین برای جستجوی رکورد است‪ .‬شکل‬
‫‪ a16.4‬نشان می دهد که چگونه این ممکن است کار کند‪ .‬فرض کنید که سرور یک پایگاه داده از ‪ 1‬میلیون رکورد که در‬
‫اصطالح پایگاه داده رابطهای ردیف نامیده میشود را نگهداری میکند و کاربر میخواهد جستجویی را انجام دهد که منجر به‬
‫صفر‪ ،‬یک یا حداکثر چند رکورد شود‪ .‬کاربر می تواند این رکوردها را با استفاده از تعدادی معیار جستجو جستجو کند به عنوان‬
‫مثال‪ ،‬سوابق قدیمی تر از ‪ ،1992‬سوابق مربوط به افراد در اوهایو‪ ،‬سوابق مربوط به یک رویداد یا ویژگی خاص‪ ،‬و غیره‪ .‬یک پرس‬
‫و جو اولیه مشتری ممکن است یک پاسخ سرور به دست دهد که ‪ 100000‬رکورد وجود دارد که معیارهای جستجو را برآورده‬

‫‪801‬‬
‫سیستم عامل های داخلی و اصول طراحی‪802.........................................................................................................................‬‬

‫می کند‪ .‬سپس کاربر واجد شرایط اضافی اضافه می کند و یک درخواست جدید صادر می کند‪ .‬این بار‪ ،‬پاسخی مبنی بر وجود‬
‫‪ 1000‬رکورد احتمالی برگردانده می شود‪ .‬در نهایت‪ ،‬مشتری درخواست سوم را با واجد شرایط اضافی صادر می کند‪ .‬معیارهای‬
‫جستجوی حاصل یک تطابق را به دست میآورند و رکورد به مشتری بازگردانده میشود‪.‬‬

‫(الف) استفاده مطلوب‬


‫از مشتری‪/‬سرور‬

‫(ب) استفاده نادرست‬


‫از مشتری‪/‬سرور‬

‫شکل ‪ 16.4‬استفاده از پایگاه داده مشتری‪/‬سرور‬

‫برنامه قبلی به دو دلیل برای معماری مشتری‪/‬سرور مناسب است‪:‬‬

‫‪ .1‬کار گسترده ای برای مرتب سازی و جستجو در پایگاه داده وجود دارد‪ .‬این به یک دیسک یا بانک بزرگ از دیسک ها‪ ،‬یک‬
‫‪ CPU‬با سرعت باال و یک معماری ورودی‪/‬خروجی با سرعت باال نیاز دارد‪ .‬چنین ظرفیت و توانی مورد نیاز نیست و برای یک‬
‫ایستگاه کاری تک کاربره یا رایانه شخصی بسیار گران است‪.‬‬

‫‪ .2‬برای انتقال کل فایل رکورد ‪ 1‬میلیونی به مشتری برای جستجو‪ ،‬بار ترافیکی زیادی روی شبکه ایجاد می کند‪ .‬بنابراین‪ ،‬برای‬
‫سرور کافی نیست که فقط بتواند رکوردها را از طرف یک کالینت بازیابی کند‪ .‬سرور باید منطق پایگاه داده ای داشته باشد که‬
‫آن را قادر می سازد از طرف یک کالینت جستجوها را انجام دهد‪.‬‬

‫حال سناریوی شکل ‪ b16.4‬را در نظر بگیرید که دارای همان پایگاه داده ‪ 1‬میلیون رکوردی است‪ .‬در این مورد‪ ،‬یک پرس و جو‬
‫منجر به انتقال ‪ 300000‬رکورد از طریق شبکه می شود‪ .‬برای مثال‪ ،‬اگر کاربر بخواهد مقدار کل یا میانگین یک زمینه را در‬
‫بسیاری از رکوردها یا حتی کل پایگاه داده پیدا کند‪ ،‬ممکن است این اتفاق بیفتد‪.‬‬

‫واضح است که این سناریوی اخیر غیرقابل قبول است‪ .‬یک راه حل برای این مشکل‪ ،‬که معماری سرویس گیرنده‪/‬سرور را با تمام‬
‫مزایای آن حفظ می کند‪ ،‬انتقال بخشی از منطق برنامه به سرور است‪ .‬یعنی سرور می تواند به منطق کاربردی برای انجام تجزیه‬
‫و تحلیل داده ها و همچنین بازیابی داده ها و جستجوی داده ها مجهز شود‪.‬‬

‫‪802‬‬
‫سیستم عامل های داخلی و اصول طراحی‪803.........................................................................................................................‬‬

‫کالس های برنامه های کاربردی مشتری‪/‬سرور در چارچوب کلی کالینت‪/‬سرور‪ ،‬طیفی از پیاده سازی ها وجود دارد که کار را بین‬
‫کالینت و سرور به طور متفاوتی تقسیم می کند‪ .‬شکل ‪ 16.5‬به طور کلی برخی از گزینه های اصلی برای برنامه های کاربردی‬
‫پایگاه داده را نشان می دهد‪ .‬تقسیمبندیهای دیگر ممکن است‪ ،‬و گزینهها ممکن است ویژگیهای متفاوتی برای انواع دیگر‬
‫برنامهها داشته باشند‪ .‬در هر صورت‪ ،‬بررسی این رقم برای درک نوع مبادالت ممکن مفید است‪.‬‬

‫شکل ‪ 16.5‬چهار کالس را نشان می دهد‪:‬‬

‫‪ -‬پردازش مبتنی بر میزبان‪ :‬پردازش مبتنی بر میزبان‪ ،‬محاسبات مشتری‪/‬سرور واقعی نیست‪ ،‬زیرا این اصطالح معموالً استفاده‬
‫می شود‪ .‬در عوض‪ ،‬پردازش مبتنی بر میزبان به محیط مرکزی مرکزی سنتی که در آن تمام یا تقریباً تمام پردازش ها بر روی‬
‫یک میزبان مرکزی انجام می شود‪ ،‬اشاره دارد‪ .‬اغلب رابط کاربری از طریق یک ترمینال گنگ است‪ .‬حتی اگر کاربر از یک‬
‫میکروکامپیوتر استفاده کند‪ ،‬ایستگاه کاربر به طور کلی به نقش شبیه ساز ترمینال محدود می شود‪.‬‬

‫‪ -‬پردازش مبتنی بر سرور‪ :‬ابتدایی ترین کالس پیکربندی کالینت‪/‬سرور‪ ،‬کالسی است که در آن کالینت مسئول اصلی ارائه یک‬
‫رابط کاربری گرافیکی است‪ ،‬در حالی که تقریباً تمام پردازش ها روی سرور انجام می شود‪ .‬این پیکربندی نمونه ای از تالش های‬
‫اولیه مشتری‪/‬سرور‪ ،‬به ویژه سیستم های سطح دپارتمان است‪ .‬منطق پشت چنین پیکربندیهایی این است که ایستگاه کاری‬
‫کاربر برای ارائه یک رابط کاربر پسند مناسب است و پایگاههای داده و برنامههای کاربردی را میتوان به راحتی در سیستمهای‬
‫مرکزی نگهداری کرد‪ .‬اگرچه کاربر مزیت یک رابط بهتر را به دست می آورد‪ ،‬این نوع پیکربندی به طور کلی به هیچ دستاورد‬
‫قابل توجهی در بهره وری یا تغییرات اساسی در عملکردهای تجاری واقعی که سیستم پشتیبانی می کند‪ ،‬نمی دهد‪.‬‬

‫‪803‬‬
‫سیستم عامل های داخلی و اصول طراحی‪804.........................................................................................................................‬‬
‫مشتری‬ ‫سرور‬

‫(الف) پردازش مبتنی بر میزبان‬

‫(ب) پردازش مبتنی بر سرور‬

‫ج) پردازش تعاونی‬

‫(د) پردازش مبتنی بر مشتری‬

‫شکل ‪ 16.5‬کالس های برنامه های کاربردی مشتری‪/‬سرور‬

‫‪ -‬پردازش مبتنی بر مشتری‪ :‬از طرف دیگر‪ ،‬تقریباً تمام پردازش های برنامه ممکن است در مشتری انجام شود‪ ،‬به استثنای روال‬
‫های اعتبارسنجی داده ها و سایر توابع منطق پایگاه داده که به بهترین وجه در سرور انجام می شوند‪ .‬به طور کلی‪ ،‬برخی از توابع‬
‫منطقی پایگاه داده پیچیده تر در سمت مشتری قرار می گیرند‪ .‬این معماری شاید رایج ترین رویکرد مشتری‪/‬سرور در استفاده‬
‫فعلی باشد‪ .‬این کاربر را قادر می سازد تا از برنامه های کاربردی متناسب با نیازهای محلی استفاده کند‪.‬‬

‫پردازش مشارکتی‪ :‬در پیکربندی پردازش مشارکتی‪ ،‬پردازش برنامه به شیوه ای بهینه انجام می شود و از نقاط قوت ماشین های‬
‫مشتری و سرور و توزیع داده ها بهره می برد‪ .‬چنین پیکربندی برای راهاندازی و نگهداری پیچیدهتر است‪ ،‬اما در درازمدت‪ ،‬این‬
‫نوع پیکربندی ممکن است نسبت به سایر روشهای سرویس گیرنده‪/‬سرور‪ ،‬سودهای بهرهوری کاربر و کارایی شبکه بیشتری را‬
‫ارائه دهد‪.‬‬

‫شکل های ‪ c16.5‬و ‪ d16.5‬مربوط به پیکربندی هایی است که در آن بخش قابل توجهی از بار روی مشتری است‪ .‬این مدل به‬
‫اصطالح کالینت چربی توسط ابزارهای توسعه اپلیکیشن مانند ‪PowerBuilder's Sybase Inc.‬و ‪ SQL Windows‬از‬
‫‪Gupta Corp.‬رایج شده است‪ .‬برنامههای توسعهیافته با این ابزارها معموالً حوزهای هستند‪ .‬مزیت اصلی مدل ‪ fat Client‬این‬
‫است که از قدرت دسکتاپ استفاده می کند‪ ،‬پردازش برنامه ها را از سرورها تخلیه می کند و آنها را کارآمدتر می کند و احتمال‬
‫ایجاد گلوگاه را کاهش می دهد‪.‬‬

‫‪804‬‬
‫سیستم عامل های داخلی و اصول طراحی‪805.........................................................................................................................‬‬

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

‫شکل ‪ b16.5‬نشان دهنده رویکرد تین کالینت است‪ .‬این رویکرد تقریباً رویکرد سنتی میزبان محور را تقلید می کند و اغلب‬
‫مسیر مهاجرت برای توسعه برنامه های کاربردی در سطح شرکت از پردازنده مرکزی به یک محیط توزیع شده است‪.‬‬

‫معماری مشتری‪/‬سرور سه الیه معماری سنتی سرویس گیرنده‪/‬سرور شامل دو سطح یا الیه است‪ :‬یک ردیف مشتری و یک ردیف‬
‫سرور‪ .‬یک معماری سه الیه نیز رایج است شکل ‪ .16.6‬در این معماری‪ ،‬نرم افزار کاربردی بین سه نوع ماشین توزیع می شود‪:‬‬
‫یک ماشین کاربر‪ ،‬یک سرور میانی و یک سرور پشتیبان‪ .‬ماشین کاربر ماشین مشتری است که ما در مورد آن بحث کرده ایم و‬
‫در مدل سه الیه‪ ،‬معموال یک تین کالینت است‪ .‬ماشینهای سطح متوسط اساساً دروازهای بین مشتریان نازک کاربر و انواع‬
‫سرورهای پایگاه داده باطن هستند‪.‬‬

‫ماشین های سطح متوسط می توانند پروتکل ها و نقشه ها را از یک نوع کوئری پایگاه داده به نوع دیگر تبدیل کنند‪ .‬عالوه بر‬
‫این‪ ،‬ماشین های سطح متوسط می توانند نتایج منابع داده های مختلف را ادغام‪/‬ادغام کنند‪ .‬در نهایت‪ ،‬ماشین سطح متوسط می‬
‫تواند به عنوان دروازه ای بین برنامه های دسکتاپ و برنامه های کاربردی قدیمی با واسطه بین دو جهان عمل کند‪.‬‬

‫تعامل بین سرور سطح متوسط و سرور باطن نیز از مدل مشتری‪/‬سرور پیروی می کند‪ .‬بنابراین‪ ،‬سیستم الیه میانی هم به عنوان‬
‫مشتری و هم به عنوان سرور عمل می کند‪.‬‬

‫‪805‬‬
‫سیستم عامل های داخلی و اصول طراحی‪806.........................................................................................................................‬‬

‫مشتری‬

‫سرور میانی (سرور‬


‫برنامه)‬

‫سرورهای پشتیبان‬
‫(سرورهای داده)‬

‫شکل ‪ 16.6‬معماری مشتری‪/‬سرور سه الیه‬

‫سازگاری حافظه پنهان فایل هنگامی که از یک سرور فایل استفاده می شود‪ ،‬عملکرد ورودی‪/‬خروجی فایل می تواند به طور قابل‬
‫توجهی نسبت به دسترسی به فایل محلی به دلیل تاخیرهای تحمیل شده توسط شبکه کاهش یابد‪ .‬برای کاهش این جریمه‬
‫عملکرد‪ ،‬سیستمهای جداگانه میتوانند از حافظه پنهان فایل برای نگهداری پروندههایی که اخیراً به آنها دسترسی پیدا کردهاند‪،‬‬
‫استفاده کنند‪ .‬به دلیل اصل محلی بودن‪ ،‬استفاده از حافظه پنهان فایل محلی باید تعداد دسترسی های سرور راه دور را که باید‬
‫انجام شود کاهش دهد‪.‬‬

‫شکل ‪ 16.7‬یک مکانیسم توزیع شده معمولی برای ذخیره سازی فایل ها در میان مجموعه شبکه ای از ایستگاه های کاری را‬
‫نشان می دهد‪ .‬هنگامی که یک فرآیند به یک فایل دسترسی پیدا می کند‪ ،‬درخواست ابتدا به حافظه پنهان ایستگاه کاری‬
‫فرآیند "ترافیک فایل" ارائه می شود‪ .‬اگر در آنجا ارضا نشد‪ ،‬درخواست به دیسک محلی ارسال میشود‪ ،‬اگر فایل در آنجا ذخیره‬
‫شده باشد "ترافیک دیسک"‪ ،‬یا به یک سرور فایل‪ ،‬جایی که فایل در آن ذخیره میشود "ترافیک سرور"‪ .‬در سرور ابتدا کش‬
‫سرور مورد بازجویی قرار می گیرد و در صورت عدم وجود خطا‪ ،‬سپس به دیسک سرور دسترسی پیدا می کند‪ .‬رویکرد کش‬
‫دوگانه برای کاهش ترافیک ارتباطات کش گیرنده و ورودی‪/‬خروجی دیسک کش سرور استفاده می شود‪.‬‬

‫زمانی که کش ها همیشه حاوی کپی های دقیقی از داده های راه دور هستند‪ ،‬می گوییم که کش ها سازگار هستند‪ .‬زمانی که‬
‫دادههای راه دور تغییر میکنند و کپیهای کش محلی منسوخ مربوطه دور ریخته نمیشوند‪ ،‬ممکن است حافظههای پنهان‬
‫ناسازگار شوند‪ .‬این می تواند اتفاق بیفتد اگر یک مشتری فایلی را که توسط سایر کالینت ها نیز ذخیره شده است را تغییر دهد‪.‬‬

‫‪806‬‬
‫سیستم عامل های داخلی و اصول طراحی‪807.........................................................................................................................‬‬

‫سختی در واقع در دو سطح است‪ .‬اگر یک کالینت سیاستی را اتخاذ کند که فوراً هر گونه تغییر در فایل را به سرور بازنویسی‬
‫کند‪ ،‬هر کالینت دیگری که یک کپی کش از بخش مربوطه از فایل داشته باشد‪ ،‬داده های منسوخ خواهد داشت‪ .‬اگر کالینت‬
‫بازنویسی تغییرات روی سرور را به تأخیر بیندازد‪ ،‬مشکل حتی بدتر میشود‪.‬‬

‫در آن صورت‪ ،‬خود سرور نسخه منسوخ فایل را دارد و درخواستهای خواندن فایل جدید به سرور ممکن است دادههای منسوخ‬
‫را به دست آورند‪ .‬مشکل به روز نگه داشتن نسخه های کش محلی برای تغییرات در داده های راه دور به عنوان مشکل سازگاری‬
‫حافظه پنهان شناخته می شود‪.‬‬

‫شکل ‪ 16.7‬ذخیره سازی فایل های توزیع شده در ‪Sprite‬‬

‫سادهترین روش برای سازگاری حافظه پنهان استفاده از تکنیکهای قفل کردن فایل برای جلوگیری از دسترسی همزمان بیش از‬
‫یک مشتری به یک فایل است‪ .‬این امر ثبات را به قیمت عملکرد و انعطاف پذیری تضمین می کند‪ .‬یک رویکرد قدرتمندتر با‬
‫تسهیالت در ‪ Sprite NELS88, OUST88‬ارائه شده است‪ .‬هر تعداد از فرآیندهای راه دور ممکن است یک فایل را برای‬
‫خواندن باز کند و کش مشتری خود را ایجاد کند‪ .‬اما وقتی یک درخواست فایل باز به سرور درخواست دسترسی نوشتن می کند‬
‫و سایر فرآیندها فایل را برای دسترسی خواندن باز می کنند‪ ،‬سرور دو عمل انجام می دهد‪ .‬ابتدا به فرآیند نوشتن اطالع می دهد‬
‫که اگرچه ممکن است حافظه پنهان را حفظ کند‪ ،‬اما باید تمام بلوک های تغییر یافته را بالفاصله پس از به روز رسانی بازنویسی‬
‫کند‪ .‬حداکثر می تواند یک مشتری از این دست وجود داشته باشد‪ .‬دوم‪ ،‬سرور به تمام فرآیندهای خواندنی که فایل باز است‬
‫اطالع می دهد که فایل دیگر قابل ذخیره نیست‪.‬‬

‫میان افزار‬

‫توسعه و استقرار محصوالت کالینت‪/‬سرور از تالشها برای استانداردسازی تمام جنبههای محاسبات توزیعشده‪ ،‬از الیه فیزیکی‬
‫گرفته تا الیه کاربردی‪ ،‬پیشی گرفته است‪ .‬این فقدان استانداردها‪ ،‬اجرای یک پیکربندی مشتری‪/‬سرور یکپارچه‪ ،‬چند فروشنده‪،‬‬

‫‪807‬‬
‫سیستم عامل های داخلی و اصول طراحی‪808.........................................................................................................................‬‬

‫در سطح سازمانی را دشوار می کند‪ .‬از آنجا که بسیاری از مزایای رویکرد مشتری‪/‬سرور با ماژوالر بودن و توانایی ترکیب و تطبیق‬
‫پلتفرمها و برنامهها برای ارائه راهحل تجاری مرتبط است‪ ،‬این مشکل قابلیت همکاری باید حل شود‪.‬‬

‫برای دستیابی به مزایای واقعی رویکرد مشتری‪/‬سرور‪ ،‬توسعهدهندگان باید مجموعهای از ابزارها را داشته باشند که ابزار و سبک‬
‫یکنواختی را برای دسترسی به منابع سیستم در همه پلتفرمها فراهم کند‪ .‬این برنامهنویسان را قادر میسازد تا برنامههایی بسازند‬
‫که نه تنها در رایانههای شخصی و ایستگاههای کاری مختلف ظاهر و احساس یکسانی داشته باشند‪ ،‬بلکه از روش یکسانی برای‬
‫دسترسی به دادهها بدون توجه به مکان آن دادهها استفاده میکنند‪.‬‬

‫متداولترین راه برای برآورده کردن این نیاز‪ ،‬استفاده از رابطها و پروتکلهای برنامهنویسی استاندارد است که بین برنامه باال و‬
‫نرمافزار ارتباطی و سیستم عامل زیر قرار میگیرند‪ .‬از این گونه رابط ها و پروتکل های استاندارد شده به عنوان میان افزار یاد می‬
‫شود‪ .‬با رابط های برنامه نویسی استاندارد‪ ،‬پیاده سازی یک برنامه مشابه بر روی انواع مختلف سرور و انواع ایستگاه های کاری‬
‫آسان است‪ .‬این بدیهی است که به نفع مشتری است‪ ،‬اما فروشندگان نیز برای ارائه چنین رابط هایی انگیزه دارند‪.‬‬

‫دلیل آن این است که مشتریان برنامه ها را خریداری می کنند‪ ،‬نه سرورها‪ .‬مشتریان فقط از بین محصوالت سروری که برنامه‬
‫های مورد نظر خود را اجرا می کنند انتخاب می کنند‪ .‬پروتکل های استاندارد شده برای پیوند دادن این رابط های سرور مختلف‬
‫به مشتریانی که نیاز به دسترسی به آنها دارند‪ ،‬مورد نیاز است‪.‬‬

‫بسته های میان افزاری متنوعی از بسیار ساده تا بسیار پیچیده را شامل می شود‪ .‬وجه مشترک همه آنها‪ ،‬توانایی پنهان کردن‬
‫پیچیدگی ها و نابرابری های پروتکل های شبکه و سیستم عامل های مختلف است‪ .‬فروشندگان سرویس گیرنده و سرور به طور‬
‫کلی تعدادی از بسته های میان افزار محبوب تر را به عنوان گزینه ارائه می کنند‪ .‬بنابراین‪ ،‬کاربر میتواند روی یک استراتژی‬
‫میانافزار خاص تصمیم بگیرد و سپس تجهیزاتی را از فروشندگان مختلفی که از آن استراتژی پشتیبانی میکنند‪ ،‬جمعآوری‬
‫کند‪.‬‬

‫معماری ‪ Middleware‬شکل ‪ 16.8‬نقش میان افزار را در معماری کالینت‪/‬سرور نشان می دهد‪ .‬نقش دقیق مؤلفه میانافزار به‬
‫سبک محاسبات مشتری‪/‬سرور مورد استفاده بستگی دارد‪ .‬با مراجعه به شکل ‪ ،16.5‬به یاد بیاورید که بسته به روشی که توابع‬
‫برنامه در آن تقسیم می شوند‪ ،‬چندین رویکرد مشتری‪/‬سرور مختلف وجود دارد‪ .‬در هر صورت‪ ،‬شکل ‪ 16.8‬یک ایده کلی خوب‬
‫از معماری درگیر ارائه می دهد‪.‬‬

‫توجه داشته باشید که میان افزار هر دو جزء کالینت و سرور وجود دارد‪ .‬هدف اصلی میانافزار این است که یک برنامه کاربردی‬
‫یا کاربر در یک کالینت را قادر سازد تا به خدمات مختلفی در سرورها دسترسی داشته باشد بدون اینکه نگران تفاوتهای میان‬
‫سرورها باشد‪ .‬برای بررسی یک منطقه کاربردی خاص‪ ،‬زبان پرس و جو ساختاریافته ‪SQL‬قرار است ابزار استاندارد شده ای‬
‫برای دسترسی به یک پایگاه داده رابطه ای توسط یک کاربر یا برنامه محلی یا راه دور فراهم کند‪ .‬با این حال‪ ،‬بسیاری از‬
‫‪808‬‬
‫سیستم عامل های داخلی و اصول طراحی‪809.........................................................................................................................‬‬

‫تولیدکنندگان پایگاه داده رابطهای‪ ،‬اگرچه از ‪ SQL‬پشتیبانی میکنند‪ ،‬پسوندهای اختصاصی خود را به ‪ SQL‬اضافه کردهاند‪.‬‬
‫این امر فروشندگان را قادر می سازد تا محصوالت خود را متمایز کنند اما ناسازگاری های بالقوه را نیز ایجاد می کند‪.‬‬

‫به عنوان مثال‪ ،‬یک سیستم توزیع شده را در نظر بگیرید که از جمله برای پشتیبانی از بخش پرسنل استفاده می شود‪ .‬دادههای‬
‫اولیه کارمندان‪ ،‬مانند نام و آدرس کارمند‪ ،‬ممکن است در پایگاه داده ‪ Gupta‬ذخیره شوند‪ ،‬در حالی که اطالعات حقوق ممکن‬
‫است در پایگاه داده ‪ Oracle‬موجود باشد‪ .‬هنگامی که یک کاربر در بخش پرسنل نیاز به دسترسی به سوابق خاص دارد‪ ،‬آن‬
‫کاربر نمی خواهد نگران این باشد که پایگاه داده فروشنده حاوی سوابق مورد نیاز است‪ Middleware .‬الیه ای از نرم افزار را‬
‫فراهم می کند که امکان دسترسی یکنواخت به این سیستم های متفاوت را فراهم می کند‪.‬‬

‫آموزنده است که به نقش میانافزار از دیدگاه منطقی و نه اجرایی نگاه کنیم‪ .‬این دیدگاه در شکل ‪ 16.9‬نشان داده شده است‪.‬‬
‫میان افزار تحقق وعده محاسبات مشتری‪/‬سرور توزیع شده را امکان پذیر می کند‪ .‬کل سیستم توزیع شده را می توان به عنوان‬
‫مجموعه ای از برنامه ها و منابع در دسترس کاربران مشاهده کرد‪ .‬کاربران نباید نگران مکان داده ها یا در واقع مکان برنامه ها‬
‫باشند‪ .‬همه برنامه ها روی یک رابط برنامه نویسی برنامه های کاربردی یکسان ‪API‬کار می کنند‪ .‬میانافزار که در تمام‬
‫پلتفرمهای کالینت و سرور برش میدهد‪ ،‬مسئول مسیریابی درخواستهای مشتری به سرور مناسب است‪.‬‬

‫اگرچه طیف گسترده ای از محصوالت میان افزاری وجود دارد‪ ،‬این محصوالت معموالً بر اساس یکی از دو مکانیسم اساسی‬
‫هستند‪ :‬ارسال پیام یا تماس های رویه از راه دور‪ .‬این دو روش در دو بخش بعدی بررسی می شوند‪.‬‬
‫ایستگاه کاری مشتری‬

‫خدمات ارائه‬

‫منطق کاربردی‬ ‫سرور‬

‫میان افزار‬ ‫میان افزار‬


‫تعامل میان افزار‬

‫نرم افزارهای ارتباطی‬ ‫نرم افزارهای ارتباطی‬ ‫خدمات کاربردی‬


‫تعامل پروتکل‬

‫سیستم عامل مشتری‬ ‫سیستم عامل سرور‬

‫پلت فرم سخت افزاری‬ ‫پلت فرم سخت افزاری‬

‫شکل ‪ 16.8‬نقش میانافزار در معماری کالینت‪/‬سرور‬

‫‪809‬‬
‫سیستم عامل های داخلی و اصول طراحی‪810.........................................................................................................................‬‬

‫کاربرد‬ ‫کاربرد‬

‫میان افزار (خدمات سیستم توزیع‬


‫شده)‬

‫شکل ‪ 16.9‬نمای منطقی میان افزار‬

‫‪ 16.2‬ارسال پیام توزیع شده‬

‫معموالً در سیستمهای پردازش توزیع شده این اتفاق میافتد که رایانهها از حافظه اصلی مشترک استفاده نمیکنند‪ .‬هر کدام یک‬
‫سیستم کامپیوتری مجزا هستند‪ .‬بنابراین‪ ،‬تکنیکهای ارتباط بین پردازندهای که بر حافظه مشترک متکی هستند‪ ،‬مانند‬
‫سمافورها‪ ،‬نمیتوانند استفاده شوند‪ .‬در عوض‪ ،‬از تکنیک هایی استفاده می شود که بر ارسال پیام تکیه دارند‪ .‬در این بخش و‬
‫بخش بعدی‪ ،‬ما به دو روش رایج نگاه می کنیم‪ .‬اولین مورد استفاده مستقیم از پیام ها است زیرا در یک سیستم واحد استفاده‬
‫می شود‪ .‬دومی یک تکنیک جداگانه است که بر ارسال پیام به عنوان یک تابع اساسی متکی است‪ :‬فراخوانی روش از راه دور‪.‬‬

‫شکل ‪ a16.10‬استفاده از ارسال پیام برای اجرای عملکرد سرویس گیرنده‪/‬سرور را نشان می دهد‪ .‬یک فرآیند مشتری به خدماتی‬
‫نیاز دارد به عنوان مثال‪ ،‬خواندن یک فایل‪ ،‬چاپ و پیامی حاوی درخواست سرویس را به یک فرآیند سرور ارسال می کند‪ .‬فرآیند‬
‫سرور به درخواست پاسخ می دهد و پیامی حاوی پاسخ ارسال می کند‪ .‬در ساده ترین شکل آن‪ ،‬تنها دو تابع مورد نیاز است‪:‬‬
‫ارسال و دریافت‪ .‬تابع ارسال یک مقصد را مشخص می کند و محتوای پیام را در بر می گیرد‪ .‬تابع ‪ Receive‬می گوید که از چه‬
‫کسی یک پیام مورد نظر است شامل "همه" و یک بافر در جایی که پیام دریافتی قرار است ذخیره شود فراهم می کند‪.‬‬

‫شکل ‪ 16.11‬پیاده سازی برای ارسال پیام را پیشنهاد می کند‪ .‬فرآیندها از خدمات یک ماژول ارسال پیام استفاده می کنند‪.‬‬
‫درخواست های سرویس را می توان بر حسب پارامترهای اولیه و پارامترها بیان کرد‪ .‬یک ‪ primitive‬تابعی را که باید انجام شود‬
‫را مشخص می کند و پارامترها برای انتقال داده و کنترل اطالعات استفاده می شوند‪ .‬شکل واقعی یک اولیه به نرم افزار ارسال‬

‫‪810‬‬
‫سیستم عامل های داخلی و اصول طراحی‪811.........................................................................................................................‬‬

‫پیام بستگی دارد‪ .‬ممکن است یک فراخوانی رویه باشد یا ممکن است خود پیامی به فرآیندی باشد که بخشی از سیستم عامل‬
‫است‪.‬‬

‫مشتری‬ ‫سرور‬

‫کاربرد‬ ‫کاربرد‬
‫میان افزار پیام گرا‬ ‫میان افزار پیام گرا‬
‫)با صف پیام(‬ ‫)با صف پیام(‬
‫حمل و نقل‬ ‫پیام های خاص برنامه‬
‫حمل و نقل‬
‫شبکه‬ ‫شبکه‬
‫(الف) میان افزار پیام گرا‬
‫مشتری‬ ‫سرور‬

‫کاربرد‬ ‫کاربرد‬

‫فراخوانی ها و برگرداندن رویه های‬


‫خاص برنامه‬ ‫انتقال‬
‫انتقال‬
‫شبکه‬ ‫شبکه‬
‫(ب) فراخوانی روش از راه دور‬
‫مشتری‬ ‫سرور‬

‫کاربرد‬

‫درخواست ها‬ ‫درخواست‬


‫انتقال‬ ‫و پاسخ های‬ ‫انتقال‬ ‫ها و پاسخ‬ ‫انتقال‬
‫شی‬ ‫های شی‬

‫شبکه‬ ‫شبکه‬ ‫شبکه‬

‫ج) کارگزار درخواست شی‬

‫شکل ‪ 16.10‬مکانیسم های میان افزار‬

‫‪ Send primitive‬توسط فرآیندی که می خواهد پیام را ارسال کند استفاده می شود‪ .‬پارامترهای آن شناسه فرآیند مقصد و‬
‫محتویات پیام است‪ .‬ماژول ارسال پیام یک واحد داده را می سازد که شامل این دو عنصر است‪ .‬این واحد داده با استفاده از نوعی‬
‫تسهیالت ارتباطی مانند ‪ TCP/IP‬به دستگاهی که فرآیند مقصد را میزبانی می کند ارسال می شود‪ .‬هنگامی که واحد داده در‬
‫سیستم هدف دریافت می شود‪ ،‬توسط تسهیالت ارتباطی به ماژول ارسال پیام هدایت می شود‪ .‬این ماژول زمینه شناسه فرآیند‬
‫را بررسی می کند و پیام را در بافر آن فرآیند ذخیره می کند‪.‬‬
‫‪811‬‬
‫سیستم عامل های داخلی و اصول طراحی‪812.........................................................................................................................‬‬

‫در این سناریو‪ ،‬فرآیند دریافت باید تمایل خود را برای دریافت پیام ها با تعیین یک ناحیه بافر و اطالع رسانی به ماژول ارسال‬
‫پیام توسط یک ‪ Receive primitive‬اعالم کند‪ .‬یک رویکرد جایگزین به چنین اعالمیه ای نیاز ندارد‪ .‬در عوض‪ ،‬هنگامی که‬
‫ماژول ارسال پیام پیامی را دریافت می کند‪ ،‬فرآیند مقصد را با نوعی سیگنال دریافت سیگنال می دهد و سپس پیام دریافتی را‬
‫در یک بافر مشترک در دسترس قرار می دهد‪ .‬چندین مسئله طراحی با ارسال پیام توزیع شده مرتبط است و در ادامه این بخش‬
‫به آنها پرداخته می شود‪.‬‬

‫قابلیت اطمینان در مقابل غیرقابل اعتماد بودن‬

‫یک مرکز قابل اعتماد برای ارسال پیام‪ ،‬در صورت امکان تحویل را تضمین می کند‪ .‬چنین تسهیالتی از یک پروتکل حمل و نقل‬
‫قابل اعتماد یا منطق مشابه استفاده می کند و بررسی خطا‪ ،‬تأیید‪ ،‬ارسال مجدد‪ ،‬و مرتب سازی مجدد پیام های نادرست را انجام‬
‫می دهد‪ .‬از آنجا که تحویل تضمین شده است‪ ،‬الزم نیست به فرآیند ارسال اطالع دهید که پیام تحویل داده شده است‪ .‬با این‬
‫حال‪ ،‬ممکن است مفید باشد که یک تأییدیه برای فرآیند ارسال ارائه دهید تا بداند که تحویل قبالً انجام شده است‪ .‬در هر‬
‫صورت‪ ،‬اگر تسهیالت به تحویل نرسد به عنوان مثال‪ ،‬خرابی مداوم شبکه‪ ،‬خرابی سیستم مقصد‪ ،‬فرآیند ارسال از شکست مطلع‬
‫می شود‪.‬‬

‫از سوی دیگر‪ ،‬تسهیالت ارسال پیام ممکن است به سادگی پیام را به شبکه ارتباطی ارسال کند‪ ،‬اما نه موفقیت و نه شکست را‬
‫گزارش میکند‪ .‬این جایگزین تا حد زیادی پیچیدگی و هزینه پردازش و ارتباطات تسهیالت ارسال پیام را کاهش می دهد‪ .‬برای‬
‫آن دسته از برنامههایی که نیاز به تأیید ارسال پیام دارند‪ ،‬خود برنامهها ممکن است از پیامهای درخواست و پاسخ برای برآورده‬
‫کردن این نیاز استفاده کنند‪.‬‬

‫فرآیند ارسال‬ ‫فرآیند دریافت‬

‫ماژول ارسال‬ ‫ماژول ارسال‬


‫پیام‬ ‫پیام‬

‫شکل ‪ 16.11‬پیام های اولیه‬

‫‪812‬‬
‫سیستم عامل های داخلی و اصول طراحی‪813.........................................................................................................................‬‬

‫مسدود کردن در مقابل غیر مسدود کردن‬

‫با موارد اولیه غیرمسدود یا ناهمزمان‪ ،‬فرآیندی در نتیجه صدور ارسال یا دریافت به حالت تعلیق در نمی آید‪ .‬بنابراین‪ ،‬هنگامی‬
‫که یک فرآیند یک ‪ Send primitive‬صادر می کند‪ ،‬سیستم عامل به محض اینکه پیام برای ارسال در صف قرار گرفت یا یک‬
‫کپی ساخته شد‪ ،‬کنترل را به فرآیند برمی گرداند‪ .‬در صورت عدم کپی کردن‪ ،‬هرگونه تغییری که در فرآیند ارسال پیام قبل از‬
‫ارسال یا حتی در حین ارسال آن ایجاد شده است‪ ،‬با خطر فرآیند ایجاد می شود‪.‬‬

‫هنگامی که پیام برای ارسال بعدی به مکانی امن منتقل یا کپی شد‪ ،‬فرآیند ارسال قطع میشود تا مطلع شود که بافر پیام ممکن‬
‫است دوباره استفاده شود‪ .‬به طور مشابه‪ ،‬یک دریافت غیرانسدادی توسط فرآیندی صادر میشود که سپس اجرا میشود‪ .‬وقتی‬
‫پیامی می رسد‪ ،‬فرآیند با وقفه مطلع می شود یا می تواند وضعیت را به صورت دوره ای نظرسنجی کند‪.‬‬

‫بدوی غیر مسدود کننده استفاده کارآمد و انعطاف پذیر از تسهیالت انتقال پیام توسط فرآیندها را فراهم می کند‪ .‬عیب این روش‬
‫این است که آزمایش و اشکال زدایی برنامه هایی که از این اولیه ها استفاده می کنند دشوار است‪ .‬سکانس های تکرار نشدنی و‬
‫وابسته به زمان می توانند مشکالت ظریف و دشواری ایجاد کنند‪.‬‬

‫جایگزین استفاده از مسدود کننده یا همزمان‪ ،‬ابتدایی است‪ .‬ارسال مسدودکننده‪ ،‬کنترل را به فرآیند ارسال باز نمیگرداند تا‬
‫زمانی که پیام ارسال شود سرویس غیرقابل اعتماد یا تا زمانی که پیام ارسال نشده و تأییدیه دریافت شود سرویس قابل اعتماد‪.‬‬
‫یک گیرنده مسدود کننده کنترل را باز نمی گرداند تا زمانی که یک پیام در بافر اختصاص داده شده قرار داده شود‪.‬‬

‫‪ 16.3‬تماس های رویه از راه دور‬

‫یک تغییر در مدل اصلی ارسال پیام‪ ،‬فراخوانی رویه از راه دور است‪ .‬این در حال حاضر یک روش پذیرفته شده و رایج برای‬
‫کپسوله کردن ارتباطات در یک سیستم توزیع شده است‪ .‬ماهیت این تکنیک این است که به برنامهها در ماشینهای مختلف‬
‫اجازه میدهد با استفاده از معنایی فراخوانی‪/‬بازگشت رویه ساده با هم تعامل داشته باشند‪ ،‬درست مثل اینکه دو برنامه روی یک‬
‫ماشین هستند‪ .‬یعنی فراخوانی رویه برای دسترسی به خدمات راه دور استفاده می شود‪ .‬محبوبیت این روش به دلیل مزایای زیر‬
‫است‪.‬‬

‫‪ .1‬فراخوانی رویه یک انتزاع پذیرفته شده‪ ،‬مورد استفاده و قابل درک است‪.‬‬

‫‪ .2‬استفاده از فراخوانی روش از راه دور‪ ،‬رابط های راه دور را قادر می سازد تا به عنوان مجموعه ای از عملیات نامگذاری شده با‬
‫انواع تعیین شده مشخص شوند‪ .‬بنابراین‪ ،‬رابط را می توان به وضوح مستند کرد و برنامه های توزیع شده را می توان به صورت‬
‫ایستا برای خطاهای نوع بررسی کرد‪.‬‬

‫‪813‬‬
‫سیستم عامل های داخلی و اصول طراحی‪814.........................................................................................................................‬‬

‫‪ .3‬از آنجا که یک رابط استاندارد و دقیقاً تعریف شده مشخص شده است‪ ،‬کد ارتباطی برای یک برنامه کاربردی می تواند به طور‬
‫خودکار تولید شود‪.‬‬

‫‪ .4‬از آنجا که یک رابط استاندارد و دقیقاً تعریف شده مشخص شده است‪ ،‬توسعه دهندگان می توانند ماژول های سرویس گیرنده‬
‫و سرور را بنویسند که می توانند با تغییرات و کدگذاری مجدد در بین رایانه ها و سیستم عامل ها جابجا شوند‪.‬‬

‫مکانیسم فراخوانی رویه از راه دور را می توان به عنوان اصالحی از ارسال پیام قابل اطمینان و مسدود کننده مشاهده کرد‪ .‬شکل‬
‫‪ b16.10‬معماری کلی را نشان می دهد و شکل ‪ 16.12‬نمای دقیق تری را ارائه می دهد‪.‬‬

‫درخواست‬ ‫برنامه سرور‬


‫مشتری‬ ‫از راه دور‬

‫پاسخ محلی‬ ‫پاسخ محلی‬

‫پاسخ محلی‬ ‫فراخوان رویه‬


‫محلی‬

‫برنامه یا سیستم‬ ‫تماس رویه از راه دور‬


‫عامل محلی‬

‫تماس رویه از راه دور‬

‫شکل ‪ 16.12‬مکانیسم تماس از راه دور‬

‫برنامه فراخوانی یک فراخوانی رویه معمولی با پارامترهای دستگاه خود برقرار می کند‪ .‬مثال‪،‬‬

‫نام روش ‪P‬‬

‫‪ X‬آرگومان ها را تصویب میکند‬

‫‪ 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.........................................................................................................................‬‬

‫لینک پیام پر سرعت‬

‫(الف) سرور آماده به کار بدون‬


‫دیسک مشترک‬

‫لینک پیام پر سرعت‬

‫(ب) دیسک مشترک‬

‫شکل ‪ 16.13‬تنظیمات خوشه‬

‫تصویر واضح تری از طیف رویکردهای خوشه بندی را می توان با نگاه کردن به گزینه های کاربردی به دست آورد‪ .‬یک مقاله‬
‫سفید از ‪ Hewlett Packard HP96‬یک طبقه بندی مفید در امتداد خطوط عملکردی ارائه می دهد جدول ‪ ،16.2‬که اکنون‬
‫در مورد آن بحث می کنیم‪.‬‬

‫یک روش معمول و قدیمیتر که به عنوان حالت آماده به کار غیرفعال شناخته میشود‪ ،‬این است که یک رایانه تمام بار پردازشی‬
‫را کنترل کند در حالی که رایانه دیگر غیرفعال میماند و در صورت خرابی اولیه آماده میشود‪ .‬برای هماهنگ کردن ماشینها‪،‬‬
‫سیستم فعال یا اولیه به صورت دورهای یک پیام "ضربان قلب" را به دستگاه آماده به کار ارسال میکند‪ .‬اگر دریافت این پیام ها‬
‫متوقف شود‪ ،‬در حالت آماده به کار فرض می شود که سرور اصلی از کار افتاده است و خود را به کار می اندازد‪ .‬این رویکرد‬
‫دسترسی را افزایش می دهد اما عملکرد را بهبود نمی بخشد‪.‬‬

‫عالوه بر این‪ ،‬اگر تنها اطالعاتی که بین دو سیستم رد و بدل میشود پیام ضربان قلب باشد‪ ،‬و اگر دو سیستم دیسک مشترک را‬
‫به اشتراک نگذارند‪ ،‬در حالت آماده به کار یک نسخه پشتیبان تهیه میکند اما به پایگاههای دادهای که توسط اصلی مدیریت‬
‫میشود دسترسی ندارد‪.‬‬

‫حالت آماده به کار غیرفعال معموالً به عنوان یک خوشه شناخته نمی شود‪ .‬اصطالح خوشه برای چندین رایانه به هم پیوسته که‬
‫همگی به طور فعال در حال پردازش هستند و در عین حال تصویر یک سیستم واحد را برای جهان خارج حفظ می کنند‪،‬‬
‫اختصاص دارد‪ .‬اصطالح ثانویه فعال اغلب در اشاره به این پیکربندی استفاده می شود‪ .‬سه طبقه بندی از خوشه بندی را می توان‬
‫شناسایی کرد‪ :‬سرورهای جداگانه‪ ،‬هیچ چیز مشترک و حافظه مشترک‪.‬‬
‫‪819‬‬
‫سیستم عامل های داخلی و اصول طراحی‪820.........................................................................................................................‬‬

‫جدول ‪ 16.2‬روش های خوشه بندی‪ :‬مزایا و محدودیت ها‬

‫روش خوشه بندی‬ ‫شرح‬ ‫فواید‬ ‫محدودیت ها‬

‫در صورت خرابی سرور آماده به کار غیرفعال‬ ‫پیاده سازی آسان‪.‬‬ ‫هزینه باال زیرا سرور‬
‫اولیه‪ ،‬سرور ثانویه‬ ‫ثانویه برای سایر‬
‫کنترل میشود‪.‬‬ ‫وظایف پردازشی در‬
‫دسترس نیست‪.‬‬

‫سرور ثانویه نیز برای ثانویه فعال‬ ‫کاهش هزینه زیرا‬ ‫افزایش پیچیدگی‬
‫پردازش وظایف‬ ‫سرورهای ثانویه می‬
‫استفاده می شود‪.‬‬ ‫توانند برای پردازش‬
‫استفاده شوند‪.‬‬

‫سرورهای مجزا‬ ‫در دسترس بودن باال‪ .‬سرورهای جداگانه‬ ‫سربار باالی شبکه و‬
‫دیسک های مخصوص‬ ‫سرور به دلیل عملیات‬
‫به خود را دارند‪ .‬داده‬ ‫کپی‪.‬‬
‫ها به طور مداوم از‬
‫سرور اصلی به سرور‬
‫ثانویه کپی می شوند‪.‬‬

‫کاهش سربار شبکه و سرورها به دیسک های سرورهای متصل به‬ ‫معموالً برای جبران‬
‫مشابه کابل می شوند‪ ،‬دیسک‬ ‫خطر خرابی دیسک به سرور به دلیل حذف‬
‫اما هر سرور دارای‬ ‫فناوری انعکاس دیسک عملیات کپی‪.‬‬
‫دیسک های خود است‪.‬‬ ‫یا ‪ 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: -‬این تابع به صورت دورهای وضعیت فرآیند و نتایج محاسبات میانی را ذخیره میکند تا امکان بازیابی‬
‫بازگشت پس از شکست فراهم شود‪.‬‬

‫‪Process migration: -‬این تابع تعادل بار را فعال می کند‪.‬‬

‫چهار مورد آخر در لیست قبلی در دسترس بودن خوشه را افزایش می دهد‪.‬‬

‫موارد باقی مانده مربوط به ارائه یک تصویر سیستم واحد است‪.‬‬

‫با بازگشت به شکل ‪ ،16.14‬یک خوشه همچنین شامل ابزارهای نرم افزاری برای فعال کردن اجرای کارآمد برنامه هایی است که‬
‫قادر به اجرای موازی هستند‪.‬‬
‫‪824‬‬
‫سیستم عامل های داخلی و اصول طراحی‪825.........................................................................................................................‬‬

‫خوشه ها در مقایسه با ‪SMP‬‬

‫هم خوشه ها و هم چند پردازنده های متقارن پیکربندی با چندین پردازنده برای پشتیبانی از برنامه های کاربردی با تقاضای باال‬
‫ارائه می کنند‪ .‬هر دو راه حل به صورت تجاری در دسترس هستند‪ ،‬اگرچه ‪ SMP‬مدت طوالنی تری وجود داشته است‪.‬‬

‫نقطه قوت اصلی رویکرد ‪ SMP‬این است که مدیریت و پیکربندی یک ‪ SMP‬نسبت به یک خوشه آسانتر است‪ SMP .‬بسیار‬
‫نزدیکتر به مدل اصلی تک پردازنده است که تقریباً همه برنامه ها برای آن نوشته شده اند‪.‬‬

‫تغییر اصلی مورد نیاز برای رفتن از یک پردازنده به یک ‪ SMP‬به تابع زمانبندی است‪ .‬یکی دیگر از مزایای ‪ SMP‬این است که‬
‫معموالً فضای فیزیکی کمتری را اشغال می کند و نسبت به خوشه های مشابه انرژی کمتری مصرف می کند‪ .‬آخرین مزیت مهم‬
‫این است که محصوالت ‪ SMP‬به خوبی تثبیت و پایدار هستند‪.‬‬

‫با این حال‪ ،‬در دراز مدت‪ ،‬مزایای رویکرد خوشهای احتماالً منجر به تسلط خوشهها بر بازار سرورهای با کارایی باال میشود‪.‬‬
‫خوشه ها از نظر مقیاس پذیری افزایشی و مطلق بسیار برتر از ‪ SMP‬ها هستند‪ .‬خوشه ها از نظر در دسترس بودن نیز برتر‬
‫هستند‪ ،‬زیرا همه اجزای سیستم به راحتی می توانند به شدت اضافی شوند‪.‬‬

‫‪WINDOWS CLUSTER Server 16.5‬‬

‫‪ Windows Failover Clustering‬یک خوشه مشترک هیچ چیز است که در آن هر حجم دیسک و سایر منابع در یک‬
‫زمان متعلق به یک سیستم واحد است‪.‬‬

‫طراحی کالستر ویندوز از مفاهیم زیر استفاده می کند‪:‬‬

‫‪Cluster Service: -‬مجموعه ای از نرم افزارها در هر گره که تمام فعالیت های خاص خوشه را مدیریت می کند‪.‬‬

‫‪ -‬منبع‪ :‬موردی که توسط سرویس خوشه مدیریت می شود‪ .‬همه منابع اشیایی هستند که منابع واقعی را در سیستم نشان می‬
‫دهند‪ ،‬از جمله دستگاه های سخت افزاری مانند درایوهای دیسک و کارت های شبکه و موارد منطقی مانند حجم دیسک‬
‫منطقی‪ ،‬آدرس های ‪ ،TCP/IP‬کل برنامه ها و پایگاه های داده‪.‬‬

‫‪ -‬آنالین‪ :‬به منبعی گفته می شود که در یک گره آنالین است‪ ،‬زمانی که در حال ارائه خدمات در آن گره خاص است‪.‬‬

‫‪-‬گروه ‪:‬مجموعه ای از منابع که به صورت واحد مدیریت می شوند‪ .‬معموالً یک گروه شامل تمام عناصر مورد نیاز برای اجرای یک‬
‫برنامه خاص و برای اتصال سیستم های مشتری به سرویس ارائه شده توسط آن برنامه است‪.‬‬

‫‪825‬‬
‫سیستم عامل های داخلی و اصول طراحی‪826.........................................................................................................................‬‬

‫مفهوم گروه از اهمیت ویژه ای برخوردار است‪ .‬یک گروه منابع را در واحدهای بزرگتر ترکیب می کند که به راحتی مدیریت می‬
‫شوند‪ ،‬هم برای خرابی و هم تعادل بار‪ .‬عملیات انجام شده روی یک گروه‪ ،‬مانند انتقال گروه به گره دیگر‪ ،‬به طور خودکار بر تمام‬
‫منابع آن گروه تأثیر می گذارد‪ .‬منابع به صورت کتابخانههای پیوندی پویا ‪DLL‬پیادهسازی میشوند و توسط یک مانیتور منبع‬
‫مدیریت میشوند‪ .‬مانیتور منبع از طریق فراخوانی روش از راه دور با سرویس خوشه تعامل می کند و به دستورات سرویس‬
‫خوشه برای پیکربندی و جابجایی گروه های منابع پاسخ می دهد‪.‬‬

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

‫ابزارهای مدیریت خوشه‬

‫خدمات خوشه‬
‫ای‬
‫مدیر به روز‬
‫رسانی جهانی‬
‫مدیر پایگاه داده‬
‫پردازنده رویداد‬ ‫مدیر گره‬

‫منبع برنامه‬ ‫مدیر ارتباطات‬ ‫سایر گره ها‬


‫‪DLL‬‬

‫مانیتورهای منابع‬
‫رابط مدیریت‬
‫منابع‬

‫منابع ‪DLL‬‬ ‫منبع منطقی‬ ‫منبع برنامه‬ ‫برنامه‬


‫فیزیکی‬ ‫‪DLL‬‬ ‫‪DLL‬‬ ‫ناآگاه‬

‫اپلیکیشن‬
‫خوشه ای‬

‫شکل ‪ 16.15‬دیاگرام بلوک سرور کالستر ویندوز‬

‫‪826‬‬
‫سیستم عامل های داخلی و اصول طراحی‪827.........................................................................................................................‬‬

‫مدیر پایگاه داده پیکربندی‪ ،‬پایگاه داده پیکربندی خوشه را حفظ می کند‪ .‬پایگاه داده حاوی اطالعاتی در مورد منابع و گروه ها و‬
‫مالکیت گره گروه ها است‪ .‬مدیران پایگاه داده در هر یک از گره های خوشه ای برای حفظ تصویری ثابت از اطالعات پیکربندی‬
‫همکاری می کنند‪ .‬نرم افزار تراکنش تحمل پذیر خطا برای اطمینان از اینکه تغییرات در پیکربندی کلی خوشه به طور مداوم و‬
‫صحیح انجام می شود استفاده می شود‪.‬‬

‫مدیر منبع‪/‬مدیر شکست تمام تصمیمات مربوط به گروه های منبع را می گیرد و اقدامات مناسبی مانند راه اندازی‪ ،‬تنظیم مجدد‬
‫و شکست را آغاز می کند‪ .‬هنگامی که به ‪ Failover‬نیاز است‪ ،‬مدیران ‪ failover‬در گره فعال برای مذاکره درباره توزیع‬
‫گروههای منبع از سیستم شکست خورده به سیستمهای فعال باقی مانده‪ ،‬همکاری میکنند‪ .‬هنگامی که یک سیستم پس از‬
‫خرابی راه اندازی مجدد می شود‪ ،‬مدیر ‪ failover‬می تواند تصمیم بگیرد که برخی از گروه ها را به این سیستم بازگرداند‪ .‬به‬
‫طور خاص‪ ،‬هر گروهی ممکن است با یک مالک ترجیحی پیکربندی شود‪ .‬اگر آن مالک شکست بخورد و سپس دوباره راه اندازی‬
‫شود‪ ،‬گروه در یک عملیات بازگشت به گره به گره بازگردانده می شود‪.‬‬

‫پردازشگر رویداد همه اجزای سرویس خوشه را به هم متصل می کند‪ ،‬عملیات مشترک را مدیریت می کند و مقدار دهی اولیه‬
‫سرویس خوشه را کنترل می کند‪ .‬مدیر ارتباطات‪ ،‬تبادل پیام را با سایر گره های خوشه مدیریت می کند‪ .‬مدیر به روز رسانی‬
‫جهانی سرویسی را ارائه می دهد که توسط سایر مؤلفه های داخل سرویس خوشه استفاده می شود‪.‬‬

‫مایکروسافت به ارسال محصول خوشهای خود ادامه میدهد‪ ،‬اما آنها همچنین راهحلهای مجازیسازی را بر اساس مهاجرت زنده‬
‫کارآمد ماشینهای مجازی بین ‪Hypervisor‬های در حال اجرا بر روی سیستمهای کامپیوتری مختلف به عنوان بخشی از‬
‫‪ Windows Server 2008 R2‬توسعه دادهاند‪ .‬برای برنامه های جدید‪ ،‬مهاجرت زنده مزایای زیادی را نسبت به رویکرد‬
‫خوشه ای ارائه می دهد‪ ،‬مانند مدیریت ساده تر و انعطاف پذیری بهبود یافته‪.‬‬

‫‪ 16.6‬خوشه ‪ BEOWULF‬و ‪LINUX‬‬

‫در سال ‪ ،1994‬پروژه ‪ Beowulf‬تحت حمایت پروژه محاسبات و ارتباطات با عملکرد باال ناسا ‪HPCC‬آغاز شد‪ .‬هدف آن‬
‫بررسی پتانسیل رایانه های شخصی خوشه ای برای انجام وظایف محاسباتی مهم فراتر از قابلیت های ایستگاه های کاری معاصر‬
‫با حداقل هزینه بود‪ .‬امروزه‪ ،‬رویکرد ‪ Beowulf‬به طور گسترده اجرا می شود و شاید مهم ترین فناوری خوشه ای موجود باشد‪.‬‬

‫ویژگی های ‪Beowulf‬‬

‫ویژگی های کلیدی ‪ Beowulf‬شامل موارد زیر است ‪RIDG97:‬‬

‫‪ -‬اجزای کاالهای بازار انبوه‬

‫‪827‬‬
‫سیستم عامل های داخلی و اصول طراحی‪828.........................................................................................................................‬‬

‫‪ -‬پردازنده های اختصاصی به جای حذف چرخه ها از ایستگاه های کاری بیکار‬

‫‪ -‬یک شبکه اختصاصی و خصوصی ‪ LAN‬یا ‪ WAN‬یا ترکیبی از اینترنت‬

‫‪ -‬بدون اجزای سفارشی‬

‫‪ -‬تکثیر آسان از چندین فروشنده‬

‫‪ - I/O‬مقیاس پذیر‬

‫‪ -‬یک پایگاه نرم افزاری رایگان در دسترس‬

‫‪ -‬استفاده از ابزارهای محاسباتی توزیع آزادانه با حداقل تغییرات‬

‫‪ -‬بازگشت طراحی و بهبودها به جامعه‬

‫اگرچه عناصر نرمافزار ‪ Beowulf‬بر روی پلتفرمهای مختلف پیادهسازی شدهاند‪ ،‬واضحترین انتخاب برای یک پایه لینوکس است‬
‫و اکثر پیادهسازیهای ‪ Beowulf‬از مجموعهای از ایستگاههای کاری لینوکس و‪/‬یا رایانههای شخصی استفاده میکنند‪.‬‬

‫شکل ‪ 16.16‬یک پیکربندی نماینده را نشان می دهد‪ .‬این خوشه از تعدادی ایستگاه کاری‪ ،‬شاید از پلتفرم های سخت افزاری‬
‫متفاوتی تشکیل شده است که همگی سیستم عامل لینوکس را اجرا می کنند‪ .‬ذخیره سازی ثانویه در هر ایستگاه کاری ممکن‬
‫است برای دسترسی توزیع شده برای اشتراک گذاری فایل توزیع شده‪ ،‬حافظه مجازی توزیع شده‪ ،‬یا موارد دیگر در دسترس‬
‫باشد‪ .‬گرههای خوشهای سیستمهای لینوکس با یک رویکرد شبکهای کاالیی‪ ،‬معموالً اترنت‪ ،‬به هم مرتبط هستند‪ .‬پشتیبانی‬
‫اترنت ممکن است به شکل یک سوئیچ اترنت منفرد یا مجموعه ای از سوئیچ ها به هم متصل باشد‪ .‬محصوالت اترنت کاال با نرخ‬
‫داده استاندارد ‪ 10‬مگابیت در ثانیه‪ 100 ،‬مگابیت در ثانیه‪ 1 ،‬گیگابیت در ثانیه استفاده می شود‪.‬‬

‫فضای ذخیره‬
‫سازی مشترک‬
‫توزیع شده‬
‫ایستگاه های کاری‬
‫لینوکس‬

‫شکل ‪ 16.16‬پیکربندی عمومی ‪Beowulf‬‬

‫‪828‬‬
‫سیستم عامل های داخلی و اصول طراحی‪829.........................................................................................................................‬‬

‫نرم افزار ‪Beowulf‬‬

‫محیط نرم افزار ‪ 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‬ارائه میکند که کاربر را قادر میسازد تا از انواع برنامههای‬
‫کاربردی با حداقل آموزش و سهولت نسبی بهرهبرداری کند‪ .‬سرورها از ابزارهای مشترک مانند سیستم های مدیریت پایگاه داده‬
‫پشتیبانی می کنند‪ .‬برنامه واقعی بین کالینت و سرور به گونه ای تقسیم می شود که هدف آن بهینه سازی سهولت استفاده و‬
‫عملکرد است‪.‬‬

‫مکانیسم کلیدی مورد نیاز در هر سیستم توزیع شده‪ ،‬ارتباطات بین فرآیندی است‪ .‬دو تکنیک رایج هستند‪ .‬یک تسهیالت ارسال‬
‫پیام‪ ،‬استفاده از پیام ها را در یک سیستم واحد تعمیم می دهد‪ .‬همان نوع قراردادها و قوانین همگام سازی اعمال می شود‪ .‬روش‬
‫دیگر استفاده از فراخوانی رویه از راه دور است‪ .‬این تکنیکی است که توسط آن دو برنامه در ماشینهای مختلف با استفاده از‬
‫دستور فراخوانی‪/‬بازگشت رویه و معنایی تعامل دارند‪ .‬هر دو برنامه فراخوانی و فراخوانی به گونه ای رفتار می کنند که انگار برنامه‬
‫شریک روی یک دستگاه اجرا می شود‪ .‬خوشه گروهی از کامپیوترهای به هم پیوسته و کامل است که به عنوان یک منبع‬
‫محاسباتی یکپارچه با هم کار می کنند و می توانند توهم یک ماشین بودن را ایجاد کنند‪ .‬واژه کل کامپیوتر به معنای سیستمی‬
‫است که می تواند جدا از خوشه به تنهایی کار کند‪.،‬‬

‫‪ 16.8‬خواندن توصیه می شود‬

‫یک نمای کلی خوب از فناوری میان افزار و محصوالت ‪BRIT04‬است‪MENA05 .‬مقایسه عملکرد فراخوانی رویه از راه دور‬
‫و ارسال پیام توزیع شده را فراهم می کند‪TANE85 .‬یک بررسی از سیستم عامل های توزیع شده است که هم ارتباطات‬
‫فرآیند توزیع شده و هم مدیریت فرآیند توزیع شده را پوشش می دهد‪CHAN90 .‬نمای کلی از سیستم عامل های ارسال پیام‬
‫توزیع شده را ارائه می دهد‪TAY90 .‬یک بررسی از رویکرد اتخاذ شده توسط سیستم عامل های مختلف در اجرای فراخوانی‬
‫روش از راه دور است‪ Beowulf .‬تحت پوشش ‪ RIDG97. Windows Cluster Server‬در ‪ SHOR97‬توضیح داده شده‬
‫است‪RAJA00 .‬درمان دقیق تری را ارائه می دهد‪LAI06 .‬بررسی دقیقی از معماری ‪ Thin Client‬ارائه می دهد‪.‬‬

‫‪830‬‬
‫سیستم عامل های داخلی و اصول طراحی‪831.........................................................................................................................‬‬

‫‪ 16.9‬اصطالحات کلیدی‪ ،‬سؤاالت و مشکالت را مرور کنید‬

‫شرایط کلیدی‬

‫رابط برنامه نویسی برنامه ها‬ ‫مشتری چربی شکست‬ ‫میان افزار پیام‬
‫خورده‬
‫خوشه مشتری‪Beowulf‬‬ ‫فراخوانی روش از راه دور‬
‫رابط کاربری گرافیکی‬ ‫‪RPC‬‬
‫ارسال پیام توزیع شده‬
‫سازگاری کش فایل‬ ‫تین کالینت سرور‬

‫رابط کاربری گرافیکی‬

‫بررسی سواالت‬

‫‪ .16.1‬محاسبات مشتری‪/‬سرور چیست؟‬

‫‪ .16.2‬چه چیزی محاسبات مشتری‪/‬سرور را از هر شکل دیگری از پردازش داده های توزیع شده متمایز می کند؟‬

‫‪ .16.3‬نقش یک معماری ارتباطی مانند ‪ TCP/IP‬در محیط کالینت‪/‬سرور چیست؟‬

‫‪ .16.4‬در مورد منطق مکان یابی برنامه ها در کالینت‪ ،‬سرور یا تقسیم بین مشتری و سرور بحث کنید‪.‬‬

‫‪ .16.5‬مشتریان چاق و مشتریان الغر چیست و چه تفاوت هایی در فلسفه این دو رویکرد وجود دارد؟‬

‫‪ .16.6‬نکات مثبت و منفی را برای استراتژی های مشتری چاق و مشتری الغر پیشنهاد دهید‪.‬‬

‫‪831‬‬
‫سیستم عامل های داخلی و اصول طراحی‪832.........................................................................................................................‬‬

‫‪ .16.7‬منطق پشت معماری مشتری‪/‬سرور سه الیه را توضیح دهید‪.‬‬

‫‪ .16.8‬میان افزار چیست؟‬

‫‪ .16.9‬چون استانداردهایی مانند ‪ TCP/IP‬داریم‪ ،‬چرا میان افزار مورد نیاز است؟‬

‫‪ .16.10‬برخی از مزایا و معایب انسداد و غیرانسداد اولیه را برای ارسال پیام فهرست کنید‪.‬‬

‫‪ .16.11‬برخی از مزایا و معایب اتصال غیرمداوم و پایدار برای ‪RPC‬ها را فهرست کنید‪.‬‬

‫‪ .16.12‬برخی از مزایا و معایب ‪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‬‬

You might also like