1、并发进程:
进程的并发性是指一组进程的执行在时间上是重叠的,所谓时间重叠是指一个进程执行第一条指令是在另一个进程执行完最后一条指令之前开始的。
进程的交互必须是有控制的,否则会出现不正确的计算结果。并发进程的无关性是进程的执行与时间无关的一个充分条件。
由于一个进程的执行速度通常无法为另一个进程所知,对于共享公共变量(资源)的并发进程来说,计算结果往往取决于这一组并发进程执行的相对速度。可能出现与时间有关的错误,一种形式是结果不唯一,如飞机票售票问题。另一种是永远等待,如主存管理问题。
2、竞争关系:
即互斥关系。操作系统必须协调进程对公共资源的争用。否则会引起两个控制问题:一是死锁,一组进程如果都获得部分资源,还想要得到其他进程锁占有的资源,最终所有进程将陷入永远等待的状态。二是饥饿,一个可运行进程由于其他进程总是优于它,而被调度程序无限期地拖延而不能被执行。
解决饥饿问题最简单的办法是FCFS资源分配策略。
3、协作关系:
进程同步是指为完成共同任务的并发进程基于某个条件来协调其活动,因为需要在某些位置上排定执行的先后次序而等待、传递信号或消息所产生的协作制约关系。
注意:进程互斥关系是一种特殊的进程同步关系,即逐次使用互斥共享资源,也是对进程使用资源的次序的一种协调。
4、互斥和临界区:
并发进程中与共享变量有关的程序段称为临界区。共享变量所代表的资源称为临界资源。
临界区的调度原则:互斥使用,有空让进;忙则等待,有限等待;择一而入,算法可行。
5、Peterson算法:
为每个进程设置标志,当标志值为false时表示此进程要求进入临界区,另外再设置一个指示器turn以指示可以由哪个进程进入临界区,当turn=i时则可由进程Pi进入临界区。
6、实现临界区管理的硬件设施:
1)关中断:
实现互斥的最简单方法是在进程进入临界区时关中断,在进程退出临界区时开中断。中断被关掉后,时钟中断也被屏蔽,因为进程上下文切换都是由中断事件引起的,这样进程的执行再也不会被打断。
2)测试并建立指令:
使用硬件所提供的“测试并建立”机器指令TS,可把其看作函数,它有布尔型参数x和返回条件码,当TS(&x)测到x值为true时则置x为false,且根据所测试到的x值形成条件码。
3)对换指令:
功能是交换两个字的内容。在Intel X86中,对换指令为XCHG,为每个临界区设置布尔型锁变量,如lock,当其值为false时表示无进程在临界区内。
7、生产者-消费者问题