-
大小: 4KB文件類型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-05-09
- 語言: C/C++
- 標(biāo)簽: 進(jìn)程調(diào)度??
資源簡介
基于C語言的進(jìn)程調(diào)度算法(優(yōu)先權(quán))(包括:就緒隊(duì)列,完成隊(duì)列,運(yùn)行隊(duì)列)
代碼片段和文件信息
#include
#include
#include
#include
typedef?struct?node
{
???char?name[10];??/*進(jìn)程標(biāo)識符*/
???int?prio;???/*進(jìn)程優(yōu)先數(shù)*/
???int?cputime;?/*進(jìn)程占用CPU時(shí)間*/
???int?needtime;?/*進(jìn)程到完成還要的時(shí)間*/
???char?state;?/*進(jìn)程的狀態(tài)*/
???struct?node?*next;?/*鏈指針*/
}PCB;
PCB?*finish*ready*run;?/*隊(duì)列指針*/
int?N;?/*進(jìn)程數(shù)*/
/*將就緒隊(duì)列中的第一個(gè)進(jìn)程投入運(yùn)行*/
void?firstin()
{
???run=ready;???/*就緒隊(duì)列頭指針賦值給運(yùn)行頭指針*/
???run->state=‘R‘;???/*進(jìn)程狀態(tài)變?yōu)檫\(yùn)行態(tài)*/
???ready=ready->next;??/*就緒對列頭指針后移到下一進(jìn)程*/
}
void?prt1()????/*標(biāo)題輸出函數(shù)*/
{
?????printf(“??name?????cputime??needtime??priority??state\n“);
}
void?prt2(PCB?*q)??/*進(jìn)程PCB輸出*/
{
???printf(“??%-10s%-10d%-10d%-10d?%c\n“q->name
???????q->cputimeq->needtimeq->prioq->state);
}
void?prt()????/*輸出函數(shù)*/
{
???PCB?*p;
???prt1();??/*輸出標(biāo)題*/
???if(run!=NULL)?/*如果運(yùn)行指針不空*/
??????prt2(run);?/*輸出當(dāng)前正在運(yùn)行的PCB*/
???p=ready;??/*輸出就緒隊(duì)列PCB*/
???while(p!=NULL)
???{
??????prt2(p);
??????p=p->next;
???}
???p=finish;??/*輸出完成隊(duì)列的PCB*/
???while(p!=NULL)
???{
??????prt2(p);
??????p=p->next;
???}
???getch();??/*按任意鍵繼續(xù)*/
}
void?insert(PCB?*q)???/*優(yōu)先數(shù)的插入算法*/
{
???PCB?*p1*s*r;
???int?b;
???s=q;??/*待插入的PCB指針*/
???p1=ready;?/*就緒隊(duì)列頭指針*/
???r=p1;?/*r做p1的前驅(qū)指針*/
???b=1;
???while((p1!=NULL)&&b)??/*根據(jù)優(yōu)先數(shù)確定插入位置*/
??????if(p1->prio>=s->prio)
??????{
?????????r=p1;
?????????p1=p1->next;
??????}
??????else
?????????b=0;
???if(r!=p1)??/*如果條件成立說明插入在r與p1之間*/
???{
??????r->next=s;
??????s->next=p1;
???}
???else
???{
??????s->next=p1;??/*否則插入在就緒隊(duì)列的頭*/
??????ready=s;
???}
}
void?create()????/*優(yōu)先數(shù)創(chuàng)建初始PCB信息*/
{
???PCB?*p;
???int?itime;
???char?na[10];
???ready=NULL;?/*就緒隊(duì)列頭指針*/
???finish=NULL;??/*完成隊(duì)列頭指
評論
共有 條評論