实验二、模拟进程调度功能
实验目的:
通过本实验,进一步掌握进程调度的功能和实现原理。
实验内容:
1、 设计进程调度功能,至少模拟两种以上调度算法。如:优先级调度算法、时间片调度
算法等。
2、 进程调度功能作为一个函数scheduler,加入到实验题目一中。
3、 进程调度程序从就绪队列中挑选进程,若队列为空,应显示“无就绪进程无法调度”
的提示信息。
4、 若选上一个进程,以显示:进程名、状态、时间片、优先级等信息表示一个进程被执
行。若运行完,应删除相应PCB。
实验步骤:
1、 在实验题目一中的主菜单中加入一个菜单项:6 调度,选择该菜单项后,系统进入进程调度。 2、 进程调度的结构:
进程调度子菜单 0---------返回主菜单 1---------优先级调度 2---------时间片调度 请选择您需要的功能选项:
X=? = 0 = 2 = 1 返回上级菜单
转优先级调度算法 转时间片调度算法 11
读入选择=》x
实验代码:
#include
};
struct PCB pcb[5]; int q=5;
void main()
{ int p,i; strcpy(pcb[0].name,\序列队列,优先级由高到低为1,2,3..... pcb[0].priority = 2;
pcb[0].runtime = 3;
strcpy(pcb[1].name,\序列队列 pcb[1].priority = 3; pcb[1].runtime = 2;
strcpy(pcb[2].name,\序列队列 pcb[2].priority = 1;
pcb[2].runtime = 4;
strcpy(pcb[3].name,\序列队列 pcb[3].priority = 5;
pcb[3].runtime = 6;
strcpy(pcb[4].name,\序列队列 pcb[4].priority = 4; pcb[4].runtime = 5;
printf(\进程调度子菜单------------------------------\\n\
printf(\ 0---------退出系统\\n\
12
printf(\ 1---------优先级调度\\n\
printf(\ 2---------时间片调度\\n\ printf(\显示所有进程\\n\ for(i=0;i<5;i++) printf(\ %d %d\\n\ printf(\请选择您需要的功能选项:\ scanf(\
printf(\
while(1)
{
if(p==0) break; switch(p) {
//case 0:
//break; case 1: printf(\优先级调度算法\\n\ priority();
break;
case 2: printf(\时间片调度算法\\n\ time();
break;
}
printf(\请选择您需要的功能选项:\ scanf(\
printf(\
}
}
void priority() { int i,j;
int t=0,r=0;
//int q=5;
char name[2]=\ for(i=0;i
{
13
strcpy(name,pcb[i].name); strcpy(pcb[i].name,pcb[j].name); strcpy(pcb[j].name,name); t=pcb[i].priority;
pcb[i].priority=pcb[j].priority;
pcb[j].priority=t;
r=pcb[i].runtime;
pcb[i].runtime=pcb[j].runtime; pcb[j].runtime=r;
} }
printf(\按优先级高低进行排序\\n\
for(i=0;i printf(\ %d %d\\n\ printf(\ printf(\显示优先级最高的进程\\n\ printf(\ %d %d\\n\ for(i=0;i strcpy(pcb[i].name,pcb[i+1].name); pcb[i].priority = pcb[i+1].priority; pcb[i].runtime = pcb[i+1].runtime; } printf(\ printf(\使最高优先级进程处于执行状态(撤销该进程)\\n\ for(i=0;i printf(\ %d %d\\n\ q=q-1; } void time() { int i,j,t; //int q=5; for(i=0;i printf(\ %d %d\\n\ for(i=0;i } printf(\ printf(\将每个执行进程的执行时间减去一个时间片。\\n\ for(i=0;i 14 printf(\ %d %d\\n\ for(i=0;i for(j=t;j strcpy(pcb[j].name,pcb[j+1].name); pcb[j].priority = pcb[j+1].priority; pcb[j].runtime = pcb[j+1].runtime; } q=q-1; } } printf(\ printf(\将进行结束的进程撤销。\\n\ for(i=0;i printf(\ %d %d\\n\ } } 15