首页 > 代码库 > Linux是怎样启动的
Linux是怎样启动的
今天早上在上操作系统课的时候,老师有提到计算机从按下开关键到最后由操作系统完全接管的整个过程。不过讲课毕竟是十分抽象的,因为之前自己也看过这方面的内容,但是老是记不住,所以今天晚上就花了点时间,把《鸟哥的Linux私房菜》的相关部分又看了一遍。下面就把核心流程给过一遍吧!
我们都知道,操作系统对计算机的管理起到了决定性的作用。可是,操作系统在关机状态下存在磁盘中的,而运行又是在内存中运行的。那么可以想象的是,在刚刚按下开机键时,内存中是不存在操作系统的。这时候一个非常自然的想法,就是要将硬盘中的操作系统加载到内存中。可此时又是谁来管理调度这一切的呢?
这里我们就不得不提到一个叫做BIOS(basic input output system)的东西了,翻译成中文就是基本输入输入系统。它其实是一段烧录到主板的ROM芯片上的一段程序。开机时首先读取的就是BIOS程序。然后BIOS程序还会加载一个叫CMOS的东西,用来取得主机的硬件配置。然后它还会进行自我检测。接下来就是最最关键的部分了。因为计算机最终肯定是由操作系统控制的,那么我们怎么找到操作系统呢?最后BIOS会找到第一个可启动的设备,一般是磁盘。然后读取该磁盘的第一个扇区中一个叫MBR(MasterBoot Record)的东西,即主引导分区块。接下来我们就来谈谈这个MBR。
MBR其实就是硬盘的第一扇区上一个大小为446byte的磁盘空间。其中可以用来存放引导加载程序(Boot loader)。这里需要注意的是,我们都知道一块磁盘上面往往可以装多个操作系统,这时我们就要对磁盘进行分区,然后不同的分区里可以装不同的操作系统。而每个操作系统系统的Boot loader都是不一样的。所以通常在每个磁盘分区的开始也会有一个对应的引导扇区(Boot Sector)。因此为了满足多重引导的需求,MBR中的Boot loader往往提供如下三种功能:
1.提供菜单:让用户可以选择不同的开机选项
2.载入内核文件:即直接把该引导程序对应的操作系统内核加载
3.转交给其他loader:就是把控制权转交给其他分区的loader,然后加载相应的内核
到此为止,我们就能用boot loader来读取内核文件了。然后Linux就会将内核文件解压缩到内存中,然后利用内核的功能检测与测试周边设备。注意,虽然开始BIOS已经进行过一次硬件检测了,但是Linux内核不一定会使用。此时,内核才真正开始接管BIOS后的工作了。
最后,在内核进行完硬件检测和驱动的加载之后会主动调用/sbin/init生成传说中的1号进程 init 。而init通过一系列的配置文件对系统的主机名,网络设置,语系处理,文件系统格式以及其他的服务进行启动,最终完成对软件执行环境的构建。由于不同操作系统的配置文件差别较大,这里就不赘述了。总之,计算机从开机到由操作系统进行完全控制的过程基本上就是这样的啦。
参考书籍:《鸟哥的Linux私房菜》
Linux是怎样启动的