²Ù×÷ϵͳ - ËïÖÓÐã¿Îºó´ð°¸ ÏÂÔØ±¾ÎÄ

¡¶²Ù×÷ϵͳ½Ì³Ì¡·£¨µÚÈý°æ£©CH1Ó¦ÓÃÌâ²Î¿¼´ð°¸

´ð£º(1) P1£¬P2£¬P3£¬P4µÄCki-Aki·Ö±ðΪ£º(2£¬2£¬2)¡¢(1£¬0£¬2)¡¢(1£¬0£¬3)¡¢(4£¬2£¬0)

(3) ϵͳ´¦ÓÚ°²È«×´Ì¬£¬´æÔÚ°²È«Ðò£ºP2£¬P1£¬P3£¬P4 (4) ¿ÉÒÔ·ÖÅ䣬´æÔÚ°²È«ÐòÁУºP2£¬P1£¬P3£¬P4¡£ (5) ²»¿ÉÒÔ·ÖÅä¡£ (6) ²»¿ÉÒÔ·ÖÅä¡£

13 ϵͳÓÐA¡¢B¡¢C¡¢D¹²4ÖÖ×ÊÔ´£¬ÔÚijʱ¿Ì½ø³ÌP0¡¢P1¡¢P2¡¢P3ºÍP4¶Ô×ÊÔ´µÄÕ¼ÓÐ

ºÍÐèÇóÇé¿öÈç±í£¬ÊÔ½â´ðÏÂÁÐÎÊÌ⣺

Allocation A B C D 0 0 3 2 1 0 0 0 1 3 5 4 0 3 3 2 0 0 1 4 Claim A B C D 0 0 4 4 2 7 5 0 3 6 10 10 0 9 8 4 0 6 6 10 Available A B C D 1 6 2 2 Process P0 P1 P2 P3 P4

(1) ϵͳ´Ëʱ´¦ÓÚ°²È«×´Ì¬Âð£¿

(2) Èô´ËʱP2·¢³örequest1(1¡¢2¡¢2¡¢2)£¬ÏµÍ³ÄÜ·ÖÅä×ÊÔ´¸øËüÂð£¿ÎªÊ²Ã´£¿ ´ð£º(1)ϵͳ´¦ÓÚ°²È«×´Ì¬£¬´æÔÚ°²È«ÐòÁУºP0£¬P3£¬P4£¬P1£¬P2¡£ (2)²»ÄÜ·ÖÅ䣬·ñÔòϵͳ»á´¦ÓÚ²»°²È«×´Ì¬¡£

14 °ÑËÀËø¼ì²âËã·¨ÓÃÓÚÏÂÃæµÄÊý¾Ý£¬²¢ÇëÎÊ£º

Available=(1£¬0£¬2£¬0)

Need= 3 Allocation= 0 1 0 1 1 1 1 0 0 1 0 0 1 0 0 0 3 1 1 1 2 0 0 1 0 1 0 1 1 0 0 0 0 2 1 1 1 0 0 (1) ´Ëʱϵͳ´Ëʱ´¦ÓÚ°²È«×´Ì¬Âð£¿

(2) ÈôµÚ¶þ¸ö½ø³ÌÌá³ö×ÊÔ´ÇëÇórequest2(0£¬0£¬1£¬0)£¬ÏµÍ³ÄÜ·ÖÅä×ÊÔ´¸øËüÂ𣿠(3) ÈôµÚÎå¸ö½ø³ÌÌá³ö×ÊÔ´ÇëÇórequest5(0£¬0£¬1£¬0)£¬ÏµÍ³ÄÜ·ÖÅä×ÊÔ´¸øËüÂ𣿠´ð£º(1)´Ëʱ¿ÉÒÔÕÒ³ö½ø³Ì°²È«ÐòÁУºP4£¬P1£¬P5£¬P2£¬P3¡£¹Êϵͳ´¦ÓÚ°²È«×´Ì¬¡£

(2)¿ÉÒÔ·ÖÅ䣬´æÔÚ°²È«ÐòÁУºP4£¬P1£¬P5£¬P2£¬P3¡£ (3)²»¿É·ÖÅ䣬ϵͳ½øÈë²»°²È«×´Ì¬¡£

15 ijϵͳÓÐR1É豸3̨£¬R2É豸4̨£¬ËüÃDZ»P1¡¢P2¡¢P3ºÍP4½ø³Ì¹²Ïí£¬ÇÒÒÑÖªÕâ4

¸ö½ø³Ì¾ù°´ÒÔÏÂ˳ÐòʹÓÃÉ豸£º

¡úÉêÇëR1¡úÉêÇëR2¡úÉêÇëR1¡úÊÍ·ÅR1¡úÊÍ·ÅR2¡úÊÍ·ÅR1

(1) ϵͳÔËÐÐÖпÉÄܲúÉúËÀËøÂð£¿ÎªÊ²Ã´£¿

