银行家算法等Word文件下载.doc
- 文档编号:13085572
- 上传时间:2022-10-04
- 格式:DOC
- 页数:23
- 大小:3.20MB
银行家算法等Word文件下载.doc
《银行家算法等Word文件下载.doc》由会员分享,可在线阅读,更多相关《银行家算法等Word文件下载.doc(23页珍藏版)》请在冰豆网上搜索。
实验内容:
本次实验的主要内容是模拟调度系统的实现,包括高级、中级和低级调度的管理系统实现,调度算法的设计与实现以及银行家算法的设计设计与实现。
本次实验主要包括两部分内容:
1、模拟具有三级调度的计算机系统进程运行过程,设计进程调度算法,将其存入进程文件中。
如:
进程1:
运行5秒后有3秒的I/O操作,之后有10秒的运行,结束。
可以写成:
”p1:
r5,io3,r3e;
”。
编程实现调度算法函数,设计优先级、时间片大小和并发进程个数,系统不断从进程文件中读出进程信息,选择一种进程调度算法,模拟进程的运行及调度过程,比较不同算法在周转时间和平均周转时间上的差异。
针对进程文件里面的数据为正常、缺项、格式不正确等各种情况,检测程序的执行结果。
2、理解安全性算法和银行家算法的核心机制:
针对3类资源、5个进程的情况,设计相应的数据结构,分别表示每个进程占用各类资源的情况;
编程实现安全性算法函数,编制主函数,动态输入资源的占用情况,进程的资源申请,调用安全性函数,实现银行家算法;
输入可分配和不可分配的请求,测试系统的正确性。
实验要求:
进程调度模拟程序根据一个进程调度文件,模拟进程的各种调度过程,用适合的表达方式表示出来。
银行家算法程序提供一个用户界面,可以在上边发出资源申请命令,系统应能给出是否可以接受申请,并且有结论输出。
思考:
1、终端型进程流适合使用哪种调度算法?
长批处理作业适合使用哪种调度算法?
2、动态优先级调度算法的优先级变化率应该如何设置?
实验结果:
1.进程调度过程的模拟
(1)概述
选择一个调度算法,实现处理机调度。
设计要求:
1)进程调度算法包括:
先来先服务算法,时间片轮转算法,最高优先数优先优先算法,
动态优先级算法。
2)可选择进程数量
3)本程序包括四种算法,用C或C++语言实现,执行时在主界面选择算法(可
用函数实现),进入子页面后输入进程数,(运行时间,优先数由随机函数产生),
执行,显示结果。
(2)设计原理
1)先来先服务算法FCFS
每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作
业,将它们调入内存,为它们分配资源创建进程,然后放入就绪队列。
2)时间片轮转法RR
系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。
当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;
然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。
(3)最高优先数优先优先算法
SPF短进程优先调度算法是从就绪队列中选出一个估计运行时间最短的进程,
将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。
#include<
windows.h>
iostream>
string.h>
usingnamespacestd;
#defineP_NUM3//进程数
#defineP_TIME2//时间片长度
#defineMIN-9999
enumstate//进程状态
{
ready,//就绪
run,//执行
wait,//阻塞
finish//完成
};
classPcb
public:
staticvoidprint(){};
~Pcb();
protected:
char*name;
//进程名
intallTime;
//需要运行时间
intcpuTime;
//已用cpu时间
stateprocess;
//进程状态
classHPcb:
publicPcb
staticvoidprint();
staticvoidhighS();
staticintgetFirst();
private:
intfirstNum;
HPcbhpcb[P_NUM];
classFPcb:
staticvoidfcfs();
intcomeTime;
FPcbfpcb[P_NUM];
classRPcb:
staticvoidprint();
staticvoidrr();
RPcbrpcb[P_NUM];
voidRPcb:
:
rr()
intii,i=0;
intk=0;
for(;
i<
P_NUM;
i++)
{
char*ch;
ch=newchar[1];
cout<
<
"
请输入第"
i+1<
个进程的进程名、需要运行的时间:
endl;
cin>
>
ch;
rpcb[i].name=newchar[strlen(ch)+1];
strcpy(rpcb[i].name,ch);
rpcb[i].allTime;
rpcb[i].cpuTime=0;
rpcb[i].process=ready;
}
do
for(i=0;
i++){
if(rpcb[i].process==ready)
{rpcb[i].cpuTime+=P_TIME;
rpcb[i].process=run;
if(rpcb[i].cpuTime>
=rpcb[i].allTime)//该进程执行完成
{
rpcb[i].cpuTime-=P_TIME;
system("
cls"
);
print();
Sleep(1000);
rpcb[i].process=finish;
rpcb[i].cpuTime=rpcb[i].allTime;
//防止所用时间超过总的时间
system("
}
else
{
rpcb[i].cpuTime-=P_TIME;
rpcb[i].cpuTime+=P_TIME;
rpcb[i].process=ready;
}
}
}
if(rpcb[i].process!
=ready)
k++;
if(k==2)
{for(i=0;
if(rpcb[i].process==run)
break;
rpcb[i].cpuTime+=P_TIME;
rpcb[i].process=run;
if(rpcb[i].cpuTime>
{rpcb[i].process=finish;
rpcb[i].cpuTime=rpcb[i].allTime;
system("
print();
Sleep(1000);
}
else
{
Sleep(1000);
rpcb[i].process=run;
}
for(ii=0;
ii<
ii++)//用于判断是否还有进程未完成
if(rpcb[ii].process!
=finish)
break;
}while(ii<
P_NUM);
//还有进程未完成
cout<
所有进程已运行完成!
}
voidHPcb:
highS()//最高优先数优先的调度算法
intii,f,i=0;
for(;
{
char*ch;
ch=newchar[1];
cout<
个进程的进程名优先、需要运行的时间:
cin>
hpcb[i].name=newchar[strlen(ch)+1];
strcpy(hpcb[i].name,ch);
hpcb[i].firstNum>
hpcb[i].allTime;
hpcb[i].cpuTime=0;
hpcb[i].process=ready;
}
do
f=getFirst();
hpcb[f].cpuTime+=P_TIME;
hpcb[f].firstNum--;
hpcb[f].process=run;
if(hpcb[f].cpuTime>
=hpcb[f].allTime)//该进程执行完成
{
hpcb[f].cpuTime-=P_TIME;
system("
print();
Sleep(1000);
hpcb[f].firstNum=MIN;
hpcb[f].process=finish;
hpcb[f].cpuTime=hpcb[f].allTime;
system("
}
else
hpcb[f].cpuT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 银行家 算法