操作系统和进程的关系:
- 操作系统与普通计算机软件的作用相同,即它是由处理器执行的一段程序或一组程序。
- 操作系统必须交替执行多个进程,在合理的响应时间范围内使处理器的利用率最大。
- 操作系统必须按照特定的策略(如某些函数或应用程序具有较高的优先级)给进程分配资源,同时避免死锁。①
- 操作系统须为有助于构建应用的进程间通信和用户进程创建提供支持。
①从本质上看,如果两个进程为了继续需要相同的两个资源,而每个进程都拥有其中的一个资源时,就会发生死锁。每个进程都将无限地等待自己没有的那个资源。
目录
1.计算机、系统软件和资源
计算机平台由一组硬件资源组成,如处理器、内存、I/O模块、定时器和磁盘驱动器等。
开发操作系统是为了给应用程序提供方便、安全和一致的接口。操作系统是计算机硬件和应用程序之间的一层软件,它为应用程序和工具提供支持。
操作系统可想像为资源的一种抽象表示,它可被应用程序请求和访问。资源包括内存、网络接口和文件系统等。操作系统为应用程序创建这些资源的抽象表示后,就须管理他们的使用,例如操作系统既可允许资源共享,也可允许资源保护。
2.进程和进程控制块
可把进程视为由一组元素组成的实体,进程的两个基本元素是程序代码(可能被执行相同程序的其他进程共享)和与代码相关联的数据集。假设处理器开始执行这个程序代码,并且把这个执行实体称为进程。进程执行的任意时刻,都可由如下元素来表征:
- 标识符(进程ID):与进程相关的唯一标识符,用来区分其他进程。
- 状态:若进程正在执行,则进程处于运行态。
- 优先级:相对于其他进程的优先顺序。
- 程序计数器:程序中即将执行的下一条指令地址。
- 内存指针:包括程序代码和进程相关数据的指针,以及与其他进程共享内存块的指针。
- 上下文数据:进程执行时处理器的寄存器中的数据。
- I/O状态信息:包括显示I/O请求、分配给进程的I/O设备和被进程使用的文件列表等。
- 记账信息:包括处理器时间总和、使用的时钟数总和、时间限制、记账号等。
![]() |
![]() |
上述信息存放在一个称为进程控制块的数据结构中,控制块由操作系统创建和管理。进程中断时,操作系统会把程序计数器和处理器寄存器(上下文数据)保存到进程控制块中的相应位置,进程状态相应地改为其他值,如阻塞态或就绪态。
单处理器计算机在任何时刻最多都只能执行一个进程,而正在运行的进程的状态为运行态。现代操作系统可以随意将其他进程置为运行态,并把它的程序计数器和进程上下文数据加载到处理器寄存器中,进而执行这一进程。
3.进程状态
在设计控制进程的程序时,第一步是描述进程所表现出的行为。
操作系统创建一个新进程时,它将该进程以未运行态加入系统,操作系统知道这个进程的存在,并正在等待执行机会。将一个新进程添加到正被管理的进程集时,操作系统需要建立用于管理该进程的数据结构(见第4部分),并在内存中给它分配地址空间。
3.1五状态模型
- 运行态:进程正在执行。
- 就绪态:进程做好了准备,只要有机会就开始执行。
- 阻塞/等待态:进程在某些事件发生前不能执行,如I/O操作完成,但进程依然在内存中。
- 新建态:刚刚创建的进程,操作系统还未把它加入可执行进程组,它通常是进程控制块已经创建但还未加载到内存中的新进程。
- 退出态:操作系统从可执行进程组中释放出的进程,要么它自身已停止,要么它因某种原因被取消。

操作系统可分两步定义新进程。首先,将标识符关联到进程,其次分配和创建管理进程所需要的全部表格。此时,操作系统所需的关于该进程的信息保存在内存中的进程表内,但进程本身还未进入到内存,也就是说,即将执行的程序代码不在内存中,也没有为与这个进程相关的数据分配空间。进程处于新建态时程序保留在外存中。
抢占:抢占定义为收回一个进程正在使用的资源。此时,资源就是处理器本身。进程正在执行并且可以继续执行,但由于其他进程需要执行而被抢占。
抢占一个进程:处理器为了执行另外的进程而终止当前正在执行的进程。
3.2被挂起的进程
挂起态:当内存中的所有进程都处于阻塞态时,操作系统可把其中的一个进程置为挂起态,并将它转移到磁盘(从内存中换出),此时内存所释放的空间就可被调入的另一个进程使用。

挂起的其他用途:挂起进程等价于不在内存中的进程,不论它是否在等待一个事件,都不能立即执行。
挂起进程的特点:
- 该进程不能立即执行。
- 该进程可能在也可能不在等待一个事件。若在等待一个事件,那么阻塞条件不依赖于挂起条件,阻塞事件的发生不会使进程立即执行。②
- 为阻止该进程执行,可通过代理使其置于挂起态,代理可以是进程本身,也可以是父进程或操作系统。
- 除非代理显式地命令系统进行状态转换,否则该进程无法从这一状态转移。
②阻塞指的是进程在等待某个事件的发生,如I/O事件,但是进程仍在内存中,直到事件发生,进程继续运行。而对于挂起态,进程已被替换出内存。所以说挂起态事件的发生不会使进程立即执行,而需要等待处理器将其进行状态转移,转移到就绪态/挂起态。
调试也是进程挂起:若用户怀疑程序有缺陷,就可以挂起执行的程序进行调试,检查并修改程序或数据,然后恢复执行。
4.进程描述
4.1操作系统的控制结构
操作系统控制计算机内部的事件,为处理器执行进程进行调度和分派,给进程分配资源,并响应用户程序的基本服务请求。既操作系统就是管理系统资源的实体。
操作系统为了管理进程和资源,必须掌握每个进程和资源的当前状态。既操作系统构造并维护其管理的每个实体的信息表:内存、I/O、文件和进程。

