中南大学操作系统课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统课程设计题目名称:银行家算法

姓名

学号

专业

班级

指导教师

编写日期

目录

第一章问题描述 (3)

1.1 课设题目重述 (3)

1.2 问题分析 (3)

1.3 实验环境 (3)

第二章系统设计 (4)

3.1 主要数据结构 (4)

3.2 银行家算法 (4)

3.3 安全性检查算法 (6)

3.4 银行家算法安全性序列分析之例 (7)

第三章源代码清单 (10)

3.1 函数清单 (10)

3.2 各函数的调用关系图 (12)

第四章运行结果测试与分析 (13)

4.1 程序的正常输出结果 (13)

4.2 程序的差错控制 (15)

第五章结论与心得 (18)

[参考文献] (18)

第一章问题描述

1.1课设题目重述

设计目的:了解多道程序系统中,多个进程并发执行的资源分配。

设计要求:管理员可以把一定数量的作业供多个用户周转使用,为保证作业的安全,管理员规定:当一个用户对作业的最大需求量不超过管理员现有的资金就要接纳该用户;用户可以分期贷款,但贷款的总数不能超过最大需求量;当管理员现有的作业不能满足用户的所需数时,对用户的请求可以推迟支付,但总能使用户在有限的时间里得到请求。当用户得到所需的全部作业后,一定能在有限的时间里归还所有的作业。

1.2问题分析

银行家算法是最具有代表性的避免死锁的算法。我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。在死锁的避免中,银行家算法把系统状态分为安全状态和不安全状态,只要能使系统始终处于安全状态,便可以避免发生死锁。所谓安全状态,是指系统能按某种顺序为每个进程分配所需资源,直到最大需求,使每一个进程都可以顺利完成,即可找到一个安全资源分配序列。

所以我们需要解决问题有:

1)熟悉银行家算法的工作原理,明白如何判断系统处于安全状态,避

免死锁。

2)在Windows操作系统上,如何利用Win32 API编写多线程应用程序

实现银行家算法。

3)创建n个线程来申请或释放资源,如何保证系统安全,批准资源申

请。

4)通过Win32 API提供的信号量机制,实现共享数据的并发访问。1.3实验环境

操作系统:windows 8.1

实验语言:c++

第二章系统设计

3.1主要数据结构

1)可利用资源向量Available。如果Available[j]=K,则表示系统中现

有Rj类资源K个。

2)最大需求矩阵Max。如果Max[i,j]=K,则表示进程i需要Rj类资源的

最大数目为K。

3)分配矩阵Allocation。如果Allocation[i,j]=K,则表示进程i当前

已分得Rj类资源的数目为K。

4)需求矩阵Need。如果Need[i,j]=K,则表示进程i还需要Rj类资源K

个,方能完成其任务。Need[i,j]=Max[i,j]-Allocation[i,j]。3.2银行家算法

在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。

设进程cusneed提出请求REQUEST [i],如果REQUEST [cusneed][i],表示进程Pi需要K个Rj类型的资源。则银行家算法按如下规则进行判断。

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)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,

系统恢复原状,进程等待。

5)对于某一进程i,若对所有的j,有NEED[i][j]=0,则表此进程资源分

配完毕,应将占用资源释放。

根据以上步骤,所以银行家算法流程图如下所示

图1 银行家算法流程图

3.3安全性检查算法

1)设置了两个变量

①工作向量Work,表示系统可提供给进程继续运行所需的各类资源数目。

开始时,Work:=Available。

②Finish,表示系统是否有足够的资源分配给进程,使之运行完成。开

始时令Finish[i]:=false;当有足够的资源分配给进程时,再令

Finish[i]:=true。

2)从进程集合中找到一个能满足下述条件的进程:

① Finish[i]=false;

② Need[i,j]≤Work[j];

若找到,执行步骤(3),否则,执行步骤(4)。

3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资

源,故应执行:

Work[j]∶=Work[i]+Allocation[i,j];

Finish[i]∶=true;

go to step 2;

4)如果所有进程的Finish[i]=true都满足,则表示系统处于安全状态;

否则,系统处于不安全状态。

根据以上步骤,所以安全性检查算法流程图如下所示:

相关文档
最新文档