EROS快速能力系统论文总结

EROS:a fast capability system

摘要

1.EROS是一种基于能力的操作系统,用于使用单级存储模型的商品处理器。(啥叫单级存储模型?)
2.单级存储的持久性对应用程序是透明的。
3.支持透明持久性基于能力的体系结构的性能后果通常被认为是负面的。
4.EROS基本操作(ipc)与传统系统成本基本相同。
5.EROS系统通过将精心选择的抽象对象与这些对象的缓存技术相耦合来实现其性能。
6.对象(进程、节点和页面)得到了传统硬件的良好支持,减少了功能开销。
7.这些对象的软件管理的缓存技术降低了持久性的成本。
8.组成受保护的子系统可能比通常认为的成本更低。(受保护的子系统是什么?)

1.介绍

EROS是一种基于功能的微内核,具有单级存储模型。单级存储的持久性对应用程序是透明的。

单级存储(SLS)或单级内存是一个计算机存储术语,具有两个含义。这两种含义是相关的,因为两者的内存页面都可以位于主存储器(RAM)或辅助存储器(磁盘)中。但是,页面的当前实际物理位置对流程并不重要。
它最初的意思是现在通常称为虚拟内存的虚拟内存
现在,它通常是指计算系统的组织,其中没有文件,只有持久性对象(有时称为段),这些对象被映射到进程的地址空间(完全由映射对象的集合组成)。计算机的整个存储空间被认为是地址(段和段内的地址)的二维平面。

存储分配、调度和故障处理策略从内核导出,以允许多个操作环境和应用程序自定义的资源管理。

为了简化安全保证,所有直接访问硬件或能够直接转换系统安全状态的代码都收集在内核中。

因此,底层设备驱动程序和单层存储是在内核中实现的。

1.1 EROS的历史

此处略

1.2 组件和功能

大规模软件体系结构正在发展(例如CORBA),在这种体系结构中,应用程序可以被视为与功能相关的组件。

这表明能力系统的研究越来越重要,因为通过设计,能力系统为受保护的子系统非层次保护域类型化对象提供支持。

如果将对象分为不同的受保护子系统以提供故障隔离自主访问控制,则可以提高应用程序和系统级的可靠性和安全性。
但是基于语言的方法来实施受保护的子系统已经被证明很难实现,基于操作系统的解决方案(可能通过语言级别的机制进行增强)更可取。
然而,人们普遍认为透明持久性和基于能力的保护具有令人望而却步的性能。

1.3 EROS和在这篇论文展示的

本文介绍了EROS体系结构,并描述了一种针对商品处理器系列的这种体系结构的有效简化方法:英特尔奔腾。
我们从结构和复杂性两方面讨论了持久性对系统设计的影响。EROS的设计和实现应用了微内核的体系结构思想,以在安全、基于功能和透明持久的系统中获得性能。
我们使用微基准来评估系统的性能。

结果表明,功能是商品硬件上高性能、高安全系统的合理基础。

2.功能

能力是由一个对象标识符和该对象上的一组授权操作(接口)组成的不可伪造的一对。例如,UNIX文件描述符就是功能。

在能力系统中,每个进程都拥有能力,并且可以执行由其能力授权的操作。安全有三个保障:

  1. 功能是不可伪造和篡改证明
  2. 进程只能通过使用授权的接口获得功能
  3. 功能只提供给经过授权以容纳它们的进程

保护域是子系统可访问的一组功能。基于功能的系统设计的一个基本思想是,应用程序和操作系统都应该被划分为清晰分离的组件,每个组件都驻留在自己的保护域中。

受外部引用监视器的约束(图1),功能可以从一个保护域转移到另一个保护域,也可以写入到持久存储中的对象中。因此,除了数据之外,还可以保存访问权限,以便跨一个或多个程序的实例化使用。

2.1 持久性的含义

当允许持久性对象包含功能时,它们就具有文件元数据的某些特征。(文件元数据是啥?)

文件的元数据是指文件的属性、大小、创建时间、访问时间、属主属组等信息。

在传统的文件系统中,文件的正确稳定取决于数据和元数据写入的顺序:数据必须在引用它的元数据之前写入。
同样,能力系统中的对象必须在引用这些对象的能力之前写入。

不像文件系统,然而,能力系统中的更新依赖关系图是无约束的(并且可能是循环的)。

确保存储中的一致性系统映像的合理机制包括应用程序管理的事务或某种形式的机器状态的定期一致性快照。(完全读不懂)
出于简单性和正确性的原因,EROS使用了与Landau描述的KeyKOS机制类似的周期性检查点。

2.2 设计挑战

