进程同步与互斥

简介

进程同步是一个操作系统级别的概念,是在多道程序的环境下,存在着不同的制约关系,为了协调这种互相制约的关系,实现资源共享和进程协作,从而避免进程之间的冲突,引入了进程同步。

临界资源

在操作系统中,进程是占有资源的最小单位(线程可以访问其所在进程内的所有资源,但线程本身并不占有资源或仅仅占有一点必须资源)。但对于某些资源来说,其在同一时间只能被一个进程所占用。这些一次只能被一个进程所占用的资源就是所谓的临界资源。典型的临界资源比如物理上的打印机,或是存在硬盘或内存中被多个进程所共享的一些变量和数据等(如果这类资源不被看成临界资源加以保护,那么很有可能造成丢数据的问题)。

对于临界资源的访问,必须是互诉进行。也就是当临界资源被占用时,另一个申请临界资源的进程会被阻塞,直到其所申请的临界资源被释放。而进程内访问临界资源的代码被成为临界区。

对于临界区的访问过程分为四个部分:

  • 进入区:查看临界区是否可访问,如果可以访问,则转到步骤二,否则进程会被阻塞
  • 临界区:在临界区做操作
  • 退出区:清除临界区被占用的标志
  • 剩余区:进程与临界区不相关部分的代码

临界资源使用规则

空闲让进、忙则等待、有限等待、让权等待

  • 空闲让进:当没有进程处于临界区时,可以允许一个请求进入临界区的进程立即进入自己的临界区。
  • 忙则等待:当已有进程进入其临界区时,其他试图进入临界区的进程必须等待。
  • 有限等待:对要求访问临界资源的进程,应该保证能在有限时间内进入自己的临界区。
  • 让权等待:当进程不能进入自己的临界区时,应释放处理机。

多个进程常常需要共同修改某些共享变量、表格、文件数据库等,协作完成一些功能。共享协作带来了进程的同步和互斥、死锁、饥饿等问题。

image.png

进程同步:

进程同步也是进程之间直接的制约关系,是为完成某种任务而建立的两个或多个线程,这个线程需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系来源于他们之间的合作。

比如说进程A需要从缓冲区读取进程B产生的信息,当缓冲区为空时,进程B因为读取不到信息而被阻塞。而当进程A产生信息放入缓冲区时,进程B才会被唤醒。概念如图所示。

image.png

进程互斥:

当一个进程正在使用某资源时,其他希望使用该资源的进程必须等待,当该进程用完资源并释放后,才允许其他进程去访问此资源,我们称进程之间的这种相互制约关系为互斥。

比如进程B需要访问打印机,但此时进程A占有了打印机,进程B会被阻塞,直到进程A释放了打印机资源,进程B才可以继续执行。概念如图所示。

image.png

解决互斥问题:

软件设计法

image.png

1. 单标志法

image.png

2.双标志先检查法

image.png

3.双标志后检查法

image.png

4.Peterson算法

image.png

硬件实现方法

image.png

1.中断屏蔽方法

image.png

2.TestAndSet指令

image.png

3.Swap指令

image.png

信号量机制

image.png

image.png

1.整型信号量

image.png

2.记录型信号量

image.png

image.png

参考:

blog.csdn.net/weixin_4393…

www.cnblogs.com/niupan369/p…

www.pianshen.com/article/177…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享