《Professional Linux Kernel Architecture》的原文摘录

  • AMD64系统地址空间的设置在某些方面比IA-32容易,但在另一些方面要困难。虽然64位地址空间避免了古怪的高端内存域,但有另一个因素使情况复杂化。64位地址空间的跨度太大,当前没有什么应用程序需要这个。因此,当前只实现了一个比较小的物理地址空间,地址字宽度为48位。这在不失灵活性的前提下,简化并加速了地址转换。48位宽的地址字可以寻址256 TiB的地址空间,或256x1024 GiB,即使对Firefox也足够了! (查看原文)
    放开那个西红柿 1回复 3赞 2014-03-14 17:06:30
    —— 引自第151页
  • 内核很神奇,但归根结底它只是一个大的C程序,带有一些汇编代码(不时出现很少量的“黑巫术”)。是什么使得内核如此吸引人?原因有几个。首要一点在于,内核是由世界上最好的程序员编写的,源代码可以证实这一点。其结构良好,细节一丝不苟,巧妙的解决方案在代码中处处可见。一言以蔽之:内核应该是什么样子,它现在就是什么样子。但这并不意味着内核是应用教科书风格的程序设计方法学得出的产品。尽管内核采用了设计得非常干净的抽象,以保持代码的模块化和易管理性,但这一点与内核的其他方面混合起来,使得代码非常有趣和独特。在必要的情况下,内核会以上下文相关的方式重用比特位置,多次重载结构成员,从指针已经对齐的部分压榨出又一个存储位,自由地使用goto语句,还有很多其他东西,这些都会使任何强调结构的程序员因痛苦而尖叫。教科书答案中难以想象的那些技巧,对于实现能够在真正的现实世界中正常工作的内核不仅是有益的,甚至是必需的。正是因为找到了一条在内核完全对立的两面之间保持平衡的路径,内核才如此令人兴味盎然、富有挑战性并且妙趣横生! (查看原文)
    夏夜寂寞属壁虎 2赞 2020-06-22 11:29:24
    —— 引自章节:第1章 简介和概述
  • However, if the sleeper has accumulated a large unfairness as indicated by a large se_vruntime value, the kernel must honor this. If se->vruntime is larger than the previously computed difference, it is kept as the vruntime of the process, which leads to a leftward placement on the red-black tree — recall that large vruntime values are good to schedule early! (查看原文)
    红色有角F叔 5回复 2013-06-15 12:35:08
    —— 引自章节:2.6.3
  • 网络子系统是内核中涉及面最广、要求最高的部分之一。为什么是这样呢?答案是,该子系统处理了大量特定于协议的细节和微妙之处,穿越各层的代码路径中有大量的函数指针,而没有直接的函数调用。这是不可避免的,因为各个层次有多种组合方式,这显然不会使代码路径变得更清楚或更易于跟踪。此外,其中涉及的数据结构通常彼此紧密关联。 (查看原文)
    红色有角F叔 2014-03-21 22:20:51
    —— 引自章节:网络