进程与上下文切换

进程与上下文切换

Related: 进程控制与Fork 虚拟内存基础

1. 进程 (Process) 的双重抽象

进程是计算机科学中最成功的抽象概念之一,它给应用程序提供了两个关键的错觉:

  1. 独立的逻辑控制流 (Logical Control Flow):

    • 错觉: 程序似乎独占 CPU。
    • 真相: OS 通过 时间分片 (Time Slicing),在多个进程间快速切换。
    • 并发 (Concurrency): 如果两个流在时间上重叠,它们就是并发的。
  2. 私有的地址空间 (Private Address Space):

    • 错觉: 程序似乎独占整个内存系统。
    • 真相: OS 利用 虚拟内存 (Virtual Memory) 机制,给每个进程分配独立的页表。
    • 布局: 代码段 数据段 共享库 内核空间 (用户不可见)。

2. 上下文切换 (Context Switch)

这是多任务系统运转的核心机制。

  • 上下文 (Context): 内核重启一个被抢占进程所需的状态集合。
    • 通用寄存器、PC、EFLAGS。
    • 内核栈、各种内核数据结构 (页表基址、文件表)。
  • 调度 (Scheduling): 内核中的 调度器 (Scheduler) 决定下一个运行谁。
  • 切换流程 (The Flow):
    1. 保存当前进程 A 的上下文。
    2. 恢复之前被抢占进程 B 的上下文。
    3. 将控制权传递给 B。

3. 模式切换 (Mode Switch)

  • 用户模式 (User Mode): 权限受限,不能执行特权指令,不能直接访问硬件。
  • 内核模式 (Kernel Mode): 最高权限 (Ring 0)。
  • 触发点: 只有通过 异常 (ECF) 才能从用户模式切入内核模式。