workshop 20190319 21 - oscourse-tsinghua/rcore_plus GitHub Wiki
核心目的
建立一个os框架,可以在保证一定安全的情况下,可以让内核模块+应用模块根据应用场景运行在合适的内核态或用户态,达到高性能,且代码只有一份(与运行在哪个态没关系)
类似工作
拆分OS:
- D???:在VM中运行驱动(?)
- LegoOS:分布式OS,CPU、内存、存储分别由不同的单机处理,通过RDMA网络当总线通信。
- ???
中断与IPC:
- XPC:修改硬件以支持高效IPC
应用场景
康总觉得,对于论文而言,需要能体现:对于某应用,1-n个内核模块必须放到用户态,才能在基本安全的情况下,达到高性能。而对于另外一个应用,1-n个内核模块必须放到内核态,才能在基本安全的情况下,达到高性能。
???
TODO
- 利用x86用户态中断机制
- 网卡驱动+网络协议栈的实现
- 磁盘驱动+FS的实现
- 支持动态链接库
一些细节问题的讨论与共识
-
Q:用户态中断如果在内核态发生如何处理?
A:由内核函数处理,不能让CPU从内核中断到用户态。
-
Q:用户程序是否可信?
A:基本可信,可以有Bug造成无意破坏,但不会恶意破坏。适当放弃安全性以追求高性能。
-
Q:对于需要共享的模块(例如FS)如何处理?
A:将整个模块(代码+数据)共享映射到每个使用者进程,以函数调用代替系统调用,类似增强版vDSO。如果采用随机地址映射的方式,基于用户进程的非恶意性假设,共享模块一般不会被破坏。如果被破坏,所有使用者一起挂掉。
-
动态链接库遇到的问题:mmap文件,
ld.so与sys_execve的工作机制