OPERATING SYSTEM_Process Synchronization

OPERATING SYSTEM_Process Synchronization

复习笔记
第6章 进程同步: Process Synchronization

  1. Race Condition竞争条件:要掌握要算要写 不同的进程先执行哪条后执行哪条造成的结果不一样
    在这里插入图片描述

  2. 进入区entry、临界区critical、退出区exit、剩余区remainder
    在这里插入图片描述

  3. 临界区Critical Section:一段可能对全局变量共享的数据进行修改的一段代码

  4. 解决临界区必须要满足的三项要求
    (1) 互斥mutual exclusion:当有一个进程在临界区内执行的时候,任何其他的进程都不可以再进入临界区执行When one process in critical section, no other may be in its critical section
    (1) 前进 progress:空闲让进the selection of the processes that will enter the critical section next cannot be postponed indefinitely不会无限推迟
    (2) 有限等待 bounded waiting:一个进程从做出进入临界区选择到请求被允许的过程中,其他进程被允许进入该临界区的次数是有限的(避免进程等待时间过长)

  5. 抢占内核&非抢占内核:处理临界区问题(删减版🈚️)
    在这里插入图片描述

  6. Peterson’s Solution:
    The two processes share two variables:
     int turn; 决定谁进入临界区。如果turn==i,那么进程Pi允许在其临界区内执行。
     Boolean flag[2];表示哪一个进程做好了准备,想要进入临界区。如果flag[i]为true,即Pi想进入其临界区。,
    需要满足的条件:三个(Pi enters CS only if: either flag[j] = false or turn = i)
    在这里插入图片描述

6.硬件同步Synchronization Hardware:
(1)Protecting critical regions via locks通过锁保护临界区,避免竞争条件,一个进程在进入临界区之前必须得到🔒,退出临界区时释放🔒。
在这里插入图片描述

(2)Uniprocessors 单处理器– could disable interrupts可以禁用中断,使得目前运行的代码将不执行抢占
(3)多处理器不可🙅,但是提供了原子指令(Atomic = non-interruptible原子=不可中断),可以Either test memory word and set value检查/设定字的值,Or swap contents of two memory words交换两个字的内容
(4)互斥锁Mutex Locks / spinlock:
|||||||||||||||||||||
在这里插入图片描述

7.信号量semaphores:
信号量s是一个整数变量,>=0表示系统中当前某类资源的可用数目,<0表示系统中等待该资源的进程数。它的值只能由 P:wait()、V:signal()原语操作所改变。
在这里插入图片描述

(1)用法:
Counting semaphore – integer value can range over an unrestricted domain
计数信号量-整数值可以在不受限制的域上变化
Binary semaphore – integer value can range only between 0 and 1,mutex lock
二进制信号量-整数值只能介于0和1之间,称为互斥🔒

*** 计数信号量可以用来控制访问具有若干个实例的某种资源。该信号量初始化为可用资源的数量。当每个进程需要使用资源时,需要对该信号量执行wait()【S–】操作。当进程释放资源时,需要对该信号执行signal()【S++】操作。当S=0时,所有资源都是使用中的情况,之后,需要使用资源的进程将会被阻塞,直到S>0。
在这里插入图片描述

***可以用信号量来解决各种同步问题。如先执行P1的S1语句,然后再执行P2的S2语句,可以共享一个共同的信号量,初始化为0。
因为synch初始化=0,所以p2直有在p1调用V即S1后,才能执行S2。

(2)实现:
解决信号量的缺点:忙等待busy waiting:
1)修改wait()和signal()的定义。执行P发现信号量值不为正时,不是忙等而是阻塞自己,阻塞操作将一个进程放入到与信号量相关的等待队列中,并将该进程的状态切换成等待状态,接着,控制转到CPU调度程序,以选择另一个进程来执行,从而使CPU占用率变高。
被阻塞在等待信号S上的进程,可以在其他进程执行signal()的时候操作之后重新被执行,该进程的重新执行是通过wakeup()操作来进行:将进程从等待状态切换到就绪状态。接着进程被放到就绪队列中。

2)Block()– place the process invoking the operation on the appropriate waiting queue
将调用操作的流程放置在适当的等待队列上
Wakeup()– remove one of processes in the waiting queue and place it in the ready queue
删除等待队列中的一个进程并将其放入就绪队列
3)代码:
在这里插入图片描述

P&V新定义:🆕
唤醒等待队列中的一个

(3)死锁&饥饿Deadlock and Starvation
1)死锁–两个或多个进程无限期地等待一个事件,该事件可能仅由一个等待的进程引起
在这里插入图片描述

解释代码:假设,P0执行wait(S),接着P1执行wait(Q),P0再执行wait(Q)时,必须等待,直到P1执行signal(Q),而此时P1也在等待P0执行signal(S),两个操作都不能进行,P0和P1就死锁了。
2)饥饿–无限期阻塞indefinite blocking:进程在信号量内无限期等待⌛️
3)优先级倒置Priority Inversion–当低优先级进程持有高优先级进程所需的锁时的调度问题
通过优先级继承协议解决priority-inheritance protocol

  1. 关于同步的问题:
    Bounded-Buffer有限缓存-生产者消费者问题
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

Readers and Writers读者和作家问题
在这里插入图片描述

 Semaphore rw_mutex initialized to 1用于实现对文件的互斥访问
 Semaphore mutex initialized to 1用于对count变量的互斥访问
 Integer read_count initialized to 0记录当前有几个读进程在访问文件
 核心思想:设置了计数器count
在这里插入图片描述

在某些系统上,通过提供读写器锁reader-writer locks的内核解决了问题
Dining-Philosophers哲学家进餐问题(删减版🈚️)
————————————————————————————————————————————————
9.管程monitor:要考
(1)包含:共享变量shared data、初始化的代码initialization code、函数/操作operation
在这里插入图片描述

(2)作用:
高层抽象,为进程同步提供了方便有效的机制A high-level abstraction that provides a convenient and effective mechanism for process synchronization
抽象数据类型,内部变量只能由过程中的代码访问Abstract data type, internal variables only accessible by code within the procedure
一次只能有一个进程进入管程Only one process may be active within the monitor at a time
但功能不足以建模某些同步方案But not powerful enough to model some synchronization schemes
有效的预防了【当程序员错误地使用信号量时会产生各种类型的错误】来解决进程同步产生的一系列问题
(3)用信号量实现管程
在这里插入图片描述
在这里插入图片描述

(4)恢复进程Resuming Processes within a Monitor
If several processes queued on condition x, and x.signal() executed, which should be resumed?
*FCFS不够好
** 使用条件等待构造conditional-wait construct,形式为X.wait(c),c是priority number优先级编号。当执行x.signal()时,具有最小优先级编号的进程将继续执行。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值