计算机操作系统课程设计报告《Linux下动态资源分配算法演示程序

更新时间:2024-05-03 12:06:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《计算机操作系统》课程设计

题 目:专 业:年 级:小组成员:指导教师:时 间:地 点:

动态资源分配算法演示程序 软件工程 2012级

2014年 12 月

目录

1. 概述 .................................................. 3 2. 课程设计任务及要求 .................................... 4

2.1 设计任务 .................................................... 4 2.2 日程安排表 .................................................. 4 2.3 设计要求 .................................................... 4

3. 算法及数据结构 ........................................ 4

3.1算法的总体思想............................................... 4 3.2 银行家算法 .................................................. 5 3.3 安全性算法 .................................................. 6

4. 程序设计与实现 ........................................ 8

4.1 程序流程图 .................................................. 8 4.2 程序代码 .................................................... 9 4.3 实验结果 ................................................... 16

5. 结论 ................................................. 18 6. 收获及体会 ........................................... 19 7. 参考文献 ............................................. 20

1. 概述

动态资源分配算法演示程序是对操作系统中“银行家算法”的模拟,银行家算法是操作系统中一种最具代表性的避免死锁的算法。通过对信息的编辑,来实现自行输入信息。资源种类与数目可在界面进行设置,在资源分配过程中可以随时增加进程及其对资源的需求。在编辑信息时,可以修改资源和进程的各种信息,包括添加、修改和删除。确定信息后,可以通过检查系统安全性,来显示系统的安全序列或者显示系统处于不安全状态。请求资源功能实现了进程请求系统中资源的模拟。如果能够通过系统安全状态检测,则系统对该进程进行资源分配;当进程满足所有资源分配后能够自行释放所有资源,退出资源竞争。本程序是在LINUX环境系统下编写的。

本设计主要用于解决多种资源被多个独立执行的进程使用的安全算法。该算法采用矩阵存储资源的数据,通过对系统资源预分配后检查系统状态,以避免死锁的产生。要求如下: (1) 模拟一个银行家算法;

(2) 初始化时让系统拥有一定的资源; (3) 用键盘输入的方式申请资源;

(4) 如果预分配后,系统处于安全状态,则修改系统的资源分配情况; (5) 如果预分配后,系统处于不安全状态,则提示不能满足请求,设计

的主要内容是模拟实现动态资源分配。同时编写和调试一个系统动态资源的简单模拟程序,观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生。

2. 课程设计任务及要求

2.1 设计任务

本设计主要用于解决多种资源被多个独立执行的进程使用的安全算法。该算法采用矩阵存储资源的数据,通过对系统资源预分配后检查系统状态,以避免死锁的产生。 2.2 日程安排表 日期 任务 负责人 A B 完成情况 完成 2014.12.24星期三下午 查找资料,按需求设计算法 2014.12.25星期四上午 查找资料,开始编写代码 2014.12.25星期四下午 编写代码与注释 2014.12.26星期五上午 代码完善与修改 2014.12.26星期五下午 文档制作

A B 完成 A B A A 完成 完成 完成 2.3 设计要求

(1)资源种类与数目可在界面进行设置,在资源分配过程中可以随时增加进程及其对资源的需求。

(2)可读取样例数据(要求存放在外部文件中)进行资源种类、数目与进程数的初始化。

(3)在资源分配过程中可以随时进行系统安全状态检测。

(4)如果能够通过系统安全状态检测,则系统对该进程进行资源分配;当进程满足所有资源分配后能够自行释放所有资源,退出资源竞争。 (5)要求进行安全性检查时按指定策略顺序进行,即按每个进程当前Need数由小至大进行排序,如果Need数相同,则按序号由小至大进行排序; (6)具有一定的数据容错性。

3. 算法及数据结构 3.1算法的总体思想

为了实现银行家算法,在系统中必须设置这样四个数据结构,分别用来描述

系统中可利用的资源、所有进程对资源的最大需求、系统中的资源分配,以及所有进程还需要多少资源的情况。

(1) 可利用资源向量Available。这是一个含有m个元素的数组,其中的每

一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果Available[j]=K,则表示系统中现有Rj类资源K个。

(2) 最大需求矩阵Max。这是一个n*m的矩阵,它定义了系统中n个进程中

的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。

(3) 分配矩阵Allocation。这也是一个n*m的矩阵,它定义了系统中每一类

资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的数目为K。

(4) 需求矩阵Need。这也是一个n*m的矩阵,用以表示每一个进程尚需的各

类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个方能完成其任务。

上述三个矩阵间存在下述关系:Need[i,j]=Max[i,j]-Allocation[i,j] 3.2 银行家算法 3.2.1 功能

设进程i提出请求Request[n],则银行家算法按如下规则进行判断。 (1) 如果Request[n]>Need[i,n],则报错返回。

(2) 如果Request[n]>Available,则进程i进入等待资源状态,返回。 (3) 假设进程i的申请已获批准,于是修改系统状态:

Available=Available-Request Allocation=Allocation+Request Need=Need-Request

(4) 系统执行安全性检查,如安全,则分配成立;否则试探险性分配作

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

3.2.2 数据结构

int Max[100][100]={0};//各进程所需各类资源的最大需求

int Avaliable[100]={0};//系统可用资源 char name[100]={0};//资源的名称

int Allocation[100][100]={0};//系统已分配资源 int Need[100][100]={0};//还需要资源

int M=100;//作业的最大数为100

int N=100;//资源的最大数为100 3.2.3 算法

3.3 安全性算法 3.3.1功能

开始 输入资源种类数 输入进程的数量 输入各进程最大需求量 Allocation[i,j]>Max[i,j] 输入各进程已经申请的资源显示资源,开始银行家算法 提出请求Request[j] Request[j]<=Need[i,j] 否 报错 否 Request[j]<=Available[j] 报错 Available[j]-=Request; Allocation[i,j]-=Request[j]; Need[i,j]+=Request[j]; 结束

(1)设置两个工作向量Work=Available;Finish[M]=False (2)从进程集合中找到一个满足下述条件的进程, Finish [i]=False Need<=Work

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

(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。 Work=Work+Allocation; Finish=True;go to step 2; (4)如所有的进程Finish[M]=true,则表示安全;否则系统不安全。 3.3.2 数据结构

int Allocation[100][100]={0};//系统已分配资源 int Request[100]={0};//请求资源向量

int temp[100]={0};//存放安全序列 int Work[100]={0};//存放系统可提供资源 3.3.3算法

开始 Work[j]=Avaliable[j];Finish[i]=false; Need[i,j]<=Work&&Finsh[i]=false; Work[j]+=Allocation[i,j];Finish[i]=ture; 所有进程的Finish[i]=ture; 系统不安安全,输出安全序列Return ture; 结束

4. 程序设计与实现

4.1 程序流程图

开始 输入资源种类数 输入进程的数量 输入各进程最大需求量 输入各进程已经申请的资源量 Allocation[i,j]>Max[i,j] 显示资源,开始银行家算法 提出请求Request[j] 否 Request[j]<=Need[i,j] Error Request[j]<=Available[j] 否 Error Available[j]-=Request[j]; Allocation[i,j]-=Request[j]; Need[i,j]+=Request[j]; Safe()算法判定系统安全性

本文来源:https://www.bwwdw.com/article/71jg.html

Top