处理机调度算法实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二处理机调度算法
(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<=memoryNum; j++)
memory[j-1] = memory[j];
if(waitNum>0 && s>0){
memory[memoryNum] = wait[0];
memoryNum++;
waitNum--;
for(j = 1; j<=waitNum; j++)
wait[j-1] = wait[j];
sort(memory,memoryNum, 'P');
}
}
if(memoryNum>0 && s totalTime=totalTime+s; memory[0].needtime-=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 p=pcb; 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 p=pcb; for(j=0;j if((p->needtime)>((p+1)->needtime)){ mao=*p; *p=*(p+1); *(p+1)=mao; } p++; } } } } (6)基于例题中的例子,分别运行两种处理机调度算法并将运行结果截图。