深入理解计算机系统,第二版

Computer Systems: A Programmer's Perspective, Second Edition (CS:APP2e)

 

 en-cover.jpg                 cn-cover.jpg  

  Computer Systems(Second Edition)                   深入理解计算机系统(中文版第二版)

  

                         英文版官方网站:CS:APPe2 Home Page

                         英文版官方blog:CS:APP Blog

                         中文版此处有售:CHINA-PUB 华章图书卓越当当网蔚蓝书店                                                      

 

CS:APP第二版中文版勘误表

最后修改日期:2015年09月17日(英文版更新至01/19/2015)

                         请将《深入理解计算机系统(第二版)》的勘误问题告诉龚奕利

发现日期

页码行号

原文

修改后

指出人

备注

 

 2011.10.13

P15 1.线程级并发,第二行

时间共享

分时(time-sharing)

中文版勘误

张岩

 

 

 2011.07.06

P17 图1-18中

指令级结构

指令结构

中文版勘误

Ji Bin

第五次印刷中已修正

 

 2013.09.28

P18 参考文献说明第2行

Gavin

Galvin

英文版勘误

Kaustabh Ray

 

 

 2011.01.07

P25 2.1.2节 第一段第三行

虚拟地址的范围为0~2w-1

虚拟地址的范围为0~2w-1

中文版勘误

华章出版社

第五次印刷中已修正

 

 2011.10.13

P32上面代码下第1-2行

即使是完全一样的进程运行在不同的操作系统上也会有不同的编码规则

即使处理器完全一样,但是运行不同的操作系统,也会有不同的编码规则

中文版勘误

张岩

 

 

 2011.06.05

P33 DATA:BOOL中 第4行

a & (b . c)

a & (b | c)

中文版勘误

Darren

第五次印刷中已修正

 

 2011.11.18

P33 DATA:BOOL中 第5行

(a . b) & (a . c)

(a | b)& (a | c)

中文版勘误

刘宗浩

 

 2011.04.24

P35 练习题2.11 B.中

调用函数xor_swap

调用函数inplace_swap

英文版勘误

Kanak Kshetri

第五次印刷中已修正

 

 2011.07.10

P46 第一行

函数B2U和B2T是如何将数值变成位模式的。

函数B2U和B2T是如何给位模式赋值的

中文版勘误

Ji Bin

第五次印刷中已修正

 

 2011.01.07

P46 公式2-8

x<2w-1

u<2w-1

中文版勘误

华章出版社

第五次印刷中已修正

 

 2011.01.07

P47 第二行

65563+-12345=53191

65536+-12345=53191

中文版勘误

华章出版社

第五次印刷中已修正

 

 2011.03.02

P56 练习题2.27下面

丹麦数学家Niels Henrik Abel

挪威数学家Niels Henrik Abel

英文版勘误

Dag Henning Liodden Sørbø

第五次印刷中已修正

 

 2011.07.13

P57 公式2-13上一行

y ≤ 2w-1

y < 2w-1

中文版勘误

Ji Bin

 

 2011.01.07

P57 公式2-13下一行

xw-12w+x

xw-12w+x

中文版勘误

华章出版社

 

 2011.02.01

P57 图2-23标题中

当它大于2w-1+1时,产生正溢出

当它大于2w-1-1时,产生正溢出

英文版勘误

Dominique Smulkowska

 

 2011.07.14

P60 网络旁注DATA:TNEG中第三行

行位级补码非的第一种方法

位级补码非的第一种方法

中文版勘误

Ji Bin

第五次印刷中已修正

 

 2011.01.07

P60 最后一行

-2w-1·-2w-1=-22w-2

-2w-1·-2w-1=22w-2

中文版勘误

华章出版社

第五次印刷中已修正

 

 2011.01.07

P61 图2-26

虽然完整的乘积位级表示相同

虽然完整的乘积位级表示不相同

中文版勘误

华章出版社

第五次印刷中已修正

 

 2011.07.17

P63 2.3.6节第三段第二行中间

等式中的t应为u

中文版勘误

Ji Bin

第五次印刷中已修正

 

 2011.08.03

P68 2.4.1节第二段第一行

小数点左边的数字的权是10的正幂

小数点左边的数字的权是10的非负幂

英文版勘误

Dong Han

 

 2015.05.26

P65 最后一行

对于整数x和任意y>0的y

对于整数x和y且y>0

中文版勘误

chrt2000

 

 

 2011.08.03

P68 2.4.1节第二段第一行

小数点左边的数字的权是10的正幂

小数点左边的数字的权是10的非负幂

英文版勘误

Dong Han

 

 

 2011.08.03

P68 2.4.1节第三段第一行

b-n-1

b-n+1

英文版勘误

Dong Han

 

 

 2011.08.03

P68 公式2-19下面一行

点左边的位的权是2的正幂

点左边的位的权是2的非负幂

英文版勘误

Dong Han

 

 

 2011.08.03

P68 图2-30中

b-n-1

b-n+1

英文版勘误

Dong Han

 

 

 2011.03.05

P71 图2-33

菱形符号表示规格化的,三角形符号表示非规格化的

菱形符号表示非规格化的,三角形符号表示规格化的

中文版勘误

Amulet

第五次印刷中已修正

 

 2012.09.17

P73 倒数第3行

(1-2-n)*2-n-2k-1+2

(1-2-n)*2-2k-1+2

中文版勘误

魏成龙

 

 

 2011.01.07

P74 第一行

除了最高有效位等于1以外,其他位都等于0。

