银行家算法实验报告

  • 格式:doc
  • 大小:101.18 KB
  • 文档页数:11

下载文档原格式

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

南华大学

计算机学院

实验报告

(2018学年春季学期)

课程名称操作系统实验名称银行家算法

姓名学号

专业网络工程班级1班

地点教师曹军

一、实验题目:

系统中有 m 个同类资源被 n 个进程共享,每个进程对资源的最大需求数分别为S1, S2,…,Sn,且Max(Si)<=m, (i=1,2,…n)。进程可以动态地申请资源和释放资源。编写一个程序,实现银行家算法,当系统将资源分配给某一进程而不会死锁时,就分配之。否则,推迟分配,并显示适当的信息。

二、实验目的:

当系统的总资源数 m 小于或等于所有进程对资源的最大需求S n n i ∑ i −=1 时,就可能产生死锁。死锁会引起计算机系统的瘫痪。银行家算法是在实现资源分配时避免死锁的一个著名算法,该算法是在能确保系统处于安全状态时才把资源分配给申请者。通过本实验进一步理解死锁的概念,并选择一个算法来避免死锁。

进一步理解利用银行家算法避免死锁的问题; 在了解和掌握银行家算法。理解和掌握安全序列、安全性算法。

三、实验内容及要求:

1、设计进程对各类资源最大申请表示及初值的确定。

2、设定系统提供资源的初始状况。

3、设定每次某个进程对各类资源的申请表示。

4、编制程序,依据银行家算法,决定其资源申请是否得到满足。

5、显示资源申请和分配时的变化情况。

四、实验过程:

程序要求:

1. 判断当前状态是否安全,如果安全,给出安全序列;如果不安全给出理由。

2. 对于下一个时刻T1,某个进程Pk会提出请求Request(R1, … ,Rm),判断分配给P k进程请求的资源之后是否安全。如果安全,给出安全序列;如果不安全给出理由。

3. 输入:进程个数n,资源种类m,T0时刻各个进程的资源分配情况(可以运行输入,也可以在程序中设置)。

4. 输出:如果安全输出安全的进程序列,不安全提示信息。

进程调度的实现过程:

1. 变量初始化;

2. 接收用户输入n,m,(输入或者默认的)Allocationij,Need ij;

3. 按照银行家算法判断当前状态安全与否,安全给出安全序列,不安全给出提示;

4. 如果安全,提示用户输入下一时刻进程Pk的资源请求Request(R1, … ,Rm);

5. 如果不安全或者无新请求则退出。

源代码:

#include

#include

#include

#include

#include

using namespace std;

#define MaxNumber 20

static int n;

static int m;

static int Available[MaxNumber];

static int Max[MaxNumber][MaxNumber];

static int Allocation[MaxNumber][MaxNumber];

static int Need[MaxNumber][MaxNumber];

static int Request[MaxNumber];

static int SafeOrder[MaxNumber];

static bool Finish[MaxNumber];

static bool isDisplayAvaliable = true;

static char sourceName[] = {'A','B','C','D','E','F','G','H','I','J','K'}; //资源名称

void input();

bool isSystemSafe();

void bankerAlgorithm();

void display();

int main()

{

input();

bankerAlgorithm();

system("pause");

return 0;

}

void input()

{

//int n=6;

//int m=3;

ifstream inData;

inData.open("C:/476.txt");

//读取数据

inData>>n;

inData>>m;

for (int i=0;i

{

inData>>Available[i];

}

for (int i=0;i

{

for (int j=0;j

{

inData>>Allocation[i][j];

}

}

for (int i=0;i

{

for (int j=0;j

{

inData>>Need[i][j];

}

}

for (int i=0;i

{

for (int j=0;j

{

Max[i][j] = Need[i][j] + Allocation[i][j];

}

}

cout<<"*****************************程序开始*******************************"<

display();

}

bool isSystemSafe()

{

int work[MaxNumber];

for (int i=0;i

{

work[i] = Available[i];

}

for (int i=0;i

{

Finish[i] = false;

SafeOrder[i] = -1; //初始化安全序列

}

int FinishNumebr = 0;

int isSafe;