什么是Linux内核,它是做什么的?

那么内核是什么呢?

内核是与计算机中的硬件交互的最低级别的易于更换的软件。它负责将在“用户模式”下运行的所有应用程序连接到物理硬件,并允许进程(称为服务器)使用进程间通信(IPC)相互获取信息。

不同类型的内核

当然,在从头构建内核时,有不同的构建内核方法和体系结构注意事项。一般而言,大多数内核分为三种类型之一:单核、微核和混合内核。Linux是一个单片内核,而OSX(XNU)和Windows7使用混合内核。让我们快速浏览一下这三个类别,以便稍后可以进行更详细的介绍。

微核。 微内核采用的方法是只管理它必须管理的内容:CPU、内存和IPC。计算机中的几乎所有其他东西都可以被视为附件,并且可以在用户模式下处理。微内核具有可移植性的优势,因为只要操作系统仍然试图以相同的方式访问硬件,它们就不必担心您是否更改了视频卡甚至操作系统。微内核占用的内存和安装空间也非常小,而且它们往往更安全,因为只有特定的进程在用户模式下运行,而该模式没有超级用户模式那样的高权限。

赞成,支持

可移植性。 安装占用空间小。 内存占用小。 安防

缺点

硬件通过驱动程序更加抽象。 硬件可能反应较慢,因为驱动程序处于用户模式。 进程必须在队列中等待才能获取信息。 进程在不等待的情况下无法访问其他进程

单片内核。 单片内核与微内核相反,因为它们不仅包含CPU、内存和IPC,还包括设备驱动程序、文件系统管理和系统服务器调用等内容。单片内核在访问硬件和多任务处理方面往往更好,因为如果一个程序需要从内存或另一个正在运行的进程中获取信息,它有一个更直接的队列来访问它,而不必排队等待来完成任务。然而,这可能会导致问题,因为在管理员模式下运行的程序越多,在系统运行不正常时会导致系统崩溃的事情也就越多。

赞成,支持

更直接地访问程序的硬件。 使进程之间的通信更轻松。 如果您的设备受支持,则无需额外安装即可工作。 进程响应更快,因为没有等待处理器时间的队列

缺点

安装占用空间大。 占用大量内存。 安全性较低,因为一切都在主管模式下运行

混合内核。 混合内核能够选择它们想要在用户模式下运行什么,以及它们想要在管理程序模式下运行什么。通常情况下,设备驱动程序和文件系统I/O将在用户模式下运行,而IPC和服务器调用将保持在管理模式下运行。这是两全其美的,但通常需要硬件制造商做更多的工作,因为所有的驱动程序责任都由他们来承担。它还可能存在微内核固有的一些延迟问题。

赞成,支持

开发人员可以选择哪些在用户模式下运行,哪些在主管模式下运行。 与单片内核相比,安装占用空间更小。 比其他型号更灵活

缺点

可能会遭受与微内核相同的进程延迟。 设备驱动程序需要由用户管理(通常)

Linux内核文件在哪里?

Ubuntu中的内核文件存储在/boot文件夹中,名为vmlinuz-version。vmlinuz这个名字来自Unix世界,早在60年代,他们就把自己的内核简称为“unix”,所以Linux在90年代第一次开发内核时就开始称它为“Linux”。

当开发虚拟内存以实现更轻松的多任务功能时,“VM”被放在文件的前面,以表明内核支持虚拟内存。有一段时间,Linux内核被称为vmlinux,但是内核变得太大,无法容纳在可用的引导内存中,所以内核映像被压缩,结尾的x被更改为z,以表明它是用zlib压缩的。并不总是使用相同的压缩,通常用LZMA或BZIP2代替,有些内核被简单地称为zImage。

版本编号将采用A.B.C.D格式,其中A.B可能是2.6,C是您的版本,D表示您的补丁或修复。

在/boot文件夹中还会有其他非常重要的文件,称为initrd.img-version、system.map-version和config-version。initrd文件用作一个小RAM磁盘,用于解压缩并执行实际的内核文件。在内核完全加载之前,system.map文件用于内存管理,而配置文件告诉内核在编译时将哪些选项和模块加载到内核映像中。

Linux内核体系结构

因为Linux内核是单片的,所以与其他类型的内核相比,它占用的空间最大,复杂度也最高。这是一个在Linux早期颇受争议的设计特性,至今仍带有一些单一内核固有的设计缺陷。

Linux内核开发人员为绕过这些缺陷所做的一件事就是制作可以在运行时加载和卸载的内核模块,这意味着您可以动态添加或删除内核的特性。这不仅可以通过包括运行服务器进程的模块(如低级虚拟化)向内核添加硬件功能,而且在某些情况下,它还允许在不需要重新启动计算机的情况下更换整个内核。

想象一下,如果您可以升级到WindowsService Pack,而不需要重新启动…

内核模块

如果Windows已经安装了所有可用的驱动程序,而您只需打开所需的驱动程序,情况会怎样呢?这基本上就是内核模块为Linux做的事情。内核模块,也称为可加载内核模块(LKM),对于在不消耗所有可用内存的情况下保持内核在所有硬件上正常运行至关重要。

模块通常会向基本内核添加设备、文件系统和系统调用等功能。LKM的文件扩展名为.ko,通常存储在/lib/module目录中。由于内核的模块化特性,您可以通过使用menuconfig命令将模块设置为在启动期间加载或不加载,或者通过编辑/boot/config文件来自定义内核,也可以使用modprobe命令动态加载和卸载模块。

第三方和封闭源代码模块在某些发行版(如Ubuntu)中可用,并且可能不会在默认情况下安装,因为这些模块的源代码不可用。该软件的开发者(如NVIDIA、ATI等)不提供源代码,而是构建自己的模块并编译所需的.ko文件以供分发。虽然这些模块像啤酒一样是免费的,但它们不像在语音中那样是免费的,因此不包括在某些发行版中,因为维护人员认为它通过提供非自由软件“玷污”了内核。

内核不是魔术,但对于任何正常运行的计算机来说,它都是必不可少的。Linux内核不同于OSX和Windows,因为它包含内核级别的驱动程序,并且支持许多“开箱即用”的功能。希望您能更多地了解您的软件和硬件是如何协同工作的,以及引导您的计算机需要哪些文件。

Kernel.org。 由ingridtaylar制作的图像

相关文章