Fork me on GitHub

进程同步

什么是进程同步?列举两个生活中的进程同步的实例,详细说明同步的过程。

在多道程序环境下,进程是并发进行的,不同进程之间存在着不同的相互制约关系,这就叫进程同步。
例一:理发师-顾客问题
在一个理发店里有一个理发师,一个理发椅和N个沙发,理发椅是一个临界资源,沙发相当于等待队列。当一个顾客进入理发店占用理发椅时,其他顾客必须在沙发上等待。理发师和顾客必须保持同步,既不允许理发师在没有顾客时理发,也不允许顾客在理发椅被占用时理发。
例二:厨师-食堂问题
在一个饭店里有一个厨师,一个桌子和N个椅子,桌子是一个临界资源。当一个食客进入饭店占用桌子时,假设桌子已满,其他食客必须等待。厨师和食客必须保持同步,既不允许厨师在没有食客时做饭,也不允许食客在桌子被占满时吃饭。

什么是记录型信号量机制?举实例说明wait操作(P操作)中当信号量值小于0和不小于0时会发生什么?signal操作(V操作)中当信号量值小于等于0和不小于等于0时会发生什么?

记录型信号量机制是在整形信号量机制的基础上增加了一个用于代表资源数目的整型变量和一个等待队列(用链表)。
实例:理发师-顾客问题
在实例中理发椅的数目就相当于资源信号量,当执行P操作时,信号量小于0时,表示资源已经分配完毕,因此进程BLOCK并插入等待队列中;信号量不小于0时(即大于等于0),表示资源还未分配完毕,因此进程继续执行。当执行V操作时,信号量小于0时,表示在等待队列中还有进程在被阻塞,因此应执行唤醒语句;信号量不小于0时(即大于等于0),等于0时,由于0是由-1变来的,所以表示等待队列中还有最后一个进程在被阻塞,因此应执行唤醒语句,大于0时说明等待队列中还没有进程在被阻塞,因此直接释放处理机即可。

解释什么是FIFO?什么是优先级高者优先调度?什么是抢占式调度和非抢占式调度?

FIFO即FIRSTINPUTFIRSTOUTPUT,就是先进先出的意思,先执行先进入的进程,该进程完成后再执行下一个进程。
优先级高者优先调度:说的是在执行若干个进程或作业的时候选取其中优先级最高的那一个先执行。
抢占式调度:这种调度方式允许调度程序根据某种原则,去暂停某个正在执行的进程,将以分配给该进程的处理机重新分配给另一个进程。此调度方法遵循一定的原则:1>优先权原则,2>短进程优先原则,3>时间片原则。
非抢占式调度:采用这种方式时,一旦处理机分配给某进程后,就让他一直运行下去,决不会因为时钟中断或任何其他原因去抢占当前正在运行程序的处理机,直至该进程完成或发生某事件而被阻塞时,才把处理机分配给别人。

设有两个优先级相同的进程P、Q,进入就绪队列的先后顺序为Q,P,各自运行的程序段如下:

P 进程P: 进程Q:
P1 Y=1; Q1 X=2;
P2 Y=Y+A; Q2 A=X+1;
P3 V(S1); Q3 P(S1);
P4 A=Y+X; Q4 X=A+Y;
P5 P(S2); Q5 V(S2);
P6 A=Y+A; Q6 A=X+A;

说明:其中S1、S2为信号量,初值为0;已知X、Y、A为共享变量,A、X、Y的初值为0,若调度程序执行的策略为FIFO(先进先出)
问题:请写出进程P、Q的实际执行序列(用代码Pi,Qi表示,i=1,…,6)及变量X、Y、A的中间值和运行结果?

1
2
A、X、Y共享变量,初值均为0,信号量S1、S2初值均为0,有两个优先级相同的进程P、Q,进入就绪队列的先后顺序为Q、P。根据先进先出的原则先进行Q操作。
答案:A=20、 X= 10、Y= 4、S1= 0、S2= 0

1

将上述问题中的“进入就绪队列的先后顺序为Q、P”改为“进入就绪队列的先后顺序为P、Q”,其它不变。

1
2
:A、X、Y共享变量,初值均为0,信号量S1、S2初值均为0,有两个优先级相同的进程P、Q,进入就绪队列的先后顺序为P、Q,根据先进先出原则先执行P操作。
答案: A= 8、X= 4、Y= 1、S1= 0、S2= 0

2

将上述问题改为“P、Q两个进程同时进入就绪队列,进程Q的优先级高于进程P”,按优先级高者优先调度,采用非抢占式调度

1
2
A、X、Y共享变量,初值均为0,信号量S1、S2初值均为0,P、Q两个进程同时进入就绪队列,进程Q的优先级高于进程P。根据优先级高者优先调度的原则先进行Q操作。
答案:A= 20、X= 10、Y= 4、S1= 0、S2= 0

3

将上述问题改为“P、Q两个进程同时进入就绪队列,进程Q的优先级高于进程P”,按优先级高者优先调度,采用抢占式调度

1
2
A、X、Y共享变量,初值均为0,信号量S1、S2初值均为0,有两个同时进入就绪队列的进程P、Q,进程Q的优先级高于进程P。根据优先级高者优先调度的原则先进行Q操作。
答案:A= 15、X= 7、Y=4、S1= 0、S2= 0

4

将上述问题改为“P、Q两个进程同时进入就绪队列,进程Q的优先级高于进程P”,按优先级高者优先调度,采用抢占式调度。

1
2
A、X、Y共享变量,初值均为0,信号量S1、S2初值均为0,有两个同时进入就绪队列的进程P、Q,进程Q的优先级高于进程P。根据优先级高者优先调度的原则先进行Q操作。
答案:A= 15、X= 7、Y=4、S1= 0、S2= 0

5

Your support will encourage me to continue to create!