xv6-一个精巧操作系统(12)

175 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情


原文链接 xv6-riscv文档


2.3 内核组织

一个关键的问题是操作系统的什么部分应该在特权模式下运行。一种方案是整个操作系统都在内核之中,所以所有的系统调用的实现都在特权模式下进行,这种组织方式称为宏内核(monolithic kernel)。

在这种方式下整个操作系统都以拥有全部硬件特权级的方式运行。这种组织是方便的因为操作系统设计者不需要去决定操作系统的哪些部分不需要全部的硬件特权级。此外,这对操作系统的不同部分的交互是方便的。比如,操作系统也许需要可以被整个文件系统和虚拟存储系统共享的缓存。

宏内核组织方式的一个缺点是在操作系统不同模块之间的接口通常是复杂的,就像我们在下面中看到的一样,因此这很容易让内核的开发者犯错。在宏内核中,错误是致命的,因为特权模式下的任何一个错误都可能会导致整个内核崩溃。如果内核崩溃了,那么电脑就停止工作了,因此所有的应用也崩溃了。操作系统必须要重启。

为了减少内核中出现错误的风险,内核设计者需要减少操作系统中在特权模式下运行的代码量,并且将操作系统的部分内容运行在特权模式之下。这种内核模式被称为微内核(microkernel)。

图2.1展现了微内核的设计。在这个图中,文件系统运行在运行模式进程下。作为进程运行的操作系统服务被称为服务。为了运行应用程序和文件服务交互,内核提供了进程间通信机制来从一个用户进程到另一个用户进程来发送信息。例如,像shell这样的应用想要读取或者写文件,它发送给文件服务信息并且等到响应。

在微内核中,操作系统接口由一部分启动应用、发送信息、获取设备硬件等这样的底层函数组成。比如,Linux有一个宏内核,尽管一些像视窗这样的操作系统函数以用户服务的方式运行。Linux实现了OS集中的应用的高效变现,大部分是因为内核的子系统紧密的结合在一起。

像Minix、L4和QNX这样的操作系统是通过服务和微内核的形式组织的,并且在嵌入式设备中拥有了广泛的应用。L4的一个变种,seL4,是一个足够小的操作系统并且被证明了内存安全和其他的安全特性。

在操作系统开发者中对哪一种组织方式更好存在着很多的争论,但是并没有足够的论证结果。或者说,这取决于什么意味着更好:更好地性能、更小的代码体系、内核的可靠性、整个操作系统的可靠性等。

现在也有很多比哪个组织很好的问题更重要的需要考虑的问题。为了更好地性能,一些操作系统有微内核但是在内核空间运行用户级别服务。一些操作系统有宏内核因为这是他们开始时就是这样,因为一些比起重写存在的操作系统来适应微内核设计更重要的特征,这对他们变成完全的微内核组织有一点刺激。

从本书的视角来看,宏内核和微内核操作系统共用了一些关键的思想。他们实现系统调用,使用页表,处理中断,支持进程,使用锁来实现并发控制,实现了文件系统等。本书集中于这些关键的思想。

像大部分Unix操作系统一样,Xv6通过宏内核的方式来实现。因此,xv5内核接口和操作系统接口相关,内核实现了完整的操作系统。因为xv6并不提供很多服务,它的内核比很多微内核还要小,但是从概念上讲,xv6是宏内核的。


感谢阅读。