(2) Èô¿ÉÄܵϰ£¬Çë¾Ù³öÒ»ÖÖÇé¿ö£¬²¢»­³ö±íʾ¸ÃËÀËø×´Ì¬µÄ½ø³Ì¡ª×ÊԴͼ¡£

25

¡¶²Ù×÷ϵͳ½Ì³Ì¡·£¨µÚÈý°æ£©CH1Ó¦ÓÃÌâ²Î¿¼´ð°¸

´ð£º(1)ϵͳËĸö½ø³ÌÐèҪʹÓõÄ×ÊÔ´ÊýΪR1¸÷2̨£¬R2¸÷1̨¡£¿É¼û×ÊÔ´Êý²»×㣬ͬʱ

¸÷½ø³ÌÉêÇë×ÊÔ´ÔÚÏÈ£¬ÓпÉÄܲúÉúËÀËø·¢ÉúµÄËĸöÌõ¼þ£¬¹Êϵͳ¿ÉÄܲúÉúËÀËø¡£

(2) µ±Èý¸ö½ø³ÌÖ´ÐÐÍêÉêÇë×ÊÔ´R1£¬¿ªÊ¼Ö´ÐÐÉêÇë×ÊÔ´R2ʱ£¬µÚËĸö½ø³Ì»áÒòûÓÐ×Ê

Ô´R1¶ø±»×èÈû¡£µ±Èý¸ö½ø³ÌÖ´ÐÐÍêÉêÇë×ÊÔ´R2ºó£¬ÏµÍ³»¹Ê£1¸öR2×ÊÔ´¡£¶øÕâÈý¸ö½ø³ÌÒòÖ´ÐÐÉêÇëµÚ¶þ¸ö×ÊÔ´R1¶øÈ«²¿±»×èÈû£¬ÏµÍ³½øÈëËÀËø¡£

P1 P2 ¡ñ ¡ñ ¡ñ ¡ñ¡ñ¡ñ¡ñ P3

P4 16 ¼Ù¶¨Ä³¼ÆËã»úϵͳÓÐR1ºÍR2Á½Àà¿ÉÔÙʹÓÃ×ÊÔ´£¨ÆäÖÐR1ÓÐÁ½¸öµ¥Î»£¬R2ÓÐÒ»¸öµ¥

룩£¬ËüÃDZ»½ø³ÌP1£¬P2Ëù¹²Ïí£¬ÇÒÒÑÖªÁ½¸ö½ø³Ì¾ùÒÔÏÂÁÐ˳ÐòʹÓÃÁ½Àà×ÊÔ´¡£ ¡úÉêÇëR1¡úÉêÇëR2¡úÉêÇëR1¡úÊÍ·ÅR1¡úÊÍ·ÅR2¡úÊÍ·ÅR1¡ú

ÊÔÇó³öϵͳÔËÐйý³ÌÖпÉÄܵ½´ïµÄËÀËøµã£¬²¢»­³öËÀËøµãµÄ×ÊÔ´·ÖÅäͼ£¨»ò³Æ½ø³Ì£­×ÊԴͼ£©¡£ ´ð£ºµ±Á½¸ö½ø³Ì¶¼Ö´ÐÐÍêµÚÒ»²½(¶¼Õ¼ÓÃR1) ʱ£¬ÏµÍ³½øÈë²»°²È«×´Ì¬¡£ÕâʱÎÞÂÛÄĸö½ø³ÌÖ´ÐÐÍêµÚ¶þ²½£¬ËÀËø¶¼»á·¢Éú¡£¿ÉÄܵ½´ïµÄËÀËøµã£º½ø³ÌP1Õ¼ÓÐÒ»¸öR1ºÍÒ»¸öR2£¬¶ø½ø³ÌP2Õ¼ÓÐÒ»¸öR1¡£»òÕßÏà·´¡£Õâʱ¼ºÐγÉËÀËø¡£½ø³Ì---×ÊԴͼΪ£º

P1 P1 £® £® P1

P1 17 ×ÀÉÏÓÐÒ»Ö»ÅÌ×Ó£¬×î¶à¿ÉÒÔÈÝÄÉÁ½¸öË®¹û£¬Ã¿´Î½öÄÜ·ÅÈë»òÈ¡³öÒ»¸öË®¹û¡£°Ö°ÖÏòÅÌ×Ó

ÖÐ·ÅÆ»¹û(apple)£¬ÂèÂèÏòÅÌ×ÓÖзŽÛ×Ó(orange)£¬Á½¸ö¶ù×ÓרµÈ³ÔÅÌ×ÓÖеĽÛ×Ó£¬Á½¸öÅ®¶ùרµÈ³ÔÅÌ×ÓÖÐµÄÆ»¹û¡£ÊÔÓãº(1)ÐźÅÁ¿ºÍP¡¢V²Ù×÷£¬(2)¹Ü³Ì£¬À´ÊµÏÖ°Ö°Ö¡¢ÂèÂè¡¢

26

¡¶²Ù×÷ϵͳ½Ì³Ì¡·£¨µÚÈý°æ£©CH1Ó¦ÓÃÌâ²Î¿¼´ð°¸

