操作系统临界区分为几个部分原理是什么
操作系统临界资源是指一次只能被一个进程所占用的资源,那么具体运行过程是怎样的呢?下面由学习啦小编为大家整理了操作系统临界资源的相关知识,希望对大家有帮助。
对于临界区的访问过程分为四个部分:
1.进入区:查看临界区是否可访问,如果可以访问,则转到步骤二,否则进程会被阻塞
2.临界区:在临界区做操作
3.退出区:清除临界区被占用的标志
4.剩余区:进程与临界区不相关部分的代码
互斥的要求:
必须强制实施互斥,即一次只允许一个进程进入临界区。一个在非临界区停止的程序不能干涉其他程序。有限等待,即决不允许需要访问临界区的进程被无限延迟的情况,即死锁或饿死,有空让进,临界区空闲时,请求程序可进,对相关进程的执行速度和处理器的速度没有任何要求和限制。一个进程驻留在临界区的时间必须是有限的。
互斥的实现:
软件的方法:由并发执行进程担任这个责任
机器指令:减少开销,但不能通用
2.补充资料:操作系统实现临界区互斥的基本方法
硬件实现方法
中断禁用
单处理器中并发进程不能重叠只能交替,一个进程一直运行到调用系统服务或被中断。保证互斥只需保证一个进程不被中断
缺点:一长时间中断禁止,中断效率会降低。二不能用于多处理结构中
专用机器指令
用于保证访问的原子性。1、比较和交换指令(compare and swap)、2、Exchange指令
机器指令方法的特点:
1、适合在单处理器或共享内存的多处理器上的任何数目的进程
2、非常简单且易于证明
3、可用于支持多个临界区,可用自己的变量定义
缺点
1、忙等待,进程等待进入临界区,仍然会继续消耗CPU的时间
2、可能饥饿,当需要等待程序进入时,某些可能被无限拒绝
3、可能死锁,低优先级的进程占用高优先级的进程所需的资源
信号量实现方法
解决并发问题基本原理
两个或多个进程可以通过简单的信号进行合作,一个进程可以被迫在某一个位置停止,直到它接到某一个特定的信号。复杂的合作需求都可以通过适当的信号结构完成。只需要一个特殊的变量(整数型):称为信号量
信号量的三个操作
1、信号量s可以初始化成非负数
用于互斥:s=1
用于同步:s>=0
2、semWait(s)进程请求分配一个资源,操作使信号量减1,若为负。进程阻塞。否则继续执行
3、semSignal(s)进程释放一个资源,操作使信号量加1,若小于或等于0.则阻塞的进程被解除阻塞
信号量的使用规则
1、semWait和seSignal必须成对出现
互斥时,位于同一进程,临界区的前后
同步时,交错出现在两个合作进程内
2、多个seWait次序不能颠倒,否则可能导致死锁
3、用于同步的semWait应出现在用于互斥的semSignal之前
4、多个semSigal次序可以任意
5、在进程对信号量减1之前无法提前知道该信号量是否会被阻塞
6、当进程对一个信号量加1后。另一个进程会被唤醒,两个进程继续并发运行
7、在向信号量发出信号后,不需要知道是否有另一个进程在正在等待,被解除阻塞的进程数量或者没有或者是1
管程实现方法
信号量为实施互斥和进程间合作提供了强大灵活的工具,但存在难点。即semWait和semSignal操作可能分布在整个程序中,很难看出整体效果,因此提出管程(Monitor),一个程序设计语言结构,可以锁定任何对象,提供与信号量相同的功能,更易于控制
使用信号的管程
定义:管程由一个或多个进程、一个初始化序列和局部数据组成的软件模块
特点:
1、局部数据变量只能被管程的过程访问,任何外部过程都不能访问
2、一个进程通过调用管程的一个过程进入管程
3、在任何时候、只能有一个进程在管程中执行,调用管程的其他任何程序都被阻塞
管程的几个要素
1、管程中的共享变量在外部不可见,只能通过管程内所说明的过程间接访问
2管程必须互斥进入:管程中的数据变量每次只能被一个进程访问,保证数据完整性
3、管程通常用来管理资源,应当没有进程等待队伍、相应的等待及唤醒
4、Q进去管程等待时,释放管程互斥权,P进入管程,唤醒Q
P等待Q继续,直到Q退出或等待
P等待Q继续,直到P退出或等待
规定唤醒为进程中最后一个操作
利