5.1进程并发执行
并发是所有问题产生的基础,并发是操作系统设计的基础。
从进程的特征出发:
- 并发:a.进程的执行是间断性的;b.进程的相对执行速度不可预测;
- 共享:进程/线程共享某些资源,使用过程中,会产生制约性;
- 不确定性:进程执行的结果与其执行的相对速度有关,是不确定的。
5.2进程互斥
竞争条件:两个或多个进程在读写某些共享数据的时候,而最后的结果取决于进程运行的精确时序。
进程互斥:由于各进程要求使用共享资源(变量、文件等),而这些资源需要排他性使用,各进程之间竞争使用这些资源,这一关系成为进程互斥。
临界资源(critical resource):系统中某些资源一次只允许一个进程使用,这样的资源成为临界资源或互斥资源或共享变量。
临界区(互斥区)(critical section):各个进程中对某个临界资源(共享变量)实施操作的程序片段。
例:当进程A在临界区中时,进程B不能进入临界区。
临界区使用原则:
- 没有进程在临界区时,想进入临界区的进程可进入;
- 不允许两个进程同时处于其临界区中;
- 临界区外运行的进程不得阻塞其他进程进入临界区;
- 不得使进程无限期等待进入临界区。
实现进程互斥的方案:
- 软件方案:Dekker解法,Peterson解法
Dekker算法:在两个进程都想进又都谦让的时候,让turn决定谁进CPU。
P: Q:
... ... ... ...
pturn=true; qturn=true;
while(qturn){ while(pturn){
if(turn==2){ if(turn==1){
pturn=false; qturn=false;
while(turn==2); while(turn==1);
pturn=true; qturn=true;
}} }}
临界区 临界区
turn=2; turn=1;
pturn=false; qturn=false;
... ... ... ...
Peterson算法——解决了互斥访问的问题,而且克服了强制轮流法的缺点,可以完全正常地工作
进程i想进入临界区时,调用enter_region(i)判断是否可以安全进入临界区,如果可以,则当前函数执行完进入临界区,调用时,使用进程号,执行完成后,调用leave_region(i);
- 硬件方案:屏蔽中断、TSL(XCHG)指令
a.“开关中断”指令:执行“关中断”指令——临界区操作——执行“开中断”指令。
特点:简单高效,代价高,限制CPU并发能力(临界区大小),不适用于多处理器,适用于操作系统本身,不适于用户进程。
b.“测试并加锁”指令。TSL指令:TEST AND SET LOCK。
c.交换指令。
5.3进程同步——协作关系
进程同步:系统中多个进程中发生的时间存在某种时序关系,需要相互合作,共同完成一项任务。具体地说,一个进程运行到某一点时,要求另一伙伴进程为他提供消息,在未获得消息之前,该进程进入阻塞态,获得消息后被唤醒进入就绪态。
5.4一种经典的进程同步机制——信号量及P\V操作
信号量:一个特殊变量,用于进程间传递信息的一个整数值。定义如下:
structure semaphore
{
int count;
queueType queue;
}
信号量说明:semaphore s;对信号量可实施的操作:初始化,p和v(P,V分别是荷兰语的test和increment)。
- P操作:
P(s)
{s.count--;
if(s.count<0)
{该进程状态置为阻塞状态;
将该进程插入相应的等待队列s.queue末尾;
重新调度;
}
}
- V操作
V(s)
{s.count++;
if(s.count<=0)
{唤醒相应等待队列s.queue中等待的一个进程;
改变其状态为就绪态,并将其插入就绪队列;
}
}
有关说明:P,V操作为原语操作。
用P,V操作解决进程间互斥问题:
- 分析并发进程的关键活动,划定临界区;
- 设置信号量mutex,初值为1;
- 在临界区前实施P(mutex)
- 在临界区之后实施V(mutex)。
5.5 用信号量解决读者 /写者问题
问题描述:多个进程共享一个数据区,这些进程分为两组:(1)读者进程:只读数据区中的数据(2)写者进程:只往数据区写数据;
要求满足条件:
- 允许多个读者同时执行读操作;
- 不允许多个写者同时操作;
- 不允许读者、写者同时操作。
解决问题时,必须要明确是哪一类读者写者问题。
第一类读者写者问题:读者优先。则
- 如果读者执行:
- 无其他读者、写者,该读者可以读;
- 若已有写者等,但有其他读者正在读,则该读者也可以读;
- 若有写者正在写,该读者必须等。
- 如果写者执行:
- 无其他读者、写者,该写者可以写;
- 若有读者正在读,该写者等待;
- 若有其他写者正在写,该写者等待。