ÎÊÌ⣺ £¨¹²9·Ö£¬Ã¿Ð¡Ìâ3·Ö£© 1£® T0ʱ¿ÌÊÇ·ñΪ°²È«×´Ì¬£¿ÎªÊ²Ã´£¿ 2£® ÈôÕâʱP4ÇëÇó×ÊÔ´£¨1£¬2£¬0£©£¬ÊÇ·ñÄÜʵʩ×ÊÔ´·ÖÅ䣿Ϊʲô£¿ 3£® ÔÚÉÏÃæµÄ»ù´¡ÉÏ£¬Èô½ø³ÌP3ÇëÇó×ÊÔ´£¨0£¬1£¬0£©£¬ÊÇ·ñÄÜʵʩ×ÊÔ´·ÖÅ䣿Ϊ
ʲô£¿
T0ʱ¿Ìϵͳ״̬
P1 P2 P3 P4 P5
Ê£Óà×ÊÔ´Êý R1 3 R2 3 R3 0 ÒÑ·ÖÅä×ÊÔ´ÊýÁ¿ R1 R2 R3 0 0 1 2 0 0 0 0 3 1 1 5 0 3 3 ×î´ó×ÊÔ´ÐèÇóÁ¿ R1 R2 R3 0 0 1 2 7 5 6 6 5 4 3 5 0 6 5
½â£º£¨¹²9·Ö£¬Ã¿Ð¡Ìâ3·Ö£© 1£® T0ʱ¿ÌÊÇ°²È«µÄ£¬°²È«ÐòÁÐΪ£ºP1£¬P4£¬P5£¬P2£¬P3 2£® P4ÇëÇó×ÊÔ´£¨1£¬2£¬0£©£¬¸ù¾ÝÒøÐмÒËã·¨£¬Ô¤·ÖÅäºóϵͳÊÇ°²È«µÄ£¬°²È«
ÐòÁÐΪ£ºP1£¬P4£¬P5£¬P2£¬P3 3£® P3ÇëÇó×ÊÔ´£¨1£¬1£¬0£©£¬¸ù¾ÝÒøÐмÒËã·¨£¬Ô¤·ÖÅäºóϵͳ²»°²È«£¬ËùÒÔ²»
ÄÜʵʩ×ÊÔ´·ÖÅä¡£ 9£®Ò»¸ö½ø³ÌµÄ´óСռ5¸öÒ³Ã棬ÿҳµÄ´óСΪ1K£¬ÏµÍ³ÎªËü·ÖÅäÁË3¸öÎïÀí¿é¡£µ±Ç°½ø³ÌµÄÒ³±íÈçͼËùʾ£º£¨¹²8·Ö£©
¿éºÅ ´æÔÚλP ·ÃÎÊλR ÐÞ¸ÄλM 0x1C 1 1 0 0x3F 1 1 1 - 0 0 0 0x5D 1 0 0 - 0 0 0
1£® ÓÐÄÇЩҳÃæ²»ÔÚÄڴ棿£¨2·Ö£© 2£® Çë·Ö±ð¼ÆËã½ø³ÌÖÐÐéµØַΪ0x3B7¡¢0x12A5¡¢0x1432µ¥ÔªµÄÎïÀíµØÖ·£¨ÓÃ
Ê®Áù½øÖƱíʾ£©£¬²¢ËµÃ÷ÀíÓÉ¡£ £¨6·Ö£©
½â£º£¨¹²8·Ö£©
²»ÔÚÄÚ´æµÄÊǵÚ2ºÍ4Ò³£¨°´Ò³ºÅ£©£¬»òµÚ3ºÍ5Ò³£¨°´ÐòºÅ£©¡£ £¨2·Ö£©
0x3B7µÄÎïÀíµØÖ·=0x 73 B7 £¨2·Ö£©
0x12 A5µÄÎïÀíµØÖ·=0x 176 A5£¬È±Ò³£¬»»³öµÚÈýÒ³¡£ £¨2·Ö£© 0x1432µØÖ·Ô½½ç£¬³ö´í¡£ £¨2·Ö£© 10£®ÏµÍ³ÔËÐÐÓÐÈý¸ö½ø³Ì£ºÊäÈë½ø³Ì¡¢¼ÆËã½ø³ÌºÍ´òÓ¡½ø³Ì£¬ËüÃÇÐͬÍê³É¹¤×÷¡£ÊäÈë½ø³ÌºÍ¼ÆËã½ø³ÌÖ®¼ä¹²Óûº³åÇøbuffer1,¼ÆËã½ø³ÌºÍ´òÓ¡½ø³ÌÖ®¼ä¹²Óûº³åÇøbuffer2¡£ÊäÈë½ø³Ì½ÓÊÕÍⲿÊý¾Ý·ÅÈëbuffer1ÖУ»¼ÆËã½ø³Ì´Óbuffer1ÖÐÈ¡³öÊý¾Ý½øÐмÆË㣬Ȼºó½«½á¹û·ÅÈëbuffer2£»´òÓ¡½ø³Ì´Óbuffer2È¡³öÊý¾Ý´òÓ¡Êä³ö¡£
ÓÃËã·¨ÃèÊöÕâÈý¸ö½ø³ÌµÄ¹¤×÷Çé¿ö£¬²¢ÓÃwaitºÍsignalÔÓïʵÏÖÆäͬ²½²Ù×÷¡££¨¹²8·Ö£© ½â£º£¨¹²8·Ö£©
½â´ð£ºÊäÈë½ø³Ì¡¢¼ÆËã½ø³ÌºÍ´òÓ¡½ø³ÌÖ®¼äµÄͬ²½ÎÊÌâÃèÊöÈçÏ£º
var£ºmutex1£¬mutex2£¬empty1£¬empty2£¬full1£¬full2£º=1£¬1£¬1£¬1£¬0£¬0£» InP:begin repeat
wait(empty1); wait(mutex1);
input a data from keyboard;
Add to buffer1; signal(mutex1); signal(full1); until false end
CalP:begin repeat
wait(full1); wait(mutex1);
Take a data form buffer1; Add to ch1; signal(mutex1); signal(empty1); calculate ch1; wait (empty2); wait(mutex2);
Take a data form ch1; Add to buffer2; signal (mutex2); signal (full2);
until false end
OutP:begin repeat
wait(full2);
wait(mutex2);
Take a data from buffer2; Add to printer controler; signal(mutex2); signal(empty2); start printer;
until false end
£¨ÆÀ·Ö±ê×¼£ºÐźÅÁ¿ÉèÖÃ2·Ö£¬ÊäÈë½ø³Ì¡¢¼ÆËã½ø³Ì¡¢´òÓ¡½ø³Ì¸÷2·Ö£©
11£®ÔÚÒ»¸öÇëÇó·ÖҳϵͳÖУ¬ÓÐÒ»¸ö³¤¶ÈΪ 5 Ò³µÄ½ø³Ì£¬¼ÙÈçϵͳΪËü·ÖÅä 3 ¸öÎïÀí¿é £¬²¢ÇҴ˽ø³ÌµÄÒ³Ãæ×ßÏòΪ 2£¬3£¬2£¬1£¬5£¬2£¬4£¬5£¬3£¬2£¬5£¬2¡£ÊÔÓà FIFO ºÍ LRU Á½ÖÖËã·¨·Ö±ð¼ÆËã³ö³ÌÐò·ÃÎʹý³ÌÖÐËù·¢ÉúµÄȱҳ´ÎÊý¡££¨10·Ö£© ½â£ºFIFO£º
2 3 2 1 5 2 4 5 3 2 5 2 µÚ1Ò³ 2 2 2 5 5 5 3 3 3 µÚ2Ò³ 3 3 3 2 2 2 5 5 µÚ3Ò³ 1 1 1 4 4 4 2
ȱҳÖжϴÎÊý = 6
LUR£º
2 3 2 1 5 2 4 5 3 2 5 2 µÚ1Ò³ 2 2 2 2 5 5 5 3 µÚ2Ò³ 3 3 5 2 3 3 5 µÚ3Ò³ 1 1 4 4 2 2
ȱҳÖжϴÎÊý = 5
12. ½ø³Ì A1£¬A2£¬?£¬An ͨ¹ý K ¸ö»º³åÇøÏò½ø³Ì B1£¬B2£¬?£¬Bm ²»¶ÏµØ·¢ËÍÏûÏ¢¡£·¢ËͺͽÓÊÕ¹¤×÷×ñÑÈçϹæÔò£º 1£® ÿ¸ö·¢Ëͽø³ÌÒ»´Î·¢ËÍÒ»¸öÏûÏ¢£¬Ð´È뻺³åÇø£¬»º³åÇø´óСÓëÏûÏ¢³¤¶È
Ò»Ö£» 2£® ¶Ôÿ¸öÏûÏ¢£¬B1£¬B2£¬?£¬Bm ¶¼Ðè½ÓÊÕÒ»´Î£¬¶ÁÈë¸÷×ÔµÄÊý¾ÝÇøÄÚ£» 3£® K ¸ö»º³åÇø¶¼Âúʱ£¬·¢Ëͽø³ÌµÈ´ý£¬Ã»ÓпɶÁµÄÏûϢʱ£¬½ÓÊÕ½ø³ÌµÈ´ý¡£ ÊÔÓà wait ºÍ signal ÔÓï²Ù×÷×éÖ¯ÕýÈ·µÄ·¢ËͺͽÓÊÕ²Ù×÷¡££¨10·Ö£© ½â£º BEGIN
Integer Mutex, Avail[n], Full[m]; Integer I;
Mutex:=1;
FOR i:=1 TO m DO BEGIN
Avail[I] := k; Full[I] := 0; END
PROCEDURE Send(K) Integer I; BEGIN
13£®Ò»¸ö½ø³ÌµÄ´óСΪ5¸öÒ³Ã棬ΪËü·ÖÅäÁËËĸöÎïÀí¿é¡£µ±Ç°Ã¿¸ö¿éµÄÇé¿öÈçϱíËùʾ£¨¶¼ÎªÊ®½øÖÆÊý£¬ÇÒ´Ó0¿ªÊ¼¼ÆÊý¡££©¡£µ±ÐéÒ³4·¢Éúȱҳʱ£¬Ê¹ÓÃÏÂÁеÄÒ³ÃæÖû»Ëã·¨£¬ÄÄÒ»¸öÎïÀí¿é½«±»»»³ö£¿²¢½âÊÍÔÒò£®£¨10·Ö£© Ò³ºÅ ¿éºÅ ¼ÓÔØʱ¼ä ·ÃÎÊʱ¼ä ·ÃÎÊλR ÐÞ¸ÄλM 2 0 60 161 0 1 1 1 130 160 0 0 0 2 26 162 1 0 3 3 20 163 1 1
£±£® IFOËã·¨ £²£® LRUËã·¨ £³£® CLOCKËã·¨
£´£® µ±Ò³ÃæµÄ·ÃÎÊ´®Îª£º¡°4£¬0£¬0£¬0£¬2£¬4£¬2£¬1£¬0£¬3£¬2¡±µÄOPTËã·¨ ½â£º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]);