操作系统原理
→ 返回计算机基础
操作系统(OS)是管理硬件资源、为上层应用提供抽象接口的系统软件,核心职责包括:进程管理、内存管理、文件系统、设备驱动和安全控制。
内核类型
| 类型 | 说明 | 代表 |
|---|---|---|
| 宏内核(Monolithic) | 所有系统服务运行在内核态,性能高但耦合重 | Linux、Unix |
| 微内核(Microkernel) | 只保留最小内核,其余运行在用户态,稳定但 IPC 开销大 | Mach、QNX |
| 混合内核 | 兼顾两者,部分服务在内核态 | Windows NT、macOS XNU |
系统调用
用户程序通过**系统调用(syscall)**请求内核服务,触发从用户态到内核态的模式切换(ring 3 → ring 0)。
用户程序 → 触发软中断(syscall 指令)
→ CPU 切换到内核态
→ 内核执行对应服务
→ 返回用户态,继续执行
常见分类:进程控制(fork/exec/exit)、文件操作(open/read/write)、内存管理(mmap/brk)、网络(socket/connect)。
CPU 调度
| 算法 | 特点 | 适用场景 |
|---|---|---|
| FCFS(先来先服务) | 简单,有护航效应 | 批处理 |
| SJF(最短作业优先) | 平均等待时间最短,需预知执行时间 | 批处理 |
| 轮转(Round Robin) | 公平,响应时间均匀,时间片大小关键 | 分时系统 |
| 优先级调度 | 高优先级先执行,可能饥饿 | 实时/通用 |
| 多级反馈队列 | 动态调整优先级,兼顾响应和吞吐 | Linux CFS 思想来源 |
调度指标:CPU 利用率、吞吐量、周转时间、等待时间、响应时间。
内存管理
每个进程拥有独立的虚拟地址空间,通过 MMU 映射到物理内存,实现隔离和保护。
虚拟地址空间(Linux 64 位)
┌─────────────┐ 高地址
│ 内核空间 │ (用户态不可访问)
├─────────────┤
│ 栈(↓) │
│ ... │
│ 堆(↑) │
├─────────────┤
│ BSS 段 │ 未初始化全局变量
│ 数据段 │ 已初始化全局/静态变量
│ 代码段 │ 只读,可执行
└─────────────┘ 低地址(0)
分页:将地址空间分为固定大小的页(通常 4 KB),通过页表映射物理帧;TLB 缓存热点映射加速转换;缺页中断时从磁盘换入。
页面替换:OPT(理论最优)→ LRU(实用近似)→ CLOCK(LRU 近似实现)。
文件系统
- inode:存储文件元数据和数据块地址,不含文件名
- 目录:文件名到 inode 的映射表
| 文件系统 | 平台 | 特点 |
|---|---|---|
| ext4 | Linux | 日志、extent 树 |
| XFS | Linux | 大文件/高并发 |
| NTFS | Windows | 日志、ACL、压缩/加密 |
| APFS | macOS | 写时复制、快照、加密 |
中断与异常
| 类型 | 来源 | 示例 |
|---|---|---|
| 硬件中断 | 外部设备 | 键盘输入、网卡收包、时钟中断 |
| 异常 | CPU 内部 | 除零、缺页、非法指令 |
| 系统调用 | 用户主动触发 | read()、write() |
中断发生:保存现场 → 跳转中断向量表 → 执行处理程序 → 恢复现场。