操作系统的控制结构
操作系统为了管理进程和资源,必须掌握每个进程和资源的当前状态。
最普遍采用的一张方法是:操作系统管理并维护其管理的每个实体的信息表。大致可以分为四类:内存,i/o,文件,进程。以后的学习中将会着重对这四部分内容学习。
如上图所示,操作系统会为如上实体维护信息表,在此目前只研究进程,其余的在以后的学习会再介绍。
进程控制结构
操作系统在管理和控制进程时,首先需要知道进程的位置(它在哪),其次是进程的属性(它是谁)。
进程位置
首先需要思考一个问题:进程的物理表示是什么?
进程最少必须包括一个或一组被执行的程序,而与这些程序相关的全局变量,局部变量以及任何已定义常量的数据单元。
因此,一个进程至少需要有足够的空间来存放自己的程序和数据。
此外,程序的执行通常涉及到跟踪过程调用栈和过程间参数传递的栈。
最后,当然应该还要有与之相关的进程属性。
综上所述:
通常,属性集称为进程控制块。程序,数据,栈,属性集称为进程映像
进程映像中的基本元素如下
项目 | 说明 |
---|---|
用户数据 | 用户空间中可修改的部分,包括程序数据,用户栈和可修改的程序 |
用户程序 | 待执行的程序 |
栈 | 每一个进程都有一个或多个栈,用于保存参数,过程调用和系统调用地址 |
进程控制块 | 操作系统控制进程所需要的数据 |
进程映像的位置取决与所用的内存管理方案。
最简单情况下:
由于进程映像保存在相邻的的内存块或连续的内存块中,而存储块位于外存上。
当操作系统管理进程时,其进程映像应当一部分驻留在内存中,当执行该进程时,则需要将该进程的进程映像全部加载到内存或虚存中。
因此,操作系统需要知道每个进程映像在内存中的部分的位置,也需要知道每个进程在内存中的位置。
当进程被切换时,部分进程映像可能还保留在内存中,所以操作系统必须追踪进程映像的那一部分仍然驻留在内存。
进程属性
操作系统对进程控制块的维护所需要的进程信息看起来是非常众多的,实际上大体我们把他分为三类:
- 进程标识信息
- 进程状态信息
- 进程控制信息
见下表:
处理器状态信息由处理器寄存器的内容组成。
运行一个进程时,进程的信息一定会出现寄存器中。中断进程时,必须保存该寄存器的所有信息,以便进程恢复时就可以恢复之前的所有数据。所涉及的寄存器种类与数量取决与处理器的设计。
进程控制块的作用
进程控制块是操作系统中最重要的数据结构。实际上,操作系统的各个模块包括那些设计调度,资源分配,中断处理,性能监控和分析的模块,都能读取和修改他们。
因此这就带来了一个设计上的问题,如何保证进程控制块的安全呢。
- 一个例程中的错误可能会破坏进程控制块,进而破坏操作系统对进程的管理能力。
- 进程控制块的结构或语义设计可能会影响操作系统中的许多模块(模块对进程控制块可读取可修改)
这些问题在操作系统得到的解决方法是:要求操作系统中的所有例程都通过一个处理程序例程来解决。
处理程序例程的任务仅是保护进程控制块,且是读写这些块的唯一仲裁程序。