程序与进程 进程是正在执行的程序。例如,当我们用 C 或 C++ 编写程序并编译它时,编译器会创建二进制代码。原码和二进制码都是程序。当我们实际运行二进制代码时,它就变成了一个进程。 进程是“主动”实体,而不是程序,程序被视为“被动”实体。单个程序多次运行可以创建多个进程;例如,当我们多次打开一个 .exe 或二进制文件时,会开始多个实例(创建多个进程)。 进程在内存中是什么样子的?
文本部分:一个进程,有时称为文本部分,还包括由Program Counter的值表示的当前活动。 堆栈:堆栈包含临时数据,例如函数参数、返回地址和局部变量。 数据部分:包含全局变量。 堆部分:在运行时动态分配内存以进行处理。 有关章节的更多详细信息,请参阅此内容。
进程的属性或特征 进程具有以下属性。
上下文切换 保存一个进程的上下文并加载另一个进程的上下文的过程称为上下文切换。简单来说,就像加载和卸载进程从运行状态到就绪状态。 上下文切换何时发生? 1. 当一个高优先级的进程进入就绪状态(即比正在运行的进程具有更高的优先级) 2. 中断发生 3. 用户和内核模式切换(虽然这不是必需的) 4. 使用抢占式CPU调度。 上下文切换与模式切换 当 CPU 特权级别发生更改时,例如进行系统调用或发生故障时,就会发生模式切换。内核在特权模式下工作,而不是标准用户任务。如果用户进程想要访问只能由内核访问的东西,则必须进行模式切换。在模式切换期间不需要改变当前执行的进程。 模式切换通常发生在进程上下文切换发生时。只有内核可以引起上下文切换。 CPU-Bound 与 I/O-Bound 进程: CPU-bound 进程需要更多 CPU 时间或花费更多时间处于运行状态。 一个 I/O-bound 进程需要更多的 I/O 时间和更少的 CPU 时间。一个 I/O-bound 进程会花费更多时间处于等待状态。 练习: 1.在进程之间的上下文切换中不需要保存以下哪项?(GATE-CS-2000) (A) 通用寄存器 (B) 翻译后备缓冲器 (C) 程序计数器 (D) 以上所有 答案(B) 解释: 在进程上下文切换中,必须以某种方式保存第一个进程的状态,这样当调度程序回到第一个进程的执行时,它可以恢复该状态并继续。进程的状态包括进程可能正在使用的所有寄存器,尤其是程序计数器,以及可能需要的任何其他操作系统特定的数据。转换后备缓冲区 (TLB) 是内存管理硬件用来提高虚拟地址转换速度的 CPU 缓存。TLB 具有固定数量的包含页表条目的插槽,这些条目将虚拟地址映射到物理地址。在上下文切换时,一些 TLB 条目可能会变得无效,因为虚拟到物理的映射不同。处理这个问题的最简单策略是完全刷新 TLB。 2.在用户和内核执行模式之间切换所用的时间是 t1,而在两个进程之间切换所用的时间是 t2。以下内容哪些是对的?(GATE-CS-2011) (A) t1 > t2 (B) t1 = t2 (C) t1 < t2 (D) 关于 t1 和 t2 之间的关系,无话可说。 答案:(C) 解释:过程切换涉及模式切换。上下文切换只能在内核模式下发生。

1. 进程 ID: 操作系统分配的唯一标识符 2. 进程状态:可以准备好、正在运行等 3. CPU 寄存器:与程序计数器一样(必须保存 CPU 寄存器和 当进程换入和换出 CPU 时恢复) 5. Accounts 信息: 6. I/O 状态信息:例如,分配给进程的设备, 打开文件等 8、CPU调度信息:例如Priority(不同进程 可能有不同的优先级,例如 分配高优先级的较短进程 以最短作业优先调度)进程的所有上述属性也称为进程的上下文。 每个进程都有自己的进程控制块(PCB),即每个进程都有一个唯一的 PCB。以上所有属性都是PCB的一部分。 进程状态: 进程处于以下状态之一:
1.新建:新创建的进程(或)正在创建的进程。 2. 就绪:创建过程进入就绪状态后,即 进程已准备好执行。 3.运行:当前在CPU中运行的进程(只有一个进程在 一个时间可以在单个处理器中执行)。 4. 等待(或阻塞):当一个进程请求 I/O 访问时。 5. 完成(或终止):流程完成了其执行。 6. Suspended Ready:当就绪队列满时,一些进程 移动到挂起就绪状态 7. Suspended Block:等待队列满时。
