访问多核CPU中的/跨核心之间的寄存器

时间:2012-11-18 21:36:03

标签: assembly multicore cpu-registers

这可能听起来很疯狂,但我似乎不清楚汇编程序员是否有编写代码来将核心1上的一个寄存器加载到核心2上的寄存器。例如,将核心1上的EAX加载到核心上的EAX 2。 它甚至可能吗?

更多关于汇编程序员使用两个内核的接口(在多个内核上运行代码)?

2 个答案:

答案 0 :(得分:1)

没有。要做到这一点,一个核心必须将值存储在内存中,另一个核心必须将其取出。所以核心可能看起来像这样:

mov eax, [235]

核心2会这样做:

mov [235], eax

答案 1 :(得分:1)

硬件没有直接提供此功能。

但是,要构建真正的工具(例如,调试器),必须存在这样的设施。这通常由系统的内核软件实现,为一个CPU提供“停止”另一个,检查其寄存器状态,修改其寄存器状态,单步,修改另一个CPU的内存映射的工具。这些工具建立在低级硬件原语之上,允许一个CPU中断另一个CPU,并且组织代码以便CPU中断使中断的CPU使其状态可用于中断CPU。 (这往往是非常棘手的代码,并且非常依赖硬件)。

Windows通过Win32调用GetThreadContext()提供这些功能(至少是注册访问部分)。我确信Win64具有相同的功能,类似于Linux等等。