操作系统是计算机的大脑和调度中心,理解它是每个程序员和系统工程师进阶的必经之路。本文系统梳理了操作系统的类型、进程与线程管理、并发控制及死锁问题,帮助你掌握扎实基础。
一、操作系统概述
操作系统(Operating System,简称OS)是计算机硬件和应用程序之间的桥梁,负责管理硬件资源并为应用程序提供运行环境。
核心作用:
资源管理:统筹调度CPU、内存、存储设备和外设
程序执行环境:提供系统调用,保证程序运行安全
抽象硬件:隐藏硬件复杂性,统一接口调用
二、操作系统的类型
三、单操作系统的特征与限制
特征:一台机器只运行一个操作系统实例,统一管理硬件资源和用户任务。
限制:扩展性和容错性有限,难以支持现代大规模分布式和云计算需求。
四、进程与程序
五、进程的状态及状态模型
1. 三态模型
操作系统经典的进程状态模型包含:
状态转换示意
+------------+ 调度 +------------+
| 就绪态 | -------------> | 运行态 |
+------------+ +------------+
^ |
| 时间片用完或中断 | 请求I/O或等待资源
| v
+------------+ <------------- +------------+
| 等待态 | 事件完成 | 运行态 |
+------------+ +------------+
2. 五态模型(细化进程状态)
为了更细致地管理进程,现代操作系统引入了“活动”与“静止”的状态划分,常用的五态模型包括:
五态模型状态转换及原因
允许(New)
↓ 创建完成
活动就绪(Ready Active) <----> 运行(Running)
↑ ↓
激活(唤醒) 时间片用完/等待事件
↓ ↓
静止就绪(Ready Suspended) ←→ 活动阻塞(Blocked Active)
↑ ↓
激活(调入内存) 挂起(换出内存)
↓ ↓
静止阻塞(Blocked Suspended) ←→ 终止(Terminated)
允许 → 活动就绪:进程初始化完成,准备运行。
活动就绪 ↔ 运行:CPU调度使进程运行;时间片用完或被抢占返回就绪。
运行 → 活动阻塞:等待I/O或资源,进入阻塞状态。
活动阻塞 → 活动就绪:等待事件完成,重新就绪。
活动就绪/阻塞 → 静止就绪/阻塞:系统因内存不足等因素将进程换出内存,挂起进程。
静止就绪/阻塞 → 活动就绪/阻塞:进程被调入内存,重新激活。
静止阻塞 → 终止:进程执行完毕或被强制终止,释放资源。
六、线程
线程定义
线程是进程中可独立调度执行的最小单位,多个线程共享同一进程的地址空间和资源。
线程与进程对比
线程优势与风险
优势:提升CPU利用率,减少调度开销
风险:共享内存导致数据竞争,需要同步控制
七、并发控制:信号量与PV操作
信号量简介
信号量是操作系统提供的同步机制,用于管理对共享资源的互斥访问。
PV操作
P(等待)操作:试图申请资源,若资源不足则阻塞。
V(释放)操作:释放资源,唤醒等待进程。
伪代码示例:
P(S):
while (S <= 0) wait;
S = S - 1;
V(S):
S = S + 1;
八、死锁
什么是死锁?
多个进程或线程相互等待对方持有的资源,导致所有进程无法继续执行的僵局。
死锁四个必要条件
互斥条件
占有且等待
不可抢占
循环等待
死锁示例
进程A持有资源R1,等待R2;
进程B持有资源R2,等待R1;
双方相互等待,形成死锁。
死锁解决策略
实践建议
避免锁嵌套
统一锁顺序
设置锁超时