计算机操作系统2

0 阅读5分钟

第二课:操作系统的发展史

一句话目标:理解操作系统为什么会越来越复杂。

先告诉你一个结论:

操作系统的发展,本质上就是不断解决"CPU浪费"的问题。

记住这句话,以后所有知识都会围绕它展开。


第一阶段:人工操作(没有操作系统)

时间大约是20世纪40~50年代。

那个时候,计算机长这样:

https://images.openai.com/static-rsc-4/eJ48ul7QOgoUrnU3UgwA33xrCQ7L2uf2qYxJTeJRywBNUQoa4Ce7DwsdO6VQLOkkTc5SEhVGWz-UY4r06Eyfac0B87cLgDgMYQMcYNduiyQpxgGG85AyM3u63sbUyC2o0Yix25JYMNYAm13a9avjwcyKccFEWZ8RQ-XFt77deQgldoYjr2vN4JsJOp2BgrUS?purpose=fullsize https://images.openai.com/static-rsc-4/l0a1-05y560kAXXd4KTN-0YYgQI0boU3ksjOrhXfideToh7Qg_5RYtxTDS3rjiEvzAbolp7eYLssxlOKMfwStu_wEF4xRjZ0xiKo31YwGCdyCji0O1vIidUXTFRQAACsBKVFUm1LOOEP-Kv27hjXrbMlisgnzKHuFKyvsypXTIsSywk7tHjVOSCL2YPJccdE?purpose=fullsize https://images.openai.com/static-rsc-4/3VbipDXtCF1cgZ3PsB6A5jnQXKer6RfPEZmaDJh0DQg6z7YkCSb_tYzJ1JNOD0cNjGDIbGsve1JVVaNGW07BnI4vkE9cJRG6sVfQrK12Pytu8njlWj7mryAjn0tW1iYs9VdMFNyH3BLdmQxIx964o1-B_bJE9S1VrX7nXx4pMDMOltFjpuTivMaNjBYKdyJG?purpose=fullsize

6

它不是电脑。

而是一整个房间。


那时候怎么运行程序?

假设你写了一个程序:

计算1+2

不是双击运行。

而是:

第一步

把程序写到纸带(后来是打孔卡)上。

□□□□□□□□□
□■□□■■□□□
■■□□□□■■

一张卡只能存一点点程序。


第二步

工作人员把纸带送到机器旁。


第三步

把纸带插进去。


第四步

等待CPU计算。


第五步

打印结果。

例如:

结果:

3

然后:

工作人员再换下一张纸带。

最大的问题是什么?

假设:

程序真正计算:

需要1秒

但是:

工作人员:

走过去

装纸带

按按钮

拿结果

花了5分钟

于是:

CPU工作:

1秒

CPU等待:

299秒

CPU一直在发呆。

所以:

CPU利用率≈0%

这是最大的浪费。


第二阶段:单道批处理系统

科学家开始想:

能不能不要每运行一次程序,都让工作人员来一次?

于是出现了:

批处理(Batch Processing)

什么意思?

就是:

一次交很多程序。

例如:

程序A

程序B

程序C

程序D

全部交给计算机。

计算机自己:

A结束

↓

自动运行B

↓

自动运行C

↓

自动运行D

工作人员不用一直守着。


好处

例如:

以前:

A5分钟

B5分钟

C

现在:

AB

↓

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跑BB等待

↓

CPU跑C

CPU几乎不停。

所以:

CPU利用率暴涨。


这里诞生了一个新概念

以后会学:

进程(Process)

为什么?

因为:

现在:

多个程序都在内存。

操作系统必须知道:

A运行到哪里?

B运行到哪里?

C运行到哪里?

所以:

每个程序都有:

身份证

以后这张身份证就叫:

PCB(进程控制块)

这是后面重点。


第四阶段:分时系统(非常重要)

注意!

到目前为止。

虽然:

多个程序一起运行。

但是:

用户仍然不能直接操作电脑。

为什么?

因为:

还是:

交程序

↓

等结果

↓

拿结果

没有键盘交互。


后来:

很多人都想用电脑。

怎么办?

例如:

学校:

老师A

老师B

老师C

老师D

只有一台计算机。

于是:

出现:

分时系统(Time Sharing)


什么叫分时?

CPU:

不是一直运行一个程序。

而是:

A运行10msB运行10ms

↓

C运行10ms

↓

D运行10msA再运行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利用率越来越高
────────────────────────▶

人工操作
      ↓
单道批处理
      ↓
多道批处理
      ↓
分时系统
      ↓
实时系统

交互能力越来越强
────────────────────────▶