操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织调度计算机的工作和资源分配,以提供给用户和其他软件方便的接口和环境,他是计算机系统中最基本的系统软件。
操作系统已经存在多年,它的发展与计算机的体系结构十分密切,在这一小节中,我们将讲要考察操作系统历史上的一些重要之处,我们将通过分析连续几代的计算机看看他们的操作系统是怎样的。
"手工操作"时代
在手工操作时代,没用操作系统来管理资源,没有"程序"作为独立的实体存储在磁盘上,每一次任务都需要人工进行大量的、物理上的设置和监控。
真空管和穿孔卡片
物理编程阶段
最早的计算机没有"存储程序"的概念,程序本身就是硬件连接的一部分。特点如下:
-
"编程"即插线:程序员需要通过手动插拔成千上万根电缆和设置大量的机械开关来配置计算机。这相当于用硬件连接来定义计算逻辑。
-
输入数据:通过打孔卡片阅读机或纸带阅读机读取数据。
-
运行:操作员合上开关,计算机开始执行由物理连接定义好的计算任务。
-
获取输出:结果通常通过指示灯显示(比如一排灯泡显示二进制结果),或者由打印机打印出来。
-
下一个任务:要执行下一个完全不同的任务,操作员必须拔掉所有电缆,重新连接,整个过程极其缓慢(可能耗时数天甚至数周),且容易出错。
存储程序概念和机器语言编程
"存储程序"概念(冯·诺依曼架构)出现后,程序和数据都可以存储在内存中。但这时的操作方式依然非常原始。
工作流程(一个典型的任务周期):
-
预约机时:由于计算机极其昂贵且稀有,程序员需要预约一段机时(可能是深夜的某个15分钟时段)。
-
准备媒介:程序员首先在打孔卡片或纸带上打孔,将程序(机器码) 和数据以二进制的形式编码到卡片或纸带上。每个指令和数据都是直接的二进制或八进制数字。
-
人工装载:
- 程序员将包含引导程序的纸带(或卡片组)装入读卡器。这个引导程序通常只有几十个字节,功能极其简单:把后续更复杂的程序从读卡器读入内存。
- 操作员通过控制台开关手动将引导程序的起始地址(例如0号内存地址)设置到程序计数器中,然后按下"运行"按钮。
- 计算机执行引导程序,将真正的目标程序从读卡器读入内存。
-
开始执行:目标程序加载完毕后,计算机会自动开始执行它。程序会接着读取数据卡片进行处理。
-
监控与干预:程序员和操作员会密切监视控制面板上的指示灯。这些灯显示了内存和寄存器当前的值。如果程序陷入死循环或发生错误(指示灯停止变化或疯狂闪烁),操作员会果断地按下"停止"按钮,然后通过开关和指示灯来检查内存内容,试图诊断问题。
-
获取结果:如果程序正常结束,计算结果可能会被输出到:
- 打孔机:在新的卡片或纸带上打孔,形成输出结果。
- 行式打印机:直接打印出数字和字符。
- 清理现场:当前用户的全部时间结束后,操作员必须手动清除上一个程序留下的所有内存内容,为下一个用户准备一个"干净"的机器。然后下一个用户带着他的卡片盒重复整个过程。
这种"手工操作"模式存在巨大的问题:
-
极低的CPU利用率:计算机的大部分时间都在等待操作员装填卡片、设置开关。昂贵的CPU资源被白白浪费。这被称为 "人机矛盾":CPU速度很快,但人的操作速度极慢。
-
调试困难:调试只能依靠指示灯,效率极低。
-
无资源管理:每个程序都独占整个计算机,无法共享外部设备。
批处理系统的出现
为了解决第一代计算机系统中CPU闲置的核心矛盾,人们想出了以下办法:
- 首先,雇佣专门的操作员,让程序员不再直接操作机器。
- 然后,操作员会将多个用户的任务(卡片盒) 按顺序堆叠起来,形成一个"批"。
- 接着,编写一个非常小的、常驻内存的软件,称为监控程序。这个程序能自动地从读卡器读取下一个任务,运行它,然后自动将结果送到打印机,之后再自动加载下一个任务。
就这样,批处理系统(如IBM的FORTRAN监控系统)诞生了。它通过减少人工干预的时间,极大地提升了CPU利用率,成为了现代操作系统的雏形。
上面说的其实是单道批处理系统,它引入了脱机输入输出技术。它的关键创新: 计算机中运行一个常驻内存的监督程序(Monitor),这是现代操作系统的雏形。
-
监督程序自动从批中读取第一个作业并运行。
-
一个作业运行结束后,自动清理现场,并加载下一个作业。
-
全部作业完成后,操作员取下输出结果(通常是打印纸),分发给用户。
我们以早期磁带系统为例简单讲解一下批处理系统的工作流程:
假设操作员有一堆来自不同用户的程序卡片盒。
-
离线准备:操作员使用一台价格较低、专门用于输入输出的计算机(如IBM 1401),将一堆程序卡片和数据卡片读取到磁带上。这盘磁带包含了多个任务(程序A、数据A、程序B、数据B...)。
-
装载磁带:操作员将这盘准备好的磁带装到主计算机(如更强大、更昂贵的IBM 7094)的磁带机上。
-
启动监控程序:操作员通过控制台启动主计算机上预先加载好的监控程序。
-
自动执行(核心环节):
· 监控程序从磁带上读取第一个任务(程序A)到主计算机的内存中。
· 然后将控制权交给该任务的起始地址,CPU开始执行程序A。
· 程序A执行时,需要数据就从磁带上的下一个位置读取数据A。
· 程序A执行完毕,将结果输出到另一台磁带机上。
· 程序A执行完毕后,控制权自动交还给监控程序。
· 监控程序立即从输入磁带上读取下一个任务(程序B),重复上述过程,就像一個自動化的流水線。
-
输出结果:当整盘输入磁带上的所有任务都处理完毕后,监控程序会通知操作员(或自动停机)。
-
离线打印:操作员将记录着输出结果的磁带卸下,再装到那台便宜的辅助计算机(IBM 1401)上,由它将磁带上的结果打印出来,分发给各个用户。
这个过程被称为脱机批处理。注意,负责输入的IBM 1401和负责计算的IBM 7094是脱离的,各司其职,从而进一步提高了主CPU的效率。
手工操作时代的问题 | 批处理的解决方案 | 带来的好处 |
---|---|---|
CPU闲置严重(等待人工操作) | 自动化任务切换:监控程序自动加载、运行、卸载任务,CPU在两个任务间的空闲时间极短。 | 极大提升了CPU利用率,让昂贵的计算资源大部分时间都在进行计算。 |
人工操作繁琐易错(插拔线、设置开关) | 标准化流程:所有任务都通过卡片->磁带->计算->磁带->打印的标准化流程。操作员只需装卸磁带,无需理解任务内容。 | 减少了人为错误 ,降低了对操作员技能的要求,提高了整体可靠性。 |
任务切换耗时(清理内存、手动加载) | 由监控程序管理:监控程序负责清理上一个任务的内存,并准确加载下一个任务到正确位置。 | 任务切换速度大大加快。 |
单任务独占 | 批处理 :虽然每个任务仍然独占整个计算机,但通过"批"的形式,将多个任务的准备和善后工作集中完成,减少了整体等待时间。 | 提高了系统吞吐量(单位时间内完成的任务数量)。 |
批处理系统的局限性与演进
批处理虽然解决了第一代的问题,但它自身也有明显的缺点,这推动了操作系统的进一步演进:
-
缺乏交互性:用户一旦提交作业,就无法再与程序进行交互(比如输入数据、调整参数),必须等待整个批处理运行完毕才能看到结果。这对于调试程序来说非常痛苦。
-
CPU和I/O设备速度不匹配 :当程序进行输入输出(如从磁带读数据)时,高速的CPU必须等待慢速的I/O设备完成工作,这段时间CPU依然是闲置的。这后来通过多道程序设计技术解决:在内存中同时存放多道程序,当一道程序等待I/O时,CPU立刻切换到另一道程序去执行。
多道程序设计赋能第三代操作系统
多道程序设计解决了第二代系统的核心问题
第二代单道批处理系统 通过使用监控程序自动处理作业流,解决了第一代"人机矛盾"的问题。但它的设计是一个作业完成后,再加载下一个作业。这意味着:
-
当作业进行I/O操作(如读写卡片、打印)时,高速的CPU必须等待慢速的I/O设备完成工作,这段时间CPU处于空闲状态。
-
CPU利用率通常只有30%左右,仍然非常低。
多道程序设计就是为了直接攻克这个"CPU在I/O时空闲"的致命弱点。
多道批处理系统的工作原理的本质是:通过硬件中断机制,迫使CPU在执行流中插入操作系统的调度管理程序。操作系统利用这些机会,像是一个高效的"调度员",在内存中的多个程序之间进行快速切换(保存现场、恢复现场),从而将CPU原本的等待时间全部填充为有效计算时间,最终极大地提高了系统的吞吐量和资源利用率**。**

多道程序设计如何赋能第三代操作系统
第三代操作系统不再是单一形态,它主要包括两大分支,都建立在多道程序设计技术之上:
1. 多道批处理操作系统
这是最直接的应用。它在第二代批处理系统的基础上,加入了多道程序设计技术。
-
解决之道:在内存中同时存放多个用户作业。当作业A因I/O操作而等待时,操作系统立即切换CPU去执行内存中另一个就绪的作业B。当作业A的I/O完成后再回来继续执行。
-
结果 :CPU几乎始终保持忙碌状态。CPU利用率从30%大幅提升到80%甚至更高。系统吞吐量(单位时间内完成的作业数量)成为核心指标。
2. 分时操作系统
这是多道程序设计技术更巧妙、更革命性的应用。它旨在解决批处理系统"无法交互"的痛点。
-
解决之道 :同样利用多道程序设计技术在内存中同时存放多个交互式用户的作业。但CPU不是在一个作业阻塞时才切换,而是采用时间片轮转策略,强制在每个作业身上只执行一个极短的时间(如100ms),然后就切换到下一个作业。
-
结果 :由于CPU速度极快,而时间片很短,即使用户数量众多,每个用户也会感觉自己是独占计算机的,可以及时获得响应。响应时间取代吞吐量,成为核心指标。
特点
同时性
同时性也称多路性,指允许多个终端用户同时使用一台计算机,即一台计算机与若干台终端相连接,终端上的这些用户可以同时或基本同时使用计算机。
交互性
用户能够方便地与系统进行人机对话,即用户通过终端采用人机对话的方式直接控制程序运行,与同程序进行交互。
独立性
系统中多个用户可以彼此独立地进行操作,互不干扰,单个用户感觉不到别人也在使用这台计算机,好像只有自己单独使用这台计算机一样。
及时性
用户请求能在很短时间内获得响应。分时系统采用时间片轮转方式使一台计算机同时为多个终端服务,使用户能够对系统的及时响应感到满意。
优点
用户请求可以被即时响应,解决了人机交互问题。
允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在。
缺点
无法优先处理紧急任务
分时系统的设计原理
-
根本目标:提供交互性 和公平性,让多个用户共享一台计算机。
-
核心机制:采用时间片轮转调度算法,强制进行进程切换。
-
技术基石:建立在多道程序设计 之上,并依赖中断 和高效的上下文切换。
-
关键创新:将CPU时间分割成极小的时间片,并通过快速切换 ,将冗长的作业周转时间 转化为用户无法察觉的极短响应时间。
-
实现效果:虽然CPU在微观上是在多个用户间快速跳跃,但在宏观上,每个用户都感觉自己独占了一台反应迅速的计算机。
正是分时系统的出现,才催生了现代操作系统的许多核心概念,并最终导致了个人计算机和互联网的普及。
总结与对比
特性 | 第二代:单道批处理系统 | 第三代:多道批处理系统 | 第三代:分时系统 |
---|---|---|---|
核心技术 | 监控程序,自动化作业流 | 多道程序设计 | 多道程序设计 + 时间片轮转 |
主要目标 | 减少人工干预 | 提高CPU利用率和系统吞吐量 | 提供用户交互性和快速响应 |
内存中的作业数 | 1个 | 多个 | 多个 |
作业切换时机 | 作业完成后 | 作业因I/O而阻塞时 | 固定时间片用完或阻塞时 |
用户体验 | 无交互,等待时间长 | 无交互,等待响应时间长 | 有交互,即时响应 |
核心指标 | 自动化程度 | 吞吐量 | 响应时间 |
结论:
多道程序设计技术是操作系统从第二代演进到第三代 的关键催化剂。它最初是为了解决第二代批处理系统中"CPU等待I/O导致利用率低" 的问题,从而催生了多道批处理系统。
随后,人们发现同样的技术可以用于分时 ,通过快速切换来服务多个在线用户,从而又催生了分时系统 ,解决了**"批处理模式缺乏交互性"** 的问题。
因此,说多道程序设计是第三代操作系统的技术基石,是毫不为过的。
实时操作系统
分时系统很好地解决了"交互性"问题,但它无法提供硬性的时间保证。分时系统的目标是让所有用户都"感觉"很快,但一个任务的响应时间可能会因为系统负载(用户数量、运行的程序)而变化,这是不可预测的。
实时操作系统中,能在某个时间限制内完成某些紧急任务而不需要通过时间片排队。
特性 | 分时操作系统 | 实时操作系统 |
---|---|---|
设计目标 | 提供良好的平均响应时间,方便多用户交互 | 保证最坏情况下的响应时间,满足截止期限 |
关键指标 | 公平性 、吞吐量 | 可预测性 、可靠性 、确定性 |
时间要求 | 软(快一点更好,慢一点也可接受) | 硬 或软(错过截止期可能导致灾难性或降低质量) |
调度方式 | 时间片轮转、优先级调度(注重公平) | 基于优先级 的可抢占调度(保证高优先级任务优先) |
根据对"错过截止期限"的容忍程度,实时系统分为两类:
- 硬实时系统
-
核心要求 :必须在绝对严格 的时间截止期限前完成计算和响应。错过截止期限即意味着系统的完全失败,通常会导致灾难性的后果。
-
好比 :汽车的安全气囊系统。必须在碰撞发生后的极短时间内 (毫秒级)完成传感器信号处理、决策并触发气囊点火。晚了1毫秒,就是致命的失败。
-
其他例子:
-
航空航天:飞行控制系统、火星探测器的着陆程序。
-
工业控制:数控机床、机器人关节控制。
-
医疗设备:心脏起搏器、胰岛素泵。
-
- 软实时系统
-
核心要求 :有截止期限,但偶尔错过不会导致灾难性后果,只会导致服务质量下降或性能降低。
-
好比:在线视频流。视频解码和播放需要在一定时间内完成,以保持流畅。偶尔掉几帧(错过截止期)会导致视频卡顿,但整个服务并不会崩溃。
-
其他例子:
-
多媒体系统:音频处理、视频会议。
-
电信网络:网络数据包交换。
-
消费电子:智能手机的触摸屏响应(虽然极快,但偶尔慢一点不会毁坏设备)。
-
实时系统的特点:及时性,可靠性,能够优先处理紧急任务。
网络操作系统、分布式操作系统、并行操作系统
网络操作系统
定义: 网络操作系统是建立在各台独立的计算机操作系统之上,其核心目标是实现计算机网络中各种资源的共享和各台计算机之间的通信。它通过网络协议将地理上分散的、具备独立功能的各台计算机有机地连接起来,提供一种统一、经济而有效的使用各台计算机的方法。
特点:
-
资源共享: 管理并实现网络中各种资源(如文件、打印机、计算能力)的共享。
-
通信功能: 提供各台计算机之间可靠的数据通信和消息传送能力。
-
节点自治: 网络中的每台计算机都运行自己独立的本地操作系统,拥有高度的自治权。
-
低透明性: 用户通常必须明确知道所需资源(如文件、服务)在网络中的具体位置(如服务器名称、IP地址)才能访问。
并行操作系统
定义: 并行操作系统是专门为管理和优化多处理器系统(如多核CPU、对称多处理SMP服务器)而设计的操作系统。其核心目标是控制多个处理单元协同执行一个或多个任务,充分发掘硬件并行计算能力,以实现极高的运算速度和吞吐量。
特点:
-
紧耦合硬件: 管理的多个处理器(核心)通常共享物理内存、总线和时钟,物理上紧密集成。
-
高性能计算: 核心目标是加速单个大型计算任务或提高系统整体任务处理能力。
-
资源同步: 必须提供复杂的机制(如锁、信号量、屏障)来协调多个处理器对共享资源(尤其是内存)的并发访问,防止数据冲突。
-
单一系统映像: 对用户和程序员而言,整个多处理器系统就像一个单一的、更快的计算机。
分布式操作系统
定义: 分布式操作系统是用于管理分布式计算机系统的统一软件系统。分布式计算机系统由多台计算机组成并满足下列条件的系统,主要特点是分布性和并行性。
特点(即分布式计算机系统的条件):
-
通信交换信息: 系统中任意两台计算机通过通信方式交换信息。
-
对等地位: 系统中的每台计算机都具有同等的地位,即没有主机也没有从机(无主从关系)。
-
资源全局共享: 每台计算机上的资源为所有用户共享,是全局性的资源池。
-
故障冗余与重构: 系统中的任意台计算机都可以构成一个子系统,并且还能重构。一台计算机的故障不会导致整个系统崩溃,系统可通过重构降级运行。
-
协同并行工作: 任何工作都可以分布在几台计算机上,由它们并行工作、协同完成,对外呈现为一个完整的任务。
三种操作系统的本质不同
对比维度 | 网络操作系统 | 并行操作系统 | 分布式操作系统 |
---|---|---|---|
核心目标 | 资源共享 与通信 | 高性能计算 与加速 | 协同计算 与单一系统映像 |
任务执行方式 | 各计算机独立完成自己的任务 | 多处理器协同执行 (同一任务的不同部分) | 多计算机相互协同 完成同一任务 |
硬件架构 | 松耦合,通过网络连接的独立计算机 | 紧耦合,共享内存的多处理器/多核芯片 | 松/紧耦合均可,由网络连接的计算机群 |
透明性 | 低,用户需知资源位置 | 高,用户感知为单一计算机 | 极高,用户无需关心任务在何处执行 |
关键挑战 | 解决异构性和实现通信 | 解决资源同步 和缓存一致性 | 解决通信延迟 、部分故障 和全局状态 |
运行模式 | 各节点运行独立的OS | 运行一个OS实例管理所有CPU | 运行一个全局统一的OS |
小结:这一节我们主要讲解了操作系统的发展历程。
小编参考了《现代操作系统》这一本书。