操作系统【一】进程同步和信号量

基本概念

进程异步性特征:各并发执行的进程以各自独立的,不可预知的速度向前推进。

进程同步又称作直接制约关系,他是指为完成某种任务而建立的两个或者多个进程,这些进程因为需要在某些位置上协调他们的工作顺序而产生的制约关系。(源于进程需要相互合作)

但是因为进程本身的异步性,因此需要操作系统进行处理。

两种资源共享方式:互斥共享、同时共享
临界资源:一个时间段内只允许一个进程使用的资源
进程互斥:当某一个进程访问某临界资源时,另一个想要访问临界资源的进程必须等待。

  • 进入区:判断能够进入临界区,如果可以进入,则设置正在访问临界资源的标志,阻止其他进程进入临界区
  • 临界区/段:访问临界资源的代码
  • 退出区:解除正在访问临界资源的标志
  • 剩余区:其他处理

实现进程互斥应该遵循的原则:

  • 空闲让进:临界区空闲时可以允许一个进程进入临界区
  • 忙则等待:如果已经有进程进入临界区则其他试图进入临界区的进程必须等待
  • 优先等待:对于请求访问的进程,应该保证能在有限时间内进入临界区(保证不会饥饿)
  • 让权等待:如果进程不能进入临界区,应该立即释放处理机,防止进程忙等待

实现进程互斥的软件实现

单标志法

每个进程进入临界区的权限只能被另一个进程赋予

操作系统【一】进程同步和信号量对数组的访问因为进程的异步性有可能导致违反忙则等待原则

双标志后检查法

操作系统【一】进程同步和信号量
违背让权等待的原则,可能需要“忙等”。但是比前面几种方法好。

进程互斥的硬件实现

中断屏蔽方法

利用“开/关中断指令”实现。即在某进程开始访问临界区到结束访问为止都不允许被中断,也就不能发生进程切换,因此也不可能发生两个同时访问临界区的情况。

优点:简单、高效
缺点:不适用多处理机;只适用操作系统内核进程,不适用于用户进程(因为开/关中断指令只能运行在内核态)

TestAndSet指令(TS)

也叫做TestAndSetLock(TSL)

操作系统【一】进程同步和信号量优点:实现简单,适合多机系统
缺点:不满足让权等待

信号量机制

信号量其实就是一个变量,可以用一个信号量来表示系统中某种资源的数量4
原语:一种特殊的程序段,其执行只能一气呵成,不可被中断。(用来解决检查和上锁无法一气呵成的问题)

信号量S
Wait(S) P操作
Signal(S) V操作

整型信号量

对信号量的操作只能有三种,初始化、P、V

操作系统【一】进程同步和信号量
S.value<0时表示该类资源已经分配远比,因此该进程自我阻塞。

当进行V操作发现S.value<=0时,表示在将这个资源还给系统之前有进程在阻塞等待资源,因此唤醒一个进程。

满足进程互斥的所有原则

信号量机制实现进程互斥

操作系统【一】进程同步和信号量

生产者-消费者问题

系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并适用。

生产者、消费者共享一个初始为空、大小为n的缓冲区

对临界资源的访问必须互斥访问,缓冲区也是一种临界资源(否则多个进程同时向缓冲区写入数据可能造成数据的覆盖)

PV操作题目分析:

  • 关系分析,找出题目中描述的各个进程,分析他们之间的同步、互斥关系
  • 确定P、V操作的大体顺序:因为生产者每次要消耗一个空闲缓冲区,并且生产一个产品。消费者每次要消耗一个产品,并释放一个空闲缓冲区。
  • 设置信号量

操作系统【一】进程同步和信号量

当缓冲区资源只为1的时候我们有可能可以不专门设置访问缓冲区的互斥信号量。不过出于良好的习惯我们还是在访问缓冲区的时候专门加上互斥信号量。需要注意的是对互斥信号量的P操作一定要在进程同步的P操作之后,否则会引起死锁。

我们在分析的时候理解为事件的行为(对资源的占用等等),而不是进程之间的行为。

吸烟者问题

操作系统【一】进程同步和信号量

读者-写者问题

操作系统【一】进程同步和信号量

潜在的问题:只要有都进程还在读,写进程就要一直阻塞等待,可能“饿死”。因此,这种算法中读进程是优先的。

操作系统【一】进程同步和信号量
每个哲学家进程需要同时持有两个临界资源才能开始吃饭,所以需要避免资源分配不当导致死锁。
  • 最多只允许四个哲学家进餐
  • 对于奇数号的哲学家必须先拿左边的筷子,偶数号的哲学家必须先拿右边的筷子
  • 只允许一个哲学家拿筷子
    操作系统【一】进程同步和信号量

来源:月本_诚

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年3月19日
下一篇 2020年3月19日

相关推荐