除了最高有效位等于0以外,其他位都等于1

英文版勘误

华章出版社

第五次印刷中已修正

 

 2013.09.17

P77 2.4.6上第8行

a、b和c都不等于NaN

a、b和c都不等于NaN和INF

英文版勘误

LU Junlin

 

 

 2011.07.05

P81 家庭作业2.60 第三行

unsigned put_byte(unsigned x, unsigned char b int i);

unsigned replace_byte(unsigned x, unsigned char b, int i);

中文版勘误

Darren

第五次印刷中已修正

 

 2011.05.24

P81 家庭作业2.60

将“强制类型转换,无论是现实的还是隐式的。”从“禁止使用”类别移至“允许的运算”类别

英文版勘误

Yu Tanaka

第五次印刷中已修正

 

 2013.3.5

P81 2.62

算术右移

逻辑右移

中文版勘误

谭焮

 

 

 2011.05.24

P83 家庭作业2.68 注释第一、二行

Mask with least significant n bits set to 1

Examples: n = 6 --> 0x3F, n = 17 --> 0x1FFFF

英文版及中文版勘误

Taketo Yoshida, Yili Gong

 

 2013.05.01

P88 家庭作业2.90 C中

这两个22/7的近似值

这两个pi的近似值

中文版勘误

82642225

 

 

 2013.05.07

P89 练习题2.92

这个函数计算|f|

这个函数计算-f

中文版勘误

 

 

 2013.05.07

P89 练习题2.95第4行

对于函数i

对于参数i

中文版勘误

 

 

 2013.05.07

P89 练习题2.95第5行

对参数f

对参数i

英文版勘误

 

 

 2012.12.12

P90 家庭作业2.96,代码下第一行

删除“如果f是NaN,”

中文版勘误

mofaph

 

 

 2011.02.28

P92 练习题2.12

A. x & ?0xFF

A. x & 0xFF

中文版勘误

李志杰

第五次印刷中已修正

 2015.01.04

P96 练习题2.32答案

当y=TMin时,对于所有x的值,该函数的结果都不正确,而不是仅仅只有当x < 0时。

英文版勘误

Oswaldo Olivo

 

 

 2013.09.02

P97 练习题2.35答案2.

用非零数x除以p会得到

用非零数xp会得到

中文版勘误

穆化鑫

 

 2014.06.17

P98 练习题2.41答案第二段

首先假设m > 1....对于m = 1的情况

首先假设m >= 1....对于m = 0的情况

英文版勘误

陈立波

 

 

 2011.08.18

P99 练习题2.44答案F.

补码和无符号乘法有相同的位级行为

补码和无符号加法有相同的位级行为

中文版勘误

gnu_emacser

 

 

 2012.12.27

P99 练习题2.46答案

“把这个表示与1/10的二进制表示进行比较“一段为B小题答案,后续B变为C,C变为D。

中文版勘误

桂莅

 

 

 2013.05.01

P101 练习题2.52答案 C中

表格最右列中“向上舍入”和“向下舍入”位置交换

中文版勘误

82642225

 

 

 2012.11.20

P101 练习题2.51答案B

x‘-0.1的二进制表示中小数点后有19个0

小数点后有25个0

中文版勘误

邵海珠

 

 

 2011.07.24

P113 图3-3 最后一行,第一列

寄存器

存储

中文版勘误

Ji Bin

第五次印刷中已修正

 

 2011.07.27

P117 “给C语言初学者”下第一段第二行

指令1和2从存储器当中

指令1从存储器当中

英文版勘误

Ji Bin

 

 2010.04.11

P118 第二行

操作应该先改变符号

操作应该先改变大小

英文版勘误

David Ramsey

第五次印刷中已修正

 

 2011.04.11

P119 练习题3.6

leal 0xA(,%eax,4),%edx

leal 0xA(,%ecx,4),%edx

中文版勘误

赵亮

 

 2011.07.27

P119 3.5.2第一段第三行

减一运算法

减一运算符

中文版勘误

Ji Bin

 

 2011.02.28

P120 3.5.3节,第一句话

第二项给出的是要移位的位数

第二项给出的是要移位的数值

中文版勘误

王泰格

第五次印刷中已修正

 

 2011.03.28

P123 第5行

除数

除数

英文版勘误

吴旭东

第五次印刷中已修正

 

 2011.01.07

P124 图3-10上倒数第三行

除了他们只设置条件码而改变目的寄存器的值

除了他们只设置条件码而不改变目的寄存器的值

中文版勘误

华章出版社

第五次印刷中已修正

 

 2011.07.28

P127 倒数第二段倒数第二行

参加图3-11

图3-11

中文版勘误

Ji Bin

 

 2011.08.01

P134 练习题3.20 C中

参考图3-14b

参考图3-14c

英文版勘误

Ji Bin

 

 

 2010.11.18

P142 对于传统的IA32,编译器产生的代码具有以下抽象代码所示的形式

        v = true-expr;

        goto done;

    false:

        v = else-expr;

done:

        v = then-expr;

        goto done;

    false:

        v = else-expr;

    done:

英文版勘误

Lei Ma

第五次印刷中已修正

 

 2013.05.09

P149 3.7.1第3行

栈帧的最顶端

最顶端的栈帧

中文版勘误

 

 

 2013.05.09

P150 第一段第3行

例如%ebp

寄存器%ebp的副本

中文版勘误

 

 

 2013.05.09

P150 倒数第2行

可以使栈做好准备

使栈做好准备

