- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统实验—银行家算法
用银行家算法和随机算法实现资源分配
一、需求分析
为了了解系统的资源分配情况,假定系统的任何一种资源在任一时刻只能被一个进程使用。任何进程已经占用的资源只能由进程自己释放,而不能由其他进程抢占。当进程申请的资源不能满足时,必须等待。因此,只要资源分配算法能保证进程的资源请求,且不出现循环等待,则系统不会出现死锁。
要求编写系统进行资源调度的程序。一个是随机动态地进行资源分配的模拟程序,即只要系统当前剩余资源满足进程的当前请求,就立即将资源分配给进程,以观察死锁产生情况;一个是采用银行家算法,有效地避免死锁的产生。
二、概要设计
1、系统的主要功能
采用银行家算法,有效地避免死锁的产生。
2、运行环境要求
WINDOWS VC
3、实验内容概述
模拟进程的资源分配算法,了解死锁的产生和避免的方法。
三、详细设计
要求
设计3~4个并发进程,共享系统的10个同类不可抢占的资源。各进程动态进行资源的申请和释放。
用银行家算法和随机算法分别设计一个资源分配程序,运行这两个程序,观察系统运行情况,并对系统运行的每一步情况进行显示。
提示
(1)初始化这组进程的最大资源请求和依次申请的资源序列。把各进程已占用和需求资源情况记录在进程控制块中。假定进程控制块的格式如图所示,其中进程的状态有:就绪、等待和完成。当系统不能满足进程的资源请求时,进程处于等待态。资源需求总量表示进程运行过程中队资源的总的需求量。
进程名 状态 当前申请量 资源需求总量 已占资源量 能执行完标志
已占资源量表示进程目前已经得到但还未归还的资源量。因此,进程在以后还需要的剩余资源量等于资源需求总量减去已占资源量。显然每个进程的资源需求总量不应超过系统拥有的资源总量。
(2)银行家算法分配资源的原则是:当某个进程提出资源请求时,假定先分配资源给它,然后查找各进程的剩余请求,检查系统的剩余资源量是否由于进程的分配而导致系统死锁。若能,则让进程等待,否则,让进程的假分配变为真分配。
①查找各进程的剩余请求,检查系统的剩余资源量是否能满足其中一进程。如果能,则转②②将资源分配给所选的进程,这样,该进程已获得资源量最大请求,最终能运行完。标记这个进程为终止进程,并将其占有的全部资源归还给系统。
重复第①步和第②步,直到所有进程都标记为终止进程,或直到一个死锁发生。若所有进程都标记为终止进程,则梯田的初始状态是安全的,否则为不安全的。若安全,则正式将资源分配给它,否则,假定的分配作废,让其等待。
③由于银行家算法可以避免死锁,为了观察死锁现象的发生,要求采用两个算法:银行家算法和随机算法。随机算法的分配原则是:当进程申请资源时,如果系统现存资源数能满足 进程的当前申请量,就把资源分配给进程,否则,让其等待。这样,随机算法可能引起死锁。
一资源分配模拟算法总框图
四、源代码
#include iostream
#includevector
#includefstream
using namespace std;
const int TASK_RUNNING=0;
const int TASK_SUCCEED=1;
const int TASK_WAITTING=2;
const int TASK_RLength=10;
int Rcs-left=RLength;
ofstream ff(result.txt);
class pcb
{
public:
int p_pid;
int p_stat;
int p_apply;
int p_occupy;
bool p_issuc;
int p_require;
pcb(int id, int require)
{
p_pid=id;
p_require=require;
p_stat=TASK-RUNNING;
p_occupy=0;
p_issuc=false;
p_apply=0;
}
friend ostream operator(ostreamcout,const pcbp)
{
contp.p_pidtp.p_stat\tp.p_require\tp.p_occupyendl;
return cout;
}
};
void rand (vectorintresource,vectorpcbpgrp);
void banker(vectorintresource,vectorpcbpgrp);
int main()
vectorintresource;
vectorpcbpgrp;
vectorint::iterator r;
vectorpcb::iterator p;
c
您可能关注的文档
最近下载
- GB_T 42900-2023 金属材料 高应变速率高温压缩试验方法.docx
- 中国抑郁障碍防治指南(第二版)简介PPT课件.pptx
- 心脏肿瘤讲课.pptx VIP
- 外研社版英语4年级上册单词表衡水体描红练字帖(三年级起点含音标和例句).pdf
- 电动自行车一线通、RS485、CAN2.0通信协议规范、基于RS485通信的充放电流程示例.pdf VIP
- 湖南省湖南师范大学附属中学2024-2025学年高二上学期入学考试数学试卷(解析版).docx VIP
- 四年级音乐 跳柴歌 课件.pptx
- 《复用医疗器械预处理操作规程》.pdf VIP
- 火灾自动报警及联动控制系统技术交底.docx VIP
- GB_T 43674-2024加氢站通用要求.docx VIP
文档评论(0)