一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情。
原文链接 xv6-riscv文档
1.5 真实世界
Unix标准文件描述符、管道和方便的shell操作语法的组合是编写通用可重用的程序的重大进步。这个想法促成了“软件工具”的未来,这是Unix的强大与流行的重要原因,而shell被称为第一个所谓的“脚本语言(script language)”。Unix系统调用接口依然在现代操作系统如BSD、Linux、macOS中存在。
Unix系统调用接口已经被POSIX(Portable Operating System Interface)标准标准化。xv6并不符合POSIX标准:它缺少很多系统调用(包括一些基础像lseek这样的系统调用);并且它提供的很多系统调用和标准不同。我们对于xv6的主要目标是简单清晰的:提供一个简单的Unix风格的系统调用接口。很多人使用一些更多的系统调用和一个简单的C库来拓展xv6使得它能够运行简单的Unix程序。然而现代的内核已经提供了比xv6更多的系统调用和更多样的内核服务。比如,它们支持网络、窗口系统、用户线程、设备驱动以及其他的特性。现代内核快速持续的发展,提供了很多超出POSIX的接口。
Unix通过一系列文件名和文件描述符接口统一了访问多种资源(文件、目录和设备)的方式。这种思想可以被拓展到更多种的资源上:一个好的例子是Plan 9(Dave Presotto, Rob Pike, Ken Thompson, and Howard Trickey. Plan 9, a distributed system. In In Proceedings of the Spring 1991 EurOpen Conference, pages 43–50, 1991),将“资源是文件”的概念应用到了网络、图像等方面。但是,大部分Unix衍生的操作系统都没有遵循这样的思路。
文件系统和文件描述符是强大的抽象,甚至它们是其他操作系统接口的模型。Multics,作为Unix的前一代操作系统,将文件存储抽象成内存的样子,产生了一种非常不同的接口风格。Multics接口设计的复杂性对于Unix的设计有直接的影响,使得Unix尝试去让事情变得更简单。
xv6并不提供用户的概念,或者将用户进行隔离,在Unix术语里,xv6的所有进程都以root身份运行。
本书解释了xv6是如何实现其Unix风格的接口的,但是背后的想法和概念并不止在Unix中得以应用。任何操作系统都需要多路复用进程到底层硬件上,同时将进程互相隔离,并且提供控制进程内部通信的机制。在学习完xv6之后,你将能够探索其他的更复杂的操作系统,并且在这些操作系统中看到xv6中也潜在的概念。
至此,第一部分已经完结。第一部分可以认为是总览,通过系统调用以及shell的角度略微的介绍了xv6,在后续将会有更多的更深入的介绍。
感谢阅读。