中文版勘误

 

 

 2010.09.27

P150 图3-22 b)

箭头指向0x080483e1上方

箭头应该指向0x080483e1处

英文版勘误

David O’Hallaron

第五次印刷中已修正

 2015.09.16

P154 “为什么GCC分配从不使用的空间”第3行

返回值的4个字节

返回地址的4个字节

中文版勘误

王凯

 

 

 2010.11.30

P154 倒数第三段

这些参数的位置也从相对于%esp的旧值+4和0的位置移到了相对于%ebp的新值+12和+8的位置。

这些参数的位置也从相对于%esp的旧值+4和0的位置变成了相对于%ebp的新值+12和+8的位置。

中文版勘误

黎规好

第五次印刷中已修正

 

 2011.02.28

P157 图3-27中

从上往下数第二个"保存的%ebp"

"保存的%ebx"

中文版勘误

jorrychen

第五次印刷中已修正

 

 2010.11.14

P159 中间表格第6个表达式

*(E+i-3)的类型是int*

*(E+i-3)的类型是int

英文版勘误

Karl Pichotta

第五次印刷中已修正

 

 2011.08.18

P161 倒数第二段倒数第五行

Arow[j]被初始化为&A[i][0]

Arow被初始化为&A[i][0]

中文版勘误

Ji Bin

 

 

 2011.02.28

P171 第11行

例如,3、6、7节中

例如,3.6.7节中

中文版勘误

王泰格

第五次印刷中已修正

 

 2011.12.6

P173 第12行

操作符用于指针的间接引用

运算符*用于指针的间接引用

中文版勘误

Anders Cui

 

 

 2012.04.03

P173 中间代码

(int) (*fp)(int, int *);

int (*fp)(int, int *);

英文版勘误

Ronald Greenberg

 

 

 2011.02.28

P177 第一张表格下第四行

但是调用者也不能依靠这个寄存器的完整性

但是调用者也不能依赖这个寄存器的正确性

中文版勘误

王泰格

第五次印刷中已修正

 

 2010.11.01

P178 练习题3.43 第四行

寄存器%edi等于0x2,寄存器%esi等于0x3。

寄存器%edi等于0x3,寄存器%esi等于0x2

英文版勘误

Mustafa Kazdagli

第五次印刷中已修正

 

 2011.08.21

P180 第三段第三行

operatioin

operation

中文版勘误

Ji Bin

 

 

 2011.08.21

P180 第三段第三行

使指指向下一条指令之外

使指向下一条指令之外

中文版勘误

Ji Bin

 

 

 2011.08.21

P185 第一段倒数第二行

将这个指令集更名位

将这个指令集更名

中文版勘误

Ji Bin

 

 

 2011.08.21

P186 图3-34中表倒数第二行

双进度

中文版勘误

Ji Bin

 

 

 2012.06.12

P196 练习题3.50最后一行

确定incrprob的全部4种合理的函数原型

确定incrprob的所有合理的函数原型

英文版勘误

Qiangqiang Luo

 

 

 2011.11.04

P197 第一段,第4行和第6行

call_proc

proc

英文版勘误

Ronald Jones

 

 

 2011.05.06

P202 参考文献说明,第二段

Applicatioin

Application

中文版勘误

花明月暗

第五次印刷中已修正

 

 2012.07.05

P215 练习题3.12答案

num_t也有可能是long long类型的。对此,C语言标准指明乘法会先把x转换成long long类型,所以这个乘法是基于有符号运算的。不过有趣的是,结果的位级表示是和无符号的情况一样的。要看到这个,注意B部分中当把64位有符号数y分成32位值y_h和y_l时,我们应该把y_h看做一个有符号数,而把y_l看做无符号的。因此对于x*y_l这个64位乘积应该用无符号乘,而x*y_h的低32位对无符号和有符号运算来说,都是一样的。

英文版勘误

Qiangqiang Luo

 

 2014.10.17

P215 练习题3.14答案

A部分:当data_t是unsigned时,比较也可以是>。D部分:对于short或者unsigned short类型,比较也可以是!=

英文版勘误

Gregoire Paradis

 

 

 2011.10.19

P217 练习题3.19答案A

我们可以看到,实际上计算13!的时候,就已经溢出了,因为1,932,053,504 / 13 = 148,619,500.31。

英文版勘误

Richard Callahan

 

 

 2013.05.08

P221 练习题3.29答案第4行

只剩下标号.L2,符合情况E

只剩下标号.L5,符合情况E

英文版勘误

Rami Ammari

 

 

 2012.07.31

P221 练习题3.32答案

有八种不同的函数声明都会得到同样的代码:返回值类型可以是int或者unsigned,参数p可以是int *或者unsigned *,以及参数x可以是int或者unsigned。这些选择是相互独立的。

英文版勘误

Qiangqiang Luo

 

 

 2011.08.28

P222 练习题3.33答案B

将栈指针加了40

将栈指针减去40

中文版勘误

万虎

 

 

 2010.10.31

P225 练习题3.41的答案

A中字段名列表为 i c j d

字段名列表应为 i c d j

英文版勘误

David Selvaraj

第五次印刷中已修正

 

 2011.08.18

P226 练习题3.43

A和B的图中but均为buf

中文版勘误

Ji Bin

 

 2014.12.10

P227 练习题3.48,第3问答案

和是用leal指令计算的

和是用leaq指令计算的

中文版勘误

贾震

 

 

 2012.06.12

P228 练习题3.50答案