构建能力系统有五个挑战:
首先,除非在执行受保护的控制传输时非常小心,否则跨保护域边界传输控制是昂贵的,默认情况下,不应该跨这样的边界共享访问。在传统的体系结构中,这需要通过硬件标记、缓存刷新或其他硬件强制隔离手段使前面的上下文(TLB和缓存内容)不可达。已经制定了执行高效上下文切换的策略[30,32],我们将这些思想应用于跨保护域,并在[44]中给出了结果。

第二,我们希望所有系统资源都有一个统一的保护机制。选择原始的受保护对象和访问权限,以最小的开销直接减少到硬件是至关重要的,如果选择了太大的保护单元(例如,内存区域),如Mach[1],则需要软件将这种抽象转化为硬件可以实现的东西。如果使用的保护单元(如字)太小,则不能直接使用硬件保护机制,必须通过软件仿真实现保护

第三,必须确定系统服务的集合,这些服务将这些原始对象高效、安全地组成更高级别的功能。

第四,系统必须确保在系统启动时实现实体和访问关系的正确初始范围。特别是,这种安排的正确性必须保持在稳定的储存边界。许多功能系统使用受访问控制列表保护的传统文件系统。在这样做时,他们放弃了能力的安全优势。

最后,能力系统在可追踪性和选择性撤销方面存在困难,确定谁拥有什么访问权限并删除特定用户对对象的访问权限。为了解决这个问题,在[4]和[25]中提出了同时使用能力和访问控制列表的混合设计。在像EROS这样的纯能力系统中,这个问题必须由参考监视器来解决。

2.3 强制访问控制

EROS提供了一种取消对对象访问的原始机制。对象及其功能都有一个版本号。如果版本号不匹配,则该功能无效,不传递任何权限。
强制访问控制(MAC)策略需要更精细的机制:提供选择性撤销和访问可跟踪性的一种。EROS构造器(第5.3节)强制执行一个自由裁量策略[46],类似于Lampson的限制策略[27]。该策略允许在用户级构建安全引用监视器,就像在KeySafe[38]中所做的那样。

KeySafe设计将安全系统划分为受保护的隔间(图1)。这些隔间之间的通信由引用监视器进行中介,该监视器在所有跨越隔间边界的功能前面插入透明转发对象。要取消隔间的访问权限,引用监视器将取消转发对象。
KeySafe设计的一个特别吸引人的方面是它允许直接修改强制访问策略。适当的强制访问控制策略依赖于所控制的对象,因此依赖于应用程序。随着系统的发展,KeySafe设计有助于修改强制访问控制。

3.EROS内核

EROS体系结构分为一个内核,其中包含少量的基本功能类型:数量、节点、数据页、功能页、进程、入口和恢复功能,以及一些其他内核服务。本节对这些问题进行了描述。该体系结构还包括由非特权应用程序实现的系统服务集合。这些服务提供更高级别的抽象,如文件、目录和内存对象。

内核通过受功能保护的抽象来相当直接地虚拟化底层硬件。数据和功能都存储在页面中,其大小由底层硬件决定。功能也存储在节点中。节点拥有32种功能,提供与传统系统中的元数据相当的功能。应用程序可见的所有状态都存储在页面和节点中。

内核通过标记在数据和能力之间实施分区。数据只能读/写到数据页,功能只能读/写到功能页。功能页的映射方式决不会允许用户模式程序访问。在管理软件中模拟能力负载和存储指令,并检查每页类型标签。

3.1 地址转换

像其他最近的微内核一样,EROS将地址空间视为一组形式的映射。

其中handler是流程的入口功能(第3.2节)。当发生寻址异常时,错误处理程序可以改变地址空间的结构并重新启动进程,或者将错误传递给进程错误处理程序以进行进一步处理。

EROS内核使用节点以独立于机器的方式捕获地址空间映射。1地址空间是通过构建节点树形成的,节点树的叶子是数据页或功能页。每个节点包含32个功能,可以指向节点或页面(图2)。节点功能对其命名的树的高度进行编码,实现类似于MC68851[36]的短路遍历,避免了对高大转换树的需要。
在这里插入图片描述

每个EROS进程都包含一个功能,它可以命名其地址空间树的根。此树描述的映射按需转换为底层硬件所需的表示。当发生页面错误时,EROS内核首先尝试遍历地址空间树以建立有效的映射,执行任何必要的对象错误以从磁盘加载页面和节点。、
如果找到有效的映射关系,则在硬件映射表中安装该映射关系,并重启操作。否则,错误将通过对地址空间(如果存在)或进程(否则存在)指定的用户级错误处理程序的upcall反映出来。
使用节点树而不是页表来描述地址空间映射,可以对错误处理程序进行相对细粒度的指定(图2)。有关故障处理程序的信息存储在基于节点的映射树中,但不会被硬件映射表直接捕获

3.2 进程

EROS进程状态包括底层处理器的用户模式寄存器,包括处理器状态字的用户可访问部分。此外,每个进程都有一个由内核实现的功能寄存器集。能力寄存器包含流程可以直接调用的功能。

