workshop 20190319 21 - oscourse-tsinghua/rcore_plus GitHub Wiki

核心目的

建立一个os框架,可以在保证一定安全的情况下,可以让内核模块+应用模块根据应用场景运行在合适的内核态或用户态,达到高性能,且代码只有一份(与运行在哪个态没关系)

类似工作

拆分OS:

  1. D???:在VM中运行驱动(?)
  2. LegoOS:分布式OS,CPU、内存、存储分别由不同的单机处理,通过RDMA网络当总线通信。
  3. ???

中断与IPC:

  1. XPC:修改硬件以支持高效IPC

应用场景

康总觉得,对于论文而言,需要能体现:对于某应用,1-n个内核模块必须放到用户态,才能在基本安全的情况下,达到高性能。而对于另外一个应用,1-n个内核模块必须放到内核态,才能在基本安全的情况下,达到高性能。

???

TODO

  1. 利用x86用户态中断机制
  2. 网卡驱动+网络协议栈的实现
  3. 磁盘驱动+FS的实现
  4. 支持动态链接库

一些细节问题的讨论与共识

  1. Q:用户态中断如果在内核态发生如何处理?

    A:由内核函数处理,不能让CPU从内核中断到用户态。

  2. Q:用户程序是否可信?

    A:基本可信,可以有Bug造成无意破坏,但不会恶意破坏。适当放弃安全性以追求高性能。

  3. Q:对于需要共享的模块(例如FS)如何处理?

    A:将整个模块(代码+数据)共享映射到每个使用者进程,以函数调用代替系统调用,类似增强版vDSO。如果采用随机地址映射的方式,基于用户进程的非恶意性假设,共享模块一般不会被破坏。如果被破坏,所有使用者一起挂掉。

  4. 动态链接库遇到的问题:mmap文件,ld.sosys_execve的工作机制