linux系统开机流程详解

今天,咱们主要来谈谈计算机系统的启动流程,在此借用网络上的一张图来讲明整个流程:网络

一、BIOS启动blog

BIOS是写入到主板上的一个韧体(韧体就是写入到硬件上的一个软件程序)。开机的时候,BIOS是计算机系统会主动执行的第一个程序。BIOS主要的一个功能就是存储了磁盘的启动顺序,它会按照启动顺序去读取可以开机的硬盘的第一个扇区的MBR信息进程

二、读取MBR内存

磁盘的第一个扇区(大小为512bytes)主要记录两个信息:主引导分区(MBR)和分区表。其中,MBR大小为446bytes用于存储引导加载程序(BootLoader),分区表大小为64bytes记录硬盘分区状态,最后2bytes用于MBR的有效性检查。BIOS启动的目的就是让MBR中引导加载程序启动it

三、引导加载程序(Boot loader)登录

目前经常使用的引导加载程序就是grub,它是一支可读取内核文件并让其执行的软件。grub程序会根据/boot/grub/grub.conf文件查找Kernel的信息,而后开始加载Kernel程序,当Kernel程序被检测并在加载到内存中,grub就将控制权交接给了Kernel程序百度

四、Kernel加载软件

内核(Kernel)是Linux系统最主要的程序,它的做用就是进行硬件检测并加载驱动程序。因为Kernel为了精简且以压缩的文件形式存储在硬盘中,故只保留了最基本的模块,并无各类硬件的驱动程序,也就没法识rootfs所在的设备,故产生了initrd这个文件。该文件是在安装系统时产生的,是一个临时的根文件系统(rootfs)。它装载了必要的驱动模块,当Kernel启动时,能够从initrd文件中装载驱动模块,直到挂载真正的rootfs,而后将initrd从内存中移除。硬件驱动成功后,Kernel会主动调用init进程硬件

五、启动Init进程二维码

init是系统启动的第一个进程,是全部进程的父进程,打个比喻它就是女娲的级别,全部的人类(进程)都是它造出来的,全部干这行的同窗们在kill进程的时候千万不要执行kill -9 init,你干掉了造物主,你说会是什么后果,那就是本身做死。init会根据/etc/inittab中设定的动做进行脚本的执行,init执行第一个脚本/etc/rc.d/rc.sysinit来准备软件执行的操做环境(如网络、时区、设定主机名,挂载文件系统等)。系统的操做环境准备好以后,接下来就是系统服务的启动

六、根据Run-level 进行服务启动

runlevel,系统运行级别(Linux系统有7个级别,哪7个请自行百度),不一样的级别会启动的服务不同,init会根据定义的级别去执行相应目录下(/etc/rc.d/rcN.d)的脚本,该目录下的脚本只有K*和S*开头的文件,K开头的文件为开机须要执行关闭的服务,S开头的文件为开机须要执行开启的服务

七、用户自定义开机启动程序

完成默认runlevel指定的各项服务的启动后,系统最后会自动执行/etc/rc.d/rc.local这个脚本(该脚本的做用请看大标题),至此,系统启动完成,你能够看到登陆界面啦

我今天才知道,我之因此漂泊就是我尚未成为大侠,扫二维码关注我哦

相关文章
相关标签/搜索