您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页共享资源分配与银行家算法

共享资源分配与银行家算法

来源:华拓科技网


辽 宁 工 业 大 学

操作系统 课程设计(论文)

题目: 共享资源分配与银行家算法

院(系): 专业班级: 学 号: 学生姓名: 指导教师: 教师职称: 讲 师 起止时间: 2009.4.27至2009.5.3

课程设计(报告)任务及评语

院(系):软件学院 教研室:软件教研窒 学 号 程序设计(报告) 题目 课程设计的任务与要求: (1)掌握操作系统的基础知识。 (2)较熟练地运用C语言编写相应的算法程序。 (3)联系已学过的内容,巩固所学的理论,增强工作能力。 (4)通过设计主要使学生有一个编写程序的过程,对理论学习及动手能力都有一个很大的提高。 (5)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。 课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。 学生姓名 专业班级 程序设计(报告)任务 指导教师评语及成绩 成绩: 指导教师签字: 2009 年 5 月 15 日 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

目 录

第1章 课程设计的目的与要求 ................................................................................................. 1

1.1 课程设计目的 .................................................................................................................. 1 1.2 课程设计的实验环境 ...................................................................................................... 1 1.3 课程设计的预备知识 ...................................................................................................... 1 1.4 课程设计要求 .................................................................................................................. 1 第2章 课程设计内容 ................................................................................................................. 2

2.1课程设计题目 ................................................................................................................... 2 2.2课程设计整体设计说明 ................................................................................................... 2

2.2.1课程设计内容 ........................................................................................................ 2 2.2.2系统功能模块结构图 .......................................................... 错误!未定义书签。 2.2.3数据结构设计及用法说明 .................................................................................... 5 2.2.4程序结构(画流程图) ........................................................................................ 6 2.2.5各模块的功能 ........................................................................................................ 8 2.3程序源代码及注释 ........................................................................................................... 8 第3章 课程设计总结 ................................................................................................................. 16 参考资料 ..................................................................................................................................... 17

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 第1章 课程设计的目的与要求

1.1 课程设计目的

本课程设计是软件工程专业重要的实践性环节之一,是在学生学习完《操作系统》课程后进行的一次全面的综合练习。本课程设计的目的和任务:

1. 巩固和加深学生对操作系统课程的基本知识的理解和掌握 2. 利用C语言进行基本算法的设计 3. 掌握书写程序设计说明文档的能力 4. 提高运用相关算法解决实际问题的能力 1.2 课程设计的实验环境

硬件要求能运行Windows 2000/XP操作系统的微机系统。C语言程序设计及相应的开发环境。

1.3 课程设计的预备知识

熟悉C语言及C语言开发工具。 1.4 课程设计要求

1. 分析课程设计题目的要求 2. 写出详细设计说明

3. 编写程序代码,调试程序使其能正确运行 4. 设计完成的软件要便于操作和使用 5. 设计完成后提交课程设计报告

1

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 第2章 课程设计内容

2.1问题的描述

在多道程序系统中,虽可借助于多个进程的并发执行,来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险━━死锁。所谓死锁(Deadlock),是指多个进程在运行中因争夺资源而造成的一种僵局(Deadly_Embrace),当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程。 2.2整体设计说明

2.2.1方案描述及开发过程

一、关于死锁的一些结论:

Ø 参与死锁的进程最少是两个(两个以上进程才会出现死锁) Ø 参与死锁的进程至少有两个已经占有资源 Ø 参与死锁的所有进程都在等待资源

Ø 参与死锁的进程是当前系统中所有进程的子集

注:如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃。

二、资源分类:

永久性资源: 可以被多个进程多次使用(可再用资源)

l 可抢占资源 2 不可抢占资源

临时性资源:只可使用一次的资源;如信号量,中断信号,同步信号等(可消耗性资源)

“申请--分配--使用--释放”模式

三、产生死锁的四个必要条件: 1、互斥使用(资源独占)

2

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 每个个资源每次只能给一个进程使用 2、不可强占(不可剥夺)

资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放

3、请求和保持(部分分配,占有申请)

一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配)

4、循环等待

存在一个进程等待队列 {P1 , P2 , … , Pn},

其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路

5、 死锁的解决方案

5.1 产生死锁的例子

申请不同类型资源产生死锁

P1: …

申请打印机 申请扫描仪 使用 释放打印机 释放扫描仪 … P2: …

申请扫描仪 申请打印机 使用 释放打印机 释放扫描仪 …

3

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 申请同类资源产生死锁(如内存)

设有资源R,R有m个分配单位,由n个进程P1,P2,…,Pn(n > m)共享。假设每个进程对R的申请和释放符合下列原则: * 一次只能申请一个单位 * 满足总申请后才能使用 * 使用完后一次性释放

m=2,n=3

资源分配不当导致死锁产生

5.2死锁预防:

定义:在系统设计时确定资源分配算法,保证不发生死锁。具体的做法是破坏产生死锁的四个必要条件之一 ①破坏“不可剥夺”条件

在允许进程动态申请资源前提下规定,一个进程在申请新的资源不能立即得到满足而变为等待状态之前,必须释放已占有的全部资源,若需要再重新申请 ②破坏“请求和保持”条件

要求每个进程在运行前必须一次性申请它所要求的所有资源,且仅当该进程所要资源均可满足时才给予一次性分配

③破坏“循环等待”条件

采用资源有序分配法: 把系统中所有资源编号,进程在申请资源时必须严格按资源编号的递增次序进行,否则操作系统不予分配。

6.安全状态与不安全状态 安全状态:

如果存在一个由系统中所有进程构成的安全序列P1,…Pn,则系统处于安全状态。一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和,系统处于安全状态 (安全状态一定是没有死锁发生的)

不安全状态:

不存在一个安全序列,不安全状态一定导致死锁。

4

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 2.2.2数据结构设计及用法说明

一、可利用资源向量矩阵AVAILABLE。这是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果AVAILABLE [j]= K,则表示系统中现有R类资源K个。

二、最大需求矩阵MAX。这是一个n*m的矩阵,用以表示每一个进程对m类资源的最大需求。如果MAX [i,j]=K,则表示进程i需要R类资源的数目为K。

三、分配矩阵ALLOCATION。这也是一个n*m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果ALLOCATION [i,j]=K,则表示进程i当前已分得R类资源的数目为K。

四、需求矩阵NEED。这也是一个n*m的矩阵,用以表示每一个进程尚需的各类资源数。如果NEED [i,j]=K,则表示进程i还需要R类资源K个,才能完成其任务。 上述矩阵存在下述关系:

NEED [i,j]= MAX[i,j]﹣ ALLOCATION[i,j]

5

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 2.2.3程序结构(流程图)

银行家算法流程图

2.2.4各模块的功能及程序说明 一、初始化

由用户输入数据,分别对可利用资源向量矩阵AVAILABLE、最大需求矩阵MAX、分配矩阵ALLOCATION、需求矩阵NEED赋值。

二、银行家算法

在避免死锁的方法中,所施加的条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。

6

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避免死锁的算法。

设进程cusneed提出请求REQUEST [i],则银行家算法按如下规则进行判断。 (1)如果REQUEST [cusneed] [i]<= NEED[cusneed][i],则转(2);否则,出错。 (2)如果REQUEST [cusneed] [i]<= AVAILABLE[cusneed][i],则转(3);否则,出错。 (3)系统试探分配资源,修改相关数据: AVAILABLE[i]-=REQUEST[cusneed][i];

ALLOCATION[cusneed][i]+=REQUEST[cusneed][i]; NEED[cusneed][i]-=REQUEST[cusneed][i];

