Linux 内核——以易于理解的方式解释

在本文中,我们将通俗地介绍 Linux 内核。 这一切都始于年轻的 Linus Torvalds 将自己的操作系统编程为一种爱好。

他允许其他程序员和计算机极客对代码进行试验,以提高质量和性能。 经过几个月的改造, LINUX 已启动,推出。

由 Linus 设计的 Linux 内核是 操作系统的大脑. 内核最初包含数千行代码,经过几个版本最终达到数百万行。 作为开源软件,任何人都可以随时在互联网上访问它。

什么是 Linux 内核?

简单来说,Linux Kernel 是用户应用程序和底层硬件之间通信的桥梁。 一般来说,有不同类型的内核。 Linux 内核是单片内核,这实质上意味着操作系统的几乎全部工作都由内核本身处理。

单体内核

在上图中,我们可以看到单片内核管理应用程序和硬件之间的整个通信。 Linux 内核是用 C 编程语言编写的,因此 GCC(GNU Compiler Collection)是所有内核源代码的默认编译器。

Linux 内核位于何处?

由于 Linux 内核是一段代码,它必须存储在文件系统的某个地方,这样每次系统重新启动时,内核都会加载到内存中。

在 Debian/Ubuntu 系统中,Linux 内核可以在 /boot 目录中找到。 为了访问Linux内核,我们必须知道当前的Linux内核版本。 使用基本的uname -r 命令,我们可以访问Linux 内核版本。

Linux 内核究竟是做什么的?

Linux Kernel 的简历中不乏技能和岗位职责。 它管理 Linux 系统的整个功能。 从调度进程到为应用程序提供资源,Linux 内核完成了所有工作。

让我们快速浏览一下 Linux 内核的一些基本工作:

1. Linux 内核是一个内存管理器

Linux 内核管理内存。 物理内存的分配和释放是内核基本工作的一部分。 有一个三级页表用于存储地址的映射。 页是内存的基本单位,通常大小为 4096 字节。

大多数内核任务通过系统调用发生。 例如,让我们执行一个系统调用来检索内存中的页面大小。

#include<unistd.h> #include<stdio.h>  int main(){  	// Performing a system call 	int size = getpagesize();  	// Printing the page size 	printf("%dn", size); 	return 1; } 

输出:

4096 

在上面的例子中 getpagesize() 是预定义的系统调用。

内存管理单元负责虚拟内存中页面的分页和交换。 分配给进程的虚拟内存是完全独立的,为恶意程序提供了一层保护。

Linux 命令如 htop 和 atop 可用于监视每个正在运行的进程的内存相关信息。

atop 命令的特定于内存的输出

2. 内核管理进程

系统中每一个正在运行的程序都是一个进程。 内核管理每个进程的创建、运行和删除。 系统调用如 fork()exec() 是多处理环境中的强大工具。

系统中的每个进程都需要 CPU 才能执行。 进程调度器 是流程管理的一个组成部分。 有多种调度算法可以实现。

Linux 内核还有另一个职责,那就是 IPC(进程间通信). 管道和信号量等机制由内核协调,目的是在进程之间进行通信。

为了快速查看所有正在运行的进程及其调度优先级和 CPU 占用百分比等属性,我们可以运行 htop 终端中的命令。

Linux内核进程Htophtop 命令的进程相关输出。

有关 Linux 内核的更多信息,我们可以参考 David A. Rustling 的书。

安装特定的 Linux 内核

这听起来可能有些阴暗,但用户可以用新版本或旧版本替换他们的内核。 实现此任务的步骤过于复杂,无法在本文中全部介绍。 因此,我们将提供一个简短的指南来在我们的系统中安装特定的内核。

第一项工作是下载内核文件。 Linux内核文件可以从官方网站下载。 下载完成后,必须解压并配置文件。

文件的配置是通过 make 命令。 通过跑步 make menuconfig,将出现一个窗口,可用于为我们的新内核选择模块和功能。 这个压倒性过程的快捷方式是将当前配置文件从正在运行的内核复制到提取的目录中。

cp /boot/config-$(uname -r) .config 

笔记: 确保将运行命令的权限提升为 root 访问权限。 某些命令在用户级访问权限下可能不起作用。 我们可以用 sudo -s 或者 sudo su 为完成任务。

上面的命令基本上将运行内核的引导目录中存在的配置文件复制为名为的新配置文件 .config.

下一步是安装用于编译内核文件的某些工具和编译器。 Debian/Ubuntu 用户可以这样做:

sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev 

内核映像是使用 make 命令在包含新内核文件的目录中。 内核编译需要大量时间,因此无需按任何紧急按钮。

编译完成后,我们需要安装模块和内核映像。 这可以通过以下命令在单个命令中实现:

make install_modules && make install 

第一个子命令安装内核模块,下一个安装完整的内核,并在其中创建映像和其他重要文件 /boot 目录。

最后一步是将当前内核版本切换到新安装的内核版本。 为此,我们运行:

sudo update-initramfs -c -k <NEW_VERSION_NUMBER> 

版本号必须与新安装的映像文件的名称相似。 紧随其后的是 update-grub 命令来完成当前的内核版本。

所有的更改都已完成。 为了重新启动系统,运行 reboot 在终端。

结论

Linux 内核是 Linux 操作系统的动力源。 理解它的概念可以让我们更接近于对 Linux 的理解。 我们希望这篇文章易于理解。 如有任何疑问或反馈,请随时在下面发表评论。

参考

Linux 内核 – David A. Gosling

Linux 内核——作者:Andries Brouwer