和Steve之间的通信--关于《UNIX技术内幕》的勘误及遇到的问题_3



From: quntmec@hotmail.com
To: qf.hao@hotmail.com
Subject: 关于《UNIX技术内幕》的勘误及遇到的问题_3
Date: Thu, 6 Oct 2011 19:24:10 +0800

郝先生,

对于启动模块这一章,我有一些疑问,如下:

1、61页,代码第12~16句,其中第16句的意思如下:

(1)r3=r3-1
(2)判断r3是否为0,如果不等于0,则跳转至12句

如果上面的理解没错,那书里16页最下面处对于指令sob的解释似乎不太对(即 PC=PC-2 * offset,应改为跳转至

offset)
:sob r3,1b这条指令中的1b会被汇编器翻译成和第12行之间的偏移除2. 这和其他指令如br, beq等一样。


 
2、61页,代码第20句,

bic $!1777, r2

我猜测该句的意思是先将8进制数1777按位取反,然后再进行bic运算。是这样吗?
:是。

3、61页,代码第22句,

mov $USIZE-1\
我猜测该句的意思是先将($USIZE-1)左移8位,然后与数字6进行或运算。是这样吗?另,在PDP11/40里,\ 和 \是转义,把\

4、根据64页图4-5,图4-6,可知KISA0本身代表的是[0~8K-1],KISA1本身代表的是[8k~16K-1],KISA2本身代表的是[16~24K-1].....
此外,根据32页对PAR,PDR的描述可知,虚拟内存中的每一页对应的物理内存的起始(PAF)和大小(PLF)都是可以设定的。

那我就比较疑惑:

(1)假设每个虚拟页都是8KB,那为何一定是KISA1对应[8k~16K-1],KISA2对应[16~24K-1];而不是反过来,KISA2对应[8k~16K-1],KISA1对应[16~24K-1]?这是否是由PDP11/40系统本身决定的?
这里对应的[8k~16K-1]是虚拟地址,这是固定的。由寄存器本身特性决定。

(2)在PDP11/40中,假设内存大小是64KB,如果每个页的大小设置为2KB(在PLF中设置),那该如何设置KISA0~KISA7?KISA0对应的是[0~8K-1]还是[0~2K-1]?
:KISA0~7可以随意设定,KISA0对应[0~2K-1]。需要理解虚拟地址和物理地址的区别。
PDP11/40中一个物理块是64字节,可以把它想象成4K页面。

个 人感觉书里的例子有些特殊,是以每页8KB为例的,对于64KB的内存刚好8页(KISA0~7)。此外,就我的理解而言,KISA0对应的应该是 [0~2K-1],因为在X86中虚拟页与物理框是大小一致的(例如要么都是4KB),缺多少页也就调多少物理框。不知道这PDP11/40中是否也是这 样?

此外,勘误如下:

内容
16     倒数第2行(sob指令),时钟应为“始终”
:对

Steve


《返璞归真--UNIX技术内幕》

上一篇:和Steve之间的通信--RE: 关于《UNIX技术内幕》的勘误及遇到的问题_4


下一篇:数据显示欧美Windows 7用户正在集体升级至Windows 10