第二课:操作系统的发展史
一句话目标:理解操作系统为什么会越来越复杂。
先告诉你一个结论:
操作系统的发展,本质上就是不断解决"CPU浪费"的问题。
记住这句话,以后所有知识都会围绕它展开。
第一阶段:人工操作(没有操作系统)
时间大约是20世纪40~50年代。
那个时候,计算机长这样:
6
它不是电脑。
而是一整个房间。
那时候怎么运行程序?
假设你写了一个程序:
计算1+2
不是双击运行。
而是:
第一步
把程序写到纸带(后来是打孔卡)上。
□□□□□□□□□
□■□□■■□□□
■■□□□□■■
一张卡只能存一点点程序。
第二步
工作人员把纸带送到机器旁。
第三步
把纸带插进去。
第四步
等待CPU计算。
第五步
打印结果。
例如:
结果:
3
然后:
工作人员再换下一张纸带。
最大的问题是什么?
假设:
程序真正计算:
需要1秒
但是:
工作人员:
走过去
装纸带
按按钮
拿结果
花了5分钟
于是:
CPU工作:
1秒
CPU等待:
299秒
CPU一直在发呆。
所以:
CPU利用率≈0%
这是最大的浪费。
第二阶段:单道批处理系统
科学家开始想:
能不能不要每运行一次程序,都让工作人员来一次?
于是出现了:
批处理(Batch Processing)
什么意思?
就是:
一次交很多程序。
例如:
程序A
程序B
程序C
程序D
全部交给计算机。
计算机自己:
A结束
↓
自动运行B
↓
自动运行C
↓
自动运行D
工作人员不用一直守着。
好处
例如:
以前:
A
等5分钟
B
等5分钟
C
现在:
A
↓
B
↓
C
↓
D
CPU等待时间大大减少。
为什么叫"单道"?
因为:
内存里:
只有一个程序。
例如:
CPU
↓
程序A
A结束以后。
才把B装进去。
所以:
一次只能运行一个程序。
缺点
假设:
程序A:
读取磁盘
需要3秒
CPU怎么办?
其实:
CPU什么都不用干。
它可以去干别的。
但是:
没有别的程序。
于是:
CPU:
等待……
又浪费了。
第三阶段:多道批处理系统(重点)
科学家又想:
CPU为什么不能趁A等待的时候去做B?
于是:
把多个程序:
一起放进内存。
例如:
内存:
程序A
程序B
程序C
CPU:
先运行A。
突然:
A读取磁盘。
需要等待。
CPU立刻:
切换
↓
运行B
B也等待。
再切:
运行C
这就是:
多道程序设计。
举一个真实例子
假设:
三个程序:
A:
计算1秒
等待IO4秒
计算1秒
B:
计算2秒
等待IO3秒
计算1秒
C:
一直计算。
如果只有一个程序:
CPU:
计算
等待
等待
等待
等待
如果三个一起:
A等待
↓
CPU跑B
↓
B等待
↓
CPU跑C
CPU几乎不停。
所以:
CPU利用率暴涨。
这里诞生了一个新概念
以后会学:
进程(Process)
为什么?
因为:
现在:
多个程序都在内存。
操作系统必须知道:
A运行到哪里?
B运行到哪里?
C运行到哪里?
所以:
每个程序都有:
身份证
以后这张身份证就叫:
PCB(进程控制块)
这是后面重点。
第四阶段:分时系统(非常重要)
注意!
到目前为止。
虽然:
多个程序一起运行。
但是:
用户仍然不能直接操作电脑。
为什么?
因为:
还是:
交程序
↓
等结果
↓
拿结果
没有键盘交互。
后来:
很多人都想用电脑。
怎么办?
例如:
学校:
老师A
老师B
老师C
老师D
只有一台计算机。
于是:
出现:
分时系统(Time Sharing)
什么叫分时?
CPU:
不是一直运行一个程序。
而是:
A运行10ms
↓
B运行10ms
↓
C运行10ms
↓
D运行10ms
↓
A再运行10ms
因为:
CPU速度太快。
例如:
10ms=0.01秒
人根本感觉不到切换。
于是:
每个人都觉得:
"电脑一直在响应我。"
其实:
CPU一直在快速轮流服务大家。
生活中的例子
想象一个老师:
面对40个学生。
老师:
回答A同学10秒
↓
回答B同学10秒
↓
回答C同学10秒
↓
……
↓
回来回答A
如果速度足够快。
每个人都会觉得:
老师一直在关注自己。
这就是:
分时。
分时系统特点
必须:
- 多用户
- 快速响应
- 时间片轮转
以后:
时间片调度就是从这里来的。
第五阶段:实时系统
有些场景:
不能慢。
例如:
飞机。
高铁。
医院。
机器人。
自动驾驶。
这些系统:
必须:
规定时间内完成。
例如:
汽车:
发现障碍物
↓
0.01秒内必须刹车
如果:
2秒以后再刹车
已经撞了。
所以:
实时系统追求:
不是:
吞吐量。
而是:
截止时间(Deadline)一定满足。
五个发展阶段总结
把它们连起来,你就能看到整个演化逻辑:
人工操作
│
├─ 特点:人工装程序
├─ 缺点:CPU大量空闲
│
▼
单道批处理
│
├─ 特点:自动连续执行
├─ 缺点:I/O等待时CPU仍空闲
│
▼
多道批处理
│
├─ 特点:多个程序驻留内存
├─ 优点:CPU可切换执行,提高利用率
│
▼
分时系统
│
├─ 特点:多个用户共享CPU
├─ 优点:交互性强、响应快
│
▼
实时系统
│
└─ 特点:严格满足时间要求
一张图理解所有发展
CPU利用率越来越高
────────────────────────▶
人工操作
↓
单道批处理
↓
多道批处理
↓
分时系统
↓
实时系统
交互能力越来越强
────────────────────────▶