在Linux内核的devise中,什么是好的和坏的东西?

我不是内核代码的主人,但是有一些代码结构的基本概念。 在这篇文章中,我们可以讨论内核devise中的优点和缺点。

更新:不,这不是作业。 如果是这样的话,我会提到的。

看到这个: https : //stackoverflow.com/questions/1548442/i-know-how-to-program-now-how-do-i-learn-to-design

大家都称赞Linux内核的devise。 让我们列出在devise内核时所采取的好的和坏的devise决策。

有一篇文章叫做“Linux内核devise模式”。 你可以find针对Linux的devise内核的各种模式。 一篇连续的文章是“ Linux内核devise模式 – 第一部分 ”,从这里开始,并为内核devise模式添加额外的文章。

不是直接关于Linux的devise,但我相信它背后的发展过程是最值得注意的。 内核本身在不断发展,并以令人难以置信的速度这样做。 这是唯一可能的,因为分散版本控制( git ),这使得大量的开发人员可以同时工作。

而且,用git bisect他们完成了一件了不起的事情。 非开发人员现在有可能追踪错误。 以下是David Miller的一句话:

人们没有得到的是,这是“terminal节点原则”适用的情况。 当你有限的资源(在这里:开发人员),你不把他们的大部分负担。 相反,你把事情推到你有很多的资源,最终节点(在这里:用户),这样的情况实际上是规模。

报告错误的人可以访问发生错误的环境,“git bisect”自动从这个环境中提取相关信息。 这也是获得新贡献者的好方法。

而且,每当开发者想要贡献代码时,他们绝对不得不将代码分解成小的,可单独应用的补丁,这样每个更改都可以很容易地进行审查。 这样,他们的代码很大一部分可以被许多人理解。

Linuxpipe理风格是一个有趣的阅读。 莱纳斯试图生活在一个你不隐瞒礼貌的气氛中,但清楚地陈述你的想法。 这可能会有点粗俗,但我相信它保持了高质量的代码质量。

坏事:

  1. 新function率高,此function的错误修复周期很less。
  2. configuration系统必须是智能的。 并根据一些一般需求分类。 如果它有像​​configuration系统的向导和更多的交互和信息的时候做configuration。
  3. 大内核锁和其他锁到处都没有好的检查机制。

好东西:

  1. 用户模式驱动程序:用户模式文件系统,用户模式块驱动程序,用户模式块驱动程序,原始隐藏,…
  2. 良好的司机包容。 在这个时代,大量的设备在linux内核中都有支持。
  3. 内核中的虚拟化。
  4. 用户空间和内核空间(dev,proc,sys,debugfs,…)之间良好的通信机制
  5. 非常好的使用C语言和结构中的函数指针来模拟一些面向对象的特性。
  6. 用户模式linux进行debugging。
  7. 良好的embedded式系统支持
  8. 非常好的安全机制:selinux,apparmor,完整性validation,… … –

最坏的事:

构build系统(是的,我知道这与内核本身的devise无关)。
这绝对是一场噩梦,与其他任何事物一样,如果由于某种原因(也许增加一个新的架构),你需要改变它,那么你必须学习一门全新的语言来做到这一点。

最好的事:

几乎所有的东西都是可configuration的。 令人惊讶的是, 基本上相同的内核被用于没有MMU的微型embedded式设备,以及具有巨大内存和数千个处理器的超级计算机。

我认为内核开发,而不是一个哲学背景和辩论(如微内核与单片内核)的devise问题,是一个实际可靠的代码问题。 除了各种各样的硬件版本和制造商之外,内核应该支持的各种外设和协议,以及在保护模式开发中出现的复杂问题(与应用程序使用的用户模式开发相对)也certificate了这一点。 另外,不要忘记在实践中对于操作系统而言至关重要的向后兼容性问题,而在devise理念上却被忽略了。

Linux内核就是一个很好的例子:单核内核(尽pipe是非常模块化的),其中有许多实用的黑客技术,胜过许多精心devise的学术或商业操作系统,在服务器和embedded式系统领域的普及和性能。

Linux的优越之处在于其内核的许多方面可以embedded到内核映像中(大部分是bzImage),或者以后作为内核模块添加。 您可以使用configuration工具制作内核映像之前configuration它,然后可以在运行时(当然是root权限)轻松删除或添加任何内核模块,而无需重新启动操作系统。 这使得内核开发和维护真的更容易。 (想想几乎每次更新都需要重新启动的Windows操作系统,在非关联到内核的程序中多次)