3

我在哪里可以找到有关如何在 x86 架构引导加载程序上实现线程的资源/教程……假设我想在显示进度条的同时在后台加载资源……

4

2 回答 2

9

这是一个非常不寻常的问题......所以请允许我提供我的意见......

  • 引导加载程序实际上是一组有限的汇编代码,确切地说是 464 字节,64 字节用于分区信息,最后两个字节用于指示引导加载程序结束的魔术标记,总共 512 字节。
  • 诸如 Grub 之类的引导加载程序可以通过实现两阶段引导加载程序来解决此限制,第一阶段是前面提到的 512 字节,然后加载第二阶段,其中执行更多选项等。
  • 通常,引导加载程序代码是 16 位汇编代码,因为原始 BIOS 代码是 16 位代码,这就是今天的处理器 386 向上到现代处理器,以实模式启动。
  • 使用双阶段引导加载程序,前 512 字节为 16 位,然后第二阶段将处理器切换到 32 位模式,准备好寄存器和门选择器,然后跳转到实际程序的入口代码进行引导up - 这是考虑到必须从磁盘上的特定位置读取或读取包含有关存储引导代码的数据的配置文件。
  • 在 32 位模式下实现线程是一件很棘手的事情,因为您必须在 Assembly 中创建某种调度程序(因为您提到在 x86 架构引导加载程序上实现线程)。

您可以通过使用 C 实现引导加载程序的第二阶段部分来解决此问题(但棘手的一点是,由于尚未设置运行时环境,因此不使用标准库!)

使用 Grub 可能会更好,甚至可以在此处查看此开源 BIOS 引导加载程序,如今,BIOS 是可闪存的,因此您可以获得纯 32 位 bios 的 EFI(此处的可扩展固件接口) - 这将取决于您的处理器。这里还有另一个网站可能会在此处提供更多信息

The progress bar on boot, is unfortunately written in C/C++ which (already, in 32bit, environment set up, tasking scheduler set up, threads included, virtual memory manager loaded etc - this is the kernel level, after boot up procedure is complete), in which is a process where a thread has been created, that runs in the background illustrating hardware detection/further environment set up etc by using a progress bar as a way to tell the user to "wait, the system is loading"

于 2009-12-25T03:09:49.543 回答
-1

这本书可能会对您有所帮助——它描述了 linux 内核的各个方面——包括初始化。您可能想看看GRUB它在 UNIX 风格中的相当标准。

我提到的这本书应该是你的首选资源,内核直到初始化周期的后期才认为它的金属线程能力,我的意思是为线程设置数据结构是有据可查的。

虽然我似乎想不出在引导加载程序中允许线程构造有什么真正的好处——首先,使用单线程过程代码设置基本硬件更简单,其次你希望代码是防弹的,所以线程作为一个不需要防御机制。

所以我希望您正在考虑模拟进度条:D

于 2009-12-25T02:02:07.880 回答