经过老师的讲解以及查阅资料后,现对Linux系统启动做以浅析,仅是个人理解。
主要的步骤有以下几步:
第一步:Power On。用户按下电源开关的那一瞬间,叫Power On阶段 。在这个阶段,BIOS检查电脑上一些硬件的状态及存储在CMOS中的设置。CMOS是南桥里面的一个特殊区块,用来让BIOS存储用户设置(进BIOS中看到的选项)。北桥,南桥是主板上的芯片组,AMD的cpu不使用此种架构,北桥控制CPU和内存,南桥负责PCI,USB,VGA等外围设备。
第二步:BIOS加电自检。Power On阶段一开始,会进入BIOS的激活流程,BIOS是进本输入/输出系统的缩写,是在电脑没有访问磁盘前决定机器基本功能的软件,包含了控制键盘,显示屏,驱动器的代码。自检的作用是负责检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。例如,最常见的是内存松动的情况,BIOS自检阶段会报错,系统就无法启动起来。
BIOS根据我们设置的启动顺序来启动系统,比如(软盘、硬盘、光盘等),以硬盘为例,BIOS读取硬盘第一个扇区,读取并执行MBR中的程序。
BIOS作用主要是:1>自检和初始化,检测主板硬件并通知开始执行。2>设置中断。3>加载操作系统,由BIOS转交给引导扇区,再有引导扇区跳到各分区激活相应操作系统。
第三步:读取MBR。MBR(Master Boot Record,主引导记录),在硬盘的第一个扇区,上一阶段BIOS将MBR加载到内存中执行。MBR共512Byte,分成三个部分BootLoader,Partition table和Magic Number。BootLoader是MBR用来存储开机管理程序的地方(grub,lilo等)。BootLoader执行加载扇区和志向kernel的功能。Magic Number永远填入"55AA",让BootLoader中的开机管理程序确认这个地方就是MBR。Centos6.6中BootLoader是Grub。
加载BootLoader。 当BIOS找到硬盘上的MBR后,控制权就交由BootLoader。GRUB是一个强悍的开机管理程序,支持多重开机管理。/boot/gurb目录可看到几个系统文件,主要是stage1,stage1_5,stage2这三种类型。stage1负责BIOS交给BootLoader时,载入开机管理程序,linux中是GRUB。stage1.5识别不同类型的文件系统,比如加载e2fs_stage1_5以后,就可以识别ext2格式。当stage1.5加载后,就赋予GRUB访问文件系统目录的权力,也就是说在开始找不到stage2,可以从文件系统中找到stage2的位置。stage2是GRUB最核心程序,操作系统的加载,新增参数,修改选项都由stage2负责。因此stage2不会太小,不可能放进MBR,只能放到文件系统中。而stage1.5提供识别不同文件系统的能力,真是巧妙的设计。当stage2执行时,会从现有文件系统中加载设置文件,/boot/grub/grub.conf配置文件。
第四步:内核启动。
根据/boot/grub/grub.conf配置文件中,根据内核路径,将内核解压至内存,至此,内核获得系统控制权,BootLoader退出。内核接管以后,会执行以下几个过程:
1>设备探测
2>驱动初始化
3>以只读方式挂载根文件系统(为了安全起见)
4>装在第一个进程init(PID:1)
第五部:初始化系统。 执行/sbin/init 最主要的功能就是准备软件执行的环境,包括系统的主机名、网络设定、语言、文件系统格式及其他服务的启动。所有动作都依据/etc/inittab来规划。
执行系统初始化脚本/etc/rc.d/rc.sysinit)对系统进行基本的配置,以读写方式挂载根文件系统及其它文件系统,到此系统算是基本运行起来了,后面需要进行运行级别的确定及相应服务的启动。
执行/etc/rc.d/rc脚本。该文件定义了服务启动的顺序是先K后S,而具体的每个运行级别的服务状态是放在/etc/rc.d/rc*.d(*=0~6)目录下,所有的文件均是指向/etc/init.d下相应文件的符号链接。rc.sysinit通过分析/etc/inittab文件来确定系统的启动级别,然后才去执行/etc/rc.d/rc*.d下的文件。
执行用户自定义引导程序/etc/rc.d/rc.local。其实当执行/etc/rc.d/rc3.d/S99local时,它就是在执行/etc/rc.d/rc.local。
第六步:登录。完成了系统所有的启动任务后,linux会启动终端或X-Window来等待用户登录。tty1,tty2,tty3...这表示在运行等级1,2,3,4的时候,都会执行"/sbin/mingetty"