进程
进程定义是:一个正在执行的程序
程序(书上说的是进程)有两个基本元素,一是程序代码,二是与代码相关的数据集。
当处理器开始执行这个程序代码,就有了新的元素:
-
标识符:身份证
-
状态:正在执行就是处于运行态
-
优先级
-
程序计数器:存储下一条指令地址
-
内存指针:包括程序代码和数据集的指针,以及 与其他进程 共享内存块的指针
-
上下文:进程执行时,处理器的寄存器中的数据
-
I/O状态信息 记账信息(处理器时间总和啊等等)
以上!!这么些元素我们统一管理存放在 PCB 进程控制块 里!
因此系统可以随意中断、将其他进程置为运行态,并把程序计数器/上下文加载到处理器寄存器中,然后执行这个进程
因此,可以说进程由 程序代码、数据集、进程控制块 构成。
进程模型
进程状态
观察可得,任何时刻一个进程要么执行、要么未执行。
所以构建了模型有俩状态:运行态、未运行态
操作系统创建一个新的进程时,会将其以未运行态加入系统,操作系统知道这个进程存在,同时它在等机会上位。操作系统中的进程会被不时的中断,这是人力管理(分派器)就会找机会选择新进程运行,并且切换它的状态。
未运行进程必须位于某种类型的队列中,等待执行时机。
进程创建
将一个新进程添加到进程集时,操作系统需要 建立用于管理该进程的数据结构,并在内存中分配地址空间。
五状态模型
新建、运行、就绪、阻塞/等待、退出态
进程处于新建态时,程序保留在外存中,通常是磁盘
对其需要有一种有效的数据结构进行维护
等待进程会被存放到等待队列(会按优先计划分队列),准备就绪时,会被爱加载到就绪队列等待调度。
被挂起的进程
当内存不存在就绪态的进程时,操作系统会把被阻塞的进程换到磁盘的挂起队列,即临时提出进程队列。
接着要么从挂起队列取出另一个进程,要么接受一个新进程的请求,放入内存运行。
所以上面位于挂起队列的进程我们称为 挂起态
那这时候有个矛盾了,位于挂起队列的理论来讲都是处于阻塞状态,因此没有必要把它换回来呀。
实际上,他们都是在等一个对的人(阻塞在某个特定事件),当ta出现了(发生该事件),进程集就可以执行了,因此又引入了两个状态即:阻塞/挂起态 和 就绪/挂起态(已经等到阻塞事件的发生,换到内存就能跑了)
进程描述
系统中的进程在执行期间都需要访问某些系统资源,如处理器、IO设备和内存。
操作系统控制结构
操作系统为了管理进程和资源分配,必须掌握进程和资源的当前状态。
通常采用的方法是,操作系统构造并维护管理每个实体的 信息表,操作系统会维护下面四种不同类的表。
内存表用于跟踪内存和外存。
内存一部分是系统用,另一个部分是进程使用。
外存中保存的进程 使用某种虚存 或 简单地交换机制。
表中还包含
- 分配给进程的内存
- 分配给进程的外存
- 内存块/虚存块的任何保护属性,比如哪些进程可以访问某些共享内存区域
- 管理虚存所需要的任何信息
I/O表用来管理计算机系统的I/O设备和通道,是否可用的信息都会系统监控。
文件表提供关于文件是否存在、文件在外存的位置、当前状态等属性信息。
进程表管理进程,也会对上面三表的资源直接/间接引用。后文详细讲。
进程控制结构
进程映像中典型的元素有四个
数据、程序、进程控制块前文都将过了
这里还有一个 栈:用于保存你参数、过程调用地址和系统调用地址。
进程映像的位置取决于所采用的内存管理方案。最简单的情形下,进程映像保存在相邻/连续的内存块中。
它的存储块是位于外存的,因此在操作系统管理进程时,进程映像至少应有一部分在内存!而要执行该进程,需要将整个进程映像载入内存/起码也得载入虚存。因此操作系统要知道进程在磁盘的位置,还要知道在内存中的位置。
现代操作系统中,因为分页技术的发展,进程映像的一部分可在内存中,剩余部分可在外存中。因此呢,操作系统维护的进程表必须给出每个进程映像中的每页的位置。
进程属性
进程控制块信息分为三大类:
- 进程标识信息:身份信息
- 进程状态信息:包括处理器状态信息等
- 进程控制信息:是操作系统控制和协调各种活动进程需要的额外信息。进程间通信、进程特权、存储信息、资源所有权等等。
进程控制
执行模式
大多数处理器至少支持两种执行模式:
用户模式 和 系统/内核模式
使用两种模式的原因是保护操作系统和重要的操作系统表(如进程控制块)不受用户程序的干扰。
内核模式下,软件会完全控制处理器及其所有指令、寄存器、内存等。
进程创建
创建一个新进程时,会有如下步骤:
- **为进程分配一个唯一的进程标识符 **。此时,主进程表中会添加一个新表项,每个进程对应一个表项
- 为进程分配空间。这包括了进程映像中的所有元素。
- 初始化进程控制块。多数项目通常初始化为0,程序计数器置为程序入口点,系统栈帧定义进程栈边界。
- 设置正确的连接。若操作系统将每个调度队列都维护一个链表,需要放入链表中。
- 创建扩充其他数据结构。维护一个记账文件,方便程序性能评估。
进程切换
出现中断时,处理器会做如下工作:
- 程序计数器置为中断处理程序的开始地址
- 用户模式->内核模式,方便中断处理代码包含特权指令
处理器现在继续取指界断面,并取中段处理程序的第一条指令来服务中断,此时将已中断上下文保存在中断程序的进程控制块中。
上下文是什么
必须包含中断处理程序可能改变的所有信息,以及恢复被中断程序时所需要的所有信息。因此,必须保存称为处理器状态信息的进程控制块部分,包括程序计数器、其他处理器寄存器和栈信息。
操作系统精髓与设计原理.第九版