1、2、设计题目设计一个按多级队列调度算法实现处理器调度的程序。3、设计思想 设置多个就绪队列,分别赋予不同的优先级,如逐级降低,队列1的优先级最高。每个队列执行时间片的长度也不同,规定优先级越低则时间片越长,如逐级加倍。新进程进入内存后,先投入队列1的末尾,按FCFS算法调度;若按队列1一个时间片未能执行完,则降低投入到队列2的末尾,同样按FCFS算法调度;如此下去,降低到最后的队列,则按“时间片轮转”算法调度直到完成。仅当较高优先级的队列为空,才调度较低优先级的队列中的进程执行。如果进程执行时有新进程进入较高优先级的队列,则抢先执行新进程,并把被抢先的进程投入原队列的末尾。源代码 #inclu
2、de stdio.hconio.hstdlib.hmalloc.htime.hwindows.h#define null 0#define N 4int MN=18;struct cpu /就绪队列 int time; /时间片数量 struct pss *head; struct pss *tail; ; struct pss /进程 char name5; int pro_time; /执行时间 int l_time; / 剩余时间 struct pss *next;void gotoxy(int x, int y) COORD c;c.X = x - 1;c.Y = y - 1;SetC
3、onsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c); void initial(struct cpu cpu_quene) /初始化就绪队列,时间片分别为2 4 8 16 int i,t=2; for(i=0;iname); gotoxy(25,8);请输入处理进程需要的时间:%d,&p-pro_time); p-l_time=p-pro_time; /剩余时间初始化,初始值为需要时间的值next=null; if(cpu_quene0.head=null) cpu_quene0.head=p; cpu_quene0.tail=p
4、; else q=cpu_quene0.tail; q-next=p;void osdelay(int n)int a,i,m; m=500*n; a=clock();i+) if(clock()-a=m) break;void print(struct cpu cpu_quene) struct pss *p; gotoxy(23,5); p=cpu_quene0.head; while(p!=null) printf(%s %d name,p-l_time); p=p-next; gotoxy(23,7); p=cpu_quene1.head; gotoxy(23,9); p=cpu_qu
5、ene2.head; gotoxy(23,11); p=cpu_quene3.head;void nprint(struct pss *p)gotoxy(27,15);void process(struct cpu cpu_queneN) /进程执行函数 struct pss *p,*q,*p1; int i=0,j,a,b; int flag1=1; while(il_time!=0) osdelay(1); p-l_time-1; /剩余时间-1?进程%s处理完毕,离开队列! cpu_quenei.head=p- print(cpu_quene); gotoxy(MN,18);%s %d
6、/输出执行结果 MN=MN+9; free(p); /释放内存 p=cpu_quenei.head; gotoxy(10,2);所有进程处理完毕! gotoxy(10,2); flag1=0; case 2:p=cpu_quenei.head; for(;cpu_quenei.head!=null; cpu_quenei.head=p- gotoxy(27,15); b=cpu_quenei.time; while(p-=0&b! p- b-; /时间片减1 if(p-l_time=0) /剩余时间为零 gotoxy(27,15); /输出完成进程 else j=i+1; if(cpu_que
7、nej.head!=null) /p=cpu_quenei.head q=cpu_quenej.tail; cpu_quenej.tail=p; q- else cpu_quenej.head=p; p- print(cpu_quene); p=cpu_quenei.head; if(i=3) break; void main() int i, j,flag=1,t=2; char a; struct pss *p1; struct cpu cpu_quene4; initial(cpu_quene); /创建就绪队列flag=1;) gotoxy(20,4); for(j=5;jname,p1- p1=p1-next
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1