解密操作系统 —— 解密内核

写在前面
作为Linux开发者,不止一次碰到过内核这个名词。不管是在程序内存分布啊,调度啊,都有内核的影子。但是一直没有彻底清楚内核是什么东西。所幸,极客时间的彭东老师有介绍相关知识。特此总结记录下来。

内核是什么

从一个开发者来说,内核是什么?内核中有什么?好像都不是那么重要,其能提供服务才是最重要的。诚然,博主之前也是这么想的,但是随着接触的多了。渐渐发现,很多框架、库等等的设计都隐含着内核的影子

以下是百度百科对内核的解释:

百度百科
内核,是一个操作系统的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。。

从抽象的角度上来看,内核其实就是计算机资源的管理者,是计算机的大管家。

内核中有什么

内核作为计算机的管家,其管理的计算机资源大致如下,而管理这些资源的程序也就构成了内核

  • 管理CPU:由于CPU是执行一个个程序的,而程序在运行过程中又被抽象为进程。所以又可以叫进程管理。
  • 管理内存:由于程序和数据都要占用内存,内存是非常宝贵的资源,所以内核要小心的管理内存。
  • 管理硬盘:硬盘主要存放用户数据,而内核把用户数据抽象成文件。而文件其上层又由文件系统负责合理的组织、方便用户查找和读写。
  • 管理显卡:负责显示信息,其形成了内核中的图形系统。
  • 管理网卡:网卡主要完成网络通信,网络通信需要各种协议,最后在内核中就形成了网络协议栈,又称网络组件
  • 管理I/O设备:这里指键盘、鼠标、打印机、显示器等设备的管理

在这里插入图片描述
内核除了这些必要的组件之外,根据功能不同还有安全组件等。同时,内核为了管理不同型号的硬件,会针对其写不同的驱动程序。硬件厂商根据自己不同的硬件编写不同的驱动,将这些驱动加入到内核之中。

宏内核

接下来,将从经典的两个内核结构 —— 宏内核和微内核去探秘内核是如何组织这些组件的。

首先就是宏内核。宏内核是最简单适用的,也是最早的一种内核结构。其是将以上管理组件的代码将其经过编译之后,最后链接在一起,形成一个大的可执行程序。有点像静态链接。

这个大的程序里有支持这些功能的所有代码,向用户应用软件提供一些借口,这些接口就是常说的系统API函数。而这个大程序会在处理器的特权模式下运行,这个模式通常称为宏内核模式,结构如下:
**加粗样式**


这里一层一层的,并不是他们的层次关系,仅仅表示其连接在一起

以下是一个宏内核提供内存分配功能的服务过程:

  1. 应用程序调用内存分配API函数,触发软中断
  2. 处理器切换到特权模式,开始运行内核代码
  3. 内核里的内存管理代码按照特定的算法,分配一块内存
  4. 把分配内存块的首地址,返回给内存分配的API函数
  5. 内存分配的API函数返回,处理器开始运行用户模式下的应用程序,应用程序也就得到了这块内存的首地址

宏内核的缺陷与优势

上述的宏内核有着明显的缺点,因为它没有模块化,没有扩展性,难以移植,高度耦合在一起,一旦其中一个组件有漏洞,内核中所有组件都有可能会出现问题。

假如说我们要开发一个新功能,我们就不得不把整个内核重新编译、链接和安装。正是因为这个原因,宏内核正在渐渐的退出历史舞台

但是,宏内核也有其优势:其性能很好,因为在内核中,这些组件之间可以相互调用,性能极高。

微内核

微内核架构和宏内核架构整好相反,其提倡内核功能尽可能少:仅仅只有进程调度、处理中断、内存空间映射、进程间通讯等功能。开发者把实际的进程管理、内存管理、设备管理、文件管理等服务功能,做成一个个的服务进程

在微内核中,则是定义了一种良好的进程间通信机制 —— 消息。应用程序要请求相关服务,就向为何内发送一条与之对应的消息,微内核再把这条消息转发给相关的服务进程,接着服务进程会完成相关的服务。而这种设计方式博主也在RPC和Redis的发布订阅模式中见过。

以下是这种模式的一张图解:
在这里插入图片描述
刚刚看了宏内核提供内存分配的服务过程,我们现在再来看看微内核提供内存分配服务的过程:

  1. 应用程序发送内存分配消息,这个发送消息的函数是微内核提供的,相当于系统API,微内核提供的API极少,极端情况下只有两个,一个接受消息的API,一个发送消息的API。
  2. 处理器切换到特权模式,开始运行内核代码。
  3. 微内核让当前进程停止运行,并根据消息包中的的数据,确定消息发送给哪个进程
  4. 内存管理服务进程收到消息,分配一块内存
  5. 内存管理服务进程以消息的形式,将分配的内存块的地址返回给内核,其继续待命等待下一条消息。
  6. 微内核将包含内存块地址的消息返回给发送内存分配消息的应用程序。
  7. 应用程序得到内存的首地址,并且可以开始使用这块内存

微内核的架构实现虽然不同厂商的实现不同,但是大致都是上述的过程。同样是内存分配,在微内核中就会拐几个弯,一来一去的消息带来了非常大的开销。当然,各个服务进程的切换开销也不小。这样系统性能就大打折扣。

微内核的优点

但是微内核也有很多优点:

  • 系统结构相当清晰利于开发
  • 系统有良好的移植性
  • 微内核代码量少,便于重写微内核
  • 微内核有相当好的伸缩性、扩展性

Linux内核

Linux发展到今天其代码量近2000w行,浩如烟海。以下是彭东老师整理的一份Linux全景图:
在这里插入图片描述
上图大致分为五大重要组件,每个组件又分为许多模块从上到下贯穿各个层次:
在这里插入图片描述
Linux这么多模块挤在一起,之间的通信主要是函数调用,而且函数间的调用没有一定的层次关系,更加没有左右边界的限定。如果说这些调用路径上一旦有一个函数出现了问题,就麻烦打蜡,它会波及到全部组件,导致整个系统崩溃。

当然,Linux这种传统的宏内核架构其性能极高,这也是我们为什么说Linux比Windows快的原因。

参考文献

[1] 彭东.操作系统实战45讲.极客时间
  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shenmingik

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值