微内核与宏内核比较
内核按照体系结构分为两类:微内核(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目前还不算太复杂,宏内核因为是直接调用,所以效率是比较高的。
温馨提示:内容为网友见解,仅供参考
哪位大侠用通俗的语言给我解释一下什么是微内核?宏内核?
内核按照体系结构分为两类:微内核(microkernel)与宏内核(macrokernel). 微内核的系统有WindowNT,Minix,Mach,etc.宏内核的系统有Unix,Linux,etc.通过比较Minix和Linux来比较微内核和宏内核是很有意思的,因为当年两个系统的创始人对两种内核的优劣有过争论.两个系统的内核是通过进程的创建FORK的实现来比较...
什么是微内核和宏内核
而宏内核,又名单内核,其所有模块如进程调度、内存管理、文件系统、设备驱动等运行在内核态,具备直接硬件操作能力。代表性操作系统如UNIX\/Linux、FreeBSD等,它们采用宏内核架构,通常在代码中包含类似arch\/arm\/的目录,用于实现与体系结构相关功能。微内核与宏内核的设计哲学与架构差异,反映出操作系统构建...
操作系统如何实现:什么是宏内核、微内核?
操作系统的设计中,内核的组织形式是关键问题之一。操作系统的核心部分必须运行于内核态,以便拥有对硬件的所有控制权。内核态下,程序能够直接操作硬件,实现底层的系统服务和资源管理。然而,对于驱动等非核心功能是否也应运行在内核态,存在两种不同的设计方式:宏内核和微内核。宏内核设计将所有内核代码统...
什么是宏内核
认识到宏内核的缺点,就提出了微内核。微内核的观点是内核只完成服务功能,其他的管理功能就交给一个或多个特权服务程序。它的优点和缺点也同样是明显的。因为内核只完成基本的服务功能,所以微内核可以很方便的扩充。但是,由于真正的系统功能不是实现在内核里,各个功能之间的切换而引起的开销就非常的大。
电脑内核和cpu哪个好_内核和cpu的区别
明白了上述两个定义后,看下面的我的理解:1、微内核相当于一个信息交换中心,自身可以实现的功能较少,他的主要职责是传递一个请求,一个A模块对其他模块功能的请求。而宏内核相当于一个是一个中央集权控制中心,把内存管理,文件管理等功能全部管理。2、两个内核的优缺点:A、理论上来看,微内核的设计思想更好一些,它...
鸿蒙2.0,有人骂有人爱,10年后我们再来看它多牛
虽然两者都是基于linux操作系统开发的,但是核心不一样,安卓系统是宏内核,鸿蒙系统是微内核,宏内核的心脏里东西多,性能好,维修起来不方便,微内核的心脏里东西没几个,性能相对一般,但对我们来说绝对够用,方便维修,方便扩展。从底层逻辑讲这方面各有优劣,但鸿蒙系统的最大优势就是它设计之初就是针对万物互联这个场景...
华为的鸿蒙系统和苹果的操作系统有什么区别?
苹果的IOS是 基于UNIX系统 进行开发的,UNIX其实是宏内核。 微内核和宏内核有什么区别呢? 微内核比较轻便,只需要几万行的C语言代码就可以完成,而IOS这种宏内核的则需要几亿行代码, 在理论上 鸿蒙系统占用内存空间会比较小,并且执行效率更快。 开源与封闭 华为的鸿蒙系统是一个开源的系统,任何公司都可以免费使用...
能不能通俗的科普一下鸿蒙和安卓有什么区别?
1、两者的构架不同 安卓系统是基于linux的宏内核设计:宏内核包含了操作系统绝大多数的功能和模块,而且这些功能和模块都具有最高的权限,只要一个模块出错,整个系统就会崩溃,这也是安卓系统容易崩溃的原因。鸿蒙操作系统是微内核设计:微内核仅包括了操作系统必要的功能模块(任务管理、内存分配等)处在...
华为鸿蒙作为华为自己的系统,和安卓的区别到底在哪?
个人认为华为鸿蒙系统和安卓系统最主要的区别,就是一个是微内核系统,一个是宏内核系统。这里我再给大家解释一下这两个系统的差别,我是半专业的,而且现在对鸿蒙的内核也只是推测。第一个区别是安卓是基于Linux,而华为鸿蒙不是基于Linux 安卓是基于Linux的,Linux是基于Unix的,也就是安卓的内核实际上...
鸿蒙系统采用的是微内核,为什么安卓却从来不使用
2、鸿蒙系统的多终端适配。鸿蒙系统精心开发多年,呕心沥血,技术到位,就可以适配所有终端,不用重复开发与维护,很大程度上减少了大量的成本开支和很多精力,虽然安卓也是一样,长久待机不会出现问题,而鸿蒙系统最最核心和精髓的地方最值得区别的地方就是在于其是采用微内核,而安卓采用的是宏内核。当时华为...