启动时多线程?

3 c c++ concurrency assembly native

我们正在开发一个非常低级的应用系统,它在操作系统启动之前运行,实际上是一个启动应用程序.
问题是我们应该如何利用CPU核心/线程?
我们将运行多少线程?
有可能吗?!有没有链接/教程?

Ano*_*ous 12

由于您启动操作系统之前谈论线程,我将假设您还没有内核可用.这意味着没有系统调用,所以没有fork()或clone().然而,出于这个答案的目的,我还假设您已经设置了A20门,一个GDT,受保护(用于IA-32)或长(用于x86-64)模式,等等上.如果您不知道这些是什么,我们可能不应该在开始之前讨论线程.

您可以使用操作码和技巧让您的处理器使用其他内核,从而直接实现线程.您可以在Intel x86中找到所有这些东西(您正在使用x86,是吗?如果您使用的是其他架构,则显然需要一套不同的手册)手册:http://www.intel.com/内容/大坝/ WWW /公共/美国/ EN /文档/说明书/ 64-IA-32架构的软件开发者手动-325462.pdf

对于这样的事情没有教程的原因,坦率地说,它不是很有用.在将内核加载到内存之前设置的全部内容是使内核更容易加载到内存中.线程并不完全有助于实现这一目标.简单地让内核处理这种低级实现要求是可取的,这样你就可以使用fork()和clone()系统调用来满足所有的线程需求.

编辑:Sinn的良好修正:fork()创建一个新进程,当然实际上并不是线程.

  • 不错的争论先生,有我的upvote,但一个小的纠正.实际上fork不被认为是线程,因为它创建了一个不共享资源的新进程,即使你仍然具有(伪 - 如果1核)并行性. (2认同)