单内核是个很大的进程。它的内部又能够被分为若干模块(或是层次或其他)。但是在运行的时候,他是个单独的
二进制大映象。其模块间的通讯是通过直接调用其他模块中的函数实现的,而不是消息传递。 在运行效率上,单内核会具有一定的好处。
单内核结构在硬件之上定义了一个高阶的抽象界面,应用一组
原语(或者叫
系统调用)来实现操作系统的功能,例如
进程管理,文件系统,和
存储管理等等,这些功能由多个运行在
核心态的模块来完成。
单内核结构是非常有吸引力的一种设计,由于在同一个
地址空间上实现所有低级操作的
系统控制代码的复杂性的效率会比在不同地址空间上实现更高些。单核结构正趋向于容易被正确设计,所以它的发展会比
微内核结构更迅速些。
尽管每一个模块都是单独地服务这些操作,内核代码是高度集成的,而且难以编写正确。因为所有的模块都在同一个
内核空间上运行,一个很小的bug都会使整个系统崩溃。然而,如果开发顺利,单内核结构就可以从运行效率上得到好处。
很多现代的单内核结构内核,如
Linux和
FreeBSD内核,能够在运行时将模块调入执行,这就可以使扩充内核的功能变得更简单,也可以使内核的核心部分变得更简洁。
单内核是两大阵营中一种较为简单的设计,在1980年之前,所有的内核都设计成单内核。所谓单内核就是把它从整体上作为一个单独的大过程来实现,并同时运行在一个单独的
地址空间。因此,这样的内核通常以单个静态
二进制文件的形式存放于磁盘。所有内核服务都在这样的一个大
内核空间中运行。内核之间的通信是微不足道的,因为大家都运行在内核态,并身处同一地址空间:内核可以直接调用函数,这与用户空间没有什么区别。这种模式的支持者认为单模块具有简单和高性能的特点。大多数
Unix系统都设计为单模块。
一,在Linus的观点看来,通过把内核以单一的方式进行组织并在最初始的空间中运行是相当容易的事情。这种决策避免了有关消息传递体系结构,计算模块装载方式等方面的相关工作。(内核模块系统在随后的几年中又进行了不断地改进。)
二,
Linux既没有研发时间的限制,也没有深受市场压力的发行进度。任何的限制只有并但是分的对内核的修改和扩充。内核的单一设计在内部实现了充分的
模块化,在这种条件下的修改或增加都并不怎么困难。而且问题还在于没有必要为了追求尚未证实的
可维护性的微小增长而重写Linux的内核。