开机流程与主引导分区(MBR)——鸟哥私房菜

  在前篇随笔中,已经谈到了CMOS与BIOS,CMOS是记录各项硬件参数(包括系统时间、设备的I/O地址、CPU的电压和频率等)且嵌入到主板上面的存储器,BIOS是一个写入到主板上的韧体(韧体是写入到硬件上的一个软件程序)。

  这个BIOS是在开机的时候计算机系统会主动执行的第一个程序

  接下来,BIOS会去分析计算机里面有哪些存储设备,以硬盘为例,BIOS会依据用户的设置去取得能够开机的硬盘,并且到该硬盘里面去读取第一个扇区中的主引导分区(Master Boot Record,MBR)位置。MBR这个仅有446bytes的硬盘容量里面会放置最基本的引导加载程序(Boot loader),此时BIOS就功成圆满,接下来就是MBR内的引导加载程序的工作了。

  这个引导加载程序的目的是加载内核文件,由于引导加载程序是操作系统在安装的时候所提供的,所以它会识别硬盘内的文件系统格式,因此就能够读取内核文件,接下来就是内核文件的工作了,之后就是我们所知道的操作系统的任务。

  简单的说,整个开机流程到操作系统之前的动作应该是这样的:

  1.BIOS:开机主动执行的韧体,会认识第一个开机的设备

  2.MBR:第一个可开机设备的第一个扇区内的主引导分区块,内含引导加载程序。

  3.引导加载程序:一只可读取内核文件来执行的软件。

  4.内核文件:开始操作系统的功能。

  BIOS与MBR都是硬件本身会支持的功能,至于Boot loader(引导加载程序)则是操作系统安装在MBR上面的一套软件。由于MBR仅有466bytes而已,因此这个引导程序是非常小而完美的。这个boot loader的主要任务有下面几项:

  • 提供菜单:用户可以选择不同的开机选项,这也是多重引导的重要功能呢。
  • 载入内核文件:直接执行可开机的程序区段来开始操作系统。
  • 转交其他loader:将引导加载功能转交给其他loader负责。

  上述boot loader的三条任务中,前两条很好理解,但第三条很有趣。那表示你的计算机系统里面可能具有两个以上的引导加载程序。值得特别指出的是引导加载程序(loader)除了可以安装在MBR之外,还可以安装在每个分区的引导扇区。分区还有个别的启动扇区?这个特色才能造就”多重引导“的功能。

  我们举一个例子来说明,假设你的个人计算机只有一块硬盘,里面分成四个分区,其中第一、二分区分别安装了Windows及Linux,你要如何在开机的时候选择用Windows还是Linux开机呢?假设MBR内安装的是可同时识别Windows/Linux操作系统的引导加载程序,那么整个流程如下图:

 

  在上图中,我们发现,MBR的引导加载程序提供两个菜单,菜单一(M1)可以直接加载Windows的内核文件来开机;菜单二(M2)则是将引导加载工作交给第二个分区的启动扇区。当用户在开机的时候选择菜单二时,那么整个引导加载工作就会交给第二分区的引导加载程序。当第二个引导加载程序启动后,该引导加载程序(上图中)仅有一个开机菜单,因此就能够使用Linux的内核文件来开机。这就是多重引导的工作情况。我们将上图作个总结。

  • 每个分区都拥有自己的启动扇区。
  • 图中的系统分区为第一及第二分区。
  • 实际可开机的内核文件是放置到各分区内的。
  • loader只会认识自己的系统分区内的可开机内核文件,以及其他loader而已。
  • loader可直接指向或者是间接将管理权转交给另一个管理程序。
  • 每个分区都有自己的启动扇区,loader可以安装在MBR或启动扇区上,loader只会识别自己分区内的可开机内核文件。

转载于:https://www.cnblogs.com/lifeinsmile/p/4245261.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ch12 GUI

《Head First Java 2nd Edition》 摘录 JFrame 代表屏幕上的一个窗口,可以把 buttons, checkboxes, test fields 等等界面相关的东西置于其上。它可以有一个有菜单项的菜单条。无论在哪个平台上,都有窗口图标,最小化、最大化和关闭窗口的按钮…

ARM寄存器

ARM处理器模式 用户模式(User):ARM处理器正常的程序执行状态 快速中断模式(FIQ):用于高速数据传输或通道处理 外部中断模式(IRQ):用于通用的中断处理 管理模式(Supervisor):操作系统使用的保护模式 数据访问终止模式(Abort):当数据或指令预取终止时进入该模式,可用于虚拟存储及…

修改shape数据 小数位数_【数据管理】Excel实用精华

点击上方蓝字关注星标★不迷路来源:从Excel小白到数据分析师这是一篇关于Excel中的小技巧但是都是精华,文中附有操作视屏简单易学上手快噢!01添加数据有效性_名称管理器数据有效性是对单元格或单元格区域输入的数据从内容到数量上的限制。对于…

ICMP:Internet控制报文协议

ICMP:Internet控制报文协议。是IP层的组成部分。传递差错报文或其他信息。 ICMP报文被封装在IP数据报内部:详细格式例如以下所看到的:个字段含义例如以下:8位类型。表示该ICMP报文的含义,如目的不可达、超时、请求回显…

分离圆环图显示百分比_Tableau制作圆环图

Tableau圆环图制作 声明:本文内容来源拉勾教育数据分析训练营, 封面图片来源pexels网站圆环图制作过程如下:建立饼图2. 设置记录平均值3. 在第二个字段的下拉菜单中选择双轴4. 点击右侧坐标轴,右键选择同步轴(同步轴指…

FLEX 布局

网页布局(layout)是CSS的一个重点应用。 布局的传统解决方案,基于盒状模型,依赖 display属性 position属性 float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 2009年,W3…

SpiderMonkey-让你的C++程序支持JavaScript脚本

译序 有些网友对为什么D2JSP能执行JavaScript脚本程序感到奇怪,因此我翻译了这篇文章,原文在这里。这篇教程手把手教你怎样利用SpiderMonkey创建一个能执行JavaScript脚本的C程序,并让JavaScript脚本操纵你的C程序的内部数据、操作。从这篇教…

MobX快速入门教程(重要概念讲解)

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7372119.html 一:Mobx工作流程图 二:MobX涉及到的概念 1:状态state 组件中的数据。 2:被观察observable 被observable修饰的state数据将会暴露给整个app,各观察者组件都可以…

循环结束后变回去 设置一个值_VBA掌握循环结构,包你效率提高500倍

这是系列免费教程《Excel VBA:办公自动化》,还是老规矩,看看我们走到哪里了。1.认识VBA:什么是VBA?2.这些掌握了,你才敢说自己懂VBA3.VBA变量5年踩坑吐血精华总结4.VBA中重要的强制申明,谁看谁明…

连接到kali linux服务器上的MySQL服务器错误

前言:想把数据库什么的都放在虚拟机kali Linux里,但无奈出了好多错误。 首先:可以参照上一篇文章开启kali服务器端的远程连接功能,上一篇文章 然后:使用window端的sqlyog(MySQL图形化连接工具)连…

dedecms后台怎么添加发布软件?织梦后台软件内容管理

使用织梦cms有很多的功能,其中有一个是在dedecms后台添加发布软件,然后在前台大家可以直接下载软件,在织梦cms后台怎么添加发布软件呢?下面是织梦软件内容管理的主要操作步骤。使用织梦cms有很多的功能,其中有一个是在…

301 302区别_如何正确理解301,302和canonial标签

今天我们来学习一下几个比较容易混淆的页面跳转标签,301,302,relcanonial。在谷歌SEO里面,我们比较容易常见的是第一个301,302和canonial出现的比较少,但是不代表不存在,我会尝试从以下价格方面…

为什么手机游戏手柄没有流行起来?

问答社区知乎上有人提了一个问题,“为什么手机用游戏手柄没有流行?” Ta找了不少论证:1)手机用户数量很大;2)大量用户在手机上花费最多时间的是玩游戏;3)游戏机平台(的游…

c++排序算法ppt_C/C++学习教程:C语言排序算法—插入排序算法

前言:插入排序算法是所有排序方法中最简单的一种算法,其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。直接插入排序是插入排序算法中的一种,采用的方法是:在…

python函数参数

1.位置参数 2.默认参数 指向参数为不可变对象 3.可变参数 **args 一个列表list或是元组tuple 4.关键字参数 **kw,是一个字典dict 5.命名关键字参数 *, 转载于:https://www.cnblogs.com/aliy-pan/p/5198025.html

Python 常用函数 configparser模块

使用ConfigParser模块读写ini文件 ConfigParserPython的ConfigParser Module中定义了3个类对INI文件进行操作。分别是RawConfigParser、ConfigParser、SafeConfigParser。模块所解析的ini配置文件是由多个section构成,每个section名用中括号‘[]’包含,每…

自制Unity小游戏TankHero-2D(3)开始玩起来

自制Unity小游戏TankHero-2D(3)开始玩起来 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的。仅为学习Unity之用。图片大部分是自己画的,少数是从网上搜来的。您可以到我的github页…

VirtualBox虚拟机安装CentOS 7

新建虚拟机 因为比较简单,所以对于VirtualBox就不做过多介绍了,直接下载安装即可,安装好之后打开Oracle VM VirtualBox管理器,点击新建,选择Red Hat(根据windows主机选择 32/64 bit,通常会自动识…

从C语言到C++成长经历所得的一些技巧和感悟

我介绍几个办法,学习办法,期望你能找到爱好1。必定要和喜爱编程的,或编程凶猛的,或常常编程的人,在一同,常常探讨问题!初学编程会有许多问题呈现,你自己很 难处理 c是我们必定要学的…

java基础篇---网络编程(UDP程序设计)

UDP程序设计 在TCP的索引操作都必须建立可靠地连接,这样一来肯定会浪费大量的系统性能,为了减少这种开销,在网络中又提供了另外一种传输协议---UDP,不可靠的连接,这种协议在各个聊天工具中被广泛的应用。 咋UDP开发中使用Datagram…