OS-HW2.pdf

‫به نام خدا‬
‫تمرین سری دوم درس سیستمهای عامل‬
‫دانشگاه صنعتی شریف – دانشکده مهندسی کامپیوتر‬
‫ترم اول سال تحصیلی ‪49-49‬‬
‫‪‬‬
‫‪‬‬
‫مهلت ارسال تمرین ها ‪ 21‬آذر ماه ساعت ‪ 15:94‬می باشد‪.‬‬
‫پاسخ تمرینات خود را به آدرس ‪ [email protected]‬ارسال نمایید‪ .‬دقت کنید که پاسخ ها تنها در قالب یک فایل ‪PDF‬‬
‫بوده و نام و عنوان ایمیل ارسالی با فرمت ‪ )88101111-HW2( StudentID-HW2‬ارسال گردد‪( .‬پاسخهایی که با این‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫فرمت ارسال نشوند در هنگاه تصحیح با مشکل مواجه خواهند شد‪).‬‬
‫ارسال پاسخها به ازای هر روز تاخیر شامل ‪ %19‬کسر نمره خواهد شد و بعد از چهار روز به آن نمرهای تعلق نمیگیرد‪.‬‬
‫در صورت شباهت تمرینات ارسالی و احراز رونوشت بودن آنها برای هر دو نفر نمره صفر در نظر گرفته میشود‪.‬‬
‫کپی برداری محض از سایتهای اینترنتی نمره ای نخواهد داشت‪.‬‬
‫هرگونه سوال یا ابهام خود را به ایمیل ‪ [email protected]‬ارسال کنید‪.‬‬
‫‪ )2‬مراحل اجرای تعویض زمینه‪ 2‬را بیان کنید و مشخص کنید در این کار‪ ،‬چه اطالعاتی باید ذخیره شود؟‬
‫‪ )1‬دالیل اینکه ما باید در طراحی سیستم عامل‪ ،‬اجازه تعامل‪ 1‬بین پردازه ها را بدهیم چیست؟‬
‫‪ )5‬مزایا و معایب هرکدام از مفاهیم زیر در پردازه ها را‪ ،‬هم از دید سیستم و هم از دید برنامه نویس‪ ،‬توضیح دهید‪:‬‬
‫‪-‬‬
‫ارتباط سنکرون و آسنکرون‬
‫‪-‬‬
‫بافرینگ‪ 5‬خودکار و بافرینگ آشکار‬
‫‪-‬‬
‫ارسال توسط کپی و ارسال توسط ارجاع‬
‫‪-‬‬
‫پیام با طول ثابت و پیام با طول متغیر‬
‫‪9‬‬
‫‪9‬‬
‫‪ )9‬بین دو ریسه‪ ،6‬چه اطالعاتی به اشتراک گذاشته میشوند و چه اطالعاتی یکتا هستند؟ مزایای برنامه های چند ریسه ای را بیان‬
‫کنید‪.‬‬
‫‪1‬‬
‫‪Context Switch‬‬
‫‪Cooperation‬‬
‫‪3‬‬
‫‪Buffering‬‬
‫‪4‬‬
‫‪Explicit‬‬
‫‪5‬‬
‫‪Reference‬‬
‫‪6‬‬
‫‪Thread‬‬
‫‪2‬‬
‫‪1‬‬
‫‪ )9‬الف) در زمان پایان یافتن پردازه‪ ،‬چه کارهایی توسط سیستم عامل انجام میشود؟‬
‫ب) چه پردازه هایی میتوانند پردازه های دیگر را متوقف‪ 7‬کنند؟‬
‫پ) پردازه پدر‪ 8‬به چه دالیلی اجرای یک یا چندتا از فرزندان خود را متوقف میکند؟‬
‫ت) پردازه های زامبی‪ 4‬و یتیم‪ 20‬چه نوع پردازه هایی هستند؟‬
‫‪ )6‬آیا در سیستمهای عامل‪ ،‬ممکن است ما همزمانی‪ 22‬داشته باشیم ولی موازات‪ 21‬نداشته باشیم؟‬
‫‪ )7‬مسئله تولید کننده‪-‬مصرف کننده‪ 25‬را توضیح دهید و بیان کنید که در برنامه زیر چگونه دچار این مشکل میشویم؟‬
‫‪ )8‬تعدادی فایل که هر فایل شامل مجموعه ای از کلمات است‪ ،‬در اختیار داریم‪ .‬میخواهیم برنامه ای طراحی کنیم که برای هر فایل‪،‬‬
‫اطالعات آنرا از دیسک خوانده و بر روی آنها پردازشی انجام دهد‪ .‬بررسی کنید که آیا استفاده از روش چند ریسه ای برای این‬
‫برنامه‪ ،‬مفید است یا خیر‪ .‬کدام روش‪ ،‬بیشترین تاثیر مثبت را دارد؟‬
‫الف) سیستم تک پردازنده با پشتیبانی از ریسه ها در سطح کاربر‬
‫ب) سیستم تک پردازنده با پشتیبانی از ریسه ها در سطح هسته‬
‫پ) سیستم چند پردازنده با پشتیبانی از ریسه ها در سطح کاربر‬
‫ت) سیستم چند پردازنده با پشتیبانی از ریسه ها در سطح هسته‬
‫‪7‬‬
‫‪Terminate‬‬
‫‪Parent Process‬‬
‫‪9‬‬
‫‪Zombie‬‬
‫‪10‬‬
‫‪Orphan‬‬
‫‪11‬‬
‫‪Concurrency‬‬
‫‪12‬‬
‫‪Parallelism‬‬
‫‪13‬‬
‫‪Producer-Consumer Problem‬‬
‫‪8‬‬
‫‪2‬‬
‫‪ )4‬میخواهیم برنامه ای بنویسیم که چندین کار را همزمان انجام دهد‪ .‬با نوشتن برنامه زیر‪ ،‬به کار خود پایان دادیم‪.‬‬
‫الف) با تحلیل این برنامه‪ ،‬توضیح دهید که ‪ Mutex‬ها چگونه باعث شده اند تا مسئله ناحیه بحرانی‪ 29‬حل شود؟‬
‫ب) مشکل اساسی این برنامه با توجه به نیازی که در صورت سوال مطرح شده است چیست؟‬
‫‪ )20‬نشان دهید الگوریتم پترسون‪ 29‬صحیح کار میکند‪.‬‬
‫‪Critical Section‬‬
‫‪Peterson’s Algorithm‬‬
‫‪14‬‬
‫‪15‬‬
‫‪3‬‬
‫‪ )22‬برنامه زیر به زبان ‪ C++‬و با استفاده از ‪ POSIX Threads‬نوشته شده است‪ .‬در این برنامه‪ ،‬آرایه ای به نام ‪ answers‬تعریف شده‬
‫است و هر تابع‪ ،‬بیانگر یک گیت از مدارهای منطقی است که با توجه به نیاز برنامه‪ ،‬در پاسخ خود‪ ،‬یکی از خانه های آرایه‬
‫‪ answers‬را مقداردهی میکند و جوابهای نهایی را چاپ میکند‪ .‬شمای مدار منطقی ای که این برنامه کار آن را انجام میدهد رسم‬
‫کنید‪ .‬این برنامه از نظر مبانی چند ریسه بودن‪ ،‬در کجا مشکل دارد؟ برای افزایش سرعت برنامه‪ ،‬چه بهبودی میتوان در آن ایجاد‬
‫کرد؟‬
‫‪ )21‬مشکل وارونگی اولویت‪ 26‬چگونه در سمافور ها بوجود میاید و چطور میتوان آنرا حل کرد؟‬
‫‪ )25‬مسئله قسمتهای بحرانی‪ 27‬پردازه ها در طراحی سیستمهای عامل چگونه حل میشود؟‬
‫‪Priority Inversion‬‬
‫‪Critical Sections‬‬
‫‪16‬‬
‫‪17‬‬
‫‪4‬‬
‫‪ )29‬توابع و فراخوانی های سیستمی در هر سیستم عامل با دیگری متفاوت است‪ .‬مثال در ویندوز‪ ،‬نمیتوان از )(‪ fork‬استفاده کرد‪.‬‬
‫بررسی کنید که با این وصف‪ ،‬چگونه میتوان برنامه های چند سکویی‪ 28‬طراحی کرد؟‬
‫‪ )29‬جلوگیری از اینکه قفل کردن ‪ Mutex‬توسط دو پردازه با هم اجرا نشود‪ ،‬در عمل چگونه است؟‬
‫‪Cross-Platform‬‬
‫‪18‬‬
‫‪5‬‬