1. Linux 操作系统架构概述
Linux 操作系统架构主要被划分为四个部分:硬件层、引导加载程序层、内核层以及用户空间层。
1.1 硬件层
硬件层包括了计算机硬件的所有组件,例如 CPU、内存、硬盘、键盘、显示器等等。硬件层提供了计算机基础运行的支持。
1.2 引导加载程序层
引导加载程序层在计算机开机时执行,其功能是加载内核并启动操作系统。常用的引导加载程序为 GRUB(GRand Unified Bootloader)。
1.3 内核层
内核层是整个 Linux 系统中最为核心的层次,它直接与硬件层进行交互,为用户程序提供服务。内核层由多个模块构成,这些模块包含了对 CPU、内存、文件系统、网络等方面的支持。
1.4 用户空间层
用户空间层是用户与计算机交互的部分,包括了 Shell(命令解释器)、应用程序、库等。
在整个 Linux 操作系统中,用户空间层与内核层之间是通过系统调用进行通信的。在系统调用的过程中,用户程序会将自己的需求传递给内核,内核会根据用户的需求提供相应的服务,并返回执行结果给用户。
2. Linux 内核的模块化结构
在了解 Linux 操作系统架构的基础上,我们再来看看 Linux 内核的模块化结构。
早期的 Linux 内核是单体内核结构,所有的系统功能都放在一个 monolithic 内核中。这种架构虽然简单,但是由于所有功能都在一个内核文件中,导致内核庞大、臃肿、难以维护。
为了解决这个问题,2.1 版本的 Linux 引入了模块化结构。在模块化结构中,内核被拆分成多个小模块,每个模块只包含部分功能,这些功能可在运行时动态地装载或卸载。
下面是一个典型的 Linux 内核模块化结构。
+-----------------+
| Filesystem |
+-----------------+
| Block |
+-----------------+
| Network |
+-----------------+
| Driver |
+-----------------+
| Character dev |
+-----------------+
| Misc |
+-----------------+
在 Linux 内核的模块化结构中,共被划分为六个模块,分别是:
Filesystem:包含了各种文件系统相关模块,如 ext4、FAT 等。
Block:包含了块设备驱动程序,用于管理硬盘、U 盘等块设备。
Network:包含了网络协议栈相关模块,例如 TCP/IP 协议栈、网络设备驱动等。
Driver:包含了各种设备驱动程序,如 USB 驱动、显卡驱动等。
Character dev:包含了字符设备驱动程序,用于管理键盘、鼠标、串口等字符设备。
Misc:包含了一些其它的模块,如定时器、进程管理等。
通过将 Linux 内核拆分为多个小模块,并且在运行期间动态地装载或卸载这些模块,可以使内核更加稳定、高效、易于扩展,同时降低内核的维护成本。