سوال 99

حل تشریحی سوال شماره 99 سیستم‌های عامل

کنکور ارشد مهندسی کامپیوتر 1399

99.

الگوریتم زیر ساختار فرایند برای حل مسئله ناحیه بحرانی (Critical-Problem) درحالتی که n فرایند وجود داشته باشد، است. درخصوص این الگوریتم کدام گزینه صحیح است؟


1)

سه شرط مسئله ناحیه بحرانی (انحصار متقابل، پیشرفت، انتظار محدود) را به ازای مقدار دلخواه n براورده میکند

2)

سه شرط مسئله ناحیه بحرانی (انحصار متقابل، پیشرفت، انتظار محدود) را به ازای مقدار n=2 براورده میکند

3)

شرط پیشرفت را تنها به ازای مقدار n بزرگتر از 2 براورده نمیکند

4)

شرط پیشرفت را هرگز براورده نمیکند

پاسخ ها

1 پاسخ
دکتر ابوالفضل حقیقت
دکتر ابوالفضل …سه شنبه 15 اردیبهشت 1405

گزينه 4 نیمه درست است! (گزینه سنجش 4 است).

فرض کنید n=4 باشد. بنابراین 4 فرایند P0، P1، P2 و P3 داریم. حال فرض کنید تا کنون هیچ فرایندی قصد ورود به ناحیه بحرانی را نداشته است و در شروع داستان، waiting[0] تا waiting[3] و key و lock همگی 0 هستند. حال فرایند P1 می­خواهد وارد ناحیه بحرانی شود (i=1). waiting[1] را true (1) و key=1 می­کند و وارد حلقه while می­شود و چون lock=0 است با test_and_set یا TSL موفق می­شود که key را 0 و lock را 1 کند و از حلقه while (busy waiting) به دلیل صفر بودن key خلاص شود و waiting[1] را false (0) کند و وارد ناحیه بحرانی شود. حال فرض کنید این فرایند از ناحیه بحرانی خارج می­شود و هیچ فرایندی در این میان قصد ورود به ناحیه بحرانی را نداشته است. P1 بعد از خروج از ناحیه بحرانی، ابتدا j=(1+1)%4=2 گذاشته و وارد حلقه while می­شود و همین جا گرفتار می­شود چون waiting[j] برای j=2,3,0,1,2,3,0,1,2,3,… صفر (false) است و !waiting[j] برابر true. پس تا همین جا این روش غلط است و گذشته از شروط انحصار متقابل و انتظار محدود و پیشرفت، طرف از ناحیه بحرانی خارج شده و گیر کرده و حتی نمی­تواند وارد ناحیه غیربحرانی خود شود! (این راه حل نیست که بخواهیم در مورد نقض شروط صحبت کنیم!). P1 آنقدر در حلقه می­چرخد تا یک فرایند دیگر مثلاً P3 بخواهد وارد ناحیه بحرانی شود. دراین صورت چون P3  نیز waiting[3] را true کرده و در حلقه busy waiting بالا به دلیل 1 بودن lock گرفتار شده است، فرایند P1 می­تواند از حلقه while(!waiting[j]) خارج شود در حالی که j=3 است و چون  j==i غلط است lock را false نمی­کند و وارد ناحیه غیربحرانی خود می­شود و با اینکه P1 در ناحیه غیر بحرانی است جلوی ورود P3 به ناحیه بحرانی را گرفته است و به همین دلیل طراح گزینه 4 را انتخاب کرده است (نقض شرط پیشرفت). حتی برای n=2 هم این مسئله اتفاق می­افتد.

ارسال پاسخ