Chinaunix

标题: 《Linux内核设计与实现》中文版勘误 [打印本页]

作者: albcamus    时间: 2005-05-08 13:45
标题: 《Linux内核设计与实现》中文版勘误
《Linux内核设计与实现》勘误


        Robert Love的《Linux Kernel Development》一书,比较适合内核入门。而且对某些方面的解说,比如各种下半部,非常到位。承蒙一位陌生朋友的慨然相助,我有幸得到了本书的英文第二版,把中文不好理解的地方对照英文订正一下。只订正有碍理解的,当然可能有些是我理解错误,朋友们指正。多谢了。

L+7 表示从上往下数第7行;L-7表示从底向上数第7行。


P8

L+7:练习中一般在头文件中定义内联函数

订正:实践中一般在头文件中定义内联函数


P9

L-13:Linux内核支持多处理器并发处理

订正:原文是“The Linux Kernel supports multiprocessing”,译为“Linux内核支持多处理器系统”似乎好些,而且这里不能说成是并发(concurrent),应该是并行(parallel)


P15

图2-2中的thread_struct应改为thread_info,这个原书就印刷错了。


P31

L+9:每个优先级数组还包含一个叫做struct list_head的队列。

订正:翻译错误。原文是:“Each priority_array also contains an array named queue of struct list_head queues.”应译为:“每个priority_array包含一个叫作queue的数组,该数组每个元素都是一个struct list_head类型的队列”。其实这个从左边那页给出的priority_array的结构定义也能看出来。


P51

L+1:将系统调用号和参数压入寄存器并出发软中断来陷入内核

订正:应该是“触发软件中断”,原文是software interrupt而不是softirq。这跟作为一种下半部机制的softirq根本不是一回事。


P61

L-4:首先,因为处理器禁止中断,这里要把它们打开,就必须在处理程序注册期间指定SA_INTERRUPT标志。

订正:“必须”应该改成“不能”。如果注册时指定了SA_INTERRUPT标志,这里能打开吗?显然不能。译者误解了原著的意思。


P63

L-17:cli和sti分别是对clear和set允许中断(allow interrupts)标志的汇编指令

订正:译的真别扭。改为:“cli和sti分别是对允许中断标志的clear和set操作的汇编指令的调用。”(好象一样别扭  )


P73

第6.3节

订正:这节中所有“挂起”字样,原文统统是pending,意思是悬而未决的、未处理的、待处理的,用过UNIX信号的人都知道,pending跟suspended根本不是一个意思。


P87
这里本来正确的,我说错了,多谢richardhesidu兄的指正

P116

第9.2节

订正:排版太不负责任了,作为节拍的倒数的HZ变量,全都给印刷成了Hz,好象频率单位赫兹一样。大家自己改改吧。


P155

L+8:struct super_operations s_op;

订正:struct super_operations *s_op; 原书也印刷错了。(可别小看这个星星,VFS的面向对象全靠它)


P170

L+4:有三个数据结构将VFS层和文件的进程紧密联系在一起

订正:“文件的”这三个字不知道从哪里来的,原书没有,也不该有。


P175

L+10~L+11:可以在文件<linux/buffer_head.h>;中找到包含所有合法标志的bh_state_bite列表。

订正:误译。原文是:The legal flags are stored in the bh_state_bits enumeration,which is defined in <linux/buffer_head.h>;。其实看见enumeration的前4个字母就能猜到是枚举,改成:“合法的标志存储在bh_state_bits枚举中,该枚举在<linux/buffer_head.h>;中定义。”


P176

L-3:struct bio_vec *bi_io_vecs

订正:struct bio_vec *bi_io_vec。还有下页图12-2和解说的文字,都印刷错了。


P191

L-11:记住根节点总为红色。

订正:这话怎么跟我看的数据结构的书矛盾啊。Mark Allen Weiss的《数据结构与算法分析──C语言描述》2nd第十二章《高级数据结构及其实现》就说:“根总是黑色的。”(P.S. Weiss可是Robert Love的老师哦)其实Love的话自相矛盾,他这么说的:“(红色和黑色)分派的规则为:1)红节点的子节点为黑色,并且2)树中任何一条从节点到叶子的路径必须包含同样数目的黑色节点。记住根节点总为红色。” 我们可以做个反证。假设根节点为红色,考虑一棵只有2个节点的二叉树,既然根节点是红色,那么根据Love说的第一条规则,叶节点必定为黑色,这将导致从根节点到左右NULL指针的路径包含的黑色节点个数不同(左边是0,右边是1),与第二条规则矛盾。Love本科是在佛罗里达大学读的数学专业,不可能犯这种错误,要不就是印刷问题,要不就是我理解错了。


P237

L+1:如果你希望得到一个单独的文件

订正:原文是“If you need to diff only a single file”,明显是说,diff程序的输入是两个单一文件(而不是两个目录),并非指diff生成一个单一补丁文件。(再说,diff程序能生成1个以上的文件吗?很怀疑的说   )




OK,大体这么多吧,其他的基本不影响阅读。Happy Reading!!


