三代微内核操作系统IPC机制比较

Mach、L4、seL4三代微内核操作系统IPC机制比较

  • 微内核操作系统发展历史
    • 第一代微内核操作系统
    • 第二代微内核操作系统
    • 第三代微内核操作系统
    • 总结
  • 三代微内核操作系统IPC机制比较
    • Mach IPC机制
      • 消息队列
      • 信号量
      • 通知
      • 远程过程调用(RPC)对象
    • L4 IPC机制
    • seL4 IPC机制

微内核操作系统发展历史

操作系统微内核技术起始于20世纪80年代,起初被设计用来解决传统一体化操作系统在可维护性、扩展性、可靠性和稳定性方面的诸多问题。 但是伴随着微内核思想的进一步发展,最终形成一整套操作系统设计的核心理念,即操作系统微内核仅提供最简单、基本的服务,如通信功能,而操作系统的普通服务,如文件管理、设备管理、网络管理等则在微内核以外提供。

第一代微内核操作系统

以Mach为代表,Mach微内核操作系统就是试图从架构上重构unix系统但是仍然能够维持原有系统功能的一次尝试。为此,Mach微内核发展出了 一系列概念用于支撑该项目,其中较突出的有核外页管理器和用户空间设备驱动。

第二代微内核操作系统

以L4为代表,第一代微内核从概念上验证了 微内核技术的可行性,但是因为性能上的原因,并未在产业界引起大规模推广,相关研究不断出现。鉴于第一代微内核在性能上的劣势,德国计算机科学家JochenLiedtke开始设计高性能的第二代微内核L4。相对于第一代微内核,第二代微内核不再是传统unix操作系统的简单重构,而是一种全新的设计。 L4微内核高性能的关键就是使用了 同步IPC技术, 并且使用寄存器传递消息, 而不是内存拷贝。

第三代微内核操作系统

以seL4为代表,第三代微内核即引入了 capability机制加强微内核的安性。任何操作系统内核对象,比如线程、中断、 内存等, 都不能直接进行操作, 而是通过一种类似对象引用的机制即capability机制进行调用。

总结

微内核技术从第一代已经发展到了 第三代,可以看出,第一代微内核停留在概念层面,试图从概念上印证微内核技术的可行性;第二代微内核更关心性能,在第一代微内核的基础上印证微内核技术的可用性;第三代微内核关注安全性。

三代微内核操作系统IPC机制比较

Mach IPC机制

Mach支持C/S系统结构,其中客户端以向通信通道向服务器端发送请求的方式来获取服务。这些通信通道在Mach中的端点称为端口,而端口权限表示使用该通道的权限。Mach提供的IPC形式包括以下几种:
1、消息队列
2、信号量
3、通知
4、锁设置
5、远程过程调用
端口表示的IPC对象的类型决定了该端口上允许的操作,以及如何进行数据传输。

消息队列

最初,Mach中进程间通信的唯一样式是 消息队列。只有一个任务可以持有表示消息队列的端口的接收权。允许这一任务从端口队列接收(读取)消息。多个任务可以拥有对端口的权限,从而允许它们将消息发送(写入)到队列中。
一个任务与另一个任务进行通信,方法是建立一个包含一组数据元素的数据结构,然后在为其持有发送权限的端口上执行消息发送操作。在之后的某个时间,具有对该端口的接收权限的任务将执行消息接收操作。
一条消息可能包含以下一些或全部:纯数据、内存范围的副本、端口权限、内核属性例如发送方的安全令牌。
消息传输是异步操作。消息被逻辑的通过写操作复制到接收任务中。接收任务中的多个线程可以尝试从给定端口接收消息,但是只有一个线程可以接收任何给定消息。

信号量

信号量IPC对象支持等待,发布和发布所有操作。这些都将计算信号量,如果该信号量的等待队列中当前没有正在等待的线程,则在此发布中保存(已计算的信号量)。全部发布操作将唤醒所有当前正在等待的线程。

通知

像信号量一样,通知对象也支持发布和等待操作,但是增加了一个状态字段。状态是在创建通知对象时定义的固定大小,固定格式的字段。每个发布操作都会更新状态字段;每个发布操作都会重写一个状态。

锁是一个提供对关键部分的互斥访问的对象。锁的主要接口是面向事务的。当线程在事务中时,持有锁。从事务中返回时,释放该锁。

远程过程调用(RPC)对象

顾名思义,RPC对象旨在促进和优化远程过程调用,RPC对象的主要接口是面向事务的,创建RPC对象时,将定义一组参数块格式。当客户端进行RPC(在对象上发送)时,它将创建一种预定义格式的消息并在对象上排队,然后最终传递给服务器(接收者)。当服务器从事务中返回时,回复将返回给发送方。Mach尝试通过使用客户端资源执行服务器来优化事务。这就是所谓的线程迁移。

L4 IPC机制

L4内核支持三种抽象概念:地址空间,线程,和IPC。他只提供7 个系统调用,只有12K 字节代码。下面我们来看L4时如何实现高性能 IPC 的。进程间通信的一个基本问题是数据需要跨越不同的地址空间。大多数操作系统的解决办法是用两次数据拷贝:用户地址空间A -> 内核地址空间 -> 用户地址空间 B。L4的解决办法是通过暂时地址映射:内核把数据的目的地址暂时映射到一个通讯窗口(Communication Window),这一窗口存在于内核地址空间。然后内核把数据从用户A 地址空间拷贝到通讯窗口供用户B 使用。L4还采用了许多新颖的技术来提高内核性能,例如,直接地址转换,懒惰调度(Lazy Scheduling ),使用寄存器传送短消息,减少缓存及TLB Miss等等。

seL4 IPC机制

seL4是L4微内核家族中最先进的成员,值得注意的是其全面的形式验证,这使它有别于其他任何操作系统。seL4达成这个目标同时不会影响性能。 sel4提供了基于endpoints实现的进程间通信,用于进程之间发送少量的信息和cap。ipc是通过内核endpoints实现的,相应的有endpoints的结构体和endpoints cap的结构体。endpoints类似notification都有一个队列保存着当前挂载的队列,但endpoints同notification不同,notification是用来发送通知,并没有携带信息和cap。

你可能感兴趣的:(笔记)