处理机调度算法实验报告
实验二 处理机调度算法
(1)处理机调度的目的是什么? 为提高内存利用率和系统吞吐量。 将那些暂时不能运行的进程调至外存,当内存不紧张时,将那些具备运行条件的就绪进程重新调入内存。
合理快速的处理计算机软件硬件资源,分配处理机,用以提高处理机的利用率及改善系统性能(吞吐量,响应时间)。
(2)处理机调度的算法有哪些,各自的优缺点是什么? ① 先来先服务算法:有利于长作业(进程),不利于短作业(进程); ② 短作业优先调度算法:有利于短作业(短进程),不利于长作业(长进程);
③ 高优先权调度算法:静态缺点:可能导致低优先权进程长期得不到调度甚至饿死; 动态:优先权随进程等待时间增加或执行而变
④ 高响应比优先调度算法
⑤ 基于时间片轮转调度算法:时间片太小,会频繁发生中断,系统开销增大 时间片太大,响应进程慢。
⑥ 多级反馈队列调度算法:具有较好的性能,能很好满足各类型用户的需求。
1. 内存中作业运行的序列:A 、B 、D 、C 2. A 进入内存的时刻1,结束的时刻5
B 进入内存的时刻5,结束的时刻8 D 进入内存的时刻8,结束的时刻10 C 进入内存的时刻10,结束的时刻15 3
.平均周转时间:6 1. 内存中作业运行的序列:B 、C 、A 、D 2. B 进入内存的时刻3,结束的时刻6
C 进入内存的时刻6,结束的时刻11 A 进入内存的时刻11,结束的时刻15 D 进入内存的时刻15,结束的时刻17 3.平均周转时间:8.75
(4)画出处理机调度算法的程序流程图;
(5)补全参考程序;
void process(int currentTmp, int nextTmp) { int j;
int s=nextTmp-currentTmp;
while(memoryNum>0 && s>=memory[0].needtime){ totalTime=totalTime+memory[0].needtime; s=s-memory[0].needtime;
printf("线程%c的开始时间是:%d,结束时间
是:%f\n",memory[0].id,memory[0].cputime,totalTime+1); allTime+=totalTime+1; memoryNum--;
for(j = 1; j
if(waitNum>0 && s>0){
memory[memoryNum] = wait[0]; memoryNum++; waitNum--;
for(j = 1; j
sort(memory,memoryNum, 'P'); } }
if(memoryNum>0 && s
}
//选择排序算法,若key 为'P' 则按优先级大的排在数组首,否则为'N' 则按所需时间进行短作业优先排序
void sort(PCB *pcb,int count, char key) { PCB *p;
PCB mao; int i,j;
if(key=='P'){
for(i=0;i
for(j=0;j
if((p->priority)>((p+1)->priority)){ mao=*p;
*p=*(p+1); *(p+1)=mao; } p++; } }
}else if(key=='N'){
for(i=0;i
for(j=0;j
if((p->needtime)>((p+1)->needtime)){ mao=*p; *p=*(p+1); *(p+1)=mao; } p++; } } }
}
(6)基于例题中的例子,分别运行两种处理机调度算法并将运行结果截图。