多道程序设计¶
来源:
操作系统 / note/进程管理/进程/多道程序设计.md
多道程序设计可以理解为:
内存里同时放入多个程序,让 CPU 在它们之间切换执行,从而提高 CPU 和系统资源利用率。
它是现代操作系统并发执行的基础。
1. 为什么需要多道程序设计?¶
早期计算机一次只能运行一个程序,叫单道程序设计。
比如程序 A 运行时:
问题是:
当程序 A 在等待磁盘、键盘、打印机这些 I/O 操作时,CPU 是空闲的。
举个例子:
如果程序要等磁盘读文件,CPU 可能等很久。这样计算机资源就浪费了。
于是操作系统引入了多道程序设计:
这样 CPU 尽量不闲着。
2. 多道程序设计的核心思想¶
核心思想是:
把多个作业或进程同时放入内存,由操作系统调度它们交替使用 CPU。
注意,这里的“同时运行”不一定是真的物理同时。
在单核 CPU 上:
但是 CPU 切换速度很快,所以用户感觉多个程序在同时运行。
比如你一边听歌,一边写代码,一边下载文件:
它们看起来都在运行,实际上 CPU 在它们之间快速切换。
3. 单道程序 vs 多道程序¶
单道程序设计¶
执行过程:
缺点:
多道程序设计¶
执行过程:
优点:
4. 用一个例子理解¶
假设有两个程序:
如果是单道程序:
总时间:
其中 CPU 空闲了:
如果是多道程序:
这样 CPU 空闲时间减少,总体效率提高。
5. 多道程序设计和进程的关系¶
多道程序设计要实现,操作系统必须引入进程模型。
因为内存里同时有多个程序,操作系统必须知道:
所以操作系统用 PCB,进程控制块 来管理每个进程。
也就是:
6. 多道程序设计中的状态切换¶
在多道程序环境下,进程会在几个状态之间切换:
比如:
图可以这样理解:
这就是多道程序能提高效率的关键:
一个进程阻塞时,CPU 不等它,而是去运行别的进程。
7. 多道程序设计需要解决的问题¶
多道程序设计虽然提高效率,但也带来了很多问题。
第一,CPU 调度问题¶
内存里有多个就绪进程:
CPU 应该先运行谁?
这就需要调度算法,比如:
第二,内存管理问题¶
多个程序同时在内存中,操作系统要防止它们互相破坏。
比如:
所以需要:
第三,资源竞争问题¶
多个进程可能同时访问同一个资源。
比如:
这就需要:
你之前 miniFS 里的:
就是在解决多个进程访问同一个文件时的冲突。
第四,死锁问题¶
多个进程互相等待资源,可能造成死锁。
例如:
结果:
这就是死锁。
8. 多道程序设计和分时系统的区别¶
这两个概念容易混。
多道程序设计¶
重点是:
主要面向批处理系统。
多个作业同时进入内存,谁能运行由系统调度。
分时系统¶
重点是:
它通常使用时间片轮转:
用户感觉自己独占计算机。
所以关系是:
9. 多道程序设计的优点¶
主要有三个:
比如:
这些可以在同一段时间内交错进行。
10. 多道程序设计的缺点¶
它也让操作系统更复杂:
其中上下文切换本身也有开销:
所以多道程序不是程序越多越好。
如果进程太多,CPU 可能大量时间都花在切换上,反而效率下降。
11. 一句话总结¶
多道程序设计就是:
把多个程序同时放入内存,当一个程序等待 I/O 或暂时不能运行时,操作系统切换去运行另一个程序,从而提高 CPU、内存和 I/O 设备的利用率。
它解决的是:
它带来的核心机制是: