2.1说说什么是内核?

计算机是由各种外部硬件设备组成的,比如内存、cpu、磁盘等,如果每个应用都要和这些硬件设备对接通信协议,那就太麻烦了。所以需要中间人内核来负责,让内核作为应用程序连接硬件设备的桥梁,应用程序只需要和内核交互,不用关心硬件的细节。
image.png
【内核具有哪些能力?】
现代操作系统,内核一般会提供4个基础能力:
(1)进程调度:管理进程、线程,决定哪个进程、线程使用CPU;
(2)内存管理:管理内存,决定内存的分配和回收;
(3)硬件通信管理:负责进程与硬件设备之间的通信;
(4)提供系统调用:如果应用程序需要运行更高权限的服务,那么就需要系统调用,它是应用程序与操作系统之间的接口。
内核具有很高的权限,可以控制cpu、内存、硬盘等硬件,而应用程序具有的权限很小,因此大多数操作系统,把内存分为了两个区域:内核空间:这个内存空间只有内核可以访问;
用户空间:这个内存空间专门给应用程序使用;
image.png
内核程序执行在内核态,应用程序执行在用户态。当应用程序需要使用到系统调用时,会产生一个中断。发生中断后,CPU会中断当前正在执行的用户程序,跳转到中断处理程序,开始执行内核程序。内核处理完成后,主动触发中断,把CPU执行权再次交回给应用程序,回到用户态继续工作。

2.2说说什么是微内核、什么是宏内核?

宏内核:Linux的内核架构就是宏内核,Linux的内核是一个完整的可执行程序,拥有最高的权限。它的特征是系统内核的所有模块,包括进程调度、内存管理、文件系统、设备驱动等等,都运行在内核态。
image.png
微内核:与宏内核相反的就是微内核,微内核架构的内核只保留最基本的部分,比如进程调度、虚拟机内存、中断等,把一些能力放在了用户空间,比如驱动程序、文件系统等等。这样服务与服务之间是隔离的,单个服务出现故障,也不会导致整个操作系统挂掉,提高了操作系统的稳定性和可靠性。微内核的优点是:可移植性高,维护成本低。缺点是:比如驱动程序不在内核中,而且驱动程序一般会频繁调用底层能力,所以就需要频繁进行用户态和内核态的切换,带来性能损耗。华为的鸿蒙系统就是微内核。
image.png
打个比方:以微内核的内存资源分配为例子,应用程序首先会发送内存分配的消息,这个发送消息的接口函数是由微内核提供。此时CPU切换到内核态,开始执行该函数的代码,微内核的代码会使当前进程停止运行,并将消息发送给内存管理的服务进程。内存管理服务进程收到该消息后,就会分配一块内存,并且也会通过消息的形式将分配的内存块的地址返回给内核。微内核再将该消息返回给发送内存分配消息的应用程序。此时CPU切换到用户态,应用程序会得到返回的内存块首地址,并开始使用该内存。这样就会导致微内核在调度内存时多次在用户态和内核态来回切换,使得整个操作系统的性能大大降低。
混合内核:它的架构有点像微内核,内核里面会有一个最小版本的内核,然后其他模块会在这个基础上搭建,然后实现的时候会跟宏内核类似,也就是把整个内核做成一个完整的程序,大部分服务都在内核中,就像是宏内核的方式包裹着一个微内核。
image.png
image.png
宏内核:包含多个模块,整个内核像一个完整的程序;
微内核:有一个最小版本的内核,一些模块和服务则由用户态管理;
混合内核:宏内核和微内核的结合体,内核抽象出了微内核的概念,也就是