什么是微内核和宏内核?

如题所述

微内核是将服务转移到进程上的一种内核模式。宏内核是一种传统的内核结构,它将进程管理,内存管理等各项服务功能都放到内核中去,通常用在通用式的内核上,如unix,linux等。

两个系统的内核是通过进程的创建FORK的实现来比较,因为进程的创建涉及到系统调用,内存管理,文件管理等系统的主要方面。因此通过比较FORK的实现可以大致看到内核的差别。

微内核的代表:Minix,在Minix中,操作系统的内核,内存管理,系统管理都有自己的进程表,每个部分的表包含了自己需要的域。表象是精确对应的,为了保持同步,在进程创建或结束时,这三个部分都要更新各自的表。

结构

微内核是内核的一种精简形式。将通常与内核集成在一起的系统服务层被分离出来,变成可以根据需求加入的选件,这样就可提供更好的可扩展性和更加有效的应用环境。使用微内核设计,对系统进行升级,只要用新模块替换旧模块,不需要改变整个操作系统。

可以用商业对比来解释微内核的模块概念。考虑一个过度忙碌的商务经理。通过将工作分给其他人,这位经理可以将他的能力更有效地用于重要的商务工作中去,并集中于其他一些任务,例如开辟新的商务分支等。

以上内容参考:百度百科-微内核

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-21
微内核与宏内核比较

内核按照体系结构分为两类:微内核(microkernel)与宏内核(macrokernel). 微内核的系统有WindowNT,Minix,Mach,etc.宏内核的系统有Unix,Linux,etc.通过比较Minix和Linux来比较微内核和宏内核是很有意思的,因为当年两个系统的创始人对两种内核的优劣有过争论.

两个系统的内核是通过进程的创建FORK的实现来比较,因为进程的创建涉及到系统调用,内存管理,文件管理等系统的主要方面.因此通过比较FORK的实现可以大致看到内核的差别.

微内核的代表:Minix

在Minix中,操作系统的内核,内存管理,系统管理都有自己的进程表,每个部分的表包含了自己需要的域。表象是精确对应的,为了保持同步,在进程创建或结束时,这三个部分都要更新各自的表。

由内存管理器协调。

系统启动后,kernel,mm,fs系统进程在各自的空间运行main()函数循环等待消息

While(TRUE)

{…

receive(ANY,&mm_in);

…}

当一个FORK传给mm’main(),main()调用do_fork(),do_fork()函数把父进程的data segment和stack segment创造了一个精确副本给子进程,并把父进程的text segment 与子进程共享,然后在mm的进程表mproc[]中添加新进程,并设置各属性。添加完后发送消息给kernel(sys_fork(…))和 fs(tell_fs(…)).,kernel中的函数sys_task()接收到系统信息,调用do_fork(message * m_ptr),copy parent’proc struct to child.并设置进程在内核进程表中的属性。tell_fs()是内存管理器与文件系统之间的接口,tell_fs(…)调用 _taskcall(…),文件管理器接收到FORK系统消息,调用do_fork()函数,copy parent’fproc struct to child.并设置进程在文件进程表中的属性。这样整个进程的属性就设置完成.

在Minix创建新进程的过程中,可以看到一个很大特点,就是整个系统按功能分成几个部分,各模块之间利用消息机制通信,调用其他模块的函数必须通过目标模块的守护进程调用.

宏内核的代表:Linux

在Linux中,进程的结构如下:

Struct task_struct{

pid_t pid;

pid_t pgrp;



/* filesystem information */

struct fs_struct *fs;

/* memory management info*/

struct mm_struct *mm;



};

在Linux进程的结构定义中,task_struct包含了所有的信息,包括进程的内存情况,文件系统情况。在创建新进程时,系统调用sys_fork调用do_fork(…)函数.

int do_fork(unsigned long clong_flags,… )

{

struct task_struct *p;

p->pid = get_pid(clone_flags);



/* copy all the process information*/

copy_files(clone_flags,p);

copy_fs(clone_flags,p);

copy_mm(nr,clone_flags,p);



}

在创建进程时,do_fork函数把所有的工作完成,分配pid…号,拷贝父进程数据段,堆栈段,等等。Linux的进程创建过程是一个完整的过程,直接调用其他模块的函数,而不是消息传递。

Minix与Linux创建新进程的过程比较可以看出二者之间的区别,Minix是建立在分模块之上的,模块之间以信息传递联系。Linux内部也是分模块的,但在运行的时候,他是一个独立的二进制大映像,其模块间的通讯是通过直接调用其他模块中的函数实现的。宏内核与微内核的区别也就在这吧,微内核是一个信息中转站,自身完成很少功能,主要是传递一个模块对另一个模块的功能请求,而宏内核则是一个大主管,把内存管理,文件管理等等一股脑全部接管。

从理论上来看,微内核的思想更好些,微内核把系统分为各个小的功能块,降低了设计难度,系统的维护与修改也容易,但通信带来的效率损失是个问题。宏内核的功能块之间的耦合度太高造成修改与维护的代价太高,不过在目前的Linux里面还不算大问题,因为Linux目前还不算太复杂,宏内核因为是直接调用,所以效率是比较高的。本回答被提问者采纳
第2个回答  2019-08-10
先普及下什么叫微内核:
要说明一下:内核和系统是两个概念!微内核简单来说就是系统的地基!
上世纪80年代开始,国外开发出来的几个微内核。典型的代表作:windows,linux,ios。
微内核:系统包括内核,内核不包括系统。宏内核:系统和内核一体的。
举个例子:
windows系统有20亿行代码。实际上真正和芯片直接交互核心代码也就几万行。这几万行就是微内核。
一个真正的微内核具备三大特点:
第一,具备直接和芯片进行互动的代码。
第二,完全独立的内核代码,甚至可以开发,像linux,windows,ios这样的系统。
第三,可以分布式安装。也即是可以自由安装软件。
纯一个字一个字敲出来的,希望大家明白。不要被某些所谓的微内核骗了。我最讨厌那些copy人家技术,OEM自己的牌子。
真的希望有一天咱们能出一款微内核,那样就可以用中文开发系统了。就真正的站起来了。
第3个回答  2020-10-21
相似回答