但是,似乎很少通过这种方式启动操作系统 。如果操作系统确实安装在扩展分区,一般采用下一种方式启动 。
情况C:启动管理器
在这种情况下,计算机读取”主引导记录”前面446字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的“启动管理器”(boot loader),由用户选择启动哪一个操作系统 。
Linux环境中,目前最流行的启动管理器是Grub 。
Boot Loader 就是在操作系统内核运行之前运行的一段小程序 。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备 。
Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader 。
我们以Grub为例来讲解吧,毕竟用lilo和spfdisk的人并不多 。
文章插图
为什么这么复杂早期的操作系统并没有那么复杂,当然bootload也没有那么多功能,但是如今我们的操作系统越来越复杂,bootload也越来越庞大,而且如今在一台电脑上安装多系统变得那么平常,因此之前简单的bootload已经无法满足这些功能 。
BIOS和MBR都是硬件本身会支持的功能,至于Boot Loader则是操作系统安装在MBR上面的一套软件 。由于MBR仅有446bytes而已,因此这个引导加载程序是非常小而完美的 。这个BootLoader的主要任务如下
- 提供菜单:用户可以选择不同的开机选项,这也是多重引导的重要功能
- 载入内核文件:直接指向可开机的程序段来开始操作系统 。
- 转交其他Loader:将引导加载功能转交给其他loader负责
举一个例子来说,假设你的个人计算机只有一块硬盘,里面分成4个分区 。其中第一,二分区分别安装了windows及Linux,你要如何在开机的时候选择用Windows还是Linux开机呢?假设MBR内安装的是可以同时识别Windows和Linux操作系统的引导加载程序,那么整个流程如下
做个总结就是这样:
- 每个分区都有自己的启动扇区
- 系统分区为第一及第二分区
- 实际可开机的内核文件是放置到各分区内的
- loader只会认识自己的系统分区内的可开机内核文件,以及其他的Loader而已
- loader可直接指向或者是间接将管理权交给另一个管理程序
现在想一下,为什么人家常说:”如果要安装多重引导,最好先安装Windows再安装Linux呢“?加载操作系统内核用户选择要加载的内核之后,次引导加载程序(GRUB)就会根据/boot/grub.conf配置文件中所设置的信息,从/boot/所在的分区上读取Linux内核映像,然后把内核映像加载到内存中并把控制权交给Linux内核 。
这是因为Linux在安装时,你可以选择将引导加载程序安装在MBR或个别分区的启动扇区,而且Linux的Loader可以手动设置菜单,所以你可以在Linux的Boot Loader里面加入Windows开机选项
Windows在安装的时候,他的安装程序会主动覆盖掉MBR以及自己所在分区的启动扇区,你没有选择的机会,而且他没有让我们自己选择菜单功能
linux内核获得控制权之后开始干自己的事
- 检测硬件
- 解压缩自己并安装必要驱动
- 初始化与文件系统相关的虚拟设备,LVM或RAID
- 装载根文件系统,挂在根目录下面
- 完成之后,linux在进程空间里面加载init程序,下面轮到init干活
系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立 。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了 。
启动第五步 用户层init依据inittab文件来设定运行等级
推荐阅读
- PHP 开源工作流引擎 V6.0.0 正式版发布
- 鸿蒙APP开发:如何实现“百度地图”的显示?需要3项认真操作才行
- linux-centos网络配置bond
- 国三车能开到什么时候?
- 国产Linux系统可爱鱼CutefishOS 0.7 Beta发布
- 这样清理C盘不影响系统,电脑一下子多了30G,运行忒流畅
- App制作的流程是什么?如何制作App开发流程?
- Java业务开发常见错误
- 小白如何看出计算机操作系统是否开启勒索病毒危险端口
- 小白是如何让Kali Linux操作系统从U盘成功启动