博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程互斥于同步
阅读量:4316 次
发布时间:2019-06-06

本文共 2067 字,大约阅读时间需要 6 分钟。

一、理解并行和并发的关系

(一)、程序的并发执行是指一组程序的执行在时间上是重叠的,所谓时间重叠是指一个程序执行第一条指令是在另一个程序完最后一条指令之前开始的,或者说,多个程序处于都已开始但未执行完成状态。

    比如:你在吃饭的同时受到一条微信,你放下了筷子回信息,等信息回完之后你拿起筷子继续吃饭,这说明你是支持并发的。

(二)、并行是指在时间上是同步的,即“同时”。

    比如:你在吃饭的时受到一天微信消息,没有放下筷子而回微信消息,这说明你是支持并行的。

(三)、并发是指你有处理多个任务的能力,但不一定要同时;并行是指你有同时处理多个任务的能力,二者的关键在于是否同时;

    比如:你在吃饭的同时受到一条微信消息,要把饭吃完才能回消息,说明你既不支持并发又不支持并行。

二、进程间有哪几种关系?分别要采取什么策略?

(一)竞争关系。进程互斥是指若干进程因互相争夺独占资源而产生的竞争制约关系。

    比如:若干名同学去图书馆借书是间接制约,即互斥关系,其中书是临界资源。

    资源竞争会引发两个控制问题,一个是死锁,一个是饥饿。解决饥饿问题的最简单策略是FCFS资源分配策略,等待最久的进程会是下一个被调度的进程,随着时间流逝,每个进程都会有机会变成最“老”进程,因而能获得资源并完成任务。

(二)协作关系。进程同步是指为完成共同任务的并发进程给予某个条件来协调其活动,因为需要在某些位置上排定执行的先后次序而等待、传递信号或消息所产生的协作制约关系。

    比如:流水线生产的各道工序是直接制约,需要互相合作,每道工序的开始都依赖前一道工序的完成。

    进程间的协作可以是双方不知道对方的名字的间接协作,如通过访问共享资源进行松散式协作;也可以是双方知道对方名字,通过通信机制进行的紧密协作,允许进程协同工作有利于共享信息、加快计算速度、实现模块化的程序设计。

三、为什么说进程互斥也是一种同步?

               在操作系统中,当某一进程正在访问某一存储区域时,就不允许其他进程进行读写或者修改该存储区的内容,否则就会发生后果无法估计的错误。进程之间的这种相互制约的关系成为进程互斥。

并发进程在一些关键点上可能需要互相等待与互通消息,这种相互制约的等待与互通信息称为进程同步。

实际上进程互斥也是一种同步,他协调多个进程互斥进入同一个临界资源对应的临界区。

四、解释死锁与“饥饿”,并说明两者关系。

(一)死锁:死锁的产生一定是我们在为了确保同步多线程多进程的时候为临界资源加锁(互斥锁,信号量)造成的。因为一但加锁就会有不可剥夺的资源产生,这也是死锁产生的最重要的条件。

(二)死锁产生的必要条件:
    互斥(临界资源):一个资源某一时刻只能一个进程占用
    不可抢占(锁的本质):别人用着没用完你不能抢
    占有与请求:占有一个资源时候请求别的资源
    循环:在上述三个条件下,由于运行时间巧合产生死锁A占用a资源申请b阻塞住,B占有b申请a被阻塞住了。

(三)饥饿:是指系统不能保证某个进程的等待时间上界,从而使该进程长时间等待,当等待时间给进程推进和响应带来明显影响时,称发生了进程饥饿。当饥饿到一定程度的进程所赋予的任务即使完成也不再具有实际意义时称该进程被饿死。(两个以上优先级高的线程一直生产消费通过临界资源,一个线程旁边看,忙等待)

(四)相同点:二者都是由于竞争资源(未解决则会加锁)而引起的。

(五)不同点:从进程状态考虑,死锁进程都处于等待状态,忙等待(处于运行或就绪状态)的进程并非处于等待状态,但却可能被饿死;

    1、死锁进程等待永远不会被释放的资源,饿死进程等待会被释放但却不会分配给自己的资源,表现为等待时限
    2、没有上界(排队等待或忙式等待);
    3、死锁一定发生了循环等待,而饿死则不然。这也表明通过资源分配图可以检测死锁存在与否,但却不能检测是否有进程饿死;
    4、死锁一定涉及多个进程,而饥饿或被饿死的进程可能只有一个。
    5、在饥饿的情形下,系统中有至少一个进程能正常运行,只是饥饿进程得不到执行机会。而死锁则可能会最终使整个系统陷入死锁并崩溃。
五、什么是临界区?如何解决进程对临界资源的访问冲突?

(一)每个进程中访问临界资源的那段程序称为临界区(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。

(二)1、如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入;

   2、任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待;

   3、进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区;

   4、如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。

转载于:https://www.cnblogs.com/songwanli/p/10757853.html

你可能感兴趣的文章
SharePoint 2010 Warmup server script
查看>>
单变量微积分笔记6——线性近似和二阶近似
查看>>
补几天前的读书笔记
查看>>
HDU 1829/POJ 2492 A Bug's Life
查看>>
[UOJ UR#16]破坏发射台
查看>>
修改spring boot 启动logo
查看>>
《Android深度探索》第六章心得体会
查看>>
jQuery绑定键盘事件
查看>>
java中的for嵌套(一个好例子)
查看>>
MathML
查看>>
SQL 排名函数
查看>>
IIS与ApplicationPool重启检测自动化解决方案
查看>>
zabbix3.4实现邮件报警
查看>>
Xpath提取一个标签里的所有文本
查看>>
11 吐司 Toast 代码案例
查看>>
CKplayer:视频推荐和分享插件设置
查看>>
通过服务修改widgetUI
查看>>
win10连接无线网,开启移动热点,手机连接它手机一直显示获取ip地址中。
查看>>
MapReduce的倒排索引
查看>>
Heterogeneity Activity Recognition Data Set类别
查看>>