操作系统时间片轮转算法.docx

上传人:b****8 文档编号:13161729 上传时间:2023-06-11 格式:DOCX 页数:10 大小:101.97KB
下载 相关 举报
操作系统时间片轮转算法.docx_第1页
第1页 / 共10页
操作系统时间片轮转算法.docx_第2页
第2页 / 共10页
操作系统时间片轮转算法.docx_第3页
第3页 / 共10页
操作系统时间片轮转算法.docx_第4页
第4页 / 共10页
操作系统时间片轮转算法.docx_第5页
第5页 / 共10页
操作系统时间片轮转算法.docx_第6页
第6页 / 共10页
操作系统时间片轮转算法.docx_第7页
第7页 / 共10页
操作系统时间片轮转算法.docx_第8页
第8页 / 共10页
操作系统时间片轮转算法.docx_第9页
第9页 / 共10页
操作系统时间片轮转算法.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

操作系统时间片轮转算法.docx

《操作系统时间片轮转算法.docx》由会员分享,可在线阅读,更多相关《操作系统时间片轮转算法.docx(10页珍藏版)》请在冰点文库上搜索。

操作系统时间片轮转算法.docx

操作系统时间片轮转算法

进程时间片轮转调度算法

一、 实验题目:

 

进程时间片轮转调度算法 

二、实验原理:

 

在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。

对调度的处理又都可采用不同的调度方式和调度算法。

调度算法是指:

根据系统的资源分配策略所规定的资源分配算法。

 

三、实验目的:

 

1、加深对进程概念的理解,明确进程和程序的区别。

 2、深入系统如何组织进程、创建进程。

 

3、进一步认识如何实现处理器调度。

 

4、通过对进程调度算法的设计,深入理解进程调度的原理。

 

5、加深对时间片轮转调度算法的理解。

 

四、实验要求:

 

用C语言编写程序完成单处理机的进程调度,要求采用时间片轮转调度算法。

实验具体要求包括:

首先确定作业控制块的内容和组成方式;然后完成作业调度;最后编写主函数,并对所做工作进行测试。

5、运行结果

时间片大小为1时(q=1):

时间片大小为4时(q=4):

6、代码

#include"stdafx.h"

#include

#include

#include

#include

#defineOK0

#defineOVERFLOW1

charpro[20];//进程

intprocessNum;//进程数

inttimeSlice=0;//时间片

typedefcharQlemTypeChar;

typedefintQlemTypeInt;

typedefintStatus;

typedefstructQNode

{

QlemTypeChardata;

QlemTypeInttimeArrive=0;

QlemTypeInttimeService=0;

QlemTypeInttimeCount=0;

QlemTypeIntrunCount=0;

QlemTypeInttimeFinal=0;//完成时间

QlemTypeInttimeRound=0;//周转时间

floattimeRightRound=0;//带权周转时间

QlemTypeCharproState='W';//进程的状态,W——就绪态,R——执行态,F——完成态

structQNode*next;//链表指针

}QNode,*QueuePtr;

typedefstruct{

QueuePtrfront;//队头指针

QueuePtrrear;//队尾指针

}LinkQueue;

StatusInitQueue(LinkQueue&Q){

Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));

if(!

Q.front)exit(OVERFLOW);

Q.front->next=NULL;

returnOK;

}

StatusEnQueue(LinkQueue&Q,QlemTypeChare){

QueuePtrp;

p=(QueuePtr)malloc(sizeof(QNode));

if(!

p)exit(OVERFLOW);

p->data=e;

p->next=NULL;

Q.rear->next=p;

Q.rear=p;

returnOK;

}

StatusDeQueue(LinkQueue&Q,QlemTypeChar&e){

QueuePtrp;

if(Q.front==Q.rear)returnERROR;

p=Q.front->next;

e=p->data;

Q.front->next=p->next;

if(Q.rear==p)Q.rear=Q.front;

free(p);

returnOK;

}

LinkQueueQPro;

QNodeqq[10];

