您的当前位置:首页正文

处理机调度

来源:华佗健康网


__ 成绩(五级制):________

《操作系统》实验报告

课程名称 _操作系统_ 实验题目 _处理机调度_

2013年 11月 25日

1.实验目的:

进程调度是操作系统最重要的概念之一,是操作系统核心内容。调度算法好坏将直接影响操作系统的性能。本实验可以加深对进程调度和各种调度算法的理解。 要求到达的进程数、各进程到达的时间可以任意选择。 通过实验,求出平均周转时间和加权均周转时间。

2.内容与要求:

根据表格数据求出平均周转时间和加权均周转时间。 作业 1 2 3 4 平均周转时间 平均带权周转时间

3.流程图:

提交时间 8.00 8.5 9.00 9.5 1.725 6.875 运行时间 2.00 0.5 0.10 0.20 开始时间 8.00· 10.00 10.50 10.60 完成时间 10.00 10.50 10.60 10.80 周转时间 2.00 2.00 1.60 1.30 带权周转时间 1.00 4.00 16.00 6.50

4.部分代码及截图: #include #include #define MAX 10 struct task_struct {

char name[10]; /*进程名称*/ float come_time; /*到达时间*/

float run_begin_time; /*开始运行时间*/ float run_time; /*运行时间*/

float run_end_time; /*运行结束时间*/ }tasks[MAX],temp;

int counter; /*实际进程个数*/ int fcfs(); /*先来先服务*/

int pinput(); /*进程参数输入*/ int poutput(); /*调度结果输出*/

int sort();/*判断进程的到达时间最先*/

int fcfs() /*先来先服务*/ {

float time_temp=0; int i;

time_temp=tasks[0].come_time; for(i=0;itasks[i].run_begin_time=time_temp;

tasks[i].run_end_time=tasks[i].run_begin_time+tasks[i].run_time; time_temp=tasks[i].run_end_time; }

return 0; }

int sort()/*判断进程的到达时间最先*/ {

int i,j;

for(i=0;iif(tasks[i].come_timetemp=tasks[i]; tasks[i]=tasks[j]; tasks[j]=temp; }

return 0; }

int pinput() /*进程参数输入*/ { int i;

printf(\"请输入进程数:\\n\"); scanf(\"%d\for(i=0;i{ printf(\"******************************************\\n\"); printf(\"please input the process of %d th :\\n\printf(\"请输入进程名字:\"); scanf(\"%s\

printf(\"请输入进程到达时间:\"); scanf(\"%f\printf(\"请输入进程运行时间:\"); scanf(\"%fasks[i].run_begin_time=0; tasks[i].run_end_time=0;

}

return 0; }

int poutput() /*调度结果输出*/ { int i;

float turn_round_time=0,f1,w=0,avg_f1=0,avg_w,s=0;

printf(\"┌──┬────┬────┬────┬────┬────┬──────┐\\n\"); printf(\"丨作业丨提交时间丨运行时间丨开始时间丨完成时间丨周转时间丨带权周转时间丨\\n\"); for(i=0;if1=tasks[i].run_end_time-tasks[i].come_time; turn_round_time+=f1; w=(f1/tasks[i].run_time); s+=w;

printf(\"丨 %s 丨 %5.2f 丨 %5.2f 丨%5.2f 丨%5.2f 丨%5.2f 丨 %5.2f 丨\\n\" ,tasks[i].name,tasks[i].come_time,tasks[i].run_time,tasks[i].run_begin_time,tasks[i].run_end_time,f1,w); }

avg_f1=(turn_round_time/counter); avg_w=(s/counter);

printf(\"└──┴────┴────┴────┴────┴────┴──────┘\\n\"); printf(\"平均周转时间%5.3f\\n\printf(\"平均带权周转时间%5.3f\\n\return 0; }

int main() {

pinput();

printf(\"******************************************\\n\"); printf(\"对进程按先来先服务调度。\\n\\n\"); sort(); fcfs(); poutput(); }

5.小结:

将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务(驻留时间最长)的方式进行调度处理。

• 对于作业调度:该算法就是从后备作业队列中(按进入的时间顺序排队)选择队首一个或几个作业,调入内存,创建进程,放入就绪队列。 • 对于进程调度:该算法就是从就绪队列中选择一个最先进入队列的进程,将CPU分配于它。

因篇幅问题不能全部显示,请点此查看更多更全内容