²Ù×÷ϵͳ¿¼ÑеäÐÍÌâÄ¿½²½â ÏÂÔØ±¾ÎÄ

Proc½á¹¹»ò³Æ½ø³Ì±íÏî½ø³Ì¿ØÖÆ¿éUser½á¹¹Unix½ø³ÌÕýÎĶΣº¿É¹²Ïí³ÌÐò¶ÎÓû§Õ»ÇøÊý¾Ý¶ÎÓû§Êý¾ÝÇø£º·Ç¹²Ïí³ÌÐò¶ÎºÍÓû§¹¤×÷Êý¾Ýϵͳ¹¤×÷Çø£º°üÀ¨ºËÐÄÕ»ºÍuser½á¹¹ 26¡¢ÏÂÁÐÄÚÈÝÖÐÊôÓÚ½ø³ÌÉÏÏÂÎĵÄÊÇ£º£¨£©£¨Ñ¡ÏÓû§´ò¿ªÎļþ±í£»PCB£»ÖжÏÏòÁ¿£»ºËÐÄÕ»£©

27¡¢¸ù¾ÝBernsteinÌõ¼þ£¬ÔòÈçÏÂ4ÌõÓï¾äÖУº S1£ºa=x+y; S2: b=z+1; S3:c=a-b; S4:w=c+1;

S1ºÍS2ÄÜ·ñ²¢·¢Ö´ÐУ¿S3ºÍS4ÄØ£¿ 28¡¢Ä³ÏµÍ³µÄ½ø³Ì״̬±äǨÈçͼËùʾ£º£¨1£©ËµÃ÷Ò»¸ö½ø³Ì·¢Éú±äǨ1¡¢3ºÍ5µÄÔ­Òò£»£¨2£©µ±·¢ÉúÒ»¸ö±äǨʱ¿ÉÄÜÒýÆðÁíÒ»¸ö±äǨµÄ·¢Éú£¬ÔòÕâÁ½¸ö±äǨ³ÆÎªÒò¹û±äǨ¡£ÏÂÊöÒò¹û±äǨÊÇ·ñ»á·¢Éú£¿Èç¹ûÓпÉÄܵϰ£¬»áÔÚʲôÇé¿öÏ·¢Éú£¿3¡ú5£»3¡ú2£»2¡ú1£»4¡ú1£»4¡ú5. £¨3£©¸ù¾Ý´Ë״̬±äǨͼ˵Ã÷¸ÃϵͳµÄµ÷¶È²ßÂԺ͵÷¶ÈЧ¹û¡£

ÔËÐÐ2µÍÓÅÏȾÍÐ÷135×èÈû4¸ßÓÅÏȾÍÐ÷Ê×´ÎÑ¡Ôñ100ms£¬ÒÔºóÑ¡Ôñ500ms 2.2 ½ø³Ì¿ØÖÆ£º

1¡¢ÏÂÁгÌÐòÖ´ÐÐʱ£¬ÏµÍ³µÄÊä³ö¿ÉÄÜÊÇʲô£¿ {

a=55;

9

}

pid=fork(); if (pid==0){ } Else { }

sleep(7);

Printf(¡°a=%d\\n¡±,a); Wait(0);

Printf(¡°parent child exited\\n¡±); sleep(5); a=99; sleep(5);

printf(¡°child leaving\\n¡±); exit(0);

2.3½ø³Ìͬ²½£º

Int I;

(for i=1;i<=10;i++) Total=total+1;

1¡¢ÁÙ½ç×ÊÔ´£ºP1¡¢P2Á½¸ö½ø³ÌÖ´ÐдúÂëÏàͬ£¬¹²Ïítotal±äÁ¿£º

ÎÊ£º×îºótotal¿ÉÄܵÄ×îСֵ¡¢×î´óÖµ£¨2£¬20£© 2¡¢ÅжϣºÁÙ½çÇø¾ÍÊÇÁÙ½ç×ÊÔ´ËùÔÚµÄÇøÓò¡£

3¡¢ËùνÁÙ½çÇøÊÇÖ¸£¨Ò»¸ö»º³åÇø¡¢Ò»¶ÎÊý¾ÝÇø¡¢Í¬²½»úÖÆ¡¢Ò»¶Î³ÌÐò£©£¨ÄϾ©Àí¹¤01£© 4¡¢Åжϣº¶ÔÁÙ½ç×ÊÔ´Ó¦²ÉÓû¥³âµÄ·½Ê½À´ÊµÏÖ¹²Ïí¡££¨±±¾©Àí¹¤02£©

