操作系统课设-银行家算法VS2022

目录

1 目的和要求

2 银行家算法的数据结构

3 进程请求时的资源处理

4 安全性算法的设计思路

5 调试与分析

6 C语言源代码

7 心得体会


1 目的和要求

银行家算法是避免死锁的一种重要方法,能够有效的在资源分配的过程中,对系统的安全性进行检测。通过银行家算法设计与实现,可以加深对死锁的理解,掌握死锁的预防、避免、检测和解除的基本原理,重点掌握死锁的避免方法━银行家算法。初步具有研究、设计、编制和调试操作系统模块的能力。

能够考虑社会、健康、安全、法律、文化及环境等因素的影响,针对银行家算法避免死锁进行建模,设计实验方案,运用恰当的集成开发工具编程模拟实现上述算法。

对程序要求:

  1. 有录入界面,动态录入进程个数、资源种类数、诸进程对各类资源的最大需求、TO时刻系统为诸进程已分配的资源数以及系统中各类资源的资源总数;
  2. 能够判断TO时刻系统是否安全,进程之间能否无死锁的运行下去,若能输出安全序列;
  3. 有输出界面,能够从录入界面模拟进程又提出新的申请,根据银行家算法判断请求是否能得到满足,并输出当前时刻下诸进程对各类资源的需求列表及系统可用资源数,若能输出安全序列,若不能分配输出无法分配的原因;

对报告要求:

  1. 报告要体现算法设计和分析的能力,要体现建模及算法设计与实现的过程,形成设计文档;
  2. 要对各种资源请求情况的运行结果截图并分析实验数据,分析产生不同结果的原因,得出有效结论;
  3. 对本次设计进行总结,遇到什么问题、是如何解决的?总结实验仿真的局限性,指出实验设计方案的完善方向;
  4. 报告要体现科技强国的核心价值观,科技报国的家国情怀和使命担当。具有探索未知、追求真理、勇攀科学高峰的科学精神以及以改革创新为核心的时代精神。

2 银行家算法的数据结构

可用资源向量Available [m]

m为系统中资源种类数,Available[j]=k表示系统中第j类资源数为k个。

最大需求矩阵Max[n][m]

