QNX微内核架构
设计原则
最小化内核功能
将操作系统功能移到用户态,成为Server“服务”。在用户模块之间,通过消息传递机制通信。
在宏内核中,文件系统和磁盘驱动都是运行在内核态,应用通过内核调用文件系统,文件系统直接通过函数调用磁盘驱动在磁盘创建文件,再依次返回。而在微内核中,文件系统和磁盘驱动都是运行在用户态的,这样,就需要从应用通过微内核调用文件系统,文件系统再通过微内核调用磁盘驱动,磁盘驱动在磁盘空间创建文件,再原路返回到应用。
什么是宏内核
整个操作系统分为内核和应用两层
- 内核:运行在特权级,集中控制所有的系统资源
- 应用:运行在非特权级,受内核管理,使用内核服务
优点
- 性能好、耦合性高。
- 宏内核拥有丰富的沉淀和积累。
缺点
- 安全性和可靠性问题:模块之间没有很强的隔离机制,某个模块驱动的crash,容易造成这个系统的crash
- 代码庞大,耦合性过高,维护困难
QNX微内核
QNX操作系统由微内核和系统服务组成,相互隔离,一个服务进程的崩溃不会影响到其他服务进程和内核的运行,微内核提供了一条软件总线(software bus)供各个软件模块的服务进程进行相互通信和协作,它的内核只提供最小化的基础/公共的系统服务,是一个高度模块化,高聚合低耦合的系统。
进程间的通信是它的主要功能,用户通过开发定制化的应用程序来增加系统功能,用户程序和系统程序通过进程间的通信(IPC)进行协作构成一个整体,操作系统通过路径管理器等系统服务实现用户程序的动态加入。
优点
- 微内核的弹性和可靠性更高,因为服务进程的相互隔离独立在kernel之外,一个进程挂掉之后,kernel并不会挂,其他进程也不会受影响。
- 灵活性和可移植性更强,比如有一个模块不想要了,或者加一个模块,都不用重新编译内核只需要不配置该服务即可
- 实时性强,这也是大内核不能做实时性内核的原因,大内核中临界资源太多,保护临界资源的过程中就需要关闭中断,关掉中断操作影响整个内核的调度。关中断时间越久,实时性越差。
缺点
- 系统开销大,因为通过进程通信的方式交换数据或者调用系统服务,而不是使用系统调用,造成额外的操作系统开销,同时降低性能。
- 生态欠缺,尚未形成像Linux一样具有广泛开发者的社区。