-
Notifications
You must be signed in to change notification settings - Fork 0
arceos现在是unikernel模式,要给arceos增加宏内核模式,且支持aero操作系统的用户态程序(包括图形界面程序)。
新内核命名为清河(qinghe),其类型可称为元内核(meta-kernel)。
- 对三种架构(x86_64, arm64, riscv64)都要进行适配,而不应在某个架构上跑不起来。
- 支持的是宏内核模式,而不应限制为只能实现某个宏内核。
- 是源码级支持aero操作系统的用户态程序,而不是二进制级。
- rustc编译器使用stable版,而不使用nightly版。
-
设计思想:两种模块化
模块化还在探索中,可能有很多的内涵。我觉得至少是有两层含义:静态模块化和动态模块化。
静态的模块化:例如现在的arceos,编译时进行模块的组装,运行时模块就不能再改变了。
动态的模块化:例如Linux和minix,不仅编译时进行模块的组装,还能运行时加载或替换模块。
-
设计思想高于语言。
设计思想是模块化,语言是rust。
例如:crate是语言里提出来的概念,crates目录从设计的角度来看主要放的都是驱动程序,所以这个目录应该叫drivers。
例如:rust_main()函数从语言的角度看是进到了rust写的主控函数,但从设计的角度来看它是内核的主控函数,所以应该叫kernel_main()或kernel_init()。
例如:模块化的内核里到处都是模块,modules目录这种命名方式没有明确的指向性,但从设计的角度来看它放的是内核的核心代码,所以这个目录应该叫kernel。
-
设计思想高于第三方库。
当第三方库和设计思想冲突,但它又是内核所需要的,应对这个库进行更彻底的模块化改造,并单独维护自己的版本。
例如:文件系统第三方库可能都是需要改造的。
-
简单直接
代码在内在逻辑和外在形式上都应能少则少。
例如:rust代码默认是有src目录,凭空增加了路径的深度。
例如:使用面向对象的语言很容易就建立了很多对象,使调用路径太长。
-
理解arceos的实现。分析宏内核的本质。思考arceos怎么加入宏内核模式。计划15天。
unikernel支持确定的应用,所以它的思路是包含最少模块。宏内核是要支持尽可能多的应用,所以它的思路是包含尽可能全的模块。
-
依据上步思考的结果,实现宏内核模式。计划30天。
-
一个可在qemu上运行的最小二进制镜像。
多架构支持。
-
uart驱动支持。
-
原子操作与同步原语支持
-
日志系统支持。
-
内存管理系统支持。
-
中断、自陷的支持。
包括特权级切换的实现
-
进程管理系统支持
包括第一个用户进程的生成
-
调度器的支持。
-
块设备驱动支持
普通的块设备,ramdisk
-
文件系统支持
要支持ext2文件系统。fat在设计上有明显缺陷,不进行默认的支持。
-
系统调用支持
-
简单userland支持
基本的app,简单的ulib。
在实现宏内核后,下阶段主要目标就是进行完整userland的支持。
-
网卡驱动支持
-
网络协议栈支持
-
gpu驱动支持
-
-
适配aero操作系统的用户态程序。计划45天。