在引导程序上进行线程处理

Fre*_*ick 3 c c++ multithreading bootloader

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

t0m*_*13b 9

这是一个非常不寻常的问题......所以请允许我就此发表意见......

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

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

您可能使用GRUB甚至看看这个开源BIOS引导程序更好的这里,如今,BIOS的是可擦写,所以你也许可以得到一个EFI(可扩展固件接口在这里),这是纯粹的32位BIOS -这将取决于你的处理器.还有这里的另一个网站可能提供进一步的信息在这里.

不幸的是,启动时的进度条是用C/C++编写的(已经在32位,环境设置,任务调度程序设置,包含线程,虚拟内存管理器加载等等 - 这是启动程序完成后的内核级别) ),其中一个创建线程的进程,在后台运行,说明硬件检测/进一步环境设置等,使用进度条作为告诉用户"等待,系统正在加载"的方法