操作系统启动过程
先过一遍阮一峰的计算机是如何启动的?
知道了BIOS,MBR,GRUB,kernel,init
BIOS
BIOS中包含两块
- POST
- 硬件自检,检查CPU,内存,显卡,鼠标外设,所以这个不是加载到内存中的。
- 启动顺序
- 决定从软盘,CD-ROM,硬盘或网络启动。
MBR
从例如只检测到硬盘,然后动硬盘的第一个001扇区读取 512B的数据,这就是MBR。
3部分结构,
- 那第一部分的GRUB和装在/boot/下有什么区别。
- 第二部分就是分区表
- 第三部的是在BIOS中启动顺序用到的
GRUB
用grub来决定进入那个内核,有1 1.5 2 三个阶段
从 BIOS POST => MBR => GRUB => kernel => init => runLevel
- BIOS: POST and gives control the BOOT Device and loads MBR (在选择的设备比如硬盘的第一个扇区,512B的MBR)
- MBR executes the Boot Load
- Grub Menu List
- Grub loads Kernel and Initrd
- Initrd initial root filesystem
- Kernel loads the actual root files
- /sbin/init is executed
- checks runlevel in /etc/inittab
- runs all the files present in /etc
- run /etc/rc.local
首先大致知道整个系统的启动过程,然后要知道细节,具体从哪个地址到哪个地址,CPU控制权哪个程序交个哪个程序。
直到登录。进入系统。
CPU读取到CS:IP的值是FFFF0H, 然后这个地址在内存中到末尾就16B,所以只有一个跳转指令。跳转到BIOS中
X86系统20个地址总线 8或16个数据总线。
然后知道显卡也是有BIOS的了。
磁盘的第一个扇区的大小就是512B MBR,最外面开始存。 “0”磁道检测器
加载到内存的7c00处,磁盘可不是固件。
BIOS 将启动磁盘中的第 1 个扇区(MBR 扇区,Master Boot Record)的 512 个字节的数据加载到物理内存地址为 0x7C00 ~ 0x7E00 的区域,然后程序就跳转到 0x7C00 处开始执行,至此,BIOS 就完成了所有的工作,将控制权转交到了 MBR 中的代码。
“盘面”、“磁道”、“柱面”和“扇区”的含义逐一进行介绍。
POST不放入内存,固件就在固件中执行,而从磁盘中读取的MBR就会放入内存中。
实模式和保护模式。 实模式下可以直接访问物理地址。在保护膜实现是访问虚拟地址。
疑问:通电后到底是从哪个地址开始(实模式下应该是直接找物理地址),
CS:IP 到地址FFFF:0000 还是F000:FFF0,或者还是直接到BIOS中了,
然后有一跳跳转地址的,这是跳转到BIOS中吧
POST后还有中断的吧
Grub的具体过程看Linux Boot Sequence
/boot/grub2/grub.cfg
启动登录后boot log后是在/var/log/
dmesg命令也能给你登录信息
最后的runlevel是6个level
/etc/inittab
runlevel也是个命令,可以看当前是在哪
默认的在/etc/init/文件夹下的rc-sysinit.conf //ubuntu
start up script, sk开头的
就是那个rc.d 文件夹 在/etc/下, 里面有s和k开头的
参考
计算机是如何启动的?666
Linux 的启动流程
Linux Boot Process
Understanding the Linux Boot Process - CompTIA Linux+, LPIC-1
BIOS启动过程
Linux系统启动过程分析
BIOS执行位置的问题
The BIOS/MBR Boot Process
How BIOS Works 666
深入解析硬盘结构 666
硬盘概念:扇区,磁道,磁头,柱面,簇
Linux 引导过程内幕 666
BIOS 传统模式下的 X86 PC 启动过程
Basics of the Linux Boot Process 666 主要讲登录runlevel这里开始
Linux Boot Sequence