网络中的路由和死锁
* * * * * * * * * HPM&S HPM&S 活动10 The Orange Game——网络中的路由和死锁 西安交通大学 高效能建模与仿真研究小组 2011年10 本PPT的材料改编自csunplugged.org项目 Putting computers to work-Algorithms 主要内容 橙子问题的描述 死锁概念 一般解决方案 网络路由 路由和死锁 存储转发死锁 重装死锁 结论及参考文献 活动背景 曲水流觞是中国古代很多文人雅士热衷的一种游戏。大家坐在河渠两旁,在上流放置酒杯,酒杯顺流而下,停在谁的面前,谁就取杯饮酒并作诗一首,被大家所熟知的著名典故为:永和九年,晋代有名的大书法家、会稽内史王羲之偕亲朋谢安、孙绰等42人,在兰亭修禊后,举行饮酒赋诗的“曲水流觞”活动,引为千古佳话。 死锁的根本原因是资源的竞争。在这个游戏里,酒杯和酒都可以看做资源。随着游戏的进行,酒杯会逐渐聚到下游,上游人有酒没酒杯,下游人有酒杯没酒,如果都不释放资源就形成死锁。 1. 橙子问题的描述 游戏 右图是6小孩坐成一个圆圈,他们 拥有11个橙子。将孩子和橙子做 标记,一个字母对应一个孩子、 两个橙子。初始小孩不能持有他 们对应的橙子。 目标 孩子们通过传递橙子,使每个孩 子最终持有他们相应的橙子 1. 橙子问题的描述 橙子传递规则 小孩一只手只能拿一个橙子 橙子只能经由空手传递给邻居 问题 小孩们很快就会发现,如果他们 “贪婪”(一旦得到自己的橙子 就不放手),那么该组可能永远 无法实现其目标。在该游戏中, 只有当每个人都有自己的橙子,这个问题才被真正解决。 2. 死锁概念 死锁 多个进程在执行过程中,因争 夺资源而造成的一种互相等待 的现象,若无外力作用,它们 都将无法推进下去 2. 死锁概念 多个进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去 2. 死锁概念 死锁产生的原因 系统资源不足 进程运行推进的顺序不合适 资源分配不当 死锁产生的四个必要条件 资源互斥:一个资源每次只能被一个进程使用 请求与保持:一个进程因请求资源而阻塞时,对已获得的资源 保持不释放 不可剥夺(不可抢占):进程已获得的资源,在未使用完之前,不能强行剥夺 循环等待:若干进程之间形成一种头尾相接的循环等待资源关系 3. 一般解决方案 预防 摒弃“请求和保持”条件 进程一次性地申请在整个运行过程所需的全部资源,若系统没有足够资源,则全部不分配给进程 摒弃“不可剥夺”条件 已经保持某些资源的进程,当提出新的资源要求而不能立即得到满足时,必须释放它已经保持的所有资源 3. 一般解决方案 预防 摒弃“环路等待”条件 资源按某种规则系统中的所有资源统一编号,申请时必须以上升的次序。系统要求申请进程: 对它所必须使用的且属于同一类的所有资源,必须一次申请完 在申请不同类资源时,必须按各类设备的编号依次申请 3. 一般解决方案 银行家算法(避免) 基本思想 分配资源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避免死锁的算法。 数据结构 可利用资源向量Available 最大需求矩阵Max 分配矩阵Allocation 需求矩阵Need 3. 一般解决方案 银行家算法(避免) 算法描述 设进程cusNeed提出请求REQUEST[i],则银行家算法按如下规则进行判断: (1)如果REQUEST[cusNeed][i]<=NEED[cusNeed][i],则转(2);否则,出错。 (2)如果REQUEST[cusNeed][i]<=AVAILABLE[cusNeed][i]。则转(3);否则,出错。 (3)系统试探分配资源,修改相关数据: AVAILABLE[i]-=REQUEST[cusNeed][i]; ALLOCATION[cusNeed][i]+=REQUEST[cusNeed][i]; NEED[cusNeed][i]-=REQUEST[cusNeed][i]; (4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。 3. 一般解决方案 银行家算法(避免) 安全性检查算法 (1)设置两个工作向量Work=AVAILABLE;FINISH (2)从进程集合中找到一个满足下述条件的进程, FINISH==false; NEED<=Work; 如找到,执行(3);否则,执行(4) (3)设进程获得资源,可顺利执行,直至完成,从而释放资源。 Work+=ALLOCATION;