操作系统发展史

3.1 Open shop

早期的计算机体积庞大、价值昂贵,并且难以使用。计算机用户必须是专业人员,而且用户既是程序员,又是操作员,使用前必须先预约一段(blocks )时间(KEMIN:意思是说时间到了没计算完必须再次预约)。会话情形大似如下:

前OS.png

我们看看1964年时使用计算机 IBM 1620一个会话情况,这台计算机执行程序需要多步的编译:

首先,用户首轮载入FORTRAN的编译器,操作包括:

  • 通过控制台命令按钮清空主存;
  • 把编译器(用穿孔卡片保存的)放入读卡器;
  • 把待编译的源程序(穿孔卡片)放在编译器的后面,与编译器一起读入;
  • 按下读卡器的“load”按钮;

首轮计算输出的卡片叫“中间输出(intermediate output)”。如果有任何编译错误,控制台的灯会闪,错误信息出显示在控制台的打字机上(typewriter)。

假设一切完好,接着第二轮载入编译器和“中间输出”,并且成功的话输出第二组卡片,叫“executable deck”。第三步,用户会调整“executable deck”的顺序,并与子程序库(另一十寸长的卡片)一起载入计算机,细心观察计算机运行。

计算的结果会输出到卡片或打印纸上。计算结果常常是不正确的,为了调错,用户一般通过直接查看主存内容,或通过控制台的开关(console switches)对程序进行修改。如果时间不够用,挫败的用户会把主存内容打印出来(所谓的转储 dump of store),闲暇时再分析。如果用户在申请的时间段用完前提早完成了计算任务,那么计算机会一直闲置,直到下一个预约的时间段。

KEMIN:这种早期的单道程序单用户的计算机没有操作系统的需要,因为用户独占所有资源,无须“管理”;用户操作原语很原始,几乎在裸机上操作,没有虚拟机的概念。

3.2 Operator-driven shop

从上面预约式单道单用户的计算机使用方式来看,计算机的资源利用率是很低的。在用户不同的操作阶段都有部分计算机资源被闲置,如手工装入卡片时CPU被闲置,打印机在装卸卡片和计算过程中被闲置等。商业计算机不能容忍这种浪费,为了提高资源利用率,一种人工提速的使用方式被提出——专门雇用一位操作员负责管理计算机操作,包括加载作业(jobs)、开启计算机和收集计算输出等,会话情形如下:

前OS2.png

专职的操作员在一些繁杂的操作上(如装卸卡片或磁带)比新旧计算用户都要来的迅速,这样作业或各步骤间切换的时间被降低了。如果程序出错,操作员代为转储主存内容,用户不能再直接监视主存并对程序进行修补。不过因为作业加快了,用户可以很快的将修改好的程序提交再运行。这种方式,每个用户只需耗费作业运行所需的时间,不必预先约定一个固定时间而造成浪费。

操作员是个人,当然要比后来的资源管理者——操作系统一般多甚至更多的智能。例如,操作员通过批处理同类的作业来降低处理时间,如一批相似的作业只需两轮的载入编译器,无须一份作业两轮;操作员也可以根据作业的优先级或作业时间的长短来按排作业的顺序,如一长时间作业可按排到晚上运行。

KEMIN:这一阶段软件硬件功能没有改进

KEMIN: 资源管理的本质是多道程序的引入,多道并发争用资源。被雇用的操作员本身可以说是操作系统的始祖,因为他肩负着部分操作系统职责。但操作员本身不是程序。

KEMIN: 换个角度看,操作系统的本质是多道程序吗?在没有多道的计算环境还有操作系统的必须要吗,直接控制资源不可以了?光提供虚拟机功能(比如子程序库)还叫操作系统吗?

KEMIN:发展到这阶段,如果把操作员算作操作系统,那么这个操作系统也是单道的(CPU当前作业不可以被打断),它只是窄取作业内各步骤间或作业之间可能提速的空间罢了。

