广场舞山海情深:进程管理机制

来源:百度文库 编辑:中财网 时间:2024/04/26 08:33:39

4.1 进程(process)的概念

现代操作系统的重要特点是程序的并发执行,及系统所拥有的资源被共享和系统的用户随机地使用。这三个特点是互相联系和互相依赖的,它们是互相独立的用户如何使用有限的计算机系统资源的反映。通常,操作系统的重要任务之一是使用户充分、有效地利用系统资源。采用一个什么样的概念,来描述计算机程序的执行过程和作为资源分配的基本单位才能充分反映操作系统的执行并发、资源共享及用户随机的特点呢?这个概念就是进程。为了讲清进程的概念,以及引入进程概念的必要性等,下面将从操作系统的特点讲起。

4.1.1 程序的并发执行

4.1.1.1 程序的顺序执行

 程序
是一个在时间上按严格次序前后相继的操作序列,是一个静态的概念。
 
一个具有独立功能的程序独占处理机直至得到最终结果的过程称为程序的顺序执行

 顺序执行的特征
 ¨         顺序性:程序顺序执行时,其执行过程可看做一系列严格按程序规定的状态转移过程,也就是每执行一条指令,系统就从上一个执行状态转移到下一个执行状态,且上一条指令的执行结束是下一条指令执行开始的充分必要条件;
 
¨         封闭性程序执行得到的结果由给定的初始条件决定,不受外界因素的影响;
 
¨         可再现性:顺序执行的最终结果可再现是说它与执行速度无关。只要输入的初始条件相同,则无论何时重复执行该程序都会得到相同的结果。

4.1.1.2 多道程序系统中程序执行环境的变化
   多道程序设计是指允许多个程序同时进入内存并运行。
   多道程序设计的根本目的是提高整个系统的效率。
   多道程序设计的特点:独立性; 随机性, 资源共享性。

  
   多道程序设计例子。

4.1.1.3 程序的并发执行 

   所谓并发执行,是为了增强计算机系统的处理能力和提高资源利用率所采取的一种同时操作技术。
  
现在的操作系统多为并发执行,具有许多新的特征。引入并发执行的目的是为了提高资源利用率。
  
   程序的并发执行可进一步分为两种:
  
第一种是多道程序系统的程序执行环境变化所引起的多道程序的并发执行。
  
第二种并发执行是在某道程序的几个程序段中(例如几个程序),包含着一部分可以同时执行或顺序颠倒执行的代码。

  (1) 并发执行的特征
 ¨         间断性:一个程序可能走到中途停下来,失去原有的时序关系;
 
¨         失去封闭性:共享资源,受其他程序的控制逻辑的影响。
 
¨         失去可再现性:失去封闭性 ->失去可再现性;外界环境在程序的两次执行期间发生变化,失去原有的可重复特征 。

  (2) 并发执行的条件:
达到封闭性和可再现性
  并发执行失去封闭性的原因是共享资源的影响,去掉这种影响就行了。1966年,由Bernstein给出并发执行的条件。
 
¨         程序 P(i) 针对共享变量的读集和写集 R(i)和W(i)
 
¨         条件:任意两个程序P(i)和P(j),有:
 
²        R(i)ÇW(j)=F;
 
²        W(i)ÇR(j)=F;
 
²        W(i)ÇW(j)=F;

  前两条保证一个程序的两次读之间数据不变化;最后一条保证写的结果不丢掉。
 (3) 并发执行产生的影响:导致资源共享和资源竞争,从而改变程序的执行速度。

并发执行与顺序执行的实例

4.1.2 进程的定义

1. 进程的定义
   一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。

2. 进程与程序的区别
 
(1) 进程是一个动态的概念,而程序则一个是静态的概念。程序是指令的有序集合,没有任何执行的含义。而进程 则强调执行过程,它动态的被创建,并被调度执行后消亡。
 (2)
进程具有并行特性,而程序没有。
 (3)
进程是竞争计算机系统资源的基本单位,从而其并行性受到系统自己的制约。这里,制约就是对进程独立性和异步性的限制。
 (4)
不同的进程可以包含同一程序,只要该程序所对应的数据集不同。

4.1.3 作业和进程的关系

作业是用户需要计算机完成某项任务时要求计算机所作工作的集合。一个作业的完成要经过作业提交作业收容作业执行作业完成四个阶段。而进程则是已提交完毕的程序的执行过程的描述,是资源分配的基本单位。其主要的区别与关系如下:

 (1) 作业是用户向计算机提交任务的任务实体。在用户向计算机提交作业之后,系统将它放入外存中的作业等待队列中等待执行,而进程则是完成用户任务的执行实体,是向系统申请分配资源的基本单位。任一进程,只要它被创建,总有相应的部分存在于内存中。

 (2) 一个作业可由多个进程组成。且必须至少由一个进程组成,但反过来不成立。

 (3) 作业的概念主要用在批处理系统中。像UNIX这样的分时系统中,则没有作业概念。而进程的概念则用在几乎所有的多道程序系统中。 