5¡¢ÏÂÃæ»î¶¯·Ö±ðÊôÓÚ½ø³ÌµÄÄÄÖÖÖÆÔ¼¹ØÏµ£¿£¨1¡¢¼¸¸öͬѧȥͼÊé¹Ý½èÊ飻¼¸¸öͬѧÔÚ´òÀºÇò£»Á÷Ë®Éú²úÏßÉϵĸ÷µÀ¹¤Ðò£»¶ÔÒ»¸ö²úÆ·µÄÉú²úºÍÏû·Ñ£»£©£¨±±¾©Àí¹¤96£© 6¡¢Ìî¿Õ£ºÈôÐźÅÁ¿ ³õֵΪ3£¬µ±Ç°ÖµÎª-3£¬Ôò±íʾÓУ¨£©¸ö½ø³ÌÔÚ¸ÃÐźÅÁ¿Éϵȴý£¿ 7¡¢ÏÂÃæÊÇÁ½¸ö²¢·¢Ö´ÐеĽø³Ì£¬ËûÃÇÄÜÕýÈ·ÔËÐÐÂð£¿Èô²»ÄÜÇëÐ޸ġ££¨±±º½02£© Parbegin

Int x; P1 {

int y,z;

10

P2: { }

}

X=1;y=0;

If x>=1 then y=y+1; Z=y;

x=0;t=0;

If x<=1 then t=t+2; U=t;

8¡¢Ë«½ø³ÌÁÙ½çÇøÎÊÌâµÄËã·¨£¬ÆäÖв¼¶ûÐÍÊý×éblicked[2]³õʼֵΪ{false£¬false}£¬ÕûÐÍturn³õʼֵΪ0£¬id´ú±í½ø³Ì±àºÅ£¨0£¬1£©£¬Çë˵Ã÷ÕýÈ··ñ£¿£¨Î¥·´Ã¦ÔòµÈ´ýÔ­Ôò£© Do{

blocked[id]=true; While(turn!=id) { }

±àºÅΪidµÄ½ø³ÌµÄÁÙ½çÇø Blocked[id]=false;

±àºÅΪidµÄ½ø³ÌµÄ·ÇÁÙ½çÇø }while£¨true£©£»

9¡¢ÔÚ¾ßÓÐN¸ö½ø³ÌµÄϵͳÖУ¬ÔÊÐíM¸ö½ø³Ì£¨N¡ÝM¡Ý1£©Í¬Ê±½øÈëËüÃǵÄÁÙ½çÇø£¬ÆäÐźÅÁ¿SµÄÖµµÄ±ä»¯·¶Î§ÊÇ£¨£©£¬´¦Óڵȴý״̬µÄ½ø³ÌÊý×î¶àÊÇ£¨£©¸ö¡£ 10¡¢ÅжÏÒÔϽâ¾öË«½ø³ÌÁÙ½çÇøÎÊÌâµÄËã·¨ÊÇ·ñÕýÈ·£º Process Pi(i=0,1):

Do{

Flag[i]=true; While(flag[1-i]);

critical section flag[i]=false;

While(blocked[1-id]); Turn=id;

remainder section

}while(1);

11

11¡¢ÓÃV²Ù×÷»½ÐÑÒ»¸öµÈ´ý½ø³Ìʱ£¬±»»½Ðѽø³ÌµÄ״̬±äΪ£¨£©¡££¨Ñ¡ÏÔËÐУ»µÈ´ý£»¾ÍÐ÷£»Íê³É£©

12¡¢ÈôÓÐ3¸ö½ø³Ì¹²ÏíÒ»¸ö»¥³â¶Î£¬Ã¿´Î×î¶àÔÊÐíÁ½¸ö½ø³Ì½øÈ뻥³â¶Î£¬ÔòÐźÅÁ¿µÄ±ä»¯·¶Î§ÊÇ£¨£©¡£ 13¡¢¹ØÓÚ½ø³Ìͬ²½Ó뻥³âµÄ˵·¨£¬Åжϣº

£¨1£©½ø³ÌµÄͬ²½Ó뻥³â¶¼Éæ¼°µ½²¢·¢½ø³Ì·ÃÎʹ²Ïí×ÊÔ´µÄÎÊÌâ¡£ £¨2£©½ø³ÌµÄͬ²½Êǽø³Ì»¥³âµÄÒ»ÖÖÌØÊâÇé¿ö¡£

£¨3£©½ø³ÌµÄ»¥³âÊǽø³Ìͬ²½µÄÌØÀý£¬»¥³â½ø³ÌÊǾºÕù¹²Ïí×ÊÔ´µÄʹÓ㬶øÍ¬²½½ø³ÌÖ®¼ä±ØÈ»´æÔÚÒÀÀµ¹ØÏµ¡£

