PDP 11/40 机器: Unix V6 运行的硬件平台

因为我们现在介绍的的 Unix V6 是最初的原始版本,这个版本运行在 DEC 公司的 PDP 11/40 设备上。

PDP-11 系列是由数字设备制造公司 (Digital Equipment Corporation)DEC 设计制造的处理装置。博客的内容是由 PDP 11/40 为处理对象的。

1. PDP-11/40 是 16 位的计算机,指令数据基本上都是以16bit进行处理的。 (难道说每个 指令都是  16 bit 吗?)
2.  处理器处理数据的单位称为 字 (word),对于PDP-11/40 而言,一个字的宽度为16bit
3. PDP-11/40 没有专用的I/O 总线,而是使用一名为Unibus的总线用于数据的输入和输出。
4. PDP-11/40的寄存器 以及  周边设备的寄存器都被映射到内存的最高的 8 KB空间。因此可以采用与操作内存相同的方式来操作寄存器。(也就是内存映射I/O, memorry mapped I/O)I/O      其实也就是读写寄存器罢了。  




5. 利用内存映射 I/O,我们可以利用C语言,将寄存器的操作写成如下形式。
 
/*寄存器被映射的地址。内存的高8KB为寄存器地址*/
#define REG_ADDRESS 0170000

struct {
     int integ;
};

mian(){
     int a;
     a = REG_ADDRESS->integ;    /*从寄存器中读取数据*/
     REG_ADDRESS->integ =0;    /*向寄存器中写入数据*/
}


6. PSW 状态寄存器,也成为处理器状态字,一台PDP-11/40中仅此一个。(Processor Status Word, PSW), 是一个16位的寄存器。
比特位 含义
15~14 处理器当前模式(00: 内核模式,11:用户模式)
13~12 处理器先前模式 (00: 内核模式,11 :  用户模式)
7~5 处理器的优先级 (7~0,数字越小,优先级别越高)
4 陷入(trap)位
3 负位。 指令执行结果为负时置一。
2 零为。指令执行结果为0时置一。
1 溢出位。指令执行中发生溢出的时候 置一。
0 借位位。 指令执行中发生借位或者进位是置一。


处理器模式为00 的时候表示内核模式,处理器模式为11的时候表示用户模式。在对系统调用进行处理的时候,处理器首先需要从用户模式切换到内核模式。
内核模式和用户模式使用的虚拟地址空间是相互独立的,所以如果需要在这两种模式之间传送数据的时候,需要了解处理器的当前模式和先前模式。

PSW[3~0]: 会根据指令的执行结果 由处理器自动的设置。 关于处理器优先级和陷入位,以后在进行说明。


7  通用寄存器 

PDP-11/40 具有 r0 ~ r7 8个通用寄存器。
其中 r6 为两个,分别对应用户模式和内核模式。在切换PSW的当前模式的时候,r6在硬件上也会自动进行切换
通用寄存器 用途
r0, r1 用于运算、函数的返回值
r2, r3, r4, 本地处理
r5 帧指针/环境指针
r6(也成为sp) 栈顶指针
r7(pc) 程序计数器


其中 r1 经常被编译器用作函数的返回值。
r5: 称为帧指针或者环境指针,在进行函数调用的时候用处非常大。可以在不同的函数调用之间进行跳跃。
r6(sp):   栈顶指针,它指向各个进程所拥有的栈的顶端。(内核栈 和 用户栈),在汇编语言中称为  sp。
r7(pc):   程序计数器,指向程序要执行的下一条指令的地址。  处理器从 r7 指示的内存地址读取指令,随后指示并且执行该指令。
               处理完后r7将指向容纳下一条指令的内存地址。

8  MMU (Memory Manage Unit 内存管理单元)

   MMU 用于地址变换,以及 访问权限管理。
     
   PDP-11/40 以长度为80的段(segment)为单位,对程序所需要的内存进行管理。 
   试图访问不具有权限的内存,将引发一个陷入异常
   MMU 通过 称为 ARP的页寄存器 对各个段进行设定,并且将虚拟地址转化为物理地址。
   
    PDP-11/40的MMU具有两个状态寄存器 (Status Register) SR0 和 SR2。SR0 用来保存 出错信息以及内存管理的有效标志。 SR2 用来保存目标指令的 16 位的虚拟地址,可以用来确定引起错误的指令。  

SR0
比特位 含义
15 访问设定错误的页的时候置一
14 访问由 PDR 规定的页长度以外的区域的时候 置一
13 试图向只读区域写入数据时置一
8 维护模式。 (本书不做说明)
6~5 出错进程的模式 (00, 11)
3~1 页编号。 可用于确定引起错误的内存页
0 置一时,MMU 对内存的管理有效

15~13,以及6~1 都是由机器自动设定的。
SR0[0]: 可以由指令进行设定。

SR2
比特位 含义
15~0 容纳目标指令的16位的虚拟地址。当读取指令失败的时候 SR2的值不更新。另外,如果SR[15~13]的任意1位为1的时候,SR2的值也不更新




9.  PDP-11/40 的内存
     内存也成为 磁芯内存(现在的内存是电容的)。
     
     内存以8bit (1个字节)为单位赋予地址。 地址长度为 18 bit。 因此内存的容量是 (2^18 = 256KB)。 
     PDP-11/40 将周边设备的寄存器映射到内存高位 8KB 的地址空间。
     处理器 利用内存汇总存储的指令和数据进行计算。

(可以看到,256KB的内存好少啊,那么一个进程可以占用的内存也就更少了,又是如何规划着写内存的呢?)



10  块设备
磁盘设备和磁带设备可以容纳大量的数据,对它们进行数据处理是按照 数据块的方式进行的。因此称为块设备。
文件系统构筑与块设备之上。


11 行式打印机



12 终端



13 手册

UNIX Programmer's Manual (UPM) 的手册,阅读内核代码的时候要特别注意第二章第四章






























阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页