3.3 Offline transput

操作员的大部分工作都是机械化的,所以下一步的发展很自然是自动化这些工作步骤,如下图。首先作业的输入被离线收集,使用一台独立的被称为卫星机的机器将卡片数据转储到磁带上(tape)。当磁带满了后,操作员把它挂接(mount)到主计算机上。从磁带上读入作业比卡片快很多,这样传输(transput)资源被省下很多。计算输出也是输出到磁带上,然后再到卫星机离线打印出结果。

前OS3

从上图可以看到还是有一个操作员在计算机和用户之间,那么这时的操作员与之前的操作员有什么区别?还有磁带在挂接入主计算后和卸下输出磁带进行离线输出前,计算机的具体计算过程如何?

为了实现作业的自动执行,一段小的监控程序会驻留在主存,负责协调作业的运行,比如在一道作业执行完后重置主存或加载另一道作业。为了分隔磁带上的不同作业和为满足作业的不同需要,必须建立某种监控程序的控制约定(conventions),这些约定就是命令语言的雏形(rudiments)。比如约定在卡片的第一列标有星号的是控制卡片,用以与数据卡片进行区分。参考一下如下摘自《现代操作系统》的一幅图:

一道批处理作业卡片

监控程序有以下一些职责或功能:

  • 解释命令语言
  • 记录日记
  • 提供设备独立的输入输出功能(用卡片代替磁带作输入)

被执行的程序本身可直接处理输入输出,但是为了方便性,输入输出功能转移到监控程序,这也是设备驱动程序的始祖。

KEMIN:发展到脱机批处理阶段,监控程序可以说是名正言顺的操作系统始祖。但是它不是现代意思的操作系统。因为计算机主存内还是单道程序的,监控程序只接管大部分由操作员管理的工作,把单道步骤的时间压缩到了极限(看当时的硬件速度)。

KEMIN:这一阶段软件引入了监控程序,加快了单道各步骤间的速度;硬件引入了磁带机,加快了数据的输入速度。

3.4 Spooling systems

发展的下一阶段联机系统——Spooling systems,功能改进包括中断的引入,输入输出单元被设计成与计算机同时间运行。输入输出单元在完成读写操作后向主机发一个中断信号,主机接到信号后会保存一些重要信息(比如当前作业的程序计数器),并且跳转指定位置——设备服务程序进行对中断处理。设备服务程序就是设备驱动程序,它被集成入监控程序,用以处理中断请求。

Spooling systems

这一阶段有了磁盘用作计算机的辅助存储介质。这时候的计算机可以一边计算一道作业,一边把第二道个作业读入磁盘,还可以同时打印保存在磁盘的第三道作业的计算结果。不像磁带,磁盘是随机访问的,作业数据可以放在磁盘的任意位置,因此计算机无需按照作业载入的顺序执行任务。这个阶段的监控程序还集成了一个功能很原始的调度程序(scheduler),调度的根据是作业的优先级和执行时间,两个参数都是通过控制卡片指定的。

这个阶段的操作员还需参与部分管理工作:

  • 挂接磁带,载入作业数据;
  • 对作业进行优先级分配等策略决定;
  • 监控程序意外死机时重启机器。

这种运行模式的计算工被称为“spooling system”,这它的监控程序是现代操作系统的开端。

Spooling systems是共享式的计算机,没有为用户单独提供调试程序的机会,这也是下步发展的需求。

KEMIN: Spooling systems引了中断概念,实现了一定并发功能,提高资源的使用率,但是Spooling systems依然是单道的,主存一份作业独占。Spooling systems的监控程序虽然说是现代操作系统的开端,但它的更像是一个功能不多的自动机。体系结构有了一项重大的改变——引入中断机制,实现计算机的异步操作功能;还有随机访问的磁盘的发明增强计算机的功能。个人认为Spooling systems更多的是功能量的变化,没多少质的变化。

KEMIN:这一阶段软件改进……

3.5 Batch multiprogramming

Spooling systems并没有发挥计算机所有资源的最大效率。并不是所有单道作业需要占用全部主存。作业在进行输入输出时,CPU依然是闲置的。多道技术是下一步自然的发展。如下图(圆圈代表作业)。当一道作业在等待输入输出时,另一道作业可进行计算。由于作业的性质不一,多道技术还会有一些问题需要特别处理的。比如,计算集中的作业可能一直占用CPU,迫使数据处理集中的作业等好久而没法前进。时间资源的争夺和分配策略是进程管理一章的主要内容。

多道批处理

多道技术也会引发空间资源的竞争。计算机一次能运行几道作业程序取决于主存容量和硬件划分空间的能力。此外,必须引入某种保护机制防止作业程序间相互影响。在第三章的内存管理,我们将讨论空间分配策略和安全机制。

在主存内的各道程序基本上是互相独立的,监控程序能区分它们并对它们独立地应用策略(比如调度策略)。每道程序都有自己的时间、空间和数据传输的需求。进程的概念被引入用以代替作业的单一步骤的概念。操作系统(用以代替监控程序的称呼)负责跟踪控制进程活动。这一阶段的操作系统结构里,进程已经不可以直接控制输入输出设备了,进程必须向操作系统内核发出服务请求,输入输出也是竞争的资源。

为进程分配资源并不是一件简单的工作。因为进程会在运行过程的不同阶段申请各种资源,这是没法预测的。如果资源不可用,进程会被阻塞,之后又如何处理呢?这是第四章的内容。

随着多道技术的发展,操作系统发展出内核结构的思想。操作系统内核由一组管理子例程组成,负责管理计算机时间、空间和信息传送资源。管理的一种理解是对进程的各种资源请求作出响应。如上图中,来自上层的进程对服务的请求和下层的设备中断处理请求。

内核的各种不同活动会共享一些数据,这些数据不能被修改,必须保持前后一致性。并发控制的机制被添加到操作系统,防止这些活动互相干扰。第八章介绍互斥锁和同步问题。(KEMIN:并发控制只对内核活动吗?)

3.6 Interactive multiprogramming

操作系统发展的下一阶段是交互式多道(interactive multiprogramming)。如下图。面向用户的主要传输设备改用交互式终端,代替过去的卡片或磁带机。现在用户可直接与程序交互,输入任何程序需要的数据,不像过去只能在程序运行之前打包好所有数据。

交互多道

交互式计算常常是被添加到现有的批处理多道环境。比如,TSO(timesharing option)是 OS/360 操作系统的扩展模块。另一方面,批处理则被添加到现有的交互式环境。比如,Unix 操作系统就提供批处理服务。

交互式计算(也称为分时计算)对计算机的使用方式的改变是革命性的。计算机从数字搅碎机演变成了真正的信息处理机。用户可以通过交互式文本编辑软件在线的编纂数据文件。这些文件可以是程序、文档或纯数据。作业或作业步骤的概念没有了,取而代之是互交式会话(sessions ),会话是指从登录(通过终端链接到主机)到登出(断开主机的链接)的一段时间。

在登录的时候,用户一般需要提供用户名和密码。这些数据会被转换成一个用户标识,用户标识用来关联主机上所有用户开的进程和创建的文件。用户标识也用于操作系统内核实现一些控制功能,比如判定是否有权修改文件。

在会话期间,虽然可能同时已经有很多用户登入了,但是用户可以假想终端是独占整个计算机的。通常在用户登入后会有一个进程被创建来为用户提供服务,它就是命令行解释程序(command interpreter)。命令行解释程序和一些其它的交互工具会在第七章讨论,在那里也会对用户界面(user interface.)有一个一般的论述。

裸男
Nakeman.cn 2023 Build by Gatsby and Tailwind, Deploy on Netlify.