公众号「码农小奎」操作系统—内核篇

实际上,计算机体系在经过几十年的迭代更新之后,操作系统的内核离我们已经很遥远了。

无论是对普通用户还是上层软件开发者来说,内核之中有什么已经不太重要了,而用户更关心的是操作系统所提供的服务。

所以,站在上层用户和开发者的视角,操作系统内核就是一个巨大的黑盒,盒子里有什么,它是怎么实现的,并不太关心。

但作为开发者,如果想要进一步提升技术水平与理解,还是需要了解一些黑盒中的秘密的。

内核功能

想要知道内核里面有什么,我们可以先搞明白内核是干什么的,也就是它的功能。

简略的说,内核就是计算机资源的大管家。作为用户,不用关心底层细节,一切交给这个管家,用户只要发号施令就行了。

那这个管家到底管什么啊?这里就得先说一说计算机资源有哪些了。

计算机资源:

  1. CPU,即中央处理器,负责运行程序,执行运算。
  2. 内存,负责存储正在运行的程序,一关机数据就没了。
  3. 硬盘,持久化存储数据。
  4. 网卡,接受网络数据包。
  5. 显卡,负责图像显示。
  6. 总线,负责连接和传输各种设备。
  7. IO设备,即输入输出设备,鼠标、键盘、显示器、打印机等。

以上就是内核所需要管理等资源,相应的每种资源,内核都有一套管理机制。

内核对应每种资源所形成的管理机制:

  1. 进程管理,程序的执行需要先加载到内存,而内核把正在运行的程序抽象为进程。
  2. 内存管理,程序就是数据与指令的集合,而这个集合当然要占用内存,内存作为宝贵的资源,内核提供了一套完善的分配&释放内存机制。
  3. 硬盘管理,硬盘负责持久化存储数据,你读取文件总不会拆开电脑看看这块硬盘吧,内核负责把硬盘抽象成了文件系统,管理文件更加方便。
  4. 显卡管理,负责管理图像系统,向上层提供GUI(图形用户接口)
  5. 网卡管理,两台计算机想要通信,就需要发送和接受网络包,网络包遵循了一系列协议,而网卡就是网络包的翻译官,负责封包&拆包,再传递给上层应用。
  6. IO设备管理,负责把用户常用的键盘、鼠标、显示器、打印机等进行统一管理。

驱动程序的由来

不知道你有没有发现什么问题,这么多设备类型,而生产这些设备的厂家又很多,每种设备又分各种型号。

而编写操作系统内核是软件层面上的事情,每种硬件设备想要运行就需要编写对应的代码。

难不成把管理每种硬件的代码都编写一遍?

那操作系统的开发人员不得累死,而且这个系统会越来越臃肿。

这时候就要引入驱动程序这个概念了。

操作系统的开发人员当然不傻,我才不为了每个硬件厂商给你们编写代码。

我对外只提供一个统一接口,也就是标准规范,而厂商要按照这套标准自己编写驱动程序,再加载到内核中。

这也就是为什么电脑识别显卡需要显卡驱动,识别usb需要usb驱动等等。那你说我没看见驱动啊?实际上是操作系统为你自动安装了。

知道了内核的功能之后,那这些功能到底怎么组织的,终于可以谈一谈内核结构了。

内核结构

现如今主流内核结构有两种,一种是宏内核结构,一种是微内核结构。

听名字好像挺好理解,一种大,一种小呗。

宏内核:

简而言之,宏内核就是把上面所说的所有管理模块的代码进行编译,链接成一个巨大的执行程序。所以,进程调度、内存管理、文件系统、设备驱动等都运行在内核态。

微内核:

与宏内核相反的是微内核,微内核架构主张只保留最基本的功能,例如进程调度、虚拟内存和中断,而把其他的功能放在用户态。比如文件系统放在上层,这样服务与服务之间隔离,一个挂了也不会影响整个操作系统。

两种内核当然是各有千秋,不然也不会存在两种了。

宏内核把所以模块放在内核态,速度运行快,但各个模块之间耦合度大,故障容易影响全局,且不容易移植。

而微内核只保留基本功能,内核简洁,模块耦合度小,有利于系统的移植,但由于内核态功能少,而用户态需要频繁调度内核态,系统运行速度比宏内核慢。

总结

操作系统的内核架构主流有两种,宏内核&微内核

这两种内核各有优势,宏内核运行速度较快,所有功能都运行在内核态,但故障容易牵连整个系统,且不易移植到其他平台。

而微内核只保留基本功能,内核模块之间耦合度低,局部问题不会影响整体,也利于系统的移植,但频繁的用户态与内核态的切换带来的开销较大。

题外话,其实操作系统架构不单单有这两种类型,还有一种比较特殊,那就是混合内核。混合内核的一大应用就是苹果的MAC系统。


我是「码农小奎」,欢迎扫码关注我的公众号,更多技术学习经验和你分享!

公众号二维码大

Logo

鸿蒙生态一站式服务平台。

更多推荐