操作系统笔记(三)——硬件同步机制和信号量机制

1、硬件同步进制

(1)关中断

关中断是实现互斥的最简单的方法之一。在进入锁测试之前关闭中断,直到完成锁测试并上锁之后才能打开中断。

(2)利用Test-and-Set指令实现互斥

这是一种借助一条硬件指令——测试并建立的指令来实现互斥的方法

(3)利用Swap指令实现进程互斥

该指令称为对换指令

总结:利用上述硬件指令虽然能有效实现进程互斥,但当临界资源忙碌时,其他访问进程会不断地进行测试,处于一种“忙等状态”,不符合“让权等待”的原则,造成处理机时间的浪费,同时也很难将他们用于解决复杂的进程同步问题。

2、 信号量机制

信号量机制是一种卓有成效的进程同步机制

(1)整形信号量(早期OS常用)
整型信号量与一般整型量不同,最初除初始化外,仅能通过两个标准的原子操作wait(S)和singnal(S)来访问,很长时间以来,这两个操作一直被分别称为P、V操作。这两个原子操作是不可中断的。

(2)记录型信号量

记录型信号量机制的提出是为了解决整型信号量机制 不遵循“让权等待”准则的问题。

采用记录型的数据结构

信号量的物理含义:信号量的初值S->value应该大于等于0。 S->value的初值表示系统中某类资源的数目,称为资源信号量

S->value==0说明无资源可用了

P、V操作简单来说就是

wait(S) 即P(S):表示申请一个资源

signal(S) 即V(S):表示释放一个资源

操作的优点:简单,表达能力强,可以解决任何进程同步互斥问题

操作的缺点:不够安全,操作不当会造成死锁

(3)AND型信号量

前面的问题针对的是多个并发进程共享一个临界资源的情况

有些场合,一个进程往往需要获得两个或更多的共享资源后方能完成任务

基本思想是:将进程在整个运行过程中需要的所有资源,一次性、全部地分配给进程,待进程使用完后再一起释放。只要尚有 一个资源未能分配给进程,其它所有可能为之分配的资源, 也不分配给它。

(4)信号量集

在有些情况下,为确保系统的安全性,当所申请的资源数量低于某一下限值时,还必须进行管制,不予以分配。当进程申请某类临界资源时,在每次分配之前,都必须测试资源的数量,判断是否大于可分配的下限值,决定是否予以分配。

3、信号量的应用

(1)利用信号量实现进程互斥

用P、V操作解决进程间的互斥问题

需要注意的地方:

  1. wait,signal必须成对出现
  2. 但wait、signal不一定在一个进程中

(2)利用信号量来描述前驱关系

设有两个并发执行的进程P1和P2

 如图所示,那么每个进程在这段时间并发执行的操作为

p1(){S1;signal(a);signal(b);}  

p2(){  wait(a);S2;signal(c);signal(d);}  

p3(){wait(b);S3;signal(e);}  

p4(){wait( c );S4;signal(f);}  

p5(){wait(d);S5;signal(g);}  

p6(){wait(e);wait(f);wait(g);S6;}

 4、管程机制

信号量机制的不足:每个要访问临界资源的进程必须自备 同步操作wait(s)和signal(s)

管程机制是另一种进程同步机制

定义:系统中的各种硬件资源和软件资源均可用数据结构抽象地描述其资源特性,即用少量信息和对该资源所执行的操作来表征该资源,而忽略他们的内部结构和实现细节。

因此可以利用共享数据结构抽象地表示系统中的共享资源,并且将对该共享数据结构实施的特定操作定义为一组过程。

进程对共享资源的申请释放和其他操作必须通过这组过程,间接地对共享数据结构实现操作,对于请求访问共享资源的诸多并发进程,可以根据资源的情况或阻塞,确保每次仅有一个进程进入管程,执行这组过程,使用共享资源,达到对共享资源所有访问的统一管理,有效地实现进程互斥。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值