postgraduate-prep/subjects/os/01_进程管理.md

5.7 KiB
Raw Blame History

进程管理

1. 进程的组成

进程Process 是程序在一个数据集合上的一次执行过程,是系统进行资源分配和调度的基本单位。

进程的组成包括:

  • 程序代码:描述进程所要完成的功能
  • 数据集:程序在执行时所需要的数据和工作区
  • 进程控制块PCB进程存在的唯一标志,包含以下信息:
    • 进程标识符PID
    • 进程状态
    • 进程优先级
    • CPU现场保护区寄存器、程序计数器等
    • 内存管理信息(页表/段表指针)
    • I/O状态信息
    • 记账信息
    • 调度信息

2. 进程内存映像

进程的内存空间布局(内存映像)从低地址到高地址依次为:

区域 说明
代码段Text 存放可执行代码,通常只读
数据段Data 存放已初始化的全局变量和静态变量
BSS段 存放未初始化的全局变量和静态变量初始化为0
Heap 动态分配内存,向上增长
共享库 共享代码和数据
Stack 存放函数调用、局部变量,向下增长
环境/命令行参数 环境变量和命令行参数

3. 进程状态和转换

三状态模型

stateDiagram-v2
    [*] --> 就绪: 创建
    就绪 --> 运行: 调度
    运行 --> 就绪: 时间片用完
    运行 --> 阻塞: 等待事件
    阻塞 --> 就绪: 事件完成
    运行 --> [*]: 终止
  • 创建态New:进程正在被创建
  • 就绪态Ready已获得除CPU外的所有资源等待CPU
  • 运行态Running正在CPU上执行
  • 阻塞态Blocked/Waiting因等待I/O或其他资源而暂停
  • 终止态Terminated:进程执行完毕

五状态模型

stateDiagram-v2
    [*] --> 创建: 新建进程
    创建 --> 就绪: 初始化完成
    就绪 --> 运行: 调度
    运行 --> 就绪: 时间片用完
    运行 --> 阻塞: 等待事件
    阻塞 --> 就绪: 事件完成
    运行 --> 终止: 退出
    终止 --> [*]: 释放资源

在基本三状态基础上增加:

  • 创建态分配PCB初始化资源
  • 终止态释放资源保留PCB

七状态模型

stateDiagram-v2
    [*] --> 创建: 新建进程
    创建 --> 就绪挂起: 创建完成
    创建 --> 就绪: 直接调入内存
    
    就绪挂起 --> 就绪: 激活
    就绪 --> 就绪挂起: 挂起
    
    就绪 --> 运行: 调度
    运行 --> 就绪: 时间片用完
    运行 --> 阻塞: 等待事件
    阻塞 --> 就绪: 事件完成
    
    阻塞 --> 阻塞挂起: 挂起
    阻塞挂起 --> 阻塞: 激活
    
    运行 --> 终止: 退出
    终止 --> [*]: 释放资源

在五状态基础上增加挂起状态:

  • 就绪挂起:在外存,准备调入内存
  • 阻塞挂起:在外存,等待事件完成

4. 进程的通信

进程间通信IPCInter-Process Communication主要有以下方式

4.1 高级通信方式

方式 说明
管道Pipe 半双工,用于父子/兄弟进程间通信
命名管道FIFO 无亲缘关系的进程也可通信
消息队列 消息链表,按类型优先級排队
共享内存 多个进程共享同一块内存区域(最快)
信号量 计数器,用于进程同步
套接字Socket 可用于不同主机间进程通信

4.2 低级通信方式

  • 信号Signal:异步通知机制

4.3 通信机制比较

机制 效率 适用场景
共享内存 最高 频繁数据交换
管道/消息队列 中等 少量数据、顺序访问
信号量 同步控制

5. 线程与多线程模型

5.1 线程的概念

线程Thread 是CPU调度的基本单位是进程中的一个执行流。同一个进程中的线程共享进程的地址空间和资源。

5.2 线程与进程的区别

特征 进程 线程
资源拥有 独立资源 共享进程资源
调度单位 进程 线程
地址空间 独立地址空间 共享地址空间
开销 大(创建/切换开销大) 小(轻量级)
通信 需要IPC 直接读写共享数据
独立性 独立 依赖进程

5.3 线程的组成

每个线程拥有:

  • 线程ID
  • 程序计数器PC
  • 寄存器集合

线程共享:

  • 代码段、数据段
  • 文件描述符
  • 信号处理器
  • 当前工作目录
  • 用户ID/组ID

5.4 多线程模型

模型 说明 优点 缺点
多对一 多个用户线程映射到一个内核线程 效率高 一个线程阻塞导致整个进程阻塞
一对一 每个用户线程映射到一个内核线程 并发性好 线程创建开销大,受限内核线程数
多对多 多个用户线程映射到多个内核线程 综合两者优点 实现复杂

5.5 线程的状态

线程状态与进程类似:

  • 就绪:已准备好运行
  • 运行正在CPU执行
  • 阻塞:等待资源或事件
  • 终止:执行完毕

5.6 线程的实现方式

  1. 用户线程User Thread:内核不知道线程存在,线程库管理
  2. 内核线程Kernel ThreadOS直接支持内核管理
  3. 轻量级进程LWP:一对一模型中的中间层

核心要点

  • PCB是进程存在的唯一标志
  • 进程是资源分配单位线程是CPU调度单位
  • 线程共享进程资源,创建/切换开销小
  • 进程通信需要IPC线程间可直接通信