进程 链接到标题

定义 链接到标题

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

进程与程序的区别

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

属性 链接到标题

  • 结构性:由多个部分组成
  • 动态性:进程的状态是不断变化的
  • 并发性:多个进程可以并发执行
  • 制约性:竞争与协作
  • 独立性:独立拥有资源和调度

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

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

alt text

挂起 链接到标题

概念描述 链接到标题

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

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

过程描述 链接到标题

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

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

挂起VS等待 链接到标题

  • 进程处于挂起时不参与运行调度,即使等待条件满足也不行(相当于是被隔离了)
  • 挂起状态是被动的,进程本身不能够控制(可以理解为该权限为操作系统所有)

进程的描述 链接到标题

进程映像 链接到标题

某时刻进程的内容及其状态的集合

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

进程上下文 链接到标题

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

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

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

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

  • 标识信息
  • 现场信息
  • 控制信息 ……
    警告
    此处漏掉了进程切换与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) 链接到标题

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