内核需要完成的功能

内核作为计算机硬件资源和软件资源的管理者,需要完成以下基本功能:

操作系统架构微内核_操作系统


还有安全组件和针对不同硬件编写的驱动程序。

宏内核结构

把上面提到的各种功能所有代码经过编译,链接在一起,形成一个大的可执行程序。
这个大的可执行程序向应用提供一些接口(系统API)。
这个大程序在处理器的特权模式下运行。

为了理解宏内核的⼯作原理,我们来看⼀个例⼦,宏内核提供内存分配功能的服务过程,具体如下:
1.应⽤程序调⽤内存分配的API(应⽤程序接⼝)函数。
2.处理器切换到特权模式,开始运⾏内核代码。
3.内核⾥的内存管理代码按照特定的算法,分配⼀块内存。
4.把分配的内存块的⾸地址,返回给内存分配的API函数。
5.内存分配的API函数返回,处理器开始运⾏⽤⼾模式下的应⽤程序,应⽤程序就得到了⼀块内存的⾸地
址,并且可以使⽤这块内存了。

缺点:它没有模块化,没有扩展性、没有移植性,⾼度耦合在⼀起,⼀旦其
中⼀个组件有漏洞,内核中所有的组件可能都会出问题。
优点:各个组件可以相互调用,性能极高。Linux的架构就是宏内核架构。

微内核

它提倡内核功能尽可能少:仅仅只有进程调度、处理中断、内存空间映
射、进程间通信等功能。
微内核不提供实际的功能,实际的 进程管理、内存管理 等功能被做成一个个服务进程。
进程间通过消息进行通信。(进程A发消息给内核,内核在把消息发给要通信的内核B)

为了理解微内核的⼯程原理,我们来看看微内核提供内存分配功能的服务过程,具体如下:
1.应⽤程序发送内存分配的消息,这个发送消息的函数是微内核提供的,相当于系统API,微内核的API(应
⽤程序接⼝)相当少,极端情况下仅需要两个,⼀个接收消息的API和⼀个发送消息的API。
2.处理器切换到特权模式,开始运⾏内核代码。
3.微内核代码让当前进程停⽌运⾏,并根据消息包中的数据,确定消息发送给谁,分配内存的消息当然是发
送给内存管理服务进程。
4.内存管理服务进程收到消息,分配⼀块内存。
5.内存管理服务进程,也会通过消息的形式返回分配内存块的地址给内核,然后继续等待下⼀条消息。
6.微内核把包含内存块地址的消息返回给发送内存分配消息的应⽤程序。
7.处理器开始运⾏⽤⼾模式下的应⽤程序,应⽤程序就得到了⼀块内存的⾸地址,并且可以使⽤这块内存
了。

微内核虽然便于扩展,但是性能很差。(进程间的通信增加了很大的额外开销)

混合内核设计

分离硬件的相关性

分层有利于 屏蔽 底层的实现细节,使上层开发更加简单
把造作硬件和处理硬件功能差异的代码抽离出来,形成一个独立的软件抽象层,对上提供接口,方便上层开发。

设计一个简单的内核需要实现的

操作系统架构微内核_操作系统_02


这种架构吸收了微内核架构和宏内核架构的优点,是一种混合内核架构

Linux 全景图

https://makelinux.github.io/kernel/map/ 可以从这个网站查看。
还有Windows NT 内核 和 Darwin-XNU内核。就不记录了。需要时再会极客时间的专栏去查看吧。