4.2 进程的描述

4.2.1 进程控制块(PCB,process control block)

  
 
  进程控制块PCB集中反映一个进程的动态特征。在进程并发执行时,由于资源共享,带来各进程之间的相互制约。显然,为了反映这些制约关系和资源共享关系,在创建一个进程时,应首先创建其PCB,然后才能根据PCB中信息对进程实施有效的管理和控制。当一个进程完成其功能时之后,系统则释放PCB,进程也随之消亡。

    进程控制块的内容包括:
  进程描述信息: 进程名或进程标识号:每个进程都有唯一的进程名或进程标识号。在识别一个进程时,进程名或进程标识号代表该进程。 用户名或用户标识号:每个进程都隶属于某个用户,用户名或用户标识号有利于资源共享与保护。 家族关系:在有的系统中,进程之间互成家族关系。

  进程控制信息:
  进程当前状态:说明进程当前处于何种状态。进程在活动期间可分为就绪态、执行态和等待状态。
  进程优先级(priority):进程优先级是选取进程占有处理机的重要依据。与进程优先级有关的PCB表项还有:占有CPU时间,进程优先级偏移,占据内存时间等。 程序  
  开始地址:程序开始地址规定该进程的程序以此地址开始执行。
  各种计时信息:给出进程占有和利用资源的有关情况。
  通信信息:通信信息用来说明该进程在执行过程中与别的进程所发生的信息交换情况。

  资源管理信息:
  占用内存大小及其管理用数据结构指针。
  在某些复杂系统中,还有对换或覆盖用的有关信息。
  共享程序段大小及起始地址。
  输入输出设备的设备号,所要传送的数据长度、缓冲区地址、缓冲区长度及所用设备的有关数据结构指针等。
  指向文件系统的指针及有关标识等。进程可使用这些信息对文件系统进行操作。

  CPU现场保护结构:寄存器值(通用、程序计数器PC、状态PSW,地址包括栈指针)

阅读资料:

1. PCB的组织方式
 PCB的组织方式将处于同一状态的进程组织在一起。 链表:同一状态的进程其PCB成一链表,多个状态对应多个不同的链表
    各状态的进程形成不同的链表:就绪链表、阻塞链表


  索引表:同一状态的进程归入一个index表(由index指向PCB),多个状态对应多个不同的index表
   各状态的进行形成不同的索引表:就绪索引表、阻塞索引表

  PCB的组织

2. 进程队列

  为了实现对进程的管理,系统将所有进程的PCB排成若干个队列,称为进程队列。
  进程队列通常系统中分成三类:就绪队列, 等待队列, 运行队列。

 
4.2.2 进程上下文
    进程上下文是进程执行活动全过程的静态描述。具体地说,进程上下文包括计算机系统中执行该进程有关地各种寄存器(例如通用寄存器、
程序计数器PC、程序状态字寄存器PS,等)的值、程序段在经过编译之后形成的机器指令代码集(或称正文段)、数据集及各种堆栈值和PCB结构。
    进程上下文的例子时UNIX系统。在UNIX System V中,进程上下文由用户级上下文、寄存器上下文以及系统级上下文组成。
用户级上下文:进程的用户地址空间(包括用户栈各层次),包括用户正文段、用户数据段和用户栈;寄存器级上下文:程序寄存器、
处理机状态寄存器PS、栈指针、通用寄存器的值;
    系统级上下文:
    静态部分(PCB和资源表格),核心栈;
动态部分:与寄存器上下文相关联的。
     如下图所示。
图  进程上下文
4.2.3 进程空间
   任一进程,都有一个自己的地址空间,把该空间称为进程空间虚空间。进程空间的大小只与处理机的位数有关。程序的执行都在进程空间内进行。
用 户程序、进程的各种控制表格等都按一定的结构排列在进程空间中。  进程空间被划分为用户空间和系统空间两大部分。


图   进程空间示例

用户程序在用户空间内执行,而操作系统内核程序则在进程的系统空间内执行。

4.3 进程状态及其转换

4.3.1 进程状态
  
一个进程的生命期可以划分为一组状态,这些状态刻划了整个进程。系统根据PCB结构中的状态值控制进程。
  
执行状态一个进程在并发执行中,由于资源共享与竞争,处于执行状态。
  
²        用户执行状态(用户态) :进程的用户程序段在执行时所处的状态。
  
²        系统执行状态(系统态或核心态):进程的系统程序段在执行时所处的状态。
       
等待状态:进程则因等待某种事件发生而处于等待状态。
       
就绪状态:进程得到了除CPU之外的其他资源,只要由调度得到处理机,便可立即投入执行。
  ²        内存就绪状态: 可以立即投入执行。
  ²        外存就绪状态: 只有先成为内存就绪状态后,才可能被调度执行。

4.3.2 进程状态转换

    进程的状态反映进程执行进程的变化。这些状态随着进程的执行和外界条件发生变化和转换。下图给出了有一个基本状态,即就绪状态、执行状态与等待状态之间的转换关系。

  图  进程状态转换

 

