目录

  1. 概述
  2. 操作系统的角色
  3. 进程与线程
  4. CPU 调度
  5. 内存管理
  6. 文件系统
  7. 并发与同步
  8. Linux 与 AI 工程
  9. 参考文献

1 概述 {#1}

操作系统(Operating System, OS)是管理计算机硬件与软件资源的系统软件,是用户程序与硬件之间的桥梁。对 AI 工程师而言,操作系统知识贯穿始终:多进程训练、显存管理、文件 I/O、容器隔离、分布式调度都建立在 OS 概念之上。

核心职责:

资源管理(CPU/内存/存储/设备)
+ 进程与线程调度
+ 内存分配与虚拟内存
+ 文件系统
+ 并发与同步
+ 安全与保护

2 操作系统的角色 {#2}

2.1 三种视角

视角 说明
资源管理器 分配 CPU、内存、存储、设备给程序
虚拟机 向上层程序提供抽象的、友好的执行环境
守护者 隔离进程、保护系统安全

2.2 内核与用户态

  • 内核态(Kernel Mode):可执行特权指令,管理硬件;
  • 用户态(User Mode):运行普通程序,受保护;
  • 通过系统调用(syscall)从用户态进入内核态。
应用程序 ──► 系统调用 ──► 内核 ──► 硬件

3 进程与线程 {#3}

3.1 进程(Process)

进程是运行中的程序的实例,包含:

  • 代码段、数据段、堆、栈;
  • 程序计数器、寄存器状态;
  • 文件描述符、环境变量。

进程间相互隔离(虚拟地址空间独立),通信需通过 IPC(进程间通信):管道、消息队列、共享内存、Socket。

3.2 线程(Thread)

线程是进程内的执行单元,共享进程的地址空间:

  • 创建/切换开销比进程小;
  • 同一进程的线程共享内存,天然便于数据共享;
  • 多线程需处理并发安全(锁、原子操作)。

3.3 进程状态

新建 → 就绪 → 运行 → 阻塞
           ↑      │
           └──────┘
  • 就绪:等待 CPU;
  • 运行:占用 CPU;
  • 阻塞:等待 I/O 或事件。

4 CPU 调度 {#4}

4.1 调度目标

  • 公平性:每个进程都有机会;
  • 响应时间短(交互式);
  • 吞吐量高(批处理);
  • 低开销、低饥饿。

4.2 常见算法

算法 特点
FCFS(先来先服务) 简单,可能出现护航效应
SJF(最短作业优先) 平均等待最短,需预知运行时间
时间片轮转 (RR) 轮流分配时间片,响应快
优先级调度 高优先级先执行,可能饥饿
多级反馈队列 综合多种策略,现代 OS 常用

4.3 与 AI 的关系

  • 训练任务常按”大作业”批处理调度;
  • GPU 集群调度器(Kubernetes/Slurm)本质上是”进程+资源”调度在集群层面的扩展(见 ai-infrastructure.md)。

5 内存管理 {#5}

5.1 虚拟内存

虚拟内存(Virtual Memory)让每个进程拥有独立的、看似连续的地址空间:

虚拟地址 → 页表 (Page Table) → 物理地址
  • 分页(Paging):内存按固定大小页(如 4KB)管理;
  • 页表:记录虚拟页到物理页的映射;
  • TLB:页表的高速缓存,加速地址转换。

5.2 页面置换

物理内存不足时需换出页面:

  • FIFO、LRU、Clock 等算法;
  • 缺页(Page Fault):访问未驻留页时触发磁盘加载。

5.3 与 AI 的关系

  • GPU 显存管理借鉴了分页思想(如 vLLM 的 PagedAttention);
  • 大模型推理中的 KV Cache 管理本质是”内存分页”问题(见 inference-implementation.md);
  • 显存不足时可换出到 CPU/SSD(Offloading,见 edge-on-device.md)。

6 文件系统 {#6}

6.1 层次与抽象

文件系统把存储设备组织为目录树,屏蔽底层磁盘细节:

/ (根目录)
├── home/  用户目录
├── etc/   配置文件
├── var/   日志
├── tmp/   临时文件
└── data/  数据集

6.2 关键概念

  • inode:保存文件的元数据(权限、大小、数据块位置);
  • 路径:绝对路径 / 相对路径;
  • 挂载(Mount):把设备接入目录树;
  • 软/硬链接:文件引用方式。

6.3 分布式文件系统

大规模训练需要跨节点共享数据:NFS、Lustre、GPFS、对象存储(S3)等(见 ai-infrastructure.md)。


7 并发与同步 {#7}

7.1 竞态条件

多个线程同时访问共享资源可能导致结果不确定,称为竞态条件(Race Condition)

7.2 同步机制

机制 作用
互斥锁 (Mutex) 保证同时只有一个线程进入临界区
信号量 (Semaphore) 控制并发访问数量
条件变量 线程间等待/通知
原子操作 不可分割的读-改-写

7.3 死锁

两个或多个进程互相等待对方释放资源而永久阻塞。必要条件:互斥、占有且等待、不可抢占、循环等待。破解方法:破坏任一条件。

7.4 与 AI 的关系

  • 多进程数据加载(DataLoader worker)需避免竞态;
  • 分布式训练中梯度同步(AllReduce)本质是跨进程并发协调;
  • 容器/多租户环境下资源竞争是常见问题。

8 Linux 与 AI 工程 {#8}

8.1 常用命令

nvidia-smi          # 查看 GPU 状态
ps aux | grep python # 查看进程
top / htop          # 查看 CPU/内存
df -h               # 磁盘空间
free -h             # 内存使用
kill -9 <pid>       # 终止进程
nohup python train.py &   # 后台运行

8.2 与 AI 相关的系统概念

  • 虚拟内存与显存:PyTorch 的 torch.cuda 显存管理、OOM 排查;
  • 文件系统性能:数据集放在 SSD/NVMe 以加速读取;
  • 进程隔离:Docker/容器基于命名空间与 cgroup 实现隔离与资源限制;
  • 环境变量CUDA_VISIBLE_DEVICESPYTHONPATH 等控制运行环境。

8.3 常见排查

显存不足 → nvidia-smi + 减小 batch / 用梯度累积
CPU 100% → 检查数据加载 worker 数量
磁盘满  → df -h + 清理 checkpoint
死锁    → 检查多进程共享状态与锁

9 参考文献 {#9}

[1] A. Silberschatz, P. B. Galvin, G. Gagne, Operating System Concepts, Wiley.

[2] A. S. Tanenbaum, H. Bos, Modern Operating Systems, Pearson.

[3] B. W. Kernighan, R. Pike, The UNIX Programming Environment, Prentice Hall.

[4] M. Kerrisk, The Linux Programming Interface, No Starch Press.

[5] Linux Kernel Documentation, https://www.kernel.org/doc/

留下评论