深入 Linux 内核架构
作者:解琛
时间:2020 年 8 月 27 日
一、基本概述
我选择的是 Linux 2.6.24 版本的内核进行研究。
1.1 内核的任务
内核是硬件与软件之间的一个中间层,其作用是将应用程序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。
- 从应用程序的视角看,内核是一台增强的计算机 。应用程序和硬件本身没有联系,只与内核有联系,内核是应用程序所知道的层次结构中的最底层。
- 若干程序在系统中并发运行时,内核是一个资源管理程序 。负责将可用共享资源分配到各个系统进程中,并保证系统的完整性。
- 内核是一个库 ,提供一组面向系统的命令。
1.2 实现策略
在操作系统实现方面,有以下两种范性。
1.2.1 微内核
基本功能直接由中央内核 实现,其他功能交给独立进程,进程通过明确定义的通信接口和中心内核通信。
1.2.2 宏内核
内核的全部代码,包括所有子系统都打包到一个文件中,内核中的每个函数都可以访问内核中的其他部分。
1.3 内核的组成部分
Linux 使用的整体式的宏内核架构。
1.3.1 进程、进程切换、调度
UNIX 操作系统下运行的应用程序、服务器以及其他程序都成为进程 。系统中真正运行的进程数目不超过 CPU 数目。
- 内核需要借助 CPU 的帮助,负责进程切换。
- 内核需要确定现存进程之间共享 CPU 的时间。
进程之间的切换称为进程切换 ,确定哪个进程运行多长时间的过程称为调度 。
1.3.2 UNIX 进程
Linux 对进程采用了一种层次结构,每一个进程都依赖于一个父进程。
内核启动 init 程序作为第一个进程。该进程负责进一步的系统初始化操作,并显示登录提示符或图形登录界面,init 是进程树的根。
我当前使用的是 Ubuntu18.04,使用 pstree 指令可以查看系统的进程树如下。
xiechen@xiechen-Ubuntu:/$ pstree
systemd─┬─ModemManager───2*[{
ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{
NetworkManager}]
├─2*[VBoxClient───VBoxClient]
├─2*[VBoxClient───VBoxClient───2*[{
VBoxClient}]]
├─VBoxClient───VBoxClient───3*[{
VBoxClient}]
├─VBoxService───8*[{
VBoxService}]
├─accounts-daemon───2*[{
accounts-daemon}]
├─acpid
├─apache2───5*[apache2]
├─avahi-daemon───avahi-daemon
├─boltd───2*[{
boltd}]
├─colord───2*[{
colord}]
├─containerd───12*[{
containerd}]
├─cron
├─cups-browsed───2*[{
cups-browsed}]
├─cupsd───2*[dbus]
├─2*[dbus-daemon]
├─dockerd───11*[{
dockerd}]
├─fcitx───{
fcitx}
├─fcitx-dbus-watc
├─fwupd───4*[{
fwupd}]
├─gdm3─┬─gdm-session-wor─┬─gdm-wayland-ses─┬─gnome-session-b─┬─gnome-shell─┬─Xwayland───6*[{
Xwayland}]
│ │ │ │ │ └─17*[{
gnome-shell}]
│ │ │ │ ├─gsd-a11y-settin───3*[{
gsd-a11y-settin}]
│ │ │ │ ├─gsd-clipboard───8*[{
gsd-clipboard}]
│ │ │ │ ├─gsd-color───9*[{
gsd-color}]
│ │ │ │ ├─gsd-datetime───2*[{
gsd-datetime}]
│ │ │ │ ├─gsd-housekeepin───2*[{
gsd-housekeepin}]
│ │ │ │ ├─gsd-keyboard───9*[{
gsd-keyboard}]
│ │ │ │ ├─gsd-media-keys───9*[{
gsd-media-keys}]
│ │ │ │ ├─gsd-mouse───2*[{
gsd-mouse}]
│ │ │ │ ├─gsd-power───3*[{
gsd-power}]
......
树结构的拓展方式和新进程的创建方式密切相关。UNIX 中有 fork 和 exec 两种创建新进程的机制。