本书共6章,涵盖了操作系统课程的所有内容,即传统上的进程管理、存储器管理、文件管理和设备管理, 同时又包含线程、基于消息传递系统的构造模型、日志结构文件系统、安全保护机制、RAM及CD—ROM盘等,且以Pentium CPU作为实例。这样,既能学习操作系统的经典内容,又能了解当前最新技术。
本书为第二版,其第一版于1987年出版时,曾引发了操作系统课程教学的一场小变革。因为,在那以前多数教材只讲理论,而本教材却是基于理论与具体实例(MINIX)的结合。这对于掌握操作系统的设计与实现是大有稗益的。 本书分为上、下两册。上册为正文部分,下册为三个附录及随书光盘。
第1章引言
1.1什么是操作系统
1.1.1操作系统作为虚拟机
1.1.2操作系统作为资源管理器
1.2操作系统发展历史
1.2.1第一代计算机(1945~1955):真空管和插板
1.2.2第二代计算机(1955~1965):晶体管和批处理系统
1.2.3第三代计算机(1965~1980):集成电路芯片和多道程序
1.2.4第四代计算机(1980~现在):个人计算机
1.2.5MINIX的历史
1.3操作系统基本概念
1.3.1进程
1.3.2文件
1.3.3命令解释器
1.4系统调用
1.4.1进程管理系统调用
1.4.2信号管理系统调用
1.4.3文件管理系统调用
1.4.4目录管理系统调用
1.4.5保护系统调用
1.4.6时间管理系统调用
1.5操作系统结构
1.5.1整体式系统
1.5.2层次式系统
1.5.3虚拟机系统
1.5.4客户—服务器系统
1.6各章内容简介
1.7小结
习题
第2章进程
2.1进程介绍
2.1.1进程模型
2.1.2进程的实现
2.1.3线程
2.2进程间通信
2.2.1竞争条件
2.2.2临界区
2.2.3忙等待的互斥
2.2.4睡眠和唤醒
2.2.5信号量
2.2.6管程
2.2.7消息传递
2.3经典IPC问题
2.3.1哲学家进餐问题
2.3.2读者与者问题
2.3.3理发师睡觉问题
2.4进程调度
2.4.1时间片轮转调度
2.4.2优先级调度
2.4.3多重队列
2.4.4最短作业优先
2.4.5保证调度算法
2.4.6彩票调度算法
2.4.7实时调度
2.4.8两级调度法
2.4.9策略与机制
2.5MINIX进程概述
2.5.1MINIX的内部结构
2.5.2MINIX中的进程管理
2.5.3MINIX中的进程间通信
2.5.4MINIX中的进程调度
2.6MINIX中进程的实现
2.6.1MINIX源代码的组织
2.6.2公共头文件
2.6.3MINIX头文件
2.6.4进程数据结构和头文件
2.6.5引导MINIX
2.6.6系统初始化
2.6.7MINIX的中断处理
2.6.8MINIX的进程间通信
2.6.9MINIX的进程调度
2.6.10与硬件相关的内核支持
2.6.11实用程序和内核库
2.7小结
习题
第3章输入/输出系统
3.1 I/O硬件原理
3.1.1 I/O设备
3.1.2设备控制器
3.1.3存储器直接存取
3.2 I/O软件原理
3.2.1 I/O软件的目标
3.2.2中断处理程序
3.2.3设备驱动程序
3.2.4与硬件无关的I/O软件
3.2.5用户空间的I/O软件
3.3死锁
3.3.1资源
3.3.2死锁的原理
3.3.3鸵鸟算法
3.3.4死锁检测和恢复
3.3.5死锁的预防
3.3.6避免死锁
3.4 MINIX I/O系统概述
3.4.1 MINIX的中断处理程序
3.4.2 MINIX的设备驱动程序
3.4.3 MINIX中与设备无关的I/O软件
3.4.4 MINIX中用户级I/O软件
3.4. MINIX的死锁处理
3.5 MINIX中的块设备
3.5.1 MINIX中块设备驱动程序概述
3.5.2通用块设备驱动程序软件
3.5.3驱动程序库
3.6 RAM盘
3.6.1 RAM盘硬件和软件
3.6.2 MINIX中的RAM盘驱动程序慨述
3.6.3 MWDE中的RAM盘驱动程序实现
3.7磁盘
3.7.1磁盘硬件
3.7.2磁盘软件
3.7.3 MINIX中的硬盘驱动程序简介
3.7.4 MINIX中的硬盘驱动程序实现
3.7.5软盘处理
3.8时钟
3.8.1时钟硬件
3.8.2时钟软件
3.8.3 MINIX时钟驱动程序简介
3.8.4 MINIX时钟驱动程序实现
3.9终端
3.9.1终端硬件
3.9.2终端软件
3.9.3 MINIX中终端驱动程序简介
3.9.4设备无关终端驱动程序实现
3.9.5键盘驱动程序的实现
3.9.6显示驱动程序的实现
3.10 MINIX中的系统任务
3.11小结
习题
第4章存储器管理
4.1基本的内存管理
4.1.1没有交换和分页的单道程序
4.1.2固定分区的多道程序
4.2交换
4.2.1使用位图的内存管理
4.2.2使用链表的内存管理
4.3虚拟存储器
4.3.1分页
4.3.2页表
4.3.3 TLB——转换后援存储器
4.3.4逆向页表
4.4页面替换算法
4.4.1最优页面替换算法
4.4.2最近未使用页面替换算法
4.4.3先进先出页面替换算法
4.4.4第二次机会页面替换算法
4.4.5时钟页面替换算法
4.4.6最久未使用页面替换算法
4.4.7用软件仿真LRU
4.5分页系统中的设计问题
4.5.1工作集模型
4.5.2局部与全局分配策略
4.5.3页面大小
4.5.4虚拟存储器界面
4.6分段
4.6.1纯分段系统的实现
4.6.2分段和分页结合:MULTICS
4.6.3分段和分页结合:Intel的Pentium
4.7 MINIX内存管理概览
4.7.1内存布局
4.7.2消息处理
4.7.3内存管理器数据结构和算法
4.7.4 FORK、EXIT和WAIT系统调用
4.7.5 EXEC系统调用
4.7.6 BRK系统调用
4.7.7信号处理
4.7.8其他系统调用
4.8 MMINIX中内存管理的实现
4.8.1头文件和数据结构
4.8.2主程序
4.8.3 FORK、EXIT和WAIT的实现
4.8.4 EXEC的实现
4.8.5 BRK的实现
4.8.6信号处理的实现
4.8.7其他系统调用的实现
4.8.8内存管理器工具
4.9小结
习题
第5章文件系统
5.1文件
5.1.1文件命名
5.1.2文件结构
5.1.3文件类型
5.1.4文件存取
5.1.5文件属性
5.1.6文件操作
5.2目录
5.2.1层次目录系统
5.2.2路径名’
5.2.3目录操作
5.3文件系统的实现
5.3.1实现文件
5.3.2实现目录
5.3.3磁盘空间管理
5.3.4文件系统的可靠性
5.3.5文件系统性能
5.3.6日志结构的文件系统
5.4安全性
5.4.1安全环境
5.4.2著名的安全缺陷
5.4.3一般的安全性攻击
5.4.4安全性的设计原则
5.4.5用户验证
5.5保护机制
5.5.1保护域
5.5.2存取控制表
5.5.3权限
5.5.4隐藏通道
5.6MINIX文件系统概述
5.6.1消息
5.6.2文件系统布局
5.6.3位图
5.6.4i节点
5.6.5块高速缓存
5.6.6目录和路径
5.6.7文件描述符
5.6.8文件锁
5.6.9管道和设备文件
5.6.10一个例子:READ系统调用
5.7 MINIX文件系统的实现
5.7.1头文件和全局变量
5.7.2表的管理
5.7.3主程序
5.7.4对单个文件的操作
5.7.5目录和路径
5.7.6其他系统调用
5.7.7 I/O设备界面
5.7.8一般的实用程序
5.8小结
习题
第6章阅读材料和参考文献
6.1推荐的进一步的阅读材料
6.1.1介绍和概论
6.1.2进程
6.1.3输入/输出
6.1.4存储器管理
6.1.5文件系统
6.2按字母排序的参考文献
多数操作系统教材都重理论而轻实践,本书希望在这二者之间求取较好的平衡。本书详细论述了操作系统的所有基本概念,包括进程、进程间通信、信号量、管程、消息传递、调度算法、输入/输出、死锁、设备驱动程序、存储器管理、页面调度算法、文件系统设计、安全与保护机制等。同时,本书也详细讨论了MINIX--一个与UNIX兼容的操作系统,并提供了完整的源代码供学习之用这样的安排使读者不仅学习到理论,而且能够理解它们如何应用在一个实际的操作系统之中。
本书第一版在1987年出版时,曾引发了操作系统课程教学的一场小小的变革。在此之前多数课程都只讲理论。随着MINIX的出现9许多学校开始增加实验环节以使学生了解实际的操作系统是如何运作的。我们认为这种趋势是可取的3并希望通过本书第二版能进一年加强这种趋势。
MINIX在其出现以来的十年间发生了许多变化,最初的代码是为基于8088芯片、256K内存和两个软驱的IBM PC机型编写的,它基于UNIX版本7。随着时间的推移,MINIX在许多方面有所发展,比如当前版本可运行在众多机型上,从16位实模式的Pc机到配有大容量硬盘的奔腾机(32位保护模式),而且它不再基于UNIX版本7,而是基于国际上的POSIX标准(POSIX1003.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.vu.nl/~ast/沿着“Software and supplementary material”链接可以获得一些有用的PostScript文件,其中包含本书中所有的图表,可供需要时使用。