操作系统
操作系统是硬件和应用的中间层:管理 CPU、内存、磁盘、设备,给进程提供抽象(进程、文件、地址空间)。面试主线:操作系统管什么、系统调用怎么工作、用户态内核态为什么分。
操作系统管什么
| 资源 | 抽象 | 管理机制 |
|---|---|---|
| CPU | 进程/线程 | 调度 |
| 内存 | 地址空间 | 虚拟内存、分页 |
| 磁盘 | 文件 | 文件系统 |
| 设备 | 文件(一切皆文件) | 设备驱动、IO |
核心思想:用抽象隔离硬件差异,用机制管理资源竞争。应用只和抽象打交道,不用关心硬件细节。
用户态与内核态
系统调用: 用户态请求, 内核态执行
- 用户态:应用运行,只能执行普通指令,访问受限(不能直接操作硬件)
- 内核态:内核代码运行,可执行特权指令(IO、内存管理、中断)
- 系统调用:用户态到内核态的唯一合法通道(read、write、fork、mmap)
- 切换代价:保存/恢复上下文,有性能开销(所以减少系统调用是优化点)
为什么分:安全隔离。应用出错不能搞坏内核和其他进程;权限集中在内核,应用无法绕过。
系统调用
| 系统调用 | 作用 |
|---|---|
| fork / exec | 创建进程、加载程序 |
| read / write | 文件 IO |
| open / close | 打开/关闭文件 |
| mmap | 内存映射 |
| socket / connect / accept | 网络 |
面试点:进程的视角里一切都是文件(fd 文件描述符),read/write 是统一的 IO 入口。每进程有文件描述符表,open 返回表项索引。
本分类地图
- 进程与线程:并发的基本单元
- 进程调度 / IPC / 同步互斥 / 死锁:进程的调度与协作
- 内存管理 / 页面置换与 IO:内存与磁盘
- 文件系统 / Linux 性能排查:存储与实战
面试追问
- 用户态和内核态的区别? 权限不同:用户态受限指令,内核态特权指令。系统调用是切换通道
- 为什么要有系统调用? 安全隔离:应用不能直接操作硬件,必须经内核检查后执行
- 系统调用开销大吗? 大:上下文切换。高 IO 场景减少系统调用是优化方向(批量读写、mmap)
- 一切皆文件? 进程视角:文件、设备、socket 都是 fd,read/write 统一操作。Linux 的设计哲学
- fork 做了什么? 复制父进程(写时复制 COW),返回子进程 pid。exec 加载新程序替换映像