进程

多道程序在并发执行时,需要共享系统资源,从而导致各程序在执行过程中出现相互制约的关系,程序的执行表现出间断性的特征。这些特征都是在程序的执行过程中发生的,是动态的过程,而传统的程序本身是一组指令的集合,是一个静态的概念,无法描述程序在内存中的执行情况,即我们无法从程序的字面上看出它何时执行,何时停顿,也无法看出它与其它执行程序的关系,因此,程序这个静态概念已不能如实反映程序并发执行过程的特征。为了深刻描述程序动态执行过程的性质,人们引入“进程(Process)”概念。

  • 操作系统引入进程的概念的原因:

    1. 从理论角度看,是对正在运行的程序过程的抽象;

    2. 从实现角度看,是一种数据结构,目的在于清晰地刻画动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。

主要特征

  • 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
  • 并发性:任何进程都可以同其他进程一起并发执行
  • 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
  • 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
  • 结构特征:进程由程序、数据和进程控制块三部分组成。

多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。

与程序的区别:

  1. 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。

  2. 程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。

  3. 进程更能真实地描述并发,而程序不能;

  4. 进程是由进程控制块、程序段、数据段三部分组成;

  5. 进程具有创建其他进程的功能,而程序没有。

  6. 同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程。也就是说同一程序可以对应多个进程。

  7. 在传统的操作系统中,程序并不能独立运行作为资源分配和独立运行的基本单元都是进程。

进程控制块

进程控制块(Processing Control Block),是操作系统核心中一种数据结构, OS是根据PCB来对并发执行的进程进行控制和管理的。

进程控制块(PCB)中的信息

  • 进程标识符

进程标识符用于惟一地标识一个进程。一个进程通常有两种标识符:

1.外部标识符 :它由创建者提供,通常是由字母、数字组成,往往是由用户(进程)在访问该进程时使用。为了描述进程的家族关系,还应设置父进程标识及子进程标识。此外,还可设置用户标识,以指示拥有该进程的用户。

2.内部标识符 :在所有的操作系统中,都为每一个进程赋予了一个惟一的数字标识符,它通常是一个进程的序号。设置内部标识符主要是为了方便系统使用

  • 处理机状态(处理机上下文)

    处理机状态信息主要是由处理机的各种寄存器中的内容组成的。

  1. 通用寄存器
  2. 指令计数器 :存放需要访问的下一条指令地址
  3. 程序状态字 :存放程序的状态信息
  4. 用户栈指针 :存放过程以及系统调用的参数和调用地址
  • 进程调度信息
  1. 进程当前状态
  2. 进程优先级
  3. 调度所需要的其他信息:与所采用的进程调度算法有关,比如,进程已等待CPU的时间总和、进程已执行的时间总和等
  4. 事件,即进程阻塞原因
  • 进程控制信息
  1. 程序以及数据地址
  2. 进程的同步以及通讯机制:例如消息队列指针,信号量
  3. 资源清单
  4. 链接指针,指向当前PCB所在队列的下一进程的PCB首地址

进程控制块PCB的组织方式

  1. 线性表方式:不论进程的状态如何,将所有的PCB连续地存放在内存的系统区。这种方式适用于系统中进程数目不多的情况。
  2. 索引表方式:该方式是线性表方式的改进,系统按照进程的状态分别建立就绪索引表、阻塞索引表等。
  3. 链接表方式:系统按照进程的状态将进程的PCB组成队列,从而形成就绪队列、阻塞队列、运行队列等。

进程的状态分类

  • 进程的基本状态及状态转换
  1. 就绪状态(Ready):

进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。

  1. 运行状态(Running)

进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。

  1. 阻塞状态(Blocked):

由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。该事件发生前即使把处理机分配给该进程,也无法运行。阻塞是一种被动的方式,由于资源获取不到而引起的等待 。

  1. 挂起(hang-up):

    挂起是一种主动的行为,挂起是系统层面对进程做出的合理操作。挂起的标志就是换出到外存,在外存的进程无法执行,所以挂起是为了,在内存资源不足时,需要把一些进程换出到外存,给着急运行的进程腾地方,挂起倾向于换出到阻塞挂起状态的进程,也可以是就绪挂起状态的进程,只是这个转换几乎不会采用,因为在任意时刻,肯定可以找到在内存中阻塞态进程,但也不能缺少这种直接把就绪转换为挂起的能力。

    • 引起挂起状态的可能原因:

      (1)终端用户的请求。当终端用户在自己的程序运行期间发现有可疑问题时,希望暂停使自己的程序静止下来。亦即,使正在执行的进程暂停执行。我们把这种静止状态称为“挂起状态”。

      (2)父进程的请求。有时父进程希望挂起自己的某个子进程,以便考察和修改子进程,或者协调各子进程间的活动。   

      (3)负荷调节的需要。当实时系统中的工作负荷较重,已可能影响到对实时任务的控制时,可由系统把一些不重要的进程挂起,以保证系统能正常运行。

      (4)操作系统的需要。操作系统有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账。


  • 具有挂起状态的进程状态图
    • 阻塞挂起状态:进程在外存中并等待一个事件。
    • 就绪挂起状态:进程在外存中,但是只要被载入内存就可以执行。

阻塞和挂起之间的相互转换如下:

  1. 阻塞→阻塞挂起状态如果没有就绪进程,则至少一个阻塞进程被换出,为另一个没有阻塞的进程让出空间,让该进程进入就绪队列。如果操作系统确定当前正在运行的进程,或就绪进程为了维护基本的性能要求而需要更多的内存空间,那么,即使有可用的就绪态进程也可能出现这种转换。
  2. 阻塞挂起状态→就绪挂起状态如果等待的事件发生了,则处于阻塞挂起状态的进程可以转换到就绪挂起状态。注意,这要求操作系统必须能够得到挂起进程的状态信息。
  3. 就绪挂起状态→就绪如果内存中没有就绪态进程,操作系统需要调入一个进程继续执行。此外,当处于就绪挂起态的进程比处于就绪态的任何进程的优先级都要高时,也可以进行这种转换。这种情况的产生是由于操作系统设计者规定调入高优先级的进程比减少交换量更重要。
  4. 就绪→就绪挂起:通常,操作系统更倾向于挂起阻塞态进程而不是就绪态进程,因为就绪态进程可以立即执行,而阻塞态进程占用了内存空间但不能执行。但如果释放内存以得到足够空间的唯一方法是挂起一个就绪态进程,那么这种转换也是必需的。并且,如果操作系统确信高优先级的阻塞态进程很快将会就绪,那么它可能选择挂起一个低优先级的就绪态进程,而不是一个高优先级的阻塞态进程。
posted @ 2020-03-27 21:57  Hhhighway  阅读(355)  评论(0编辑  收藏  举报