¶ù×Ó¡¢Å®¶ù¼äµÄͬ²½Ó뻥³â¹ØÏµ¡£

´ð£º(1)ÓÃÐźÅÁ¿ºÍP¡¢V²Ù×÷¡£

ÀàËÆÓÚ¿ÎÎÄÖеĴ𰸣¬À©³äÈçÏ£º1) ͬ²½ÐźÅÁ¿³õֵΪ2£»2) ÒªÒý½øÒ»¸ö»¥³âÐźÅÁ¿mutex£¬ÓÃÓÚ¶ÔÅÌ×Ó½øÐл¥³â£»3)ÅÌ×ÓÖÐÿһÏîÓÃéÙ×Ó¡¢Æ»¹û2¸öö¾ÙÖµ¡£

var

plate ARRAY[0,1] of (apple, orange);

flag0,flag1:boolean; mutex:semaphore;

sp:semaphore; /* ÅÌ×ÓÀï¿ÉÒԷż¸¸öË®¹û */ sg1£¬sg2:semaphore; /* ÅÌ×ÓÀïÓнÛ×Ó£¬ÓÐÆ»¹û?*/ sp := 2; /* ÅÌ×ÓÀïÔÊÐí·ÅÈë¶þ¸öË®¹û*/ sg1:=sg2:= 0; /* ÅÌ×ÓÀïûÓнÛ×Ó£¬Ã»ÓÐÆ»¹û */ flag0:=flag1:=false;mutex:=1; cobegin process son process father begin begin L3: P(sg1); L1: Ï÷Ò»¸öÆ»¹û; P(mutex); P(sp); if (flag0 & plate[0]= =½Û×Ó) then P(mutex); { x := plate[0];flag0:=false;} if (flag0==false) then else { x:= plate[1]; flag1:=false;} {plate [0]:=Æ»¹û; flag0:=true;} V(mutex); else { plate[1]:=Æ»¹û; flag1:=true; } V(sp); V(mutex); ³Ô½Û×Ó; V(sg2); goto L3; goto L1; end; end; process daughter process mother begin begin L4: P(sg2); L2: °þÒ»¸ö½Û×Ó; P(mutex); P(sp); if (flag0 & plate[0]= =Æ»¹û) then P(mutex); { x := plate[0];flag0:=false;} if (flag0==false) then else { x:= plate[1]; flag1:=false;} {plate [0]:=½Û×Ó; flag0:=true;} V(mutex); else { plate[1]:=½Û×Ó; flag1:=true; } V(sp); V(mutex); ³ÔÆ»¹û; V(sg1); goto L4; goto L2; end; end; coend.

18 ÓÐP1¡¢P2¡¢P3Èý¸ö½ø³Ì¹²ÏíÒ»¸ö±í¸ñF£¬P1¶ÔFÖ»¶Á²»Ð´£¬P2¶ÔFֻд²»¶Á£¬P3¶ÔFÏȶÁ

ºóд¡£½ø³Ì¿Éͬʱ¶ÁF£¬µ«Óнø³Ìдʱ£¬ÆäËû½ø³Ì²»ÄܶÁºÍд¡£ÓÃ(1)ÐźÅÁ¿ºÍP¡¢V²Ù×÷£¬(2)¹Ü³Ì±àдÈý½ø³ÌÄÜÕýÈ·¹¤×÷µÄ³ÌÐò¡£ ´ð£º(1)ÐźÅÁ¿ºÍP¡¢V²Ù×÷¡£

27

¡¶²Ù×÷ϵͳ½Ì³Ì¡·£¨µÚÈý°æ£©CH1Ó¦ÓÃÌâ²Î¿¼´ð°¸

ÕâÊǶÁ--дÕßÎÊÌâµÄ±äÖÖ¡£ÆäÖУ¬P3¼ÈÊǶÁÕßÓÖÊÇдÕß¡£¶ÁÕßÓëдÕßÖ®¼äÐèÒª»¥³â£¬Ð´Õß

ÓëдÕßÖ®¼äÐèÒª»¥³â£¬ÎªÌá¸ß½ø³ÌÔËÐеIJ¢·¢ÐÔ£¬¿ÉÈöÁÕß¾¡Á¿ÓÅÏÈ¡£ var rmutex,wmutex:semaphore;

rmutex:=wmutex:=1; count:integer;count:=0; cobegin {

process P1

begin repeat

P(rmutex);

count:=count+1;

if count=1 then P(wmutex); V(rmutex); Read F; P(rmutex);

count:=count-1;

if count=0 then V(wmutex); V(rmutex); untile false; end process P2

begin repeat

P(wmutex); Write F; V(wmutex);

untile false;

process P3

begin repeat

P(rmutex);

count:=count+1;

if count=1 then P(wmutex); V(rmutex); Read F; P(rmutex);

count:=count-1;

if count=0 then V(wmutex); V(rmutex); P(wmutex); Write F; V(wmutex); untile false;

28