9.exokernel
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
-
separation the protection from (resources) management
-
make the resources abstraction as low-level as possible
-
尽量让 libOS 能得到更多的硬件等底层信息 (allocation, name, revokation)
Protection: Secure Binding
-
只在 bind 的时候检查是否具有权限 (capability),而在建立之后就不再检查是否具有对应的权限了
- decouple the authorization with the access process
-
bind at page granularity
-
downloading code into kernel: 将外部代码下载到 kernel 中进行运行,通过 code inspect 和 sandbox 来确保安全执行并且达到高效
-
不同 libOS 之间是有安全隔离的,但是两个位于同一个 libOS 上的进程缺少安全隔离 (至少是 exokernel 没有提供隔离)
缺点
这里的实验都只做了 microbenchmark,而没有涉及 macrobenchmark,也就是只注重了每个小步骤的效率,但是没有考虑大步骤的例如 compilation 级别整体任务的 效率
这里的 performance 并不一定是操作系统设计的第一目标
