进程调度算法磁盘调度算法银行家算法操作系统课程设Word格式文档下载.docx

上传人:b****1 文档编号:13257534 上传时间:2022-10-09 格式:DOCX 页数:37 大小:442.96KB
下载 相关 举报
进程调度算法磁盘调度算法银行家算法操作系统课程设Word格式文档下载.docx_第1页
第1页 / 共37页
进程调度算法磁盘调度算法银行家算法操作系统课程设Word格式文档下载.docx_第2页
第2页 / 共37页
进程调度算法磁盘调度算法银行家算法操作系统课程设Word格式文档下载.docx_第3页
第3页 / 共37页
进程调度算法磁盘调度算法银行家算法操作系统课程设Word格式文档下载.docx_第4页
第4页 / 共37页
进程调度算法磁盘调度算法银行家算法操作系统课程设Word格式文档下载.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

进程调度算法磁盘调度算法银行家算法操作系统课程设Word格式文档下载.docx

《进程调度算法磁盘调度算法银行家算法操作系统课程设Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《进程调度算法磁盘调度算法银行家算法操作系统课程设Word格式文档下载.docx(37页珍藏版)》请在冰豆网上搜索。

进程调度算法磁盘调度算法银行家算法操作系统课程设Word格式文档下载.docx

一.进程调度算法4-----23页

二.银行家算法24-----34页

三.磁盘调度算法35------46页

进程调度算法

1.设计目的

在多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略决定哪个进程优先占有处理机,因而必须解决进程调度的问题,进程调度算法就是要解决进程调度的问题。

2.任务及要求

2.1设计任务

设计程序来模拟进程的四种调度算法,模拟实现调度的基本功能。

2.2设计要求

产生的各种随机数要加以限制,如alltime限制在40以内的整数。

进程的数量n不能取值过大。

3.算法及数据结构

3.1算法的总体思想(流程)

每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:

(1)进程优先数ID,其中0为闲逛进程,用户进程的标识数为1,2,3…。

(2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,优先数越大,优先级越高。

(3)进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。

(4)进程总共需要运行时间Alltime,利用随机函数产生。

(5)进程状态,0:

就绪态;

1:

运行态;

2:

阻塞态。

利用链表将数据连接起来,实现数据的存储。

3.2链表模块

3.2.1功能

实现链表的存储功能,以及实现存储的查找功能。

3.2.2数据结构

构造链表这个数据结构,以及链表的初始化,链表的插入,链表的长度。

3.2.3算法

typedefstruct{

ElemType*elem;

intlength;

intlistsize;

}SqList;

StatusInitList(SqList&

l)

{

l.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if(!

l.elem)exit(OVERFLOW);

l.length=0;

l.listsize=LIST_INIT_SIZE;

returnOK;

}

intListLength(SqListl)

return(l.length);

StatusListInsert_Sq(SqList&

L,inti,ElemTypee){

//在顺序表L的第i个位置前插入元素e,i的合法值为1..L.length+1

if(i<

1||i>

L.length+1)

returnERROR;

if(L.length>

=L.listsize)

{

ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));

newbase)exit(OVERFLOW);

L.elem=newbase;

L.listsize+=LISTINCREMENT;

}

ElemType*q=&

L.elem[i-1],*p=&

L.elem[L.length-1];

while(p>

=q)

*(p+1)=*p;

--p;

}//插入位置后的元素右移

*q=e;

++L.length;

StatusGetElem(SqListL,inti,ElemType&

e)

=0||i>

L.length)

returnERROR;

else

e=*(L.elem+i-1);

voidOutputlist(SqList&

L)

if(0==L.length)

printf("

空集!

"

);

for(inti=0;

i<

L.length;

++i)

{

printf("

%c"

*(L.elem+i));

}

3.3主函数模块

3.3.1功能

实现进程调度的四种算法,以及人机交互的菜单。

3.3.2数据结构

主要包括五个部分,分别是四种算法,和进程的输入和菜单部分,功能分别实现。

3.3.3算法

voidmain()

for(1;

;

){

intnumber;

PCBpcb[100];

srand(time(0));

intmax;

intppp[100];

inttime=0;

inttime1;

intm;

inta[100];

a[0]=0;

\n*************************进程调度算法的模拟***************************\n"

*1.先到先服务调度2.最短作业优先调度*\n"

*3.优先权调度4.轮转发调度*\n"

**********************************************************************"

\n请选择调度的方法:

"

scanf("

%d"

&

m);

if(m!

=1&

&

m!

=2&

=3&

=4)

{

输入错误!

重新输入:

if(m!

printf("

if(m!

{

printf("

}

}

}

请输入进程的个数:

number);

\n开始时用户进程均为就绪状态,运行时间随机产生\n\n"

SqListsq;

InitList(sq);

for(intr=0;

r<

number;

r++)

pcb[r].CPUtime=0;

for(inti=0;

i++)

pcb[i].Priority=rand()%50;

while

(1)

if(pcb[i].Priority<

20)

pcb[i].Priority=rand()%50;

else

break;

pcb[i].Alltime=rand()%40;

if(pcb[i].Alltime<

10)

pcb[i].Alltime=rand()%40;

}

else

break;

for(intj=0;

j<

j++)

ListLength(sq);

ListInsert_Sq(sq,ListLength(sq),pcb[i]);

if(m==1)

\n****************程序演示开始*****************\n"

intcoun=0;

//计数变量

intwait[100];

//等待时间数组

wait[0]=0;

intAllwait=0;

for(inti1=0;

i1<

i1++)

下面开始调用第%d个进程;

\n"

i1);

开始时间为%d执行时间为%d\n"

coun,pcb[i1].Alltime);

coun+=pcb[i1].Alltime;

if(i1!

=0)

{

wait[i1]=pcb[i1-1].Alltime+wait[i1-1];

}

for(inti2=0;

i2<

i2++)

Allwait=wait[i2]+Allwait;

平均等待时间为:

%d\n"

Allwait/number);

if(m==2)

intmin=pcb[0].Alltime;

intwait1[100];

wait1[0]=0;

intin=0;

intcoun1=0;

*****************最短作业优先调度!

********************\n"

cout<

<

进程所需时间分别是:

endl;

for(i=0;

cout<

pcb[i].Alltime<

进程调度的顺序为:

min=50;

for(j=0;

if(pcb[j].Alltime<

min)

min=pcb[j].Alltime;

in=j;

}

%d"

in+1);

pcb[in].Alltime+=50;

if(m==3)

ID优先级运行总时间进程状态\n"

for(intk=0;

k<

k++)

%d%d%d就绪\n"

k+1,pcb[k].Priority,pcb[k].Alltime);

\n***********************程序调度演示开始***********************\n"

for(intf=1;

f<

1000;

f++)

intcount=0,count1=0;

for(inti=0;

ppp[i]=pcb[i].Priority;

if(p

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

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1