4.2.4 进程同步机制
操作系统提供了进程同步机制来管理进程同步与互斥。对于进程互斥的管理准则是“空闲让进,忙则等待,让权等待,有限等待”,保证互斥进程能够正确使用临界资源,提高资源利用率和系统性能。对于进程同步的管理准则是保证相互协作进程在执行次序上的正确性。
1.解决进程互斥的机制
(1)硬件设施
采用“关中断”以及设计专用的机器指令,如“测试并设置”和“交换指令”等硬件措施来保证互斥性。方法简单、有效,但采用“忙等待”浪费了CPU时间。此外,存在进程“饥饿”现象和死锁情况。
(2)软件算法
临界区的管理采用标志方式,使用标志表示某个进程可进入临界区。算法复杂,效率低下。算法设计中采用忙等待方式。
无论采用硬件还是软件的方法,都是针对单CPU或共享内存的多处理机系统设计的方法,实现存储器访问中的互斥要求。但存在CPU时间的大量消耗。此外,进程本身承担检测是否可以进入临界区的任务,降低了系统的可靠性,增加了编程负担。
2.信号量机制
1965年荷兰计算机科学家Dijkstra提出,使多个进程通过一个特殊变量(即信号量)展开交互。一个进程在某个时刻被迫停止执行,直到接收到一个特定的信号量。如果进程相应的信号量没被送到,那么进程将被挂起直到信号量到达为止。
信号量机制中的关键问题是:
·设置什么样的信号量。
·提供哪些将被进程调用的针对信号量的标准操作。
·如何调用标准操作。
3.管程机制
将信号量和P、V操作原语封装在一个对象中,起源于Dijkstra于1971年提出的“秘书”程序:把所有进程对某一种临界资源的同步操作都集中起来,构成一个所谓的秘书进程。“秘书”每次只让一个进程来访。
管程是一种软件模块,它内部提供一种互斥机制,进程可以互斥地调用管程中的过程。管程可作为程序设计语言一个成分,因此管程的互斥访问完全由编译程序在编译时自动添加上,无需程序员关心,而且保证正确。管程还通过条件变量提供了同步机制。