²Ù×÷ϵͳ½Ì³Ì - ËïÖÓÐ㣨µÚËİ棩¿ÎºóϰÌâ´ð°¸ ÏÂÔØ±¾ÎÄ

ÉÏÌâÖУ¬ÈôÔÊÐíÒÆ¶¯¼ºÔÚÖ÷´æÖеÄ×÷Òµ£¬ÆäËûÌõ¼þ²»±ä£¬ÏÖÇó£º( l ) FIFO Ë㷨ѡÖÐ×÷ÒµÖ´ÐеĴÎÐò¼°×÷ҵƽ¾ùÖÜתʱ¼ä£¿( 2 ) SJF Ë㷨ѡÖÐ×÷ÒµÖ´ÐеĴÎÐò¼°×÷ҵƽ¾ùÖÜתʱ¼ä£¿

Ê×Ò³

ÈëÃÅѧ³ÌÐò¼ÆËã»ú¿¼¼ÆËã»úµç×ÓÓ²¼þÖªÍøÂç֪רҵ¿Î³Ì´ð°¸ÊÓÆµ½Ì³ÌÏÂϰ Ô± ÑÐ ÊéÏÂÔØ ʶ ʶ ÏÂÔØ ÔØ

µÚÈýÕÂ

×÷ÕߣºØýÃû À´Ô´£ºÍøÂç

1¡¢ ÓÐÈý¸ö²¢·¢½ø³Ì£ºR ¸ºÔð´ÓÊäÈëÉ豸¶ÁÈëÐÅÏ¢¿é£¬M ¸ºÔð¶ÔÐÅÏ¢¿é¼Ó¹¤´¦Àí£»P ¸ºÔð´òÓ¡Êä³öÐÅÏ¢¿é¡£½ñÌṩ£» l £©Ò»¸ö»º³åÇø£¬¿É·ÅÖÃK ¸öÐÅÏ¢¿é£» 2 £©¶þ¸ö»º³åÇø£¬Ã¿¸ö¿É·ÅÖÃK ¸öÐÅÏ¢¿é£»

ÊÔÓÃÐźÅÁ¿ºÍP ¡¢V ²Ù×÷д³öÈý¸ö½ø³ÌÕýÈ·¹¤×÷µÄÁ÷³Ì¡£ ´ð£º

1 ) var B : array [ 0 , k-1 ] of item ; sread : semaPhore : = k ; smanage : semaPhore : = 0 ; swrite : semaphore : = 0 ; rptr : integer : = O ; mptr : integer : = O ; wptr £ºinteger : = 0 ; x : item cobegin

process reader ; process manager ; process writer ; begin begin begin

LI : read a message intox ; L2 : P ( smanage ) ; L3 : P ( swnte ) ; P ( sread ) ; x:=B[mptr]; x:=B[swrite];

B[rptr]:=x; mptr:=(mptr+1) mod k; wptr:=(wptr+1) mod k; Rptr:=(rptr+1) mod k; manage the message in x; V(sread); V(smanage); B[mptr]:=x; print the message in x; Goto L1; V(swrite); goto L3; End; goto L2; end; End; coend

2 ) var A , B :array [ 0 , k -l ] of item ; sPut1 : semaphore:=k; SPut2: semaPhore:=k;

sget1 : semaPhore : = 0 ; sget2 : semaphore : = 0 ; put1 £ºinteger £º=O ; put2£ºinteger : = 0 ; get1 £ºinteger £º=O ; get2 : integer : = O ; cobegin

process reader ; processn manager; process Writer ; begin begin begin

Ll : read a message into x ; L2 : P ( sgetl ) ; L3 : P ( sgetZ ) ; P ( SPut1 ) ; x : = A [ get1] ; x : = B [get2];

A [put1]:=x ; get1 £º(get1+1 ) mod k ; get2:=£¨get2 + l ) mod k ; Put1:=(put1+1) mod k; V(sput1); V(sput2);

V(sget1); manage the message into x; print the message in x; Goto L1; P(sput2); goto L3; Put2:=(put2+1) mod k; V(sget2); Goto L2; End; Coend

2 ÉèÓÐn ¸ö½ø³Ì¹²ÏíÒ»¸ö»¥³â¶Î£¬Èç¹û£º ( 1 £©Ã¿´ÎÖ»ÔÊÐíÒ»¸ö½ø³Ì½øÈ뻥³â¶Î£»

( 2 £©Ã¿´Î×î¶àÔÊÐím ¸ö½ø³Ì£¨m ´Øn £©Í¬Ê±½øÈ뻥³â¶Î¡£

ÊÔÎÊ£ºËù²ÉÓõÄÐźÅÁ¿³õÖµÊÇ·ñÏàͬ£¿ÐźÅÁ¿ÖµµÄ±ä»¯·¶Î§ÈçºÎ£¿ ´ð£ºËù²ÉÓõĻ¥³âÐźÅÁ¿³õÖµ²»Í¬¡£

1 £©»¥³âÐźÅÁ¿³õֵΪ1 £¬±ä»¯·¶Î§Îª£Û-n£«l , 1 £Ý¡£

µ±Ã»Óнø³Ì½øÈ뻥³â¶Îʱ£¬ÐźÅÁ¿ÖµÎª1 £»µ±ÓÐ1 ¸ö½ø³Ì½øÈ뻥³â¶Îµ«Ã»Óнø³ÌµÈ´ý½øÈ뻥³â¶Îʱ£¬ÐźÅÁ¿ÖµÎªO £»µ±ÓÐ1 ¸ö½ø³Ì½øÈ뻥³â¶ÎÇÒÓÐÒ»¸ö½ø³ÌµÈ´ý½øÈ뻥³â¶Îʱ£¬ÐźÅÁ¿ÖµÎª-1 £»×î¶à¿ÉÄÜÓÐn -1 ¸ö½ø³ÌµÈ´ý½øÈ뻥³â¶Î£¬¹Ê´ËʱÐźÅÁ¿µÄֵӦΪ-£¨n - 1 £©Ò²¾ÍÊÇ-n+1 ¡£

2 £©»¥³âÐźÅÁ¿³õֵΪm £¬±ä»¯·¶Î§Îª£Û-n£«m , m £Ý¡£

µ±Ã»Óнø³Ì½øÈ뻥³â¶Îʱ£¬ÐźÅÁ¿ÖµÎªm £»µ±ÓÐ1 ¸ö½ø³Ì½øÈ뻥³â¶Îµ«Ã»Óнø³ÌµÈ´ý½øÈ뻥³â¶Îʱ£¬ÐźÅÁ¿ÖµÎªm - 1 £ºµ±ÓÐm ¸ö½ø³Ì½øÈ뻥³â¶ÎÇÒûÓÐÒ»¸ö½ø³ÌµÈ´ý½øÈ뻥³â¶Îʱ£¬ÐźÅÁ¿ÖµÎª0 £ºµ±ÓÐm ¸ö½ø³Ì½øÈ뻥³â¶ÎÇÒÓÐÒ»¸ö½ø³ÌµÈ´ý½øÈ뻥³â¶Îʱ£¬ÐźÅÁ¿ÖµÎªÒ»l £»×î¶à¿ÉÄÜÓÐn - m ¸ö½ø³ÌµÈ´ý½øÈ뻥³â¶Î£¬¹Ê´ËʱÐźÅÁ¿µÄֵӦΪ-(n-m)Ò²¾ÍÊÇ-n+m.

3 ÓÐÁ½¸öÓÅÏȼ¶ÏàͬµÄ½ø³ÌP1ºÍP2£¬¸÷×ÔÖ´ÐеIJÙ×÷ÈçÏ£¬ÐźÅÁ¿S1ºÍS2³õÖµ¾ùΪ0¡£ÊÔÎÊPl ¡¢P2 ²¢·¢Ö´Ðкó£¬x ¡¢y ¡¢z µÄÖµ¸÷Ϊ¶àÉÙ£¿ P1: P2: Begin begin Y:=1; x:=1;

Y:=y+3; x:=x+5; V(S1); P(S1);

Z:=Y+1; X:X+Y; P(s2); V(S2); Y:=z+y; z:=z+x; End end

´ð£ºÏÖ¶Ô½ø³ÌÓï¾ä½øÐбàºÅ£¬ÒÔ·½±ãÃèÊö£® P1 : P2 : begin begin

y : = 1 £»¢Ù x :=1 ; ¢Ý y :=y+3 £»¢Ú x £ºx+5 ; ¢Þ V(S1); P(S1);

Z:Y+1 £»¢Û x £ºX£«Y ;¢ß P(s2); V(S2);

Y:=z+y; ¢Ü z£º=Z+X£»¢à End end

¢Ù ¡¢¢Ú ¡¢¢Ý ºÍ¢Þ ÊDz»ÏཻÓï¾ä£¬¿ÉÒÔÈκδÎÐò½»´íÖ´ÐУ¬¶ø½á¹ûÊÇΨһµÄ¡£½Ó×ÅÎÞÂÛϵͳÈçºÎµ÷¶È½ø³Ì²¢·¢Ö´ÐУ¬µ±Ö´Ðе½Óï¾ä¢ß ʱ£¬¿ÉÒԵõ½x = 10 , y = 4 ¡£°´Bernstein Ìõ¼þ£¬Óï¾ä¢Û µÄÖ´Ðнá¹û²»ÊÜÓï¾ä¢ß µÄÓ°Ï죬¹ÊÓï¾ä¢Û Ö´ÐкóµÃµ½z = 5 ¡£×îºó£¬Óï¾ä¢Ü ºÍ¢à ²¢·¢Ö´ÐУ¬ÕâʱµÃµ½ÁËÁ½ÖÖ½á¹ûΪ£º Óï¾ä¢Ü ÏÈÖ´ÐУºx =10 , y =9 , z= 150 Óï¾ä¢à ÏÈÖ´ÐУºx =10 , y =19 , z =15

´ËÍ⣬»¹ÓеÚÈýÖÖÇé¿ö£¬Óï¾ä¢Û ±»ÍƳ٣¬Ö±ÖÁÓï¾ä¢à ºóÔÙÖ´ÐУ¬ÓÚÊÇÒÀ´ÎÖ´ÐÐÒÔÏÂÈý¸öÓï¾ä£º 7 £º¶þz + X : z : = y + 1 ; y : £½ZÊ®y ;

Õâʱz µÄÖµÖ»¿ÉÄÜÊÇy £«1=5 £¬¹Êy =Z£«Y=5 + 4=9£¬¶øx = 10 ¡£ µÚÈýÖÖÇé¿öΪ£ºx = 10 £¬Y=9 , Z = 5 ¡£ 4 ÓÐÒ»ÔÄÀÀÊÒ£¬¶ÁÕß½øÈëʱ±ØÐëÏÈÔÚÒ»ÕŵǼDZíÉϵǼǣ¬¸Ã±íΪÿһ×ùλÁгöÒ»¸ö±íÄ¿£¬°üÀ¨×ùºÅ¡¢ÐÕÃû£¬¶ÁÕßÀ뿪ʱҪעÏúµÇ¼ÇÐÅÏ¢£»¼ÙÈçÔÄÀÀÊÒ¹²ÓÐ100 ¸ö×ùλ¡£ÊÔÓãºl £©ÐźÅÁ¿ºÍP ¡¢V ²Ù×÷£»2 £©¹Ü³Ì£¬À´ÊµÏÖÓû§½ø³ÌµÄͬ²½Ëã·¨¡£

´ð£º1 £©Ê¹ÓÃÐźÅÁ¿ºÍP ¡¢v ²Ù×÷£º var name £ºarray [ l ?100]of A ; A = record

number £ºinteger ; name£ºstring ; end

for i : = 1 to 100 do {A [ i ].number £ºi£»A [ i ].name :null;} mutex , seatcount : semaphore ;

i : integer £»mutex : = l ; seatcount : = 100 ; cobegin {

process readeri ( var readename£ºstring ) £¨i=1 , 2 ?) {