操作系统核心知识
2026/8/24大约 5 分钟
操作系统核心知识
操作系统是 Android 开发的底层基础。本章汇总进程与线程、死锁、内存管理、虚拟内存、进程调度等核心概念。
一、进程与线程
关系:
- 一个进程可以创建和撤销另一个线程,同一个进程中的线程可以并发执行。
- 进程是资源分配的基本单位,线程是 CPU 调度的基本单位。
- 同一进程中的多个线程共享进程的内存空间,因此线程之间不存在"通信"问题,因为它们本来就共享同一片内存。
线程间的制约关系
| 制约类型 | 说明 |
|---|---|
| 直接制约(同步关系) | 一个线程的处理结果是另一个线程的输入,线程之间直接制约 |
| 间接制约(互斥访问) | 两个线程访问同一资源,该资源同一时刻只能被一个线程访问。某种意义上互斥是一种制约关系更小的同步 |
二、进程的几种状态与转换
进程的基本状态:
- 就绪态(Ready): 已具备运行条件,等待分配 CPU。
- 运行态(Running): 占用 CPU 正在运行。
- 阻塞态(Blocked): 等待某事件(如 I/O 完成)而暂时无法运行。
状态转换:
- 就绪 → 运行:进程被调度程序选中,分配 CPU。
- 运行 → 就绪:时间片用完,或被更高优先级进程抢占。
- 运行 → 阻塞:进程请求 I/O 或等待事件。
- 阻塞 → 就绪:等待的事件完成,进入就绪队列。
三、死锁
死锁的必要条件(四个同时满足):
| 条件 | 说明 |
|---|---|
| 互斥条件 | 资源同一时刻只能被一个进程使用 |
| 请求与保持条件 | 进程已持有资源,又请求新的资源而被阻塞,且不释放已持有的资源 |
| 不可剥夺条件 | 进程已获得的资源在未使用完之前不能被强行剥夺 |
| 循环等待条件 | 若干进程之间形成一种头尾相接的循环等待资源关系 |
死锁的处理方法:
- 预防死锁: 破坏四个必要条件之一,如资源一次性分配(破坏请求与保持)、可剥夺资源(破坏不可剥夺)、资源有序分配(破坏循环等待)。
- 避免死锁: 使用银行家算法,在资源分配前判断系统是否处于安全状态。
- 检测与解除: 允许死锁发生,通过资源分配图检测,然后采用资源剥夺、撤销进程等方式解除。
四、内存管理方式
| 管理方式 | 原理 | 特点 |
|---|---|---|
| 段式存储 | 按程序的逻辑结构分段(代码段、数据段、栈段等) | 便于程序的模块化与共享,段长可变,易产生外部碎片 |
| 页式存储 | 将内存和逻辑地址空间划分为固定大小的页 | 无外部碎片,有内部碎片,通过页表映射 |
| 段页式存储 | 先分段再分页 | 兼具两者优点:逻辑清晰且无外部碎片 |
五、虚拟内存
什么是虚拟内存?
虚拟内存是操作系统内存管理的一种技术:它把物理内存与逻辑地址空间分离,使得每个进程都拥有独立的、连续的地址空间,大小可以超过物理内存。当程序访问的页面不在内存中时,通过缺页中断将所需页面从磁盘换入。
逻辑地址与物理地址的区别:
| 对比项 | 逻辑地址 | 物理地址 |
|---|---|---|
| 定义 | CPU 生成的地址,进程视角的地址 | 内存单元的真实地址 |
| 特点 | 与物理内存无关,需要地址转换 | 加载到内存寄存器中的地址 |
| 转换 | 通过 MMU + 页表/段表转换 | 直接寻址 |
六、进程调度算法
| 调度算法 | 原理 | 特点 |
|---|---|---|
| 先来先服务(FCFS) | 按到达顺序调度 | 简单,但不利于短作业 |
| 短作业优先(SJF) | 优先调度运行时间短的 | 平均等待时间短,可能饿死长作业 |
| 时间片轮转(RR) | 按时间片轮流调度 | 响应快,适合分时系统 |
| 优先级调度 | 按优先级高低调度 | 高优先级先执行,低优先级可能饿死 |
| 多级反馈队列 | 多个就绪队列,优先级递减、时间片递增 | 兼顾响应时间与吞吐量,现代操作系统常用 |
七、Linux 下的 IPC 通信方式
| 方式 | 特点 | 适用场景 |
|---|---|---|
| 管道(pipe) | 半双工,数据单向流动,仅限有亲缘关系(父子)进程间通信 | 简单字节流传输 |
| 命名管道(named pipe) | 克服管道无名字限制,允许无亲缘关系进程通信,文件系统中有对应文件名(mkfifo) | 无亲缘进程通信 |
| 信号(signal) | 通知接收进程有某种事件发生,也可发送信号给进程本身 | 事件通知 |
| 消息队列 | 消息的链接表,克服信号承载信息少、管道只能承载无格式字节流等缺点 | 有格式消息传递 |
| 共享内存 | 多个进程访问同一块内存,最快的 IPC 形式,常与信号量结合使用实现同步互斥 | 大量数据快速交换 |
| 内存映射 | 进程把共享文件映射到自己的进程地址空间 | 文件共享 |
| 信号量(semaphore) | 主要用于进程间及同一进程不同线程间的同步 | 同步与互斥 |
| 套接字(Socket) | 最一般的 IPC 机制,可用于不同机器之间的进程间通信 | 跨网络通信 |