第二章 进程管理

程序顺序执行的特征:顺序性,封闭性,可再现性。

前趋图:是一个有向无循环图,DAG,用于描述进程之间执行的前后关系。
    
进程的实体:由程序段、相关的数据段和进程控制块PCB构成。
创建和撤消进程都是指:创建或撤消进程中的PCB
    进程具有:动态性、并发性、独立性和异步性的特征。
    
进程是:进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
    进程的三种基本状态是:就绪状态、执行状态和阻塞状态(等待状态)。(见P312-5
    系统根据PCB控制进程,PCB:是进程存在的唯一标志。PCB常驻内存,系统将所有PCB组织成若干链表(或队列),存放在操作系统专门开辟的PCB区内。
    进程控制块PCB主要包括四方面的信息:进程标识符(内部标识符和外部标识符),处理机状态(一些寄存器中断时的信息),进程调度信息,进程控制信息。
   
进程控制块的组织方式通常有:链接方式(指针链接)和索引方式(索引表)两种。
    PCB中都设置了:家族关系表项,以标明自己的父进程及所有的子进程。
    进程创建进程的典型事件可分为四类:用户登录,作业调度,提供服务,应用请求。
   
进程创建步骤1申请空白PCB2分配资源,3初始化PCB4插入就绪队列。
    初始化进程控制块包括:初始化标识信息;初始化处理机状态信息;初始化处理机控制信息。
    引起进程终止的事件有:正常结束,异常结束,外界干预。
    进程终止步骤:1根据被终止进程的标识符,在PCB集合中检索出该进程的PCB,读取其状态,2若处于执行状态,立即终止,置调度标志为真,用于指示该进程被终止后应重新进行调度,3如果有的话,终止所有子进程,4将被终止进程拥有的全部资源归还其父进程或系统,5将被终止进程PCB从所在队列(或链表)中移出,等待其他程序来搜集信息。
    引起进程阻塞或唤醒的条件:请求系统服务,启动某种操作,新数据未到,无新工作做。
    进程阻塞过程:调用阻塞原语block把自己阻塞,如在执行状态,立即停止执行,修改PCB中状态为阻塞PCB插入阻塞队列。转调度程序将CPU重新调度给另一就绪进程。
    进程唤醒过程:调用唤醒原语wakeup,将被阻塞的进程从等待该事件的阻塞队列中移出,将PCB中状态改为就绪,将PCB插入到就绪队列中去。
进程挂起过程:调用挂起原语suspend,如进程为活动就绪状态就改为静止就绪,如活动阻塞状态就改为静止阻塞,如进程正在执行就转向调度程序重新调度。
进程激活过程:调用激活原语active,先将进程从外存调入内存,如进程为静止就绪就改为活动就绪,如静止阻塞就改为活动阻塞,判定新就绪的进程的优先级是否能抢夺CPU
    进程之间包括:互斥和同步两种关系。
    进程同步的主要任务:是使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。
    临界区CScritical section)是指:每个进程中访问临界资源的那段代码。
临界区前面用于检查是否能访问临界资源的代码叫进入区,后面加上一段代码退出区用于恢复标志,其余的代码部分叫做剩余区。
    进程同步可以采用:信号量机制和管程机制。
    同步机制遵循的原则:空闲让进,忙则等待,有限等待,让权等待。
    记录型信号量:采用wait(S)signal(S)来防止类似整型信号量会导致的忙等。
    AND型信号量采用:Swait(S1,S2,…Sn)Ssignal(S1,S2,…Sn)来防止死锁。
    信号量集用:SwaitS,t,d)表示,S为信号量,t为下限值,d为需求值。
       例子:利用信号量实现前趋关系。(P45,图2-10
       例子:利用记录型信号量解决生产者-消费者等问题。(P46
    一个管程定义了:一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据。
    管程由三部分组成:局部于管程的共享变量说明;对该数据结构进行操作的一组过程;对局部于管程的设置初始值的语句。
   
例子:利用管程解决生产者-消费者问题。(P52
    进程通信包括:低级通信(进程之间的互斥和同步)和高级通信(共享存储器系统,消息传递系统以及管道通信系统),又可分为直接通信(通信原语)和间接通信(信箱)。
    高级进程通信:是指用户可直接利用操作系统所提供的一组通信命令,高效的传送大量数据的一种通信方式。可归结为三大类:共享存储系统、消息传递系统以及管道通信系统。
    管道通信具有三方面的协调能力:互斥,同步,确定对方是否存在。
进程通信可分为直接通信方式和间接通信方式。

   
直接通信方式指:利用OS提供的发送命令,直接把消息发送给目标进程。通常系统提供两条通信命令(原语):SendReceive,Message)和ReceiveSender,Message)。
    间接通信方式指:进程之间的通信需要通过作为共享数据结构的实体,通常称之为信箱。
    信箱可分为:私用信箱(单向通信链路的信箱),公用信箱(双向通信链路的信箱)和共享信箱。拥有私用信箱的进程结束时,信箱随之消失。公用信箱在系统运行期间始终存在。
    公用信箱和共享信箱的区别在于:公用信箱是由操作系统创建,并提供给系统中的所有核准进程使用的。而共享信箱是由某进程创建给它和其他指定共享进程使用的。
    两种方式建立一条通信链路:用显式的建立连接命令原语请求系统为之建立(常用于计算机网络中);利用发送命令原语,系统自动为之建立(常用于单机系统中)。
    通信链路可分为:点对点连接通信链路和多点连接链路;单向通信链路和双向链路;无容量通信链路(无缓冲区)和有容量通信链路(有缓冲区)。
消息分为消息头(控制信息)和消息正文(实际上发送的数据)。
    进程同步方式有:1发送进程阻塞,接收进程阻塞(又称为汇合)2发送进程不阻塞,接收进程阻塞3发送进程接收进程都不阻塞。
   
消息缓冲队列通信机制及其中的发送原语和接收原语。(P59
    在操作系统中引入线程:是为了减少程序在并发执行所付出的时控开销,使操作系统具有更好的并发性。
    在多线程OS中,通常是:在一个进程中包含多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。
    线程具有以下属性:轻型实体,独立调度和分派的基本单位,可并发执行,共享进程资源。
   
线程的状态:状态参数和运行状态(也有执行状态,就绪状态,阻塞状态)
线程被中止后并不立即释放它所占有的资源,只有当进程中的其它线程执行了分离函数后,被终止的线程才与资源分离,此时的资源才能被其他线程利用。
    多线程OS中的进程:进程仍是系统分配资源的基本单位,每个进程都含有多个相对独立的线程,进程不是一个可执行的实体,而是把线程作为独立运行的基本单位。所谓进程处于执行状态,实际上是指该进程中的某线程正在执行。把某个进程挂起或激活,该进程的所有线程也都被挂起或激活。
    
线程同步和通信机制有:互斥锁,条件变量,信号量机制。
    互斥锁适合于:高频度使用的关键共享数据和程序段,关锁lock和开锁unlock操作mutex
    每个条件变量通常都和一个互斥锁一起使用,线程首先对mutex执行关锁操作,若成功便进入临界区,然后查找用于描述该资源状态的数据结构,以了解资源的情况。只要发现所需资源R正处于忙碌状态,线程便转为等待状态,并对mutex执行开锁操作后,等待资源被释放;若资源处于空闲状态,表明线程可以使用该资源,于是将该资源设置为忙碌状态,再对mutex执行开锁操作。
    线程的实现方式有:用户级线程和内核支持线程。
    内核支持线程是:无论是用户进程中的线程还是系统进程中的线程,他们的创建、撤消和切换等,都是依靠内核实现的。此外,内核空间中还每个线程设置了一个线程控制块。
   
用户级线程仅存在于用户空间中。这种线程的创建、撤消、同步等都无须利用系统调用来实现。所以线程的切换速度特别快。内核完全不知道用户级线程的存在。
    用户级线程的调度以:进程为单位,而内核支持线程的调度以线程为单位。
    用户级线程的实现可分为:运行时系统和内核控制线程。