变量q还可以是unsigned long类型的,因此一共有八种合法的函数原型。另外四种是:
void incrprob_s_ul(int x, unsigned long *q, int *t);
void incrprob_u_ul(unsigned x, unsigned long *q, int *t);
void incrprob_sl_ul(long x, unsigned long *q, int *t);
void incrprob_ul_ul(unsigned long x, unsigned long *q, int *t);

英文版勘误

Qiangqiang Luo

 

 

 2012.06.16

P228 练习题3.51A的答案

栈帧不应该包括偏移量0那一格。栈的这个位置保存的是返回地址,它应该是调用者栈帧的一部分。正确的图在这里

英文版勘误

Qiangqiang Luo

 

 

 2011.02.28

P230 倒数第7行

参考处理器端的处理器————存储器接口

参考处理器端的处理器-存储器接口

中文版勘误

王泰格

第五次印刷中已修正

 

 2011.09.08

P237 4.1.4节第二段第二行

excepton handler

exception handler

中文版勘误

Ji Bin

 

 2011.08.31

P243 “现代逻辑设计”部分,最后一行

Y98处理器

Y86处理器

中文版勘误

万虎

 

 2011.09.08

P245 图4-12 b)

“A=B”下面的实线应为虚线

中文版勘误

Ji Bin

 

 2012.07.03

P245 练习题4.9

32个字级的异或电路

32个级的异或电路

中文版勘误

陆志锴

 

 2014.09.28

P250 第6-7行

对于读操作来说

读操作一样

中文版勘误

吴超峰

 

 

 2011.04.02

P253 练习题4.11 取指阶段通用处理情况中

icode:ifum

icode:ifun

中文版勘误

Yang Firo

第五次印刷中已修正

 

 2011.02.28

P254 图4-20

第一列与第二、三列,行对应错误

“取指”对应第二、三列“icode,rA,valP”三行

“译码”对应第二、三列“valA,valB”两行

“执行”对应第二、三列“valE”一行

“访存”对应第二、三列“M4[valE]”一行

“写回”对应第二列“R[%esp]”一行,第三列“R[%esp],R[rA]”两行

“更新PC”对应第二、三列“PC”一行

中文版勘误

王泰格

第五次印刷中已修正

 

 2010.12.08

P255 跟踪pushl指令的执行 第三行

有两个字节,值分别为0xa0和0x28。

0x28应为0x2f

下面的表中,取指阶段,具体一栏中,rA:rB<-M1[0x01b]=2:8应为2:f

英文版勘误

Karl Pichotta

 2015.01.19

P292 图4-55

M_Bch

M_Cnd

英文版勘误

Jiwen He

 

 2011.02.28

P259 画图惯例第三点

线路的名字在白色圆角方框中说明。

线路的名字在白色椭圆中说明。

中文版勘误

王泰格

第五次印刷中已修正

 

 2011.02.28

P261 代码下面第一行

组合逻辑被条件码寄存器环绕着

组合逻辑环绕着条件码寄存器

中文版勘误

王泰格

第五次印刷中已修正

 

 2011.12.23

P263 图4-26中

IHALT,halt指令的代码,对应的值为0;INOP,nop指令的代码,对应的值为1

英文版勘误

John Ye

 

 2015.02.16

P266 最后一行

观察图4-16~图4-19

观察图4-18~图4-21

中文版勘误

贾震

 

 

 2013.08.18

P267 6.SEQ小结 倒数第5行

ALU要减小栈指针

ALU要增加栈指针

英文版勘误

nasalmucus

 

 

 2012.05.12

P274 图4-39 b)

Cnd

pCnd

英文版勘误

银河

 

 

 2011.12.2

P275 图4-40中

解码

中文版勘误

Kang Lieyong

 

 

 2011.02.28

P276 图4-41中

解码

中文版勘误

王泰格

第五次印刷中已修正

 

 2012.05.12

P278 倒数第4行

“Data”

数据

中文版勘误

银河

 

 

 2011.04.04

P285 图4-49 周期6下面

M

W

英文版勘误

Yang Firo

第五次印刷中已修正

 

 2011.12.2

P287 图4-52中

解码

中文版勘误

Kang Lieyong

 

 

 2012.05.12

P288 图4-53中

错误值的箭头应该指向valB那一行

英文版勘误

银河

 

 

 2011.12.2

P287 图4-52中

解码

英文版勘误

Kang Lieyong

 

 

 2011.09.19

P300 图4-65 a)最右边

输入=y

输出=y

中文版勘误

王泰格

 

 2011.04.04

P300 图4-65 b)最左边

暂停=0

暂停=1

中文版勘误

Yang Firo

第五次印刷中已修正

 

 2011.09.19

P300 图4-65 b)最右边

状态=y 输入=y

状态=x 输出=x

中文版勘误

王泰格

 

 2011.11.18

P301 图4-66 “预测错误的分支”行“D”列

正常

气泡

中文版勘误

wiki

 

 2011.09.21

P302 第二个表格中

预测错误的分支

加载/使用冒险

中文版勘误

Ji Bin

 

 2014.06.20

P303 图4-68

标号为stat的块和产生出的信号m_stat应该提供输入到流水线寄存器W而不是M。正确的pdf图在这里

英文版勘误

Sankar Krishnan

 

 

 2011.07.27

P316 练习题4.9答案中的图

图中右边的与门应为或门,正确的pdf图在这里

英文版勘误

Pascal Garcia

 

 2011.11.30

P316 练习题4.10

题号上Med3代码为此习题答案

中文版勘误

Kang Lieyong

 

 

 2010.12.15

P316 练习题4.11最后一行

P317 第一个表格

前两个字节为0x30和0x84

前两个字节应为0x30和0xf4

表中取指阶段,具体一栏中,rA:rB<-M1[0x00f]=8:4应为f:4

英文版勘误

Dorukhan Guiloz

 

 2010.12.15

P317 练习题4.12 第一行

值分别为0xb0和0x08

值分别为0xb0和0x0f

下面表中,取指阶段,具体一栏中,rA:rB<-M1[0x01d]=0:8应为0:f

英文版勘误

Randal E. Bryant

第五次印刷中已修正

 

 2011.11.04

P320 练习题4.27答案

公式中的K应为k

英文版勘误

Ronald Jones

 

 2014.08.11

P321 练习题4.31答案倒数第2行

那么寄存器%eax会设置成增加了的程序计数器

那么寄存器%eax会设置成增加了的栈指针

英文版勘误

Sebastian Luy

 

 

 2010.05.10

P327 最后一行

counter= t + 4

counter = counter + 4

英文版勘误

David Ramsey

第五次印刷中已修正

 

 2012.05.12

P328 5.2节第2段第3行

千兆赫兹

赫兹

中文版勘误

银河

 

 

 2011.06.13

P329 图5-1第19行

For odd n

For even n

英文版勘误

Zhengshan Yan

第五次印刷中已修正

 

 2011.04.6

P332 中间的表格,第二行第四列

20.02

29.02

中文版勘误

Yang Firo

第五次印刷中已修正

 

 2011.09.23

P345 第二行

%rcx存放循环界限limit

%rbp存放循环界限length

英文版勘误

Ji Bin

 

 

 2011.01.20

P345 combine4的汇编代码

描述中的limit

应为length

英文版勘误

Karl Pichotta

第五次印刷中已修正

 

 2012.05.12

P347 中间

这条路径将CPE限制为最多L

这条路径限制CPE至少为LL

中文版勘误

银河

 

 

 2011.01.20

P349 图5-17

图例中int *和int +互换

英文版勘误

Karl Pichotta

第五次印刷中已修正

 

 2012.05.12

P352 图5-21下面第一段第二行

所有合并情况的CPE都增加了

所有合并情况的CPE都改进

中文版勘误

银河

 

 

 2012.05.12

P352 图5-21下面第一段第三行

最高可以得到吞吐量界限1.00

可以得到吞吐量界限1.00

中文版勘误

银河

 

 

 2012.05.12

P352 图5-22标题

所有的CPE都有提高,最高到达限定制1.00

所有的CPE都有改进,最到达限定值1.00

中文版勘误

银河

 

 

 2011.01.20

P352 图5-22

图例中int *和int +互换

英文版勘误

Randal E. Bryant

第五次印刷中已修正

 

 2012.05.12

P355 图5-27标题

最高到限制值1.00

到限制值1.00

中文版勘误

银河

 

 

 2011.01.20

P355 图5-27

图例中int *和int +互换

英文版勘误

Randal E. Bryant

第五次印刷中已修正

 

 2012.05.12

P356 第2行

最高到达界限1.00

到达界限1.00

中文版勘误

银河

 

 

 2011.08.01

P357 练习题5.8

n个整数

n个双精度浮点数

英文版勘误

Ji Bin

 

 

 2011.04.15

P358 网络旁注中的汇编代码

mulps (%rcs), %xmmo

mulps (%rcx), %xmm0

中文版勘误

charlievon, Yang Firo

 

 2011.01.20

P360 汇编代码第9行,注释

daa[i+4]

data[i+4]

中文版勘误

charlievon

 

 2011.01.20

P360 倒数第二行

预测错误出发

预测错误处罚

中文版勘误

Yang Firo

第五次印刷中已修正

 

 2012.05.15

P361 第5行

因此猜测错误也没有处罚

因此也没有猜测错误的处罚

中文版勘误

银河

 

 

 2011.09.24

P365 图5-32的代码中

for (; i < limit; i++)

for (; i < n; i++)

英文版勘误

Ji Bin

 

 

 2011.09.24

P367 倒数第二行

只有到计算出加载和存储的地址被计算出来以后

只有到加载和存储的地址被计算出来以后

中文版勘误

Ji Bin

 

 

 2011.09.24

P371 第二段第二行

它扫描一个哈系桶

它扫描一个哈希

中文版勘误

Ji Bin

 

 

 2011.09.24

P375 参考文献说明,第二段第一行

编辑器

编译

中文版勘误

Ji Bin

 

 

 2012.05.12

P378 练习题5.4 A.

在没经过优化的代码中...combine4中的变量x

优化等级较低的代码中...combine4中的变量acc

中文版勘误,英文版勘误

银河

 

 

 2013.01.03

P378 练习题5.4答案中combine3w的代码,第8行中增加一条语句,确保即使当向量长度小于或者等于0时,也会保存这个值。

*dest = IDENT;

英文版勘误

Dominik Helm

 

 

 2011.10.10

P385 图6-4 b)

选择行1

选择1

中文版勘误

Ji Bin

 

 

 2011.10.10

P388 倒数第三段

向下面这样的

下面这样的

中文版勘误

Ji Bin

 

 

 2012.12.01

P391中间,磁盘容量计算公式右边第二项

平均盘区数

平均区数

中文版勘误

邵海珠

 

 

 2011.06.13

P392 第二段第四行

绕地球一天

绕地球一

中文版勘误

妖刀

第五次印刷中已修正

 

 2013.12.19

P392 “旋转时间”一段第2行

读/写头到达目标扇区时

读/写头到达目标磁道

英文版勘误

Lucas Bärenfänger

 

 2011.10.10

P393 第一行公式

Tavg rotation

Tavg transfer

中文版勘误

Ji Bin

 

 

 2011.10.10

P395 图6-12 a)

发起一个碰盘读

发起一个磁盘

中文版勘误

Ji Bin

 

 

 2013.08.22

P399 第1行

块的大小为16~512KB

块的大小为16KB~512KB

中文版勘误

nasalmucus

 

 

 2012.12.01

P399 第二段第四行

制造商在已经闪存翻译层中

制造商已经在闪存翻译层中

中文版勘误

邵海珠

 

 

 2011.10.10

P399 倒数第三行

见图6-15c

见图6-17c

中文版勘误

Ji Bin

 

 

 2011.11.04

P400 第2段第4行

提高

降低

英文版勘误

Ronald Jones

 

 

 2011.10.10

P400 第三段第一行

表面了

表明

中文版勘误

Ji Bin

 

 2014.08.17

P400 图6-17 b)第一行最后列

2000:1980

2010:1980

中文版勘误

zxwhieui

 

 2014.08.17

P400 图6-17 c)第一行最后列

2000:1980

2010:1980

中文版勘误

zxwhieui

 

 2014.08.17

P400 图6-17 c)第二行最后列

500

1 600 000

中文版勘误

zxwhieui

 

 

 2011.10.10

P400 图6-17 d)第三行第三列

60

6

中文版勘误

Ji Bin

 

 

 2011.02.28

P403 图6-21 a)

int sumarrayrows(int a[M][N])

{

    int i, j, sum = 0;

    for (i = 0; i < M; i++)

        for (j = 0; j < N; j++)

            sum += a[i][j];

    return sum;

}

int sumarraycols(int a[M][N])

{

    int i, j, sum = 0;

    for (j = 0; j < N; j++)

        for (i = 0; i < M; i++)

            sum += a[i][j];

    return sum;

}

中文版勘误

刘其帅

 

 2011.10.10

P405 图6-23 左边

差别更低的存储设备

成本更低的存储设备

中文版勘误

Ji Bin

 

 

 2011.11.12

P409 图6-27最上面

每行t个有效位

每行t个标记位

中文版勘误

刘生

 

 

 2011.04.21

P422 6.4.7第4行

它等于1不命中率

它等于1-不命中率

中文版勘误

Yang Firo

 

 2012.12.01

P422 6.4.7节“3 相联度的影响中”倒数第二行

较低层上使用比较小的相联度

较低层上使用比较的相联度

中文版勘误

邵海珠

 

 

 2011.10.14

P428 第3行

size从2KB变到64KB

size从2KB变到64MB

中文版勘误

Ji Bin

 

 

 2011.03.28

P431 图6-46 f) ikj版本

代码应为

for (i = 0; i < n; i++)

    for (k = 0; k < n; k++) {

        r = A[i][k];

        for (j = 0; j < n; j++)

            C[i][j] += r*B[k][j];

        }

中文版勘误

姚磊

 

 2011.10.14

P431 第3行

B不命中每次迭代使用的次数

每次迭代使用的B不命中次数

中文版勘误

Ji Bin

 

 

 2011.11.08

P435 练习题6.27 表第4行

22

23

英文版勘误

Han Xu

 

 2014.11.13

P452 第3行

”块存储开始“(Block Storage Start)

Block Started by Symbol

英文版勘误

Paul C. Anagnostopoulos

 

 

 2012.11.20

P452 ”给C语言初学者“上面最后一段

编译器把初始化为0的变量放在.bss而不是.data中,所以函数f()中定义的x的实例存储在.bss中而不是.data中。

英文版勘误

Waiki Wright和Scott Wright

 

 

 2011.11.08

P459 图7-6下第1行和第6行

main.o

main2.o

英文版勘误

Ji Bin

 

 

 2012.12.03

P466 倒数第12行

ctrl.o

ctr1.o(数字1而不是字母l)

中文版勘误

邵海珠

 

 

 2012.08.27

P468 第一段最后一句

在第10章

在第9

中文版勘误

刘金

 

 

 2011.10.14

P480 第3段最后一行

创造这些子进程的父进程必须得到通知

创建这些子进程的父进程必须得到通知

中文版勘误

Ji Bin

 

 

 2011.09.16

P485 图8-9下第一行

不为人知的一般保护故障

恶名昭著的一般保护故障

中文版勘误

金崇伟

 

 

 2012.02.23

P485 第二段

处理程序将磁盘上物理存储器相应的页面映射到虚拟存储器的一个页面

处理程序将磁盘上虚拟存储器相应的页面映射到物理存储的一个页面

英文版勘误

jcw2001@163.com

 

 

 2011.10.14

P485 图8-10 标号37,kill系统调用的描述

将译者注删除

中文版勘误

Ji Bin

 

 

 2011.05.24

P486 图8-11第14行注释

System call number 0

System call number 1

英文版勘误

Michael Victor Zink

第五次印刷中已修正

 

 2011.04.14

P494 

第二段

这里对进程图的描述不尽准确,请参考网络旁注ECF:GRAPHS,有更详细的讨论。

英文版勘误

Gordon Kindlmann

第五次印刷中已修正

 

 2011.12.15

P496 第2行

optioins

options

