拥有运行托管代码的最小内核的潜在陷阱是什么?


14

假设我要基于一个很小的本机较低层内核构建操作系统,该较低层本地内核充当托管代码解释器/运行时,并基于一个较大的较高层内核编译为非本地机器语言(Java字节码,CIL等)。类似操作系统的示例将是SingularityCosmos

与纯本机解决方案相比,使用这种基础结构编写操作系统存在哪些陷阱和开发挑战?

Answers:


8

根据语言,可能会遇到许多开发挑战:

  1. 指针:如果一种语言没有指针,那么完成相对简单的任务将是一个挑战。例如,您可以使用指针写入VGA内存以打印到屏幕上。但是,在托管语言中,您将需要某种“插件”(来自C / C ++)来执行相同的操作。

  2. 组装:操作系统始终需要进行一些组装。与C / C ++不同,诸如C#,Java等语言无法很好地与之配合使用。在C或C ++中,您还可以使用内联汇编,这对于许多任务非常非常有用。在很多情况下需要这样做(x86中的示例):加载GDT,加载IDT,启用分页,设置IRQ等。

  3. 控制:如果您使用的是Cosmos之类的东西,则您没有完全的控制权。Cosmos是一个微内核,本质上是“引导”您的“内核”。如果您确实想执行,可以从头开始实现Cosmos之类的功能,但是这可能需要很长时间。

  4. 开销:与C甚至C ++相比,托管语言的开销很大。像Cosmos之类的东西需要执行很多事情才能甚至运行C#hello world内核。在C语言中,您准备就绪,无需进行实际设置。在C ++中,只有一些事情需要实现才能使用C ++的某些功能。

  5. 结构:在C / C ++中,有些结构是许多托管语言所不具备的,因此,您将需要实现某种具有某种结构的方法。例如,如果要加载IDT(中断描述符表),则可以在C / C ++中创建一个结构(具有打包的属性),并使用x86 ASM指令lidt加载它。用托管语言,这很难做...

从语法角度来看,托管语言更容易,但是,对于许多与OS相关的事情,很多时候并不十分适合。这并不意味着它们无法使用,但是,通常建议使用C / C ++之类的东西。


这个答案很弱。没有指针(不包括很小的基础),您无法完成哪些“相对容易的任务”?需要组装哪些零件?您缺乏什么控制?您关于开销的声明基于什么?为什么不能使用托管语言构建结构?
吉尔斯(Gilles)'所以

1.没有理由说托管语言不提供访问VGA内存的能力,只有映射/取消映射才必须作为原语(内存管理原语)提供。2.一些任务切换(例如保存寄存器)通常必须作为汇编代码来完成,但是它是非常本地化的,这并不是反对以托管语言拥有99%的OS。操纵MMU是一种内存管理原语。4. C也需要设置(设置堆栈和堆);托管语言需要更多的设置,但是在质量上没有区别。
吉尔斯(Gilles)'所以别再邪恶了'

@Gilles,问题是使用托管语言的发展挑战是什么。这些都是发展挑战,但是,您仍然可以成功克服这些挑战……
mmk 2014年

5

我听说它(由一位研究微内核技术的研究人员声称)对如何评估通过托管代码可扩展的系统的安全性知之甚少。

问题在于,可能导致安全漏洞的错误类型与安全研究人员所习惯的完全不同。在传统的微内核中,内核的所有驱动程序和其他子部分通过在不同的地址空间中运行而彼此隔离。在通过类型检查托管代码实现隔离的微内核中,避免了每次需要使用子服务时切换地址空间的巨大开销,但是折衷是现在评估隔离机制更加困难。

当且仅当类型检查器说驱动程序是安全的并且类型检查器没有错误时,用托管语言编写的内核的任何特定部分(例如设备驱动程序)才是安全的。因此,类型检查器是内核的一部分。在实践中,类型检查器似乎比传统的微内核大得多,并且更复杂。这意味着攻击面可能更大。

我不知道传统的微内核隔离技术还是基于托管代码的隔离技术是否确实可靠。这里有一个引导问题:在广泛使用托管代码隔离技术之前,我们不会知道它们不安全的频率。但是,如果不知道它们有多不安全,就很难在安全性至关重要的情况下部署它们。


这是一个很好的观点。
亚当·玛拉斯

我觉得这些论点很奇怪。(当然,我可能会因正式方法的背景而有偏见,但这并不是我的唯一见解。)与微内核加MMU相比,类型检查器没有那么复杂。例如,Coq的微内核大约是OCaml的14kLoC-比微内核大,但不是那么多,并且以比大多数内核(没有C或汇编程序)更不会出错的语言编写。类型检查器不容易受到竞争条件的影响,竞争条件是一种特别微妙的错误类。
吉尔斯(Gilles)'所以

托管代码为处理某些类型的错误提供了更好的机会。例如,信息流分析可以证明不存在副渠道(这可能需要大量工作,而且我不知道它在多大程度上完成了,但原则上是可行的),而硬件隔离只能让您进行测试您想到的旁通道。
吉尔斯(Gilles)'所以

实际上,已经在EAL5及更高版本中认证了多个提供隔离的虚拟机。如果您是欧洲人,这是您的钱包中最好有两个示例,因为它们用在智能卡(如信用卡)中:MULTOSJava Card开放平台。在安全评估社区中,我听到许多人怀疑MMU隔离可能超出EAL2。
吉尔斯(Gillles)“所以-别再邪恶了”
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.