Exokernel
内核设计 |
---|
模型 |
其它概念 |
Exokernels是一种将安全性与抽象区分开的尝试,使操作系统的不可覆盖部分除了安全地多路复用硬件之外什么都不做。 目标是避免对应用程序强制执行任何特定的抽象,而是允许它们使用或实现最适合其任务的抽象,而不必将它们放在可能施加限制或不必要的开销的其他抽象之上。 这是通过将抽象移动到称为 “库操作系统” (libOSes) 的不受信任的用户空间库中来完成的,这些库链接到应用程序并代表它们调用操作系统。
Exokernels经常与虚拟机监控程序进行比较 (或混为一谈),并且两者的实现通常非常相似,尤其是在使用硬件虚拟化时; 如果愿意的话,大多数exokernels实际上可以充当其他os的管理程序。 但是,实际使用场景是完全不同的-虚拟机管理程序的目的是 “提供” 硬件上的抽象,其中exokernel的目的是使这种抽象变得不必要。 此外,在大多数当前使用中,管理程序本身作为通用操作系统的实例运行或在通用操作系统的实例中运行。 虽然为虚拟机管理程序转向 “容器化” 客户端可以被视为这两种想法的混合体 (至少在概念层面上),但实际上它们并不相同。
Exokernel概念
外内核的概念与微内核/单内核的概念正交(相互独立,互为补充)。 安全复用是在特权内核代码还是用户模式服务器中执行并不重要,只是没有强制抽象。
示例
以文件的典型抽象为例。 相对应用程序所看到的那些文件,磁盘上不存在文件。 在磁盘上只有磁盘扇区。 操作系统抽象了磁盘的现实,以创建更方便的模拟出来的文件和文件系统。 通常,在这个级别上也提供安全性控制。acl,Unix风格的权限等应用于文件。 安全性与抽象相结合。
在exokernels上,在本示例中为磁盘扇区提供了未抽象硬件级别的安全性。 LibOSes在此界面之上提供任何所需的抽象。 不可替换覆盖的安全性放在exokernel中,同时可替换覆盖的抽象在libOS中实现。 安全性与抽象分离。
优势
这样做的好处是允许用户空间应用程序实现它们自己的、优化的内存管理 (通过直接访问例如内存表) 、文件访问 (通过 “原始” 磁盘访问) 等。 对于特殊应用,这可能会导致性能显着提高。 Engler等人对一个web服务器Cheetah进行了基准测试,该服务器在exokernel上运行的速度比竞争对手快八倍。 除其他外,Cheetah使用HTTP的知识来组合IO请求,使用HTML的知识来适当地将资源集中在磁盘上,通过直接从文件缓存向客户端发送资源来避免复制数据,并缓存预先生成的网络数据包。 请参阅 exo-sosp97/exo-sosp97.html应用程序性能和灵活性在Exokernel系统上。
此外,通过让应用程序能发觉到资源的可用性,撤销和分配,希望让应用程序可以更高效,更智能地利用硬件资源。 例如,服务器将知道不要使其在内存中的缓存大于其实际拥有的内存量。 在传统系统中,无论服务器分配了多少虚拟内存,操作系统都会伪造虚拟内存,并且服务器会继续进行,而不知道任何分页异常,交换和甚至分页。
同时exokernels能够以类似于微内核的方式简化新操作系统思想的开发和测试。 可以在libOSes中开发和测试新的调度技术,内存管理方法,文件系统等,它们比当前的操作系统更快速,更容易地修改。 在 Exokernel操作系统体系结构 中,Engler回顾了一个本科生的故事,他能够在一周内在exokernel上开发和测试新的页面表结构,而其它设计者只能对其进行模拟。
缺点
Exokernel技术尚未得到彻底研究,因此未知的坑可能无处不在。 此外,为用户空间程序增加的灵活性也意味着降低了一致性。 虽然从理论上讲可以提供使MacOS,Windows和Linux应用程序在同一系统上同时运行的libOSes,但这也意味着它们各自的外观和感觉不同。 此外,不同的libOSes之间可能具有不同级别的兼容性和互操作性。
为exokernel设计接口可能很困难。 设计人员必须为底层硬件开发充分和适当的接口,并在效率、最小化和足够的保护之间微妙地平衡。 Engler等人就特别提醒他们的exokernel接口经过了许多修订。
创建和混合libOSes的简便性可能导致代码混乱,这对于维护编码人员和系统管理员来说将是一场噩梦。 维护编码器不仅要处理应用程序代码,还要处理任何覆盖的抽象或新实现。
如果相关抽象是在libOSes而不是内核中实现的,则可能会丢失对内核有用的信息。
Exokernel衍生品
虽然单片内核和微内核是定义明确的术语,但类似外内核技术的倡导者却创造了许多不同的术语-纳米内核,piokernel,缓存内核,虚拟化内核等。 其中大多数是彼此相对较小的变化。
Nanokernel/Picokernel 纳米内核/微微内核
Nanokernels和piokernels通常是被其创造者认为比 微内核 还要小的小内核。 示例包括: Adeos 、 KeyKOS 和 LSE/OS。 另一个非常著名的例子是symbian EKA2内核。 此nanokernel在内核内部实现了驱动程序,使其不完全是微内核。
缓存内核
The Stanford cache kernel caches kernel objects, like address spaces and threads, and allows usermode “application kernels” to manage them, loading and unloading them as needed. 应用程序内核管理其线程的页面故障,异常等,并且缓存内核允许其中几个应用程序内核在一个系统中共存。
虚拟化内核
虚拟化内核通常被设计为允许多个操作系统在一台计算机上运行,通过允许自由执行非特权指令以及捕获和模拟特权指令。 Adeos虽然自称为纳米内核,但在概念上类似于虚拟化内核。 与exokernels不同,虚拟化内核试图尽可能透明,以避免需要对托管操作系统进行许多修改 (如果有的话)。