前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >操作系统入门(三)进程间通信

操作系统入门(三)进程间通信

作者头像
看、未来
发布2020-08-25 23:33:19
5380
发布2020-08-25 23:33:19
举报

一学期的可也算是基本上完了,不知道大家学的怎样。 应朋友之约,我来总结一下这学期学的操作系统课程,方便大家复习。

进程间的相互作用

进程间的联系

-资源共享关系

-相互合作关系

同步机制应遵循的准则
代码语言:txt
复制
- 空闲让进
- 忙则等待
- 有限等待
- 让权等待
读者-写者问题

只要求读的进程称为“reader进程”,其他进程称为“writer进程”。

允许多个reader进程同时读一个共享对象,但决不允许一个writer进程和其他reader进程或writer进程同时访问共享对象

所谓读者-写者问题(The Reader-Writer Problem)是只保证一个writer进程必须与其他进程互斥地访问共享对象的同步问题

哲学家进餐问题

有五个哲学家,他们的生活方式是交替地进行思考和进餐。哲学家们共用一张圆桌,分别坐在周围的五张椅子上。在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐。进餐毕,放下筷子继续思考。

解决办法:

①至多只允许四个哲学家同时进餐,以保证至少有一个哲学家能够进餐,最终总会释放出他所使用过的两支筷子,从而可使更多的哲学家进餐。

②仅当哲学家的左、右两支筷子均可用时才允许他拿起筷子进餐。

③规定奇数号哲学家先拿他左边的筷子,然后再去拿他右边的筷子;而偶数号哲学家则相反。

管程

管程引入

为了解决信号量大量的同步操作分散,不利于管理;而且还会因同步操作的使用不当而导致系统死锁,所以引入一种新的同步工具——管程

管程的定义

一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据.

管程组成

由定义可知,管程由三部分组成

-局部于管程的共享变量说明

-对该数据结构进行操作的一组过程

-对局部于管程的数据设置初值的语句

进程通信

死锁

产生死锁的原因和必要条件

在多道程序系统中,若对资源的管理、分配和使用不当,也会产生一种危险,即在一定条件下会导致系统发生一种随机性错误——死锁。

产生死锁的原因

竞争资源

多个进程所共享的资源不足,引起它们对资源的竞争而产生死锁

-竞争可剥夺和非剥夺性资源

-竞争非剥夺性资源

进程推进顺序不当引起死锁

进程运行过程中,请求和释放资源的顺序不当,而导致进程死锁

-进程推进顺序合法

-进程推进顺序非法

产生死锁的四个必要条件

  • 互斥条件 进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占有
  • 请求和保持条件 当进程因请求资源而阻塞时,对已获得的资源保持不放
  • 不剥夺条件 进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放
  • 环路等待条件 在发生死锁时必然存在一个进程—资源的环形链

解决死锁的基本办法

  • 预防死锁 通过设置某些限制条件,以破坏产生死锁的四个必要条件中的一个或几个,来防止发生死锁。
  • 避免死锁 在资源的动态分配过程中,使用某种方法去防止系统进入不安全状态,从而避免了死锁的发生。
  • 检测死锁 检测死锁方法允许系统运行过程中发生死锁。但通过系统所设置的检测机构,可以及时检测出死锁的发生,并精确地确定与死锁有关的进程和资源,然后采取适当措施,从系统中消除所发生的死锁
  • 解除死锁 解除死锁是与检测死锁相配套的一种设施,用于将进程从死锁状态下解脱出来
预防死锁

系统要求所有进程一次性地申请其所需的全部资源,若系统有足够的资源分配给一进程时,便一次把所有其所需的资源分配给该进程,摒弃“请求”条件;在分配时只要有一种资源要求不能满足,则已有的其它资源也全部不分配给该进程,摒弃“保持”条件(静态资源分配法).

摒弃“不剥夺”条件

一个已保持了某些资源的进程,若新的资源要求不能立即得到满足,它必须释放已保持的所有资源

摒弃“环路等待”条件

将所有的资源按类型进行线性排队,并赋予不同的序号 ,所有进程对资源的请求,必须严格按资源序号递增的次序提出.

避免死锁
安全与不安全状态

所谓安全状态,是指系统能按某种进程顺序如(P1,P2,…,Pn)(称<P1,P2,…,Pn>序列为安全序列)来为每个进程分配其所需资源,直至最大需求,使每个进程都可顺利完成

不安全状态

若系统不存在这样一个安全序列,则称系统处于不安全状态

由安全状态向不安全状态的转换

如果不按照安全顺序分配资源,则系统可能由安全状态进入不安 全状态 ,可能发生死锁

银行家算法
银行家算法中的数据结构
可利用资源向量Available

是一个具有m个元素的数组,其中每一个元素代表一类 可利用的资源数目 ,如果Availablej=k,表示系统中现有Rj类资源有k个

最大需求矩阵Max

是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程,对m类资源的最大需求,如果Max(i,j)=k,表示进程i需要Rj类资源的最大数目为k

分配矩阵Allocation

一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一个进程的资源数,如果Allocation(i,j)=k,表示进程i当前已分得Rj类资源的数目为k

需求矩阵Need

是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数,如果Needi,j=k,表示进程i还需要Rj类资源k个,方能完成其任务

Need(i,j)=Max(i,j)-Allocation(i,j)

示例
检测死锁

为了检测死锁,系统必须①保存有关资源的请求和分配信息,②提供一种算法,利用这些信息来检测系统是否已进入死锁状态

资源分配图

资源分配图是由一组结点N和 一组边E所组成的一对偶G =(N,E)

结点分为两种结点:进程结点和资源结点;边表示进程和资源的请求分配关系

死锁的解除

-剥夺资源

-撤销进程

其余

未说明的部分:

进程·全家桶

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 进程间的相互作用
  • 进程间的联系
    • 同步机制应遵循的准则
      • 读者-写者问题
        • 哲学家进餐问题
        • 管程
          • 管程引入
            • 管程的定义
              • 管程组成
              • 进程通信
              • 死锁
                • 产生死锁的原因和必要条件
                  • 产生死锁的原因
                    • 竞争资源
                    • 进程推进顺序不当引起死锁
                  • 产生死锁的四个必要条件
                    • 解决死锁的基本办法
                      • 预防死锁
                      • 避免死锁
                      • 银行家算法
                      • 检测死锁
                      • 死锁的解除
                  • 其余
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档