《并发程序设计》目录
并发程序设计的概念
程序是实现算法的操作序列,每个程序在处理器上是严格有序的,称之为程序执行的内部顺序性。
进程的并发执行:多道程序设计让多个程序同时进入内存去竞争处理器,以获得运行机会。OS允许计算机系统在一个时间段内存在多个正在运行的进程,即允许多个程序的并发执行。OS保证按照“顺序程序设计”方法编制的程序在并发执行时不受影响,如同独占计算机。这些按照顺序程序设计思想编制的进程在OS中并发执行属于无关的并发进程。
并发程序设计:把一个具体问题求解设计成若干个可同时执行的程序模块。
并发进程的制约关系
无关与交往的并发进程
无关并发进程:一组并发进程分别在不同的变量集合上运行,一个进程的执行与其他并发进程的进展无关。
交往并发进程:一组并发进程共享某些变量,一个进程的执行可能影响其他并发进程的结果
与时间有关的错误
对于一组交往的并发进程,执行的相对速度无法相互控制,如果程序设计不当,可能出现各种“与时间有关的”错误,即结果错误,或者永远等待
进程互斥与进程同步
根据上面案例,交互的并发进程在执行时必须进程制约,才能保证得到合理的结果。
进程互斥:并发进程之间因相互争夺独占性资源而产生的竞争制约关系。
进程同步:并发进程之间,为了完成某个共同的任务,基于某个条件来协调执行先后关系而产生的协作制约关系,举例:必须完成输入进程后,才能执行计算进程。
临界区
互斥与临界区
临界资源:互斥共享变量所代表的资源,即一次只能被一个进程使用的资源
临界区:指并发进程中与互斥共享变量相关的程序段
多个进程访问临界资源时,存在竞争制约关系,如果两个进程同时停留在相关的临界区内,就会出现与时间相关的错误
临界区管理的三个要求:
①一次最多允许一个进程停留在相关的临界区内
②一个进程不能无限制地停留在临界区内
③一个进程不能无限制地等待进入临界区
临界区的嵌套使用
注意进程排序级别:级别高的,不允许申请嵌套级别低的进程,防止死锁的现象出现
临界区管理实现的尝试
临界区管理实现的硬件管理
实现临界区管理的硬件设施
以上两种方式(测试并建立指令,对换指令)均是忙式等待,效率低。
简单的解决办法是在进入临界区时开关中断
由于进程切换需要依赖中断来实现,如果屏蔽中断,则不会引起进程切换,因此为了实现对临界资源的互斥使用,可以在进程进入临界区之前关闭中断,等进程退出临界区以后在打开中断这样临界区就不会中断了,执行就有原子性
关中断 -> 临界区 -> 开中断
关中断缺点:限制交叉执行程序的能力,关中断方法不适合多CPU系统,关中断权利赋予给用户十分危险