中文版勘误

Ji Bin

 

 

 2012.12.23

P496 第3点第9行(WTERMSIG段)

返回导致子进程终止的信号的数量

返回导致子进程终止的信号的编号

中文版勘误

林元昭

 

 2014.12.18

P497 练习题8.3

为了使每种可能的输出生效,必须在每个printf后都跟一条fflush(stdout)

英文版勘误

Len Hamey

 

 2011.12.15

P501 第2段第2行

overwirte

overwrite

中文版勘误

Ji Bin

 

 2014.09.29

P508 第一段

关于SIGINT和SIGSTP的讨论是不正确的。输入ctrl-c会导致内核向每个前台进程组中的成员发送一个SIGINT信号(而不是向shell发送)。ctrl-z和SIGTSTP也是类似。

英文版勘误

Godmar Back

 

 2010.09.01

P512-515

图8.31-8.33

这些程序调用了printf函数,在信号处理程序中,它不是异步信号安全的,可能会导致死锁。详细信息可以参考网络旁注ECF:SAFETY

英文版勘误

Godmar Back

 

 2011.12.15

P517 8.5.6节框图中sigismember函数说明中

sef

set

中文版勘误

Ji Bin

 

 2014.07.29

P523 图8-39第14行

根据Unix规范,因为该行的语句rc = setjump(buf)对局部变量赋值,不与标准兼容,应该被替换为分支语句,switch(setjmp(buf))。

英文版勘误

Yan Zhu

 

 2014.12.18

P528 家庭作业8.18

为了使每种可能的输出生效,必须在每个printf后都跟一条fflush(stdout)

英文版勘误

Len Hamey

 2014.12.18

P529 家庭作业8.21

为了使每种可能的输出生效,必须在每个printf后都跟一条fflush(stdout)

英文版勘误

Len Hamey

 2014.09.29

P529 家庭作业8.26

这里提出的ctrl-c和ctrl-z的处理是真实shell工作方式的简化。真实的shell中,内核响应ctrl-c(ctrl-z),向终端前台进程组中的每个进程发送SIGINT(SIGTSTP)信号。shell用tcsetpgrp函数来管理这个组的成员,用tcsetattr函数来管理终端的属性,这两个函数都超出了本书描述的范围。

英文版勘误

Godmar Back

 

 2010.05.03

P531 练习题8.3答案 最后一句话

有四个这样的序列:acbc、bcac、abcc和bacc。

三个这样的序列:acbc、abcc和bacc。进程图的示例请参考网络旁注页网络旁注ECF:GRAPHS

英文版勘误

David Ramsey和Gordon Kindlmann

第五次印刷中已修正

 

 2010.05.03

P531 练习题8.4答案

删除”一般而言....“那句话和后续的(错误的)图。正确的进程图示例请参考网络旁注页网络旁注ECF:GRAPHS

英文版勘误

David Ramsey和Gordon Kindlmann

 

 2012.06.10

P537、545、547、550、554等

这些页中的“全相连、组相连、相连性”应改为“全相联、组相联、相联性”

中文版勘误

银河

 

 

 2011.06.17

P537 9.3.1 第二段

从扇区中连续的字节的时间开销比起读这个磁盘的一个扇区读取第一个字节要慢大约100 000倍

从一个磁盘的一个扇区读取第一个字节的时间开销要比从该扇区中读连续的字节慢大约100 000倍

中文版勘误

妖刀

第五次印刷中已修正

 

 2012.06.10

P544 第4行

MMU执行了图9-13b中的步骤之后

MMU执行了图9-13a中的步骤之后

英文版勘误

银河

 

 

 2011.12.15

P545 9.6.2节第1段第4行

消除是这样的开销

消除这样的开销

中文版勘误

Ji Bin

 

 

 2013.03.26

P547 第2段最后一句

对于只有一级的页表结构, PPO和VPO是相同的。

(多级的页表结构)和只有一级的页表结构一样,PPO 和 VPO 是相同的。

中文版勘误

单宁

 

 

 2012.06.10

P550 倒数第2行

是四路组相连的。L1、L2和L3高速缓存是物理寻址的,是八路组相连的

是四路组相的。L1、L2和L3高速缓存是物理寻址的,其中,L1和L2是八路组相联的,L3是16路组相联的

中文版、英文版勘误

银河

 

 2014.08.30

P552 图9-23 PS对应一行

值对第一层PTE定义

对第一层PTE定义

中文版勘误

黄睿

 

 

 2011.12.15

P552 倒数第2行

PET

PTE

中文版勘误

Ji Bin

 

 

 2011.12.15

P553 图9-24第1行

页表物理基地址

物理基地址

中文版勘误

Ji Bin

 

 

 2011.12.15

P553 图9-24中P字段的说明中

子页表在物理存储器中

子页在物理存储器中

中文版勘误

Ji Bin

 

 

 2011.04.16

P554 图9-26底部

0x40000000(64)

0x00400000(64)

英文版勘误

Yang Firo

第五次印刷中已修正

 

 2011.11.28

P557 图9-29 b)

为了说明得更清楚,进程2映射的虚拟存储器区域位置应该与进程1的不同。

英文版勘误

Tao Du

 

 

 2011.11.28

P558 图9-30 a)

进程2映射的虚拟存储器区域位置应该与b)中的相同,也应该与图9.29 b)中一致。

英文版勘误

Tao Du

 

 

 2010.05.03

P560 中间bufp一行

mmap的第一个参数应该是NULL而不是-1

英文版勘误

