操作系统启动过程

操作系统启动过程

先过一遍阮一峰的计算机是如何启动的?
知道了BIOS,MBR,GRUB,kernel,init

BIOS

BIOS中包含两块

  1. POST
    1. 硬件自检,检查CPU,内存,显卡,鼠标外设,所以这个不是加载到内存中的。
  2. 启动顺序
    1. 决定从软盘,CD-ROM,硬盘或网络启动。

MBR

从例如只检测到硬盘,然后动硬盘的第一个001扇区读取 512B的数据,这就是MBR。
3部分结构,

  1. 那第一部分的GRUB和装在/boot/下有什么区别。
  2. 第二部分就是分区表
  3. 第三部的是在BIOS中启动顺序用到的

GRUB

用grub来决定进入那个内核,有1 1.5 2 三个阶段


从 BIOS POST => MBR => GRUB => kernel => init => runLevel

linux.png

  1. BIOS: POST and gives control the BOOT Device and loads MBR (在选择的设备比如硬盘的第一个扇区,512B的MBR)
  2. MBR executes the Boot Load
  3. Grub Menu List
  4. Grub loads Kernel and Initrd
  5. Initrd initial root filesystem
  6. Kernel loads the actual root files
  7. /sbin/init is executed
  8. checks runlevel in /etc/inittab
  9. runs all the files present in /etc
  10. 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