进程与上下文切换
进程与上下文切换
1. 进程 (Process) 的双重抽象
进程是计算机科学中最成功的抽象概念之一,它给应用程序提供了两个关键的错觉:
-
独立的逻辑控制流 (Logical Control Flow):
- 错觉: 程序似乎独占 CPU。
- 真相: OS 通过 时间分片 (Time Slicing),在多个进程间快速切换。
- 并发 (Concurrency): 如果两个流在时间上重叠,它们就是并发的。
-
私有的地址空间 (Private Address Space):
- 错觉: 程序似乎独占整个内存系统。
- 真相: OS 利用 虚拟内存 (Virtual Memory) 机制,给每个进程分配独立的页表。
- 布局: 代码段 → 数据段 → 堆 → 共享库 → 栈 → 内核空间 (用户不可见)。
2. 上下文切换 (Context Switch)
这是多任务系统运转的核心机制。
- 上下文 (Context): 内核重启一个被抢占进程所需的状态集合。
- 通用寄存器、PC、EFLAGS。
- 内核栈、各种内核数据结构 (页表基址、文件表)。
- 调度 (Scheduling): 内核中的 调度器 (Scheduler) 决定下一个运行谁。
- 切换流程 (The Flow):
- 保存当前进程 A 的上下文。
- 恢复之前被抢占进程 B 的上下文。
- 将控制权传递给 B。
3. 模式切换 (Mode Switch)
- 用户模式 (User Mode): 权限受限,不能执行特权指令,不能直接访问硬件。
- 内核模式 (Kernel Mode): 最高权限 (Ring 0)。
- 触发点: 只有通过 异常 (ECF) 才能从用户模式切入内核模式。