【问题标题】:Access registers between/cross cores in multicore CPUs访问多核 CPU 中/跨核之间的寄存器
【发布时间】:2012-11-06 20:19:54
【问题描述】:
这听起来可能很疯狂,但我似乎不清楚是否有一个接口可以让汇编程序员编写代码以将内核 1 上的一个寄存器加载到内核 2 上的寄存器。例如,将内核 1 上的 EAX 加载到内核上的 EAX 2.
有可能吗?
更多关于汇编程序员使用两个内核(在多个内核上运行代码)的接口是什么?
【问题讨论】:
标签:
assembly
multicore
cpu-registers
【解决方案1】:
没有。为此,一个核心必须将值存储在内存中,而另一个核心必须将其取出。所以核心可能是这样的:
mov eax, [235]
核心 2 会这样做:
mov [235], eax
【解决方案2】:
硬件不直接提供这个。
但是,要构建真正的工具(例如调试器),必须存在一些这样的工具。这通常由系统的内核软件实现,该软件为一个 CPU“停止”另一个 CPU、检查其寄存器状态、修改其寄存器状态、单步、修改另一个 CPU 的内存映射提供了便利等。此类设施建立在允许一个 CPU 中断另一个 CPU 的低级硬件原语之上,并且代码组织使得 CPU 中断导致被中断的 CPU 使其状态对中断的 CPU 可用。 (这往往是非常棘手的代码,并且非常依赖于硬件)。
Windows 通过 Win32 调用 GetThreadContext() 提供这些功能(至少是寄存器访问部分)。我敢肯定 Win64 有类似的东西,Linux 等也有类似的东西。