首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bootloader上的线程

bootloader上的线程
EN

Stack Overflow用户
提问于 2009-12-25 09:34:36
回答 2查看 599关注 0票数 3

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-25 11:09:50

这是一个非常不同寻常的question...so,请允许我提供我的观点……

bootloader实际上是一组有限的汇编代码,确切地说是464字节,64字节用于分区信息,最后两个字节用于魔术标记以指示引导加载程序的结束,即在诸如Grub的total.

  • Bootloaders中的512字节可以通过实现两阶段引导加载程序来绕过此限制,第一阶段是如上所述的512字节,然后加载第二阶段,在该阶段中进一步的选项等被加载( performed.

  • Generally,)。由于原始代码是16位代码,因此引导加载程序代码在16位汇编中,并且这是目前处理器386向上到现代处理器的内容,使用两阶段引导加载程序的
  • ,前512字节是16位,然后第二阶段将处理器切换到32位模式,在准备中设置寄存器和门选择器,然后跳转到实际程序的入口代码来执行引导-这是考虑到必须从磁盘上的特定位置读取,或者读取包含引导代码是32位模式中的stored.
  • Implmenting线程的数据的配置文件,这将很难产生,因为您将不得不在汇编中创建某种类型的调度器(因为您提到在x86体系结构bootloader).

上实现线程

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

你可能会更好地使用Grub或甚至检查这个开源BIOS bootloaders here,如今,bios是可闪存的,所以您可能能够获得一个EFI (可扩展固件接口here),它是纯32位bios-这将取决于您的处理器。这里还有另一个网站,可能会提供更多的信息here

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

票数 9
EN

Stack Overflow用户

发布于 2009-12-25 10:02:08

This book可能会对您有所帮助--它描述了linux内核的各个方面--包括初始化。您可能想看看GRUB,它是各种风格的UNIX的标准。

我提到的这本书应该是你的首选资源,内核直到初始化周期的很晚才考虑它的金属线程能力,我的意思是为线程设置数据结构已经有了很好的文档。

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

所以我希望你能模拟一个进度条:D

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1960243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档