(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。

三、安全性检查算法

(1)设置两个工作向量Work=AVAILABLE;FINISH (2)从进程集合中找到一个满足下述条件的进程,

FINISH==false; NEED<=Work;

如找到,执行(3);否则,执行(4)

(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。

Work+=ALLOCATION; Finish=true; GOTO 2

(4)如所有的进程Finish= true,则表示安全;否则系统不安全。

7

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 2.2.5程序结果

T0时刻的资源分配表

2.3程序源代码及注释 #include using namespace std;

#define MAXPROCESS 50 /*最大进程数*/ #define MAXRESOURCE 100 /*最大资源数*/ int AVAILABLE[MAXRESOURCE]; /*可用资源数组*/ int MAX[MAXPROCESS][MAXRESOURCE]; /*最大需求矩阵*/ int ALLOCATION[MAXPROCESS][MAXRESOURCE]; /*分配矩阵*/ int NEED[MAXPROCESS][MAXRESOURCE]; /*需求矩阵*/ int REQUEST[MAXPROCESS][MAXRESOURCE]; /*进程需要资源数*/ bool FINISH[MAXPROCESS]; /*系统是否有足够的资源分配*/

8

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) int p[MAXPROCESS]; /*记录序列*/ int m,n; /*m个进程,n个资源*/ void Init(); bool Safe(); void Bank(); int main() { Init(); Safe(); Bank(); }

void Init() /*初始化算法*/ { int i,j;

cout<<\"\---------------------------------------------------\"<cout<<\"\|| 软件工程082班 贾国臣 ||\"<>m;

cout<<\"请输入资源的种类:\"; cin>>n;

cout<<\"请输入每个进程最多所需的各资源数,按照\"<9

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) for(j=0;j>MAX[i][j];

cout<<\"请输入每个进程已分配的各资源数,也按照\"<for(j=0;jcin>>ALLOCATION[i][j];

NEED[i][j]=MAX[i][j]-ALLOCATION[i][j]; if(NEED[i][j]<0) {

cout<<\"您输入的第\"<cout<<\"请输入各个资源现有的数目:\"<cin>>AVAILABLE[i]; } }

void Bank() /*银行家算法*/ {

int i,cusneed; char again;

10

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) while(1) {

cout<<\"请输入要申请资源的进程号(注:第1个进程号为0,依次类推)\"<>cusneed;

cout<<\"请输入进程所请求的各资源的数量\"<cin>>REQUEST[cusneed][i]; }

for(i=0;iif(REQUEST[cusneed][i]>NEED[cusneed][i]) {

cout<<\"您输入的请求数超过进程的需求量!请重新输入!\"<if(REQUEST[cusneed][i]>AVAILABLE[i]) {

cout<<\"您输入的请求数超过系统有的资源数!请重新输入!\"<for(i=0;iAVAILABLE[i]-=REQUEST[cusneed][i];

ALLOCATION[cusneed][i]+=REQUEST[cusneed][i]; NEED[cusneed][i]-=REQUEST[cusneed][i]; }

11

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) if(Safe()) {

cout<<\"同意分配请求!\"<cout<<\"您的请求被拒绝!\"<AVAILABLE[i]+=REQUEST[cusneed][i];

ALLOCATION[cusneed][i]-=REQUEST[cusneed][i]; NEED[cusneed][i]+=REQUEST[cusneed][i]; } }

for(i=0;iFINISH[i]=false; }

cout<<\"您还想再次请求分配吗?是请按y/Y,否请按其它键\"<>again;

if(again=='y'||again=='Y') {

continue; } break; } }

12

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) bool Safe() /*安全性算法*/ {

int i,j,k,l=0;

int Work[MAXRESOURCE]; /*工作数组*/ for(i=0;iWork[i]=AVAILABLE[i]; for(i=0;iFINISH[i]=false; }

for(i=0;iif(FINISH[i]==true) {

continue; } else {

for(j=0;jif(NEED[i][j]>Work[j]) { break; } } if(j==n) {

FINISH[i]=true;

13

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) for(k=0;kWork[k]+=ALLOCATION[i][k]; } p[l++]=i; i=-1; } else {

continue; } } if(l==m) {

cout<<\"系统是安全的\"<cout<cout<<\"-->\"; } }

cout<<\"\"<14

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) cout<<\"系统是不安全的\"<15

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 第3章 课程设计总结

操作系统是计算机系统中必不可少的系统软件。它是计算机系统中各种资源的管理者和各种活动的组织者、指挥者。银行家算法是为了使系统保持安全状态。我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。

银行家算法能保证系统时时刻刻都处于安全状态,但它要不断检测每个进程对各类资源的占用和申请情况,需花费较多的时间。

经过这次设计,让我基明白了银行家算法的基本原理,加深了对课堂上知识的理解,也懂得了如何让银行家算法实现。

16

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 参考资料

[1] 任爱华、王雷 编:《操作系统实用教程》,清华大学出版社,54~70P [2] 汤子嬴 编:《计算机操作系统》,西安电子科技大学出版,~87P [3] 张尧学、史美林 编:《计算机操作系统教程》,清华大学出版社,45~62P

17

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务