第二章:进程与线程(Processes and Threads)


一、基本概念

  • Multiprogramming(多道程序设计) 一种操作方式,允许多个程序交替运行在同一个处理器上,提高CPU利用率。
  • Concurrency(并发性) 指多个程序或任务看似同时运行,提高系统的响应能力和吞吐量。

二、进程(Process)

1. 进程的定义

进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位。

2. 进程的创建方式(Process Creation)

  • 系统初始化(System Initialization)
  • 调用系统调用(如 fork()
  • 用户请求(User request)
  • 批处理作业启动(Batch job initiation)

3. 进程的终止方式(Process Termination)

  • 正常退出(Normal exit,主动)
  • 错误退出(Error exit,主动)
  • 致命错误(Fatal error,被动)
  • 被其他进程杀死(Killed by another process,被动)

4. 进程状态(Process States)

  • 运行态(Running)
  • 就绪态(Ready)
  • 阻塞态(Blocked)

5. 进程实现(Process Implementation)

操作系统为每个进程维护一个进程控制块(PCB,Process Control Block),内容包括:

  • 进程标识(PID)
  • 进程状态信息
  • 进程控制信息(如寄存器值、资源分配等)

三、线程(Thread)

1. 用户级线程(User-Level Threads, ULT)

优点:

  • 可在任何操作系统上运行
  • 线程切换速度远快于进程切换
  • 可扩展性更强

缺点:

  • 系统调用阻塞时,整个进程中的所有线程都会被阻塞(因为内核不知道线程的存在)

2. 线程与进程的比较(Thread vs Process)

特性 进程(Process) 线程(Thread)
定义 执行程序的基本单位,拥有独立资源 执行路径,隶属于进程
所属关系 相互独立 线程共享进程资源
切换开销
通信方式 进程间通信(IPC) 共享内存,通信简单快速
故障影响 相互独立,互不影响 一个线程崩溃可能影响整个进程

四、顺序进程模型

  • 顺序进程是指从头到尾连续、不被中断地执行的一段程序。
  • 上下文切换(context switch)如果要显式保存/恢复状态,就会破坏顺序模型。

五、系统调用方式

1. 阻塞系统调用(Blocking Call)

  • 调用如 read(), write(), fread(), getc() 时,调用进程会进入阻塞状态直到操作完成。
  • 简单、容易编程,但会造成等待。

2. 非阻塞系统调用(Non-Blocking Call)

  • I/O 调用立即返回,调用者可以继续执行。
  • 操作完成时,操作系统通过中断通知进程。
  • 实现复杂,适合高并发编程。

六、中断(Interrupt)

  • 指CPU在检测到某种紧急或预定事件后,暂停当前执行任务,转而处理该事件的过程。
  • 中断处理完毕后,CPU会继续原来的工作。
  • 实现系统响应外设、异常等关键机制。