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\<8|6,(r1)+
我猜测该句的意思是先将($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技术内幕》
阅读(5033) | 评论(0) | 转发(0) |