1.1.2 操作系统的特征:并发、共享、虚拟、异步
约 46 分钟
操作系统的四个基本特征
并发、共享、虚拟、异步不是四条孤立定义。它们共同回答:多个程序如何在有限且速度不同的硬件上推进,并让每个程序获得相对独立、可理解的运行环境。
1. 并发与并行
- 并发:两个或多个事件在同一时间间隔内发生。单核 CPU 可通过快速交替让多个进程并发推进。
- 并行:两个或多个事件在同一时刻发生,需要能同时工作的执行部件。
单核系统中两个 CPU 密集进程可以并发,不能在 CPU 上并行;但 CPU 执行进程 A 时,磁盘控制器可为进程 B 传输数据,因此处理机与设备仍可能并行。多核也不等于所有任务都能并行,若任务受同一把互斥锁约束,临界区仍只能串行。
2. 共享及两种方式
共享是系统中的资源可供多个并发进程共同使用。
- 互斥共享:一段时间内只允许一个进程占用,例如未做虚拟化的独占设备、临界区中的共享数据。
- 同时共享:一段时间内允许多个进程访问。宏观同时不保证物理同刻,例如多个进程交替读取磁盘;只读代码页则可能在物理上同时被多个核访问。
判断共享方式不能只看资源名称,要看资源的具体使用模式。磁盘可以接受多个进程的请求,但控制器会调度具体访问;同一文件也可能允许并发读,却对写操作施加同步约束。
并发和共享互为存在条件:没有并发,资源无需在同一时间段服务多个活动;没有安全共享,并发进程就无法共同使用有限硬件和数据结构。
3. 虚拟:从一个物理实体得到多个逻辑对应物
虚拟不是“假的”,而是通过管理与映射提供不同于物理形态的逻辑视图。
- 时分复用:把处理器时间切成片段,形成每个进程仿佛拥有独立 CPU 的虚拟处理机。
- 空分复用及映射:虚拟存储把逻辑地址空间映射到物理内存与外存,使每个进程看到独立、连续的地址空间。
虚拟性的前提是并发。若始终只有一个程序独占机器,就没有必要把一个物理 CPU 在多个活动之间复用。虚拟还必须配合保护:如果不同进程的“独立地址空间”可以任意互相写入,这个抽象就失效了。
4. 异步:推进速度不可预知,但结果应受约束
进程以不可预知的速度向前推进,称为异步性。原因包括调度时机、I/O 完成时间、中断到达和其他进程竞争。异步不等于系统可以产生任意结果。正确的同步机制必须让允许的结果满足不变量,例如互斥区内最多一个进程、生产者不会覆盖尚未消费的数据。
下面模拟单核时间片轮转。输出体现“宏观并发、微观交替”;改变时间片会改变交替顺序和响应时间,但每个任务总工作量不变。
from collections import deque
ready = deque([["A", 7], ["B", 5]])
quantum = 2
clock = 0
while ready:
name, remain = ready.popleft()
run = min(quantum, remain)
print(f"{clock:2d}-{clock + run:2d}: {name}")
clock += run
remain -= run
if remain:
ready.append([name, remain])
5. 代表性推演
进程 A、B 在单核上运行,时间片为 4 ms,二者都始终占满时间片。前 16 ms 的执行为 A(0–4)、B(4–8)、A(8–12)、B(12–16)。两进程是并发而非并行;发生三次任务切换;CPU 与正在处理上一次请求的磁盘仍可能并行。
若 A 和 B 都向同一日志文件追加记录,最终行序可能随调度变化,这体现异步;但每一行不能被写成半行交叉数据,这是同步与文件系统必须维护的正确性约束。
课内练习
- 单核 CPU 上两个进程是否可能并行?CPU 与磁盘是否可能并行?
答案:前者在 CPU 上不能并行,只能并发;后者由独立部件工作,可以并行。 - 两个进程都能读取同一文件,能否直接断定“同时共享”?
答案:不能只凭资源名称;要看访问是否允许重叠、底层是否交替及是否涉及写同步。 - 异步是否意味着同一程序每次都可以输出任意值?
答案:不是。时序可能变化,但同步和程序逻辑应把结果约束在正确集合内。
验收
给出一个真实场景,同时指出并发、共享、虚拟和异步分别落在哪个对象上,并说明至少一个必须维持的不变量。能够区分“同一时间间隔”和“同一时刻”,才算通过。
Practice
本课练习
先独立作答再提交;编程题会在隔离沙箱中真实编译、运行并对拍。