热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux内核设计与实现第二版勘误

Linux内核设计与实现第二版勘误--Linux通用技术-Linux编程与内核信息,下面是详情阅读。
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的结构定义也能看出来。

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

订正:这节中所有“挂起”字样,原文统统是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:可以在文件;中找到包含所有合法标志的bh_state_bite列表。

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


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!!


续补:

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

P246,B.1.2,
原书:它的原型在;中:
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,意为未处理的、待处理的、待决的。大家自己做相应的改动,不一一给出了。

还有一个错误,就是Radix Tree数据结构并非二叉树, 然而书中却这么说的,中英文都错了。
推荐阅读
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 字符常量与变量的定义及使用方法
    本文介绍了字符常量与变量的定义及使用方法,包括字符常量的定义、值和转义字符的表示方法;字符串常量的定义和结束标志;字符型数据与整型数据的区别;字符型变量的定义和内存占用;字符串变量的运算方法。同时提醒注意字符串常量不可赋值给字符型变量,需使用数组或指针进行存取。 ... [详细]
  • OO第一单元自白:简单多项式导函数的设计与bug分析
    本文介绍了作者在学习OO的第一次作业中所遇到的问题及其解决方案。作者通过建立Multinomial和Monomial两个类来实现多项式和单项式,并通过append方法将单项式组合为多项式,并在此过程中合并同类项。作者还介绍了单项式和多项式的求导方法,并解释了如何利用正则表达式提取各个单项式并进行求导。同时,作者还对自己在输入合法性判断上的不足进行了bug分析,指出了自己在处理指数情况时出现的问题,并总结了被hack的原因。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
author-avatar
cc_lzx_530
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有