内核通过两种类型的功能将进程抽象导出到应用程序代码:进程功能(提供操作以操纵进程本身)和入口功能(允许持有者调用特定进程中程序提供的服务)。

由于EROS是一个持久性系统,所有进程状态最终必须驻留在可以存储到磁盘的结构中。在EROS中,这些结构是页面和节点。使用节点记录进程状态(图3)。数据寄存器值使用数字功能存储到节点,该功能命名无符号值并实现读取操作。
EROS对进程和线程没有区别。所有进程都是单线程的。两个进程可以共享一个地址空间;这些流程中的每一个都可以拥有不同的功能。多线程服务是通过有几个共享公共地址空间的进程来实现的。这些进程中的大多数都充当工作线程。专有进程将外部可见的入口点发布到服务。该进程接受请求并将其转发给工作进程。

在EROS中,每个进程都是一个保护域。应用程序设计为多个协作进程。
应用程序透明持久性确保在系统重新启动时进程之间保持一致性。因为这些进程的安排和一致性不会在系统崩溃时丢失,所以每次访问应用程序时都不需要重新构建相关的进程间关系。

3.3 能力调用

EROS中的所有资源访问最终都是通过功能调用来执行的,如果由该功能授权,则每次调用都会导致命名对象执行由调用程序指定的对象定义的操作。甚至由加载和存储指令执行的内存访问也可以建模为高效缓存的功能调用。因此,内存引用的语义包含在能力语义中。
功能用于调用内核实现的服务(页面、节点、进程、数量)和由用户进程实现的服务或对象。进程实现的服务是使用“重铺和等待”循环来实现的;如果在调用时服务不可用,则调用者会阻塞,直到服务变得可用为止。

能力调用传输少量的数据寄存器、连续的数据字符串和少量的能力寄存器。如果需要,发送方可以使一个称为resume capability的可分辨条目功能替换最后一个capability参数。恢复功能使收件人能够回复发件人。

当任何副本被调用时,恢复功能的所有副本都会被有效地使用,从而确保“最多一次”的回复。将调用者连续性表示为一种功能而不是使用隐式堆栈允许非层次化进程间控制流,这对于线程调度非常有用。区分启动和恢复功能(以及相关的进程状态)还允许应用程序通过调用现有的恢复功能并通过每个进程间控制传输生成新的恢复功能,围绕扩展的协同例程交互构建隐式互斥。这种机制有时用于确保扩展的字符串传输不会被其他调用中断。

该体系结构的一个不寻常的方面是,功能调用是kernel实现的唯一“系统调用”。因为没有其他系统调用,所以进程执行的所有操作都会隐式地进行访问检查。

通过调用内核实现的对象的功能来访问它们。所有的功能都在接口陷阱中接受相同的参数。因此,实现中介或请求日志记录的流程可以透明地插入到大多数对象的前面。特别地,强制访问控制可以通过使用内核实现的indirector对象来实现,也可以通过透明的插入过滤进程来模拟,就像KeySafe一样

3.4 限制访问传播

能力系统允许通过授权渠道转移能力。因此,安全参数必须同时考虑信息的传播和访问权的传播。功能访问权限可能非常强大;对节点的只读功能允许提取驻留在该节点中的读写功能,从而允许修改其他数据结构。
EROS体系结构使用两种机制来解决这个问题:弱访问权和访问间接。

弱访问与只读访问类似,只是通过弱功能获取的功能在权限上被削弱,从而成为只读和弱访问。最终的效果是确保了可传递的只读访问。例如,第5节中描述的默认“写时拷贝”寻呼机实现出于完整性的考虑仍保留在“可信计算库”中,但无法泄漏信息,因为它只对原始内存对象具有较弱的功能。EROS弱访问权限是KeyKOS感知能力的概括;感知能力是只读的,弱能力不需要。通过弱功能进行写操作会存储存储的功能的减少(即只读和弱)形式。

访问间接寻址可用于实现选择性吊销。当引用监控器授予敏感功能时,监控器可以透明地转发对这些功能的请求,或者提供一个间接对象来代替实际功能。稍后可以通过销毁间接对象来撤消访问。

3.5 检查点和持久性

EROS操作系统的正确性依赖于这样一个事实:只要初始状态正确,内核执行的所有操作都会产生正确的系统状态。操作的合法性取决于系统的状态,而系统的状态又取决于以前的操作。这意味着必须维持操作的因果顺序。

因果排序的挑战在于确保在发生意外停机(即崩溃)时恢复正确的系统状态。为了实现这一点,内核必须定期安排在没有应用程序支持的情况下保存一致的映像,并且不会过度影响应用程序的性能。困难在于确保写入磁盘的映像是正确的;一旦提交,错误的检查点就无法撤消。EROS实现通过从KeyKOS演化而来的透明持久机制,保证磁盘上存在正确的状态