内存表:用于跟踪内存和外存。内存的部分为操作系统保留,剩余部分供进程使用,外存中保存的进程使用某种虚存或简单的交换机制。内存表必须包含如下信息:
- 分配给进程的内存。
- 分配给进程的外存。
- 内存块或虚存块的任何保护属性,如哪些进程可以访问某些共享内存区域。
- 管理虚存所需要的任何信息。
4.2进程控制结构
操作系统在管理和控制进程时,首先要知道进程的位置(操作系统控制表),其次要知道进程的属性/进程控制块(进程ID、处理器状态信息、进程控制信息)。一个进程需要有足够的内存空间来保存其程序和数据(局部变量、全局变量和任何已定义常量的数据单元)。
属性集称为进程控制块。程序、数据、栈和属性的集合称为进程映像(见第2部分图)。
项目 | 说明 |
---|---|
用户数据 | 用户空间中的可修改部分,包括程序数据、用户栈区域和可修改的程序 |
用户程序 | 待执行的程序 |
栈 | 每个进程有一个或多个后进先出(LIFO)栈,栈用于保存参数、过程调用地址和系统调用地址 |
进程控制块 | 操作系统控制进程所需的数据。 |
进程位置:进程映像的位置取决于所用的内存管理方案。简单情况下,进程映像保存在相邻的内存块中或连续的内存块中。存储块位于外存中时,操作系统在管理进程时,其进程映像至少应有一部分位于内存中。而要执行该进程,则必须将整个进程映像载入内存中或至少载入虚存中。因此,操作系统需要知道每个进程在磁盘中的位置,并知道每个进程在内存中的位置。
对于所有操作系统中的进程标识符来说,每个进程都分配了一个唯一的数字标识符。进程标识符可以简单地表示为主进程表中的一个索引。
进程标识信息 | |
标识符 | 存储在进程控制块中的数字标识符,包括:
|
处理器状态信息 | |
用户可见寄存器 | 用户可见寄存器是处理器在用户模式下执行机器语言时可以访问的寄存器。通常有8~32个此类寄存器,而在一些RISC实现中,这种寄存器会超过100个 |
控制和状态寄存器 | 用于控制处理器操作的各种处理器寄存器,包括:
|
栈指针 | 每个进程有一个或多个与之相关联的后进先出(LIFO)系统栈。栈用于保存参数和过程调用或系统调用的地址,栈指针指向栈顶 |
进程控制信息 | |
调度和状态信息 | 这是操作系统执行调度功能所需的信息,典型的信息项包括:
|
数据结构 | 进程可以以队列、环或其他结构链接到其他进程。例如,具有某一特定优先级且处于等待状态的所有进程可在一个队列中链接。一个进程与另一个进程间的关系可以是父子(创建者-被创建者)关系。进程控制块中或包含至其他进程的指针,以支持这些结构 |
进程间通信 | 各种标记、信号和信息可与两个无关进程间的通信关联。进程控制块中可维护某些或全部此类信息 |
进程特权 | 进程根据其可以访问的内存和可执行的指令类型来赋予特权。此外,特权也适用于系统实用程序和服务的使用 |
存储管理 | 该部分包括指向描述分配给该进程的虚存的段表或页表的指针 |
资源所有权和使用情况 | 指示进程控制的资源,如一个打开的文件。还可包含处理器或其他资源的使用历史,调度器需要这些信息 |

4.3进程控制块的作用
进程控制块是操作系统中最重要的数据结构。每个进程控制块都包含操作系统所需进程的所有信息。实际上,操作系统中的每个模块,包括那些涉及调度、资源分配、中断处理、性能监控和分析的模块,都能读取和修改它们,所以说资源控制块集合定义了操作系统的状态。
5.进程控制
5.1执行模式
非特权模式通常称为用户模式,因为用户程序通常在该模式下运行;特权模式为系统模式、控制模式或内核模式。当用户调用一个操作系统服务或中断来触发系统例程的执行时,执行模式为内核模式;而当从系统服务返回到用户进程时,执行模式则置为用户模式。
5.2进程创建
操作系统基于某种原因决定创建一个新进程时,会按如下步骤操作:
- 为新进程分配一个唯一的进程标识符。此时,主进程会添加一个新表项,每个进程一个表项。
- 为进程分配空间。包括进程映像中的所有元素。因此,操作系统必须知道私有用户地址空间(程序和数据)和用户栈需要多少空间。
- 初始化进程控制块。初始化进程标识部分包括进程ID和其他相关的ID。
- 设置正确的链接。例如,若操作系统将每个调度队列都维护为一个链表,则新进程必须放在就绪或就绪/挂起链表中。
- 创建或扩充其他数据结构。例如,操作系统可因编制账单或评估性能,为每个进程维护一个记账文件。
5.3进程中断
机制 | 原因 | 用途 |
---|---|---|
中断 | 来自当前执行指令的外部 | 对异步外部事件的反应 |
陷阱 | 与当前执行指令相关 | 处理一个错误或一个异常条件 |
系统调用 | 显式请求 | 调用操作系统函数 |
模式切换:出现中断时,处理器会做如下工作:
- 将程序计数器置为中断处理程序的开始地址。
- 从用户模式切换到内核模式,以便中断处理代码包含特权指令。