1.信号量的起源
- 1965年,荷兰学者Dijkstra提出了利用信号量机制解决进程同步问题,信号量正式成为有效的进程同步工具,现在信号量机制被广泛的用于单处理机和多处理机系统以及计算机网络中。
- 信号量可以分为以下几种
- 整型信号量(integer semaphore):信号量是整数,假设有信号量S,S大于等于零时代表可供并发进程使用的资源实体数,但S小于零时则表示正在等待使用临界区的进程数。
- 记录型信号量(record semaphore):每个信号量s除一个整数值s.value(计数)外,还有一个进程等待队列s.L,其中是阻塞在该信号量的各个进程的标识
- 二进制信号量(binary semaphore):只允许信号量取0或1值
- 每个信号量至少须记录两个信息:信号量的值和等待该信号量的进程队列。
- Dijkstra同时提出了对信号量操作的PV原语。
- P原语操作的动作是:
- (1)S减1;
- (2)若S减1后仍大于或等于零,则进程继续执行;
- (3)若S减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。
- V原语操作的动作是:
- (1)S加1;
- (2)若相加结果大于零,则进程继续执行;
- (3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。
- PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用。在PV原语执行期间不允许有中断的发生。
4.进程互斥和同步四大准则
- 为实现进程互斥,可以利用软件的方法,也可以在系统中设置专门的同步机制来协调多个进程,但是所有的同步机制应该遵循四大准则:
- 1.空闲让进 当临界资源处于空闲状态,允许一个请求进入临界区的进程立即进入临界区,从 而有效的利用资源。
- 2.忙则等待 已经有进程进入临界区时,意味着相应的临界资源正在被访问,所以其他准备进 入临界区的进程必须等待,来保证多进程互斥。
- 3.有限等待 对要求访问临界资源的进程,应该保证该进程能在有效的时间内进入临界区,防 止死等状态。
- 4.让权等待 当进程不能进入临界区,应该立即释放处理机,防止进程忙等待。
- 早期解决进程互斥问题有软件的方法和硬件的方法,如:严格轮换法,Peterson的解决方案,TSL指令,Swap指令都可以实现进程的互斥,不过它们都有一定的缺陷,这里就不一一详细说明,而后来Kijkstra提出的信号量机制则更好的解决了互斥问题。