2.3.1 进程同步、进程互斥
(1)进程同步
(2)进程互斥
- “同时”指的是宏观上的同时,微观上可能这些进程是交替地在访问这些共享资源的
- 当“上锁”后,其他的进程想要访问临界资源时,在进入区进行检查就会发现此时已经有一个进程正在访问临界资源,那么其他的进程就会被阻止进入临界区访问临界资源
- 要通过打印机打印输出的话,对打印机执行写操作这段代码就需要写在临界区里
- 忙等待:这个进程暂时没办法往下推进了,但是这个进程还一直占用着处理机,使处理机一直处于忙碌的状态,没有办法给别的进程进行服务
2.3.2 实现进程互斥的软件实现方法
(1)单标志法
(2)双标志先检查法
(3)双标志后检查法
(4)Peterson 算法
- 尽管各个进程是并发运行的,但是它们对turn值的设置肯定有先后顺序,最后是谁设置了turn值,就说明最后是谁作出了“谦让”的动作,这个进程就会失去行动的优先权,它就会让对方优先进入临界区
- 如果此时进程进不了临界区,那么就应该立即释放处理机资源而不是继续在CPU上跑,但是该算法的处理方式是让进程一直被卡在while循环,其实自己还一直在CPU上执行,不断地检查while循环的条件是否满足,所以虽然这个进程此时进不了临界区,但它依然会占用CPU资源,故没有满足让权等待的原则
2.3.3 实现进程互斥的硬件实现方法
(1)中断屏蔽方法
- 关中断指令只对执行关中断指令的处理机有用
(2)TestAndSet(TS指令/TSL指令)
(3)Swap指令(XCHG指令)
2.3.4 互斥锁
2.3.5 信号量机制
(1)什么是信号量机制
(2)信号量机制—整型信号量
- 用原语来实现“检查”和“上锁”,避免了双标志先检查法那种两个进程同时进入临界区的问题
- 如果一个进程暂时进不了临界区,它会一直占用处理机循环检查从而导致忙等
(3)信号量机制—记录型信号量
- 在这种信号量当中它还会保持一个指向等待这种系统资源的等待队列,指向等待它的那些进程
- 如果减1之后导致 S.value<0,就说明它在减1之前其实已经没有这种系统资源来分配给当前申请这种资源的进程了,进程主动地执行block原语把自己阻塞,放弃处理机并且把它挂到这个信号量对应的等待队列当中
- 如果加1之后 S.value<=0,就说明在这个进程释放资源之前依然还有一些进程是处于等待队列的,所以就需要再调用wakeup原语从信号量对应的等待队列当中唤醒其中的某一个进程(一般是队头的进程),让它从阻塞态回到就绪态,并且把它所申请所等待的资源分配给它
2.3.6 用信号量实现进程互斥、同步和前驱关系
(1)实现进程互斥
(2)实现进程同步
(3)实现前驱关系
参考
操作系统笔记(王道考研)第二章 进程管理(2)CSDN:CS_Lee_
王道考研-操作系统-B站