Sankar Krishnan Shanmugam

 

 2012.06.10

P564 9.9.3第5行

有相匹配的分配和空闲请求是嵌套的

相匹配的分配和释放请求是嵌套的

中文版勘误

银河

 

 

 2011.11.28

P564 倒数第二段

前k个请求的峰值利用率

k+1个请求的峰值利用率

英文版勘误

Tao Du

 

 

 2012.04.09

P565 旁注:放宽单调性假设

前k个请求的最高峰

k+1个请求的最高峰

英文版勘误

Tao Du

 

 

 2012.06.10

P565 9.9.4第4段

这里的示例有问题,如果图9-34e中的请求要求6个字,是可以被满足的,可以改为请求要求8个字,就会出现空闲字足够但仍然无法分配的情况。

英文版勘误

银河

 

 

 2011.12.15

P572 第2行

viod

void

中文版勘误

Ji Bin

 

 2015.05.23

P576 图9-48中

pred(祖先)

pred(前驱

中文版勘误

楼超奇

 

 2014.04.16

P578 9.10倒数第7-6行

从不显示地释放它们

从不显地释放它们

中文版勘误

wy

 

 

 2012.06.10

P580 9.10.2最后一段第一行

其中每个块都是未分配的

其中每个块都是未标记

中文版勘误

银河

 

 

 2012.12.11

P581 9.11节上一行

可能是不是可达的

可能是不可达的

中文版勘误

邵海珠

 

 

 2012.12.11

P586 第1行

而了简化了存储器保护

而简化了存储器保护

中文版勘误

邵海珠

 

 

 2012.12.10

P590 练习题9.1的答案表格倒数第2行第3列

248=256T-1

248-1=256T-1

英文版勘误

邵海珠

 

 

 2011.12.15

P599 图10-2下第1行

显示地

中文版勘误

Ji Bin

 

 

 2011.08.18

P599 中间“读时遇到EOF。”一段中

从当前文件位置开始只含有20多个字节

从当前文件位置开始到结束只含有20个字节

中文版勘误

Timothy

 

 

 2012.06.10

P601 图10-3下第3行

rio_readinitb函数从文件rp读出一个文本行

rio_readlineb函数从文件rp读出一个文本行

中文版勘误

银河

 

 

 2013.04.18

P604 图10-7,函数rio_readlineb

增加边缘情况的处理(当输入行是maxlen字节且没有以换行符结尾),更新版本的函数在这里

英文版勘误

Sharbel Bousemaan

 

 

 2012.09.19

P604 图10-7,函数rio_readnb,第9行

检查EINTR是多余的,因为上一行调用rio_read已经处理过这种情况了,更新版本的函数在这里

英文版勘误

Seth Chaiken

 

 

 2011.04.17

P626 中间

我们跟随Steven的指导

我们跟随Stevens的指导

中文版勘误

Yang Firo

第五次印刷中已修正

 

 2012.06.17

P637 图11-25中REMOTE_ADDR一行

客户端的点为十进制IP地址

客户端的点十进制IP地址

中文版勘误

银河

 

 

 2012.06.17

P640 “2.doit函数”一节第2行

图11-7中

10-7中

中文版勘误

银河

 

 

 2012.06.17

P653 第2行

我们用图11-7中

我们用图11-17

中文版勘误

银河

 

 

 2011.04.02

P653 第四段第四行

图12-21

11-21

中文版勘误

姚磊

第五次印刷中已修正

 

 2011.04.17

P660 12.3.5最后一段

没有办法让pthread_wait等待任意一个线程终止

没有办法让pthread_join等待任意一个线程终止

英文版勘误

Yang Firo

第五次印刷中已修正

 

 2012.06.17

P666 图12-17中

线程i的汇编C代码

线程i的汇编代码10-7中

中文版勘误

银河

 

 

 2011.05.16

P683 倒数第二行

竞争实际上是发生在第11行中的i++(而不是第12行中下一次的对pthread_create的调用)和第21行的对vargp的间接引用和赋值之间。

英文版勘误

Shuang Yang

第五次印刷中已修正

 

 2012.06.17

P684 练习题12.13

在主线程中的第15行

在主线程中的第14

英文版勘误

银河

 

 

 2012.06.17

P684 练习题12.13

坏注意

中文版勘误

银河

 

 

 2012.05.21

P686 互斥锁加锁顺序规则

这里给出的简单的互斥锁加锁顺序规则并不足够强能够避免所有的循环死锁。例如:
init: r=s=t=1
thread 1: P(r)P(s)V(s)V(r)
thread 2: P(s)P(t)V(t)V(s)
thread 3: P(t)P(r)V(r)V(t)
把原有的规则换成下面这个更强一点儿的:给所有的锁分配一个全序,每个线程按照这个顺序来请求锁,并且按照逆序来释放。

英文版勘误

Cheng Chen

 

 

 2011.04.18

P691 表格第一行

eax1

%eax1

中文版勘误

Yili Gong

第五次印刷中已修正

 

 2011.04.18

P691 表格最后一行

第4列:1;第5列:-

第4列:-;第5列:1

英文版勘误

Yang Firo

第五次印刷中已修正

 

 2011.04.18

P692 练习题12.12

gethostbyname

ctime

英文版勘误

Yang Firo

第五次印刷中已修正

 

 2012.06.17

P692 练习题12.13

如果在第15行,....,和线程例程中第25行的赋值语句

如果在第14行,....,和线程例程中第24行的赋值语句

英文版勘误

银河