射门很难
引导...好吧...这确实是最难的部分。每次启动计算机时,它基本上都会重新适应。它熟悉其各个部分,并且满足每个部分都具有功能。但可以说,它每次都要从自己的引导程序中拉起自己。
在设计启动过程时,技巧是逐步启动计算机。您的启动必须快速且可靠,并且每次都必须处于完全未知的环境中。我什至不会冒险进行实模式/保护模式的对话(这并不是说我什至可以),但是启动时还有很多事情要做。每次计算机将其各种组件同化时,它就会分步进行。其中最关键的一点可能是从执行板载代码到执行磁盘上代码,换句话说,就是内核exec。这是固件(表面上)投降到操作系统的时间。
很多年前情况并非如此。它曾经是BIOS,实际上是Basic In / Out(基本输入/输出)-常规程序会调用固件来进行诸如绘制屏幕和访问磁盘之类的操作。这些被称为中断 -旧帽子可能会为他们为新的点矩阵或USR分配IRQ时经常发现的快感而记住得最好。
INT13H
BIOS作为磁盘访问服务提供的是中断(或称为INT
汇编语言)13H系列功能。今天,它们甚至在引导过程中仍用于BIOS系统,以实现从固件到磁盘的跳转。
BIOS系统将检查找到的每个磁盘的前几个字节,并寻找它识别为主引导记录(或MBR
)的模式。这是已有数十年历史的事实上的标准,包括一些写入磁盘头的原始可执行二进制文件。MBR将BIOS磁盘标记为可引导。当找到一个时,它将停止检查,因此实际上,您所获得的就是没有一些狡猾的诡计。当它找到一个时,它将其映射到内存并执行它(在实模式下,但我仍然不去那里)。
执行的MBR几乎绝对不是您的系统内核- 在该部门中512字节(给定或获取)将毫无用处。这可能是一个引导加载程序 -一种专门为克服BIOS许多寻址限制之一而设计的程序-特别是它根本不了解任何类型的文件系统。
当引导加载程序读入实际内核并在内存中执行它时(正如我们所有人每次祈祷的那样),引导加载程序可能会通过INT13H
中断调用来询问BIOS 。如果不是这样,那么许多高级引导加载程序都将以传统的方式挂载文件系统并以另一种方式执行代码-那么,如果没有一INT13H
两个引导加载程序的话,这种引导加载程序的可能性就很小。引导加载程序通常必须对自身(或自身的各个阶段)进行链加载,因为首先分配给它们的512字节甚至不适合其需求。
鸡肉和鸡蛋
我知道,所有这些都是讨论磁盘的一种round回方式,但是到此为止,应该已经很清楚地认识到,主要问题(可能称为“ 鸡与蛋”类型)正在访问包含程序指令的磁盘。关于如何访问磁盘。解决此问题的关键是固件 -甚至在EFI系统上固件也将以截然不同的方式存在-固件是否是引导链中最重要的环节,无论是否脆弱。
您会看到,一旦内核执行完毕,并且启动了用于访问和控制硬件的所有无数例程,所有这些问题都会消失(或者至少会有所改变),因为现代OS可以完全控制系统,但是直到它们执行该操作为止,系统的限制才扩展到固件允许的范围。这说明了很多-自INT13H
8086 以来,BIOS并没有太大变化。该调用是8086的原始版本。是的,有(无数)种扩展,当然还有hack,但是创新……?
越来越好
BIOS的大多数更改充其量只是绷带。它曾经是一个硬盘,必须进行物理映射- 在将数据存储到其中或从中检索数据时,会参考其几何结构的各个方面。最终,常规硬盘的大小增长到了无法承受的程度。甚至只是抽象映射对于BIOS 来说也包含太多信息。由于它只能在实模式下运行,因此每个内存寄存器的BIOS限制为1 MB。膨胀柱形图要大得多,或者使它的任何一个属性都比可以解决的位数大很多,BIOS就会字面上丢失-越界。
这个障碍已经被克服和打破了很多次。每次地图以某种更新,聪明,不太准确的方式进行抽象和编码时。因此,如今,BIOS实际上不可能精确地映射驱动器。现在,逻辑块寻址已成为事实上的标准,尽管某些圆柱体/头部/扇区(或CHS)转换仍然是必需的。主板固件失去了准确性/责任感,这些扩展已经抽象化并添加到磁盘固件职责中以填补空白。
您的问题中引用的就是这种猫猫游戏。当BIOS由于其绝对大小而无法理解某个点之外的磁盘时,那么您可能希望其在引导时为您检索的任何数据(如引导加载程序或内核)最好不要位于该点之外。这是哪里/boot
来的。
可能实际上更好
幸运的是,这些天来这些事情与BIOS的淘汰无关。它已经过去了30年,但在过去几年中已被UEFI (或EFI 2.0)标准大大取代。UEFI 从一开始就提供挂载,它在保护模式下初始化,它结合了自己的引导加载程序,它提供了可重新启动的持久性闪存变量存储,它可以处理一些zetabyte或每个磁盘的内容……其他。它远非完美,但相对于其前身而言是一个巨大的改进。
当您考虑到所有这些都必须由OS内核来处理时,甚至涉及磁盘加密或分层文件系统的专用引导程序的参数也变得平坦,并且如果在引导时提供了挂载,则您总是很清楚-着手执行(特别是考虑到Linux内核,在其默认配置下,其自身是EFI可执行的)。
因此,一个单独的/boot
分区可能不会引起您的过多关注,如果您使用的是EFI系统,则无论如何,您可能已经在EFI系统分区中有了一个模拟,因为这是引导EFI模式的必要条件。