BY albcamus
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)
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的结构定义也能看出来。
订正:误译。原文是:The legal flags are stored in the bh_state_bits enumeration,which is defined in ;。其实看见enumeration的前4个字母就能猜到是枚举,改成:“合法的标志存储在 bh_state_bits枚举中,该枚举在;中定义。”
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()函数来唤醒所有正在等待的任务。”