Assembly 汇编寄存器初学者
所以我最近参加了一些集会,我是一个初学者,所以我想知道是否有人能澄清一些事情。我认为每个进程都有自己的寄存器集,每个线程都可以修改这些寄存器?。那么多个线程如何使用相同的寄存器而不引起冲突呢?或者每个线程都有自己的寄存器集吗?线程上下文切换涉及保存当前执行上下文的寄存器,并从执行上下文开始切换到加载保存值的寄存器。(除其他外)。因此,每个线程实际上都有自己的寄存器集。还有它自己的堆栈,因为ESP是寄存器之一 考虑这一点的一种方法是通过保存当前寄存器状态并加载具有新状态的寄存器来获得线程。如果这没有发生,那么它就不是线程切换。如果您还切换到一组不同的虚拟地址表,那么您拥有的是一个进程开关,而不是线程开关 你说: 我认为每个进程都有自己的寄存器集,每个线程都可以修改这些寄存器,对吗Assembly 汇编寄存器初学者,assembly,cpu-registers,Assembly,Cpu Registers,所以我最近参加了一些集会,我是一个初学者,所以我想知道是否有人能澄清一些事情。我认为每个进程都有自己的寄存器集,每个线程都可以修改这些寄存器?。那么多个线程如何使用相同的寄存器而不引起冲突呢?或者每个线程都有自己的寄存器集吗?线程上下文切换涉及保存当前执行上下文的寄存器,并从执行上下文开始切换到加载保存值的寄存器。(除其他外)。因此,每个线程实际上都有自己的寄存器集。还有它自己的堆栈,因为ESP是寄存器之一 考虑这一点的一种方法是通过保存当前寄存器状态并加载具有新状态的寄存器来获得线程。如果这没
但这并不完全正确。每个CPU核心都有一组寄存器。每当操作系统切换到不同的线程时,这些寄存器都会更改。但在任何时候,CPU核心中只有一个线程在执行。进程实际上没有自己的寄存器,进程没有自己的线程(或至少有一个线程),线程有寄存器,或者更确切地说,在线程等待CPU内核运行时,有一个地方保存寄存器的值。每个线程都有自己的上下文,其中包括一组寄存器、CPU标志、堆栈、,等等。根据处理器的不同,只有一组寄存器。每个线程没有一组 有很多方法可以保存所有寄存器的状态,这样线程就可以继续它停止的地方
线程是由内核或操作系统完成的,因此程序不应该关心它。如果没有可用的内核或操作系统,那么您需要自己实现它。为此,您需要:
- 保存状态的函数 CPU中的所有寄存器(SP:堆栈 指针,内部寄存器值, PC:程序计数器等…)在 要切换到新的存储空间的其他存储空间 线
- 将线程环境加载到CPU环境的函数,将以前保存的内部寄存器值恢复到CPU寄存器
- 操作系统中的一组进程
- 每个进程都有一个内存空间,其中包含动态分配内存、静态数据和代码汇编
- 每个进程都有一个线程列表
- 每个线程都有自己的寄存器集、程序计数器和堆栈
-
[LI]做上下文内部切换(绿色线程)到您的程序(您的操作系统将只考虑它是一个单一的进程,所以:硬多核)
- 您可以为许多实际流程分配一种混合方法,以实现简单的多核优化
pushad
保存所有寄存器可能是为了协同路由,而不是为了操作系统的先发制人多任务。)