“这是一个瞬息万变的时代。分布式计算的脚步渐行渐远,网格计算的热潮逐步退却,云计算和云存储正慢慢揭开面纱……在所有的变化中,不变的是这些计算的支柱:操作系统!能否深刻理解它也许会决定云时代的‘浮沉’。”
由上海交通大学邹恒明著的《计算机的心智:操作系统之哲学原理》(以下简称《操作系统之哲学原理》)别开生面,以生活哲学的视角对操作系统原理进行阐述,通过逻辑推理来演绎操作系统核心技术的奥秘,其讨论范围包括操作系统的所有基础内容:背景与历史、进程与线程、通信与同步、调度与死锁、分页与分段、磁盘与文件、输入与输出等。此外,作者还以新颖的组织方式讲解了锁的实现、同步机制的发展逻辑、从分段到段页式的演变、多核环境下的同步与调度、操作系统设计的原则等内容。 1操作系统是计算机的心智
《操作系统之哲学原理》,作者在“第一章操作系统导论”的一开始就指出:“一个人觉得操作系统没用,那是因为他不知道怎么用,或者他没有用操作系统的意愿。说明白一点,你如果认为操作系统没用,那是因为你的编程开发处在一个低级的水平上。如果你掌握了操作系统,你的编程水平将显著提高。” 作者指出:要想学好操作系统,具有恰当的思维模式是十分必要的。这个思维模式就是本书所强调的“哲学”。
计算机程序的运行至少需要如下4个因素: 程序设计语言; 编译系统; 操作系统;
指令集结构(计算机硬件系统)。
其中,操作系统在程序的执行过程中具有关键的作用。由于计算机的功能和复杂性不断发生变化(趋向更加复杂),操作系统所掌控的事情越来越多,越来越复杂。同时,操作系统本身能够使用的资源也不断增多。操作系统是一个软件系统,它使计算机变得好用(将人类从繁琐、复杂的对机器掌控的任务中解脱),使计算机运作变得有序(操作系统掌控计算机上所有事情)。因此,操作系统的功能一般包括:
替用户及其应用管理计算机上的软、硬件资源; 保证计算机资源的公平竞争和使用; 防止对计算机资源的非法侵占和使用; 保证操作系统自身正常运转。
作者进一步指出:将操作系统功能进行提升,就可以得出操作系统所扮演的两个根本角色――管理者和魔术师。 本书集中精力对操作系统的核心内容进行分析,用大量的生活实例,生动地解释了操作系统中的主要难点和模糊点,包括锁的实现、同步机制的发展轴线、纯粹分段到段页式的演变、多核环境下的进程同步与调度和操作系统设计等内容,而放弃了操作
系统核心以外的内容,如安全、多媒体系统、虚拟机技术、光盘技术等的论述。全书重点突出、逻辑清晰、内容连贯,便于学生顺利掌握操作系统的核心内容,是了解计算机操作系统原理不可多得的教学参考书。
本书对操作系统原理的讨论充满趣味性:每一章都力求细致地阐明一个主题,将通俗的哲学原理和逻辑推理贯穿于每一个主题,构成全书的有机整体,并适当地引入计算机组成和编译器知识,揭示操作系统在程序运行中发挥的作用,把读者对操作系统的理解带到一个崭新的境界。 2操作系统的哲学原理
在详细论述了操作系统的基本概念和各种机制之后,作者认为:首先,操作系统作为计算机的管理者,需要对计算机的各个组成部分进行管理,这就导致了CPU管理、内存管理、磁盘管理、输入输出管理等操作系统功能的出现和相互关联;其次,操作系统作为魔术师,需要对计算机的各种硬件进行抽象和装扮,以使其显得更大、更快、更好和更容易使用。这些抽象就形成了进程、线程、虚拟内存、文件系统、各种I/O模式等操作系统构造的出现,而这些构造之间也因操作系统魔术师的角色而互相联结起来。作者认为,除了管理和魔幻这两条共同的纽带外,操作系统各个部分还有一个联结纽带,即其设计上所遵循的哲学原理。作者认为:最为重要的核心是不同的生活哲学将导致不同的操作系统设计与构造。
在本书的第七篇(第22章),作者概括性地介绍了操作系统设计的10条哲学原理,它们是:
第1条哲学原理:层次架构。操作系统的功能分为多个模块,并按层次分解。下面一层向上面一层提供功能,而上面一层只能对直接下属进行控制。采用层次结构不仅使得操作系统的构造过程容易,也因为符合人类的习惯而更加易于理解,从而使操作系统结构清晰,节省开发操作系统的成本。
第2条哲学原理:没有对错。作者认为:操作系统本身并无对错之分,只有好坏之分。就像我们不能说Windows是对的,Unix是错的。我们只能说,Windows更容易使用,而Unix不太好使用而已。因此,在设计操作系统时,只要达到功能、效率、公平、正确的平衡即可。例如,操作系统进程调度策略有很多,而每种调度策略有其适用的场景。我们不能说“时间片轮转是对的,而优先级调度是错误的”。
第3条哲学原理:懒人哲学。以Unix操作系统里面fork系统调用的实现为例,作者介绍了在操作系统设计中懒人哲学的应用:fork系统调用中有时需要进行父子进程地址空间的复制,但在设计中“不到万不得已不复制”。这在计算机术语中称为懒惰或延迟的复制。懒人哲学的合理性在于提前将事情做掉也许是一种浪费。
第4条哲学原理:让困于人。以文件系统为例,作者指出:对于操作系统来说,它需要保证自己的正确性,而文件夹对于操作
系统文件系统的正常运转至关重要,因此,文件夹必须保持不能出现问题,操作系统会使用各种原语操作保证文件系统的一致性。而用户文件的一致与否并不影响操作系统本身的运行。虽然用户文件的毁坏有可能激怒用户,但这不是操作系统有义务管的事情。这种哲学就是“让困于人”。
第5条哲学原理:留有余地。例如,文件系统目录夹的记录里面通常都有一部分所谓的保留空间,如DOS目录夹记录里面就有10个字节的保留空间,而事实上,这10个保留字在Windows 98的文件系统里面就得到了利用。如果没有这些保留字,将不得不设计全新的系统而导致无法兼容。
第6条哲学原理:子虚乌有。操作系统的目的是服务上层的应用程序和用户,用户要什么就提供什么。而提供的这种东西虽然在用户看来实实在在,但实际上都是子虚乌有。例如,在操作系统里面,用户看到的内存非常大(其实是与磁盘一样大),速度无限快(其实是与缓存一样快)。但实际上,我们的物理内存可能只不过4G,速度也只有缓存的十分之一。
第7条哲学原理:时空转换。以页表的实现为例。由于页表的尺寸通常太大,占用内存过多,便将页表分级,只保留一部分页表在内存,而其他部分放置于磁盘上。这样,页表所占空间大为减少,但付出的代价就是时间成本。
第8条哲学原理:策机分离。立法就是策略,执法就是实现机制。立法和执法的分离就是所谓的“策机分离”哲学。作者认为,
操作系统里面的策机分离主要是为了实现的灵活性。比如“调度算法参数化”,算法在内核里,参数可以由用户指定。又例如,在程序设计领域,对界面的设计和对界面的实现是分开的;在计算机安全领域,对安全标准的设计 和安全设计的实现是分开的。
第9条哲学原理:简单为美。作者指出,在数学领域有个不成文的共识:“如果一个问题有多个数字表示,那么最简单的表示通常是正确的。”在操作系统设计中,文件存储的方式有网状组织、树状组织、记录流、数据块流和字节流等各种选择,而现代操作系统选择的都是最简单的字节流。
第10条哲学原理:适可而止。作者认为,第10条哲学原理是用来修正前面9条原理的。即在前面9条原理的贯彻过程中,要保持一个度,适可而止。例如,“简单为美”但不能过于简单。正如爱因斯坦所言:“一切都应该尽可能简单,但没有更简单”。 3网络书评
《操作系统之哲学原理》一书出版时间不长,但网络上好评如潮。
有人说:“读了本书,感觉比起一般讲解操作系统的书来说,更加清晰透彻,生动有趣。书中的一些原理讲解让人茅塞顿开,认真看完本书后,操作系统也就掌握得差不多了!”
有人说:“读这本书,用‘爱不释手’也许有些夸张,但不管是熟悉操作系统还是一点不懂,从中得到的启迪,不仅仅是操作
系统的原理,还有深藏在背后的哲理至真。”
有读者指出:本书是“打着哲学旗号的新颖的OS教材”。1 评论说:“神学,哲学,科学,作者似乎想把三者结合为一体,但从每章开头好像和本章内容无甚联系的小故事来看,恐怕还没有做到这一点,每章的技术性讲解还是没有脱离‘科学’而上升到‘哲学’,所以想要从所谓‘哲学’的高度(就像作者在序中说的那样)来理解操作系统的朋友们可能要失望了。但是抛开‘哲学’这个词,单纯从技术上来讲,我很欣赏作者的讲述方式。一改往日教材‘知其然不知其所以然’,甚至连‘知其然’都不太能做到的国内出版教科书的风格,作者用类似OS开发人员视角的方式,从问题―解决方案―优缺点―改进方案―优缺点―再改进方案这样带领我们一路走来,让我们更加深刻地认识到OS的一些本质和原理,以及许多流行的设计为什么是这样。” 一位操作系统老师点评说:“自己多年讲授操作系统,虽然感觉每一次的讲授都会有不同的视角,自认为对Linux内核源代码的阅读有助于原理的讲述,但为什么总有那么一些概念,比如同步、死锁、虚拟内存等像从天空飘然而下,那么硬生生地扔给学生,学生在茫然中不得已地伸手接住,消化与否,无暇顾及,因为还有不少重头炮弹等着学生接呢。听了作者对‘锁’这样一种看似易于理解的概念一步步的演绎过程,似乎明白了操作系统教材(或其他工科书)枯燥之源。计算机世界中的大部分概念本来自于生活,但现有的教材割舍了其源本,把抽象出来的概念悬挂在
空中,让大家望其项背而无法落地,于是,计算机科学的趣味性和逻辑性也零落在书本的边边角角了。”
中国互动出版网的书评1说:“读了《计算机的心智――操作系统之哲学原理》,这本书确实使得我对之前理解得较为生硬的部分操作系统原理豁然开朗了,这种大白话的风格虽有失教材的严谨,但作为灵活生动的学习参考资料的确是不可多得的。然而,贯穿此书的一个细节问题也在阅读过程中逐渐呈现,作者多次引用《圣经》故事,经常使用基督教中的概念做比喻。尽管书中也有一些儒、释、道的理念,但从不少行文表达中都可以看出其暗含的对基督教、神创论的认可。……不过作为一个不信神的读者,我虽然也读过《圣经》的主要篇章,但对作者给出的部分引言或比喻还是难以理解的,例如为什么巴别塔与进程调度问题相关?我也曾试图挑刺似的来找这本书中各处看似不恰当的比喻,包括宗教的和非宗教的。但读着读着,慢慢感觉到自己也没必要和那些文字作对。原因正如宋朝的佛印禅师所说:‘心中有佛,所见万物皆是佛’。作者写出这些比喻,是因为作为一个基督徒,在其信仰的指导下使用其独到的神学观点来思考人造事物,就其个人而言是相当自然的。而我要是有准备挑刺的潜意识,那无论从中看到什么略显玄乎的文字,都会不自觉地将其认定为有失恰当的主观内容。”
但也有不同意见的。有评论说:“我觉得作为一本入门级的书内容还是不错的,有其新颖独到的地方,而且介绍了一些多核
的东西,比较不错。但是作者在每章前面非加上一段欧洲历史等东西,搞得太过牵强,不这样不足以显示哲学原理的地位?再说这个书名,我感觉有点太大了,其实整本书没几处上升到哲学的高度进行总结归纳,绝大部分都是介绍现有技术。尽管其介绍哲学原理的部分有画龙点睛的作用,但是总感觉这样的命名有点虚。”
4图书相关信息
书名:《计算机的心智:操作系统之哲学管理》 作者:邹恒明 著
ISBN:978-7-111-26642-6 页数:309 定价:38.0元
出版社:机械工业出版社 北京市西城区百万庄大街22号 邮编:100037 装帧:平装 出版年:2009-4 5主要内容(目录)
本书的内容结构如图1所示。 本书的主要目录如下: 第一篇基础原理篇 第1章操作系统导论
引子:智者的挑战 1.1人造学科 1.2程序是如何运行的 1.3什么是操作系统 1.4魔幻与管理 1.5用户程序与操作系统 1.6操作系统的范畴 1.7为什么学习操作系统 思考题(以下各章均有,下略) 第2章操作系统历史
引子:操作系统进化的推动因素
2.1第一阶段:状态机操作系统(1940年以前)
2.2第二阶段:单一操作员、单一控制端操作系统(20世纪40年代)
2.3第三阶段:批处理操作系统(20世纪50年代) 2.4第四代:多道批处理操作系统(20世纪60年代) 2.5第五代之一:分时操作系统(20世纪70年代) 2.6第五代之二:实时操作系统
2.7第六代:现代操作系统(1980年以后) 2.8操作系统的演变过程 2.9操作系统的未来发展趋势 第3章操作系统基本概念
引子:“差不多”精神 3.1计算机硬件基本知识 3.2抽象
3.3内核态和用户态 3.4操作系统结构 3.5进程、内存和文件 3.6系统调用 3.7壳
第二篇进程原理篇 第4章进程
引子 (以下各章均有,下略) 4.1进程概论 4.2进程模型 4.3多道编程的效率 4.4进程的产生与消失 4.5进程的层次结构 4.6进程的状态 4.7进程创立 4.8进程与地址空间 4.9进程管理 4.10进程的缺陷 第5章线程
5.1进程的分身术――线程 5.2线程管理 5.3线程的实现方式
5.4现代操作系统的线程实现模型 5.5多线程的关系
5.6讨论:从用户态进入内核态
5.7讨论:线程的困惑――确定性与非确定性 第6章线程通信 6.1为什么要通信
6.2线程对白:管道、记名管道、套接字 6.3线程电报:信号 6.4线程旗语:信号量 6.5线程拥抱:共享内存 6.6信件发送:消息队列 6.7其他通信机制 第7章进程同步 7.1为什么要同步 7.2线程同步的目的 7.3锁的进化
7.4睡觉与叫醒:生产者与消费者问题 7.5信号量
7.6锁、睡觉与叫醒、信号量
7.7管程 7.8消息传递 7.9栅栏 第8章进程调度 8.1调度的目标
8.2处理器调度的总体目标 8.3先来先服务调度算法 8.4时间片轮转 8.5短任务优先 8.6优先级调度 8.7混合调度算法 8.8其他调度算法 8.9实时调度算法
8.10高级议题:调度异常之优先级倒挂 第9章锁的实现 引子:锁的实现哲学
9.1以中断启用与禁止来实现锁 9.2以测试与设置指令来实现锁
9.3以非繁忙等待、中断启用与禁止来实现锁 9.4以最少繁忙等待、测试与设置来实现锁 9.5中断禁止、测试与设置 第10章死锁应对
10.1发生死锁的原因 10.2死锁的描述 10.3死锁的4个必要条件 10.4哲学家就餐问题 10.5死锁的应对 10.6消除死锁的必要条件 10.7银行家算法:冒险的代价 10.8哲学家就餐问题之解
10.9讨论:死锁的思考――综合治理 10.10讨论:死锁、活锁与饥饿 第三篇内存原理篇 第11章基本内存管理 11.1内存管理的环境 11.2内存管理的目标 11.3虚拟内存的概念 11.4操作系统在内存的位置 11.5单道编程的内存管理 11.6多道编程的内存管理 11.7闲置空间管理 第12章页式内存管理 12.1基址极限管理模式的问题 12.2分页内存管理
12.3分页系统的优缺点 12.4翻译速度 12.5缺页中断处理 12.6锁住页面 12.7页面尺寸 12.8内存抖动 第13章页面更换算法 13.1页面需要更换 13.2页面更换的目标 13.3随机更换算法 13.4先进先出算法 13.5第二次机会算法 13.6时钟算法 13.7最优更换算法 13.8NRU算法 13.9LRU算法 13.10工作集算法 13.11工作集时钟算法 13.12页面替换策略 第14章段式内存管理 14.1分页系统的缺点 14.2分段管理系统
14.3分段的优缺点 14.4段页式内存管理 14.5段号是否占用寻址字位
14.6讨论:否定之否定的嵌套――纯粹分段与逻辑分段、分页与段页
第四篇文件原理篇 第15章磁盘操作 15.1磁盘组织与管理 15.2磁盘的结构 15.3盘面的结构
15.4磁盘驱动器的访问速度 15.5操作系统界面 15.6磁盘调度算法 第16章文件基础 16.1为什么需要文件系统 16.2什么是文件系统 16.3文件系统的目标 16.4文件的基本知识 16.5从用户角度看文件系统 16.6地址独立的实现机制:文件夹 16.7文件系统调用 16.8内存映射的文件访问
第17章文件系统实现 17.1文件系统的布局 17.2文件的实现
17.3目录实现:地址独立的实现 17.4闲置空间管理 第18章文件系统 18.1文件系统访问控制 18.2主动控制:访问控制表 18.3能力表 18.4访问控制的实施 18.5文件系统性能 18.6提高系统性能的方法
18.7文件系统设计分析:日志结构的文件系统 18.8海量数据文件系统 第五篇I/O原理篇 第19章输入输出 19.1什么是输入输出 19.2输入输出的目的 19.3输入输出硬件 19.4输入输出软件 19.5I/O软件分层 第六篇多核原理篇
第20章多核结构与内存 20.1以量取胜 20.2多核基本概念 20.3多核的内存结构
20.4对称多处理器计算机的启动过程 20.5多处理器之间的通信 20.6SMP缓存一致性
20.7多处理器、超线程和多核的比较 第21章多核环境下的进程同步与调度 21.1多核环境下操作系统的 修正
21.2多核环境下的进程同步与调度 21.3多核进程同步 21.4硬件原子操作 21.5总线锁
21.6多核环境下的软件同步 原语 21.7旋锁 21.8其他同步原语 21.9多核环境下的进程调度 21.10多核环境下的能耗管理 21.11讨论:多核系统的性能
第七篇操作系统设计原理篇 第22章操作系统设计之原理 22.1操作系统设计的追求
22.2操作系统设计的第1条哲学原理:层次架构 22.3操作系统设计的第2条哲学原理:没有对错 22.4操作系统设计的第3条哲学原理:懒人哲学 22.5操作系统设计的第4条哲学原理:让困于人 22.6操作系统设计的第5条哲学原理:留有余地 22.7操作系统设计的第6条哲学原理:子虚乌有――海市蜃楼之美
22.8操作系统设计的第7条哲学原理:时空转换――沧海桑田之变
22.9操作系统设计的第8条哲学原理:策机分离与权利分离 22.10操作系统设计的第9条哲学原理:简单为美――求于至简、归于永恒
22.11操作系统设计的第10条哲学原理:适可而止 结语 6推荐指数
推荐同行阅读指数:★★★★☆(注:以★★★★★为最高。) 邹恒明博士(图2),美国密歇根大学(University of Michigan-Ann Arbor) 计算机科学与工程博士、中国科学院计算技术研究所计算机科学硕士、华中科技大学计算机科学与工程学
士。曾先后在美国IBM、美国国家数据公司、美国朗讯、美国AT&T贝尔实验室、美国EMC公司工作8年多。参与了EMC公司的Engenity存储操作系统和IBM的AIX操作系统的设计与开发,并为多家跨国公司设计过(信息)灾难恢复解决方案。2003年归国,2003年10月加入上海交通大学,为学科带头人和高可靠软件实验室负责人。研究领域为高可靠软件设计理论、高可用信息系统理论、安全存储技术。目前开设的课程有操作系统、数据结构、计算机组成与系统、数据库系统、算法设计与分析、高可靠软件工程、信息灾难及灾难应对和科技英语。专注于高可靠软件设计基准模型、安全自备份数据存储系统、虚拟机信息攻防战和信息盾技术的研究。 邹恒明 8后记
笔者认为,对一般人来说,《操作系统之哲学原理》这本书读起来还是很累的,作者在书中处处彰显其丰富的知识和跳跃的思维,牵动或者说拖拽着读者。有能力的甚至会“爱不释手”;不喜欢的则会感觉到“疲于奔命”。
毫无疑问,对操作系统原理的认识和理解程度,是计算机专业人士和计算机应用人员之间的一道分水岭。因此,对于希望更为生动地教授本课程的教师,对于正在学习并希望真正掌握操作系统原理的学生来说,认真阅读本书无疑是十分有益的。
因篇幅问题不能全部显示,请点此查看更多更全内容