Linux体系—1.启动流程
基本概念
Linux内核功能
- 进程管理
- 网络管理
- IO设备管理
- selinux
- 文件系统
- 驱动管理
内核设计流派
- 单内核 内核和功能集成了 linux
- 微内核 内核核心+外部功能模块(.ko-kernel object) windows
- linux广发采用了未内核的设计思想,即在内核设计插槽,插入功能模块
Linux核心和模块
- 核心 /boot/vmlinuz-version
- 模块 /lib/modules/version/kernel/
启动过程
- 第一步:POST(power on and self test 加电自检)
| CMOS芯片--BIOS程序
| BIOS(basic input and output system)
| - 让系统进行自检
| - 设置系统启动项(boot sequence),指定从哪个设备启动系统
| 会从指定的设备上找MBR,主要是需要Bootloader
- 第二步:根据bootloader来加载磁盘上的内核文件(vmlinuz)
| vmlinuz:内核
| initrd:临时文件系统
| - centos5:initrd,模拟成一块磁盘
| - centos6:initramfs,模拟是一个文件系统
| 通过initrd可以让内核获取基本的启动程序,然后内核就开始重新挂载根文件系统到真正磁盘,挂载过程是只读方式。
# kernel使用磁盘、文件系统、硬件等都需要其相应的驱动
# 方式1:在编译内核的时候,将所有可能用到的驱动都编译进去(不可能完成的任务)
# 方式2:基于一个临时的小系统,在这个小系统中包含了所需要基本的驱动程序(initrd)
- 第三步:在文件系统中找到并启动第一个程序(init)
| centos5:init程序;/etc/init.d/的sysV脚本,在启动时这些脚本会依次启动,启动过程慢,串行。
| centos6:upstart;/etc/init.d/的sysV脚本,用近似于并行启动
| centos7:systemd;/usr/lib/systemd/system。不是真的并行都启动了,理解为唤醒
| # systemd本身就是解释器,凌驾于系统之上。
| init功能:完成系统初始化(1.将跟重新挂载为读写。2.将设置为自启动程序启动起来。。。)
# post→bios→boot sequence→mbr(bootloader)→/boot/grub/grub.conf→vmlinuz,initrd→识别和挂载跟文件系统(只读)→init→/etc/init/*.conf,/etc/rc.sysinit,/etc/rc.d/rcn.d/S* K*)
补充
- /etc/inittab 启动脚本
- /etc/rc.d/rc.sysinit 重要脚本
bootloader
1、MBR
- BOOTLOADER:前446字节
- DPT:64字节
- MAGIC NUMBER:2字节
2、开机引导程序
- bootloader就是开机引导程序
- LILO(linux loader)
- GRUB(grand unified bootloader)
| centos6 grub0.x=>称为grub1
| centos7 grub1.x=>称为grub2
3、GRUB
- 第一部分:stage1 位于MBR中的bootloader
| 功能:实现从磁盘上找到stage2中的配置文件
- 第二部分:stage1.5 位于MBR之后的扇区中,作用帮助bootloader来识别磁盘
| 功能:作用帮助bootloader来识别磁盘文件系统
- 第三部分:state2 位于磁盘文件系统上/boot/grub/grub.conf
| 功能1:提供一个菜单,让用户选择要使用的内核
| 功能2:指引找到磁盘上的vmlinuz和initrd文件
| 功能3:提供一种保护机制
- 关于保护机制
| 编辑菜单认证机制
| 当启动某个内核的时候做认证
4、grub识别磁盘的方式
- hd#,# 前面表示的磁盘编号,后面表示的分区编号,从0开始编号
- hd0,0 表示第一个磁盘的第一个分区
- 将boot目录识别为根分区
5、grub命令
- 在启动选择界面按c进入grub命令行界面
grub> find (hd0,0)/vmli(tab补全) // 在根分区下查看内核
grub> root (hd0,0) // 将第一个分区设定为根分区
grub> boot // 按照本次的设定来启动系统
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律