操作系统课程设计报告

发布 2022-10-05 12:31:28 阅读 6119

计算机与信息工程学院08级计算机科学与技术专业题目死锁避免算法设计。

学生刘彦军学号***指导教师潘娟。

2024年1月7日。

设计题目:死锁避免算法设计设计目的:

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

掌握死锁产生的原因,产生死锁必要条件和处理死锁的基本方法。掌握预防死锁的方法,系统安全状态的基本概念。

掌握银行家算法,了解资源在进程并发执行中的资源分配策略。理解避免死锁在当前计算机系统不常使用的原因。

设计任务。一、要求。

1.复习银行家算法,设计一个具有若干(不少于3种)资源和若干(不少于5个)进程的系统。

2.定义系统的初始状态,即进程获得的资源数,还需要的资源数以及系统可用的资源数。

3.以用户输入的方式提出资源请求,并用银行家算法避免可能发生的死锁,若系统安全,允许用户继续申请资源。

4.设计的系统要求结构清晰,与用户的交互界面友好,能动态地实现资源的申请和分配。二、思想。

将一定数量的资金供多个用户周转使用,当用户对资金的最大申请量不超过现存资金时可接纳一个新客户,客户可以分期借款,但借款总数不能超过最大的申请量。银行家对客户的借款可以推迟支付,但是能够使客户在有限的时间内得到借款,客户得到所有的借款后能在有限的时间内归还。

用银行家算法分配资源时,测试进程对资源的最大需求量,若现存资源能满足最大需求就满足当前进程的申请,否则推迟分配,这样能够保证至少有一个进程可以得到所需的全部资源而执行到结束,然后归还资源,若os能保证所有进程在有限的时间内得到所需资源则称系统处于安全状态。

设计思路和过程。

1.概要设计。

1.1程序流程图。

1.2设计原理及方法。

银行家算法的设计思想是:当用户申请一组资源时,系统必须做出判断;如果把这些资源分出去,系统是否还处于安全装他。若是,就可以分出这些资源;否则,该申请暂不能满足。

实现银行家算法要有若干数据结构,它们用来表示资源分配系统的状态。令n表示系统中进程的数目,m表示资源的分类数。还需要以下数据结构:

1. **ailable是一个长度为m的向量,它表示每类资源可用的数量。**ailable [j]=k,表示rj类资源可用的数量为k。

是一个n×m矩阵,它表示每个进程对资源的最大需求。max [i,j]=k,表示进程pi至多可以申请k个rj类资源单位。

3. allocation是一个n×m矩阵,它表示当前分给每个进程的资源数目。allocation [i,j]=k,表示进程pi当前分到k个rj类资源。

4. need是一个n×m矩阵,它表示每个进程还缺少多少资源。need[i,j]=k,表示进程pi尚需k个rj类资源才能完成其任务。

显然need[i,j]= max [i,j]- allocation [i,j]。

这些数据结构的大小和数值随时间推移而改变。系统所执行的安全性算法描述如下:

1.设置2个向量:工作向量work:它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时,work = **ailable。

finish[i]:它表示系统是否有足够的资源分配给进程,使之完成运行。开始时先做finish[i]=true。

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

finish[i]=flase;need[i,j]≤work[j];若找到,则执行步骤3,否则,执行步骤4。

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

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

2.详细设计。

2.1程序源**。

#include#include#includeusing namespace std;#define false 0#define true 1

int max[100][100]=;各进程所需各类资源的最大需求int **aliable[100]=;系统可用资源char name[100]=;资源的名称。

int allocation[100][100]=;系统已分配资源int need[100][100]=;还需要资源int request[100]=;请求资源向量int temp[100]=;存放安全序列。

int work[100]=;存放系统可提供资源int m=100;//作业的最大数为100int n=100;//资源的最大数为100void showdata()/显示资源矩阵。

return 1;}

int safe()/安全性算法;int j;

int flag=0;

work[0]=**aliable[0];work[1]=**aliable[1];

work[2]=**aliable[2];for(i=0;ifor(j=0;jif (finish[i]==false&&need[i][j]<=work[j])}

for(i=0;iif(finish[i]==false)

cout

for (j=0;jif(request[j]>need[i][j])/判断申请是否大于需求,若大于则出错。

else }

void addresources()

showdata();safe();

void changeresources()

if(i==n)

cout<<"该资源名称不存在,请重新输入:";

while(flag);

for(int j=i;jname[j]=name[j+1];

**aliable[j]=**aliable[j+1];

n=n-1;

showdata();safe();

void addprocess()

showdata();safe();

int main()/主函数。

cout>m;m=m;

cout<<"请输入各进程的最大需求量("

if(flag)

cout<<"申请的资源大于最大需求量,请重新输入!";}

while(flag);

showdata();显示各种资源。

safe();用银行家算法判定系统是否安全while(choice)

3.调试及运行结果。

3.1程序调试及运行结果。

经过调试,改正了越界错误,定义错误,死循环和一些语法错误。程序最终运行成功。检测结果如下:

总结和体会。

为期四天的课程设计结束了。在这一周里,我做一个模拟银行家。

算法。我觉得在着手设计前设计的思路是很重要的。只有思路清晰才能进行下一阶段的设计。这样才能完成整个程序的设计,完成整个文报告的书写。

课程设计这几天学到的东西还真不少。以前不清楚的现在都暴露出来了。以前认为学了没用的东西现在也用到了。

这次的课程设计使我进一步了解了调度与死锁的问题。以及有关资源申请的问题、避免死锁的具体实施方法。深入了解了银行家算法的资源申请和资源分配的过程及原则。

保证系统处于安全状态。

参考文献。1、颜彬计算机操作系统实验教程北京清华大学出版社。

2、汤小丹计算机操作系统西安西安电子科技大学出版社。

3、袁宝华操作系统实验教程北京清华大学出版社2010.14、谭浩强c语言程序设计北京清华大学出版社。

操作系统课程设计报告

西安郵電大學。院系名称 计算机学院。专业名称 软件工程。班级 1104 学生姓名 赵大伟。学号 8位 04113124 指导教师 舒新峰。设计起止时间 2013.11.10 2013.11.20 1 通过观察 分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在posix 规范中...

操作系统课程设计报告

课程设计。课程名称操作系统。题目名称多级文件系统 2 学生学院计算机学院 专业班级。学号。学生姓名。指导教师。年月日。目录。一 课程设计 6 二 开发工具及环境 6 三 设计内容 6 四 结构图 8 五 部分 9 六 运行截图 11 七 参考文献 15 八 心得体会 15 本课程设计要求设计一个模拟...

操作系统课程设计报告

实验一进程管理。一 实验目的。1 开发一个函数,建立进程控制块和资源控制块结构,并实现相关数据结构的初始化。2 开发一系列操作,由进程调用这些操作,达到控制进程申请或释放各种资源的目的。通过实验理解进程的概念,进程的组成 pcb结构 进程的并发执行和操作系统进行进程管理的相关原语 主要是进程的创建 ...