计算机操作系统进操作系统程调度模拟实验Word下载.docx

上传人:b****2 文档编号:973559 上传时间:2023-04-29 格式:DOCX 页数:23 大小:214.45KB
下载 相关 举报
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第1页
第1页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第2页
第2页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第3页
第3页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第4页
第4页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第5页
第5页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第6页
第6页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第7页
第7页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第8页
第8页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第9页
第9页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第10页
第10页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第11页
第11页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第12页
第12页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第13页
第13页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第14页
第14页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第15页
第15页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第16页
第16页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第17页
第17页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第18页
第18页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第19页
第19页 / 共23页
计算机操作系统进操作系统程调度模拟实验Word下载.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

计算机操作系统进操作系统程调度模拟实验Word下载.docx

《计算机操作系统进操作系统程调度模拟实验Word下载.docx》由会员分享,可在线阅读,更多相关《计算机操作系统进操作系统程调度模拟实验Word下载.docx(23页珍藏版)》请在冰点文库上搜索。

计算机操作系统进操作系统程调度模拟实验Word下载.docx

doubleWeightWholeTime[MaxNum];

doubleAverageWT_FCFS;

doubleAverageWWT_FCFS;

2)进程调度的实现过程如下:

Ø

变量初始化;

接收用户输入n,T1,…,Tn,S1,…,Sn;

按照选择算法进行进程调度,计算进程的完成时间、周转时间和带权周转时间;

计算所有进程的平均周转时间和平均带权周转时间;

按格式输出调度结果。

3、程序流程图

4、作业时间表

作业

到达时间

服务时间

开始时间

完成时间

周转时间

带权周转时间

A

20

1

B

4

13

33

29

2.23

C

8

34

26

D

18

200

234

216

1.08

平均周转时间T=(20+29+26+216)/4ms=72.75ms

平均带权周转时间W=(1+2.23+26+1.08)/4ms=7.5775ms

5、程序源代码

#include"

stdio.h"

stdlib.h"

typedefstructPCB//定义进程控制块

{charname[10];

//进程名

charstate;

//运行状态

intArriveTime;

//到达时间

intStartTime;

//进程开始时间

intFinishTime;

//进程结束时间

intServiceTime;

//服务时间

floatWholeTime;

//周转时间

floatWeightWholeTime;

//带权周转时间

structPCB*next;

//指向下个进程

}pcb;

doublex=0,y=0;

inti;

inttime;

//计时器

intn;

//进程个数

pcb*head=NULL,*p,*q;

//进程链表指针

voidrun_FCFS(pcb*p1)//运行未完成的进程

{

time=p1->

ArriveTime>

time?

p1->

ArriveTime:

time;

StartTime=time;

printf("

\n时刻:

%d,当前开始运行作业%s\n\n"

time,p1->

name);

time+=p1->

ServiceTime;

state='

T'

;

FinishTime=time;

WholeTime=p1->

FinishTime-p1->

ArriveTime;

WeightWholeTime=p1->

WholeTime/p1->

x+=p1->

WholeTime;

y+=p1->

WeightWholeTime;

到达时间开始时间服务时间完成时间周转时间带权周转时间\n"

);

%6d%10d%10d%8d%10.1f%10.2f\n"

p1->

ArriveTime,p1->

StartTime,p1->

ServiceTime,p1->

FinishTime,p1->

WholeTime,p1->

WeightWholeTime);

}

voidFCFS()//找到当前未完成的进程

inti;

p=head;

for(i=0;

i<

n;

i++)

{

if(p->

state=='

F'

q=p;

//标记当前未完成的进程

run_FCFS(q);

}

p=p->

next;

voidgetInfo()//获得进程信息并创建进程

intnum;

\n进程个数:

"

scanf("

%d"

&

n);

for(num=0;

num<

num++)

p=(pcb*)malloc(sizeof(pcb));

printf("

依次输入:

\n进程名到达时间服务时间\n"

scanf("

%s\t%d\t%d"

p->

name,&

ArriveTime,&

ServiceTime);

if(head==NULL)

{head=p;

q=p;

time=p->

if(p->

ArriveTime<

time)time=p->

q->

next=p;

p->

StartTime=0;

FinishTime=0;

WholeTime=0;

WeightWholeTime=0;

next=NULL;

q=p;

voidmain()

{printf("

先来先服务FCFS算法模拟\n"

getInfo();

FCFS();

6、运行结果

3、短作业优先调度算法

1、实验提示

程序中进程调度时间变量描述如下:

charname[10];

floatarrivetime;

floatservicetime;

//服务时间

floatstarttime;

//开始时间

floatfinishtime;

//完成时间

floatzztime;

//周转时间

floatdqzztime;

//带权周转时间

2、程序流程图

总体流程图

详细流程图

3、作业时间表

3

21

2

30

2.31

平均周转时间T=(20+21+34+216)/4ms=72.75ms

平均带权周转时间W=(1+13+2.31+1.08)/4ms=4.3475ms

4、程序源代码

#include<

stdio.h>

structsjf//定义进程的结构体

charname[10];

};

sjfb[100];

//定义短作业优先算法进程的最大数量

voidSinput(sjf*p,intN)//输入函数

输入进程的名称、到达时间、服务时间:

(例如:

x0100)\n"

=N-1;

i++)

输入第%d进程的名称、到达时间、服务时间:

i+1);

%s%f%f"

p[i].name,&

p[i].arrivetime,&

p[i].servicetime);

voidSPrint(sjf*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,floatzztime,floatdqzztime,intN)//输出函数

intk;

\n执行顺序:

\n"

%s"

p[0].name);

