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

时间:2009-12-25 01:34:36

标签: c++ c multithreading bootloader

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

2 个答案:

答案 0 :(得分:9)

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

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

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

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

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

答案 1 :(得分:-1)

This book可能对你有所帮助 - 它描述了linux内核的各个方面 - 包括初始化。你可能希望看看GRUB它在UNIX风格中的标准。

我提到的那本书应该是你选择的资源,内核在初始化周期的后期才会考虑它的金属线程能力,而且我的意思是设置线程的数据结构已经有了很好的记录。

虽然我似乎无法想到在引导加载程序中允许线程构造的任何实际好处 - 首先使用单线程过程代码设置基本硬件更简单,其次您希望代码项目符号-proof 因此不需要线程作为防御机制。

所以我希望你看到模仿进度条:D