operating-system - 基本启动条款

标签 operating-system boot

关于 PC 的启动,我在某些方面不是很清楚。

术语:引导 block 、引导扇区、MBR、引导加载程序与 Bootstrap 、bios 与 cmos 及其功能。

这些与当前的引导加载程序(如 grub)有何关系。

我了解启动顺序和启动后高级软件的内容,但我真的很好奇当有人按下电源按钮时这些芯片内部发生了什么。

维基百科似乎有点神秘,所以我想也许 stackoverflow 可以给我一些清晰的答案,或者至少将我指向一个可以找到简单解释的位置。

非常感谢您的帮助。

最佳答案

好的。

首先您需要了解 CPU 的工作原理。有一种称为指令指针 (IP) 寄存器的东西,它指向包含 CPU 要执行的下一条指令的地址。每次启动新程序时,该程序都会加载到内存中,然后将 CPU 的 IP 设置为程序的起始地址。但是当你的 CPU 关闭时你会怎么做。如何让 CPU 运行“启动”程序。

为此,有一个叫做“引导向量”的东西,即 CPU 一上电就会跳转到的地址。

但是,谁会在引导向量处加载程序。自然不能将程序预加载到 RAM 中。因为 RAM 需要电源( volatile )。所以他们有一个叫做“引导闪存”的东西,它是 EEPROM,因此是非 volatile 的。该闪存包含一个名为“BIOS”的程序,其职责是将系统从死亡中唤醒。其想法是它必须具有最低限度和必要的功能。该引导闪存被烧录并固定在系统上,使该程序的启动指令恰好位于 CPU 的“引导向量”处。

现在您需要 BIOS 执行的下一个任务是加载操作系统。但是您的硬盘上可能安装了多个操作系统。因此,您首先要加载一个可以进一步加载操作系统的程序。这个程序叫做引导加载程序(grub 就是一个例子)

那么你是怎么做到的。每个磁盘上都有一个称为“引导扇区”的东西。一般是磁盘的第一个扇区。它的大小一般为 512MB 左右。足以存储一个小程序。您告诉 BIOS 使用哪个磁盘(主要、次要、CD、USB、网络)进行进一步引导。最常见且默认情况下,它使用主硬盘。所以引导加载程序去获取那个程序并跳转到它。引导加载程序知道如何从该点引导操作系统。例如,在 grub 中,您可以指定内核名称等。

主引导记录是另一个术语,它更像是一个 Windows 世界术语。 Window 的引导加载程序假定某种“记录”关于安装在引导扇区上的操作系统的性质。它将该记录称为 MBR。

希望这对你现在有好处。

关于operating-system - 基本启动条款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12002089/

相关文章:

c - Flex 在 C 中使用管道

boot - 操作系统开发 - 使用 qemu 从软盘启动

linux - 获取用于Linux PXE引导的其他配置文件

android - 如何在 Android Studio 上冷启动运行 API 27+ 的模拟器?

linux - 如何在 Spike (riscv) 中指定内核参数?

language-agnostic - 他们如何制作在启动时运行的程序

operating-system - 为什么 x86-64 长模式不需要分段?

c - 当我堆栈溢出时,操作系统如何避免崩溃?

memory-management - 现代操作系统上的内存分段 : why do you need 4 segments?

java - 使用 Freenas 11.2 我的 java 进程在离开 jail shell 时关闭