微内核学习记录

微内核设计的基本思想是简化内核功能,这个概念从提出开始就在不断地发展、完善进步。

第一代微内核的主要代表是Mach,一个由卡内基梅隆大学开发的用于支持操作系统研究的操作系统内核。该项目在1985年启动,并且在1994年因为mach3.0的显著失败而告终。

设计Mach的目的是替代传统的UNIX内核,所以他对UNIX是有兼容性的,实验证明Mach 2.5的效率最多比UNIX少25%,但是考虑到Mach带来的可靠性、可拓展性、安全性,这个效率损失尚可以接受。

第二代微内核的主要代表是L3和L4,对IPC部分进行了很彻底的精简,不使用内存传递消息,而使用寄存器传递消息,同时限制IPC每次传递的信息长度,采用同步IPC技术最终L4微内核的IPC速度经过测试要比Mach快20倍。

第三代微内核更重视安全问题,主要代表有:seL4、Fiasco.OC、NOVA等,其中seL4具备基于端点(enndpoint)的IPC机制,使用了能力空间的概念。seL4是世界上最小的内核之一。但是seL4的性能可以与当今性能最好的微内核相比。作为微内核,seL4为应用程序提供少量的服务,如创建和管理虚拟内存地址空间的抽象,线程和进程间通信IPC。这么少的服务靠8700行C代码搞定。seL4是高性能的L4微内核家族的新产物,它具有操作系统所必需的服务,如线程,IPC,虚拟内存,中断等。

对于三代不同内核的IPC机制。Mach提供的IPC形式包括消息、队列、信号量、通知、锁具、远程过程调用(RPC),Mach采用消息传递的方式实现对象与对象之间的通信。Mach对象不能直接调用另一个对象,只能传递消息,源对象发送一条消息,这条消息加入到目标对象的队列中等待处理。如果产生应答,则通过另一条消息传递回去,消息遵从先入先出方式。一个任务与另一个任务进行通信延用了Accent Kernel项目共享内存的方式,建立一个包含一组数据元素的数据结构,然后在有权限的窗口上执行操作,每一个端口都可以接收来自任意发送者的消息,但是每一个消息只能有一个接收者

L4中提供了两种IPC,同步和异步,易于进行关键路径( critical path )的优化,内核同步IPC是一种Blocking Message,数据直接从发送元拷贝到接收元 。数据的有效范围被限制,没有内核缓冲 。内核异步IPC是一种非阻塞的,位移操作,发送元不被阻塞,发送元不关注接收元状态,更多的被用于通知机制,而不是真正的IPC。

seL4提供了消息传递机制用于线程间的通信。在seL4中,IPC由称为 endpoints的小型内核对象促进,这些对象充当通用通信端口,端点对象上的调用用于发送和接收IPC消息。 端点由等待发送或等待接收消息的线程队列组成。seL4用TCB描述一个线程,每一个TCB对一个CSpace和VSpace(它们可与其他线程共享),一个TCB一般有一个IPC buffer。具有单个空间来存储回复功能。seL4采用256个优先级的抢占式轮转调度机制,当一个线程创建或修改了另一个线程,它只能将另一线程的优先级设为比它低或跟它一样,线程优先级用函数seL4 TCB Configure() 和 seL4 TCB SetPriority() 来设置。

https://en.wikipedia.org/wiki/Mach_(kernel)

https://en.wikipedia.org/wiki/L4_microkernel_family

https://github.com/seL4/sel4test

你可能感兴趣的:(course)