1、时间片轮转法完成进程调度【实验目的】(1) 加深对进程的理解(2) 理解进程控制块的结构(3) 理解进程运行的并发性(4) 掌握时间片轮转法进程调度算法【实验内容】(1) 建立进程控制块(2) 设计三个链队列,分别表示运行队列、就绪队列和完成队列(3) 用户输入进程标识符以及进程所需的时间,申请空间存放进程 PCB 信息。(4) 每一个时间片结束输出各进程的进程号,CPU 时间(即已经占用的 CPU 时间) ,所需时间(即还需要的 CPU 时间) ,以及状态(即用 W 表示等待, R 表示运行,F 表示完成)【程序代码】#include “stdio.h“#include“stdlib.h“s
2、truct PCBint pid; /进程标识符int rr; /已运行时间int time; /进程要求运行时间char sta; /进程的状态struct PCB *next; /链接指针;struct PCB pcb1,pcb2,pcb3,pcb4,pcb5,*tail,*head,*rp;init()int i,time;pcb1.pid = 1;pcb2.pid = 2;pcb3.pid = 3;pcb4.pid = 4;pcb5.pid = 5;pcb1.rr =pcb2.rr =pcb3.rr =pcb4.rr =pcb5.rr = 0;pcb1.sta = pcb2.sta =
3、 pcb3.sta = pcb4.sta = pcb5.sta = w;printf(“请输入时间片 p1 需要运行的时间:“);scanf(“%d“,pcb1.time = time;printf(“请输入时间片 p2 需要运行的时间:“);scanf(“%d“,pcb2.time = time;printf(“请输入时间片 p3 需要运行的时间:“);scanf(“%d“,pcb3.time = time;printf(“请输入时间片 p4 需要运行的时间:“);scanf(“%d“,pcb4.time = time;printf(“请输入时间片 p5 需要运行的时间:“);scanf(“
4、%d“,pcb5.time = time;pcb1.next=pcb2.next=pcb3.next=pcb4.next=pcb5.next=head = tail = void printf1()printf(“+-|-|-|-+n“);printf(“|tpidt|trrt|ttimet|tSTAt|n“);printf(“|-|-|-|-|n“);printf2()printf(“processes p%d runningn“,head-pid);printf1();printf(“|t%dt|t%dt|t%dt|t%ct|n“,head-pid,head-rr,head-time,he
5、ad-sta);printf(“|-|-|-|-|n“);rp=head;while(rp!=tail) rp=rp-next;printf(“|t%dt|t%dt|t%dt|t%ct|n“,rp-pid,rp-rr,rp-time,rp-sta);printf(“|-|-|-|-|n“); operation() int flag=1;while (flagrr +;if (head-rr=head-time)|(head-time=0)tail-sta=w;head-sta=f;printf2();head=head-next;tail-next=head;flag+;elsetail-sta=w;head-sta=r;printf2();tail=head;head=head-next; void main() init(); /初始化printf(“this is the begin state :n“);printf2(); /显示初始状态operation(); /运行【结果截图】