我不是内核代码的主人,但对代码结构有一些基本的了解。在这篇文章中,我们可以讨论内核设计中的好事和坏事。
更新:不,这不适合做作业。我会提到如果是这样的话。
请参阅:https://stackoverflow.com/questions/1548442/i-know-how-to-program-now-how-do-i-learn-to-design
每个人都称赞Linux内核的设计。让我们列出一下在内核设计中采用的好的和坏的设计决策。
答案 0 :(得分:8)
有些文章名为“Linux内核设计模式”。你可以找到Linux的设计内核的各种模式。一篇连续的文章是“Linux Kernel Design Patterns - Part 1”,从此开始并谷歌搜索内核设计模式的额外文章。
答案 1 :(得分:5)
不直接关于Linux的设计,但我相信它背后的开发过程是最值得注意的。内核本身在不断发展,并以惊人的速度实现。这是唯一可能的,因为分散版本控制(git),这使得大量开发人员可以同时工作。
此外,git bisect他们取得了令人瞩目的成就;现在,非开发人员可以追踪错误。以下是David Miller的一句话:
人们没有得到的是这是 “终端节点”的情况 原则“适用。当你有 有限的资源(这里:开发人员) 你不要承担大部分的负担 在他们之上。相反,你推动了事情 对你有很多的资源, 结束节点(这里:用户),这样就可以了 情况实际上是规模。
报告错误的人可以访问发生错误的环境, 和“git bisect”自动从中提取相关信息 环境。这也是获得新贡献者的好方法。
此外,每当开发人员想要贡献代码时,他们绝对必须将代码分解为微小的,可单独应用的补丁,以便可以轻松地审查每个更改。这样,很多人都可以理解他们的大部分代码。
Linux Management Style是一本有趣的读物。莱纳斯试图营造一种你不会躲在礼貌背后的氛围,但要明确说出你的想法。这可能有点粗鲁,但我确信它会将代码质量保持在较高水平。
答案 2 :(得分:4)
坏事:
好事:
答案 3 :(得分:1)
最糟糕的事情:
构建系统,(是的,我知道它与内核本身的设计无关) 这绝对是一场噩梦,没有任何其他存在的东西,如果由于某种原因(或许添加新的架构)你需要改变它,那么你必须学习一种全新的语言来做到这一点。
最好的事情:
几乎所有东西都是可配置的。令人惊讶的是,基本相同的内核用于没有MMU的小型嵌入式设备,以及具有大量内存和数千个处理器的超级计算机。
答案 4 :(得分:0)
我认为内核开发,而不是具有哲学背景和争论的设计问题(例如微内核与单片内核),是一个可靠的实用代码问题。除了广泛的硬件版本和制造商之外,内核应该支持的各种外围设备和协议以及保护模式开发中出现的复杂问题(与应用程序使用的用户模式开发相比)证明了这一说法。另外,不要忘记向后兼容性问题,这对操作系统在实践中至关重要,但在设计哲学中主要被忽略。
Linux内核就是一个很好的例子:单核内核(虽然非常模块化),其中包含许多实用的黑客,在服务器和嵌入式系统领域的性能和性能都优于许多设计良好的学术或商业操作系统。 / p>
Linux的一个优势是它的内核的许多方面可以嵌入到内核映像中(主要是bzImage),也可以在以后添加为内核模块。您可以在使用配置工具制作内核映像之前对其进行配置,然后可以在运行时轻松删除或添加任何内核模块(当然是通过root权限),而无需重新启动操作系统。这使得内核开发和维护变得更加容易。 (想想几乎每次更新都需要重启的Windows操作系统,在非相关内核程序中需要多次重启)