1.互斥mutual exclusion:进程之间不会相互干扰
同步synchronization:当进程间存在依赖关系时,要有一个恰当的顺序。
2.假脱机spooling:
out指针用于打印;in指针用于存储。
如下图,在Correct情况中,不会发生错误,进程正常且正确执行;
但在Race中,进程虽然也正常执行,但是F2永远不会被打印出来(∵F2总是会被覆盖)
3.竞争条件:几个进程同时访问共享数据时,最终结果取决于执行顺序。
~解决:互斥mutual exclusion
一个进程使用共享资源时,其他进程不能使用该资源。
4.(1)临界资源critical resource:一次只允许一个进程访问硬/软件资源。
(2)临界区critical region:
①程序中访问临界资源的部分(访问临界资源的代码一定要放到临界区)
②进程使用临界区的流程:
提出申请—>若此时没有进程在临界区,则该进程可以进入临界区(否则,进入blocked)—>离开临界区时要exit解锁(否则其他进程就进不来了)
———————————③使用临界区实现互斥的条件——————————
a.同一时间不会有2个进程在临界区中
b.不能假设CPU的速度/数量
c.运行在临界区之外的进程不能阻碍其他进程(进入临界区)
d.不能让进程无限期地等待进入临界区
(例)
————————(一)mutual exclusion———————
※(Ⅰ)disabling interrupts
1.当进程进入临界区后禁止中断(∵CPU只有在发生时钟中断或其他中断时才会发生上下文切换,若禁止中断,就不会发生进程切换,也就不会被别人打扰了);
而当进程离开临界区时再打开中断(否则其他进程就不能进入临界区了)。
2.存在的问题:在多处理器系统中无用(∵禁止中断只对一个CPU有用,其他CPU执行的进程还可以打扰它)
※(Ⅱ)lock variable
1.通过锁变量实现互斥,即在进程进入临界区后将锁变量设置为1,这样其他进程就不能进入临界区了~~~相当于在进门后锁门。
2.下图解读:当进程想进入临界区时,首先循环访问lock锁变量是不是0(注:此时while循环是一个空循环)(如果是0,表示此时没有进程在临界区中,那该进程就可以进入;否则就要等到其他进程出来);进入后一定不要忘记将lock设为1(锁门)