我试图了解使用Linux内核模块的缺点。 我理解使用它的好处: 能够将代码动态插入到运行的系统中,而无需重新编译和重新引导基本系统。鉴于这一强大的优势,我猜测大多数内核代码应该作为内核模块而不是基本内核的一部分,但似乎并非如此。大量的核心系统(如内存管理或根驱动器使用的文件系统)仍然作为基本内核。
我能想到的一个原因是内核模块在启动过程中很晚才加载,因此核心功能必须放在基本内核中。我读到的另一个原因是碎片化。
我真的不明白为什么内核模块会导致内存碎片,有人可以解释一下吗?使用内核模块还有其他缺点吗?
答案 0 :(得分:2)
我试图了解使用Linux内核模块的缺点。我理解使用它的好处:能够动态地将代码插入到运行的系统中,而无需重新编译和重新引导基本系统。
虽然这偶尔会有用,但这并不是模块存在的主要原因。它们的主要目的是允许按需加载并不总是需要的内核代码,而不是总是驻留在内存中。
大量的核心系统(如内存管理或根驱动器使用的文件系统)仍然作为基本内核。
这是因为并非所有内核组件都可以配置为模块;只有按需加载代码才有意义的。例如,内存管理不是模块化的,因为它永远不会存在。 (因为它需要加载模块!)
(你的第二个例子实际上是错误的。用于根文件系统的文件系统可以配置为模块如果它在initrd中可用。)
我真的不明白为什么内核模块会导致内存碎片,有人可以解释一下吗?
他们没有,至少在很大程度上没有。内核模块往往很小,因此它们造成的任何碎片都很小。