首页 > 编程语言 >一句话速通银行家算法

一句话速通银行家算法

时间:2024-05-20 22:41:36浏览次数:27  
标签:话速通 request 算法 step3 进程 资源 银行家

一句话速通银行家算法:

try 分配资源, if safe() then continue;

                      else 归还资源 并且 sleep(当前任务).

好,本文结束。

hh其实并没有,接下来我将解释这句话以及银行家算法究竟是个啥。

 

ps: 银行家算法是try assign(), 而还有个锁的api是trylock(),大家可以类比着看一下。

 

银行家算法:

1. 设计目标:

  利用内核调度解决(预防)死锁问题.

2. 重要前提:

  假设知晓所有任务及它们所需的全部资源.

3. 缺陷:

  a) 上述假设基本上很难达成,仅在某些特殊场景下适用,如嵌入式开发;

  b) 银行家算法限制了并发程度,有些任务必须等到足够资源时才能运行。

 

4. 算法思路(以进程为例):

参数说明:

       Available[m] : 系统中可用资源数组,有m种资源;

       Max_Need[i][j]:进程i对第j种资源的最大需求数量, 这是个常数数组,是我们假设已经得到的;

  Allocated[i][j]:进程i已被分配第j种资源的数量;

  mayNeedmoreMax[i][j]:进程i对第j种资源最多还需要多少个,由计算得到,(mayNeedmoreMax[i][j] = Max_Need[i][j] – Allocated[i][j]);

 

算法主体(tryAssign, and check safety):

当进程i申请资源时(request[m])

  1) 判断是否 ∀ j 满足 request[j] <= mayNeedmoreMax[i][j],含义是“当前需求值”不能超过“最大可能需求值”, 为什么可以看step3;

  2) 判断是否 ∀ j 满足request[j] <= Available[j], 含义是“当前需求”是否可以被满足, 至于为什么也可以看step3;

    2.5) 若以上两个判断均通过, 则进入step3; 否则sleep当前进程;

  3) try assign, 尝试分配资源:

      i)   Available := Available – request; (数组减法, 简略写)

      ii)  mayNeedmoreMax := mayNeedmoreMax – request;

      iii) Allocated := Allocated + request;

    在step3中, 我们进行了两次数组的减法, 为了确保结果非负, 我们必须进行step1与step2的两次判断;

  4) 判断step3中的try assign是否可行/无死锁/安全,isSafe()?

    4.1) 若isSafe判断通过, 则try assign成立, 就这么分配资源就行;

    4.2) 否则归还系统资源(别忘了归还,相当于回滚状态),并sleep 当前进程。

 

下面进一步说明step4中的安全性/可行性判断函数isSafe():【本函数里发生的都是假想的,并没有真正地分配或回收资源,只是一种可行性验证】

isSafe() {

    1) 初始化:

       Work[m] := Available[m], 新建Available数组的副本

       Finished[n] := {False}, n个进程全部标记为未完成, 或者其他情况

    2) 找到一个( (!Finished[i]) && (∀j|mayNeedmoreMax[i][j]<=Work[j]) )的进程i, 翻译成人话就是:找到一个(未完成的)且(最大所需资源数小于可用资源的)进程;

      2.1) 若能找到, 则执行step3; 否则, 执行step4

    3) (我们(假装)执行完了选中的进程i, 并取回其资源)

       Work := Work + Allocated[i][], 取回进程i占有的资源,

       Finished[i] = true, 进程i(假设)执行完成,

       执行step2; (循环step2 与 step3)

    4) 如果Finished[]中全是true, 则安全性/可行性检查通过; 否则不通过。

 

其实银行家算法挺麻烦的, 而且据说不常用, 所以大概只要掌握到开篇那句tryAssign的程度, 理解算法核心思想就差不多了吧…

标签:话速通,request,算法,step3,进程,资源,银行家
From: https://www.cnblogs.com/hk416hasu/p/18202940

相关文章

  • 代码随想录算法训练营第十三天 | 239. 滑动窗口最大值 347. 前k个高频元素
    239.滑动窗口最大值题目链接文章讲解视频讲解思路:使用单调队列,来维护有可能成为最大值的元素;   当窗口向右滑动时,判断移除的元素是否是队首元素如果是的话出队;   新加入的元素依次和队尾元素作比较,如果大于队尾元素则将队尾元素循环出队,这样可以保证队列中始终维持......
  • C++算法刷题基础
    1.main函数的返回类型一定是int2.C++语言为我们准备了一组内置库,包含了很多常用的功能,并且这些内置库可以直接使用,而其中的内置库:iostream,就提供了输入和输出的功能,允许开发者从键盘读取输入并在屏幕上输出结果。3.在iostream库中,我们有两个对象可以使用,分别是cin和cout。......
  • 中国电信登录RSA算法+分析图文
    当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解中国电信登录RSA算法+分析图文日期:2016-9-30阿珏教程浏览:2727次评论:9条废话不多说!一、用到的工具1.ie浏览器(9以上......
  • 58同城的登录(RSA算法)
    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解`58同城的登录(RSA算法)日期:2016-11-23阿珏教程浏览:3631次评论:8条58同城的登录(RSA算法)这一次。又是一个精彩的登录算法解析......
  • 常见的排序算法——归并排序(四)
    本文记述了针对归并排序的3项改进和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。◆思想本文实现了《算法(第4版)》书中提到的2项改进和练习题2.2.10。对小规模子数组使用插入排序。因为递归会使小规模问题中方法的调用过于频繁,所以改进对它们的处理方法......
  • 食物识别系统Python+深度学习人工智能+TensorFlow+卷积神经网络算法模型
    一、介绍食物识别系统。该项目通过构建包含11种常见食物类别(包括'Bread','Dairyproduct','Dessert','Egg','Friedfood','Meat','Noodles-Pasta','Rice','Seafood','Soup','Vegeta......
  • 省选阶段算法学习笔记
    一、高级数据结构计划时间:5.20-5.22这个板块欠的帐不多,但是介于它板子太多了,估计复习起来比较麻烦,就三天。这个可能会提前完成。link二、进阶动态规划计划时间:5.23-5.25这个板块不但总结没写,还忘得有点厉害???所以花三天吧。三、字符串算法计划时间:5.26-5.27这个板块总结写......
  • 国密算法测试
    点击查看代码#!/usr/bin/python#encoding:utf-8importtimeimportbase64fromgmsslimportsm2,sm4importcodecsSM2_PRIVATE_KEY='00B9AB0B828FF68872F21A837FC303668428DEA11DCD1B24429D0C99E24EED83D5'SM2_PUBLIC_KEY='B9C9A6E04E9C91F7BA880429......
  • Python 实现任意多边形的最大内切圆算法_任意多边形最大内切圆算法
    CSDN搬家失败,手动导出markdown后再导入博客园参考Matlab计算轮廓内切圆初衷是为了求裂缝的最大宽度![[output/attachments/5ecf17abcb54aaa4fb35b00c3f243f32_MD5.png]]直接上代码importrandomimportcv2importmathimportnumpyasnpfromnumpy.maimportcos,......
  • 手写Word2vec算法实现
    1.语料下载:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2【中文维基百科语料】2.语料处理(1)提取数据集的文本下载的数据集无法直接使用,需要提取出文本信息。安装python库:pipinstallnumpypipinstallscipypipinstallgensimp......