13£®Ò»¸ö½ø³ÌµÄ´óСΪ5¸öÒ³Ã棬ΪËü·ÖÅäÁËËĸöÎïÀí¿é¡£µ±Ç°Ã¿¸ö¿éµÄÇé¿öÈçϱíËùʾ£¨¶¼ÎªÊ®½øÖÆÊý£¬ÇÒ´Ó0¿ªÊ¼¼ÆÊý¡££©¡£µ±ÐéÒ³4·¢Éúȱҳʱ£¬Ê¹ÓÃÏÂÁеÄÒ³ÃæÖû»Ëã·¨£¬ÄÄÒ»¸öÎïÀí¿é½«±»»»³ö£¿²¢½âÊÍÔÒò£®£¨10·Ö£© Ò³ºÅ 2 1 0 3
0 1 2 3
¿éºÅ 60 130 26 20 IFOËã·¨ LRUËã·¨ CLOCKËã·¨
µ±Ò³ÃæµÄ·ÃÎÊ´®Îª£º¡°4£¬0£¬0£¬0£¬2£¬4£¬2£¬1£¬0£¬3£¬2¡±µÄOPTËã·¨
¼ÓÔØʱ¼ä
161 0 160 0 162 1 163 1
·ÃÎÊʱ¼ä
1 0 0 1
·ÃÎÊλR ÐÞ¸ÄλM
£±£® £²£® £³£® £´£®
½â£º1£®»»³öµÚ3ºÅÐéÒ³£¬ÒòΪËü¼ÓÔصÄʱ¼ä×îÔ磻 2£®»»³öµÚ1ºÅÐéÒ³£¬ÒòΪËü×î½ü×î¾Ãû±»·ÃÎÊ£»
3£®»»³öµÚ1ºÅÐéÒ³£¬ÒòΪËü×î½ü¼Èû±»·ÃÎÊ£¬ÓÖû±»Ð޸ģ» 4£®»»³öµÚ3ºÅÐéÒ³£¬ÒòΪËüÀë·ÃÎʵã×îÔ¶¡£
14. ÓÃÕûÐÍÐźÅÁ¿ÃèÊöÔÚÕÜѧ¼Ò½ø²ÍÎÊÌâÖУ¬ÖÁ¶àÔÊÐí4¸öÕÜѧ¼Òͬʱ½ø²ÍµÄËã·¨¡££¨10·Ö£© ½â£ºpublic class diningphilosophers {
semaphore [] fork = new semaphore [5] (1); semaphore room = new semaphore (4); int i;
void philosopher (int i) { while (true) think();
wait (room); wait (fork[i]);
wait (fork [(i+1) % 5]); eat();
signal (fork [(i+1) % 5]); signal (fork[i]); signal (room); } void main() {
parbegin (philosopher (0), philosopher (1), philosopher (2), philosopher (3), philosopher (4)); } }
15£®¿¼ÂÇÒ»¸öÓÐ150¸ö´æ´¢Æ÷µ¥ÔªµÄϵͳ£¬ÈçÏ·ÖÅä¸øÈý¸ö½ø³Ì£º ½ø³Ì ×î´ó Õ¼ÓÐ ¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª 1 70 45 2 60 40 3 60 15
ʹÓÃÒøÐмÒËã·¨£¬ÒÔÈ·¶¨ÏÂÃæµÄÈκÎÒ»¸öÇëÇóÊÇ·ñ°²È«£º
a£®µÚ4¸ö½ø³Ìµ½´ï£¬×î¶àÐèÒª60¸ö´æ´¢µ¥Ôª£¬×î³õÐèÒª25¸öµ¥Ôª£»
b£®µÚ4¸ö½ø³Ìµ½´ï£¬×î¶àÐèÒª60¸ö´æ´¢µ¥Ôª£¬×î³õÐèÒª35¸öµ¥Ôª£» Èç¹û°²È«¸ø³ö°²È«ÐòÁУ»Èô²»°²È«¸ø³ö½á¹û·ÖÅä¼ò±í¡££¨10·Ö£© ½â£º½ø³Ì ×î´ó Õ¼ÓÐ ÉÐÐè ¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª 1 70 45 25 2 60 40 20 3 60 15 45 4 60 25 35 °²È«ÐòÁÐΪ£º1¡¢2¡¢3¡¢4
ËùÒÔϵͳÊÇ°²È«µÄ£¬¿ÉÒÔ½øÐзÖÅä¡£ b£®
½ø³Ì ×î´ó Õ¼ÓÐ ÉÐÐè ¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª 1 70 45 25 2 60 40 20 3 60 15 45 4 60 35 25
¿ÉÓÃ 15
¿ÉÓÃ
25
µ±Ç°¿ÉÓõÄ×ÊÔ´²»¹»ÈκÎÒ»¸ö½ø³ÌÔËÐÐÍê±Ï£¬ËùÒÔ²»°²È«¡£
16. Jruassic ¹«Ô°ÓÐÒ»¸ö¿ÖÁú²©Îï¹ÝºÍÒ»¸ö¹«Ô°.ÓÐm¸öÂÿͺÍnÁ¾³µ,ÿÁ¾³µÖ»ÄÜÈÝÄÉÒ»¸öÂÿ͡£ÂÿÍÔÚ²©Îï¹Ý¹äÁËÒ»»á¶ù£¬È»ºóÅŶӳË×øÂÃÐгµ¡£µ±Ò»Á¾³µ¿ÉÓÃʱ£¬ËüÔØÈëÒ»¸öÂÿͣ¬È»ºóÈƹ«Ô°ÐÐÊ»ÈÎÒⳤµÄʱ¼ä¡£Èç¹ûnÁ¾³µ¶¼Òѱ»ÂÿͳË×øÓÎÍ棬ÔòÏë×ø³µµÄÂÿÍÐèÒªµÈ´ý£»Èç¹ûÒ»Á¾³µÒѾ¾ÍÐ÷£¬µ«Ã»ÓÐÂÿ͵ȴý£¬ÄÇôÕâÁ¾³µµÈ´ý¡£Ê¹ÓÃÐźÅÁ¿Í¬²½m¸öÂÿͺÍnÁ¾³µµÄ½ø³Ì¡££¨10·Ö£© ½â£º
visitors=m; Pvi() { repeat wait(cars); wait(mutex); get on; travell; get off; signal(cars); wait(mutex); until false; }
cars=n;
mutex=1; Pci() { repeat wait(visitors); wait(mutex); start; run; stop; signal(visitors); wait(mutex); until false; }
18¡¢Èô¸É¸öµÈ´ý·ÃÎÊ´ÅÅÌÕßÒÀ´ÎÒª·ÃÎʵĴŵÀΪ20£¬44£¬40£¬4£¬80£¬12£¬76£¬¼ÙÉèÿÒƶ¯Ò»¸ö´ÅµÀÐèÒª3ºÁÃëʱ¼ä£¬Òƶ¯±Ûµ±Ç°Î»ÓÚ40ºÅÖùÃ棬Çë°´ÏÂÁÐËã·¨·Ö±ðд³ö·ÃÎÊÐòÁв¢¼ÆËãΪÍê³ÉÉÏÊö¸÷´Î·ÃÎÊ×ܹ²»¨·ÑµÄÑ°µÀʱ¼ä¡£
£¨1£©ÏÈÀ´ÏÈ·þÎñËã·¨£» £¨2£©×î¶ÌÑ°µÀʱ¼äÓÅÏÈËã·¨¡£
£¨3£©É¨ÃèËã·¨£¨µ±Ç°´ÅÍ·Òƶ¯µÄ·½ÏòΪ´ÅµÀµÝÔö£©£¨10·Ö£© ½â£º
£¨1£©´ÅµÀ·ÃÎÊ˳ÐòΪ£º20£¬44£¬40£¬4£¬80£¬12£¬76
Ñ°µÀʱ¼ä=£¨20+24+4+36+76+68+64£©*3=292*3=876 £¨2£©´ÅµÀ·ÃÎÊ˳ÐòΪ£º40£¬44£¬20£¬12£¬4£¬76£¬80 Ñ°µÀʱ¼ä=£¨0+4+24+8+8+72+4£©*3=120*3=360 £¨3£©´ÅµÀ·ÃÎÊ˳ÐòΪ£º40£¬44£¬76£¬80£¬20£¬12£¬4 Ñ°µÀʱ¼ä=£¨0+4+32+4+60+8+8£©*3=116*3=348
19¡¢Éú²úÕߺÍÏû·ÑÕßÎÊÌâ £¨10·Ö£©
ÓÐÒ»×éÉú²úÕßP1£¬P2£¬¡¡£¬PMºÍÒ»×éÏû·ÑÕßC1£¬C2£¬¡¡£¬CK£¬ËûÃÇͨ¹ýÓÉn¸ö»·Ðλº³åÇø¹¹³ÉµÄ»º³å³Ø½øÐÐͨÐÅ£¬Éú²úÕ߰ѲúÆ··ÅÈ뻺³åÇø£¬Ïû·ÑÕß´Ó»º³åÇøÈ¡²úÆ·À´Ïû·Ñ¡£ÇëÓÃwaitºÍsignalÔÓïʵÏÖËûÃǵÄͬ²½²Ù×÷¡£
½â£ºÉú²úÕߺÍÏû·ÑÕßÎÊÌâ begin
Var mutex,empty,full:semaphore:=1,n,0; buffer:array[0,¡,n-1] of item; in,out:integer := 0,0; parbegin
producer: begin repeat produce next product ; wait (empty); wait (mutex); buffer(in):=nextp ; in := (in+1) mod n ; signal (full); signal (mutex); until false ; end consumer: begin repeat wait (full); wait (mutex); nextc := buffer(out); out := (out+1) mod n; signal (empty); signal (mutex); consume the item in nextc; until false ; end parend end
21£®½ñÓÐÈý¸ö²¢·¢½ø³ÌR£¬M£¬P£¬ËüÃǹ²ÏíÁËÒ»¸ö¿ÉÑ»·Ê¹ÓõĻº³åÇøB£¬»º³åÇøB¹²ÓÐN¸öµ¥Ôª¡£½ø³ÌR¸ºÔð´ÓÊäÈëÉ豸¶ÁÐÅÏ¢£¬Ã¿¶ÁÒ»¸ö×Ö·ûºó£¬°ÑËü´æ·ÅÔÚ»º³åÇøBµÄÒ»¸öµ¥ÔªÖУ»½ø³ÌM¸ºÔð´¦Àí¶ÁÈëµÄ×Ö·û£¬Èô·¢ÏÖ¶ÁÈëµÄ×Ö·ûÖÐÓпոñ·û£¬Ôò°ÑËü¸Ä³É¡°£¬¡±£»½ø³ÌP¸ºÔð°Ñ´¦ÀíºóµÄ×Ö·ûÈ¡³ö²¢´òÓ¡Êä³ö¡£µ±»º³åÇøµ¥ÔªÖеÄ×Ö·û±»½ø³ÌPÈ¡³öºó£¬ÔòÓÖ¿ÉÓÃÀ´´æ·ÅÏÂÒ»´Î¶ÁÈëµÄ×Ö·û¡£ÇëÓÃPV²Ù×÷Ϊͬ²½»úÖÆд³öËüÃÇÄÜÕýÈ·²¢·¢Ö´ÐеijÌÐò¡£ £¨10·Ö£© ½â£º£¨10·Ö£© begin
Var mutex,input,calculate,output:semaphore:=1,n,0,0; buffer:array[0,¡,n-1] of item; in,mid,out:integer := 0,0,0; proR() { do { wait (input); wait (mutex); buffer(in):=input data; in := (in+1) mod n ; signal (calculate); signal (mutex); while true ; } proM() { do { wait (calculate); wait (mutex); buffer(middle):=calculate data ; mid := (mid+1) mod n ; signal (output); signal (mutex); } while true ; } proP() { do { wait (output); wait (mutex); buffer(out):=calculate data ; out := (out+1) mod n ; signal (input); signal (mutex); } while true ; }
25¡¢Éèij×÷ÒµÕ¼ÓÐ7¸öÒ³Ã棬Èç¹ûÔÚÖ÷´æÖÐÖ»ÔÊÐí×°Èë4¸ö¹¤×÷Ò³Ãæ(¼´¹¤×÷¼¯Îª4)£¬×÷ÒµÔËÐÐʱ£¬Êµ¼Ê·ÃÎÊÒ³ÃæµÄ˳ÐòÊÇ£º1£¬ 2£¬ 3£¬ 6£¬ 4£¬ 7£¬ 3£¬ 2£¬ 1£¬ 4£¬ 7£¬ 5£¬ 6£¬ 5£¬ 2£¬ 1¡£ÊÔÓÃFIFO¡¢LRUÒ³ÃæÖû»Ëã·¨£¬Áгö¸÷×ÔµÄÒ³ÃæÌÔÌ˳ÐòºÍÒ³ÃæÖû»´ÎÊý¡£¼ÙÉ迪ʼʱûÓÐÈκÎÒ³ÔÚÄÚ´æÖС£ (10·Ö) ½â£ºFIFO£º
1£¬ 2£¬ 3£¬ 6£¬ 4£¬ 7£¬ 3£¬ 2£¬ 1£¬ 4£¬ 7£¬ 5£¬ 6£¬ 5£¬ 2£¬ 1 1 1 1 1 4 4 4 4 5 5 2 2 2 2 7 7 7 7 6
3 3 3 2 2 2 2 2
6 6 6 6 1 1 1 Ò³ÃæÖû»´ÎÊýΪ£º10´Î LRU£º
1£¬ 2£¬ 3£¬ 6£¬ 4£¬ 7£¬ 3£¬ 2£¬ 1£¬ 4£¬ 7£¬ 5£¬ 6£¬ 5£¬ 2£¬ 1 1 1 1 1 4 4 4 1 1 1 1 6 6 6 2 2 2 2 7 7 7 4 4 4 4 2 2
3 3 3 3 3 3 3 7 7 7 7 7 1
6 6 6 2 2 2 2 5 5 5 5 Ò³ÃæÖû»´ÎÊýΪ£º14´Î
26¡¢Ä³³µÕ¾ÊÛƱÌü£¬ÈκÎʱ¿Ì×î¶à¿ÉÈÝÄÉ20Ãû¹ºÆ±Õß½øÈ룬µ±ÊÛƱÌüÖÐÉÙÓÚ20Ãû¹ºÆ±Õßʱ£¬ÔòÌüÍâµÄ¹ºÆ±Õß¿ÉÁ¢¼´½øÈ룬·ñÔòÐèÔÚÍâÃæµÈ´ý¡£Èô°ÑÒ»¸ö¹ºÆ±Õß¿´×÷Ò»¸ö½ø³Ì£¬Çë»Ø´ðÏÂÁÐÎÊÌ⣺
(1)ÓÃwaitºÍsignal²Ù×÷¹ÜÀíÕâЩ²¢·¢½ø³Ìʱ£¬Ó¦ÔõÑù¶¨ÒåÐźÅÁ¿£¬Ð´³öÐźÅÁ¿µÄ³õÖµÒÔ¼°ÐźÅÁ¿¸÷ÖÖÈ¡ÖµµÄº¬Òå¡£