进程 链接到标题

定义 链接到标题

  • 一个可并发执行的程序关于某个数据集合的一次执行过程,
  • 是操作系统进行资源分配、 保护和调度的基本单位
警告

进程与程序的区别

程序 进程
状态 静态 动态
存储位置 磁盘 内存
存在时间 永久 短暂
活动 不能创建其他程序 可以创建其他进程
形式 不能 能真实描述并发
关系同一个程序可以有多个进程

属性 链接到标题

  • 结构性:由多个部分构成
  • 共享性:共享程序代码和操作系统内核代码
  • 独立性:独立拥有资源和调度
  • 动态性:表征执行过程,保存执行上下文
  • 制约性:竞争与协作
  • 并发性:可并发执行

进程的状态转换 链接到标题

flowchart LR 就绪态 <--> 运行态 运行态 --> 等待态 等待态 --> 就绪态
  • 就绪态:进程已分配到除CPU以外的所有资源
  • 运行态:进程已分配到CPU
  • 等待态:进程因发生某种事件或某个条件未满足而暂时停止执行(如I/O操作)

alt text

挂起 链接到标题

概念描述 链接到标题

把某些进程对换到磁盘中或搁置一旁, 暂时不参与 调度运行

  • 提高主存利用率, 调节系统负荷
  • 进行程序的调试、 检查和改正
  • 当系统出现故障或某些功能受到破坏时, 需要挂起 某些进程以排除故障

过程描述 链接到标题

  • 挂起就绪态:进程具备运行条件但被置为挂起状态
  • 挂起等待态: 进程正在等待某一个事件, 且被置为了挂起状态。

下面ppt的流程图可以将挂起引入到刚刚的进程描述中去。 alt text

挂起VS等待 链接到标题

注释
  • 进程处于挂起时不参与运行调度,即使等待条件满足也不行(相当于是被隔离了)
  • 挂起状态是被动的,进程本身不能够控制(可以理解为该权限为操作系统所有)
  • 提高主存利用率,调节系统负荷
  • 进行程序的调试、检查和改正
  • 当系统出现故障或某些功能受到破坏时,需要挂起 某些进程以排除故障

进程的描述 链接到标题

进程映像 链接到标题

注释
某时刻进程的内容及其状态的集合
  • 进程控制块(PCB):操作系统为每个进程分配一个数据结构, 用来描述该进程的基本信息和状态信息
  • 进程程序块:被执行的程序,规定进程一次执行的内容
  • 进程数据块:进程的私有地址空间,存放私有数据
  • 进程堆栈:存放进程运行时的临时数据,(比如保护中断/异常时的现场)

进程上下文context 链接到标题

操作系统中把进程物理实体支持进程运行的环境合称为进程上下文

信息
  • 物理实体:程序和数据
  • 支持环境:硬件寄存器,PSW寄存器,动态地址转 换的页表,核心数据结构等

上下文切换 链接到标题

当系统调度新锦成占有处理器时,新老进程随之发生上下文切换。

分类 链接到标题

  • 用户级上下文(user level context) 代码、数据、共享存储区、用户栈
  • 系统级上下文( system level context ) 进程控制块、主存管理信息(页表或段表)、核心栈
  • 寄存器上下文( register context ) PSW寄存器、指令计数器、栈指针、控制寄存器、通用寄 存器等

进程控制块(PCB) 链接到标题

系统感知和管理进程的唯一标识

  • 标识信息
  • 现场信息
  • 控制信息 ……
    警告
    此处漏掉了进程切换与CPU模式切换章节,因为实在是过于抽象了

进程队列 链接到标题

处于同一状态的所有PCB链接在一起的数 据结构

在下面讲算法时会讲

进程切换&CPU模式切换 链接到标题

进程切换 链接到标题

  • 进程执行系统调用
  • 进程产生异常
  • 外部设备产生中断
  • 进程时间片耗尽
  • 运行进程被阻塞
  • 进程被唤醒或激活

CPU模式切换 链接到标题

当中断或异常发生时,处理器从用户态自动进入到管理态的过程。 ……

进程的控制和管理 链接到标题

信息
原语:在核心态下执行、完成系统特定功能的程序段
执行过程中不允许被中断,是一个不可分割的基本运行单位

进程的创建 链接到标题

进程图:用来描述进程家族关系的有向树

graph TD A[根节点] --> B[子节点1] A[根节点] --> C[子节点2] B[子节点1] --> D[子节点1.1] B[子节点1] --> E[子节点1.2] C[子节点2] --> F[子节点2.1] C[子节点2] --> G[子节点2.2]

  • 子进程可以继承父进程的所有资源,
  • 当子进程被撤消时, 应将从父进程那里获得的资源归还给父进程
提示
这是与实际家族不同的地方,后代一定要比祖先要先死
操作 执行原语的进程 原语操作的进程
创建
撤消 自己或子、孙
阻塞 自己 自己
唤醒 其它 其它
挂起 自己或子、孙
激活 其它 其它
  • Linux的fork
  • Windows的CreateProcess

线程 链接到标题

  • 进程仅作为资源分配的基本单位
  • 作为进程的一个组成部分,线程是进程中一个独立的执行单元
    • 是处理器调度和分派的基本单位
    • 拥有自己的代码、 数据和堆栈
    • 共享进程空间中的内存、 设备等资源 …………
      警告
      又是一堆抽象定义,我服了,我看不下去了

线程的实现 链接到标题

用户级与内核级(后者当然要优于前者)

基本算法 链接到标题

首先定义两个衡量指标

  • 周转时间 $$ \sum_{i=1}^n(T_{\text{运行}}+T_{\text{等待}}) $$
  • 带权周转时间 $$ \sum_{i=1}^n\frac{T_{\text{运行}}+T_{\text{等待}}}{T_{\text{运行}}} $$

先来先服务算法(FCFS) 链接到标题

短作业优先算法(SJF) 链接到标题

会导致长作业饥饿

最短剩余时间优先算法(SRTF) 链接到标题

效率是最高的,但是仍然会有饥饿现象

响应比率优先算法(HRRF) 链接到标题

比较公平的算法,但是在实践上不是最优的。