内容简介
   本书主要作为操作系统的专业教程,旨在通过从最基础的内容到高级概念逐步阐述的方法揭开操作系统的神秘面纱。作者用深入浅出的语言探讨了进程管理、信息管理和内存管理的复杂机制,并且阐述了死锁、并发等重要主题。本书不仅对计算机科学专业的本科生有帮助,而且对于希望了解操作系统内部工作原理的应用程序员也很有用。◆ 全面介绍了并行处理◆ 介绍了多媒体操作系统◆ 扩充了有关操作系统安全性和保护的内容◆ 加强了介绍分布式处理的内容◆ 关于Linux、Windows NT/2000的典型案例分析信息网站:
从某种意义上讲,我要将这本书献给Narayana Murthy先生,他是一位成功的商人和杰出的计算机科学家。当他离开Patni计算机系统公司(Patni Computer System,PCS)——该公司也就是现在的Patni公司——创办Infosys公司时,我加入PCS接替了他的位置。加入Patni公司时,我发现自己要与大量计算机科学领域尤其是毕业于IIT大学的具有学士、硕士学位的专业人士打交道。当时在Patni工作需要深入理解计算机科学,尤其是操作系统。虽然我毕业于IIT,但只是一个化学工程师,而且我在IIT大学的最后三年更多地阅读了经济学、文学和音乐等方面的著作,而不是工程方面的书籍。 我以前在印度、英国和美国有过应用系统设计和开发的经历,并在那里参与了ERP软件包(MRP II)的设计,而且由于优秀的业绩多次受到IBM表彰。然而,管理计算机科学中那些年轻而且思想活跃的人,实际上对我来说仍是一个挑战。我不信任只“从顶层进行管理”。我想自己完全理解这门技术,这样我就可以做出正确的决策,并且在软件行业这样的组织中受到同事们的尊重。 这就促使我阅读了大量关于数字电子学、算法、计算机体系结构以及操作系统的书籍。在阅读了其中一部分著作(20多本)之后,我认识到有很多介绍“操作系统”的好书,但是还需要一个简单而严密的书能够不夸张地为大家解开操作系统的神秘面纱,并逐步解释操作系统的内部结构。这就使得我自己开始写这样一本书。当我第一次写这本书的时候,并没有考虑任何大学的教学大纲。写这本书并没有任何商业目的,而只是想解开这个主题的神秘面纱。因此,每章后面的习题都旨在帮助学生以一种简单的方式掌握这个主题,而不是从“应试”的角度指点学生。 本书出版了。然而,因为本书并不是作为教材编写的,所以它经过了一段时间才在学生中普及。稍后,人口传诵造成了这个样子。“为了考试需要阅读这样那样的书籍,而如果想要真正了解操作系统这个主题就要先阅读Godbole的这本书”,这就是从成千上百个学生和教授口中传出的评价。因此,即使某些大学并未“推荐”这本书,这些大学中的许多学生也都阅读了这本书。成千上百在英国和美国读书的学生也开始将这本书带到世界各国。本书重印20多次,这更证明了它是一本书,而并不是一本教材。当Narayana Murthy先生和FC Kohli先生(印度软件业的鼻祖)一起在公开场合用“我们知道Achyut作为CEO或MD在其职业生涯中帮助成立了多家软件公司。然而,其中最重要的一点就是他是亚洲唯一一位已经撰写多部深奥的技术书籍并涉及到像‘操作系统’这样复杂的主题的CEO”这样的话语表扬我时,这就成了本书第一版的终结曲。 在多年的默默成功之后,我决定出版这本书的第二版。那时,事情已经发生了变化。大型计算机已经让位于微型计算机,而微型计算机也让位给了实际上功能更为强大的桌面机和便携式笔记本。另外,Windows和UNIX/Linux已经成为全球标准。本书第一版只是简单地介绍了UNIX,但没有提到Linux。有关Windows的内容也需要做大的改动。分布式操作系统、实时操作系统和多媒体操作系统同样正在受到越来越多的欢迎。在新书中需要涵盖所有这些主题,要解释GUI,要用C、C++语言编写的例子替换用COBOL语言编写的例子,而且有关进程间通信(IPC)以及死锁的内容需要更加深刻全面。所有这些都要在保持简单、逐步深入的基础上在本书第二版中进行介绍。这里还有另一个改变。在研究了不同的教学大纲之后,我决定将这本书作为一本合适的教材进行编写。我希望学生不只是从考试的角度找到对自己有用的内容,而且还可以愉快地阅读这本书。 本书主要面向以下5个专业群体: ● 第1类主要是设计和编写操作系统的人员。这个群体需要从最深层次知道操作系统的结构和体系结构。他们要知道操作系统中如何编写不同算法,并在不同层次上组织这些算法从而执行不同的功能和系统调用。这类系统架构师和程序员要研究操作系统的内部结构以及位于操作系统底层的计算机体系结构。 ● 第2类专家就是“系统程序员”。他们需要知道操作系统的内部结构,因为他们要使用系统调用。他们要编写不同的工具包。尤其是,用汇编语言或C语言编写的这些工具包。当操作系统要支持新设备时,也许还要这类人士编写“设备驱动程序”。 ● 第3类包括系统工程师和系统管理员,他们需要安装操作系统,并确保操作系统的顺利运行。虽然他们不需要设计或编写操作系统,但也需要知道操作系统的不同部分和模块,以及这些组成部分和模块互连在一起的方式。这些人员必须能够为了得到较好的性能而调整操作系统、分配/回收磁盘空间、管理密码和操作系统的安全性等。 ● 第4类是应用程序员。他们用C、C++、VC++、Java/J2EE或.NET 环境为不同的数据库编写程序。操作系统将用于内存分配、文件I/O和进程同步/调度的不同复杂算法和应用程序员分隔开。然而,这个群体也需要知道操作系统工作原理以及操作系统帮助应用系统开发和执行的方法。 ● 第5类人员就是那些永远不会对计算机编程,而只使用计算机的终端用户。这个群体也许只会知道如何“使用”操作系统。从根本上讲,这个群体只会关心操作系统的图形用户界面。他们需要知道在哪里点击可以创建文件,或者是执行特定的程序等。 毫无疑问,本书面向前三类专业人士。从理论上讲,第4类应用程序员并不需要知道操作系统的“内部原理”。然而,如果他们要知道其中的内容,就要进行另外的研究学习。最后的终端用户这个群体可以远离操作系统的细节,但是,具有逻辑思维能力的新学者都可以欣赏本书,因为这本书是用操作系统工作最简单的术语阐述的。这也就是为什么本书有一章介绍计算机体系结构内容的原因。 我认为,对任何计算机科学或信息技术专业的学生而言,本书作为入门课本都非常有用。 本书试图通过逐步深入的方式解释操作系统这个主题,这样任何具有逻辑思维能力的人都可以理解这个主题,而且也不会损失严谨性和准确性,所有5个群体的人都可以从中受益。通常,本书只在解释新术语之后才会使用新术语。 本书按照如下方式组织: ● 第1章涉及到操作系统的历史。它涵盖了操作系统历史上的各个里程碑。本章还介绍了操作系统的发展趋势。 ● 第2章开始先简要介绍了不同级别的编程语言,并给出了每个级别编程语言的视图说明,包括4GL、3GL、2GL和1GL(分别是第4代语言、第3代语言、第2代语言和第1代语言,其中第1代语言是机器语言)。本章描述了各代语言之间的关系,本质上,从不同能力级别抽象地提供了对同一个系统的描述。 ● 第3章介绍了不同系统调用提供的操作系统功能的概念。它阐述了用户/应用程序程序员以及系统程序员关于操作系统的观点。本章给出了将这些观点连接在一起的方式。它按照三种基本类别讨论了这些系统调用,分别是:信息管理(Information Management,IM)、进程管理(Process Management,PM)和内存管理(Memory Management,MM)。本章还给出了这三个模块之间的关系。 ● 第4章定义了“块”的概念,并解释了文件的数据在磁盘上的组织方式。本章详细解释了硬盘和软盘的功能,以及操作系统如何完成从逻辑地址到物理地址的转换从而实现实际的记录读/写。最后介绍了应用程序(Application Program,AP)、操作系统(Operating System,OS)以及数据管理软件(Data Management Software,DMS)之间的关系。 ● 第5章定义了“进程”并讨论了上下文切换和多道编程技术的概念。本章定义了不同的进程状态,并讨论了不同进程状态之间的转移。此外,还介绍了“进程控制块(Process Control Block,PCB)”数据结构的详细内容,并用该数据结构介绍了如何实现对进程的不同操作(如“创建”、“杀死”或“派发”),每个操作都给出了PCB链表如何反映其变化。最后讨论了调度各种进程所用的不同方法。 ● 第6章以生产者-消费者算法为例介绍了进程间通信所遇到的问题。本章讨论了到目前为止人们对互斥提出的各种解决方法。本章最后详细讨论了信号量以及进程间通信中的经典问题。 ● 第7章介绍和定义了死锁,并给出了用图形化的形式描述死锁的方案。本章给出了死锁存在的前提条件。然后,讨论了处理死锁的不同策略,包括忽略死锁、检测死锁、从死锁中恢复、预防死锁和避免死锁等。最后详细介绍了银行家算法。 ● 第8章讨论了不同的比邻和非比邻内存分配方案。对所有这些方案,都强调了硬件对操作系统提供的支持,并详细解释了实现这些方案的方法。 ● 安全性是所有操作系统的一个重要方面。第9章讨论了安全性的概念,以及对安全的各种不同威胁和攻击。然后讨论了由参数传递机制所导致的安全性破坏发生的方式。本章讨论了计算机蠕虫和病毒,并详细解释了这些蠕虫和病毒的工作原理和扩散方式。本章还讨论了不同的安全性设计原则以及增强安全性的各种保护机制。 ● 第10章介绍了并行处理技术的概念,并将其与分布式处理技术和单处理技术进行了比较,讨论了它们各自的优缺点。本章还讨论了用于并行处理的编程技术以及计算机的分类。 ● 第11章定义了“分布式处理技术”的概念,并比较了集中式处理技术和分布式处理技术。本章还介绍了进程分布式处理的三种方式,也就是分布式应用、分布式数据和分布式控制。本章通过一个例子阐明了这些概念。 ● 第12章详细研究了Windows NT和Windows 2000。与Linux操作系统一起,Windows系列的操作系统已经成为技术专家所知道的最重要的概念。本章详细介绍了Windows,包括Windows的体系结构、设计原理以及各种操作系统算法/数据结构。 ● 第13章提供了对UNIX的类似的详细研究。本章详细介绍了UNIX,包括UNIX的体系结构、设计原理以及各种操作系统算法/数据结构。 ● 第14章讲述的是Linux。本章在适当的地方介绍了它和UNIX之间的差别。 ● 第15章活泼而详细地介绍了多媒体操作系统。本章开始介绍了多媒体的概念,然后介绍了多媒体操作系统涉及的不同问题。本章还列出了与这类操作系统相关的技术细节,并给出了让操作系统在这样的实时应用中工作所需的对象。 每章都提供了一个小结和详细的问答题,从而使其成为参考和教学指南的一个很有价值的组成部分。 有很多同事和朋友就操作系统这个主题给我提供了很多帮忙。Satish Joshi、Vijay Khare、Ajay Chamania、Sunil Chitle、K. Shastri、Pradeep Kulkarni、Revi、Atul Kahate、Anand Savkar、Govind Dindore、Ashish Dhume、Cletus Pais、Joan Fernandes、Anand Kumar Pai、Pradeep Waychal、Dhiren Patel、Bhavesh Patel、Parmar、Utpal Kapadia、Jyoti Joshi、Ranjana Ranade以及许多其他同事朋友都在这个过程中鼓励和帮助过我。我已经过世的父亲也曾多次帮我查找一些证据。我的家族朋友Sunandan Kolhatkar博士不仅是我在这一主题上的助手,而且也是我生命中的助手。PCS和Syntel,还有Tata McGraw-Hill出版社也很合作而且提供了很大的帮助。我的妻子Shoba对我这个项目的支持也很大,没有她的支持,这本书就永远不会完成。 第2版能够出书主要是因为Atul Kahate。他是一个很棒的人!他在撰写一些新章节并修改某些原有章节中给我不少帮助。他是个很好的帮手,我很感谢他。他也得到了Mandar Khadilkar、Prasad Shembekar和Bharat、Kulkarni的支持,他们的帮助对于我完成本书也很重要。 Achyut S Godbole