voidProGetFirst(){//取出就绪队列队首进程

InitQueue(QPro);

printf("请输入要创建的进程名称:

\n");

for(inti=0;i

fflush(stdin);

scanf_s("%c",&pro[i]);

}

fflush(stdin);

for(inti=0;i

qq[i].data=pro[i];

EnQueue(QPro,qq[i].data);

}

}

voidscanfData(){

printf("请输入要创建的进程数目:

");

scanf_s("%d",&processNum);

processNum++;

fflush(stdin);

printf("\n");

ProGetFirst();

printf("创建进程到达时间:

\n");

inttime_Arr[10];

for(inti=0;i

scanf_s("%d",&time_Arr[i]);

}

for(inti=0;i

qq[i].timeArrive=time_Arr[i];

EnQueue(QPro,qq[i].timeArrive);

}

printf("创建进程服务时间:

\n");

inttime_Ser[10];

for(inti=0;i

scanf_s("%d",&time_Ser[i]);

}

for(inti=0;i

qq[i].timeService=time_Ser[i];

EnQueue(QPro,qq[i].timeService);

}

printf("请输入时间片大小:

:

");

scanf_s("%d",&timeSlice);

printf("\n");

}

voidProOutPut1(){//获取进程信息

printf("进程名\t到达时间\t服务时间\t进程状态\t执行次数\n");

for(inti=0;i

printf("%c\t\t%d\t\t%d\t\t%c\t\t%d\n",qq[i].data,qq[i].timeArrive,qq[i].timeService,qq[i].proState,qq[i].runCount);

}

}

voidCalculatetimeFinal(){//计算完成时间

inttimecou=0;

intcountTemp=0;

QlemTypeCharee;

for(inti=0;i

{

countTemp+=qq[i].timeService;

}

while(timecou

for(inti=0;i

{

if(qq[i].timeFinal==0)

{

if(qq[i].timeService-qq[i].timeCount>=timeSlice)

{

timecou+=timeSlice;

}

else

{

timecou+=(qq[i].timeService-qq[i].timeCount);

//DeQueue(QPro,ee);

}

if(timeSlice

{

inttimetemp=timeSlice>qq[i].timeService?

qq[i].timeService:

timeSlice;

if((qq[i].timeCount+timetemp)

{

if(qq[i].timeService-qq[i].timeCount>=timeSlice)

{

qq[i].timeCount+=timeSlice;

}

else

{

qq[i].timeCount+=(qq[i].timeService-qq[i].timeCount);

}

}

else

{

if(qq[i].timeFinal==0)

{

qq[i].timeFinal=timecou;

}

}

}

else//时间片大小>=服务时间

{

qq[i].timeFinal=timecou;//该进程的完成时间=count

}

}

}

}

for(inti=0;i

{

qq[i].timeRound=qq[i].timeFinal-qq[i].timeArrive;

qq[i].timeRightRound=(float)qq[i].timeRound/qq[i].timeService;

}

}

voidProOutPut2(){//获取进程处理后的信息

printf("进程名\t到达时间服务时间完成时间周转时间带权周转\n");

for(inti=0;i

printf("%c\t\t%d\t%d\t%d\t%d\t%.2f\n",qq[i].data,qq[i].timeArrive,qq[i].timeService,qq[i].timeFinal,qq[i].timeRound,qq[i].timeRightRound);

}

}

int_tmain(intargc,_TCHAR*argv[])

{

scanfData();

ProOutPut1();

CalculatetimeFinal();

printf("\n");

printf("CPU处理中......\n");

printf("完成时间:

");

for(inti=0;i

printf("%d,",qq[i].timeFinal);

}

printf("\n");

printf("周转时间:

");

for(inti=0;i

printf("%d,",qq[i].timeRound);

}

printf("\n");

printf("带权周转时间:

");

for(inti=0;i

printf("%.2f,",qq[i].timeRightRound);

}

printf("\n");

ProOutPut2();

return0;

}

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

当前位置:首页 > 经管营销 > 经济市场

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

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