一.BIOS
🐒BIOS是什么
BIOS(Basic Input Output System)译为基本输入输出系统。它是一组固化到计算机内主板上一个ROM芯片上的程序 ,保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,为计算机提供最低级的、最直接的硬件控制。和其它程序不同的是,BIOS是储存在BIOS芯片中的,而不是储存在磁盘中,因此它属于主板的一部分。大家有时就称呼它一个既不同于软件也不同于硬件的名字“Firmware”(固件)。一般而言,BIOS ROM芯片是主板上唯一贴有标签的芯片,上面印有“BIOS”字样, 虽然有些主板上的BIOS 芯片没有明确印出“BIOS”,但凭借外贴的标签也能很容易地将它认出,BIOS ROM芯片在主板上很引人注目(如下图)。 BIOS是一种程序,其内容是软件,由生产厂商在出厂时用烧录的形式集成在主板上的一块ROM芯片中,因此它的表现形式为硬件。通常所说的BIOS芯片实际上指的是存储BIOS的ROM芯片,ROM只是BIOS的载体。 为了在关机后使 BIOS 不会丢失,早期的 BIOS 存储在ROM中,不能进行写入操作,并且其大小不会超过 64KB;从奔腾时代开始,目前的 BIOS 大多有 1MB 到 2MB,使用 闪存(Flash ROM)来作为BIOS的存储芯片,支持写操作,这也为刷写BIOS提供了方便。
🐕BIOS如何运行
BIOS是连接软件与硬件的一座“桥梁”,是计算机的开启时运行的第一个程序,主要功能是为计算机提供最底层的、最直接的硬件设置和控制。因此,硬件系统一上电或重置,处理器要执行第一条指令的地址会被定位到BIOS存储器,初始化开始运行。在X86系统中,CPU加电后跳转至BIOS的固定物理地址0xFFFF0。打开计算机电源,计算机会首先加载BIOS,然后它会对电脑的硬件设备进行完全彻底的检验和测试。如果发现问题,分两种情况处理:严重故障停机,不给出任何提示或信号;非严重故障则给出屏幕提示或声音报警信号,等待用户处理。如果未发现问题,,屏幕就会显示出CPU、内存、硬盘等信息。BIOS在执行完硬件自检和初始化后,会将自己复制到从 0xA0000 开始的物理内存中并继续执行。将硬件设置为备用状态,然后启动操作系统,把对电脑的控制权交给用户。 BIOS的主要作用有三点:
1.自检及初始化程序
自检及初始化程序又分为三个部分:
-
加电自检(POST) 功能是检查计算机硬件是否良好,自检中如发现有错误,将按两种情况处理:对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;对于非严重故障则给出提示或声音报警信号,等待用户处理。 -
初始化 创建中断向量、设置寄存器、对一些外部设备进行初始化和检测等,其中很重要的一部分是BIOS设置,主要是对硬件设置的一些参数,当计算机启动时会读取这些参数,并和实际硬件设置进行比较,如果不符合,会影响系统的启动。 -
引导程序 功能是引导Dos或其他操作系统 ,此时会在硬盘读取引导记录,然后把计算机的控制权转交给引导记录,由引导记录把操作系统装入电脑,在电脑启动成功后,BIOS的这部分任务就完成了。
2.程序服务处理
BIOS直接与计算机的I/O设备(Input/Output,即输入/输出设备)打交道,通过特定的数据端口发出命令,传送或者接受各种外部设备的数据,实现软件程序对硬件的直接操作。
3.硬件中断处理
开机时BIOS会告诉CPU各硬件设备的中断号,当用户发出使用某个设备的指令后,CPU就根据中断号使用相对应的硬件完成工作,再根据中断号跳回原来的工作。
BIOS : 主要就是负责 在开机时做硬件启动和检测等工作,并且担任操作系统控制硬件时的中介角色,
传统BIOS传输模式启动顺序:开机→BIOS初始化→BIOS自检→引导操作系统→进入系统。
🦉BIOS的缺点
- 开发效率低:大部分BIOS代码使用汇编开发,开发效率不言而喻。汇编开发的另一个缺点是使得代码与设备的耦合程度太高,代码受硬件变化的影响大。
- 性能差:BIOS基本输入/输出服务需要通过中断来完成,开销大,并且BIOS没有提供异步工作模式,大量的时间消耗在等待上。
- 功能扩展性差,升级缓慢:BIOS代码采用静态链接,增加硬件功能时,必须将16位代码放置在0x0C0000~0x0DFFFF区间,初始化时将其设置为约定的中断处理程序。而且BIOS没有提供动态加载设备驱动的方案。
- 安全性:BIOS运行过程中对可执行代码没有安全方面的考虑。
- 不支持从硬盘2TB以上的地址引导:受限于BIOS硬盘的寻址方式,BIOS硬盘采用32位地址,因而引导扇区的最大逻辑块地址是232(换算成字节地址,即232×512=2TB)
由于这些问题的存在,UEFI出现了。
二.UEFI
🐉什么是UEFI
UEFI,全称Unified Extensible Firmware Interface,即“统一的可扩展固件接口”,是一种详细描述全新类型接口的标准,是适用于电脑的标准固件接口,旨在代替BIOS。UEFI旨在提高软件互操作性和解决BIOS的局限性。作为传统BIOS的继任者,UEFI拥有前辈所不具备的诸多功能,比如图形化界面、多种多样的操作方式、允许植入硬件驱动等等。这些特性让UEFI相比于传统BIOS更加易用、更加多功能、更加方便。BIOS只能在16位模式下运行,而UEFI可以在32位或64位模式下运行,并且具有比BIOS更多的可寻址地址空间,这意味着引导过程更快。这也意味着UEFI设置屏幕可以比BIOS设置屏幕更光滑,包括图形和鼠标光标支持。但是这不是强制性的,许多pc机仍然带有文本模式的UEFI设置界面,这些界面看起来和工作起来都像一个旧的BIOS设置屏幕。老一点的机器都是使用BIOS主板,现在大部分新机器都是采用UEFI主板,UEFI采用了向后兼容,所以BIOS切换为UEFI不可以,而UEFI切换为BIOS是可以的。UEFI还包含了其他功能,它支持安全引导,这意味着可以检查操作系统的有效性,以确保没有恶意软件篡改引导过程。它可以在UEFI固件本身中支持联网特性,这有助于远程故障排除和配置。UEFI也不仅仅是BIOS替换。UEFI本质上是一个运行在PC固件之上的微型操作系统,它可以做的比BIOS多得多。它可以存储在主板的闪存中,也可以在启动时从硬盘或网络共享加载。一般的UEFI系统仅能识别FAT32,不同于BIOS只能识别固定位置的磁盘引导块。这意味着只要将引导程序放到FAT32分区里,UEFI系统就能通过分区表的指引找到这个保存着引导程序的FAT32分区。UEFI系统是由模块化的C语言程序写出来的,所以通过添加或修改程序模块就能获得更多的功能。例如支持更多的文件系统,图形界面,甚至能使用浏览器浏览网页。
UEFI模式启动顺序:开机→UEFI初始化→引导操作系统→进入操作系统启动。速度相对lagacy模式要更快。
三磁盘分区表
在安装win7/win8/win10系统时,有的时候会出现提示磁盘具有MBR分区表,EFI无法正常安装Windows系统之类的情况,如下图: 那么,磁盘MBR分区表和GPT分区表两者之间有什么区别? 我们都知道,如果电脑中安装了一块新的硬盘。这块物理硬盘是无法被直接使用的,而是需要在硬盘上划分出分区,在划分好的分区上创建FAT或NTFS等文件系统,这块硬盘才能够被正常使用。当然,这块物理硬盘可以划分成多个分区,这取决于使用者的需求而定,有些人喜欢分三个区,有些人喜欢分两个区。那,怎么把硬盘分成多个区?这就要使用到分区表了,分区表定义与保存了硬盘的分区信息, 分区表位于硬盘开头的一段特定的物理空间内,操作系统等软件通过读取分区表内的信息,就能够获得该硬盘的分区信息。 如上图所见,硬盘的空间会划分为C、D、E等3个分区,而这3个分区内的信息将在硬盘最开头的分区表中保存着。分区表在Windows系统中则有2种类型的分区方案: MBR与GPT之分。
硬盘必须要分区之后才能使用的原因有如下两点:
- 数据的安全性: 每个分区的数据是分开的,所以,当你需要将某个分区的数据重整时,例如你要将计算机中Windows的C盘重装系统时, 可以将其他重要数据移动到其他分区,那么C盘重装系统并不会影响到D盘。
- 系统的性能考虑: 由于分区将数据集中在某个柱面的区段,当有数据要读取自该分区时, 磁盘只会查找对应的柱面范围,由于数据集中,将有助于数据读取的速度与性能。
🦆MBR分区表
MBR的意思是“主引导记录”,是IBM公司早年间提出的。它是存在于磁盘驱动器开始部分的一个特殊的启动扇区。这个扇区包含了已安装的操作系统系统信息,并用一小段代码来启动系统。如果MBR的信息损坏或误删就不能正常启动系统,这时候你就需要找一个引导修复软件工具来修复它就可以了。Linux系统中MBR通常会是GRUB加载器。当一台电脑启动时,它会先启动主板自带的BIOS系统,BIOS加载MBR,MBR再启动Windows,这就是mbr的启动过程。 在MBR磁盘的第一扇区还会保存着电脑系统的启动代码以及硬盘分区表,而在MBR中,分区表的大小是固定不变的,一共可容纳4个主分区信息。MBR分区表中支持的硬盘最大分区容量仅为2TB,对2TB以上容量的物理硬盘,不适合使用MBR分区方案。
🦔GPT分区表
GPT是GUID磁碟分割表的缩写,主要的意思是全局唯一标识磁盘分区表,这是实体硬盘的分区表的结构布局的标准。 在GTP磁盘的第一个数据块中同样有一个与MBR(主引导记录)类似的标记,叫做PMBR。PMBR的作用是,当使用不支持GPT的分区工具时,整个硬盘将显示为一个受保护的分区,以防止分区表及硬盘数据遭到破坏。GPT的分区方案相对MBR来说更为先进,这是有原因的,主要是GPT分区表头中可自定义分区数量的最大值,也就是说GPT分区表的大小不是固定的。在Windows中,微软设定GPT磁盘最大分区数量为128个。另外,GPT分区表则能够识别2TB以上的硬盘空间。除此之外,GPT分区方案在硬盘的末端还有一个备份分区表,保证了分区信息不容易丢失。目前新出的电脑配置的硬盘基本上都使用了GPT分区方案。任何一块GPT磁盘上都有一个MSR分区,大小随硬盘总容量而定,一般不超过128MB。这个分区不能被用户直接使用,它的用途是防止将一块GPT磁盘接到老系统(如XP)中,被当作未格式化的空硬盘而继续操作(例如重新格式化),导致数据丢失。GPT磁盘上有了这个分区,当把它接入XP等老系统中,会提示无法识别的磁盘,也无法进一步操作。MBR分区表最多只能支持4个主分区或三个主分区+1个扩展分区(逻辑分区不限制),GPT分区表在Windows系统下可以支持128个主分区。
🦀BIOS + MBR
BIOS是一个写入到主机板上的一个程序,是开机时电脑系统会主动执行的第一个程序。接下来BIOS会去分析电脑里面有哪些储存设备,以硬盘为例,BIOS会依据使用者的设定去取得能够使用的硬盘,并且到该硬盘里面去读取第一个磁区的MBR位置。MBR这个仅有446B的硬碟容量里面会放置最基本的硬盘引导程序(硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序。),此时BIOS就功成圆满,而接下来就是MBR内的开机管理程序的工作了。BIOS引导windows操作系统时,是通过一个活动的主分区下的bootmgr(启动管理器)文件导入根目录下boot文件夹里的BCD(启动设置数据)文件, 然后BCD文件根据自身的配置内容加载系统启动文件winload.exe(位置:根目录\Windows\system32\winload.exe)来启动系统。
BIOS→MBR→“活动的主分区”→\bootmgr→\Boot\BCD→\Windows\system32\winload.exe
当引导程序运行后,操作系统内核就被加载运行,完成从BIOS 程序中接手的引导流程,整体流程如下图:
🐙UEFI + GPT
同上一种情况相对应,新式的UEFI主板,采用了UEFI方式,那么,需要给硬盘采用GPT分区方案。 UEFI BIOS引导windows系统时,是通过一个FAT格式分区下的bootmgfw.efi文件来导入BCD文件,然后BCD文件根据自身的配置内容加载系统引导文件winload.efi:
UEFIBIOS→EFI系统分区(FAT格式的分区)→\efi\Microsoft\boot\bootmgfw.efi→efi\Microsoft\BCD→\Windows\system32\winload.efi
整个UEFI 的启动详细流程描述如下:
- 开机后,固化在
ROM 里的UEFI BIOS 就会被加载到内存运行。 UEFI BIOS 将引导EFI 系统进行运行。- 在
EFI 系统启动后,GUID 分区表就会被识别,之后EFI 系统就会通过.efi 文件启动Boot Loader 程序加载操作系统内核。 整体流程如下图:
使用UEFI启动的系统,必须要有一个ESP(FAT32格式)分区供UEFI使用,这是因为,不管是使用grub(或者其他比如微软windows的引导器)来引导操作系统还是UEFI直接引导linux内核镜像, 都需要有ESP分区用于存放引导文件(BIOS里面的UEFI只认这个分区,如果走UEFI引导,也必须从这个分区加载引导文件),UEFI标准定义了默认的引导文件如下
esp/EFI/BOOT/BOOTx64.EFI 64位系统的引导文件
esp/EFI/BOOT/BOOTIA.EFI 32位系统的一道文件
有些出厂预装win8系统的电脑下将该FAT分区称之为ESP分区或EFI分区,ESP和EFI分区一般都是隐藏的FAT分区, 可以通过DG分区工具来创建ESP分区,还可以用DG为该分区添加盘符让其在资源管理器下显现出来。可见,UEFI+GPT模式引导windows系统时,并不需要mbr主引导记录,也不需要活动分区, 只需要你一个存放了引导启动文件的fat格式分区就可以了,这个fat分区当然也可以是U盘等外接USB设备了。UEFI还有一个重要特性就是在UEFI下运行应用程序,这类程序文件通常以efi结尾。利用UEFI可以直接识别FAT分区中的文件,又有可直接在其中运行应用程序。我们就可以将Windows安装程序做成efi类型应用程序,然后把它放到任意FATA分区中直接运行即可。
四.磁盘文件系统
操作系统中负责管理和存储文件信息的软件结 构称为文件管理系统,简称文件系统。 如果没有文件系统,那么我们只能以0和1二进制的方式来访问磁盘上的内容不能以文件的方式来访问磁盘数据。所以不管是MBR还是GPT,在分好区以后都需要将分区格式化为文件系统。这个文件系统就是所谓的分区格式。目前来说windows下最推荐的文件系统是NTFS,MAC下最推荐APFS,Linux下ext4。
🐸Windows下常见的文件系统
- FAT32:(最大分区128G,单文件最大4G)。
- exFAT:(最大分区8T,单文件最大4G)。
- NTFS : 该文件系统时微软的专利。
🐺Mac下常见的文件系统
- HFS: 分层文件系统(Hierarchical File System,HFS)是一种由苹果电脑开发,并使用在Mac OS上的文件系统。
- HFS+:
HFS+来源于UNIX,但是又不用于UNIX,它增加了许多新的特性,同时也有许多不同于Windows、UNIX等系统的概念。HFS+是苹果公司为替代他们的分层文件系统(HFS)而开发的一种文件系统。它被用在macintosh电脑(或者其他运行MacOS的电脑)上。它也是iPod上使用的其中一种格式。 - APFS: APFS是Apple FileSystem的简称,是苹果公司发布的新的文件系统,替代目前所使用的HFS+文件系统。该系统的核心为加密功能,其将为苹果旗下的每款设备提供统一的加密方法。该系统包含有多密钥加密功能,内置有针对每个文件的密钥,其针对敏感元数据也都有独立的密钥。
🐏Linux下常见文件系统
- Ext2 EXT2第二代扩展文件系统(英语:second extended filesystem,缩写为 ext2),是LINUX内核所用的文件系统。
- Ext3 EXT3是第三代扩展文件系统(英语:Third extended filesystem,缩写为ext3),是一个日志文件系统,常用于Linux操作系统。它是很多Linux发行版的默认文件系统。
- Ext4 EXT4是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是Linux系统下的日志文件系统,是ext3文件系统的后继版本。
部分参考资料:
科普–常见的磁盘文件系统
EFI启动,真没那么复杂
|