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

189 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 进程管理
## 1. 进程的组成
**进程Process** 是程序在一个数据集合上的一次执行过程,是系统进行资源分配和调度的基本单位。
进程的组成包括:
- **程序代码**:描述进程所要完成的功能
- **数据集**:程序在执行时所需要的数据和工作区
- **进程控制块PCB****进程存在的唯一标志**,包含以下信息:
- 进程标识符PID
- 进程状态
- 进程优先级
- CPU现场保护区寄存器、程序计数器等
- 内存管理信息(页表/段表指针)
- I/O状态信息
- 记账信息
- 调度信息
## 2. 进程内存映像
进程的内存空间布局(内存映像)从低地址到高地址依次为:
| 区域 | 说明 |
|------|------|
| **代码段Text** | 存放可执行代码,通常只读 |
| **数据段Data** | 存放已初始化的全局变量和静态变量 |
| **BSS段** | 存放未初始化的全局变量和静态变量初始化为0 |
| **堆Heap** | 动态分配内存,向上增长 |
| **共享库** | 共享代码和数据 |
| **栈Stack** | 存放函数调用、局部变量,向下增长 |
| **环境/命令行参数** | 环境变量和命令行参数 |
## 3. 进程状态和转换
### 三状态模型
```mermaid
stateDiagram-v2
[*] --> 就绪: 创建
就绪 --> 运行: 调度
运行 --> 就绪: 时间片用完
运行 --> 阻塞: 等待事件
阻塞 --> 就绪: 事件完成
运行 --> [*]: 终止
```
- **创建态New**:进程正在被创建
- **就绪态Ready**已获得除CPU外的所有资源等待CPU
- **运行态Running**正在CPU上执行
- **阻塞态Blocked/Waiting**因等待I/O或其他资源而暂停
- **终止态Terminated**:进程执行完毕
### 五状态模型
```mermaid
stateDiagram-v2
[*] --> 创建: 新建进程
创建 --> 就绪: 初始化完成
就绪 --> 运行: 调度
运行 --> 就绪: 时间片用完
运行 --> 阻塞: 等待事件
阻塞 --> 就绪: 事件完成
运行 --> 终止: 退出
终止 --> [*]: 释放资源
```
在基本三状态基础上增加:
- **创建态**分配PCB初始化资源
- **终止态**释放资源保留PCB
### 七状态模型
```mermaid
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 Thread**OS直接支持内核管理
3. **轻量级进程LWP**:一对一模型中的中间层
---
> **核心要点**
> - PCB是进程存在的唯一标志
> - 进程是资源分配单位线程是CPU调度单位
> - 线程共享进程资源,创建/切换开销小
> - 进程通信需要IPC线程间可直接通信