混合(或模块化)内核
主要文章:混合内核
混合内核用于大多数商业操作系统,如Microsoft Windows NT 3.1,NT 3.5,NT 3.51,NT 4.0,2000,XP,Vista,7,8,8.1和10. Apple Inc自己的macOS使用称为混合内核的混合内核XNU基于来自OSF / 1的Mach内核(OSFMK 7.3)[39]和FreeBSD的单片内核的代码。它们类似于微内核,除了它们在内核空间中包含一些额外的代码以提高性能。这些内核代表了一些开发人员在证明纯微内核可以提供高性能之前实现的折衷。这些类型的内核是微内核的扩展,具有单片内核的一些属性。与单片内核不同,这些类型的内核无法在运行时自行加载模块。混合内核是微内核,在内核空间中具有一些“非必要”代码,以使代码比在用户空间中运行更快。混合内核是单片和微内核设计之间的折衷。)在内核空间中,以减少传统微内核的性能开销,但仍然将内核代码(例如设备驱动程序)作为用户空间中的服务器运行。
许多传统的单片内核现在至少添加(如果不是主动利用)模块功能。这些内核中最着名的是Linux内核。模块化内核本质上可以包含内核中的部分内核二进制文件或二进制文件,可根据需要加载到内存中。值得注意的是,代码受污染的模块有可能破坏正在运行的内核的稳定性。在讨论微内核时,许多人在这一点上感到困惑。可以在完全独立的存储空间中为微内核编写驱动程序,并在“上线”之前对其进行测试。当加载内核模块时,它会通过向其添加所需内容来访问单片部分的内存空间,从而打开可能污染的门户。模块化(或)混合内核的一些优点是:
可以在模块内运行的驱动程序的开发时间更快。测试不需要重新启动(假设内核不稳定)。
随需应变能力与花费时间重新编译整个内核,用于新驱动程序或子系统等。
更快地整合第三方技术(与开发相关但仍然与之相关)。
通常,模块使用某种模块接口与内核通信。接口是通用的(尽管特定于给定的操作系统),因此并不总是可以使用模块。通常,设备驱动程序可能需要比模块接口提供的更多灵活性。本质上,它是两个系统调用,通常只需要在单片内核中执行一次安全检查,现在可以完成两次。
模块化方法的一些缺点是: