操作系统精髓与设计原理(二)——进程描述和控制


现代操作系统最基础的任务就是进程管理。

什么是进程

开发操作系统是为了给应用程序提供一个方便、安全和一致的接口。

进程和进程控制块

上一章对进程的定义:

  • 一个正在执行的程序。
  • 计算机中正在运行的程序的一个实例。
  • 可以分配给处理器并由处理器执行的一个实体。
  • 由单一的顺序的执行线程、一个当前状态和一组相关的系统资源所描述的活动单元。

可以把进程当成由一组元素组成的实体,进程的连个基本的元素是程序代码和代码关联的数据集。
进程实体包括:进程控制块(PCB)、程序段、数据集。
进程可以表征为一下的元素:

  • 标识符
  • 状态
  • 优先级
  • 程序计数器
  • 内存指针
  • 上下文数据
  • io状态信息
  • 记账信息:可能包括处理器的时间总和、使用的时钟数总和、时间限制和记帐号等

前述的列表信息存在一个叫做进程控制块 的数据结构中。进程控制块包含了充分的信息,这样就可以中断一个进程的执行,并且在后来恢复执行程序时就好像进程未被中断过。

进程状态

在设计控制进程的程序时,第一步就是描述进程的状态。

两状态进程模型

运行态和未运行态。
状态变迁图

进程的创建和终止

进程的生存期都围绕着进程的创建和终止。
进程的创建:当一个新进程添加到那些正在被管理的进程集合中去时,操作系统需要建立用于管理该进程的数据结构,并在内存中给它分配地址空间。
进程派生:一个进程引发另一个进程的创建。前一个进程叫做父进程,被派生的叫做子进程
进程终止:批处理作业中包含一个Halt指令或用于终止的操作系统显式服务调度用来终止。Halt指令将产生一个中断,警告操作系统一个进程已经完成。

五状态模型

运行态、就绪态、阻塞、新建态、退出态。
五状态进程模型
新建态时,程序还保存在外存中。
对于没有优先级的方案中,可以将等待的进程放入FIFO队列中等待调度。

被挂起的进程

如果把被阻塞的进程都堆积在内存中,将耗费大量的内存空间。
进程状态模型增加一个状态:挂起态。当内存中所有的进程都处于阻塞态时,操作系统可以把其中的一个进程置于挂起态,并将他转移到磁盘中,内存中释放的空间可以被调入的另一个进程使用。
挂起态

进程描述

操作系统维护着四种不同类型的表:内存、IO、文件和进程。
操作系统用于控制进程的属性集合称为进程控制块。程序、数据、栈和属性的集合称为进程映像。
进程控制块信息分为三类:

  • 进程标识信息
  • 处理器状态信息
  • 进程控制信息

进程控制

进程创建

  1. 给新进程分配一个唯一进程标识符
  2. 给进程分配空间
  3. 初始化进程控制块
  4. 设置正确的连接
  5. 创建或扩充其他数据结构

进程切换

何时切换进程:时钟中断、IO中断、内存失效。

  1. 保存上下文,包括程序计数器和其他寄存器。
  2. 更新当前处于运行态进程的进程控制块,包括将进程状态改变的到另一状态。还必须更新同其他相关域,包括离开运行态的原因和记账信息。
  3. 将进程的进程控制块转移到相应状态的队列。
  4. 选择另一进程执行。
  5. 更新所选进程的的进程控制块,包括将状态改为运行态。
  6. 更新内存管理的数据结构。
  7. 恢复上下文。
原文地址:https://www.cnblogs.com/lippon/p/14117722.html