SRTF平均周转时间怎么算算

实验三、进程调度模拟程序2.0
时间: 01:17:11
&&&& 阅读:169
&&&& 评论:
&&&& 收藏:0
标签:实验三、进程调度模拟程序2.0
一、&&& 实验目的
用C语言模拟进程调度程序,以加深对进程的概念及进程调度算法的理解。
二、&&& 实验内容及要求
设计一个有 N个进程并发执行的进程调度模拟程序。
1、模拟进程数据的生成
用户选择输入每个进程的到达时间,所需运行时间,进程的运行时间以时间片为单位。
2、模拟调度程序的功能
按照模拟数据的到达时间和所需运行时间,能分别执行以下调度算法:
3、显示每种算法下各进程的调度执行顺序。
4、计算各进程的开始执行时间,各作业的完成时间,周转时间和带权周转时间。
5、 模拟数据结果分析:对同一组模拟数据,比较各算法的平均周转时间,周转系数。
三、&&& 实验方法及结果测试
实现代码如下:
#include&stdio.h&
#include&stdlib.h&
#define MAX 100
/*定义进程结构体*/
typedef struct pcb {
&&& char name[30];//进程名称
&&& double responseR//进程响应比
&&& int arriveT//进程到达时间
&&& int serveT//进程服务时间
&&& int finishT//进程完成时间
&&& int cpuT//进程占用CPU时间
&&& double roundT//周转时间
&&& double daiquanT//带权周转时间
&&&//进程状态
PCB p[MAX];
//进程数目
//时间片长度
Input(PCB p[MAX],int n,char c) {
&&& switch(c) {
&&&&&& case 1:
&&&&&&&&&& for(i=0; i&n; i++) {
&&&&&&&&&&&&& printf("第%d个进程的名称:",i+1);
&&&&&&&&&&&&& scanf("%s",&p[i].name);
&&&&&&&&&&&&& printf("第%d个进程的到达时间:",i+1);
&&&&&&&&&&&&& scanf("%d",&p[i].arriveTime);
&&&&&&&&&&&&& printf("第%d个进程的服务时间:",i+1);
&&&&&&&&&&&&& scanf("%d",&p[i].serveTime);
&&&&&&&&&&&&& printf("\n");
&&&&&&&&&& }
&&&&&&&&&&
&&&&&& case 2:
&&&&&&&&&& for(i=0; i&n; i++) {
&&&&&&&&&&&&& printf("第%d个进程的名称:",i+1);
&&&&&&&&&&&&& scanf("%s",&p[i].name);
&&&&&&&&&&&&& printf("第%d个进程的到达时间:",i+1);
&&&&&&&&&&&&& scanf("%d",&p[i].arriveTime);
&&&&&&&&&&&&& printf("第%d个进程的服务时间:",i+1);
&&&&&&&&&&&&& scanf("%d",&p[i].serveTime);
&&&&&&&&&&&&& p[i].state=‘r‘;
&&&&&&&&&&&&& p[i].cpuTime=0;
&&&&&&&&&&&&& p[i].finishTime=0;
&&&&&&&&&&&&& printf("\n");
&&&&&&&&&& }
&&&&&&&&&&
&&&&&& case 3:
&&&&&&&&&& for(i=0; i&n; i++) {
&&&&&&&&&&&&& printf("第%d个进程的名称:",i+1);
&&&&&&&&&&&&& scanf("%s",&p[i].name);
&&&&&&&&&&&&& printf("第%d个进程的到达时间:",i+1);
&&&&&&&&&&&&& scanf("%d",&p[i].arriveTime);
&&&&&&&&&&&&& printf("第%d个进程的服务时间:",i+1);
&&&&&&&&&&&&& scanf("%d",&p[i].serveTime);
&&&&&&&&&&&&& printf("\n");
&&&&&&&&&& }
&&&&&&&&&&
&&&&&& case 4:
&&&&&&&&&& for(i=0; i&n; i++) {
&&&&&&&&&&&&& printf("第%d个进程的名称:",i+1);
&&&&&&&&&&&&& scanf("%s",&p[i].name);
&&&&&&&&&&&&& printf("第%d个进程的服务时间:",i+1);
&&&&&&&&&&&&& scanf("%d",&p[i].serveTime);
&&&&&&&&&&&&& printf("\n");
&&&&&&&&&& }
&&&&&&&&&&
&&&&&& case 0:
&&&&&&&&&&
Output(PCB p[MAX],int n,char c) {
&&& switch(c) {
&&&&&& case 1:
&&&&&&&&&& printf("进程名称 到达时间 服务时间 完成时间 周转时间 带权周转时间\n");
&&&&&&&&&& for(i=0; i&n; i++) {
&&&&&&&&&&&&& printf("&&& %s\t",p[i].name);
&&&&&&&&&&&&& printf("&&&& %d\t",p[i].arriveTime);
&&&&&&&&&&&&& printf("&&&& %d\t",p[i].serveTime);
&&&&&&&&&&&&& printf("&&&& %d\t",p[i].finishTime);
&&&&&&&&&&&&& printf("&&& %f\t",p[i].roundTime);
&&&&&&&&&&&&& printf("%f",p[i].daiquanTime);
&&&&&&&&&&&&& printf("\n");
&&&&&&&&&& }
&&&&&&&&&&
&&&&&& case 2:
&&&&&&&&&& printf("进程名称 到达时间 服务时间 当前时间 进程状态 完成时间&& 周转时间 带权周转时间\n");
&&&&&&&&&& for(i=0; i&n; i++) {
&&&&&&&&&&&&& printf("&&& %s\t",p[i].name);
&&&&&&&&&&&&& printf("&&& %d\t",p[i].arriveTime);
&&&&&&&&&&&&& printf("&&&& %d\t",p[i].serveTime);
&&&&&&&&&&&&& printf("&&&&&& %d\t",p[i].cpuTime);
&&&&&&&&&&&&& printf("%c\t",p[i].state);
&&&&&&&&&&&&& printf("%d\t",p[i].finishTime);
&&&&&&&&&&&&& printf("%f",p[i].roundTime);
&&&&&&&&&&&&& printf("& %f",p[i].daiquanTime);
&&&&&&&&&&&&& printf("\n");
&&&&&&&&&& }
&&&&&&&&&&
&&&&&& case 3:
&&&&&&&&&& printf("进程名称 到达时间 服务时间 当前时间 进程状态 完成时间&& 周转时间 带权周转时间\n");
&&&&&&&&&& for(i=0; i&n; i++) {
&&&&&&&&&&&&& printf("&&& %s\t",p[i].name);
&&&&&&&&&&&&& printf("&&& %d\t",p[i].arriveTime);
&&&&&&&&&&&&& printf("&&&& %d\t",p[i].serveTime);
&&&&&&&&&&&&& printf("&&&&&& %d\t",p[i].cpuTime);
&&&&&&&&&&&&& printf("%c\t",p[i].state);
&&&&&&&&&&&&& printf("%d\t",p[i].finishTime);
&&&&&&&&&&&&& printf("%f",p[i].roundTime);
&&&&&&&&&&&&& printf("& %f",p[i].daiquanTime);
&&&&&&&&&&&&& printf("\n");
&&&&&&&&&& }
&&&&&&&&&&
&&&&&& case 4:
&&&&&&&&&& printf("进程名称 服务时间\n");
&&&&&&&&&& for(i=0; i&n; i++) {
&&&&&&&&&&&&& printf("&&& %s\t",p[i].name);
&&&&&&&&&&&&& printf("&&&& %d\t",p[i].serveTime);
&&&&&&&&&&&&& printf("\n");
&&&&&&&&&& }
&&&&&&&&&&
&&&&&& case 0:
&&&&&&&&&&
//按到达时间进行冒泡排序
ArriveTimeSort(PCB p[MAX],int n) {
&&& int i,j,
&&& for(i=1; i&n; i++) {
&&&&&& flag=0;
&&&&&& for(j=0; j&n-i; j++) {
&&&&&&&&&& if(p[j].arriveTime&p[j+1].arriveTime) {
&&&&&&&&&&&&& temp=p[j];
&&&&&&&&&&&&& p[j]=p[j+1];
&&&&&&&&&&&&& p[j+1]=
&&&&&&&&&&&&& flag=1;
&&&&&&&&&& }
&&&&&& if(flag=0) {
&&&&&&&&&&
//按服务时间进行冒泡排序
ServeTimeSort(PCB p[MAX],int n) {
&&& int i,j,
&&& for(i=1; i&n; i++) {
&&&&&& flag=0;
&&&&&& for(j=0; j&n-i; j++) {
&&&&&&&&&& if(p[j].serveTime&p[j+1].serveTime) {
&&&&&&&&&&&&& temp=p[j];
&&&&&&&&&&&&& p[j]=p[j+1];
&&&&&&&&&&&&& p[j+1]=
&&&&&&&&&&&&& flag=1;
&&&&&&&&&& }
&&&&&& if(flag=0) {
&&&&&&&&&&
CpuTimeCalculate(PCB p[MAX],int n) {
&&& int m=0,i=0;
&&& for(i = 0 ; i & i ++) {
&&&&&& m = p[i].cpuTime+m;
Run(PCB p[MAX] , int n , char c) {
&&& int i,j,t;
&&& int m,k=0;
&&& switch(c) {
&&&&&& case 1:
&&&&&&&&&& p[0].finishTime=p[0].arriveTime+p[0].serveT
&&&&&&&&&& p[0].roundTime=p[0].finishTime-p[0].arriveT
&&&&&&&&&& p[0].daiquanTime=p[0].roundTime/p[0].serveT
&&&&&&&&&& for(i=1; i&n; i++) {
&&&&&&&&&&&&& if(p[i].arriveTime&p[i-1].finishTime) {
&&&&&&&&&&&&&&&&& p[i].finishTime=p[i-1].finishTime+p[i].serveT
&&&&&&&&&&&&&&&&& p[i].roundTime=p[i].finishTime-p[i].arriveT
&&&&&&&&&&&&&&&&& p[i].daiquanTime=p[i].roundTime/p[i].serveT
&&&&&&&&&&&&& } else {
&&&&&&&&&&&&&&&&& p[i].finishTime=p[i].arriveTime+p[i].serveT
&&&&&&&&&&&&&&&&& p[i].roundTime=p[i].finishTime-p[i].arriveT
&&&&&&&&&&&&&&&&& p[i].daiquanTime=p[i].roundTime/p[i].serveT
&&&&&&&&&&&&& }
&&&&&&&&&& }
&&&&&&&&&&
&&&&&& case 2:
&&&&&&&&&& for(i = 0 ; i & i ++) {
&&&&&&&&&&&&& m = p[i].serveTime+m;
&&&&&&&&&&&&& for(j = 0 ; j & j ++) {
&&&&&&&&&&&&&&&&& printf("请按回车键继续运行......!\n");
&&&&&&&&&&&&&&&&& getchar();
&&&&&&&&&&&&&&&&& p[i].cpuTime++;
&&&&&&&&&&&&&&&&& p[i].state=‘R‘;
&&&&&&&&&&&&&&&&& p[i].serveTime--;
&&&&&&&&&&&&&&&&& ServeTimeSort(p,n);
&&&&&&&&&&&&&&&&& if(p[i].serveTime!=0) {
&&&&&&&&&&&&&&&&&&&& p[i].state=‘R‘;
&&&&&&&&&&&&&&&&& } else {
&&&&&&&&&&&&&&&&&&&& p[i].state=‘F‘;
&&&&&&&&&&&&&&&&&&&& k=CpuTimeCalculate(p,n);
&&&&&& &&&&&&&&&&&&& if(p[i].arriveTime&p[i-1].finishTime) {
&&&&&&&&&&&&&&&&&&&&&&&& p[i].finishTime=p[i].finishTime+k;
&&&&&&&&&&&&&&&&&&&&&&&& p[i].roundTime=p[i].finishTime-p[i].arriveT
&&&&&&&&&&&&&&&&&&&&&&&& p[i].daiquanTime=p[i].roundTime/p[i].cpuT
&&&&&&&&&&&&&&&&&&&& } else {
&&&&&&&&&&&&&&&&&&&&&&&& p[i].finishTime=p[i-1].finishTime+k;
&&&&&&&&&& &&&&&&&&&&&&& p[i].roundTime=p[i].finishTime-p[i].arriveT
&&&&&&&&&&&&&&&&&&&&&&&& p[i].daiquanTime=p[i].roundTime/p[i].cpuT
&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&& Output(p,n,c);
&&&&&&&&&&&&&&&&&&&& printf("********第%d个进程的运行完成!********\n",i+1);
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&& Output(p,n,c);
&&&&&&&&&&&&& }
&&&&&&&&&& }
&&&&&&&&&&
&&&&&& case 3:
&&&&&&&&&& p[0].finishTime=p[0].arriveTime+p[0].serveT
&&&&&&&&&& p[0].roundTime=p[0].finishTime-p[0].arriveT
&&&&&&&&&& p[0].daiquanTime=p[0].roundTime/p[0].serveT
&&&&&&&&&& for(i=1; i&n; i++) {
&&&&&&&&&&&&& for(j=i; j&n; j++) {
&&&&&&&&&&&&&&&&& if(p[j].arriveTime&=p[i-1].finishTime) {
&&&&&&&&&&&&&&&&&&&& for(t=i; t&=j; t++) {
&&&&&&&&&&&&&&&&&&&& &&& p[t].responseRatio=(float)(p[t-1].finishTime-p[t].arriveTime)/p[t].serveT
&&&&&&&&&&&&&&&&&&&&&&&& if(p[t].responseRatio&p[j].responseRatio) {
&&&&&&&&&&&&&&&&&&&&&&&&&&& temp=p[j];
&&&&&&&&&&&&&&&&&&&&&&&&&&& p[j]=p[t];
&&&&&&&&&&&&&&&&&&&&&&&&&&& p[t]=
&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&& }
&&&&&&&&&&&&& if(p[i].arriveTime&p[i-1].finishTime) {
&&&&&&&&&&&&&&&&& p[i].finishTime=p[i-1].finishTime+p[i].serveT
&&&&&&&&&&&&&&&&& p[i].roundTime=p[i].finishTime-p[i].arriveT
&&&&&&&&&&&&&&&&& p[i].daiquanTime=p[i].roundTime/p[i].serveT
&&&&&&&&&&&&& } else {
&&&&&&&&&&&&&&&&& p[i].finishTime=p[i].arriveTime+p[i].serveT
&&&&&&&&&&&&&&&&& p[i].roundTime=p[i].finishTime-p[i].arriveT
&&&&&&&&&&&&&&&&& p[i].daiquanTime=p[i].roundTime/p[i].serveT
&&&&&&&&&&&&& }
&&&&&&&&&& }
&&&&&&&&&&
&&&&&& case 4:
&&&&&&&&&& for(j = 0 ; j & j ++) {
&&&&&&&&&&&&& for(i= 0 ; i & i ++) {
&&&&&&&&&&&&&&&&& if(p[j].serveTime == 0) {
&&&&&&&&&&&&& &&&&&&
&&&&&&&&&&&&&&&&& } else {
&&&&&&&&&&&&&&&&&&&& p[j].serveTime--;
&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&& }
&&&&&&&&&&&&& Output(p,n,c);
&&&&&&&&&& }
&&&&&&&&&& printf("\n───────────────────────\n");
&&&&&&&&&& getchar();
&&&&&&&&&& if(p[n-1].serveTime!=0) {
&&&&&&&&&&&&&
&&&&&&&&&& }
&&&&&&&&&&
&&&&&& case 0:
&&&&&&&&&&
Calculate(PCB p[MAX] , int n ) {
&&& float averRoundTime=0.0;//平均周转时间
&&& float averDaiquanTime=0.0;//平均带权周转时间
&&& for(i=1; i&n; i++) {
&&&&&& averRoundTime=p[i].roundTime+averRoundT
&&&&&& averDaiquanTime=(float)(p[i].daiquanTime+averDaiquanTime);
&&& printf("\n平均周转时间:%f",averRoundTime/(float)n);
&&& printf("\n平均带权周转时间:%f\n",averDaiquanTime/(float)n);
End(PCB p[MAX] , int n , char c) {
&&& switch(c) {
&&&&&& case 1:
&&&&&&&&&& Output(p,n,c);
&&&&&&&&&& Calculate(p,n);
&&&&&&&&&& printf("********进程调度结束!********\n");
&&&&&&&&&&
&&&&&& case 2:
&&&&&&&&&& for(i = 0 ; i & i ++) {
&&& &&&&&&&&& if(p[i].serveTime==0) {
&&&&&&&&&&&&&&&&& p[i].state=‘F‘;
&&&&&&&&&&&&& }
&&&&&&&&&& }
&&&&&&&&&& Output(p,n,c);
&&&&&&&&&& Calculate(p,n);
&&&&&&&&&& printf("********进程调度结束!********\n",i+1);
&&&&&&&&&&
&&&&&& case 3:
&&&&&&&&&& Output(p,n,c);
&&&&&&&&&& Calculate(p,n);
&&&&&&&&&& printf("********进程调度结束!********\n",i+1);
&&&&&&&&&&
&&&&&& case 4:
&&&&&&&&&& printf("********进程调度结束!********\n",i+1);
&&&&&&&&&&
&&&&&& case 0:
&&&&&&&&&&
FCFS(char c) {
&&& Input(p,number,c);
&&& system("cls");
&&& ArriveTimeSort(p,number);
&&& Output(p,number,c);
&&& getchar();
&&& Run(p,number,c);
&&& End(p,number,c);
SRTF(char c) {
&&& Input(p,number,c);
&&& system("cls");
&&& ArriveTimeSort(p,number);
&&& Output(p,number,c);
&&& getchar();
&&& Run(p,number,c);
&&& End(p,number,c);
HRRF(char c) {
&&& Input(p,number,c);
&&& system("cls");
&&& ArriveTimeSort(p,number);
&&& Output(p,number,c);
&&& getchar();
&&& Run(p,number,c);
&&& End(p,number,c);
RR(char c) {
&&& Input(p,number,c);
&&& system("cls");
&&& ArriveTimeSort(p,number);
&&& Output(p,number,c);
&&& printf("\n───────────────────────\n");
&&& getchar();
&&& Run(p,number,c);
&&& End(p,number,c);
&&& printf("\n\t& -----------------欢迎进入进程调度模拟程序-----------------\n");
&&& printf("\t&&& ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
&&& printf("\t&&& ┃&&&&&&&&&&&&&&&&&& 可选择算法操作:&&&&&&&&&&&&&&&&&& ┃\n");
&&& printf("\t&&& ┣━━━━━━━━━━━━━┳━━━━━━━━━━━━━┫\n");
&&& printf("\t&&& ┃1.先来先服务调度算法&&&&& ┃2.最短剩余时间优先调度算法┃\n");
&&& printf("\t&&& ┣━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫\n");
&&& printf("\t&&& ┃3.最高响应比优先调度算法& ┃4.时间片轮转调度算法&&&&& ┃\n");
&&& printf("\t&&& ┣━━━━━━━━━━━━━┻━━━━━━━━━━━━━┫\n");
&&& printf("\t&&& ┃&&&&&&&&&&&&&&&&&&&& 0.退出系统&&&&&&&&&&&&&&&&&&&&&& ┃\n");
&&& printf("\t&&& ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
&&& //算法编号选择
&&& char if_//判断是否继续
&&& system("cls");//清屏
&&&&&& if_continue=‘N‘;
&&&&&& Menu();//显示菜单
&&&&&& printf("请选择对应序号:");
&&&&&& scanf("%d",&choice); //输入算法编号
&&&&&& system("cls");
&&&&&& switch(choice) {
&&&&&&&&&& case 1:
&&&&&&&&&&&&& printf("\n&&&&&&&&&&& *************进程调度算法(先来先服务调度算法)************\n\n");
&&&&&&&&&&&&& printf("请输入进程数目:");
&&&&&&&&&&&&& scanf("%d",&number); //输入进程数目
&&&&&&&&&&&&& printf("\n");
&&&&&&&&&&&&& FCFS(choice);
&&&&&&&&&&&&& fflush(stdin);
&&&&&&&&&&&&& printf("\n是否返回主目录?(Y/N):");
&&&&&&&&&&&&& if_continue=getchar();
&&&&&&&&&&&&& system("cls");
&&&&&&&&&&&&&
&&&&&&&&&& case 2:
&&&&&&&&&&&&& printf("\n&&&&&&&&&&& *************进程调度算法(最短剩余时间优先调度算法)************\n\n");
&&&&&&&&&&&&& printf("请输入进程数目:");
&&&&&&&&&&&&& scanf("%d",&number); //输入进程数目
&&&&&&&&&&&&& printf("\n");
&&&&&&&&&&&&& SRTF(choice);
&&&&&&&&&&&&& fflush(stdin);
&&&&&&&&&&&&& printf("\n是否返回主目录?(Y/N):");
&&&&&&&&&&&&& if_continue=getchar();
&&&&&&&&&&&&& system("cls");
&&&&&&&&&&&&&
&&&&&&&&&& case 3:
&&&&&&&&&&&&& printf("\n&&&&&&&&&&& *************进程调度算法(最高响应比优先调度算法)************\n\n");
&&&&&&&&&&&&& printf("请输入进程数目:");
&&&&&&&&&&&&& scanf("%d",&number); //输入进程数目
&&&&&&&&&&&&& printf("\n");
&&&&&&&&&&&&& HRRF(choice);
&&&&&&&&&&&&& fflush(stdin);
&&&&&&&&&&&&& printf("\n是否返回主目录?(Y/N):");
&&&&&&&&&&&&& if_continue=getchar();
&&&&&&&&&&&&& system("cls");
&&&&&&&&&&&&&
&&&&&&&&&& case 4:
&&&&&&&&&&&&& printf("\n&&&&&&&&&&& *************进程调度算法(时间片轮转调度算法)************\n\n");
&&&&&&&&&&&&& printf("请输入进程数目:");
&&&&&&&&&&&&& scanf("%d",&number); //输入进程数目
&&&&&&&&&&&&& printf("请输入时间片长度:");
&&&&&&&&&&&&& scanf("%d",&time);
&&&&&&&&&&&&& printf("\n");
&&&&&&&&&&&&& RR(choice);
&&&&&&&&&&&&& fflush(stdin);
&&&&&&&&&&&&& printf("\n是否返回主目录?(Y/N):");
&&&&&&&&&&&&& if_continue=getchar();
&&&&&&&&&&&&& system("cls");
&&&&&&&&&&&&&
&&&&&&&&&& case 0:
&&&&&&&&&&&&&
&&&&&&&&&& default:
&&&&&&&&&&&&& if_continue=‘Y‘;
&&&&&&&&&&&&& printf("\n输入有误请重新输入。\n");
&&&&&&&&&&&&& system("pause");
&&&&&&&&&&&&& system("cls");
&&&&&&&&&&&&&
&&& } while(if_continue==‘y‘||if_continue==‘Y‘);
&&& printf("\n& ********感谢您的使用********\n");
测试结果:
1)先来先服务调度算法:
2)最短剩余时间优先调度算法:
3)最高响应比优先调度算法:
4)时间片轮转调度算法:
四、&&& 实验总结
a)& 该怎么说呢,理论上所有的进程调度理解起来并不难,但用程序语言模拟其过程就有点困难了,特别是算法;
b)& 虽说这四个进程调度算法可以算是简单模拟出效果,但其中还有很多BUG,需要继续改进。标签:原文地址:http://www.cnblogs.com/yore96/p/5602288.html
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!问答题练习 1、(3分)请列出操作系统所具有的功能中的三个功能。 参考答案:处理机管理,内存管理,设备管理,文件管理,用户界面
2、(3分)请列出用户界面的三个形式。 参考答案:命令界面,程序界面和图形界面
1、设进程的到达时间和完成进程所需的运行时间(服务时间)如上表所示。请用短进程非抢占式调度算法计算各进程的开始运行时间、结束运行时间,周转时间、和等待时间,并计算平均周转时间。
参考答案: 进程 到达 时间 A B C D 0 1 2 3 服务 时间 100 10 100 1 开始 时间 0 101 111 100 结束 时间 100 111 211 101 周转 时间 100 110 209 98 等待 时间 0 100 109 97 平均周转时间T=129.25
2、(3分)处理机调度算法的效果可以用周转时间和带权周转时间来度量。请说明这两者有什么异同?
参考答案:两者都是从作业提交到完成的时间来度量算法的优劣。但后者考虑作业的等待时间对于作业本身的服务时间的相对影响因素,因此当作业的差异性很大时,评价更客观些。
3.在单道批处理系统中,下列三个作业采用先来先服务的调度算法和最高响应比优先算法进行调度,哪一种调度算法的性能较好?请完成下表。 作业 提交时运行时刻 刻 1 10:00 2:00 2 10:10 1:00 3 10:25 0:25 平均周转时间T= 平均带权周转时间W=
参考答案: 先来先服务调度算法: 作业 提交时运行时开始时完成时刻 刻 刻 刻 1 10:00 2:00 10:00 12:00 2 10:10 1:00 12:00 13:00 3 10:25 0:25 13:00 13:25 平均周转时间T=156.67min 平均带权周转时间W=3.68 周转时间/min 120 170 180 带权周转时间 1 17/6 36/5 开始时刻
周转时间带权周转时/min 间
最高响应比优先调度算法: 作业 提交时运行时开始时完成时刻 刻 刻 刻 1 10:00 2:00 10:00 12:00 2 10:10 1:00 12:25 13:25 3 10:25 0:25 12:00 12:25 平均周转时间T=145min 平均带权周转时间W=3.02 周转时间/min 120 195 120 带权周转时间 1 3.25 4.8 综上所述,最高响应比调度算法性能较好。
4. 如果限制为两道的多道程序系统中,有4个作业进入系统,其进入系统时刻、估计运行时间为下图所示。系统采用SJF作业调度算法,采用SRTF进程调度算法,请填充下面表格。 进入系估计运行时开始运行时统时刻 间/min 刻 1 10:00 30
2 10:05 20
4 10:20 10
平均周转时间T= 平均带权周转时间W= 作业
参考答案: 进入系估计运行进入内作业 统时刻 时间/min 存时刻 1 10:00 30 10:00 2 10:05 20 10:05 3 10:10 5 10:25 4 10:20 10 10:30 平均周转时间T=31.25min 平均带权周转时间W=2.3
开始运行时刻 10:00 10:05 10:25 10:30 结束运行时刻 11:05 10:25 10:30 10:40 周转时间/min 65 20 20 20 结束运行时刻
周转时间/min
5. 有一个4道作业的操作系统,若在一段时间内先后到达6个作业,其提交时刻和估计运行时间为下表所示: 作业 1 2 3 4 5 6 提交时刻 8:00 8:20 8:25 8:30 8:35 8:40 估计运行时间/min 60 35 20 25 5 10 系统采用剩余SJF调度算法,作业被调度进入系统后中途不会退出,但作业运行时可被剩余时间更短的作业所抢占。 (1)分别给出6个作业的执行时间序列,即开始执行时间、作业完成时间、作业周转时间。 (2)计算平均作业周转时间。 参考答案: 估计运作业 行时间/min 1 8:00 60 2 8:20 35 3 8:25 20 4 8:30 25 5 8:35 5 6 8:40 10 平均周转时间T=60min 提交时刻
6. 有一个具有三道作业的多道批处理系统,作业调度采用短作业优先调度算法,进程调度采用以优先数为基础的抢占式调度算法。在下表所示的作业序列中,作业优先数即为进程优先数,数越小则优先级越高。 进入内存时刻 8:00 8:20 8:25 8:30 8:45 8:50 剩余时间/min 40 30 15 25 5 10 开始时间 8:00 8:20 8:25 9:00 8:45 8:50 完成时间 10:35 9:55 8:45 9:25 8:50 9:00 周转时间/min 155 95 20 55 15 20 作业 A B C D E F 试填充下表: 作业 到达时刻 10:00 10:20 10:30 10:50 11:00 11:10 估计运行时间/min 40 30 60 20 20 10 优先数 5 3 4 6 4 4 作业周转时间/min
进入内存时刻 运行结束时刻
平均作业周转时间T=
参考答案: 进入内存开始运行 作业 时刻 时刻 A 10:00 10:00 B 10:20 10:20 C 10:30 10:50 D 10:50 12:40 E 12:00 12:00 F 11:50 11:50 平均作业周转时间T=88.3min
作业周转时运行结束时刻 间/min 12:40 160 10:50 30 11:50 80 13:00 130 12:20 80 12:00 50 1、(2分)生产者消费者的互斥同步问题叙述如下: 生产者生产产品,放入有n个缓冲区的缓冲池中,每个缓冲区只能放一个产品。消费者从缓冲池中取产品消费,不允许从空缓冲区中取产品。有多个生产者进程与多个消费者进程并发进行,任何时刻只允许博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)【图文】周国运《操作系统》讲义[第2章2.6]_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
周国运《操作系统》讲义[第2章2.6]
&&周国运《操作系统》讲义[第2章]
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
操作系统题.ppt 23页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
操作系统题,操作系统面试题,操作系统笔试题,操作系统试题,操作系统常见面试题,操作系统经典面试题,操作系统考试题及答案,操作系统课后习题答案,操作系统试题及答案,操作系统考试题
你可能关注的文档:
··········
··········
* 17.如果限制为两道的多道程序系统中,有4个作业进入系统,其进入系统时间、估计运行时间列于下表中,系统采用SJF作业调度算法,采用SRTF进程调度算法,请填充下表。(时间单位:min) 带权平均周转时间 W =
平均周转时间 T =
10 10:20 Job4 5 10:10 Job3 20 10:05 Job2 30 10:00 Job1 周转时间 结束运行时间 开始运行时间 估计运行时间 进入系统时间 作业 1)10:00 Job1到达并投入运行。此时内存中有作业:Job1 2) 10:05 Job2到达并进入内存。此时,Job1运行时间剩余是25min,
Job2运行剩余时间是20min,根据SRTF,Job2开始运行。 3) 10:25 Job2运行结束。Job3、Job4在后备队列中,据SJF,Job3进入内存,据SRTF,Job3开始运行。内存:Job1、Job3 4) 10:30 Job3运行结束。Job4在后备队列中,Job4进入内存,据SRTF,Job4开始运行。内存:Job1、Job4 5) 10:40 Job4运行结束。Job1重新继续运行。 6) 11:05 Job1运行结束。 带权平均周转时间 W =
(65/30 + 20/20 +20/5 +20/10)/4 = 55/24 ≈ 2.29(min) 平均周转时间 T = (65+20+20+20)/4 = 31.25(min) 20 10:40 10:30 10 10:20 Job4 20 10:30 10:25 5 10:10 Job3 20 10:25 10:05 20 10:05 Job2 65 11:05 10:00 30 10:00 Job1 周转时间 结束运行时间 开始运行时间 估计运行时间 进入系统时间 作业 21.系统:3道作业的多道批处理系统;作业:短作业优先调度算法;进程:以优先数为基础的抢占式调度算法。作业优先数即为进程优先数,优先数越小则优先级越高。(时间单位:min) 4 10 11:10 F 4 20 11:00 E 6 20 10:50 D 4 60 10:30 C 3 30 10:20 B 5 40 10:00 A 优先数 估计运行时间 到达时间 作业 平均作业周转时间 T = (160+30+80+130+80+50)/6 =265/3 ≈ 88.3min 50 12:00 11:50 F 80 12:20 12:00 E 130 13:00 10:50 D 80 11:50 10:30 C 30 10:50 10:20 B 160 12:40 10:00 A 周转时间 运行结束时间 进入主存时间 作业 1) 10:00 A到达并投入运行。内存中:A 2) 10:20 B到达进入内存。因B的优先级比A的高,所以A进入就绪队列,B投入运行。内存中:A、B 3) 10:30 C到达进入内存。根据优先级,B继续运行,A、B在就绪队列中,内存中:A、B、C 4) 10:50 B运行结束,同时D到达并进入内存。A、C、D中,C优先级最高,C投入运行。 5) 11:50 C运行结束。此时,后备队列中有E和F。内存就绪队列中:A、D。据SJF,F进入内存。A、D、F中,F优先级最高,F投入运行。 6) 12:00 F运行结束。E进入内存。A、D、E中,E优先级最高,E投入运行。 7) 12:20 E运行结束。A、D中,A的优先级高,A投入运行 8) 12:40 A运行结束。D开始运行 9) 13:00 D运行结束, 22.设有4个进程P1、P2、P3、P4,它们到达就绪队列的时间,运行时间以及优先级如下表示。(时间单位:ms) 4 10 3 P4 2 8 2 P3 3 4 1 P2 1 9 0 P1 优先级 运行时间 到达就绪队列的时间 进程 (1) 若采用可剥夺的优先级调度算法,给出各个进程的调度次序以及进程的平均周转时间和平均等待时间。 (2) 若采用时间片轮换调度算法,且时间片取2ms,给出各个进程的调度次序以及平均周转时间和平均等待时间。 (1).0时:P1到达且投入运行。 1时:P2到达,因为P2的优先级比P1的高,P2投入运行,P1进入就绪队列。 2时:P3到达,仍然是P2的优先级最高,P3进入就绪队列。就绪:P1、P3 3时:P4到达,且P4优先级最高,投入运行。就绪:P1、P2、P3 13时:P4结束。此时P2优先级最高,P2又投入运行。就绪:P1、P3 15时:P2结束。此时P3优先级最高,投入运行。就绪:P1 23时:P3结束。P1投入运行。 31时:P1结束。 调度次序:P1、P2、P4、P2、P3、P1 10 0 13 3 10 3 P4 平均等待时间: W = (22+10+13+0)/4
正在加载中,请稍后...

我要回帖

更多关于 平均周转时间计算公式 的文章

 

随机推荐