《操作系统 银行家算法》课程设计报告


    

    操作系统银行家算法

    课程设计报告




    姓 名:
    学 号:
    班 级: 计科班
    专 业:计算机科学技术




    XX学 计算机科学信息学院



    目 录



    1 课程设计目 …………………………………………………… 1
    2 课程设计求 ………………………………………………… 1
    3 课程设计题目描述 ……………………………………………… 2
    4 课程设计银行家算法原理 …………………………………… 2
    5 源程序结构分析代码实现 …………………………………… 4
    6 课程设计总结 …………………………………………………… 25
    课程设计目
    操作系统计算机系统核心系统软件负责控制理整系统资源组织户协调资源计算机高效工作操作系统课程设计操作系统理课必补充复检验学课程重手段课程设计目综合应学生学知识通实验环节加深学生操作系统基原理工作程理解提高学生独立分析问题解决问题力增强学生动手力
    二课程设计求
    1.分析设计容出解决方案(说明设计实现原理采数结构)
    2.画出程序基结构框图流程图
    3.程序部分详细设计分析说明
    4.源代码格式规范
    5.设计合适测试例运行结果分析
    6.设计中遇问题设计心体会
    7.期提交完整程序代码执行程序课程设计报告


    三课程设计题目描述
    银行家算法种代表性避免死锁算法
      解释银行家算法必须先解释操作系统安全状态安全状态
      安全状态:果存系统中进程构成安全序列P1…Pn系统处安全状态安全状态定没死锁发生
      安全状态存安全序列安全状态定导致死锁
      什安全序列呢?
      安全序列:进程序列{P1…Pn}安全果进程Pi(1≤i≤n)尚需资源量超系统前剩余资源量进程Pj (j < i )前占资源量
      银行家算法:
      操作系统作银行家操作系统理资源相银行家理资金进程操作系统请求分配资源相户银行家贷款操作系统银行家制定规进程分配资源进程首次申请资源时测试该进程资源需求量果系统现存资源满足需求量前申请量分配资源否推迟分配进程执行中继续申请资源时先测试该进程已占资源数次申请资源数否超该进程资源需求量超拒绝分配资源没超测试系统现存资源否满足该进程尚需资源量满足前申请量分配资源否推迟分配

    四 课程设计银行家算法原理
    1.银行家算法思路
    先户提出请求进行合法性检查检查请求需否利请求合法进行试分配试分配状态调安全性检查算法进行安全性检查安全分配否分配恢复原状态拒绝申请

    2.银行家算法中数结构
    利资源量 int Available[j] j资源种类
    需求矩阵 int Max[i][j] i进程数量
    分配矩阵 int Allocation[i][j]
    需求矩阵 int need[i][j] Max[i][j] Allocation[i][j]
    申请类资源数量 int Request i[j] i进程申请j资源数量
    工作量 int Work[x] int Finish[y]

    3.银行家算法bank()
    进程i发出请求申请kj资源Request i[j]k
    (1)检查申请量否需求量:Request i[j](2)检查申请量否系统中利资源数量:Request i[j](3)两条件满足系统试探着资源分配申请进程修改面数结构中数值:
    Available[ij] Available[ij] Request i[j]
    Allocation[i][j] Allocation[i][j]+ Request i[j]
    need[i][j] need[i][j] Request i[j]
    (4)试分配执行安全性检查调safe()函数检查次资源分配系统否处安全状态安全正式资源分配进程否次试探分配作废恢复原资源分配状态该进程等
    (5)do{…}while 循环语句实现输入字符yn判断否继续进行资源申请

    4.安全性检查算法(safe()函数)
    (1)设置两量:
    工作量Work表示系统提供进程继续运行需类资源数目执行安全性算法开始时Work Available
    Finish表示系统否足够资源分配进程运行完成开始时先做Finish[i]0足够资源分配进程时令Finish[i]1

    (2)进程中查找符合条件进程:
    条件1:Finish[i]0
    条件2:need[i][j]找执行步骤(3)否执行步骤(4)

    (3)进程获资源利执行直完成释放出分配资源应执行:
    Work[j] Work[j]+ Allocation[i][j]
    Finish[i]1
    goto step 2

    (4)果Finish[i]1满足表示系统处安全状态否处安全状态



    五源程序结构分析代码实现

    1.程序结构

    程序五部分:

    (1) 初始化chushihua():程序开始进行初始化输入数:进程数量资源种类种资源利数量进程种资源已分配数量进程类资源需求数等
    (2)前安全性检查safe():判断前状态安全性根方调提示处理
    (3)银行家算法bank():进行银行家算法模拟实现模块调模块进行银行家算法模拟程
    (4)显示前状态show():显示前资源分配详细情况包括:种资源总数量(all)系统目前种资源数量进程已资源数量进程需资源量
    (5)程序main()
    逐调初始化显示状态安全性检查银行家算法函数程序序进行

    2.数结构
    程序全局变量:
    const int x10y10 定义常量
    int Available[x] 种资源利数量
    int Allocation[y][y] 进程前已分配资源数量
    int Max[y][y] 进程类资源需求数
    int Need[y][y] 需求矩阵
    int Request[x] 申请类资源数量
    int Work[x] 工作量表系统提供进程运行需类资源数量
    int Finish[y] 表系统否足够资源分配进程0否1
    int p[y] 存储安全序列
    int ij 全局变量循环语句中
    int nm n进程数量m资源种类数
    int l0counter0

    3.函数声明
    void chushihua()   系统初始化函数
    void safe()  安全性算法函数
    void bank() 银行家算法函数
    void show ()  输出前资源分配情况

    4.函数main()
    int main()
    {
    cout<<…… 显示程序开始提示信息
    chushihua() 初始化函数调
    cout< showdata() 输出初始化状态
    判断前状态安全性
    safe() 安全性算法函数调
    if (l cout<<\n前状态安全法申请程序退出< cout< system(pause)
    sign() 调签名函数
    return 0 break
    }
    else{
    int i 局部变量
    l0
    cout<<\n安全状态< cout<<安全序列
    cout< for (i1 i cout<<>><<进程<<(< }
    for (i0 i cout< }
    bank() 银行家算法函数调
    return 0
    }

    5 操作系统银行家算法流程图:
    初始化函数chushihua()开始

    AVAILABLE[[i]REQUEST[i]
    ALLOCATION[i]+REQUEST[i]
    NEED[i]REQUEST[i]



    输入进程数量



    输入资源种类数


    输入资源前资源数



    输入进程前已分配资源数


    输入进程类资源需求

    输出提示:输入误请重新输入





    初始化函数chushihua()结束银行家函数 Bank()




    提出请求REQUEST[i]



    Error
    REQUEST[i]



    REQUEST[i]
    Error






    Safe()
    输出提示:请求拒




    AVAILABLE[i]REQUEST[i]ALLOCATION[i]REQUEST[i]
    NEED[i]+REQUEST[i]
    输出提示:意分配请求



    否进行次分配



    退出程序银行家算法Bank()结束



    安全性算法Safe()开始



    WorkAVAILABLE
    FINISHfalse


    NEED[i]





    Work+ALLOCATION[i]
    FINISH[i]ture



    进程FINISHture
    输出提示:系统安全





    安全输出安全序列
    Return ture




    安全算法safe()结束







    2 源程序代码:
    #include
    #include
    #include
    using namespace std
    #define TRUE 1 定义 TRUE 1
    #define FALSE 0 定义 FLASE0
    void bank(vectorvector >vector >int int ) 声明bank(应行家算法)
    int safe(vector Availablevector > Needvector > Allocationint nint m)声明safe()安全性算法
    void init()
    *************************************函数main()**************************************************************
    void main()
    {
    init()
    int safe(vector Availablevector > Needvector > Allocationint nint m)
    }
    **************************************初始化函数init()*********************************************************
    void init()
    {
    int m m资源类数
    int n 进程数
    cout<<输入资源类数< cin>>m
    vector Available(m) 动态申请数组Available资源量
    cout<<输入类资源总数< ************************************************************************
    * 面刚掉DOS输入资源量*
    *未刚掉Availabletxt文件中读入数*
    ************************************************************************
    *
    for (int i0i {
    cout<<输入R< cin>>Available[i]
    }
    *
    FILE *fp
    fpfopen(Availabletxtr+)
    cout< for(int i0i {
    fscanf(fpd&Available[i])
    cout< }
    fclose(fp)
    cout<<\n输入进程数< cin>>n
    vector > Max(n vector(m))
    ************************************************************************
    * 面刚掉DOS输入资源量*
    *未刚掉Maxtxt文件中读入数*
    ************************************************************************
    *
    for ( i0i {
    cout<<输入进程< for (int j0j {
    cout<< 输入需R< cin>>Max[i][j]
    while (Max[i][j]>Available[j])
    {
    cout< cin>>Max[i][j]
    }
    }
    }*
    fpfopen(Maxtxtr+)
    cout< for(i0i {
    for (int j0j {
    fscanf(fpd&Max[i][j])
    cout< }
    cout< }
    fclose(fp)
    cout<<输入已分配Allocation< vector > Allocation(n vector(m))
    vector > Need(n vector(m))
    ************************************************************************
    * 面刚掉DOS输入资源量*
    *未刚掉Allocationtxt文件中读入数*
    ************************************************************************
    *
    for ( i0i {
    cout<<输入进程< for (int j0j {
    cout<< 输入分配R< cin>>Allocation[i][j]
    while(Allocation[i][j]>Max[i][j])
    {
    cout< cin>>Allocation[i][j]
    }
    Need[i][j]Max[i][j]Allocation[i][j]
    Available[j] Available[j]Allocation[i][j]
    }
    }*
    fpfopen(Allocationtxtr+)
    cout<
    for(i0i {
    for (int j0j {
    fscanf(fpd&Allocation[i][j])
    Need[i][j]Max[i][j]Allocation[i][j] 初始化Max时时初始化Need数组
    Available[j] Available[j]Allocation[i][j] 初始化Max时时修改Available数组
    cout< }
    cout<
    }
    fclose(fp)
    int safe(vector Availablevector > Needvector > Allocationint nint m)
    cout<<状态安全<
    bank(AvailableNeedAllocationnm)调银行家算法bank()函数
    }

    **************************************银行家算法bank()函数*********************************************************
    void bank(vector Availablevector > Needvector > Allocationint nint m)
    {
    vector Request(m)
    int all0
    定义变量all果all0表示进程已运行完果all>1表示进程没运行完
    for (int i0i for(int j0j all +Need[i][j]
    if (0all)
    {
    cout<<进程已运行完结束< exit(0)
    }
    int jc选进程
    char again
    all0重新初始化all
    while (1)
    {
    while (all0)
    {
    all0
    果all0表示进程已运行完果all>1表示进程没运行完
    循环直all>0找未运行完进程
    cout<<选进程作前进程0< cin>>jc
    for (int j0j {
    all + Need[jc][j]
    }
    if (0all)
    {
    cout<<进程已运行重新输入< }
    }
    cout<<输入该进程请求量< for (i0i {
    cin>>Request[i]
    while(Request[i]>Need[jc][i]||Request[i]>Available[i])
    {

    cout<<请求量法满足< break

    }

    }

    系统试探着资源分配该进程
    for (i0i {
    Available[i]Available[i]Request[i]
    Allocation[jc][i]Allocation[jc][i]+Request[i]
    Need[jc][i]Need[jc][i]Request[i]
    }
    int bb0
    bbsafe(AvailableNeedAllocationnm)调安全性算法判断次资源分配系统否处安全状态
    if (1bb)
    {
    cout<<系统成功分配资源< }
    else
    {
    cout<<系统未成分配资源收回预分配资源< for (i0i {
    Available[i]Available[i]+Request[i]
    Allocation[jc][i]Allocation[jc][i]Request[i]
    Need[jc][i]Need[jc][i]+Request[i]
    }
    }
    cout<<您想次请求分配请yY否请键< cin>>again
    if(again'y'||again'Y')
    {
    all0
    continue
    }
    break
    }
    }
    **************************************安全性算法safe()函数*********************************************************
    int safe(vector Availablevector > Needvector > Allocationint nint m)
    {
    vector Work(m)Finish(n)申请工作量workfinish
    WorkAvailable
    vector count(n) 记录安全序列
    int len1 记录安全序列进程数果lenn表示finishitrue处安全状态
    for(int i0i for (i0i {
    int needed1
    for (int j0j {
    if(Need[i][j] {
    neededneeded*TRUE
    }
    else neededneeded*FALSE
    }
    if ((Finish[i]FALSE)&&needed1)
    {
    for (j0j {
    Work[j]Work[j]+Allocation[i][j]
    }
    Finish[i]TRUE
    lenlen+1
    count[len]i
    i1
    }
    }
    if (lenn1)
    {
    cout<<系统安全< cout<<安全序列< for (i0i {
    cout< if (ilen)
    {
    cout<<>
    }
    }
    cout< return TRUE
    }
    else
    {
    cout<<系统安全<运行结果:
    1 初始化结果

    2 检测系统资源分配否安全结果:








    六课程设计总结
    操作系统基特征发享系统允许进程发执行享系统软硬件资源限度利计算机系统资源操作系统应采动态分配策略样容易资源足分配引起死锁次课程设计银行家算法避免死锁银行家算法分配资源程分配序列会产生死锁算法中心思想:该法分配资源时次分配总存着进程果单独运行必然获需全部资源说结束结束类资源满足申请者需
    次程序面思路展开时间仓促课程设计存着足:实现发操作总资源时满足进程需资源数时进程时进行进程序执行二扫描进程序单进程序(编号)扫描产生安全序序基础产生实安全序三进程数资源数进行数量进行限制十四运行程序界面较差进程数需资源数已分配资源数资源数目然
    次课程设计时间说仓促点然学实性知识更深解算法C语言进行复程中知识点记感谢程中帮助老师学
    感悟:亲动手学知识
    次感谢帮助老师学






    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 2 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    《操作系统 银行家算法》课程设计报告

    《操作系统--银行家算法》课程设计报告姓 名: 学 号: 班 级: 计科班 ...

    3年前   
    800    0

    银行家算法《操作系统》课程设计报告

    《操作系统》课程设计报告课题: 银行家算法 专业计算机科学与技术学生姓名班级计算机学号指导教师信息工程...

    3年前   
    680    0

    操作系统课程设计银行家算法的模拟实现

    操作系统课程设计报告专业计算机科学与技术学生姓名班级学号指导教师完成日期信息工程学院题目: 银行家算法的模拟实现 一、设计目的本课程设计是学习完“操作系统原理”课程后进...

    3年前   
    665    0

    操作系统课程设计编程序模拟银行家算法

    课程设计报告书 课程名称: 操作系统原理 题 目: 编程序模拟银行家算法 系 名: 信息工程系 专业班级: ...

    3年前   
    705    0

    操作系统实验报告C语言实现银行家算法

    实 验 报 告题 目名 称C语言实现银行家算法院 系信息科学与工程学院班 级完成时间指导老师本次实验成绩组长联系电话邮件地址组员(姓名,学号)主要任务程序算法的编写、实现、运行调...

    3年前   
    458    0

    合工大页面置换算法操作系统课程设计报告

    计算机与信息学院《操作系统综合设计》报告设计题目:页面置换算法学生姓名:学 号:专业班级:计算机科学与技术班2015 年 X月一、设计题目 3二、开发环境与工具 3三、设计原理 31....

    3年前   
    544    0

    进程调度算法的实现计算机操作系统课程设计

    题目2 进程调度算法的实现2.1 题目的主要研究内容及预期达到的目标(1)设计进程控制块; (2)设计多个进程队列; (3)设计多个进程(≥20); (4)动态生成时间片、执行时间和优先级,...

    2年前   
    573    0

    操作系统课程设计磁盘调度算法

    操作系统课程设计磁盘调度算法目 录1 课程设计目的及要求……………………………………………………12 相关知识…………………………………………………………………13 ...

    3年前   
    531    0

    操作系统课程设计磁盘调度算法

    《计算操作系统》课程设计报告 姓名: ...

    3年前   
    447    0

    操作系统实验(进程调度+存储管理+磁盘调度++银行家算法+文件系统设计)

    操作系统实验(进程调度+存储管理+磁盘调度++银行家算法+文件系统设计)实验三 进程调度一、 实验目的多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处...

    3年前   
    635    0

    驱动程序实验报告操作系统课程设计报告

    操作系统课程设计报告班级: 计科 姓名: 学号: 老师: 时间:2012年X月X日一、设计目的操作...

    1年前   
    289    0

    操作系统实验四主存空间的分配与回收首次适应算法和循环首次适应算法

    实验报告【实验名称】 首次适应算法和循环首次适应算法 【实验目的】理解在连续分区动态的存储管理方式下,如何实现主存空间的分配与回收。【实验原理】首次适应(first fit,FF...

    3年前   
    1032    0

    数据结构和算法课程设计题目

    XX大学课程设计课程名称: 数 据 结 构 与 算 法院(部)名 称: 信息与计算科学学院组长姓名学号 同组人员姓名指导教师姓名: 设 计 时 间: 2010.6.7-...

    10个月前   
    362    0

    哲学家进餐问题操作系统课程设计报告

    XX学院 《操作系统》课程设计报告题 目: 哲学家进餐问题 班 级: 学 号: ...

    2年前   
    714    0

    操作系统课程设计报告树型目录文件系统

    操作系统课程设计报告题目:树型目录文件系统 学 院 计算机学院 专 业 网络工程 年级班别 班 学 ...

    3年前   
    531    0

    数据结构课程设计报告最小生成树Kruskal算法

    计算机科学与技术系课程设计报告 2014-2015学年第二学期课程数据结构课程设计名称Kruskal算法求最小生成树学生姓名 学号 专业班级 软件工程指导教师 2014年X月题目:设计...

    1年前   
    196    0

    操作系统实验三磁盘调度算法的实现

    XX大学计算机与通信工程学院实验报告2013 至 2014 学年 第 一 学期课程名称操作系统学号 学生姓名 年级 专业 教学班号 实验地点 实验时间 2013年 月 日 ...

    3年前   
    472    0

    操作系统课程设计动态分区分配存储管理

    操作系统课程设计设计题目 动态分区分配存储管理学生姓名号学 号指导教师专业班级计算机班 第一章 课程设计概述1.1 设计任务:动态分区分配存储管理1.2 设计要求建立描述内存...

    2年前   
    412    0

    算法与数据结构的商品货架管理课程设计报告(还有程序源代码)

    课程设计课 程: 算法与数据结构 题 目: 商品货架管理 专 业: 计算机类 班 级: ...

    1年前   
    314    0

    生产者与消费者算法模拟课程设计

    课程设计说明书题目: 生产者与消费者算法模拟 院 系: 计算机科学与工程 专业班级: 信息安全(xxxx)班 学 号: 学生...

    3年前   
    615    0

    文档贡献者

    文***品

    贡献于2020-12-12

    下载需要 2 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档