机器上电
加电
一个特殊的硬件电路在cpu的一个引脚上产生一个RESET逻辑值.
RESET产生后,将cpu中的一些寄存器包括[cs和ip]设置成固定值.
执行在物理地址0xfffffff0处找到的代码.
将0xfffffff0映射到ROM中 (ROM中存放着BIOS所存储的中断驱动和一些低级过程)
BIOS:
BIOS使用实模式地址(实模式地址:seg段*16/10H + off偏移量)
BIOS执行操作:
1.对计算机硬件执行一系列的检测,检测都有什么设备,并且这些设备是否正常。
2.初始化硬件设备,保证所有的硬件设备操作不会引起IRQ线和I/O端口的冲突。
3.搜索一个操作系统来启动,会根据BIOS的设置,访问软盘,硬盘,CD-ROM的第
一个扇区(引导扇区)
4.只要找到一个可引导的设备,就会把第一个扇区的内容拷贝到RAM中从物理地址0x00007c00
开始的位置,
然后跳转至这个地址,执行刚才加载进来的代码。
Boot Loader (LILO/GRUB):
第一个扇区为Master Boot Record(MBR)一共512字节:
446:boot.img
64: fat(磁盘分区表)
2: 55AA(bootloader是否有效的标记)
boot loader是由BIOS用来把操作系统的内核映像装载到RAM中所调用的一个程序。提供一个菜单,
并把系统控制权交给内核
GRUB
1 stage: 定位并加载1.5 stage的代码
1.5 stage: mbr之后的扇区, 开始执行存放2nd stage文件的 /boot文件
系统的驱动程序,并加载相关驱动程序
2nd stage: 加载选定的内核到内存中,并转移控制权给内核。内核相关文件位于/boot
目录下,这些内核文件可以通过其文件名进行识别,其文件名均带有前缀 vmlinuz。
配置文件: /boot/grub/grub.conf <-- /etc/grub.conf
2nd stage及内核通常放置于一个基本的磁盘分区:
功能:
(1) 提供菜单、提供交互式接口
e: 编辑命令, 用于编辑菜单
c:命令模式, 交互式接口
(2) 加载用户选择的内核或操作系统
允许传递参数给内核
可隐藏此菜单
(3) 为菜单提供保护机制
为编辑菜单进行认证
为启用内核或操作系统进行认证
用户通过grub界面选择想要加载的kernel
Kernel
自身初始化:
探测可识别到的所有硬件设备
加载硬件驱动程序: (有可能借助于ramdisk加载驱动)
以只读方式挂在根文件系统;
运行用户控件的第一个应用程序: /sbin/init
执行系统初始化脚本: /etc/rc.d/rc.sysinit
(1) 设置主机名;
(2) 设置欢迎信息
(3) 激活udev和selinux;
(4) 挂在/etc/fstab文件中定义的文件系统
(5) 检测根文件系统,并以读写方式重新挂载根文件系统
(6) 设置系统时钟
(7) 激活swap设备
(8) 根据/etc/sysctl.conf文件设置内核参数
(9) 激活lvm及software raid设备
(10) 加载额外设备的驱动程序
(11) 清理操作
根据设定的运行级别,打开需要打开的服务,关闭需要关闭的服务
打印登录提示符
用户登录