Exokernel: An Operating System Architecture for Application-Level Resource Management

“Dawson R. Engler, M. Frans Kaashoek, and James O’Toole Jr. M.I.T. Laboratory for Computer Science” (Engler 等, p. 251) (pdf)

Motivation

传统的 general OS kernel 只能提供给最广泛的用户态程序一个中庸的最优解,然而随着软件界的发展,越来越需要一种对各种不同的软件有各自 customized 方案的特殊化优化

并且作者观察到 原语的级别越低,它的实现效率越高,并且它赋予高级抽象实现者更大的自由度

一个系统的目的应该是:

  • OS (包括 microkernel + server):= protection + abstraction

  • exokernel := 内核只负责 protection/security (mechanisms), 让 libOS 来负责 abstraction 以及 policy

微内核的受众是 OS developer ,因此理想的 microkernel 抽象的接口是提供给 OS developer 写的 FS, Driver 等外部原系统程序的

而 exokernel 则是提供给一般 开发者写的程序

类似的提供 emulate hardware 接口的,比如在虚拟机设计中的 Hyprvisor, 比 VMM 更低一级用来模拟 hostOS 的硬件资源来提供给上层的 guestOS, 不过这里的 hyprvisor 的目标是尽量模仿地很像真的硬件接口,而 exokernel 目标并不是模仿得像,而是让上层能直接访问到对应的物理硬件

而且 hyprvisor 的上层就是一整个完整的 OS,包括 kernel 层, 而 exokernel 对应的 libOS 其本身不是一个完整的 OS,所以当调用 syscall 的时候,虚拟机是在本系统内向 guestOS 直接发送 syscall  (也就是存在 distinction) 而在 exokernel 中则是直接向 libOS 发送请求,但是这里少了一个 protection 检查

设计原理 Principle

  1. separation the protection from (resources) management

  2. make the resources abstraction as low-level as possible

  3. 尽量让 libOS 能得到更多的硬件等底层信息 (allocation, name, revokation)

Protection: Secure Binding

  1. 只在 bind 的时候检查是否具有权限 (capability),而在建立之后就不再检查是否具有对应的权限了

    1. decouple the authorization with the access process
  2. bind at page granularity

  3. downloading code into kernel: 将外部代码下载到 kernel 中进行运行,通过 code inspect 和 sandbox 来确保安全执行并且达到高效

  4. 不同 libOS 之间是有安全隔离的,但是两个位于同一个 libOS 上的进程缺少安全隔离 (至少是 exokernel 没有提供隔离)

缺点

这里的实验都只做了 microbenchmark,而没有涉及 macrobenchmark,也就是只注重了每个小步骤的效率,但是没有考虑大步骤的例如 compilation 级别整体任务的 效率

这里的 performance 并不一定是操作系统设计的第一目标