åèä¸ä¸å§ãå¯è½æä¸äºé误ï¼ä½è¿ç§æ³æ³æ¯å®å
¨æ£ç¡®çã
ä¼å
级è°åº¦ç®æ³ï¼
çï¼includeâstdio.hä¸â
å
æ¬âstdlib.hä¸â
âstring.hä¸â
typedefç»æèç¹BR /> {
å符å称[10]; / *è¿ç¨æ è¯ç¬¦* /
è¯ éPRIO; / *è¿ç¨çä¼å
级å·ç * /
intçå; / *å¤çæ¶é´çæ转æ¶é´ç* /
è¯ éCPUTIME; / *è¿ç¨çCPUæ¶é´* /
è¯ éneedtime; / *è¿ç¨è¿éè¦æ¶é´æ¥å®æ* /
è¯ é计æ°; / *计æ°å¨* /
å符ç¶æ; / *è¿ç¨ç¶æ* /
ç»æèç¹ä¸; / *é¾æé* /
} PCB;
PCB *å®æ*åå¤å¥½äºï¼å°¾å·´*è¿è¡/ *éåæé* /
æ´æ°N; / *è¿ç¨æ°* /
/ *å°å°±ç»ªéåä¸çæå
¥è¿è¡/
firstinç第ä¸éå·¥åºï¼ï¼ï¼
è¿è¡å好äºåå¤; / *就绪éåç头æéåé
ç»æ£å¨è¿è¡ç头æé* /
è¿è¡ç¶æ='R'/ *è¿ç¨çç¶ææ´æ¹ä¸ºè¿è¡ç¶æ* /
åå¤åå¤>ä¸; / *åå¤å å·¥å移å¨å°ä¸ä¸å头æé* /
}
/ *æ é¢è¾åºåè½* /
æ æPRT1ï¼åç¬¦ï¼ BR /> {
ï¼TOUPPERï¼ï¼=='P'ï¼/ *ä¼å
æ°çæ¹æ³* /
printfçï¼âå称çCPUæ¶é´needtimeä¼å
ç¶æ\ nâï¼;
å
¶ä» BR />è¾åºï¼âåCPUTIME needtimeæ°è½®ç¶æ\ Nâï¼;
}
/ *è¿ç¨PCBè¾åº* /
æ æPRT2ï¼CHARä¸ï¼PCB * Qï¼
> {
ï¼TOUPPERï¼ï¼=='P'ï¼/ *è¾åºä¼å
æ°* /
printfçï¼âï¼
10ï¼
-10Dï¼
-10D - 10Dï¼
C \ Nâï¼ Q->å称ï¼
Q-> CPUæ¶é´ï¼Q-> needtimeï¼Q-> PRIOï¼Q->ç¶æï¼;
å
¶ä»/ *æ转æ³è¾åº* /
printfï¼â请ï¼
10ï¼
10Dï¼
-10Dï¼
-10D-10D-C \ nâï¼Q->å称ï¼
Q-> CPUæ¶é´ï¼Q-> needtimeï¼Q->计æ°ï¼Q->è½®ï¼ Q->ç¶æï¼;
}
/ *è¾åºå½æ°* /
æ æPRTï¼çç®æ³ï¼
{
PCB * p;
PRT1 ï¼ç®æ³ï¼; / *è¾åºå¤´* /
ï¼run! = NULLï¼/ *å¦æä½ è¿è¡çæéä¸ä¸ºç©º* /
PRT2ï¼ç®æ³ï¼è¿è¡ï¼; / * PCBè¾åºçµæµè¿è¡* /
P =åå¤; / *è¾åºå°±ç»ªéåPCB * /
ï¼p! = NULLï¼
{
PRT2ï¼ç®æ³ï¼Pï¼;
p =>ä¸;
}
P =å®æ; / *è¾åºå®æéåPCB * /
ï¼p! = NULLï¼
{
PRT2ï¼ç®æ³ï¼Pï¼;
P = P->ä¸;
}
çgetchï¼ï¼; / *æä»»æé®ç»§ç»* /
}
/ *ä¼å
æ°éçæå
¥ç®æ³/
insert1ï¼PCB * Qï¼
{
PCB * P1ï¼* S * R;
INT B;
= Q; / *çPCBæéï¼æ¯è¦æå
¥* /
P1 =åå¤; / *就绪éåç头æé* /
R = P1; / * R P1åä½çæé* /
B? = 1;
ï¼ï¼p1! = NULLï¼&& Bï¼/ *ä¼å
æ°æ¥ç¡®å®æå
¥çä½ç½®* /
ï¼P1-> PRIO = S-> PRIOï¼
{
R = P1;
P1 = P1->ä¸;
}
å
¶ä»
B = 0;
ï¼r! = P1ï¼/ *å¦ææ¡ä»¶æç«ä¹é´æå
¥RåP1 * /
{
R->ä¸;
S-> = P1;
}
å
¶ä»
{
S-> = P1; / *å¦åæå
¥å°±ç»ªéåä¸ç头* /
åå¤;
}
}
/ *ç轮转æå
¥åè½* /
insert2ï¼PCB * P2ï¼
{
尾巴 - > = P2; / *æ°çPCBæå
¥å¨å½åç就绪éåå°¾é¨* /
å°¾= P2;
P2->ä¸ä¸ä¸ª= NULL;
}
/ *å建åå§PCBä¿¡æ¯ä¼å
æ°* /
æ æcreate1 ï¼CHAR ALGï¼
{
PCB * p;
æçæ¶é´;
å符ä¸éç¨10];
åå¤= NULL; / *就绪éåç头æé* /
å®æ= NULL; / *å®æéåç头æé* /
âè¿è¡=âNULL; / *è¿è¡éåçæéã * /
printfçï¼â请è¾å
¥å称åæ¶é´çæµç¨\ nâï¼; / *è¾å
¥è¿ç¨IDåæéè¦çæ¶é´å建ä¸ä¸ªPCB * /
为ï¼i = 1; <= N; + +ï¼
{
p =çmallocï¼sizeofï¼PCBï¼çï¼;
scanfçï¼âï¼
sâçï¼NAï¼;
scanfçï¼âï¼
dçï¼ä¸æ¶é´ï¼;
使ç¨strcpyï¼P->å称ï¼NAï¼;
P-> CPUæ¶é´= 0;
P-> needtimeç=æ¶é´;
P->ç¶æ='W'
P-> PRIO = 50;
å¦æï¼ready! = NULLï¼/ *就绪éåæ¯æ²¡æ空è°çæå
¥åè½æå
¥* /
insert1ï¼Pï¼; BR />å
¶ä»
{
P-> =åå¤å°±ç»ª; / *å建ä¸ä¸ªå°±ç»ªéåPCB * /
åå¤=;
}
} <BR / clrscrï¼ï¼;
printfï¼â请ä¼å
è¾åºï¼\ nâï¼;
printfï¼â请********************* *************************** \ nâï¼;
PRTï¼ALGï¼; / *è¾åºè¿ç¨PCB * / />è¿è¡=åå¤å°±ç»ª; / *就绪éåçå¤çæä½* /
åå¤=åå¤å°±ç»ª - >ä¸;
è¿è¡ - >ç¶æ='R';
}
/ *æ转çæ¹æ³æ¥å建è¿ç¨PCB * /
çæ æcreate2ï¼å符ALGï¼
{
PCB * p;
æï¼æ¶é´;
å符å¨[10] ;
åå¤å¥½= NULL;
å®æ= NULL;
è¿è¡= NULL;
printfçï¼âè¾å
¥å§ååæ¶é´çååå¤ç\ nâï¼;
ï¼æ= 1 <= N + +ï¼
{
P =çmallocï¼sizeofï¼PCBï¼çï¼;
scanfå½æ°ï¼âï¼
sâï¼NAï¼</ scanfå½æ°ï¼âï¼
dâï¼ï¼æ¶é´ï¼;
使ç¨strcpyï¼P->å称ï¼NAï¼; P-> CPUæ¶é´= 0;
p->çneedtimeæ¶é´;
> P->计æ°= 0; / *计æ°å¨* /
çp-state ='W';
P->å= 2; / *æ¶é´ç* /
ï¼åå¤å¥½äºï¼= NULLï¼
insert2ï¼Pï¼;
å
¶ä»
{
P-> =åå¤å°±ç»ª;
åå¤=;
å°¾= P
}
}
clrscrï¼ï¼;
printfï¼â请è¾åºè½®\ nâï¼;
printfçï¼â********* *************************************** \ nâï¼;
PRT ï¼ALGï¼; / *è¾åºè¿ç¨PCBä¿¡æ¯* /
è¿è¡åå¤; / *éåçè¿ç¨å°å¨å°æ¹å¹¶æå
¥è¿è¡* /
åå¤åå¤ä¸;
>è¿è¡ - >ç¶æ='R';
}
/ *çä¼å
级è°åº¦ç®æ³* /
ä¼å
ï¼å符ALGï¼
{
èï¼è·ï¼= NULLï¼/ *å½è¿è¡éåä¸ä¸ºç©ºï¼æ£å¨è¿è¡çè¿ç¨* /
è¿è¡ - > CPUæ¶é´=è¿è¡ - > CPUTIME +1;
è¿è¡> needtimeè¿è¡ - > needtime-1;
è¿è¡ - > PRIO =è¿è¡ - > PRIO-3; / *æ¯æ¬¡çè¿è¡ä¼å
级éä½3个åä½çæ°é* /
ï¼è¿è¡ - > needtime == 0ï¼/ *å¦æå·²å®æ0æå
¥éå* /
{
è¿è¡ - >ä¸=å®æ;
å®æè¿è¡;
è¿è¡æéçæ¶é´ - >ç¶æ='F'; / *设置ç¶ææ¥å®æçç¶æ* /
è¿è¡= NULL; / *è¿è¡éåç头æéæ¯ç©º* /
ï¼ready! = NULLï¼/ *å¦å°±ç»ªéåä¸ä¸ºç©º* /
firstinï¼ï¼; / *å°å¶å®ä¸ä¸ªè¿ç¨ï¼åæä½* /
}
/ *没æè¿è¡å®æï¼èç»ä¼å
æ°æ¯ä¸æ¯æ大çï¼ç¶åæå®åæ就绪ç¶æï¼æå
¥å°±ç»ªéå* /
ï¼ï¼ready! = NULLï¼&&ï¼è¿è¡ - > PRIO PRIOï¼ï¼
{
è¿è¡ç¶æ='W';
insert1ï¼è¿è¡ï¼;
firstinï¼ï¼; / *就绪éåç第ä¸ä¸ªè¿ç¨è¿è¡* /
>}
PRTï¼ALGï¼; / *è¾åºè¿ç¨PCBä¿¡æ¯* /
}
}
/ * round-robinæ¹æ³* /
roundrunï¼CHAR ALGï¼
{
ï¼run! = NULLï¼
{
è¿è¡ - > CPUæ¶é´=è¿è¡ - > CPUTIME +1;
è¿è¡ - > needtime =è¿è¡ - > needtime -1;
è¿è¡è®¡æ°è¿è¡è®¡æ°+1;
ï¼è¿è¡ - > needtime == 0ï¼/ *è¿è¡åæå®åæä¸ä¸ªå®æ´çç¶æï¼æå
¥å®æéå* /
{å
¨é¨
è¿è¡ - >ä¸=å®æ;
å®æè¿è¡;
è¿è¡ç¶æ='F';
è¿è¡= NULL
ï¼ready! = NULLï¼
firstinï¼ï¼; / *åå¤åä¸ä¸ºç©ºï¼ç¬¬ä¸éå·¥åºçæä½* /
}
å
¶ä»
ï¼è¿è¡ - >æ°==è¿è¡ - >åï¼/ *å¦ææ¶é´ç* /
{
è¿è¡ - >计æ°= 0; / *计æ°å¨è®¾ç½®ä¸º0 * /
ï¼ready! = NULLï¼/ *就绪éåä¸ç©º* /
{
è¿è¡ç¶æ='W'; / *å°å
¶æå
¥å°±ç»ªéåä¸çå¾
æ转* / /> insert2ï¼è¿è¡ï¼;
firstinï¼ï¼; / *å°åå¤æå
¥åæ£å¨è¿è¡çè¿ç¨* /
}
}
PRTï¼ALGï¼ / *è¾åºè¿ç¨çä¿¡æ¯* /
}
}
/ *主å½æ°* /
ï¼ï¼
{
å符ç®æ³; / *ç®æ³æ è®°* /
Clrscrï¼ï¼;
printfçï¼âç±»åçç®æ³ï¼P / Rï¼ä¼å
/ ROUNDROBINï¼\ nâï¼; scanfçï¼âï¼
câçç®æ³ï¼; / *è¾å
¥å符确å®ç®æ³* /
printfçï¼â请è¾å
¥è¿ç¨å·\ nâï¼;
scanfçï¼âï¼
dâï¼ï¼Nï¼; / *è¾å
¥çè¿ç¨æ°* / BR />ï¼ç®æ³=='P'| |ç®æ³=='P'ï¼
{
create1ï¼ç®æ³ï¼; / *ä¼å
æ°* /
ä¼å
级ï¼ç®æ³ï¼;
}
å
¶ä»
ï¼ç®æ³=='R'| |ç®æ³=='R'ï¼
{
create2ï¼ç®æ³ï¼; / *ä¸è½®å¾ªç¯* /
roundrunï¼ç®æ³ï¼;
}
}èµå26 |è¯è®º
温馨提示:答案为网友推荐,仅供参考