for(k=1;

k<

N;

k++)

-%s"

p[k].name);

\n进程名\tarrive\tservice\tstart\tfinish\tzz\tdqzz\n"

for(k=0;

%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n\n"

p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime);

voidSsort(sjf*p,intN)//按短作业优先算法排序

for(inti=1;

for(intj=1;

j<

=i;

j++)

if(p[i].servicetime<

p[j].servicetime)

{

sjftemp;

temp=p[i];

p[i]=p[j];

p[j]=temp;

}

voidSdeal(sjf*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,float&

zztime,float&

dqzztime,intN)//运行结果

if(k==0)

{

p[k].starttime=p[k].arrivetime;

p[k].finishtime=p[k].arrivetime+p[k].servicetime;

}

else

p[k].starttime=p[k-1].finishtime;

//开始时间=前一个进程的完成时间

p[k].finishtime=p[k-1].finishtime+p[k].servicetime;

//结束时间=前一个进程的完成时间+现在进程的服务时间

p[k].zztime=p[k].finishtime-p[k].arrivetime;

//周转时间=完成时间-到达时间

p[k].dqzztime=p[k].zztime/p[k].servicetime;

//带权周转时间=周转时间/服务时间

voidSJF(sjf*p,intN)

floatarrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;

Ssort(p,N);

Sdeal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);

SPrint(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);

voidmain()//主函数

intM;

------------短作业优先调度算法-----------\n"

输入进程数:

M);

Sinput(b,M);

SJF(b,M);

5、运行结果

3、优先级调度算法

进程控制块结构

charname[20];

//进程名称

intpriority;

//优先级数

intgettime;

floatdotime;

intstarttime;

intfinishtime;

floatturntime;

floatptime;

2、作业时间表

进程

优先级

6

5

16

2.67

7

12

1.2

E

14

3、程序源代码

#include<

iostream.h>

iomanip.h>

structprocess//进程结构体

charname[20];

intn;

//进程的个数

floataverageturntime,averageptime;

//平均周转时间和平均加权周转时间

voidGetInProcess(process*pp)//对进程数组进行初始化

cout<

<

进程名称(字母)优先级数到达时间服务时间"

endl;

for(inti=0;

进程"

i+1<

:

cin>

>

pp[i].name;

pp[i].priority;

pp[i].gettime;

pp[i].dotime;

已经输入完毕.您刚才输入的内容如下:

-----------------------------------"

进程名称优先级数到达时间服务时间"

for(intj=0;

j++)

{

setw(4)<

pp[j].name;

setw(9)<

pp[j].priority;

pp[j].gettime;

pp[j].dotime;

voidProcessPriority(process*pp)//对此进程数组按优先级从小到大排序,级数越小优先级越高。

n-1;

intk=i;

for(intj=k+1;

if(pp[i].priority>

pp[j].priority)

k=j;

processt;

t=pp[k];

pp[k]=pp[i];

pp[i]=t;

voidPrintProcess(process*pp)//输出排序后的诸进程

{floats1,s2,sum1=0,sum2=0;

//sum1表示所有进程周转时间之和,sum2表示所有进程加权周转时间之和。

---------------------------------------------------------------------------"

进程名称优先级数到达时间服务时间开始时间完成时间周转时间加权周转时间"

pp[0].starttime=pp[0].gettime;

pp[0].finishtime=pp[0].starttime+pp[0].dotime;

pp[0].turntime=pp[0].finishtime-pp[0].gettime;

pp[0].ptime=pp[0].turntime/pp[0].dotime;

pp[i].starttime=pp[i-1].finishtime;

pp[i].finishtime=pp[i].starttime+pp[i].dotime;

pp[i].turntime=pp[i].finishtime-pp[i].gettime;

pp[i].ptime=pp[i].turntime/pp[i].dotime;

sum1=sum1+pp[i].turntime;

sum2=sum2+pp[i].ptime;

s1=sum1/n;

s2=sum2/n;

pp[i].name

<

pp[i].priority

pp[i].gettime

pp[i].dotime

setw(10)<

pp[i].starttime

pp[i].finishtime

pp[i].turntime

setw(12)<

pp[i].ptime

周转总时间sum1="

sum1<

平均周转时间s1="

s1<

'

.'

加权周转总时间sum2="

sum2<

平均加权周转时间s2="

s2<

cout<

intmain()

{

请输入进程个数:

processa[100];

GetInProcess(a);

ProcessPriority(a);

PrintProcess(a);

return0;

3、运行结果

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2