当前位置:首页 > 操作系统 > 正文内容

OS开发笔记(2)——GRUB发动流程

邻居的猫1个月前 (12-09)操作系统605

GRUB怎样打破实方式的约束

BIOS与MBR引导机制

BIOS会在发动时,查看逻辑0扇区(即硬盘的榜首个扇区)的结束是否存在标志 0x55, 0xaa,以此判别该扇区是否可引导。依照传统的MBR(Master Boot Record)引导流程,逻辑0扇区包括一个特别的引导程序。这个程序的使命是查看坐落逻辑0扇区偏移 0x1BE 处的分区表。分区表最多能够记载四个分区,这也是为什么 MBR 分区的硬盘只能有四个主分区的原因。

在分区表中,每个分区能够有一个“可引导”符号。MBR引导程序会依据某种规矩选取一个被符号为“可引导”的分区,将该分区的榜首个扇区(称为VBR,Volume Boot Record)加载到内存中(一般加载到地址 0x7C00 以确保兼容性)。随后,程序跳转到VBR,由VBR担任加载并发动该分区中的操作体系。

MBR和VBR的局限性

但是,MBR和VBR的巨细都仅有一个扇区,也便是512字节,这对略微杂乱的引导程序来说现已不够用。此外,在16位实方式下,CPU的寻址规模最大只要1MB(实践可用空间还小于1MB,需考虑BIOS和其他数据占用)。因而,关于体积超越1MB或需求加载到1MB以上地址的内核文件,MBR和VBR的才能缺乏。

16位的寻址约束

切换到保护方式尽管能够打破1MB寻址规模的约束,但由于仅实方式支撑调用BIOS功用,在保护方式下无法直接调用BIOS来完结硬盘驱动和文件体系管理。这就需求自行完结这些功用,极大地增加了引导程序的杂乱度。为了防止在引导内再完结一边磁盘驱动和文件体系,我挑选了运用GRUB。

GRUB的解决方案

在GRUB中,将被称为stage1.5阶段的GRUB中心加载器(从磁盘发动是diskboot,从光盘是cdboot等等)寄存在寄存磁盘中的某个闲暇空间(默许是MBR后的一个扇区),一个定制的MBR引导程序(如 boot.S,编译后生成 boot.img)担任加载这一阶段的程序到内存中。

这时候就又呈现一个问题,怎样寄存GRUB中心呢?GRUB供给了两种方法:

  1. 运用磁盘未分配空间
    GRUB将包括中心功用的 core.img 写入硬盘上未被分区表区分的闲暇空间。
  2. 依据文件体系引导
    core.img 被当作一个一般文件存储在文件体系中,由MBR程序加载到内存中。

GRUB怎样找到core.img

假如选用依据文件体系的方法,问题在于MBR程序怎样知道 core.img 的具体方位。GRUB 的core.img 是经过grub-mkimage指令生成的,它由多个部分组成,包括:

  • diskboot:担任从磁盘加载 core.img 的榜首部分,巨细为一个扇区。
  • decompresser:用于解压 grub-core,以支撑紧缩后的存储方式。
  • core:中心程序模块,能够依据需求加载各种功用扩展(grub模块)。

当履行 grub-install 时,东西会主动将 diskboot 的方位写入 boot.img 中。diskboot 的结尾包括一个 blocklist,用于记载 grub-core 的各个部分在磁盘上的方位。这样,diskboot 能够顺畅加载完好的 grub-core

GRUB的引导进程

综上,GRUB 2 的发动流程如下:

  1. MBR引导
    BIOS 加载 MBR(即 boot.img),运转其间的引导程序。
  2. 加载diskboot
    MBR 程序依据记载的方位加载 diskboot
  3. 加载并解压grub-core
    diskboot 依据 blocklist 读取并加载 grub-core,必要时解压。
  4. 发动操作体系内核
    grub-core 终究加载方针操作体系的内核文件,并完结引导。

感触

略微深化了解过GRUB后,感觉像是迷你内核相同,功用这么丰厚。

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=585

分享给朋友:

“OS开发笔记(2)——GRUB发动流程” 的相关文章

linux查看nginx安装目录,liunx怎么查看nginx安装目录

linux查看nginx安装目录,liunx怎么查看nginx安装目录

在Linux系统中,你可以使用以下命令来查找Nginx的安装目录:```bashwhereis nginx```这个命令会显示Nginx的二进制文件、源代码、配置文件和手册页的路径。通常,Nginx的二进制文件安装在`/usr/sbin/nginx`,配置文件在`/etc/nginx/nginx.c...

macos截图,macos系统下载官网

在MacOS上截图有几种不同的方法,以下是几种常用的方式:1. 全屏截图:按下`Shift Command 3`。截图会自动保存到桌面。2. 自定义区域截图:按下`Shift Command 4`,然后拖动鼠标选择要截图的区域。截图会自动保存到桌面。3. 窗口截图:按下`Shif...

linux查看java安装路径,linux下java编程

linux查看java安装路径,linux下java编程

在Linux系统中,你可以使用以下命令来查看Java的安装路径:```bashwhich java```这个命令会返回当前系统中Java命令的路径。如果你安装了多个版本的Java,并且设置了`JAVA_HOME`环境变量,你可能需要检查该环境变量的值来确定安装路径:```bashecho $JAVA...

windows7系统修复,轻松解决常见问题

windows7系统修复,轻松解决常见问题

Windows 7 系统修复是一个比较复杂的过程,具体步骤如下:1. 准备启动盘: 首先,你需要准备一个 Windows 7 的启动盘。这可以通过下载 Windows 7 的 ISO 文件并使用工具(如 Windows USB/DVD Download Tool)创建启动盘来完成。2. 启动到修复模...

电脑windows无法启动怎么修复,电脑Windows无法启动怎么办?全面解析修复方法

1. 安全模式启动: 在电脑启动时,连续按 F8 或 Shift F8 键(具体按键可能因不同电脑而异),进入高级启动选项。 选择“安全模式”或“带网络的安全模式”启动,检查系统是否可以正常工作。 如果可以,尝试更新驱动程序、运行系统文件检查(sfc /scannow)或进行系...

Windows驱动开发技术详解,windows驱动开发技术详解 pdf下载

Windows驱动开发技术详解,windows驱动开发技术详解 pdf下载

《Windows驱动开发技术详解》是由张帆和史彩成编著的一本专业书籍,主要针对想要深入理解并实践Windows驱动程序开发的技术人员。该书详细阐述了Windows操作系统下驱动程序的开发过程,涵盖了从基础概念到高级技术的各个方面。以下是该书的主要内容和特点:1. 内容概述: 基础知识:介绍了W...