作者:道雪仙尘一剑灯
每次谈到什么是内核,就是:进程调度、内存管理、文件系统、网络接口、进程通信等等这些。然后就是内核态、用户态等等。这些其实都对,但是始终感觉没法让人直观的知道,内核到底是个什么东西。
本质上内核是对计算机硬件的抽象。
这样说是因为这里涉及到一个更根本的问题:人机交互。如何让计算机理解人的想法,需求,并将之实现。
比如:让计算机计算一下硬盘中的一个文档的字数。我们是没有办法去打开“硬盘”翻箱倒柜找到这个文件,然后丢给“CPU”去统计,并从“CPU”那里得到这个结果。对于计算机内部真正的核心组成部分:CPU、硬盘、内存等等这些硬件,人是无法直接去面对和交互的。而计算机处理的所有工作,都是通过调用这些硬件设备来完成的。
对操作系统来说,最重要的正是管理和调度计算机内部的资源。而具体到操作系统的内部分工,则是由内核来真正完成和执行的。除了内核以外,操作系统其他所有的部件,都不需要也不关注如何计算、如何存储、如何和具体的某个硬件设备打交道。所有的部件都只需要将具体的诉求传递给内核,调用内核的接口,即可完成硬件资源的调度和使用。
内核抽象了计算机内部硬件资源,并统一管理对外提供支持,所以内核 = 计算机硬件。
具体到内核内部的组成部分和抽象结构,内核的核心功能和硬件有如下对应和抽象关系:
进程管理 —— CPU
内存管理 —— 内存
虚拟文件系统 —— 硬盘/磁盘
网络接口 —— 网卡
既然硬件是由内核去管理和调度的,那么内核又是如何做到的呢?
从内核的代码量上来说,内核的绝大部分代码是驱动,各个不同设备不同硬件的驱动。驱动是内核和硬件设备之间的桥梁,内核也正是通过驱动来管理和调度硬件设备。
除了驱动以外,内核的另外一部分是各种算法、函数、策略,但是代码量较少。这一部分确实有价值,但是并非唯一无可替代,也并非具有卡脖子的门槛存在。内核真正的价值是其本身涵盖的生态 —— 各种驱动和硬件的适配,日积月累的沉淀。对内核来说,真正关键和重要的是如何保证在更多甚至每一个设备上都能运行。算法和技术的难度形成的门槛,远远比不上日积月累的时间所形成的门槛。使用Linux内核,最大的原因是复用和继承Linux的生态。
而且, Linux开源的内核现在的主要演进工作也是生态的扩大。 比最新发布的Linux原生内核5.15就有如下几个重点更新:
1、集成Paragon Software 的 NTSF3 driver
2、支持AMD 的GPU/CPU
3、支持apple M1芯片
4、支持Intel 12代CPU
5、支持Intel DG2显卡
虽然这只是Linux内核的一个小版本更新,但是从这些更新可以看出,Linux内核的主要演进确实是生态的扩大。
Linux 内核主要的变化点概括来说有如下三点:新技术新协议的支持、自身算法和策略的优化和bug修复、新硬件新设备的驱动集成和支持。其中第一点和第三点都是为扩大和维护软件和硬件的生态。而做国产操作系统最重要的一点也是如此,扩大和支持国产硬件的生态。
所以使用Linux开源内核,而不去自研一套,“非不能也,实不为也”。生态的打造是日积月累,沉淀之功,即便是国产硬件的生态支持也不是一日之功。集成和使用Linux内核是成本最低,效用最大,且行之有效的策略。可以集中资源,集中优势做更有价值更有意义的其他的部分。
如果一个操作系统有更高的目的和使命,那么继承和复用只是基础。更重要的如何去掌握、主导和发展,走自己的路,满足自己的需求,这一点对国产操作系统更是如此。Linux开源内核没有适配和支持国内的硬件生态,需要自己来兼容和适配,支持这个生态的发展。Linux开源内核没有考虑的国内使用环境和安全要求,需要自己来投入和满足,保护自己。