2

我试图了解使用 Linux 内核模块的缺点。我了解使用它的好处:能够将代码动态插入正在运行的系统中,而无需重新编译和重新启动基本系统。鉴于这种强大的优势,我猜测大多数内核代码应该作为内核模块而不是作为基本内核的一部分,但似乎并非如此。大量的核心 sus 系统(如内存管理或根驱动器使用的文件系统)仍然作为基本内核。

我能想到的一个原因是内核模块在启动过程中加载得很晚,因此核心功能必须进入基础内核。我阅读的另一个原因是关于碎片化。

我真的不明白为什么内核模块会导致内存碎片,有人可以解释一下吗?使用内核模块还有其他缺点吗?

4

1 回答 1

2

我试图了解使用 Linux 内核模块的缺点。我了解使用它的好处:能够将代码动态插入正在运行的系统中,而无需重新编译和重新启动基本系统。

虽然这有时很有用,但这并不是模块存在的主要原因。它们的主要目的是允许并不总是需要按需加载的内核代码,而不是总是驻留在内存中。

大量的核心 sus 系统(如内存管理或根驱动器使用的文件系统)仍然作为基本内核。

这是因为并非所有内核组件都可以配置为模块;只有那些按需加载代码才有意义的。例如,内存管理不是模块化的,因为它永远不会不存在。(而且因为它需要加载模块!)

(您的第二个示例实际上是错误的。用于根文件系统的文件系统可以配置为模块,如果它在 initrd 中可用。)

我真的不明白为什么内核模块会导致内存碎片,有人可以解释一下吗?

他们没有,至少在很大程度上没有。内核模块往往很小,因此它们造成的任何碎片都是最小的。

于 2013-02-20T06:10:42.910 回答