因为大部分代码都是用 C 语言完成的,并且公开了源代码,所以包括大学在内的使用者纷纷将其移植到自己的环境中,UNIX V6 因此得到广泛使用。在移植过程中,有些开发人员加入了独有的功能,其中一些功能后来也被原始版本所采纳。
从 UNIX V6 派生出来的产品还有很多,但是本书以其原始版本,即在 DEC 公司的 PDP-11/40 设备上运行的系统内核作为说明对象。
贝尔实验室在发布 UNIX V6 之后,于 1979 年又发布了 UNIX 第 7 版(Seventh Edition Unix,UNIX V7 )。加州大学伯克利分校于 1978 年发布了以 UNIX V6 为基础的 BSD 的首个版本。在此之后,UNIX 和 BSD 不断有新版本或派生版本出现。然后又出现了标准化的动向,制定了 POSIX 标准,意在统一各个操作系统所提供的 API。著名的 Linux 也是将 POSIX 标准作为开发目标的。因此,大多数最新的操作系统都和 UNIX(V6 )有着千丝万缕的联系。
内核向用户提供了经过高度抽象的服务。系统对 CPU 或磁盘的操作细节被内核或设备驱动程序隐藏起来,对用户完全透明。
用户程序通过系统调用机制访问内核提供的功能。构成计算机系统的软件集合如图 1-2 所示。应用程序利用 UNIX V6 提供的系统内置的用户程序集(处理用户登录的程序,或是守护程序等)、辅助程序(例如ls、cat等)、程序库等进行处理。系统程序等则利用系统调用(调用内核提供的功能)进行自身的处理。此外,应用程序也可以直接使用系统调用。
内核集中了对系统影响较大的处理,通过限制用户任意执行这些功能,使系统的安 全性和可维护性得以保证。
本节对构成 UNIX V6 运行环境的硬件进行介绍。这里说明的内容将贯穿以后的各章,请读者注意理解。
2美国计算机企业。于 1998 年被康柏公司(Compaq)收购,随后康柏公司又与惠普公司(Hewlett Packard)合并。
PDP-11/40 作为一种 16 位计算机,指令和数据基本都是以 16 比特为单位进行处理的。处理器处理数据的单位称为字(word)。对 PDP-11/40 而言,1 个字的宽度为 16 比特。
PDP-11/40 没有专用的 I/O 总线,而是使用一种名为 Unibus 的总线用于数据的输入输出,Unibus 同时具有 18 比特宽的地址总线 以及周边设备的寄存器被映射到内存最高位的 8KB 空间,因此可以采用与操作内存相同的方法操作寄存器。这种方式被称为内存映射 I/O(Memory Mapped I/O)(图 1-4 )。
Unibus 总线 条信号线 条用于传输地址(地址总线 条用于传输数据(I/O 总线)。——译者注
利用内存映射 I/O,可以用 C 语言将寄存器的操作写成如代码清单 1-1 所示的形式。integ 的含义请参见本书的附录。
。在对系统调用等进行处理时,处理器需要首先从用户模式切换到内核模式。内核模式和用户模式所使用的进程的虚拟地址空间是相互独立的,因此在两种模式间传输数据时,需要了解处理器当前模式和处理器先前模式。
在一些资料中,“内核模式”也译为“核心态”,“用户模式”也译为“用户态”。 ——审校者注PSW[3-0] 会根据指令的执行结果自动设置。关于处理器优先级和陷入位将在第 5 章做详细说明。
r7 称为程序计数器。处理器从 r7 指示的内存地址读取指令,随后解释并执行该指令。处理完成后 r7 将指向容纳下一条指令的内存地址。
内存管理单元(MMU,Memory Management Unit)用于地址变换以及访问权限管理。PDP-11/40 以长度为 8KB 的段(segment)或页(page)为单位,对进程所需的内存进行管理。试图访问不具备权限的内存时,MMU 会引发一个陷入异常(参见第 5 章)。MMU 通过称为 APR 的寄存器(页寄存器)对各段进行设定,并将虚拟地址转换为物理地址。APR 和地址变换的详情会在第 2 章中介绍。
PDP-11/40 的 MMU 具有两个状态寄存器(Status Register)SR0 和 SR2。SR0 用于保存出错信息和内存管理的有效标志(表 1-3 )。SR2 用于保存目标指令的 16 位虚拟地址,可用来确定引起错误的指令(表 1-4 )。
=256KB。PDP-11/40 将周边设备的寄存器映射到内存高位 8KB 的地址空间。处理器利用内存中存储的指令和数据进行运算。
块设备的一部分被用做交换空间。为了在有限容量的内存中运行大量程序,内核会把不需要的数据从内存转移到交换空间,或者将需要的数据从交换空间移回内存。这被称为交换处理,在第 4 章中会对此进行详细说明。
。如果希望了解可执行程序(a.out)的格式请参考第 5 章。本书在希望读者参考 UPM 的某个章节(比如第 2 章)时,会以“UPM(2)”的形式标注。如果在阅读代码时遇到难以理解的内容,也请参考 UPM。1. 手册概要
如果想了解内核以外的、系统内置的用户程序集等内容,请参考上述第 1 章、第 3 章、第 5 章、第 8 章。

