Skip to main content

第四章:进程与线程

在操作系统中,进程和线程是资源管理和任务执行的基本单位。本章将深入探讨进程和线程的概念,分析它们的生命周期管理方式,并介绍常见的进程和线程调度策略,以帮助理解多任务操作系统的实现原理。

4.1 进程的概念、生命周期与管理

4.1.1 进程的概念

进程(Process) 是正在运行的程序的实例。我们可以把进程想象成一份在工厂里生产的订单。工厂会为每份订单分配机器和资源,独立完成每份订单的任务。类似地,操作系统为每个进程分配资源(如CPU时间和内存),确保多个程序能够“同时”运行。

打开电脑上的“浏览器”和“记事本”时,系统为每个应用创建了一个独立的进程。
这两个进程之间互不干扰,即使浏览器崩溃,记事本仍然能正常运行。

4.1.2 进程的生命周期

进程的生命周期通常包括以下状态:

  • 新建(New):就像一份订单刚下达时,进程处于“待生产”状态。
  • 就绪(Ready):一旦资源到位,进程就进入“就绪”状态,等待生产线(CPU)空闲。
  • 运行(Running):生产线空闲后,进程会获得资源,开始“加工”。
  • 等待(Waiting/Blocked):如果进程需要等待原料(比如I/O操作完成),它会暂停生产。
  • 终止(Terminated):订单完成,进程会释放资源并退出系统。
当打开的浏览器正在下载文件时,它会进入“等待”状态,一旦下载完成,
它就回到“就绪”状态并继续执行其他任务。

4.1.3 进程管理

操作系统通过 进程控制块(Process Control Block, PCB) 来管理和追踪每个进程的运行情况。PCB可以视作进程的“身份证”,其中包含了系统对进程的所有关键信息,包括:

  • 进程ID:用于唯一标识该进程。
  • 状态:记录进程当前的状态(如就绪、运行、等待等)。
  • 程序计数器:保存进程的下一个指令地址,以便暂停后恢复。
  • 内存地址:记录进程在内存中的位置和分配情况。

PCB 的存在确保了进程在多任务系统中的顺利运行,操作系统会随时更新PCB中的信息,以反映进程的最新状态。以下是进程管理的主要任务:

1. 创建进程:当用户启动应用程序或系统创建新任务时,操作系统会为该进程分配资源(如内存和CPU时间片),并初始化对应的PCB。如当打开一个浏览器时,系统会创建一个新的进程,并在内存中为该进程分配浏览器运行所需的资源,生成并初始化PCB。

2. 调度进程:进程调度程序会根据调度策略决定何时分配CPU给进程。调度策略决定了在系统资源有限的情况下,如何公平合理地为进程分配时间片。如浏览器和文本编辑器同时运行时,操作系统会在两者之间交替分配CPU时间,使得用户感觉两者都在“同时”运行。

3. 终止进程:当进程完成任务或被强制结束时,操作系统会释放该进程占用的资源,并删除对应的PCB。如当用户关闭浏览器窗口时,系统会结束该进程,将其资源返还系统,并从PCB列表中移除该进程的记录。

4.2 线程的概念与多线程模型

4.2.1 线程的概念

线程(Thread) 是进程的细化执行单元,多个线程可以在同一进程内并行运行。可以把线程比作一份订单中不同的生产任务——一份订单(进程)可能有“切割”“组装”“包装”等多个工序(线程),而这些工序可以同时进行。

在浏览器进程中,一个线程可以负责下载文件,另一个线程负责渲染网页内容。
这些线程共享同一个浏览器进程的资源,比如网络连接和内存。

4.2.2 多线程模型

常见的多线程模型如下:

  • 一对一模型:每个用户线程对应一个内核线程,允许多个线程真正并行。
示例:Windows系统中的应用每个任务线程都有对应的内核线程,提升并行处理能力。
  • 多对一模型:多个用户线程共享一个内核线程,但无法实现真正的并行。
示例:GNU Pth库中,多个任务共享一个内核线程,适用于轻量级任务,但资源竞争可能降低性能。
  • 多对多模型:用户线程与内核线程之间有弹性映射关系,适合多任务系统。
示例:Solaris系统中,多个任务动态分配给多个内核线程,提升系统响应速度并避免瓶颈。

4.3 进程和线程的调度策略

操作系统通过调度策略来管理进程和线程的运行顺序。调度策略决定了系统性能、响应速度和资源利用率等重要指标。

4.3.1 先来先服务(First-Come, First-Served, FCFS)

FCFS是最简单的调度算法,按照进程到达的顺序为其分配CPU时间片。每个进程都排队等待前一个进程完成,再获得CPU执行权限。

  • 优点:实现简单、易于理解。
  • 缺点:容易导致“等待时间过长”的情况,即早到的进程等待时间可能较长。
  • 适用场景:适用于批处理系统,但在交互系统中表现不佳。

4.3.2 短作业优先(Shortest Job Next, SJN)

SJN优先处理执行时间较短的任务,可以有效减少平均等待时间。但由于无法预先知道执行时间,SJN在实际应用中较为有限。

  • 优点:减少平均等待时间,提高系统效率。
  • 缺点:长任务可能被长时间推迟(即“饥饿”问题)。
  • 适用场景:适合执行时间较确定的系统环境。

4.3.3 多级反馈队列(Multilevel Feedback Queue)

多级反馈队列是一种综合调度算法,将进程按优先级划分到不同的队列中。系统会动态调整进程的优先级,将长时间未完成的进程调到较高优先级的队列,确保资源合理分配。

  • 优点:适合多任务环境,既支持短任务快速响应,又避免长任务“饥饿”。
  • 缺点:实现复杂,需要精细调整不同队列的优先级。
  • 适用场景:广泛应用于需要处理多种任务类型的操作系统中,如UNIX系统。

本章内容介绍了操作系统中进程和线程的基础概念、生命周期、管理方式以及多线程模型,并分析了几种常见的调度策略。下一章将深入讨论内存管理,包括内存分配方式、分页和分段管理等。