宏内核
比如我们常见的linux系统就是宏内核,kernel空间包含了包括网络子系统,文件系统等,子系统下面有驱动层。
举个例子:如果在宏内核想要read一个file,就需要app系统调用内核中的Sub system(File System),然后内核把copy到的数据传到app端供客户使用。
微内核
QNX就是微内核(完全基于抢占式内核,优先级越高,越nb)
微内核中kernel并不包含Sub System子系统
也举个同样的例子:如果在微内核中想要read一个file,app会先系统调用kernel,同时File System在微内核中变成了一个服务,抽离在kernel之外,叫File Server。File Server也会系统调用kernel。然后把数据copy到内核中。内核再把数据copy到app 从而完成file的read操作。
可以看出微内核的系统开销变大了
需要经过更多的系统调用与更多的拷贝!
优缺点
上面讲述的是是微内核的缺点,系统开销大
下面讲述一下微内核的优点
1 显而易见 微内核的弹性和可靠性会更强一些
原因是什么 同样举例说明
当微内核的一个进程挂掉之后,kernel并不会挂,其他进程也不会受影响,影响面很小。因为kernel相当于独立于进程之外的一个模块。
而在宏内核的如果某个子系统挂掉了,kernel也会挂掉
2 灵活性更强
比如有一个模块不想要了,或者加一个模块,都不用重新编译内核
只需要不配置该服务即可!
3 实时性强
这也是大内核不能做实时性内核的原因,大内核中临界资源太多,保护临界资源的过程中就需要关闭中断,关掉中断操作影响整个内核的调度。关中断时间越久,实时性越差。
所以QNX本身内核很小,有利于中断的关闭,实时性非常好。
补充一点缺点:微内核是闭源的!!!!
但是他们也有闭源的资本,因为用它会很方便的配置linux嵌入式系统。