Dna*_*iel 7 assembly cpu-registers
所以我最近一直在进行一些集会,我是初学者,所以我想知道是否有人可以澄清一些事情.我认为每个进程都有自己的寄存器集,每个线程都可以修改这些寄存器吗?那么多个线程如何使用相同的寄存器而不会引起冲突?或者每个线程都有自己的寄存器集?
Joh*_*ler 10
线程上下文切换涉及保存当前执行上下文的寄存器,并使用保存的值从执行上下文开始切换到加载寄存器.(除其他事项外).因此每个线程实际上都有自己的一组寄存器.也是它自己的堆栈,因为ESP是寄存器之一.
考虑这一点的一种方法是通过保存当前寄存器状态并使用新状态加载寄存器来获取线程.如果没有发生,那么它不是一个线程切换.如果您还要切换到另一组虚拟地址表,那么您所拥有的是一个进程切换而不是一个线程切换.
你说:
我认为每个进程都有自己的寄存器集,每个线程都可以修改这些寄存器吗?
但这不太对.每个CPU内核都有一组寄存器.只要操作系统切换到不同的线程,就会更改这些寄存器.但是在任何时候CPU核心中只有一个线程在执行.过程并不真正拥有自己的寄存器,进程自己的线程(或至少一个线程)和线程有登记,或者更确切地说,一个地方,以保持值寄存器,而线程正在等待一个CPU核心可为运行.