系统初始化¶
主板加电,CPU 进入实模式,执行 ROM 中的 BIOS 或 UEFI 启动固件
启动固件检测正常后,搜寻存储器找到启动盘,加载 MBR 或 ESP 到内存,启动引导加载程序,加载硬盘分区中的 OS 文件
在内核完成了操作系统的各种初始化之后,会从缺省路径尝试启动第一个用户态进程,即1号进程,也叫初始化守护进程,然后操作系统便从内核态切换到了用户态。
引导加载程序¶
引导加载程序 Bootloader 位于 MBR 或 ESP 中, 用于从多操作系统的计算机中选择一个系统来启动,或从系统分区中选择特殊的内核配置,是硬件和操作系统之间的接口
Linux 发行版中可使用的 Bootloader 有三种
GRUB
GRand Unified BootloaderGRUB2
最新且最常用LILO
GRUB2,包含boot.img
(启动代码)和core.img
(内核镜像)
core.img
主要包括以下模块
diskroot.img
lzma_decompress.img
解压缩程序kernel.img
加载顺序¶
boot.img
加载core.img
的diskroot.img
diskroot.img
加载lzma_compress.img
- CPU切换到保护模式,启用分段(辅助进程管理),启动分页(辅助内存管理),打开其他地址线
lzma_compress.img
解压运行kernel.img
,解析/boot/grub2/grub.cfg
(GRUB2配置文件),选择操作系统,检查通过后加载完整系统内核
初始化配置文件¶
当操作系统启动时会加载一系列的初始化配置文件,这些文件控制着系统的各种设置和服务
# 系统级配置文件
/etc/environment
/etc/profile # 用于设置全局的环境变量和默认的环境参数等
/etc/bashrc # bash shell 的配置文件,其它shell不受影响
/etc/inittab
/etc/fstab # 定义了系统中各个文件系统的挂载点和选项
/etc/passwd # 用户
/etc/group # 用户组
/etc/hosts # 定义了主机名和IP地址的对应关系
/etc/resolv.conf # 定义了系统使用的DNS服务器地址和搜索域名
# 用户级配置文件
~/.bashrc # 每启动shell时都会加载一次,主要用于定义环境变量、命令别名等
~/.bash_profile # 仅登录时执行一次,如果存在则后面的不再执行,主要用于定义个人偏好
~/.bash_login # 上面的不存在才会执行
~/.profile # 上面的不存在才会执行
~/.bash_logout # 每次退出时执行
加载顺序:实线为主流程,虚线为被调用的配置文件
优先级(就近原则):用户级配置文件 > 应用程序配置文件 > 系统级配置文件
初始化守护进程¶
每个子进程都是由父进程启动的,1号进程便是初始化进程,它最基本的功能就是创建出 Linux 系统中其他所有的进程,并且管理这些进程
初始进程在旧版本系统中是 init
,新版本通常是 systemd
# 查看进程树
# -u 显示所属用户
# -p 显示进程编号(PID)
pstree [-up]
init¶
SysV init
, SysV 是 System V
的缩写
# 对应的管理工具:service
service network start/stop/restart xxx
chkconfig -list network
Systemd¶
Systemd 是最新的守护进程系统,会尽可能启动较少的进程,尽可能并发启动更多进程
目前主流的 Linux 发行版都会把 /sbin/init
作为符号链接指向 Systemd
ls -l /sbin/init # lrwxrwxrwx 1 root root 20 Jul 21 19:00 /sbin/init -> /lib/systemd/systemd
# 对应的管理工具:systemctl
# 负责检查和控制 systemd 系统和服务管理器
systemctl status xxx
systemctl start/stop/restart/reload xxx
systemctl enable/disable xxx # 开机自启/关闭
systemctl list-unit-files xxx.service
最后更新:
2023-08-06