大家可以看下我使用幕布软件画的思维导图,如果大家想使用幕布可以通过我的邀请链接注册,可免费获得一个月高级会员https://mubu.com/inv/477598

[TOC]

2.1 进程的描述

2.1.1 进程的定义和特征

2.1.1.1 进程的定义

为了能够使程序并发执行,并且可以对并发执行的程序加以描述和控制,人们引入了“进程”的概念。
为了使参与并发执行的每个程序都能独立地运行,操作系统必须为之配置一个专门的数据结构,称为进程数据块(PCB)。他用来纪录进程的各种属性,描述进程的动态变化过程。主要包含有进程的描述信息(进程标识符,进程名,用户标识符,进程组关系等)、进程控制信息(当前状态,优先级,代码执行入口地址,保存的磁盘地址等等)、所拥有的资源和使用情况(虚拟地址空间的状态,文件打开列表等)和CPU现场信息等内容。PCB是系统感知进程存在的唯一标志。
所以一般情况下,我们把进程实体就简称为进程,创建进程,实质上是创建进程实体中的PCB;撤销进程,实质上是撤销进程的PCB。
对于进程的定义,比较典型的有:

  1. 进程是程序的一次执行
  2. 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
  3. 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位

2.1.1.2 进程的特征

  1. 结构性
    进程实体是由程序段、数据段及进程控制快三部分组成。
  2. 动态性
    进程的实质是进程实体的执行过程,而且进程“由创建而产生,由调度而执行,由撤销而消亡”。
  3. 并发性
    多个进程实体同存于内存中,且能在一段时间内同时运行。
  4. 独立性
    进程实体是一个能独立运行、独立获得资源和独立接收调度的基本单位。
  5. 异步性
    进程是按异步方式运行的。

2.1.2 进程的基本状态及转换

2.1.2.1 进程的三种基本状态

进程主要分为三种基本状态:

  1. 运行态
    指进程已经获得了CPU,他正在CPU上执行。
  2. 就绪态
    指进程已经准备就绪,准备好了被CPU执行的状态。如果系统中有很多处于就绪态的进程,通常把他们按一定的策略排成一个队列,这个队列称为就绪队列。
  3. 等待态
    指正在运行的进程由于发生某事件(如I/O请求、申请缓冲区失败等问题)暂时无法继续执行时的状态。此时引起进程调度,OS把处理机分配给就绪中的进程,让受阻的进程处于阻塞状态。

2.1.2.2 三种状态的转换

三种状态的转换

2.1.2.3 创建状态和终止状态

为了满足进程控制块对数据及操作的完整性要求以及增强管理的灵活性,通常在系统中又为进程引入了两种常见的状态:创建状态和终止状态。
五种状态转换

2.1.3 进程管理中的数据结构

在最开始我已经经提到了进程控制块PCB这个东西,现在我们就进一步来了解他。

2.1.3.1 进程控制块中的作用

PCB的作用主要就是使一个在多道程序环境下不能独立运行的程序称为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。

  1. 作为独立运行基本单位的标志。
    当一个程序配置了PCB之后,就表示他已是一个能在多道程序环境下独立运行的、合法的基本单位,也就具有取得OS服务的权利。当系统创建一个新的进程的时候,就为他创建了一个PCB,进程结束后收回PCB。
  2. 能实现间断性运行方式。
    在多道程序运行环境下,由于存在时间片或者有等待I/O请求的情况,所以进程一般都是出于走走停停的状态,当一个进程被阻塞的时候,他应该有一种能保存当前运行状态的能力也就是保护现场机制,方便在此被调度执行时恢复阻塞前的状态。所以就需要在PCB里面提供一个数据结构来保存该进程被中断时的一些信息。
  3. 提供进程管理所需要的信息。
    这个就不用多说吧。
  4. 提供进程调度所需要的信息。
    只有处于就绪状态的进程才能被调度执行,而在PCB中就提供了进程处于何种状态的信息。
  5. 实现与其它进程的同步与通信。

2.1.3.2 进程控制块中的信息

根据上面进程控制块作用的描述,对应的进程控制块中就需要包含以下信息。

  1. 进程标识符
    进程标识符用于唯一地标识一个进程。一个进程通常具有两种标识符:
    1. 外部标识符
      为了方便用户(进程)对进程的访问,进程需要提供一个用于用户(进程)访问的标识符。
    2. 内部标识符
      为了方便系统对进程的使用,在OS中又为进程设置了内部标识符。通常是一个进程的序号。
  2. 处理机状态
    处理机状态信息也称为处理机的上下文,主要是由处理机的各种寄存器中的内容组成的。这些寄存器信息包括通用寄存器、指令寄存器、程序状态字PSW和用户栈指针。
  3. 进程调度信息
    在OS进行调度的时候,必须了解进程的状态及有关进程调度的信息,这些信息包括:进程状态、进程优先级、进程调度所需其他信息(与所采用的的调度算法有关)和事件(阻塞原因)。
  4. 进程控制信息
    用于进程控制所必须的信息,包括:程序和数据的地址、进程同步和通信机制、资源清单和链接指针。

2.1.3.3 进程控制块的组织方式

一个系统中有很多个PCB,为了对他们进行有效的管理,应该用适当的方式将这些PCB组织起来,常用的组织方式有三种

  1. 线性方式
    直接将所有PCB放在一张线性表中,优点是简单,开销小,但是每次查找起来很麻烦。
    linedPCB

  2. 链接方式
    把具有相同状态的PCB分别通过PCB中的链接字链接成一个队列。
    linkedPCB

  3. 索引方式
    根据所有进程状态的不同建立几张索引表,并把个索引表在内存的首地址纪录在内存的一些专用单元中。
    indexPCB

2.2 进程控制

2.2.1 进程的层次结构

在OS中,允许一个进程创建另一个进程,通常把创建进程的进程称为父进程,被创建的进程称为子进程。然后子进程可以作为父进程继续去创建子进程,进而形成一个进程家族。

2.2.2 进程的创建

每当出现了创建新进程的请求后,OS便调用进程创建原语Creat按下述步骤创建新进程:

  1. 申请空白PCB,为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB。
  2. 为新进程分配其运行所需的资源,包括各种物理和逻辑资源。
  3. 初始化进程控制块PCB。
  4. 如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列。

2.2.3 进程的终止

  1. 根据被终止进程的标识符,从PCB集合中检索出进程的PCB,从中读出该进程的状态。
  2. 若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志位真,用于指示该进程被终止后应重新进行调度。
  3. 若该进程还有子孙进程,还应将其所有子孙进程也都予以终止,以防它们称为不可控的进程。
  4. 将被终止进程所拥有的的全部资源或者归还给其父进程,或者归还给系统。
  5. 将被终止进程(PCB)从所在队列(或链表)中移出,等待其他程序来搜集信息。