3.5.1 快照

与KeyKOS一样,EROS实现对整个机器进行周期性快照。这种状态是异步写入磁盘。重新启动时,系统将从先前保存的系统映像中恢复。因为检查点图像是全局一致的,所以保持了因果顺序。
快照机制引入了最小的执行中断。当所有进程在快照过程中暂停时,这个阶段执行一致性检查,并标记所有对象在写入时复制(甚至到内核)。快照过程要小心,以确保功能保持最佳状态(第4.1节)。内存映射必须标记为只读,以支持内核写时拷贝实现,但映射结构不会作为检查点的副作用而被拆除。

EROS(和KeyKOS)的快照机制与L3[31]或Fluke[52]的快照机制之间的一个重要区别是,EROS快照机制在拍摄快照之前执行一致性检查。对关键内核数据结构进行检查,以确保其指针指向适当类型的对象,对对象缓存中的只读对象进行校验和,以验证它们没有更改,每个修改的对象都必须在内核检查点目录中有一个条目,并检查进程槽中的功能类型。如果其中任何一个检查失败,系统将重新启动而不提交当前检查点

一旦承诺,一个不一致的检查站将永远存在。除了在调试稳定代码本身时发生的错误之外,KeyKOS和EROS在运行的七个日历年中都没有被观察到编写不一致的检查点。EROS中的检查过程在实现过程中发现了无数的错误,包括一些模糊的边界条件和一些散乱的指针错误。这证明了EROS现在作为低优先级的后台任务连续执行这些检查是非常有用的。

在当前的实现中,快照阶段的持续时间是物理内存大小的函数。在物理内存为256兆字节的系统上,快照的执行时间不到50毫秒。这一次包括执行上述系统健全性检查程序。更增量的设计将使用写时拷贝技术来实现快照本身。这将使快照阶段仅仅是进程表大小的函数(第4.3节),这将把同步阶段减少到大约一毫秒。

3.5.2 稳定化

捕获快照后,状态将异步写入磁盘。为了避免检查点引起的延迟,稳定必须在下一个检查点之前完成,通常每隔5分钟设置一次。当应用程序执行异常大量的对象突变时,为了防止溢出,当检查点总面积的65%分配给当前检查点时,也会强制设置检查点。KeyKOS设计的经验[28]表明,这种设计可以根据可用I/O通道的带宽扩展内存容量。

3.5.3 引导和安装

检查点机制用于启动和安装。在EROS中,使用交叉编译环境编译初始系统磁盘映像。图像生成工具通过功能链接处理,就像传统的链接编辑器在构建二进制图像时执行重定位一样。生成的检查点区域包含在系统恢复时应该(重新)启动的正在运行的进程的列表

虽然安装工具尚未实现,但内置的检查点和复制机制使这一点变得简单明了。安装盘上的程序在硬盘上格式化与软盘上相应的新范围,并将其装入。因为它们与现有的范围(软盘上的那些范围)匹配,但有旧的序列号,内核通过顺序地将新双工范围中的所有对象标记为“脏”并允许复制逻辑将它们重写为两个复制对象来恢复“过时”的范围。5安装工具只需等待镜像恢复完成并强制设置检查点。最终结果是硬盘上的映像现在是一个有效的可引导映像。这种机制比KeyKOS安装中使用的“大爆炸”要简单得多

3.5.4 支持设计规则

两个内核设计规则简化了检查点:

  • 所有状态都驻留在页和节点中
  • 所有内核操作都是原子的

大部分EROS设计都基于第一个限制,这限制了必须由持久化子系统管理的磁盘对象类型的数量。除了暂停进程列表之外,当前实现实际上满足了这个目标;EROS kernel不拥有任何状态。在此级别限制数据类型的数量还可以减少实现必须管理的存储分配器的数量。

原子性规则是页面和节点需求的必然结果。当内核调用必须暂停时(如等待页面I/O时),一个小的内核内“线程”结构(包含暂停进程的功能)将在内核内暂停队列中排队。
调整调用程序的程序计数器以在被唤醒时重试调用。该设计类似于Fluke[12]和MIT ITS系统[10,3],简化了检查点,检查点内核状态需要检查点机制进行特殊处理。在当前的实现中,必须被检查点的唯一内核状态是stall队列结构的表。暂停队列结构也是应用程序操作可能耗尽的唯一内核资源

虽然目前还没有实现这种耗尽,但这种耗尽可以由可信的解充血应用程序进行管理。当暂停队列结构被超订阅时,内核将为最低优先级的进程构造错误功能(用户级错误处理程序使用的一种专门的恢复功能,用于重新启动错误进程而不改变其状态),并将这些错误功能传递给解充塞应用程序以供以后恢复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值