多数操作系统教材都重理论而轻实践,本书希望在这二者之间求取较好的平衡。本书详细论述了操作系统的所有基本概念,包括进程、进程间通信、信号量、管程、消息传递、调度算法、输入/输出、死锁、设备驱动程序、存储器管理、页面调度算法、文件系统设计、安全与保护机制等。同时,本书也详细讨论了MINIX(——一个与UNIX(兼容的操作系统,并提供了完整的源代码供学习之用这样的安排使读者不仅学习到理论,而且能够理解它们如何应用在一个实际的操作系统之中。
本书第一版在1987年出版时,曾引发了操作系统课程教学的一场小小的变革。在此之前多数课程都只讲理论。随着MINIX的出现9许多学校开始增加实验环节以使学生了解实际的操作系统是如何运作的。我们认为这种趋势是可取的3并希望通过本书第二版能进一年加强这种趋势。
MINIX在其出现以来的十年间发生了许多变化,最初的代码是为基于8088芯片、256K内存和两个软驱的IBM PC机型编写的,它基于UNIX版本7。随着时间的推移,MINIX在许多方面有所发展,比如当前版本可运行在众多机型上,从16位实模式的Pc机到配有大容量硬盘的奔腾机(32位保护模式),而且它不再基于UNIX版本7,而是基于国际上的POSIX标准(POSIX 1003.1和ISO 9945-1)。与此同时,有许多新特征被添加到MINIX中,在我们看来,所增加的特征可能已经太多了,但有些人则认为还不够,这最终导致了LINUX的诞生。 MINIX还被移植到许多其他平台上,包括Macintosh、Amiga、Atari和SPARC.本书只涉及M则说2.0,到目前为止,该版本只能运行于基于80x86的机器或者可模拟此类CPU的机器,或者运行于SPARC机器。
与第一版相比,第二版有许多变化,原理性部分基本都被修改过,同时增加了大量新内容。最主要的变化是新的基于POSIX的MINIX,以及对其源代码的剖析。另外,每本书都附带一张CD-ROM,它包含了全部MINIX源代码,以及在PC上安装MINIX(的说明(见CD—ROM主目录下的README.TXT文件).
在一台80x86的PC机上安装MINIX(很方便。它需要一个至少30MB的硬盘分区,然后按照CD-ROM上README.TXT文件中的步骤进行即可。在打印README.TXT文件之前,先启动MS-DOS(若运行WINDOWS,则双击MS-DOS图标),然后键入copy readme.txt prn即可。该文件也可以用edit、wodpad、notepad等任何可以处理ASCⅡ正文的编辑器进行浏览。
对于没有Pc机的学校和个人,有两种解决办法,即CD-ROM上提供的两个模拟程序。一个是由Paul Ashton为SPARC机器编写的,可作为用户程序在Solaris上运行,此时MINIX被编合成SPARC上的可执行文件。在这种模式下,MINIX不再是一个操作系统,而只是一个用户程序,所以必须对其底层做一些修改。
另一个模拟程序由Bochs软件公司的Kevin P.Lawton编写,它解释Intel 80386的指令集以及足以使M取搬运行所需的I/O指令。显然,在解释器层次上运行使性能有所下降,但这使得学生更容易进行调试。该模拟程序运行在所有支持M.I.T的x-Window的系统上,更详细的信息诸参看。CD-ROM上的有关文件。
MINIX仍在继续发展,本书和CD—ROM中的内容仅仅反映了本书出版时的情况,有关MI-NIX的最新动态请访问MINIX的主页:http://www.cs.vu.nl/~ast/minix.html。 MINIX也有自己的USENET新闻组:comp.os.minix,读者可以订阅该新闻组。对于仅有e—mdl的读者可通过以下步骤来加入MINIX的邮件用户通信组。给1istserv@listserv.nodak.edu发一封信,其中只需一行字:“subscribe minix-l<您的完整用户名>”,此后你便会通过e—mai1获得很多的信息。
讲授本课程的教师可以从Prentice Hall出版公司获得一份习题解答手册。从WWW地址httP://www.cs.W.nl/ast/沿着“Software and supplementary material”链接可以获得一些有用的PostScript文件,其中包含本书中所有的图表,可供需要时使用。
在MINIX(的开发项目中我们有幸得到了许多人的帮助。首先要感谢Kees Bot在MINIX标准化和软件发布中所做的大量工作,没有他的帮助,我们不可能完成这件工作。他自己编写了大量的代码(如POSIX终端I/O),并修正了一些数年来一直存在的错误,还整理了其他的代码。
这些年来,Bruce Evans、Philip Homburg、Will Rose和Michael Temari为MINIX的开发做了大量的工作。有几百人通过新闻组对MINIX做出了贡献,他们人数众多,所做出的贡献也各不相同,在此谨向他们一并表示感谢。
John Casey、Dale Grit、Frans Kaashoek等人阅读了本书的部分手稿并提出了宝贵建议,在此向他们表示谢意。
Vrije大学的许多学生测试了CD—ROM中MINIX的β版本,他们是:Ahmed Batou、Goran Dokic、Peter Gijzel、Thomer Gil、Dennis Grimbergen、Roderick Groesbeek、Wouter haring、Guido Kollerie、Mark Lassche、Raymond Ris、Frans ter Borg、Alex van Ballegooy、Ries van der Velden、Alexander Wels以及Thomas zeeman。我们对他们细致的工作和详尽的报告致以衷心的感谢。
阿尔伯特·S·伍德豪尔向他从前的几位学生表示感谢,特别是Hampshire学院的Peter W.Young,Nacional Autonma de Nicaragua大学的Maria Isabel Sanchez和Willam Puddy Vargas。
最后要向我们的家庭成员表示感谢。 Suzanne已是第十次在我埋头写作时给我支持,对Barbara是第九次,Marvin是第八次,甚至小Bram也是第四次了。他们的支持和爱心对我非常重要。(塔嫩鲍姆)
至于阿尔伯特的Barbara,这倒是第一次,假如没有她的支持、耐心和幽默,我们是不可能完成这一工作的;对我的儿子Gordon而言,在编写本书时,他大部分时间都不在家中,而是在大学学习,但是,他与我志趣相投,并能理解和关注我所从事的工作,这让我感到十分欣慰。(伍德豪尔)
安德鲁·S·塔嫩鲍姆
阿尔伯特·S·伍德豪尔