进程控制块
进程组成:
- 程序代码
- 相关数据
- 进程控制块
进程控制块
进程状态
五状态模型
- 运行态:进程正在执行。1个处理器最多只有1个进程处于这个状态。
- 就绪态:做好准备,可以开始执行。
- 阻塞/等待态:进程在某些事件发生前不能执行,如I/O操作完成。
- 新建态:刚创建的进程,操作系统没有把它加入到可执行进程组中。通常是进程控制块已创建但还没有加载到内存中的新进程。
- 退出态:操作系统从可执行进程组中释放的进程,或者是因为自身停止了,或者因为某种原因取消。
新建态作用:操作系统可以分两步定义新进程,程序保留在外村中,通常是磁盘。
- 将标识符关联到进程,分配和创建管理进程所需要的所有表。此时处于新建态,但还没执行进程。
- 可能基于性能、内存、系统中进程限制数量原因,关于该进程的信息保存在内存的进程表中,但进程自身未进入内存,即将执行的程序代码不在内存中,也没有为程序分配数据空间
退出态作用:提供提取信息的时间,提取完后操作系统不再需要保留任何数据,从系统删除。
挂起态
I/O活动比计算速度慢很多,内存中所有进程在等待I/O的情况很常见,即使多道程序设计,大多数时候处理器仍然处于空间状态。
解决方案是交换,包括把内存中的某个进程的一部分或全部移到磁盘中。内存中没有处于就绪状态的进程时,操作系统就把被阻塞的进程换出到磁盘中的“挂起队列”。
挂起不在内存中,是否等待一个事件都不能立即执行。
进程描述
操作系统控制结构
操作系统维护着4种不同类型的表:
- 内存
- 设备
- 文件
- 进程
内存表用于跟踪内(实)存和外存(虚拟内存)。
- 分配给进程的内存。
- 分配给进程的外村。
- 内存块或虚拟内存块的任何保护属性。
- 管理虚拟内存所需要的任何信息。
I/O表管理系统中的I/O设备和通道。
文件表,提供关于文件是否存在、文件在外村中的位置、当前状态和其他属性的信息。
进程控制结构
进程控制块:进程属性
进程映像:程序、数据、栈、属性集合。
进程控制块包括:进程标识信息(ID)、进程状态信息(处理器寄存器)、控制信息(调度、进程通信、存储、资源)。
进程控制块的作用:最重要的数据结构,包含操作系统所需要的进程所有信息。
操作系统的每个模块都可以读取修改他们,保护问题:
- 1个例程中有错误,可能会破坏进程控制模块,进而破坏系统。
- 进程控制块的结构设计变化会影响操作系统中所有模块。
虚拟内存中进程映像的结构:
进程控制块包含将进程控制块链接出来的指针。
进程控制
执行模式
非特权模式:用户态。
特权模式:系统态、控制态、内核态。
当用户调用1个操作系统服务或者中断触发系统例程的执行时,执行状态设置为内核态。
当从系统服务返回到用户进程时,执行模式被设置为用户态。
进程创建
- 给新进程分配唯一的进程标识符。此时主进程表中增加一个表项。
- 给进程分配空间。包括进程映像中的所有元素。操作系统要知道私有用户地址(程序、数据)空间和用户栈空间,可以使用默认值。
- 初始化进程控制块。
- 设置正确连接。如果队列保存成链表,新进程放在就绪或者就绪/挂起链表中。
- 创建或扩充其他数据结构。
进程切换
何时切换进程:可以在操作系统从当前正在运行的进程中获得控制权的任何时刻发生。
操作系统可以区分两种类型的系统中断:中断、陷阱。
- 普通中断:控制先交给中断处理器,做一些辅助工作,再转到特定类型的中断相关的操作系统例程。
- 时钟中断:判断是否超过时间片,是则把进程切换到就绪态,调入另一个进程。
- I/O中断,如果I/O是多个进程正在等待的事件,操作系统把所有的阻塞态进程转换到就绪态,操作系统决定要运行的进程
- 内存失效:处理器访问一个虚拟内存地址,不在内存中,系统必须从外存中把包含这个引用的内存块(页/段)调入内存。发出I/O请求后,内存失效的进程设置为阻塞状态,执行进程切换,当想要的内存调入内存中时,进程设为就绪态。
- 陷阱(trap),确认错误或异常是否致命,是则进程转到退出态,并切换进程。
- 系统调用,如用户进程执行一条I/O操作指令,如打开文件,系统调用导致转移到操作系统代码的一部分的1个例程上运行,把用户进程设为阻塞态。
模式切换
指令中断阶段检查有中断
- 保存处理器状态信息,包括程序计数器、其他寄存器、栈信息
- 程序计数器置成中断处理程序的开始地址。
- 从用户态切换到内核态。
如果中断后是切换到另一个程序,则需要做一些工作。中断的发生并不是必须伴随进程切换。
进程状态变化
- 保存处理器上下文,程序计数器、其他寄存器。
- 更新当前运行态进程的进程控制块,将进程的状态改成另一状态。
- 将进程的控制块移到相应的队列。
- 选择一个进程执行。
- 更新所选的进程控制块,包括状态改为运行态。
- 更新内存管理的数据结构,取决与如何管理地址转换。
- 恢复被选择进程最后切出的上下文。
操作系统的执行
- 无进程的内核
- 在用户进程中执行(UNIX)
操作系统管理着n个进程映像,每个映像还包括内核程序的程序、数据、栈区域。
当进程在内核模式下,独立的内核栈用于管理调用/返回。操作系统代码和数据位于共享地址空间中,被所有用户进程共享。
当发生一个中断、陷阱、系统调用时,处理器被置于内核状态,控制权转交给操作系统,需要保存模式上下文并进行模式切换,切换到操作系统例程,但此时仍然在当前用户进程中继续执行,因此不需要执行进程切换,仅模式切换。 - 基于进程的操作系统
UNIX SVR4 进程管理
进程状态
进程描述