实验代码:
//操作系统实验--进程调度 #include #include #include #include const long n=5; struct pcbtype { long id, priority, runtime, totaltime; char status; //R, W, F -> 运行,就绪,完成 //进程控制块结构 }PCB[n+1]; long link[n+1]; //链表结构 long RUN, HEAD, TAIL; //选择算法 long ChooseAlgo() { char s[128]; printf(\gets(s); if (s[0]=='P' || s[0]=='p') } return 1; return 0; //初始化 void init() { long i; for (i=1; i<=n; i++) { PCB[i].id = i; PCB[i].priority = rand()%4+1; PCB[i].runtime = 0; PCB[i].totaltime = rand()%8+1; PCB[i].status = 'W'; } } //显示进程调度状况 void showit() { long i; printf(\printf(\for (i=1; i<=n; i++) printf(\printf(\for (i=1; i<=n; i++) printf(\printf(\for (i=1; i<=n; i++) printf(\printf(\for (i=1; i<=n; i++) printf(\printf(\for (i=1; i<=n; i++) printf(\printf(\if (RUN != -1) printf(\else printf(\printf(\for (i=HEAD; i!=-1; i=link[i]) printf(\printf(\} //优先数调度算法 HEAD=sort[1]; for (i=1; ii; j--) { if (PCB[sort[j]].priority > PCB[sort[j-1]].priority) { k=sort[j]; sort[j]=sort[j-1]; sort[j-1]=k; } } } //根据优先数排序 long sort[n+1]; PCB[RUN].priority -= 3; //优先级减3 PCB[RUN].runtime++; if (PCB[RUN].totaltime == 0) { PCB[RUN].status='F'; RUN = HEAD; if (HEAD != -1) HEAD = link[HEAD]; PCB[RUN].status='R'; } else { if (HEAD != -1 && PCB[RUN].priority < PCB[HEAD].priority) { k=HEAD; PCB[RUN].status = 'W'; //寻找等待链中的合适位置 while (k!=TAIL && PCB[link[k]].priority > PCB[RUN].priority) k=link[k]; if (k == TAIL) { link[k] = RUN; TAIL = RUN; link[RUN] = -1; RUN = HEAD; HEAD = link[HEAD]; PCB[RUN].status = 'R'; } else { link[RUN] = link[k]; link[k] = RUN; RUN = HEAD; //链首进程开始运行 //插入链中 //插入链尾之后 //进程运行完成 HEAD = link[HEAD]; PCB[RUN].status = 'R'; } } } } showit(); } //轮转调度算法 void main_round_robin() { long i; init(); //设置就绪链 HEAD = 1; for (i=1; i