引言
设计目标
本项目的设计目标是从从传统宏内核与微内核出发, 改变内核功能模块的运行方式,由传统的函数调用方式转变为独立内核线程运行方式,内核线程拥有独立线程栈,发生失效时可通过微重启的方式恢复服务,不影响内核全局。
一般来说,将所有内核功能都集成在内核态的宏内核具有很好的性能,但是安全性和稳定性较差,内核中任何一个模块出现故障(一般为低质量的驱动代码)都会导致内核崩溃。微内核为了解决这个问题,将非核心的内核服务移动到用户态以独立的用户进程提供,但这也带来了频繁的进程间通信开销导致的性能问题。关于宏内核与微内核的更具体的讨论,可以参考内核架构一节。
本项目参考了以Windows-NT为代表的混合内核,综合宏内核和微内核的优点,尝试在增强内核服务可靠性的前提下尽量保证内核性能。具体来说,本项目:
-
采用基于内核线程服务模型的混合内核架构。(在 内核架构中详细说明)
-
基于Rust无栈异步协程机制和内核服务线程模型实现了一个多对多线程模型;
-
为了进行对比,实现了宏内核、混合内核两种内核对象,内核可以以两种架构模式运行;
-
直接实现Linux系统调用;
-
初步完成了对于musl-libc的支持,支持c语言应用程序(静态链接);
-
正在逐步完成对sqlite3, busybox等典型Linux应用程序的支持;
文档的说明
本文档主要说明内核设计中的主要思想和设计原则,以逐步揭示内核的整个架构和运行过程,必要时会讨论内核数据结构的设计,但不会对所有代码进行详细说明。
在本文档中,我们将我们实现的内核称为nCore。