操作系统之哲学原理第2版(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-23 01:01:43

点击下载

作者:邹恒明

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

操作系统之哲学原理第2版

操作系统之哲学原理第2版试读:

前言

In Pursuit of Absolute Simplicity求于至简,归于永恒

当你在电脑上玩游戏、与朋友聊天或编写一个程序并加载运行的时候,你有没有一种像在观看魔术的感觉?编写好的程序能够编译运行,计算出结果,并显示或打印出来。你有没有觉得它很神秘?

如果想揭开这层神秘的面纱,你就得学习操作系统。

因为操作系统是掌控计算机运行的系统,在学习它的过程中,读者能够了解程序在计算机上运行的全景,或者说我们所认为的全景(见图1)。之所以这么说,是因为精确了解程序在计算机上运行的全景是极其困难的(有人认为这根本就是不可能的)。当然,这里的程序指的是有一定规模的程序,而不是那种只有几行代码的小程序(trivial program)。从某种程度上说,没有人敢肯定自己清楚计算机在任意时刻所处的状态。例如,在多流水线计算机上,如果发生中断或异常,我们根本就得不到一个精准的状态。唯一能做的就是推倒重来。图 1 风靡世界的游戏《第二生命》

计算机的心智

人有心智吗?我想所有人都会回答:有!

人的心智就是人的灵气。这是每一个人的生命之气。就是这个灵气赋予了人丰富的思维、感受和行动能力(当然,也有人认为这是肉体进化的结果,不过这不是本书要讨论的问题)。

那么计算机有心智吗?这不是一个诡秘或者搞笑的问题。

人们通常认为能够运动的生命都是有灵气的,既然计算机能够完成一些人脑才能够完成的理性任务,它当然也有心智!而这个心智就是操作系统(见图2)。因为操作系统赋予了计算机活力。虽然读者有可能尚不明白操作系统是怎么一回事儿,但也许知道若没有操作系统,现代计算机是运转不起来的(这里需排除远古时代的古老计算机)。操作系统作为计算机赖以运转的控制中心,称其为计算机的心智可谓恰如其分。图 2 计算机的心智就是操作系统

众所周知,理解或看透一个人的心智是很困难的,所谓画虎画皮难画骨,知人知面难知心。依此类推,既然操作系统是计算机的心智,恐怕理解起来也是困难重重的了。而这正是许多人在学习和研究操作系统时的共同感受。

操作系统的奥秘

记得小时候常常念过的一首诗是这样的:

从小时候就开始数了。

数到懂事、数到成熟,

还没有数清。

天上的星星为什么数不清呢?

像记忆和幻想,

永远背负着固执的谜……

对于许多大学计算机及相关专业的同学来说,操作系统就像天上的星星(见图3),隐藏着一个固执的谜,永远学不清楚。不过,操作系统真的学不清楚吗?

不是的。学不清楚是因为没有看到其背后的奥秘。这个奥秘不是所有的人都知道的。即使是研究操作系统的人也不一定意识到它,更别提计算机初学者了。图 3 理解操作系统有点类似于数清楚天上的星星

那么这个奥秘是什么呢?

天上的星星数不清是因为我们试图做的事情是数星星。如果我们换个角度,不去数星星,而是寻找星星的设计师,让他告诉我们星星的数量,不就清楚了吗?

这也正是学习操作系统的奥秘。要理解操作系统,就要找到操作系统的设计师,让他们告诉我们操作系统所蕴涵的所有秘密。当然,这里的寻找设计师并不是真的找来他们,因为找到所有的设计师是不可能的。这里的设计师指的是一种抽象,一种所有设计师所共有的人生哲学,因为设计师在设计操作系统时会不自觉地将自己的思维或人生追求构造在操作系统里,从而赋予操作系统以心智,而操作系统也就在这种心智的指挥下运行着。

操作系统之哲学原理

正如前面所述,让设计师告诉我们操作系统的秘密是理解操作系统的最好办法。他们所用的载体就是其所遵循的生活哲学,这些生活哲学就是操作系统所遵循的哲学原理。

本书就是试图从这些哲学原理(也就是人类生活哲学)的视角来阐述操作系统,从而揭开操作系统的神秘面纱。

例如,CPU管理(进程与线程)、内存管理(虚拟存储)、外存管理(文件系统)、I/O管理(输入与输出)等操作系统的核心机制不外乎是对资源的管理,它们都遵循着一切人类资源管理的基本原则,即如何有效地发掘资源、监控资源、分配资源和回收资源。

除了提供管理的功能外,操作系统还需要保证自己的正常运转,即它必须尽力使自身不发生失效或崩溃,因为这是提供其他一切功能的基础。这与人类确保自身健康生活作为开发利用资源的前提是一个道理。

如果我们掌握了资源的根本属性,即资源管理必然涉及共享和竞争的管理,理解了操作系统必须首先保障自己的正常运转,就会理解操作系统的一切行为。前者指引着操作系统功能的设计与进化,后者则推动着操作系统可靠性的演变。

资源管理也好,保证自身的正确性也好,它们都存在着根本的线索。这条根本线索就是人类在长期的生活实践中摸索出来的管理社会和保障自身安全的各种办法。这些办法是随着人类哲学思维的变化而改进的。因此,只要明白了人类的哲学思维,就能明白操作系统所遵循的哲学原理,进而明白整个操作系统的设计与构造。

除了使操作系统易于理解外,从哲学的层面阐述操作系统的原理还有如下好处:

●操作系统可以变化,但支持其存在的哲学原理是不变的。这样,本书的内容可以在操作系统不断演变的环境下保持有效,而不会像其他书中的内容,随着时间的推移而过时。

●对于很多人来说,操作系统所采取的机制、策略和手段看上去十分枯燥,如果从哲学原理上给它们赋予人性的特点,这些机制、策略和手段便不再枯燥。

通过将人生哲学与操作系统结合起来,从操作系统哲学原理的层次阐述操作系统的核心技术,就能够理解和掌握操作系统的精髓。

本书内容安排

为清楚地阐述操作系统的哲学原理,也为了使内容显得紧凑,逻辑上一气呵成,本书只选择了操作系统的核心内容进行分析,放弃了对操作系统核心以外内容,如安全、多媒体系统、虚拟机技术、光盘技术等的论述。本书集中精力对操作系统发展的历史背景、进程与线程、内存管理、文件系统、输入与输出、多核环境下的进程调度和操作系统设计进行了哲学原理层面上的分析与论述,而将安全、多媒体、虚拟机等技术留给别的专业书籍进行论述。对内容的这种安排有如下好处:

●可使本书重点突出、逻辑清晰、内容连贯,便于学生顺利掌握操作系统的核心与关键。

●操作系统的核心内容经过长久的研究与实践,已经变得较为稳定并且形成了众所公认的标准,讲解起来没有歧义。

●操作系统的非核心部分由于研究的时间短,工业界参与的程度较低,并无公认的标准,论述起来要么不全面,要么显得凌乱,使刚刚接触操作系统的读者感到迷惑。

●只要掌握了核心内容的原理,读者便能通过自学掌握操作系统核心以外的知识。

本书覆盖全国硕士研究生入学统一考试计算机学科《研究生考试大纲》中操作系统部分全部内容。

本书分为8篇,分别是基础原理篇、进程原理篇、线程原理篇、内存原理篇、文件原理篇、I/O原理篇、多核原理篇和操作系统设计篇,内容结构如图4所示。图 4 本书内容结构

基础原理篇

该篇包含第1~3章的内容。第1章的内容包括智者的挑战、人造与神造、程序是如何运行的、什么是操作系统、魔术与管理、用户程序与操作系统、操作系统范畴和为什么学习操作系统。第2章探讨操作系统演变的主要过程:从单一控制终端、单一操作员,到批处理、多道批处理、分时操作系统、实时操作系统、现代操作系统;对商业操作系统演变的过程进行了分析,然后探讨操作系统的分类和未来发展趋势。第3章简要回顾计算机硬件基本知识,探讨什么是“抽象”,讲解用户态与内核态,阐述操作系统结构、系统调用、操作系统的壳等知识。

进程原理篇

该篇对操作系统最核心的概念——进程进行讲解,包括第4~6章的内容。第4章阐述进程出现的逻辑必然性、多道编程的效率、进程的创建和消亡、进程的状态及其转换、进程与地址空间、进程模型的实现和进程模型的缺陷。第5章讲解进程模型实现的手段:调度,主要内容包括调度的目标,先来先服务、时间片轮转、短任务优先、优先级调度、混合调度、实时调度等算法,并对优先级倒挂和线程的不确定性进行讨论。第6章的内容包括为什么要通信、管道、记名管道、套接字、信号、信号量、共享内存、消息队列等。

线程原理篇

进程虽然让并发从理想变为现实,但其自身却是串行的:进程只有一个执行序列。若要使进程本身也提供并发,则需要对线程进行讨论。该篇讨论了进程级的并发机制-线程模型,包括第7~10章的内容。第7章的内容包括进程分身术——线程、线程管理、线程的用户态和内核态以及混合态实现、现代操作系统的线程实现模型、多线程之间的关系、线程模型主要考虑的问题等。第8章的内容包括为什么同步、同步的目的、锁原语的进化、睡觉与叫醒原语、信号量、管程、消息传递和栅栏等。第9章对死锁的产生、发展、防止与避免进行讲解,并讨论死锁、活锁和饥饿的关系。第10章讲述如何使用中断启用和禁止、测试与设置来实现锁原语。

内存原理篇

该篇对操作系统的另外一个重要构成部分——内存管理进行阐述,包括第11~14章的内容。第11章讲述内存管理的环境、内存管理的目标、虚拟内存、操作系统在内存中的位置、单道编程的内存管理、固定加载地址、多道编程的内存管理、固定分区、非固定分区、交换、地址翻译、闲置空间管理等内容。第12章讲解的内容包括基址极限的问题、分页管理、页表、页面翻译过程、分页管理系统的优缺点、多级页表、地址翻译速度、锁住页面、内存抖动和页面尺寸设计。第13章对页面更换算法的来龙去脉、欲达到的目的、各种具体的页面更换算法进行细致讲解。第14章的内容包括分段管理系统、分段的优缺点、段号与寻址位数,并对否定之否定在内存管理模式发展过程中的作用进行了讨论。

文件原理篇

该篇对操作系统的第三个核心构件——文件系统进行讲解。包括第15~18章的内容。第15章讲述的内容包括磁盘结构、磁盘访问速度、磁盘的操作系统界面、磁盘访问过程和磁盘调度。第16章讲述为什么需要文件系统、什么是文件系统、文件系统的目的、文件的基本知识、文件的存储结构、文件类型、文件访问、文件属性、文件操作、文件夹、相对与绝对路径、共享与链接、内存映射的文件等内容。第17章的内容包括文件系统分布、文件的实现、文件夹的实现、共享文件的实现、磁盘空间的管理等。第18章的内容包括文件安全性能(文件访问控制、访问控制表、能力表)、文件可靠性能(持久性、一致性、日志、交易、随影、一致性检查)和文件系统的效率性能(提前读取、减少磁臂移动距离、日志结构的文件系统LFS)。

I/O原理篇

该篇对计算机与外界进行沟通的机制——输入与输出进行讲解。该篇仅有一章(第19章),讨论的内容包括输入输出的重要性和目的、输入输出硬件的哲学原理、物理I/O模式(专有通道I/O、内存映射的I/O、复合I/O、DMA)、输入输出软件的哲学原理、软件I/O模式(可编程I/O、中断驱动的I/O、DMA)、I/O软件分层和设备驱动程序等。

多核原理篇

该篇对新出现的多核技术进行讲解,重点讨论多核环境给操作系统带来的影响。该篇分为多核结构和多核环境下的进程同步与调度两章。第20章讲解的内容包括多核处理器结构(超线程结构、多核结构、多核超线程结构)、多核内存结构(UMA、NUMA、COMA、NORMA)、对称多核处理器计算机的启动过程、多处理器之间的通信、SMP缓存一致性等。第21章的内容包括多核进程同步、多核环境下的软件同步原语、旋锁及其实现、队列旋锁、多核环境下的进程调度、多核环境下的能耗管理和多核系统性能。

操作系统设计篇

该篇从高屋建瓴的角度对操作系统设计的十条哲学原理进行阐述。显然,操作系统的设计原则有很多,本篇选取的只是诸多原则里面非常重要的十条。第22章将从操作系统和人类社会两个层面对这十条原理进行论述与比较,以使读者更加清楚地明白操作系统就是人类社会在计算机里面的反映。读者可自行发现操作系统的其他设计原则。

本书特点

本书从哲学的视角对操作系统阐述了独到的见解。从人类自然的行为规范推演到操作系统的设计,以一条逻辑主线演绎了整个操作系统的各种原理。本书的特点是抽象提升(即从哲学原理上阐述操作系统的各种原理与设计)、联系生活(即通过人所熟知的生活实例来分析操作系统)、模块整合(即将操作系统的各个模块通过举例连结起来)、逻辑贯通(即将操作系统的各种机制以一根逻辑主线的发展依次讲解)和系统关联(即将涉及的其他学科知识点如体系结构和编译器等嵌入进来)。本书内容上更加新颖、系统上更加完整、逻辑上更加连贯、解说上更加易懂和层次上更加丰富的特点。

读者在阅读学习完本书后,将达到如下目标:

★了解操作系统在计算机软硬件整个体系中的中心主导作用。

★掌握操作系统的基本概念、原理、技术和实现机制。

★理解操作系统原理背后的人文背景与历史动机。

★运用操作系统知识来分析和解决问题。

★掌握操作系统设计的原理,为以后设计操作系统打下基础。

这里需要提醒的是,本书阐述的是操作系统的原理,它不依赖于任何具体的实现,而是凌驾于所有具体商业操作系统的进程实现之上,即本书所阐述的思想和原理对所有操作系统都适用。但具体商业操作系统在应用这些原理时可以有很灵活的方式。事实上,具体的商业操作系统在应用这些原理时确实采取了不同的方式,有的更为精密,也有的更加精简。另外,由于我们注重的是原理,对个体机制实现时采取的数据结构通常不做详细的论述,而是点到为止。这是因为数据结构必须以真正的操作系统为蓝本进行讲解,而真正的商业操作系统使用的数据结构通常非常复杂,对此进行繁琐的讲解将把学生弄得晕头转向,而不利于对操作系统核心原理的把握。

当然了,如果要达到能够设计开发真正商业操作系统的境界,读者还需要进行“操作系统工程”或“操作系统实现”等知识的学习。而这种工程或实现的课程通常以具体的操作系统为对象进行讲述。这些具体操作系统可以是Windows、UNIX、Linux,当然也可以是其他一些非主流商业操作系统(如Android、Symbian等)。如果能够将本书阐述的原理与操作系统工程或实现相结合,将取得极好的效果。

此外,本书使用的伪代码采用类似C/C++的结构,每种原理的表示均以展示操作系统的思路为最高目标,并不对表示的细节进行优化,以使得逻辑清晰,方便绝大多数读者理解。

现在就让我们一起来揭示秘密,数清操作系统里的星星吧。第1篇基础原理篇

大伪似真,大道无形

对于任何一门课来说,首要探讨的问题就是这门课的主题到底是什么。对于刚接触操作系统的入门者来说,自然想到的问题当然也会是操作系统到底是什么东西。回答这个问题是本篇的职责。此外,操作系统作为计算机的核心控制系统,它在计算机运行过程中扮演什么角色?它的来历是什么?它有一些什么基本概念?我们应该如何看待操作系统?它是如何参与到程序的执行过程中的?这些也是学习操作系统需要回答的基本问题。

本篇就是针对上述问题而写成。它对这些问题进行解答和讨论,并为我们接下来介绍操作系统的核心功能部件打下基础和铺垫。本篇包含第1~3章的内容。第1章的内容包括智者的挑战、人造与神造、程序是如何运行的、什么是操作系统、魔术与管理、用户程序与操作系统、操作系统范畴和为什么学习操作系统。第2章探讨操作系统演变的主要过程:从单一操作员单一控制终端,到批处理、多道批处理、分时操作系统、实时操作系统、现代操作系统;对商业操作系统演变的过程进行了分析,然后探讨操作系统的分类和未来发展趋势。第3章简要回顾计算机硬件基本知识,探讨什么是“抽象”,讲解用户态与内核态,阐述操作系统结构、系统调用、操作系统的壳等知识。

本篇最为重要的核心思想是操作系统在计算机运行过程中扮演的角色:魔术师和管理者。魔术师将丑陋变得美好,将没有变为有,将少变为多;而管理者则对所有计算机资源进行管理以达到公平和效率的“双料”境界。对操作系统这两个角色的理解将非常有助于对进程、线程、虚拟内存、文件系统和输入输出系统的掌握。化丑为美:魔术师是操作系统扮演的一个根本角色第1章操作系统导论引子:智者的挑战

西方有一个著名的故事,名曰:智者的挑战。相传很久以前,有个村子里住着一位智者。同村有个年轻人学到一些知识后就想来挑战这位智者。于是,年轻人想到了一个方法。他来到智者面前,将双手放在背后,问这个智者:“我刚刚从树上抓了只鸟,现在我手中。但你能告诉我,这只鸟是活的还是死的呢?”

这是一个诡诈的问题。因为,如果回答“是活的”,则这个年轻人只需要在背后将鸟掐死,然后给智者看这只死鸟;如果回答“是死的”,则这个年轻人只需要将鸟放飞即可。这样,无论智者如何回答,年轻人都可以让智者答错,然后可以大大地嘲笑一番智者的水平。

作为智者,当然一眼就看出了年轻人的诡计。但是又不能不回答这个问题。因为不回答问题等于承认答不上来,当然也就是不是什么智者了。但如何回答呢?

智者的回答简洁、精妙,甚至妙不可言:"As you will"。

will这个词在英语中的意思是意愿或意志。因此这个答案的意思是:这只鸟的死活与年轻人的意志保持一致:年轻人的意志是让这只鸟活,则这只鸟就是活的;年轻人的意志是让这只鸟死,则这只鸟就是死的。

如果到此止步,则这个答案仍存在着巨大的漏洞:年轻人可以将鸟掐死,但坚持说自己的意志是让鸟活着,即自己不小心将鸟掐死了,而自己的意志却是想让鸟活着。若是这样的话,智者的回答就错了。

妙不可言的是,will在英语中还有一层意思:将要,即将要发生的事或将要采取的行动。就是说,这只鸟的死活与年轻人将要采取的行动保持一致:年轻人将要放飞这只鸟,则这只鸟就是活的;年轻人将要掐死这只鸟,则这只鸟就是死的。

因此,智者的回答将人的意志与行为全部包括了进来。这样,即使年轻人声称他的意愿和行为并不一致,智者的回答也正确无误。

好,我们知道了智者的回答。但这与操作系统课程有什么关系吗?

有!很多人都觉得操作系统枯燥、乏味,甚至令人厌烦。更有人说懂不懂操作系统没有关系。不是很多人在学习操作系统之前就已经写过程序了吗?有的人甚至已经写过很大很复杂的程序了。可见,不懂操作系统并不妨碍我们学习使用计算机。

如果读者这样想,我劝你再想一想。你虽然写过程序,可你知道程序到底是如何在计算机上运行的吗?如果不知道,你怎么敢肯定你的程序总会运行正确呢?你怎么敢说你写的程序最大限度地利用了系统的能力呢?一个人觉得操作系统没用,那是因为他不知道怎么用,或者他没有用操作系统的意愿。说明白一点,如果你认为操作系统没有用,那是因为你的编程和程序开发处在一个低级的水平上。如果你掌握了操作系统,你的编程水平将显著提高。

换句话说,操作系统有没有用,我的回答是"As you will"。你如果有意愿或者有行动使用操作系统,操作系统就是有用的;如果你没有意愿或行动,则操作系统就是没有用的。当然了,我希望读者在看完这本书后能够领悟到操作系统的巨大用途。万一在读完本书后,读者还感觉困惑或者认为操作系统没用,我唯一能说的也是"As you will"了。当然,我希望这种情况发生的概率不大。1.1 人造与神造

要想学好操作系统,具有恰当的思维模式是十分必要的。这个思维模式就是本书所强调的“哲学”:一种思维方式或一种生活方式。我们以一个问题来说明这一点。这个问题是:“什么是计算机的根本特征?”

对于这个问题,相信很多人会说计算机就是台计算机器,或者用来进行大规模计算的机器,或者用于数据处理的机器,或者具备某些其他具体功能的机器。这些回答当然没有错,问题是这些答案并不能帮助我们更好地学习和理解计算机。就像我们问“张三这个人的根本特征是什么”,而回答却是“张三有175cm高”一样。这种答案虽然是正确的,但意义不大,因为我们无法从答案中推导出一系列有用的结论。

那这个问题该如何回答呢?这就要看我们对事物的观察程度了。如果我们仔细看看身边的事物,就会发现所有的东西可以划分为两类:一类是本来就存在于自然中,人类所做的只不过是发现;另一类是本来并不存在,人类所做的是发明。前者称为神造事物或者自然存在的事物,后者当然就是人造事物。从这个思维模式上看,计算机毫无疑问就是人造事物。这正是我们所需要的答案,即计算机的根本特征是“人造”。

引申一下可知,计算机学科就是一个人造学科。那么知道计算机学科是人造学科对我们学习计算机有什么帮助呢?有,太多了。下面我们来看看人造和神造有什么区别。

人造学科的四个特点:

●不精确、具有相对性。

●从对人类活动的观察导出。

●依赖于人的主观判断力。

●通常符合人的直觉。

第一个特点就是所谓的“没有对错”。在人造学科里,没有什么绝对的对或错,而只有所谓的“好”或“坏”,“有意义”或“没意义”。例如,如果本书在讨论计算机时对某个方面的论述与你见到的计算机不一样,这并不能说明本书错了。就算世界上不存在本书所论述的计算机,也不能说明本书错了。我们只需要按照本书的论述再造一台计算机即可。但是,本书论述的计算机与你知道的计算机之间可以进行好和坏的比较。

第二个特点说的是人造学科是从哪里得到灵感的,那就是“对人类活动的观察”。这样,读者只要对人类生活仔细观察,就可以很容易地理解计算机里面的许多原理。例如,在操作系统里面广泛使用的栈和队列就是对从生活中观察到的现象进行抽象所获得,如图1-1所示。图 1-1 从观察人类活动而获得的栈和队列结构

第三个特点说的是在人造学科里,人的主观能动性起着关键作用。不同的人观察同样的现象,得出的结论或抽象出的东西可能不一样,甚至完全相反。这样,多数人所认同的抽象就将成为人造学科里的标准,即存在少数服从多数的原则。

第四个特点说的是人造学科里面的许多原理与人的直觉直接呼应,即如果我们按照人的直觉去理解这些原理,就会十分直截了当。例如,操作系统里面的同步机制与人类男女谈恋爱时所用的约会机制十分相似。对于一个谈过恋爱或与别人约会过的人来说,如果将自己谈恋爱的直觉用在操作系统进程的学习上,就会发现进程同步是个十分容易理解的概念。

相对人造学科,自然存在或神造学科刚好具有相反的四个属性:

●精确、绝对。

●从对自然存在的观察导出。

●不依赖于人的主观判断力。

●通常违反人的直觉。

第一个特点说的是神造的事物具有精确、绝对的属性。对于这种学科,存在正确与错误之分,我们提出的观点要么正确,要么错误,不存在中间状态。例如,纯数学领域的各种运算,如22的结果应该是4。如果运算的结果不是4,则属于运算错误。

第二个特点说的是人类对这些事物的理解是从对自然存在的观察中获得。例如,牛顿通过观察苹果落地的自然现象和严密的推理,得出了万有引力定律。

第三个特点说的是这些观察的结果是不依赖于人的主观能动性的。如果一个人的观察结果是正确的话,那么他的观察将和所有观察正确的人的结果一样,而绝不会是两样。从另外一个角度说,一个人的观察抽象结果是可以被他人验证的。例如,30 000 000 000+20 000 000 000对于任何人来说,如果计算正确,则结果必然是50 000 000 000。

第四个特点说的是如果我们按照人的直觉来学习,就会面临重重困难。因为人的思维与神不一样。自然,按照人的思维模式将很难理解神所创造的这一切。这就是为什么在这些学科耕耘的人都必须依赖灵感的出现,以及严密、一丝不苟的数学与逻辑推理(见图1-2)。

明白了计算机是人造事物,操作系统是一个人造系统,我们就可以按照人造事物的特点来学习,从而易如反掌地掌握操作系统的原理。图 1-2 从观察自然存在和严密的数学推理而获得的质能方程1.2 程序是如何运行的

计算机程序是如何运行的呢?对于多数人来说,或多或少地知道任何程序必须首先得有人写出来,即编程,然后放到计算机运行。这种解释当然是过于简单了。计算机程序的运行实际上是一件十分复杂的事情,牵扯到方方面面。

首先,当然得进行编程,而编程需要计算机程序设计语言作为基础。对于绝大多数编写程序的人来说,使用的编程语言称为高级程序设计语言,如C、C++、Java等。但由于计算机并不认识高级语言编写的程序,编好的程序需要进行编译变成计算机能够识别的机器语言程序,而这需要编译器和汇编器的帮助。其次,机器语言程序需要加载到内存,形成一个运动中的程序,即进程,而这需要操作系统的帮助。进程需要在计算机芯片CPU上执行才算是真正在执行,而将进程调度到CPU上运行也由操作系统完成。最后,在CPU上执行的机器语言指令需要变成能够在一个个时钟脉冲里执行的基本操作,这需要指令集结构和计算机硬件的支持,而整个程序的执行过程还需要操作系统提供的服务和程序语言提供的执行环境(runtime environment)。这样,一个从程序到微指令执行的过程就完成了。图1-3所示的就是这个过程。

当然了,图1-3描述的从程序到结果的演变过程还是过于简单。我们只是从一个线性角度来看程序的演变过程,而没有考虑各种因素之间的穿插和交互过程。不过,对于刚入门的计算机专业学生来说,这种描述能够帮助理解整个程序是如何在计算机上执行的问题。图 1-3 由程序到结果的演变

从这个描述中可以看出:程序的运行至少需要如下四个因素:

●程序设计语言。

●编译系统。

●操作系统。

●指令集结构(计算机硬件系统)。

这四个因素都将是大学学习的专业课程。需要注意的是,操作系统在程序的执行过程中具有关键的作用,本书要做的就是阐述这个关键作用是如何发挥的。

需要注意的是,图1-3给出的程序执行过程是从高级语言编写的程序开始的。而实际上并非总是这样。事实上,程序可以直接在机器语言或汇编语言上编写。用这种称为“低级”的语言编写出来的机器语言程序无需经过编译器的翻译就可以在计算机指令集上执行。如果是在汇编语言上编写的汇编程序,则只需要经过汇编器的翻译即可加载执行。1.3 什么是操作系统

操作系统这个术语听上去稀松平常,并不给人任何兴奋的感觉,甚至有点俗气。原因在于中文的“操作”这个词:提到操作员,通常让人想起操作车床、磨床和起重机的穿着油腻工作服的工人,这自然让人兴奋不起来。将英文的operating翻译为中文的“操作”,是因为翻译的人没有理解英文Operating Systems(OS,操作系统)这个名字所蕴涵的精髓。

那么英文的Operating Systems意味着什么呢?

各位见过手术过程吗?在手术室里,主刀大夫称为Operating Surgeon。在整个手术过程中,主刀大夫具有至高无上的权威:他说要打麻药,麻醉师便要赶紧打麻药;他说需要手术钳,助理大夫就赶忙递给他手术钳;他说需要止血,护士就要忙不迭地拿止血药棉来止血。整个手术最关键的部分,切开皮肤、拿掉器官、安装移植器官等均由主刀大夫完成。当然,主刀大夫有时候也会将某些任务,如缝合创口,交给助理大夫或护士来做,但整个手术的过程皆由其主控。一句话,Operating Surgeon就是掌控整个手术过程、具有精湛技术和敏锐判断力的医师。

引申至非医学领域,Operating Person意思是操刀手,就是掌控事情的人。再将Person这个词换成System,则Operating Systems指的就是掌控局势的一种系统。也就是说计算机里面的一切事情均由Operating Systems来掌控。那么,我们现在面临两个问题:第一个问题是,操作系统到底是什么东西?第二个问题是,操作系统到底操控什么事情?

我们先回答第一个问题。既然操作系统是掌控计算机局势的一个系统,自然很重要。但这个说法并不能帮助读者理解操作系统,也无法形成有形的概念。如果我们换个说法:操作系统是介于计算机和应用软件之间的一个软件系统,则概念就具体多了。从这个定义出发,我们知道操作系统的上面和下面都有别的对象存在:下面是硬件平台,上面是应用软件,如图1-4所示。图 1-4 操作系统上下界面

现在回答第二个问题。我们知道操作系统代表的是掌控事情的系统,掌控什么事情呢?当然是计算机上或计算机里发生的一切事情。最原始的计算机并没有操作系统,而是直接由人来掌控事情,即所谓的单一控制终端、单一操作员模式。但是随着计算机复杂性的增长,人已经不能胜任直接掌控计算机了。于是我们编写出操作系统这个“软件”来掌控计算机,将人类从日益复杂的掌控任务中解脱出来。这个掌控有着多层深远的意义。

首先,由于计算机的功能和复杂性不断发生变化(趋向更加复杂),操作系统所掌控的事情也就越来越多,越来越复杂。同时,操作系统本身能够使用的资源也不断增多(如内存容量)。这是早期驱动操作系统不断改善的根本原因。

其次,既然操作系统是专门掌控计算机的,那么计算机上发生的所有事情自然需要操作系统的知晓和许可,未经操作系统同意的任何事情均视为非法的,也就是病毒和入侵攻击所试图运作的事情。作为操作系统的设计人员,我们当然要确保计算机不发生任何我们不知情或不同意的事情。但是人的能力是有限的,人的思维也是有缺陷的,我们设计出的系统自然不会十全十美,也会有缺陷,这就给了攻击者可乘之机。操作系统设计人员和攻击者之间的博弈是当前驱动操作系统改善的一个重要动力。

再次,掌控事情的水平有高低之分,有效率不同之分。就像手术大夫之间也有水平高低之分。为了更好地掌控事情,同时也为了更好地满足人类永不知足的各种越来越苛刻的要求,操作系统自然需要不断改善。这种改善在过去、现在和将来都会继续下去的。

最后,我们可以给操作系统下定义了:

●操作系统是一个软件系统;

●操作系统使计算机变得好用(将人类从繁琐、复杂的对机器掌控的任务中解脱);

●操作系统使计算机运作变得有序(操作系统掌控计算机上所有的事情)。总结起来就是:操作系统是掌控计算机上所有事情的软件系统。

从这个定义可以引申出操作系统的功能:

●替用户及其应用管理计算机上的软硬件资源。

●保证计算机资源的公平竞争和使用。

●防止对计算机资源的非法侵占和使用。

●保证操作系统自身正常运转。1.4 魔术与管理

提升上面所列的操作系统功能,可以得出操作系统所扮演的两个根本角色:管理者和魔术家。只要记住了这两个角色,就差不多明白了什么是操作系统。1.4.1 魔术家角色

魔术家的目标是把差的东西变好,把少的东西变多,把复杂变简单。同样,操作系统将计算机以一个更加容易、更加方便、更加强大的方式呈现给用户。例如,如果在裸机上直接编程是很困难的,因为各种数据转移均需要用户自己来控制,对不同设备要用不同命令来驱动,而这对一般人很难胜任。操作系统将这些工作从用户手中接过来,从而让用户感觉编程是一件容易的事(相对来说,编程对于有些人来说永远很难),如图1-5所示。

操作系统通过进程抽象让每一个用户感觉有一台自己独享的CPU;通过虚拟内存抽象,让用户感觉物理内存空间具有无限扩张性,这就是把少变多。当然,操作系统的把少变多不是无中生有,变多也不是无限多,只是针对磁盘容量的大小。1.4.2 管理者角色

操作系统管理计算机上软硬件资源。例如,操作系统对CPU、内存、磁盘等的管理,使得不同用户之间或者同一用户的不同程序之间可以安全有序地共享这些硬件资源。那怎么让用户很好地利用这些硬件资源呢?就是分块(parcel out),把硬件分块给应用程序使用。这里关键的原则是有效和公平,这是管理者的必备素质。有效指的是不能浪费资源,公平指的是每个人都有可能享有资源,即不能有不公平的现象。当然真正的公平是没有的事,这很像人类生活的现实。不过追求公平却是我们的本能,在虚拟世界里尽可能公平一点还是非常应该的,至少应该是设计操作系统时的不懈追求。图 1-5 操作系统就是一个魔术师(illusionist)

根据管理的资源不同,操作系统具体功能如下:

●CPU管理,即如何分配CPU给不同应用和用户。

●内存管理:即如何分配内存给不同应用和用户。

●外存管理:即如何分配外存(磁盘)给不同应用和用户。

●I/O管理:即如何分配输入输出设备给应用和用户。

除了对上述资源进行管理和抽象外,操作系统作为掌控一切的软件系统,其自身必须是稳定和安全的,即操作系统自己不能出现故障。因此,操作系统的设计还需包括如下两项:

●健壮性管理:即如何确保操作系统自身的正常运作。

●安全性管理:即如何防止非法操作和入侵。

为完成上面所列的功能,操作系统设计人员构思了许多机制。而所有这些机制均有其渊源,其背后隐含的是人的哲学思维。本书就是要讲解操作系统背后的哲学原理,并依据这些哲学原理阐述操作系统是通过何种机制、以何种方式完成上述列举的各种管理功能的。1.5 用户程序与操作系统

前面说过,操作系统上下分别是虚拟机器界面和物理机器界面。处于物理机器下面的是硬件,而硬件和操作系统的关系将是本书的关注点。处于虚拟机器界面上面的是应用软件,应用软件和操作系统的关系不是本书的重点,而是系统编程或底层编程等课程的关注点。在这里,我们只想来简要讨论一下应用程序和操作系统的关系,因为这个关系对理解操作系统非常重要。

那么,操作系统和应用程序之间是什么关系呢?很显然,操作系统为用户程序提供了一个虚拟机器界面,而应用程序运行在这个界面之上。但这个答案似乎太抽象,并不能帮助深入理解它们之间的关系。前面讲过,操作系统是一个程序,而用户程序也是程序,程序和程序之间能有什么关系呢?无非是调用和被调用的关系。

那操作系统和用户程序之间到底谁是调用者,谁是被调用者呢?答案似乎很清楚:操作系统通过虚拟机器界面为用户程序提供各种服务,用户程序在运行过程中不断使用操作系统提供的服务来完成自己的任务。例如,用户程序在运行过程中需要读写磁盘,这个时候就需要调用操作系统的服务来完成磁盘读写操作;如果需要收发数据包,也需要调用操作系统的服务来完成。当调用这些服务时,控制从用户程序转移到操作系统,而操作系统在完成这些服务后将控制返回给用户程序。在这种思维模式下,用户程序是主程序,而操作系统是子程序,如图1-6所示。图 1-6 用户程序为主程序,操作系统为子程序

但是有正就有反,这就是哲学中的矛盾论。如果我们从另一个角度来看,会得出相反的结论。系统启动之后最先启动的是什么程序?操作系统。用户程序不能在操作系统启用之前启动(除非是很厉害的病毒)。在此之后,每次启动一个用户程序,都相当于操作系统将控制转移给用户程序;而在用户程序执行完毕后,控制又回到操作系统。这样看上去,操作系统是主程序,它在一生当中不断调用各种应用程序,而每个应用程序执行完之后再回到操作系统。就这样循环往复,直到无穷或机器关闭。在此种思维模式下,操作系统是主程序,用户程序是子程序,如图1-7所示。

上述两种看法完全相反,但又似乎都有道理,有谁对谁错之分吗?没有。我们说过,人造学科没有对错之分,只有好坏之分。你喜欢哪种观点就持那种观点,哪种观点帮助你理解操作系统,你就持那种观点。如果两种观点都有帮助,你可同时持有两种观点。图 1-7 操作系统为主程序,用户程序为子程序

当然,上述关系的描述是非常简单化的。实际上,操作系统和各种用户程序可以看做互相调用,从而形成一个非常复杂的动态关系。了解并阐述这种复杂的动态关系就是本书的目的。1.6 操作系统的范畴

前面介绍了操作系统的两个角色:魔术师和管理者。这两个角色之间既有区别,又有联系。为了完成不同的任务,操作系统有时需要扮演魔术师的角色,有时需要扮演管理者的角色,有时则需要同时扮演这两个角色。那么操作系统要完成的任务具体有哪些呢?前面提到过:

●CPU管理,即如何分配CPU给不同应用和用户。

●内存管理:即如何分配内存给不同应用和用户。

●外存管理:即如何分配外存(磁盘)给不同应用和用户。

●I/O管理:即如何分配输入输出设备给应用和用户。

CPU管理就是将要介绍的进程管理。进程管理的主要目的有3个:第一个是公平,即每个程序都有机会使用CPU。第二个是非阻塞(non-blocking),即任何程序不能无休止地阻挠其他程序的正常推进。如果一个程序在运行过程中需要输入输出或者因别的什么事情而发生阻塞,这个阻塞不能妨碍别的进程继续前进。就像人类世界,缺了谁地球照样旋转。第三个是优先级。在人类生活中人的地位不完全一样,地位高的就比地位低的优先级高。人类把自己生活中的这种关系搬到操作系统里面,就有了优先级的概念,即某些程序比另外一些程序优先级高。如果优先级高的程序开始运行,则优先级低的程序就要让出资源。就像我们经常说的,我们坚决反对大锅饭,应该让一部分人(程序)先富起来。

内存管理主要是管理缓存、主存、磁盘、磁带等存储介质所形成的内存架构。为此目的,操作系统设计人员发明了虚拟内存的概念,即将物理内存(缓存和主存)扩充到外部存储介质(磁盘、光盘和磁带)上。这样内存的空间就大大地增加了,能够运行的程序的大小也大大地增加了。内存管理的另一个目的是让很多程序共享同一个物理内存。这就需要对物理内存进行分割和保护,不让一个程序访问另一个程序所占的内存空间,专业术语称为运行时不能越界。在生活中,就是我家的东西不希望你跑来拿。

外存管理通常也称为存储管理,它就是众所周知的文件系统了。文件系统的主要目的是将磁盘变成一个很容易使用的存储媒介以提供给用户使用。这样我们在访问磁盘时无须了解磁盘的物理属性或数据在磁盘上的精确位置,诸如磁道、磁柱、扇面等。当然,文件系统还可以建立在光盘和磁带上。只是使用最为频繁的文件系统都以磁盘为介质。

I/O管理也称为设备管理,就是管理输入输出设备。I/O管理的目的有两个:一是屏蔽不同设备的差异性,即用户用同样的方式访问不同的设备,从而降低编程的难度;二是提供并发访问,即将那些看上去并不具备共享特性的设备(如打印机)变得可以共享。

另外还有一个任务称为批处理,它提供一种无需人机交互的程序运行模式。有时我们不需要人来交互,就交给计算机批处理。主要目的是达到吞吐量最大化,单位时间完成的任务最多。图1-8描述的是操作系统的5个核心功能。

当然,在真实的操作系统里,上述5个核心部件不一定界限分明,甚至它们不在同一个态势下运行(本书后面将说明这一点)。图1-9描述的是Windows操作系统简化了的结构。图 1-8 操作系统的5个核心功能图 1-9 Windows操作系统简化结构图1.7 为什么学习操作系统

到目前为止,本书论述了操作系统的定义、主要任务以及操作系统与用户程序的关系,读者可以体会到操作系统的重要性。但仅仅是因为操作系统重要就要学习它吗?世界上重要的东西太多了,难道我们都要学吗?即使是计算机专业的学生,不学操作系统也照样可以编程写软件。那我们为什么要学呢?当然我们有一千个理由要学,但这里仅列出了几个。

首先,操作系统的功能应用于很多领域。如果开发并发程序:Web Service、分布式系统和网络,你会发现,这些领域大量使用了操作系统的概念和技术。如果你学好了操作系统,你就可以对你做的事情更加有信心。

其次,操作系统的技巧也应用于很多领域,如抽象、缓存、并发等。操作系统简单来说就是实现抽象:进程抽象、文件抽象、虚拟存储抽象等。而很多领域也使用抽象。如数据结构和程序设计就大量使用了抽象,记得抽象数据类型吗?记得抽象类吗?很多地方都用缓存。你开发Web应用要不要缓存呢?这些你都需要。如果学习操作系统,你就掌握了这些知识。触类旁通,你学习别的知识时就容易多了。

不过最重要的理由并不是上面的两条,而是操作系统真的很有趣。对于一个计算机专业的学生来说,难道不想知道自己写的程序如何在计算机上运行吗?读者一定见过汽车吧。汽车前面那个盖子叫前盖(hood)。很多人买车后第一件事是什么?打开前盖。那么打开前盖看到的是什么东西?马达、变速箱。为什么第一件事要打开前盖呢?因为好奇这辆汽车是怎么开动的(见图1-10)。图 1-10 学习操作系统就是揭开覆盖在计算机上的“前盖”

那么对于一个程序员来说,有没有在看到一台计算机的时候,想过为什么计算机能进行计算?有没有买来一台新计算机后就打开盖子呢?多数人恐怕没有打开过计算机外壳。不过,没有打开过也不用遗憾。因为即使你把计算机后盖打开,还是不能明白计算机是怎么运转的,此时只看到一堆硬件:芯片、主板、布线等,而这些硬件并不会告诉你太多有关计算机运转的信息。如果真的想知道计算机是怎么运转的,你就得学习操作系统。当然,如果你想知道计算机在硬件层面上是如何运转的,则还应该学习计算机组成和体系结构等课程。

虽然学习操作系统很有趣,但并不是所有人都有这样的感觉。历史证明,对很多人来说,学习操作系统是一件很痛苦的事情。不过我希望阅读本书对读者来说是一件乐事,难道窥探奥秘不是一件激动人心的事吗?思考题

1.什么是操作系统?请用一句话描述你对操作系统的理解。

2.你对操作系统和用户程序之间的关系有何看法?阐述你的想法。

3.简要列出操作系统覆盖的范畴及每个范畴的核心内容。

4.你为什么要学习操作系统?与本书列出的理由相同吗?简要阐述你的动机。

5.操作系统要对不同的部件进行管理,请论述这些管理之间的异同点。

6.设备管理要达到的目的是什么?

7.有人说设备管理软件(设备驱动程序)因为经常由第三方提供,因此不应该作为操作系统的一部分。你对此有何看法?你认为应该如何判断一个软件是否属于操作系统?

8.请列出程序执行过程中操作系统的介入情况。

9.说操作系统是人造学科,根据是什么?

10.人造学科的特点是什么?它对我们学习操作系统有何帮助?

11.OS需要编译器来编译,而编译器的运行需要OS来支持,那到底是谁先出现谁后出现呢?第2章操作系统历史引子:不能承受之真

20世纪末21世纪初,美国兴起了励志演讲(motivational speech)大潮,各种人等乐此不疲。在这拨励志大潮中,出现了多名影响力广泛的励志演讲家。这些演说家所到之处,真是万人空巷,人潮涌动,场面之壮观令人叹为观止。

其中一位演讲家由于其名望很高接受了电视台采访。

记者:“您在励志演讲领域声名远扬,影响巨大,您的每场演讲都爆满,能否请您阐述一下什么是励志演说?”

励志演讲家:“你想知道吗?告诉你,我跟你一样,我压根就不知道什么是励志演讲。我只知道励志演讲非常流行,我只不过是利用这个潮流来赚钱而已。既然大家都喜欢,我就讲,至于我讲的东西是什么意思,我根本不知道。但是听众很喜欢!”

我想起了一句英语歌谣:"sometimes when we touch, the honest is too much!"(有时,当我们拥抱时,所感受的诚实太过分)。也许人们都不喜欢真实,于是成就了很多人在论述操作系统历史(甚至人类历史)时的粉饰太平。

操作系统的演变就是我们对计算机硬件进行粉饰的过程。

操作系统进化的推动因素

大多数的教材都专门有一章谈论相关领域的历史,操作系统自然也不例外。不过不同的教材谈论历史的目的却又不同。多数教材是为了铺垫一下本学科的发展背景,让学生了解相关领域里的发展大事,并没有将历史与现实的发展联系起来。本书谈论的历史则是以史明鉴,不是为了谈论历史而谈论历史,而是为了让学生明白操作系统为什么是现在这个样子,以及将来会是什么样子。从根本上把握操作系统这一计算机领域核心学科的脉搏,深刻理解社会变迁给计算机这门人造学科带来的不可抵挡的变化。同时,我们还将揭示计算机发展史上一些鲜为人知的重要细节,给学生一个窥探全貌的快感。

如前面所述,操作系统的不断发展与改善由两个因素驱动:

●硬件成本不断下降。

●计算机的功能和复杂性不断变化。

就是这些因素决定了操作系统的历史,我们一定要牢牢掌握这两个趋势。一是硬件成本不断降低,就以硬盘为例,IBM制造的第一张硬磁盘直径达到2米,造价100多万美元,而容量仅仅1MB,而现在一个容量100GB的硬盘成本只有几十美元。当然,过去的硬盘和今天的硬盘的制造技术完全不同,第1张硬盘的质量坚挺,可以当做咖啡桌使用,而现在的硬盘(指盘片)非常软,根本不能承受重物。二是计算机复杂性不断增加。这一点对于很多人来说并不感到惊奇。人类做的任何事情,都是越来越复杂。你不整理住的地方很快就乱了,有没有这种经验?当然,你的生活随着年龄的增长,也会越来越复杂。最初,计算机的组件虽然巨大,但数量少,且功能简单,现在,一台计算机里面包括的元件数量实在是太多了。

硬件成本的下降和计算机复杂性的提高就推动了操作系统的演变。成本降低意味着同样的价格可以买到更先进的计算机。而复杂性提高自然需要操作系统的能力也得提高。就是这些变化使得操作系统从最初的仅仅几百或几千行代码的独立库函数,发展到今天多达4000万行代码的操作系统(如Windows XP),而某些Linux的版本的代码行数更加庞大。

操作系统之所以越来越复杂是因为硬件质量和数量的提升使得操作管理的东西增多,而且人类永不满足的各种越来越苛刻的要求也使得计算机操作系统的复杂性增加。

另外,还有另外一个附加因素影响着操作系统的发展,这就是操作系统和攻击者之间的博弈。这个世界上总有些人想利用计算机的缺陷来进行各种损人利己或损人又不利己的活动。操作系统在最初设计时根本就没有想到会有人从事破坏活动。大概因为最早的计算机工作者认为能够达到使用计算机水平的人都是好人,无需设计任何安全机制。这样,在后来发现有人试图利用计算机进行不良操作时,就迫不得已修改操作系统,使其具有安全上的防范功能。每当操作系统改进了安全性,攻击者也会改良他们的攻击手段,这样循环往复,造就操作系统安全水平和攻击者攻击水平不断交替上升。

下面我们就来说一说操作系统是如何因上述驱动因素的变化而变化的。2.1 第一阶段:状态机操作系统(1940年以前)

这是计算机处在萌芽时期出现的操作系统。这种操作系统运行在英国人巴贝斯(Babbes)想象中的自动机中。所谓状态机操作系统实际上算不上是我们现在通常所定义的操作系统,而是一种简单的状态转换程序:根据特定输入和现在的特定状态进行状态转换而已。这个时候的计算机也不是现代意义上的计算机,而是所谓的自动机,其功能非常简单,可以用原始来形容。能做的计算也只限于加减法。这个时代的操作系统没有什么功能,不支持交互命令输入,也不支持自动程序设计,甚至这个时候还没有存储程序的概念。

驱动这一阶段操作系统的动力是个人英雄主义。因为此时尚无任何计算机工业、计算机研究及计算机用户。计算机及其操作系统的发展完全是某些人的个人努力。

这个阶段因为计算机刚刚出现,没有多少人能够接触到计算机,自然不存在什么安全问题。

这个阶段没有操作系统。如果非要说有的话,人就是这个时代的操作系统:因为自动机的一切动作均是人在操控的。2.2 第二阶段:单一操作员单一控制端操作系统(20世纪40年代)

这种单一操作员单一控制终端(Single Operator, Single Console, SOSC)的操作系统是在刚出现计算机时人们能想到的最直观的控制计算机的方式。这个时候的代表机型为美国宾夕法尼亚大学与其他机构合作制作的ENIAC计算机。这是第一台电子计算机,但不是第一台计算机。在这之前有个英国人造了一部机械计算机,通过手柄摇动进行计算。在ENIAC刚造出来的时候,谁都不知道计算机是怎么回事,所以没有操作系统的整体概念,唯一能想到的就是提供一些标准命令供用户使用,这些标准命令集合就构成了我们的原始操作系统SOSC。

SOSC操作系统的设计目的是满足基本功能,并提供人机交互。在这种操作系统下,任何时候只能做一件事,即不支持并发和多道程序运行。操作系统本身只是一组标准库函数而已。操作系统本身并不自我运行,而是等待操作员输入命令再运行。用户想使用什么服务,就直接在命令行键入代表该服务的对应操作系统的库函数名(文件名)即可。这种操作系统的资源利用率很低:你输入一个命令就执行一个库函数,拨一下动一下。当操作员在思考时或进行输入输出时,计算机则安静地等待。当然了,从人的角度来看,效率并不低,你键入什么,计算机就立即执行什么。但从机器的角度考虑,因为时刻都等着人相对较慢的动作,效率就太低了。

由于这个时代的计算机很稀少,整个世界也只有几台,而人却不是,提高计算机的利用率就变得十分重要。2.3 第三阶段:批处理操作系统(20世纪50年代)

为了提高单一操作员单一控制终端的操作系统SOSC的效率,人们提出了批处理操作系统。在仔细考察了SOSC后,人们发现,SOSC效率之所以低下,是因为计算机总是在等待人的下一步动作,而人的动作总是很慢。因此,人们觉得,如果去掉等待人的时间,即让所有的人先想好自己要运行的命令,列成一个清单,打印在纸带上,然后交给一个工作人员来一批一批地处理,效率不就提高了吗?这样就形成了批处理操作系统。

批处理操作系统的代表、第二代通用计算机IBM的1401和7094等,就是这样通过减少人机交互的时间而达到CPU和输入输出利用率的改善。批处理的过程是:用户将自己的程序编在卡片或纸带上,交给计算机管理员处理。管理员在收到一定数量的用户程序后,将卡片和纸带上的程序和数据通过IBM 1401机器读入,并写到磁带上。这样每盘磁带通常会含有多个用户的程序。然后,计算机操作员将这盘磁带加载到IBM 7094上,一个一个地运行用户的程序,运行的结果写在另一个磁盘上。所有用户程序运行结束后,将存有结果的磁盘取下来,连到IBM 1401机器上打印结果,然后就可以将打印结果交给各个用户了。

很显然,在批处理下,操作系统的功能和复杂性均得到提升。在SOSC环境下,每个用户自己控制程序的开始和结束。而在批处理下,很多用户的程序一个接一个地存放在磁带上,用户本人并不在场,无法自己控制程序的开始和结束。而这个任务就交给了批处理操作系统。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载