حل تشریحی سوال شماره 27 سیستمهای عامل پیشرفته
کنکور دکتری مهندسی کامپیوتر 1399
یک سیستم توزیع شده ممکن است دارای مناطق بحرانی متعدد و مستقل باشد تصور کنید که پردازه P0 می خواهد وارد ناحیه بحرانی A شود و پردازه P1 میخواهد وارد ناحیه بحرانی B شود. آیا الگوریتم Ricart - Agrawala میتواند به بن بست منجر شود؟ الگوریتم به صورت زیر است:
class CriticalRegionLockout extends GlobalAssertion
{
private LogicalTime[] try Times = new LogicalTime(RicartAgrawala.PNUM);
private int procTnCR=-1, procTryingLonger = -1;
public CriticalRegionLockout()
{
for (int i=0; i<try Times. length; i++)
try Times[i] = null;
}
public boolean assert(Program progs[])
{
for (int i=0; i<progs.length; i++)
if (((Prog) progs[i].region==Prog.T)
try Times[i] = ((Prog) progs[i]).lastTry Time;
//now check when an process is in th CR, if another one is still
//trying but started to try earlier. this should not happen.
for (int i=0; i<progs.length; i++)
if (((Prog) progs[i]).region==Prog.C)
{
for (int j=0; j<progs.length; j++)
{
if(((Prog) progs|j]).region==Prog.T && try Times|j].lessThan(try Times[i]))
{
procInCR = i;
procTryingLonger = j;
return false;
}
}
}
return true;
}
}
خیر - بنبست رخ نمیدهد.
بله - پردازه منبع A را میگیرد و پردازه P0 منبع B را میگیرد.
بله - پردازه منبع A را میگیرد و پردازه P0 منبع B را درخواست میکند و پردازه منبع A را میگیرد.
بله - پردازه منبع A را میگیرد و پردازه P0 منبع B را میگیرد و سپس پردازه منبع B را درخواست می کند.