Skip to main content

操作系统-进程管理

程序

程序组成

  • 顺序执行
    • 有向无环图
    •   flowchart LR;
      A((输入))--->B((计算))--->C((输出));
  • 并发执行
    • AOE 网
    • 失去程序封闭
    • 程序顺序和执行数序不再对应
    • 并发程序相互作用

进程

进程组成

  • 程序
  • 数据(进程工作区)
  • 进程控制块
    • 进程标识符
    • 状态
      • 三态模型
        • 运行
        • 就绪
        • 阻塞
      • 五态模型
        • 新建
        • 运行
        • 就绪
        • 阻塞
        • 终止
      • 挂起
        • 在系统资源紧张或突发情况下,将进程放到磁盘交换区
        • 活跃就绪(激活)
        • 静止就绪(挂起)
        • 活跃阻塞(恢复)
        • 静止阻塞(挂起)
    • 地址
    • 控制信息
    • 队列指针
    • 优先级
    • 现场保护区

进程管理

  • 原语
    • 由内核实现
    • 执行是原子性的
    • 包含进程管理相关功能

进程通信

CR临界资源,CS临界区CR\text{临界资源},CS\text{临界区}
  • 同步
    • 进程间的协同问题
  • 互斥
    • 进程间的临界资源争夺问题
  • 临界资源
    • 只能同时提供一个进程访问的资源
  • 临界区
    • 进程访问临界资源的程序段
  • 临界区管理
    • 临界区虚位以待,进程可进入临界区运行一段时间
    • 临界区有进程运行,则需要等待,待临界区释放后,与其他进程争夺
    • 有限等待,让进程在有限的等待时间内进入临界区
    • 让权等待,进程无法进入临界区,应该立即释放处理机

信号量

P占有,V释放,S信号量(Semaphore)P\text{占有},V\text{释放},S\text{信号量(Semaphore)}

控制进程同步/互斥的方式

  • 整型信号量
    • 公用信号量实现互斥,值表示资源的数目
    • 私用信号量实现同步,值表示进程间通信的消息
  • 记录型型号量
  • 信号量集机制

高级通信原语

改善 PV 操作实现困难,效率低,操作不当容易死锁等问题

  • 共享存储,同步进程间共享内存实现数据交换
  • 消息传递,同步进程数据交换以消息为单位
  • 管道通信,连接写进程和读进程实现数据交换

管程/监视器

理解为进程管理的线程间同步/互斥

  • 多个彼此可以交互并共用资源的线程
  • 多个与资源使用有关的变数
  • 一个互斥锁
  • 一个用来避免竞态条件的不变量

进程调度

为进程分配 cpu 的问题

  • 当更高优先级的进程等待进入时,可选择剥夺当前运行的进程的 CPU 权利,或者不剥夺,等待当前进程运行完毕。
  • 三级调度
    • 高级调度
      • 后被作业调入主系统,成为就绪状态
    • 中级调度
      • 决定处于交换区的哪个就绪进程可以调入内存参与 CPU 竞争
    • 低级调度
      • 决定内存中的哪个进程可以占用 cpu
  • 调度策略
    • 先到先服务
      • 按照作业提交时间或进程就绪先后一次顺序分配 CPU
    • 时间片轮转
      • 固定时间片,分配每个进程相同的时间片
      • 可变时间片,根据进程不同的要求分配不同时间片
    • 优先级调度
      • 静态优先级,在创建时确定优先级
      • 动态优先级,在进程生命周期中优先级会改变
    • 多级反馈调度
      • 设置多个优先级队列 QQ 每个队列优先级不同Qi<Qi+kQ_i < Q_{i+k}
      • 若进程在QiQ_i中为完成,则投入到Qi+1Q_{i+1}中,按此模式继续直到进程被投入最后队列按照时间片轮转调度
      • 先执行高优先级队列中的进程,如果第优先级进程在在运行,有高优先级进程等待,则第优先级让权等待
  • 进程优先级确定
    • I/O 型进程,高优先级且分配时间片
    • 计算型进程,每次执行完进入更低级队列,最后分配大时间片
    • 使用 CPU 为主的进程,I/O 完成后返回原队列
    • 动态分配,I/O 完成时提高优先级,时间片用完时降低优先级

死锁

  • 条件
    • 互斥条件
    • 请求保持条件
    • 不可剥夺条件
    • 环路条件
  • 处理
    • 鸵鸟策略,不理睬策略
    • 预防策略
      • 预先静态分配
        • 🙂 预先分配所需资源,降低并发度
        • 🙃 有时所需资源未知
      • 资源有序分配
        • 🙂 把资源分类按顺序排列
        • 🙃 排列资源的开销
    • 避免策略
      • 银行家算法
        • 🙂 检测每个进程发出的的资源请求,若发现资源分配后系统进入不安全的状态就不允许访问
        • 🙃 大量开销
    • 检测与解除
      • 系统定时检测死锁
      • 强行剥夺资源分配给进程
      • 逐个撤销死锁进程

银行家算法

在时刻T0T_0有进程P1,P2,P3,P4,P5P_1,P_2,P_3,P_4,P_5请求资源R1,R2,R3R_1,R_2,R_3

进程最大需求量 R1/已分配最大需求量 R2/已分配最大需求量 R3/已分配
P16/14/12/1
P22/22/12/1
P38/21/11/0
P42/12/21/1
P53/14/12/1
剩余110

线程

  • 线程是进程中的一个实体
  • 线程作为调度和分配的基本单元
  • 进程作为独立分配资源的单位
  • 用户级线程不依赖于内核
  • 内核支持线程依赖于内核