£¨4£©½ø³Ì»¥³âºÍ½ø³Ìͬ²½ÓÐʱºòÒ²³ÆÎª½ø³Ìͬ²½¡£ 14¡¢ÅжϣºÁÙ½çÇøÊDz»¿ÉÖжϵijÌÐò¡£

15¡¢ÅжϣºÈç¹ûÔÚ¼ÓËø·¨ÊµÏÖ»¥³âʱ£¬½«Î´½øÈëÁÙ½çÇøµÄ½ø³ÌÅŶӵȴý£¬´Ó¶øÈÃÆäÓб»ÔÙµ÷¶È µÄ»ú»á£¬¼ÓËø·¨ºÍP¡¢VÔ­ÓïʵÏÖ»¥³âʱÆäЧ¹ûÊÇÏàͬµÄ¡£

16¡¢ÓÉÓÚ²¢·¢½ø³ÌÖ´ÐеÄËæ»úÐÔ£¬Ò»¸ö½ø³Ì¶ÔÁíÒ»¸ö½ø³ÌµÄÓ°ÏìÊDz»¿ÉÔ¤²âµÄ£¬ÉõÖÁÔì³É½á¹ûµÄ²»ÕýÈ·£¬ÏÂÃæ¶ÔÔì³É²»ÕýÈ·µÄÒòËØµÄÃèÊöÕýÈ·µÄÊÇ£º£¨£©£¨Ñ¡ÏÓëʱ¼äÓйأ»Óë½ø³ÌÕ¼ÓõĴ¦Àí»úÓйأ»Ö»ÓëÖ´ÐÐËÙ¶ÈÓйأ»Ö»ÓëÍâ½çµÄÓ°ÏìÓйأ©

17¡¢ÓÐÁ½¸öÓÅÏȼ¶ÏàͬµÄ½ø³ÌA¡¢BÈçÏ£¬ÁîÐźÅÁ¿S1ºÍS2µÄ³õÖµ¾ùΪ0£¬ÒÑÖªZ=3£¬ÔòA¡¢B²¢·¢ÔËÐнáÊøºóX¡¢Y¡¢ZµÄÖµ·Ö±ðÊÇ£º

A Y=2; Y=Y+3; V(S1); Z=Y+0; P(S2); Z=Y+Z; B X=2; X=X+3; P(S1); X=X+Y; V(S2); Y=Y+Z; 18¡¢ÐźÅÁ¿ÊÇÒ»¸öÕûÐͱäÁ¿£¬¿ÉÔÚÆäÉÏ×ö¼Ó1»ò¼õ1µÄ²Ù×÷¡£

2.4 ¾­µä½ø³Ìͬ²½ÎÊÌâ

1¡¢Ò»¸ö¹©Ó¦ÉÌÓÃÆû³µ¸øÄ³³¬ÊÐËÍ»õ£¬²¢°ÑÆû³µÉϵĻõÎïÓó¬ÊеÄÈýÂÖ³µÔ˵½²Ö¿âÖУ¬³¬ÊеŤ×÷ÈËÔ±Ò²ÓÃÈýÂÖ³µ´Ó²Ö¿âÖÐÈ¡»õÈ¥³öÊÛ¡£¼ÙÉè¹²ÓÐ3Á¾ÈýÂÖ³µ£¬²Ö¿âÖÐÖ»ÄÜÈÝÄÉ10Á¾ÈýÂÖ³µµÄ»õÎÇÒÿ´Î´ÓÆû³µÉÏÈ¡»õÖ»Äܹ²¸øÒ»Á¾ÈýÂÖ³µ£¬²Ö¿âÒ²Ö»ÄÜÈÝÄÉÒ»Á¾ÈýÂÖ³µ½øÈë¡£ÓÃÐźÅÁ¿ÊµÏÖÏò²Ö¿âÖÐËÍ»õ¼°´Ó²Ö¿âÖÐÈ¡»õµÄͬ²½Ëã·¨¡£ 2¡¢ÓÐÒ»¸ö²Ö¿â£¬¿ÉÒÔ´æ·ÅA¡¢BÁ½ÖÖ²úÆ·£¬µ«ÒªÇó£º

¢Ù ÿ´ÎÖ»ÄÜ´æÈëÒ»ÖÖ²úÆ·£¨A»òB£©£» ¢Ú A²úÆ·ÊýÁ¿£­B²úÆ·ÊýÁ¿

ÆäÖÐM¡¢NÊÇÕýÕûÊý£¬Ê¹ÓÃP¡¢V²Ù×÷ÃèÊö²úÆ·AÓë²úÆ·BµÄÈë¿â¹ý³Ì¡£

12