(趁着五一熬夜,5日凌晨7点半


续补:

十一时候翻译文档,发现有些知识理解还不到位,于是重读,又勘出几条错误。补在这里:

P246,B.1.2,
原书:它的原型在<linux/percpu.h>;中:
void *kmalloc_percpu(size_t size, int flags);
void kfree(const void *);
勘误:注意第一行存在严重印刷错误。应该把第一行改正为下面的两行:
void *alloc_percpu(type);
void * __alloc_percpu(size_t size, size_t align);

P246, L-5
原书:函数kfree_percpu()将返回一个指向动态生成的单CPU数据的间接引用。
勘误:“函数kfree_percpu()”改正为“函数alloc_percpu()或者__alloc_percpu()”。

P111, “8.9禁止抢占”上方那段话
原书:只要没有其他写者,写锁总是能够被成功获得。读者不会影响写锁,这点和读者-写者自旋锁及信号量一样。
勘误:译者理解错误。本书英文版原文是“The write lock always succeeds in being obtained so long as there are no other writers. Readers do not affect the write lock, as in the case with reader-writer spin locks.” 这句话的意思是说,seqlock这种锁,如果你想对它加写锁,只要此时没有别的写锁,那么不管有没有、有多少读锁加在它上面,你都会加锁成功。这与读写锁、读写信号量不同,读写锁和读写信号量当存在读锁的时候,写锁不可能成功,它会使调用者一致自旋,直到所有的写锁都被释放为止。其实这些知识你在本书P104和P108对读写锁和读写信号量的讲解中也能得到印证。 因此,这句话改正为:“只要没有其它写者,获取写锁总会是成功的。读者并不象读写锁与读写信号量那样会影响写锁。”

P109, “8.7 BKL”上面那段讲述“完成变量”的话
原书:完成变量的通常方法是,将完成变量作为数据结构中的一项动态创建,而完成数据结构初试化工作的代码将调用wait_for_completion()进行等待。
勘误:译者理解错误。本书英文版原文是“Kernel code waiting for the initialization of the data structure calls wait_for_completion(). When the initialization is complete, the waiting tasks ared awakened via a call to completion().” 译文改正为:“那些等待数据结构被初试化的内核代码调用wait_for_completion()函数进行等待,当初试化完成之后,执行初试化的线程会调用completion()函数来唤醒所有正在等待的任务。”

P74,“2. 调度tasklets”上面那一行
原书:tasklets才被激活,并且在被设置为挂起状态时,该tasklet才能够执行。
勘误:“被设置为挂起状态”原文是“if marked pending”,更准确的译法是“被标记为待处理的”。 另外再重复一遍,本章出现的所有“挂起”字样,其英文原文都是pending,意为未处理的、待处理的、待决的。大家自己做相应的改动,不一一给出了。
作者: albcamus    时间: 2005-05-08 16:36
标题: 《Linux内核设计与实现》中文版勘误
好歹也是熬夜整理的,连个回的人都没有,Kao
作者: richardhesidu    时间: 2005-05-08 20:34
标题: 《Linux内核设计与实现》中文版勘误
比起看中文翻译, 我宁愿看英文. 现在国内出书的很不道德, 特别是翻译的, 句子狗屁不同, 跟金山词霸翻出来的差不多
作者: 我菜我怕谁    时间: 2005-05-09 08:26
标题: 《Linux内核设计与实现》中文版勘误
楼主能不能给俺一份.有多大呀??
xue_hu2001@eyou.com
谢谢.能不能做个ftp给偶们download , 或给个可下载网址也可以.谢谢
作者: albcamus    时间: 2005-05-09 09:01
标题: 《Linux内核设计与实现》中文版勘误
to 三楼的朋友:
你说的是事实情况,但是《Linux内核设计与实现》这本书还是翻译不错的,基本能看懂,不要一棍子打死。要是《Linux内核编程》那种人渣翻译的书,我还不做勘误呢。

to 四楼的朋友:
这书含金量很高,很多内核黑客都参与了。推荐买一本。
作者: steelcity    时间: 2005-05-09 23:43
标题: 《Linux内核设计与实现》中文版勘误
有专业修为,帮UP
作者: 零二年的夏天    时间: 2005-05-10 00:21
标题: 《Linux内核设计与实现》中文版勘误
楼主注明版本信息吧。
作者: albcamus    时间: 2005-05-10 09:15
标题: 《Linux内核设计与实现》中文版勘误
[quote]原帖由 "零二年的夏天"]楼主注明版本信息吧。[/quote 发表:



这样的,第一版有中译本,讲2.6,我估计就是2.6.0;第二版美国也是刚出不久,讲2.6.10,增加了一些内容。我是照着2nd-en校勘1st-CN。

P.S. 我还以为大家都知道了呢
作者: lansehouyan    时间: 2005-05-10 16:54
标题: 《Linux内核设计与实现》中文版勘误
请问楼主这本书里面有没有介绍协议栈方面的内容.
作者: albcamus    时间: 2005-05-10 16:58
标题: 《Linux内核设计与实现》中文版勘误
[quote]原帖由 "lansehouyan"]请问楼主这本书里面有没有介绍协议栈方面的内容.[/quote 发表:


没有。Linux协议栈实现,好象介绍的书很少,书评一般也不高。
我也很盼望有本TCPv2那样的巨著来讲解Linux协议栈,唉
作者: richardhesidu    时间: 2005-05-10 17:21
标题: 《Linux内核设计与实现》中文版勘误
给我发个第二版的吧
richardhesidu@sohu.com
谢谢
作者: richardhesidu    时间: 2005-05-10 18:43
标题: 《Linux内核设计与实现》中文版勘误
P87

L-1和L-11的代码:t->;preempt_count += ……

订正:t是指向thread_info结构的指针,而thread_info结构中根本没有preempt_count这个字段,相反, preempt_count在task_struct中,thread_info中有一个task指针指向相应的task_struct。所以,这里应当改为t->;task->;preempt_count。


搂主可能记错了
struct thread_info是有preempt_count这个字段的,相反task_struct却没有,你可以去查看源代码。
thread_info : ./include/asm/thread_info.h
task_struct : ./include/linux/sched.h
作者: wolf0403    时间: 2005-05-11 08:50
标题: 《Linux内核设计与实现》中文版勘误
支持一下楼上。参考:
http://lxr.linux.no/source/include/asm-i386/thread_info.h#L34
作者: albcamus    时间: 2005-05-11 09:48
标题: 《Linux内核设计与实现》中文版勘误
原帖由 "richardhesidu" 发表:


搂主可能记错了
struct thread_info是有preempt_count这个字段的,相反task_struct却没有,你可以去查看源代码。
thread_info : ./include/asm/thread_info.h
task_struct : ./include/linux/sched.h


的确是我记错了!!谢谢,呵呵。
作者: baozhongno1    时间: 2005-05-12 04:43
标题: 《Linux内核设计与实现》中文版勘误
给我也发一个吧,我的email
baozhongno1@163.com
作者: anray    时间: 2005-05-17 14:01
标题: 《Linux内核设计与实现》中文版勘误
刚刚download下来
希望作者能谅解我这样free share
作者: albcamus    时间: 2005-05-17 14:18
标题: 《Linux内核设计与实现》中文版勘误
原帖由 "anray" 发表:
刚刚download下来
希望作者能谅解我这样free share

是啊,我也矛盾。想学习,买不到书,只好从网上找,对不起作者呀,唉
作者的小孩刚刚出生,在blog上说鼓励大家买他的书,帮他抚养小孩,看着就难受。。





P.S.  最后一条,得到LinuxForum朋友的帮助,证明我的怀疑是没有道理的。确实存在worst-fit算法
作者: richardhesidu    时间: 2005-05-17 15:25
标题: 《Linux内核设计与实现》中文版勘误
原帖由 "anray" 发表:
刚刚download下来
希望作者能谅解我这样free share

q去哪儿download啊,找半天没找到。
作者: albcamus    时间: 2005-05-17 15:32
标题: 《Linux内核设计与实现》中文版勘误
楼上在哪儿找的找不到啊?LinuxForum就有。。
作者: richardhesidu    时间: 2005-05-17 16:03
标题: 《Linux内核设计与实现》中文版勘误
[quote]原帖由 "albcamus"]楼上在哪儿找的找不到啊?LinuxForum就有。。[/quote 发表:

哪个LinuxForum?
能说具体一些吗? 给个连接吧!!
谢谢
作者: benlan    时间: 2005-05-17 16:16
标题: 《Linux内核设计与实现》中文版勘误
帮顶,
作者: wxb133    时间: 2005-05-18 18:40
标题: 《Linux内核设计与实现》中文版勘误
wxb133@163.com
作者: brooks2005    时间: 2005-05-19 11:36
标题: 《Linux内核设计与实现》中文版勘误

作者: brooks2005    时间: 2005-05-19 11:37
标题: 《Linux内核设计与实现》中文版勘误
猜猜我是谁
作者: WilliamRen    时间: 2005-05-19 12:49
标题: 《Linux内核设计与实现》中文版勘误

作者: albcamus    时间: 2005-05-19 14:28
标题: 《Linux内核设计与实现》中文版勘误
[quote]原帖由 "brooks2005"][/quote 发表:


哪路小鬼,报上名来!!
作者: jeffshia    时间: 2005-12-28 11:52
标题: 还有...
p.120
        if(timeout < jiffies)
应为:  if(timeout > jiffies)

p.121
        if(time_after(jiffies, timeout))
应为:   if(time_before(jiffies,timeout))
作者: snow_insky    时间: 2005-12-28 12:37
标题: 我想要,发一份给我!
邮件:heaven_emissary@hotmail.com
作者: yjh777    时间: 2005-12-28 13:23
订正:排版太不负责任了,作为节拍的倒数的HZ变量,全都给印刷成了Hz,好象频率单位赫兹一样。大家自己改改吧。


节拍的倒数的单位就是赫兹.  书确实印错了,不过HZ是个宏,不是变量.
作者: kogou    时间: 2006-01-05 10:21
哪位大哥也给我一本电子版的啊,非常想看,小弟现拜谢了!!
charlse2200@yahoo.com.cn
作者: jeffshia    时间: 2006-01-05 11:27
中文版第二版好像已经出来了,好像已经修正了很多错误.
作者: yjh777    时间: 2006-01-05 14:08
标题: 发现一个新错误.
在202页:

14.2 基树 一节 说"基树是一个二叉树"  看代码显然不是.
作者: albcamus    时间: 2006-01-05 14:52
原帖由 yjh777 于 2006-1-5 14:08 发表
在202页:

14.2 基树 一节 说"基树是一个二叉树"  看代码显然不是.

汗~不了解radix tree。晚上我回去查一下Algorithms in C
作者: jeffshia    时间: 2006-01-05 16:07
布尔汗...

red black tree is a kind of binary tree, it is self balanced.

[ 本帖最后由 jeffshia 于 2006-1-5 16:12 编辑 ]
作者: snow_insky    时间: 2006-01-05 16:53
标题: 谁有电子版,发一份给我!
谢谢了:heaven_emissary@hotmail.com
作者: hongzjx    时间: 2006-01-05 17:05
还是买本算了!
作者: jeffshia    时间: 2006-01-05 17:07
很多地方可以下载,不过我还是邮件给你了,恩!以后多用google。。。。。。
作者: jjaing27    时间: 2006-01-11 14:52
jjaing@163.com
谢谢,很难找啊
作者: snow_insky    时间: 2006-01-11 16:50
发一份给我,上次发的chm格式,打不开,说是不能找到内容,能不能发pdf格式的啊???

yyzzbb_yang_eric@sina.com
作者: duangexin    时间: 2006-03-15 15:17
给我一份谢谢拉~~~
duangexin@etang.com
作者: albcamus    时间: 2006-03-15 15:39

谁说我有电子版的?

作者: 通用寄存器    时间: 2006-03-15 20:39
有顶起来了啊
作者: duanjigang    时间: 2006-03-16 10:24
我正在用那本内核编程的翻译版学习了,还参考着英文版的
albcamus 兄说得“那种人渣翻译的书”我实在感觉脸红,可是对于我这种新手来说还不错吧
作者: albcamus    时间: 2006-03-16 10:47
原帖由 duanjigang 于 2006-3-16 10:24 发表
我正在用那本内核编程的翻译版学习了,还参考着英文版的
albcamus 兄说得“那种人渣翻译的书”我实在感觉脸红,可是对于我这种新手来说还不错吧


Linux Kernel Programming-3rd英文版沒見過, 但既然是Linus 親自做序的書, (這本書甚至在CREADIT文件中被提到)想來也是不錯的。

只是中文版實在沒法看。 LKD譯的有些小問題, 那是水平所限, 不能怪譯者。 LKP翻譯的不比金山快譯好, 很氣人。 不過我罵人也不對, 那時候太年輕衝動了

還是建議從LKD入手
作者: carp84    时间: 2006-03-18 11:58
我是新手,麻烦也给我发一份电子版的吧,在google上找了实在不太好找,谢谢啦
carp84@sina.com
作者: deevarvar    时间: 2006-03-19 00:32
能不能给我一份,谢谢了!
deevarvar@163.com
作者: yangjiajiang    时间: 2006-03-20 13:03
中文版的在哪有卖?英文版的在哪有下?
作者: handsoft    时间: 2006-03-23 10:13
楼主!我严重支持你!我也发现几个不大妥当的地方!不过你已经提出来了!我晕!
作者: nuxjava    时间: 2006-03-23 21:11
标题: 哪位大侠也发我一份,谢谢了先! nuxjava@yahoo.com.cn
rt
作者: nuxjava    时间: 2006-03-23 21:13
哪位大侠也发我一份,谢谢了先!
nuxjava@yahoo.com.cn
作者: mapengfei    时间: 2006-03-24 04:32
标题: 回复 1楼 albcamus 的帖子
能给提供个地址下吗 最好是PDF格式的 ??   我的邮箱mapengfei19860126@1633.com
作者: wikingki    时间: 2006-03-24 15:15
我也要一份。wikingki@hotmail.com




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2