本系列文章为MIT6.S081的学习笔记,包含了参考手册、课程、实验三部分的内容,前面的系列文章链接如下
操作系统MIT6.S081:[xv6参考手册第1章]->操作系统接口
操作系统MIT6.S081:P1->Introduction and examples
操作系统MIT6.S081:Lab1->Unix utilities
前言
操作系统需要满足三大要求:多路复用、隔离、交互。
- 操作系统的一个关键要求是支持并发。例如,通过使用系统调用接口
fork,一个进程可以创建出一个新的子进程。 - 操作系统必须在进程之间分时共享计算机资源。例如,即使进程数多于CPU的核心数,操作系统也必须确保所有进程都有机会执行。
- 操作系统还必须使进程之间具有隔离性,也就是说如果一个进程发生错误或故障,它不应该影响其它不依赖于该错误进程的其它进程。
- 完全的隔离也不太合适,因为进程之间有时需要交互,例如管道。
前言
①本章概述了如何组织操作系统来实现这三个要求。事实证明有很多方法可以做到这一点,但本文重点关注宏内核这一主流设计(许多Unix操作系统都使用宏内核)。本章还对xv6的进程(xv6中的隔离单元)和xv6启动时第一个进程的创建过程进行了概述。
②xv6运行在一颗多核RISC-V微处理器上,它的许多低级功能(如进程实现)是特定于RISC-V的。RISC-V是64位CPU,xv6是用LP64 C写的,这意味着C语言中的long(L)和pointer§是64位,而int是32位。本书假设读者已经对某些架构进行了一些机器级编程,并将在这些架构出现时介绍RISC-V特定的想法。
③计算机中的CPU被其所支持的硬件所包围,其中大部分以I/O接口的形式存在。xv6是以qemu的-machine virt选项模拟的硬件上编写的。这包括RAM、包含引导代码的 ROM、与用户键盘/屏幕的串行连接以及用于存储的磁盘。
一、抽象物理资源
应用程序直接与硬件交互
遇到操作系统时,人们可能会问的第一个问题是为什么需要它?也就是说,可以将图1.2中的系统调用实现为一个库,将应用程序与之链接。在这种设计中,每个应用程序甚至可以有自己的库来满足其需求。应用程序可以直接与硬件资源交互,并以最优的方式使用这些资源(例如实现高性能或可预测的性能)。一些嵌入式设备或实时系统的操作系统就是以这种方式组织的。
这种方法的缺点: 如果有多个应用程序在运行,则应用程序必须表现良好。例如,每个应用程序必须定期释放对CPU的占用,以便其他应用程序可以运行。如果所有应用程序相互信任并且没有错误,这种协作分时方案可能是可行的。但是一般来说,应用程序之间不信任彼此并且容易存在bug,因此需要为这些应用程序提供强隔离性。
抽象硬件资源
①为了实现强隔离、禁止应用程序直接访问敏感的硬件资源,将硬件资源抽象为服务是很有帮助的。例如,Unix的应用程序仅通过文件系统的
open、read、write和close系统调用与存储硬件交互,而不是让应用程序直接读写磁盘。这为应用程序提供了便利的路径名,并允许操作系统(作为接口的实现者)管理磁盘。即使隔离性不是问题,有意交互的程序(或只是希望彼此远离)也可能会发现使用文件系统比直接使用磁盘更方便和抽象。
②同样,Unix透明地在进程之间切换CPU,并根据需要来保存和恢复寄存器状态,因此应用程序不必知道时间共享。即使某些应用程序处于无限循环中,这种透明性也允许操作系统共享CPU。
③另一个例子,Unix进程使用exec来构建它们的内存图像,而不是直接与物理内存交互。这允许操作系统决定进程在内存中存放的位置。如果内存资紧张,操作系统甚至可能将一些进程的数据存储在磁盘上。exec还为用户提供了便利的文件系统来存储可执行程序图像。
④Unix进程之间的交互形式大部分都是通过文件描述符实现的。文件描述符不仅抽象了许多细节(例如,管道或文件中的数据存储在哪里),还简化了交互的方式。例如,如果管道中的一个应用程序出错,内核会为管道中的下一个进程生成文件结束信号。
最后: 图1.2中的系统调用接口经过精心设计,既方便了程序员,又提供了强隔离性。Unix接口不是抽象资源的唯一方法,但它已被证明是一种非常好的方法。
二、用户模式、管理员模式、系统调用
实现强隔离需要应用程序和操作系统之间有硬边界。如果一个应用程序出错,我们不希望操作系统或其他应用程序跟着出错。相反,操作系统应该能够清理出错的应用程序并继续运行其它的应用程序。为了实现强隔离,操作系统必须让应用程序不能修改(甚至读取)操作系统的数据结构和指令,并且应用程序不能访问其他进程的内存。
CPU为强隔离提供硬件支持。例如,RISC-V的CPU能以三种模式来执行指令:机器模式、管理员模式、用户模式。
-
在机器模式下执行的指令具有所有权限,CPU以机器模式启动。机器模式主要用于配置计算机,xv6在机器模式下执行一些代码后就切换到管理员模

本文是MIT6.S081操作系统课程的学习笔记,主要探讨了操作系统如何通过多路复用、隔离和交互来满足需求。文章介绍了宏内核设计,强调了用户模式、管理员模式和系统调用在实现进程隔离中的作用。xv6操作系统采用宏内核结构,通过进程抽象实现资源隔离,并详细描述了xv6的启动过程和进程管理。

最低0.47元/天 解锁文章
2488

被折叠的 条评论
为什么被折叠?



