欢迎光临我的博客
分类: LINUX
2010-06-20 15:22:22
为了更好地理解UNIX源代码,我们需要首先了解UNIX运行的硬件环境。
UNIX可以运行在PDP 11/40、11/70处理器上。PDP 11/40是数字设备公司(DEC——Digital Equipment Cooperation)在1972年推出的一款16位处理器。其主频为1.28M Hz,最大直接寻址空间达64KB(216)。其物理地址空间可被扩展为18或22位,从而达到256KB甚至4MB。而现代个人电脑最普通的Intel 32位处理器,都能达到1G以上的主频,直接寻址空间达4G。相比之下,PDP 11/40的性能也许显得有些可怜,但是它在当时却是一个了不起的成就,先进的设计理念使得它的硬件架构和现代处理器并无二致:中断及中断优先级的支持、内核模式和用户模式的双操作模式、虚拟内存、对多个I/O设备的支持、DMA传输、堆栈等。
PDP 11/70是11/40的升级版,它也是16位处理器。除了在地址位的扩展、浮点处理和CPU性能上的一些提高之外,它和11/40并没有任何区别。这就保证了PDP11/40的后向兼容性。事实上,整个PDP 11处理器家族都良好地保持着这一点。本书中UNIX的源代码对此是一个很好的证明,代码中对PDP11/70做特殊处理的部分不超过100行。
PDP 11/40的所有设备包括CPU都连接到总线(UNIBUS)上,如图2-1所示。总线具有很高的数据传输速率,其最大传输速率达到40Mbit/s(当前计算机前端传输速率可达1033Mbit/s,最新型I/O总线PCI-Express则可达102.4Gbit/s。)。PDP 11/40的总线由56根线组成,所有的数据、地址和控制信息都沿着这56根线传送。CPU和主存、I/O设备之间、I/O设备和主存之间都是通过总线互相通信。总线上设备之间的通信通过主从模式(master-slave)实现。比如,当CPU需要读取下一条指令时,它将地址信息发送至总线上,向总线发出读取主存的命令,这时CPU就是主设备,主存就是从设备。当读取完成后,数据沿总线传送至CPU。
当一对主从设备在总线上进行数据传输时,总线被锁定(interlocked),直至数据传送完成,该总线被释放。
PDP 11/40的数据排列是小数端(little endian),即对单字而言,低字节在前(低地址),高字节在后(高地址)。若整数0x1011位于地址0x1000处,则0x11位于0x1000,0x10位于0x1001。
本书后面章节代码中的数字很多使用8进制来表示,这是因为PDP 11/40芯片对数据是按8进制处理的,包括其指令设计,很多都是8进制格式。
1)中断
中断是主存、I/O设备等外部设备向CPU发起的事件通知信号。该信号通知CPU某外设需要获取总线(Bus Request),进行特定任务的处理。该任务包括如下两种:
(1)实现一个没有CPU参与的数据传送。比如DMA数据传输。一个例子是:磁盘数据直接传送至CRT显示器,从而实现屏幕的刷新。
(2)打断当前程序的执行,强制CPU实现某个服务请求。
PDP 11/40共分有9级中断,优先级分别从0~7(值越大表示优先级越高)的中断和最高级中断——非处理器请求(NPR——None Processor Request),也就是上述任务(1)。高级中断可以打断低级中断而优先执行。但实际上除了NPR中断外,系统只实现了4~7级中断,中断优先级3~0和中断优先级4是相同的,如图2-2所示。
图2-2中BR是Bus Request的缩写。Dn代表某个外部设备(Device)。连接在不同的中断请求线BRx上的设备具有该中断请求线的优先级。
... ...
2)自陷
除了中断外,PDP 11/40还具有自陷(trap)功能。自陷原理上和中断很相似,也是通过打断当前程序的运行而获优先执行。区别是自陷的优先级永远是7;产生源是CPU自身,比如非法地址访问、非法指令执行等都会产生自陷。而中断的产生源是除CPU外的外围设备,比如磁盘、电传终端(Teletype)等。有一种特殊的自陷是系统访问的接口,用于实现系统调用(open、read、write等)来访问内核资源。
另外,PSW寄存器中的中断屏蔽位并不能屏蔽自陷的产生,哪怕它的值是7,从这个意义上来讲,自陷可以认为是“第8级中断”。
3)属性列表
当前中断(自陷)的优先级存放在PSW寄存器的bit 7~5。PDP 11/40各种中断(自陷)的一个列表如下:
中断(自陷)产生源 |
类别(中断/自陷) |
优先级 |
中断向量地址(10进制) |
线性时钟(Line Clock) |
中断 |
6 |
100 |
实时时钟(Realtime Clock) |
中断 |
6 |
104 |
磁盘 |
中断 |
5 |
220 |
KL-11/DL-11 |
中断 |
4 |
60 |
PC-11 |
中断 |
4 |
70 |
LP-11 |
中断 |
4 |
200 |
总线错误(bus error) |
自陷 |
7 |
4 |
非法指令 |
自陷 |
7 |
8 |
断点 |
自陷 |
7 |
12 |
I/O自陷 |
自陷 |
7 |
16 |
供电异常 |
自陷 |
7 |
20 |
仿真器 |
自陷 |
7 |
24 |
系统调用 |
自陷 |
7 |
28 |
奇偶错 |
自陷 |
7 |
114 |
程序中断 |
自陷 |
7 |
240 |
浮点运算异常 |
自陷 |
7 |
244 |
段违例 |
自陷 |
7 |
248 |
其中,KL-11/DL-11:一种串行接口,用于连接电传终端(tty---Teletype)和CRT显示器等。PC-11:纸带读取/打孔机。LP-11:Line Printer,行打印机。
... ...
本书在全国各大书店及网城均有销售: