تالار گفتمان مانشت
تست سیستم عامل-۳۱ سراسری ۸۰ - نسخه‌ی قابل چاپ

تست سیستم عامل-۳۱ سراسری ۸۰ - Helmaa - 24 دى ۱۳۸۹ ۰۴:۵۸ ب.ظ

آنچه در زیر آمده است به عنوان راه حلی برای مشکل ناحیه های بحرانی پیشنهاد می گردد.در ابتدا flag(A)=flag(B)=0 .برنامه فراروند A به قرار زیر است:
۱: flag(A)=0;
If (flag(B) !=0) then goto 1;
Flag(A)=1;
If (flag(B) !=0) then goto 1;
<critical section>
Flag(A)=0;

برنامه فرایند B از جابه جایی مستقیم AوB در برنامه فوق به دست می اید.در این صورت می توان گفت که این راه حل قابل قبول.....................
۱)است،چون تمام شرایط پیاده سازی ناحیه های بحرانی را تامین می کند.
۲)نیست،چون باحث قحطی برای فرایندها میشود.
۳)نیست،چون شرایط انحصار متقابل را تامین نمی کند.
۴)نیست،چون اگر فرایندی از ناحیه بحرانی خارج شود و دوباره بخواهد وارد ناحیه بحرانی گردد حتی اگر فرایند دیگر هم خواهان ورود به ناحیه بحرانی نباشد ،باز هم نمی تواند.
و در پاسخ اومده که جواب گزینه ۲ صحیح است.
میخواستم محل رخ دادن وقفه هایی که باعث ایجاد قحطی شده است رو بدونم.ممنون از تجهتون.

تست۳۱ سراسری ۸۰ سیستم عامل - bijibuji - 25 دى ۱۳۸۹ ۱۱:۵۳ ب.ظ

درست بعد از اجرای If اول به فرآیند B سوئیچ می شه
در فرآیند B هم دستور If اجرا می شه. تا اینجا شرط هر دو If نادرسته و هردو ازش عبور می کنن
بعدش مقدار Flag برای B برابر با ۱ می شه و بعدش دوباره سوئیچ می شه به A و مقدار Flag این فرآیند هم ۱ می شه
حالا هیچکدوم از دستور If بعدی شون نمی تونن رد بشن و دوباره همین قصه تکرار می شه.