n为系统中进程数,Max[i][j=表示进程i对j类资源的最大需求数为k。

分配矩阵Allocation[n][m]

Allocation[i][j]=k表示进程i已分得j类资源的数目为k个。

需求矩阵Need[n][m]

Need[i][j]=k 表示进程i还需要j类资源k个。

Need[i][j]=Max[i][j]-Allocation[i][j]

3 进程请求时的资源处理

假设在进程并发执行时进程i提出请求j类资源k个后,表示为Request,[j]=k,系统按下述步骤进行安全检查:

如果Request,≤Need;则继续以下检查,否则显示需求申请超出最大需求值的错误。

〉如果Request,≤Available则继续以下检查,否则显示系统无足够资源,P;阻塞

等待。

系统试探把要求的资源分配给进程i并修改有关数据结构的值:

Available = Available-Request, ;

Allocation;=Allocation; +Request; ;Need;=Need,-Request;;

系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态,若安全,才正式将资源分配给进程i,以完成本次分配;否则将试探分配作废,恢复原来的资源分配状态,让进程P;等待。

4 安全性算法的设计思路

安全性算法

A.设置完成标志向量Finish[n]。

初始化:Finish[i] = false表示i进程尚末完成

B.从进程集合n设置Work[m]表示系统可提供给进程的各类资源数目。初始化:

Work = Available,

中找到一个能满足下述二个条件:Finish[i] = false , Need;≤Work如找到则执行步骤C,找不到则执行步骤D

C.当进程i获得资源后可顺利执行直到完成,并释放出分配给它的资源,表示如下:

work = work+Allocation; ; Finish[i]=true ;转执行步骤B。

D.如果所有的Finish[i]=ture,则表示系统处于安全状态,否则系统处于不安全状态。

5 调试与分析

1.资源的初始分配(图1)

图1

2.尝试给P0分配资源2,2,提示请求资源数大于可利用资源数(图2)

图2

3.尝试给P0分配资源3,2提示请求资源数大于所需资源数(图3)

图3

4.尝试给P0分配资源0,0,提示不安全撤销了分配(图4)

图4

5.尝试给P2分配资源1,1,提示安全,可利用资源和对应进程的资源需求随即发生更新(图5.1)(图5.2)

图5.1

图5.2

6.继续给P2分配资源2,0,进程达到需求结束后释放资源(图6.1)(图6.2)

图6.1

图6.2

7.给P1分配资源2,2,进程达到需求结束后释放资源(图7.1)(图7.2)

图7.1

图7.2

8.给P0分配资源2,2,进程达到需求结束后释放资源(图8.1)(图8.2)

图8.1

图8.2

6 C语言源代码

安全性算法

int safety(int m, int n)//m进程数,n资源种类数
{
    int i, j, k, l, flag;
    int safe[MAX] = { 0 };//安全序列
    int count = 0; //安全序列个数
    for (i = 0; i < m; i++) {
        finish[i] = 0; //初始化完成标志 
        work[i] = available[i]; //可利用资源量初始化 
    }
    while (1)
    {
        flag = 0; //完成标志
        for (j = 0; j < m; j++) {
            if (finish[j] == 0) //未完成进程
            {
                for (k = 0; k < n; k++)
                {
                    if (need[j][k] > work[k]) //判断资源是否满足 
                        break;
                }
                if (k == n) //资源满足
                {
                    for (l = 0; l < n; l++)
                        work[l] += allocation[j][l];//更新可利用资源量

                    safe[count] = j; //加入安全序列
                    count++;
                    finish[j] = 1; //更新完成标志 
                    flag = 1;

                    //更新完成标志
                }
            }
        } if (flag == 0) //无进程可运行 
            break;
    } if (count == m) //进程完成 
    {
        printf("安全序列为:");
        for (i = 0; i < m; i++)

            printf("P%d ", safe[i]);
        printf("\n安全\n");
        return 1;
    }
    else //不安全
    {
        printf("不安全\n");
        return 0;
    }
}

请求资源 

int requestResource(int p, int m, int n)//m进程数,n资源种类数
{
    int i, j, k; //判断请求资源是否满足 
    for (i = 0; i < n; i++)
    {
        if (request[i] > need[p][i])
        {
            printf("请求资源数大于所需资源数,请重新输入\n");
            return 0;
        }
    } //判断请求资源是否满足
    for (j = 0; j < n; j++)
    {
        if (request[j] > available[j])
        {
            printf("请求资源数大于可利用资源数,请重新输入\n");
            return 0;
        }
    } //满足请求 
    if (safety(m, n) == 1)
    {
        for (k = 0; k < n; k++)
        {
            available[k] -= request[k]; //更新可利用资源量
            allocation[p][k] += request[k]; //更新分配矩阵
            need[p][k] -= request[k]; //更新需求矩阵 }

        }
    }
    if (safety(m, n) != 1) //安全性算法撤销操作
    {
        for (k = 0; k < n; k++)
        {
            available[k] += request[k]; //更新可利用资源量 
            allocation[p][k] -= request[k]; //更新分配矩阵
            need[p][k] += request[k]; //更新需求矩阵 }
        }
        printf("已撤销操作\n");
    }


}

7 心得体会

这次课设是以银行家算法来进行,通过互联网上的相关渠道,了解了银行家算法是避免死锁作为一种事先预防死锁的策略,原理是在为各个进程分配资源的过程中不允许系统进去不安全状态,以此来避免死锁的发生。所谓安全状态,是指系统能按某种进程推进顺序为每个进程分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可以顺利地完成。此时称该进程推进序列为安全序列,如果无法找到这样一个安全序列,则称系统处于不安全状态。

为了实现银行家算法,在系统中必须设置这样四个数据结构,分别用来描述系统中可利用的资源,所有进程对资源的最大需求,系统中的资源分配以及所有进程还需要多少资源的情况。当一个进程发出请求资源的请求后,如果它所请求的资源大于目前系统可利用资源则不予分配。如果小于可利用资源,则系统试探着把资源分配给该进程,并修改分配之后的资源数值。接着系统执行安全算法,检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给该进程,以完成本次分配。否则,将本次的试探分配作废,恢复原来的资源分配状态,让该进程等待。过程中遇到了许多问题,例如回收资源的代码如何实现,通过和同学们的讨论与互联网上相关内容的查询最终解决了问题。这次课设让我对操作系统的避免死锁这一概念的理解更加深入,学到了很多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/258961.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

搭建自动化 Web 页面性能检测系统 —— 设计篇

页面性能对于用户体验、用户留存有着重要影响&#xff0c;当页面加载时间过长时&#xff0c;往往会伴随着一部分用户的流失&#xff0c;也会带来一些用户差评。性能的优劣往往是同类产品中胜出的影响因素&#xff0c;也是一个网站口碑的重要评判标准。 一、名称解释 前端监控…

猫罐头哪个牌子好性价比高?五大性价比高的品牌推荐

很多猫奴担心猫咪天天吃干猫粮可能会导致营养不足&#xff0c;所以想给猫咪换换口味&#xff0c;改善一下饮食。这时&#xff0c;选择猫罐头是个不错的选择。不过&#xff0c;喂猫罐头也是有一些讲究的。 作为从业6年的宠物护理师来说&#xff0c;作为早在几年就开始接触猫罐头…

AI工具网站汇总——学习的好帮手

一、聊天AI 1.ChatGPT 地表最强AI聊天机器人 网址&#xff1a;https://chat.openai.com 2.Anthropic Anthropic发布的与ChatGPT竞争的聊天机器人 网址&#xff1a;https://www.anthropic.com 3.文心一言 百度全新知识增强大语言模型&#xff01;国产聊天机器人 网址&…

2023大湾区汽车创新大会暨IEEE自动驾驶国际标准研讨会成功举办

2023年12月15日-12月16日&#xff0c;由IEEE ADWG工作组主席孙栋博士、杨子江博士共同主持的2023大湾区汽车创新大会平行主题论坛-IEEE自动驾驶国际标准研讨会在深圳坪山成功举办。图灵奖获得者Joseph Sifakis、英伟达仿真生态总监German Ros、ASAM标准组织CEO Marius Dupuis、…

Seata:打造行业首个分布式事务产品

作者&#xff1a;季敏&#xff0c;阿里云分布式事务产品负责人、Seata 开源项目创始人 微服务架构下数据一致性的挑战 微服务开发的痛点 在 2019 年&#xff0c;我们基于 Dubbo Ecosystem Meetup&#xff0c;收集了 2000 多份关于“在微服务架构&#xff0c;哪些核心问题是开…

边缘计算有哪些常用场景?TSINGSEE边缘AI视频分析技术行业解决方案

随着ChatGPT生成式人工智能的爆发&#xff0c;AI技术在业界又掀起一波新浪潮。值得关注的是&#xff0c;边缘AI智能也在AI人工智能技术进步的基础上得到了快速发展。IDC跟踪报告数据显示&#xff0c;2021年我国的边缘计算服务器整体市场规模达到33.1亿美元&#xff0c;预计2020…

NFS原理详解

一、NFS介绍 1&#xff09;什么是NFS 它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。 NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。 在本地的NFS客户端的机器看来&#xff0c;NFS服务器端共享的目录就好像自己的磁…

耿明雨履新并担任名誉台长

据悉&#xff0c;近日&#xff1a;经美国科罗拉多州国务卿审批&#xff0c;中国大陆知名人士、媒体人、慈善家耿明雨先生获科罗拉多州办公室证书批复&#xff0c;担任中国驻美国中央国际广播电视总台名誉台长、集团董事。

C++ Qt开发:TabWidget实现多窗体功能

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍TabWidget标签组件的常用方法及灵活运用。 Q…

一行注解,省却百行代码:深度解析@RequiredArgsConstructor的妙用

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 一行注解&#xff0c;省却百行代码&#xff1a;深度解析RequiredArgsConstructor的妙用 前言RequiredArgsConstructor 简介Lombok框架简介RequiredArgsConstructor 的实现原理注解参数及使用技巧项目中…

弧形导轨的类型及应用

弧形导轨又叫圆弧形导轨&#xff0c;滚轮弧形导轨&#xff0c;是通过V型滚轮在圆弧形V型导轨面上的滚动&#xff0c;实现圆周运动&#xff1b;在工业自动化中&#xff0c;有些应用需要弧线运动&#xff0c;或者两个相交或平行的直线运动&#xff0c;这些情况需要通过弧线运动连…

Python安装及配置

一、前置说明 Python的安装有两种方式&#xff1a;1. 访问Python官方网站下载安装&#xff1b;2. 使用Python的开源发行版进行安装。 Anaconda 是一个用于科学计算、数据分析和机器学习的开源发行版&#xff0c;它包含了许多常用的科学计算和数据分析库。Anaconda 不仅仅是 P…

TongWEB安装

1.获取安装包 产品版本 安装包 绿色版 Windows: TongWeb7.0.x.x _XX_Windows.tar.gz Linux: TongWeb7.0.x.x_XX_Linux.tar.gz 安装程序版 Windows: Install_TW7.0.x.x_XX_Windows.exe Linux&#xff1a; Install_TW7.0.x.x_XX_Linux.bin 2.3 2.前提条件 TongWeb 启动前…

市域治理现代化建设方案(智慧网格解决方案):PPT全文33页,附下载

关键词&#xff1a;市域治理现代化&#xff0c;智慧网格解决方案&#xff0c;市域治理主要内容&#xff0c;市域社会治理重点内容&#xff0c;市域社会治理现代化 一、市域治理现代化背景 1、城市化进程加速&#xff1a;随着城市化进程的快速推进&#xff0c;城市人口不断增加…

Leetcode—454.四数相加II【中等】

2023每日刷题&#xff08;六十四&#xff09; Leetcode—454.四数相加II 实现代码 class Solution { public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {unordered_map&l…

宝塔nginx存放目录

文件位置 在线上服务器中&#xff0c;我们采用了宝塔面板进行管理&#xff0c;并且利用Nginx作为反向代理服务。然而&#xff0c;每个网站只能独立管理自己的Nginx配置文件&#xff0c;而在主配置文件中并未直接显现其他配置文件的详细内容。经过深入探究&#xff0c;我们了解…

vs2022开发c++,大学生成绩管理系统

附件1&#xff1a; 学 号&#xff1a; 课 程 设 计 题 目 学 院 人工智能&#xff08;计信&#xff09;学院 专 业 人工智能/智能科学与技术 班 级 学生姓名 指导教师 2023 年 12 月 29 日 一、问题描述 大学生成绩管理系统 功能…

管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜E

老老规矩&#xff0c;看目录&#xff0c;平均每年2E&#xff0c;跟2D一样&#xff0c;D是全对&#xff0c;E是全错&#xff0c;侧面也看出10道题&#xff0c;大概是3A/B&#xff0c;3C&#xff0c;2D&#xff0c;2E&#xff0c;其实还是蛮平均的。但E为1道的情况居多。 第20题…

WinDbg调试异常(!!! second chance !!!)

以前使用windbg调试样本时不时会遇到异常并提示(!!! second chance !!!),之前也尝试查找过原因但是并没有找到,一直十分郁闷。这次又出现了异常,有时间查找原因并发现了问题所在,于是记录下分析过程。 起因 在调试一个样本,每次用windbg调试都会出现: 但是使用x64dbg调…

Tomcat 部署论坛

一、安装好mysql数据库和jdk之后 开始部署论坛 用Navicat Premium 15连接mysql数据库并创建jforum数据库 下载版本 点击安装选择minninum点击下一步 点击一下一步 选择默认安装路径 安装验证&#xff0c;在安装完毕且启动Apache Tomcat&#xff0c;通过浏览器访问tomcat的80…