宏内核Linux: 用户空间和内核空间都是由内存管理单元统一管理的,用户空间的程序不能访问内核空间。即内存管理单元MMU管:用户空间+内核空间
优点:性能好,因为各个模块之间互相关联,且一起被放在内核中
缺点:因为各个模块机互相关联的调用关系,出问题会互相影响。
看内核层里面,这些模块都是链接在一起的,没有层次关系。他们的交互是靠方法调用
调用流程:
微内核Win:
内核只提供核心功能-- 任务调度,中断等
其他模块如进程,文件系统,存储不放入内核,而是变成了一个用户态的服务进程,在用户空间作为一种特殊的服务进程存在。
他的进程间通讯依靠----消息。用户态如果要这些相关服务,就会给内核发消息 ,内核再把这条小心转发给用户态里面的,原本是内核里的这些特殊服务进程,由他们来最终完成相关服务。因此,内核在这里就是个转发的作用,然后为了精简把这些模块丢出去了。
工作流程上:
总的来说,对比宏内核中,微内核结构主要是多了接收和发送消息的这一过程,实际上也是系统调用的另一种实现形式,只是并不是直接调用内存管理的接口函数。因为在微内核里面整个内存管理模块都被丢出去到用户层变成了服务,不再是系统内核级别的系统调用了,因此也无法被称为“内核接口”。
具体流程就是:
应用程序会先发送内存分配的申请消息,消息本身是用内核提供的接口函数给他用户应用程序的;
消息给了后,CPU切换到内核态,开始跑这个消息对应的函数。
跑这个函数也就是会:
1.先去停止当前正在运行的进程
2.把消息转发给用户层的内存管理模块服务
内存管理服务收到信息,就开始工作,割一块内存分出来,然后把这块内存首地址发给内核,也是通过消息;内核再把收到的转发给应用程序,当然还是通过消息。
优点:降低了耦合性。