科普|内核kernel(概念理解、功能介绍、宏内核和微内核)
科普|内核kernel(概念理解、功能介绍、宏内核和微内核)
本文是一篇关于计算机内核的科普文章,主要介绍了内核的基本概念、功能以及宏内核和微内核的区别。文章通过类比市政服务机构来解释内核的作用,帮助读者理解内核在计算机系统中的地位和功能。文章内容详尽,涵盖了内核的核心概念,如系统调用、用户态和内核态等,并对宏内核和微内核的优缺点进行了对比分析。
当被问起计算机内核,你会想到什么?
会想到系统调用?会想到进程管理?会想到IO操作?
还是觉得跟工作基本无关,又麻烦又难,根本不需要了解~
非也!非也!
内核的理解很必要,也可以很简单,跟随本文一步步来 ~
如果想在计算机领域做到高级职位,有所建树,那内核理解就是必修课!
了解计算机内核是理解计算机架构和进程运行的基础,能够在操作系统选择、通信和安全管理、性能优化等方面发挥重要作用;另外充分理解和应用内核设计思想,将有助于解决复杂问题,优化系统和流程,推动业务发展和创新。
本文希望和大家一起建立起来对内核的基本认知
————————破障之旅开启——————————————
首先来理解下内核这个词——内部的核心,什么人是一个团队的核心?什么组件称得上一个系统的核心呢?
我们说某个公司的核心人物、核心团队是什么意思呢?核心人物和团队都是指掌握了公司关键资源(比如资金、人才、技术、核心客户关系)的人和团队。
在计算机领域也是如此,掌握计算机系统关键资源的模块就叫计算机内核。
计算机系统主要有内存、CPU、进程、设备、文件系统和网络等,计算机世界资源分配原则之一是—— 按需分配不浪费,所以就出现了统一管理这些资源的内核模块。
内核功能展示
在一个城市中,计算机内核就像市政服务机构一样,而每个进程则类似于一个个独立家庭或公司。
市政服务机构(内核)管理着公共资源和服务,如道路、电力、水供应等,市政机构(内核)是唯一的,不属于任何家庭(进程),但为所有家庭(进程)提供服务。
家庭、公司(进程)各自独立,管理自己的事务,家庭(进程)不能直接控制或管理公共资源,但可以通过市政(内核)的各种部门获得所需服务。
内核是服务于所有进程的,所以内核会在系统启动后首先运行起来 。
内核虽然不是严格意义的进程,我们也可以把它当作一个超级进程来看待,像进程一样,内核中也有多个线程来处理各种不同类型任务 。
当各个应用当想获得系统服务的时候,需要通过调用一些已经封装好的方法来获取:
比如fork()——创建进行、mmap()—内存映射、socket()——网络通信等
这些方法被调用后,程序就会从进程用户空间(进程管理范围)切换到内核空间继续运行,这就叫做系统调用,这些fork()、mmap() 等方法叫做内核方法。
一个进程在运行这些内核方法的时候,具备很多特权,可以使用各种系统资源,这种状态叫做特权态,也叫做内核态,与内核态对应的是用户态,是指进程在运行非内核方法时候的状态。
目前大多数内核是用C语言和汇编语言写的,因为C语言提供了高效的底层内存和硬件控制能力,但不管什么语言写的,最终都会编译成机器码,所以其他各种语言,比如go、java、python经过编译后都可以调用内核方法。
在其他进程来看来,内核就是实现了各种内核方法的工具集合而已,所以我们想自己实现一个计算内核,只要实现目前流行内核提供的各种内核方法就好了~
——————宏内核和微内核——————
其实前面介绍的内核叫宏内核, 比如常见Linux内核以及各种变种,它管理了各种系统资源,几乎涵盖了一个操作系统所有的功能,这导致代码复杂且难以维护,移植到新硬件平台时需要进行大量修改;
宏内核所有资源管理模块都在内核空间中运行,模块之间的依赖性和耦合度很高,修改一个模块可能会影响其他模块;
宏内核所有模块共享同一个地址空间,如果某个模块出现错误(如内存越界或崩溃),可能会导致整个内核和系统崩溃;
宏内核所有模块在内核空间中运行,任何模块的漏洞都可能被利用来攻破系统;
在一些没有这么多资源可以管理的系统中,宏内核的多余功能的运行本身就是一种浪费。
为了应对宏内核在复杂性、可靠性、安全性和灵活性方面的挑战 ,微内核出现了
宏内核VS微内核
如图,微内核只保留最基本、最核心的功能,其他操作系统服务如文件系统、网络协议栈、设备驱动等都做成一个个独立服务,这些服务运行在用户空间,可以方便地添加、删除或替换,而无需重新编译或修改内核。
各服务在独立的地址空间中运行,减少了服务之间的相互影响,提高了系统的可靠性和安全性。
微内核的劣势也显而易见——频繁的IPC通信会带来额外的性能开销,需要我们提供更加高效的IPC机制。
但总体来说微内核是时代发展的产物,它的设计思想在操作系统领域展示了其强大的生命力和优越性,通过模块化设计、安全与隔离、简化内核、提供高效的IPC和高可移植性等方面的创新,为计算机科学和软件工程带来了深远的启示,比如微服务、插件化、组件化、容器化都是类似的底层逻辑。在公司、机构、甚至城市管理方面,借鉴微内核的设计思想,也可以帮助我们构建更加灵活、可靠、安全和高效组织和架构。