我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

由于本文的目标是介绍 Linux 内核并探讨其体系结构和主要组件,因此首先介绍 Linux 的简要历史,然后从较高的层次审视 Linux 内核的体系结构,最后介绍其主要子系统。 Linux 内核有超过 600 万行代码,因此本文不可能对其进行完整介绍。 请使用其他内容的链接来进一步研究。

Linux 简史

虽然Linux绝对是最流行的开源操作系统,但与其他操作系统的悠久历史相比,它的历史却很短。 在计算机的早期,程序员使用硬件语言在裸硬件上进行开发。 缺乏操作系统意味着一次只有一个应用程序(和一个用户)可以使用这些大型且昂贵的设备。 早期的操作系统开发于 20 世纪 50 年代,旨在提供简单的开发体验。 包括为IBM 701开发的(GMOS)和North为IBM 709开发的(FMS)。

20世纪60年代,麻省理工学院(MIT)和一些公司为GE-645开发了一个名为(and)的实验操作系统。 这个操作系统的开发者之一AT&T后来退出,并在1970年开发了自己的操作系统,名为Unics。伴随着这个操作系统诞生的是C语言,C语言就是为此而开发的,然后他们重写了操作系统C语言使操作系统开发可移植。

二十年后,创建了 UNIX® 的微内核版本,称为 MINIX(UNIX 的缩写),可以在小型计算机上使用。

在个人计算机上运行。 这个开源操作系统启发 Linus 在 20 世纪 90 年代开发 Linux(见图 1)。

图 1. 主要 Linux 内核发行版的简史

Linux 迅速从个人项目发展成为全球数千人参与的开发项目。 对于 Linux,最重要的决定之一是采用 GPL (GNU)。 在GPL的保护下,Linux内核受到保护,不能被商业使用,而且它还受益于GNU项目的用户空间开发,其源代码比Linux内核大得多。 这允许使用一些非常有用的应用程序,例如 GCC (GNU) 和各种 shell 支持。

Linux内核简介

现在让我们从一个比较高的层面来看看GNU/Linux操作系统的架构。 您可以将操作系统视为两个级别,如图 2 所示。

图2. GNU/Linux操作系统的基本架构

顶部是用户(或应用程序)空间。 这是用户应用程序执行的地方。 用户空间下面是内核空间,Linux内核位于其中。

GNU C (glibc) 也在这里。 它为内核提供了系统调用接口以及在用户空间应用程序和内核之间进行转换的机制。 这很重要,因为内核和用户空间应用程序使用不同的受保护地址空间。 每个用户空间进程都使用自己的虚拟地址空间,而内核则占用单独的地址空间。

Linux内核可以进一步分为3层。 最上面是系统调用接口,它实现了一些基本的功能,比如读、写等。 系统调用接口下面是内核代码,可以更准确地定义为与体系结构无关的内核代码。 这些代码对于 Linux 支持的所有处理器架构都是通用的。 该代码下面是依赖于体系结构的代码,形成通常所说的 BSP(板)。 这些代码充当给定架构的处理器和平台特定代码。

Linux 内核的属性

在讨论大型复杂系统的架构时,可以从多个角度来看待该系统。 架构分析的一个目标是提供一种更好地理解源代码的方法,这也是本文的目的。

Linux 内核实现了许多重要的架构属性。 在更高或更低的级别上,内核分为子系统。 Linux 也可以被视为一个整体,因为它将所有这些基本服务集成到内核中。 这与微内核架构不同,微内核架构提供了一些基础服务,如通信、I/O、内存和进程管理等,更多具体的服务则插入到微内核层中。 每个核心都有自己的优点,但这里不讨论这些。

随着时间的推移,Linux 内核在内存和 CPU 使用方面非常高效,并且非常稳定。 但 Linux 最有趣的是它的可移植性,尽管它的规模和复杂性。 Linux 被编译为在具有不同架构约束和要求的大量处理器和平台上运行。 一个例子是 Linux 可以在具有内存管理单元 (MMU) 的处理器上运行,也可以在不提供 MMU 的处理器上运行。 Linux 内核的端口提供对非 MMU 的支持。

Linux内核的主要子系统

(组成:进程管理、定时器、中断管理、内存管理、模块管理、虚拟文件系统接口VSF、文件系统、设备驱动、进程间通信、网络管理、系统启动等)

现在使用图 3 中的分类来描述 Linux 内核的主要组件。

图 3. Linux 内核的架构视角

SCI 层提供了某些机制来执行从用户空间到内核的函数调用。 如前所述,该接口依赖于体系结构,即使在同一处理器系列中也是如此。 SCI实际上是一个非常有用的函数调用复用和解复用服务。 你可以在./linux/中找到SCI的实现,在./linux/arch中找到与体系结构相关的部分。 有关此组件的更多详细信息可以在参考资料部分中找到。

流程管理的重点是流程的执行。 在内核中,这些进程称为线程,代表各个处理器虚拟化(线程代码、数据、堆栈和 CPU 寄存器)。 在用户空间中,通常使用术语“进程”,但Linux实现并不区分这两个概念(进程和线程)。 内核通过SCI提供应用程序编程接口(API)来创建新进程(fork、exec或[POSIX]函数)、停止进程(kill、exit)以及它们之间的通信和同步(或POSIX机制)。