4.4 进程控制

   进程和处理机管理的一个重要任务是进程控制。

   进程控制,系统使用一些具有特定功能的程序段来创建、撤消进程以及完成进程各状态间的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的。一般,我们把系统态下执行的某些具有持定功能的程序段称为原语

   原语可分为两类:

 ²        机器指令级的:其特点是执行期间不允许中断,它是一个不可分割的基本单位。

 ²        功能级的:其特点是作为原语的程序段不允许并发执行。

  用于进程控制的原语有创建原语,撤消原语,阻塞原语,唤醒原语等。
 
 
4.4.1 进程的创建和撤销
 
 
1. 创建
 
  进程创建方式有以下几种:
1)由系统程序模块统一创建,例如在批处理系统中,由操作系统的作业调度程序为用作业创建相应的进程以完成用户作业所要求的功能。
2)由父进程创建,例如在层次结构的系统中,父进程创建子进程以完成并行工作。
 
  由系统统一创建的进程之间的关系是平等的,它们之间一般不存在资源继承关系。而在父进程创建的进程之间则存在隶属关系,且互相构成树型结构的。属于某个家族的一个进程可以继承其父进程所拥有的资源。另外,无论是哪一种方式创建进程,在系统生成时,都必须由操作系统创建一部分承担系统资源分配和管理工作的系统进程。
  无论是系统创建方式还是父进程创建方式,都必须调用创建原语来实现。创建原语扫描系统的PCB链表,在找到一定PCB链表之后,填入调用者提供的有关参数,最后形成代表进程的PCB结构。这些参数包括:进程名、进程优先级P0、进程正文段起始地址d0、资源清单R0等。

创建原语流图



   2. 进程撤消

 
   进程撤消
或称为“终止”,exit;或主程序返回:C中的main()。调用exit()可终止进程。
  
   以下几种情况导致进程被撤消:

 
  (1)该进程已完成所要求的功能而正常终止。
 
(2)由于某种错误导致非正常终止。
  (3)祖先进程要求撤消某个子进程。
 
  无论哪一种情况导致进程被撤消,进程都必须释放它所占用的各种资源和PCB结构本身,以利于资源的有效利用。当然,一个进程所占有的某些资源在使用结束时可能早已释放。

  另外,当一个祖先进程撤消某个子进程时,还需审查该子进程是否还有自己的子孙进程,若有的话,还需撤消其于孙进程的PCB结构和释放它们所占有的资源(为什么?)。


  撤消原语首先检查PCB进程链或进程家族,寻找所要撤消的进程是否存在。如果找到了所要撤消的进程的PCB结构,则撤消原语释放该进程所占有的资源之后,把对应的PCB结构从进程链或进程家族中摘下并返回给PCB空队列。如果被撤消的进程有自己的子进程,则撤消原语先撤消其子进程的PCB结构并释放子进程所占用的资源之后,再撤消当前进程的PCB结构和释放其资源。

             

                            图  撤消原语流图


4.4.2 进程的阻塞和唤醒

   进程的创建原语和撤消原语完成了进程从无到有,从存在到消亡的变化。被创建后的进程最初处于就绪状态,然后经调度程序选中后进入执行状态。有关进程调度部分将放在下一章中详述,这里主要介绍实现进程的执行状态到等待状态,又由等待状态到就绪状态转换的两种原语,即阻塞原语唤醒原语


      1.
       阻塞原语

 
   阻塞原语在一个进程期待某一事件(例如键盘输入数据、写盘、其它进程发来的数据等)发生,但发生条件尚不具备时,被该进程自己调用来阻塞自己。阻塞原语在阻塞一个进程时,由于该进程正处于执行状态,故应先中断处理机和保存该进程的CPU现场。然后将被阻塞进程置“阻塞”状态后插入等待队列中,再转进程调度程序选择新的就绪进程投入运行。
     
      2.
       唤醒原语

  
当等待队列中的进程所等待的事件发生时,等待该事件的所有进程都将被唤醒。显然,一个处于阻塞状态的进程不可能自己唤醒自己(为什么?)唤醒一个进程有两种方法:一种是由系统进程唤醒。另一种是由事件发生进程唤醒。当由系统进程唤醒等待进程时,系统进程统一控制事件的发生并将“事件发生”这一消息通知等待进程。从而使得该进程因等待事件已发生而进入就绪队列。等待进程也可由事件发生进唤醒。由事件发生进程唤醒时,事件发生进程和被唤醒进程之间是合作关系。因此,唤醒原语既可被系统进程调用,也可被事件发生进程调用。我们称调用唤醒原语的进程为唤醒进程。
   
    唤醒原语首先将被唤醒进程从相应的等待队列中摘下,将被唤醒进程置为就绪状态之后,送入就绪队列。在把被唤醒进程送入就绪队列之后,唤醒原语既可以返回原调用程序,也可以转向进程调度,以便让调度程序有机会选择一个合适的进程执行。