# 2.1 进程与线程 ## 一、进程的概念 ### 1.1 进程的定义 **进程(Process)** 是程序的一次执行过程,是系统进行资源分配和调度的基本单位。 **进程与程序的区别**: | 进程 | 程序 | |-----|------| | 动态概念,有生命周期 | 静态概念,是一组指令的集合 | | 包含程序、数据和进程控制块 | 仅包含代码 | | 可以并发执行 | 不能并发执行 | | 需要资源(CPU、内存、I/O) | 不需要资源 | **进程的特征**: 1. **动态性**:进程是程序的执行过程,有创建、执行、消亡 2. **并发性**:多个进程可以同时存在于内存中 3. **独立性**:进程是独立运行的基本单位 4. **异步性**:进程按各自独立的、不可预知的速度推进 5. **结构性**:进程由程序段、数据段和进程控制块组成 ### 1.2 进程的组成 进程由三部分组成: #### 程序段(代码段) - 存放程序代码 - 通常是只读的 - 可以被多个进程共享 #### 数据段 - 存放程序运行时的数据 - 包括全局变量、静态变量等 #### 进程控制块(PCB) - 操作系统管理进程的数据结构 - 是进程存在的唯一标志 - 包含进程的所有信息 ### 1.3 进程控制块(PCB) **PCB 包含的信息**: **进程标识信息**: - 进程标识符(PID) - 父进程标识符 - 用户标识符 **处理机状态信息**: - 程序计数器(PC) - 状态寄存器(PSW) - 通用寄存器内容 **进程控制信息**: - 进程状态 - 优先级 - 资源清单 - 打开文件表 - 同步和通信信息 - 链接指针 **PCB 的组织方式**: - 线性表:将所有 PCB 存放在一个数组中 - 链接表:将相同状态的 PCB 链接成队列 - 索引表:按状态建立索引表 --- ## 二、线程的概念 ### 2.1 线程的引入 **引入线程的原因**: - 进程是资源的拥有者,切换开销大 - 需要更小的能独立运行的基本单位 - 提高并发度 **线程的定义**: 线程是进程中的一个实体,是被系统独立调度和分派的基本单位。 ### 2.2 线程与进程的比较 | 特性 | 进程 | 线程 | |-----|------|------| | 资源拥有 | 拥有独立的地址空间和资源 | 共享进程的地址空间和资源 | | 调度单位 | 传统上既是资源分配单位又是调度单位 | 现代 OS 中线程是调度单位 | | 切换开销 | 大(需要切换地址空间) | 小(只需保存/恢复寄存器) | | 并发性 | 进程间可以并发 | 线程间可以并发,效率更高 | | 独立性 | 独立性强 | 独立性弱,共享进程资源 | | 创建时间 | 长 | 短 | | 终止时间 | 长 | 短 | | 通信 | 需要 IPC 机制 | 可以直接读写进程数据段 | ### 2.3 线程的实现方式 #### 用户级线程 **实现**:由用户程序通过线程库实现,内核不知道线程的存在。 **优点**: - 线程切换不需要内核介入,速度快 - 可以在不支持线程的操作系统上实现 - 每个进程可以自定义调度算法 **缺点**: - 一个线程阻塞会导致整个进程阻塞 - 不能利用多处理机并行 #### 内核级线程 **实现**:由操作系统内核直接支持,内核维护线程控制块。 **优点**: - 一个线程阻塞不影响其他线程 - 可以利用多处理机并行 - 内核可以调度线程 **缺点**: - 线程切换需要内核介入,开销较大 #### 组合方式(多对多模型) **实现**:将多个用户级线程映射到多个内核级线程。 **优点**: - 结合了用户级线程和内核级线程的优点 - 灵活性好 ### 2.4 线程的状态 线程的状态与进程类似: - 新建 - 就绪 - 运行 - 阻塞 - 终止 --- ## 三、进程与线程的关系 ### 3.1 包含关系 - 一个进程可以包含多个线程 - 至少有一个线程(主线程) - 线程共享进程的资源 ### 3.2 资源共享 **线程共享的资源**: - 进程的地址空间 - 打开的文件 - 代码段 - 数据段 - 堆 **线程私有的资源**: - 程序计数器 - 寄存器组 - 栈 - 线程控制块(TCB) ### 3.3 应用场景 **使用多进程**: - 需要高度隔离的任务 - 充分利用多核 CPU - 一个进程崩溃不影响其他进程 **使用多线程**: - 需要频繁通信和共享数据的任务 - 需要快速响应的任务 - 需要高效利用资源的任务 --- ## 四、进程的组织 ### 4.1 进程队列 操作系统将进程按状态组织成队列: **就绪队列**: - 存放就绪状态的进程 - 按调度算法排队 **阻塞队列**: - 存放等待某事件的进程 - 可按等待事件分为多个队列 **运行队列**: - 单处理机系统中只有一个进程在运行 - 多处理机系统中有多个进程在运行 ### 4.2 进程间关系 **父子关系**: - 创建进程的进程称为父进程 - 被创建的进程称为子进程 - 形成进程树 **进程组**: - 一组相关的进程 - 可以一起接收信号 --- ## 五、考研重点 1. **进程与程序的区别**:动态 vs 静态 2. **进程的组成**:程序段、数据段、PCB 3. **PCB 的内容**:标识信息、状态信息、控制信息 4. **线程与进程的区别**:资源拥有、调度单位、切换开销 5. **线程的实现方式**:用户级、内核级、组合方式 6. **线程共享和私有的资源** 7. **进程的组织**:就绪队列、阻塞队列 --- *下一节:2.2 进程的状态与转换*