进程管理还包括处理在活动进程之间共享 CPU 的需要。 内核实现了一种新型的调度算法,无论有多少线程竞争 CPU,该算法都会在固定的时间内运行。 该算法称为 O(1) 调度程序。 顾名思义,调度多个线程所花费的时间与调度一个线程所花费的时间相同。 O(1) 调度程序还可以支持多个处理器(称为对称多处理器或 SMP)。 您可以在 ./linux/ 中找到进程管理的源代码,在 ./linux/arch 中找到与体系结构相关的源代码。 您可以在参考资料部分了解有关该算法的更多信息。

内核管理的另一个重要资源是内存。 为了提高效率,如果虚拟内存由硬件管理,则内存以所谓的内存页(大多数架构为 4KB)进行管理。 Linux 包括管理可用内存的方法以及用于物理和虚拟映射的硬件机制。

但内存管理不仅仅需要管理 4KB 缓冲区。 Linux 提供了 4KB 缓冲区的抽象,例如板分配器。 这种内存管理模式使用 4KB 缓冲区作为基础,然后从中分配结构并跟踪内存页使用情况,例如哪些内存页已满、哪些页未完全使用以及哪些页为空。 这允许该模式根据系统需求动态调整内存使用情况。

为了支持多个用户使用内存,有时会消耗掉可用内存。 因此,页面可以从内存移出到磁盘上。 这个过程称为交换,因为页面从内存交换到硬盘。 内存管理的源代码可以在./linux/mm中找到。

虚拟文件系统 (VFS) 是 Linux 内核的一个非常有用的方面,因为它为文件系统提供了通用的接口抽象。 VFS 在 SCI 和内核支持的文件系统之间提供交换层(参见图 4)。

图 4. VFS 在用户和文件系统之间提供交换层

在VFS上,它是open、close、read、write等功能的通用API抽象。 VFS下面是文件系统抽象,定义了上层功能的实现。 它们是给定文件系统(超过 50 个)的插件。 文件系统的源代码可以在./linux/fs 中找到。

文件系统层下面是缓冲区缓存,它为文件系统层提供一组通用的功能(与具体文件系统无关)。 该缓存层通过将数据保留一段时间(或立即预取数据以便在需要时可用)来优化对物理设备的访问。 缓冲区高速缓存下面是设备驱动程序,它实现特定物理设备的接口。

网络堆栈的设计遵循模拟协议本身的分层架构。 回想一下,IP (IP) 是传输协议(通常称为传输控制协议或 TCP)之下的核心网络层协议。 TCP之上是一层,通过SCI来调用。

该层是网络子系统的标准API,为各种网络协议提供用户接口。 从原始帧访问到 IP 协议数据单元 (PDU),再到 TCP 和用户 (UDP),IP 层提供了管理连接和在端点之间移动数据的标准化方法。 内核网络源代码可以在./linux/net 中找到。

Linux内核中的大量代码都在设备驱动程序中,它们运行特定的硬件设备。 Linux源码树提供了子目录,该子目录进一步分为各种支持的设备,如I2C等,设备驱动代码可以在./linux/中找到。

尽管 Linux 在很大程度上独立于其运行的体系结构,但仍有一些元素必须考虑体系结构才能正常运行并实现更高的效率。 ./linux/arch 子目录定义了内核源代码中与体系结构相关的部分,其中包含各种特定于体系结构的子目录(共同组成了 BSP)。 对于典型的桌面系统,使用 i386 目录。 每个体系结构子目录都包含许多其他子目录,每个子目录都专注于内核的特定方面,例如引导、内核、内存管理等。这些与体系结构相关的代码可以在./linux/arch 中找到。

Linux 内核的一些有用的特性 如果 Linux 内核的可移植性和效率不够好,Linux 还提供了其他不能归入上述类别的特性。 作为生产操作系统和开源软件,Linux 是测试新协议及其增强功能的良好平台。 Linux 支持大量网络协议,包括经典的 TCP/IP 以及高速网络的扩展(大于 1 [GbE] 和 10 GbE)。 Linux 还可以支持流控制传输协议 (SCTP) 等协议,它提供了许多比 TCP 更高级的功能(并且是传输层协议的后继者)。 Linux也是一个动态内核,支持动态添加或删除软件组件。 它们被称为动态可加载内核模块,可以在启动时或由用户随时按需插入(当前特定设备需要)。 Linux 的最新增强功能之一是能够充当其他操作系统的操作系统(称为虚拟机管理程序)。 最近,对内核进行了修改,称为基于内核的虚拟机(KVM)。 此修改启用了用户空间的新接口,允许其他操作系统在支持 KVM 的内核之上运行。 除了运行Linux 的其他实例之外,® ® 还可以进行虚拟化。 唯一的限制是底层处理器必须支持新的虚拟化指令。 原文地址:#

二维码
扫一扫在手机端查看

本文链接:https://by928.com/439.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线