处理机调度算法实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)基于例题中的例子,分别运行两种处理机调度算法并将运行结果截图。

相关文档
最新文档