如何在CPU中设计寄存器

问题描述 投票:0回答:1

我知道有些寄存器属于一个进程。

我对它们有一些基本问题:

[当我使用gdb调试某些项目时,可以看到函数的参数已放入某些寄存器中。那么每个函数的参数都有自己的寄存器吗?还是同一进程中的所有函数为其参数共享相同的寄存器?

这些寄存器是否在线程之间共享?进程之间?如果不是,当CPU进行上下文切换时,如何存储其他寄存器中的值?

gdb cpu-registers
1个回答
1
投票

您似乎缺乏基本的了解或CPU的工作方式。读一本计算机体系结构书籍,例如Patterson和Hennessy的“ Computer Organization and Design: the Hardware/Software Interface”,或观看Ben Eater的“从头开始构建8位计算机” video series可能会有所帮助。

我可以看到函数的参数已放入某些寄存器中。

有许多不同的调用约定。 Loading参数放入特定的寄存器(不能将任何内容[放入寄存器),或pushing参数放入堆栈很常见。

每个函数也有其自己的寄存器

没有处理器具有一组固定的寄存器。如果一个函数使用例如$RDI作为它的第一个参数(x86_64调用约定),并且想要调用其他函数,则可能需要在覆盖它之前暂时将$RDI的值保存在内存中,以便将参数传递给另一个函数。

还是同一进程中的所有函数为其参数共享相同的寄存器?

[所有进程中的所有功能共享同一组CPU寄存器(与寄存器的用途无关)。

这些寄存器是否在线程之间共享?

寄存器是共享的,但是每个线程都有自己的

values

寄存器。在线程之间切换时,操作系统(或在某些情况下为线程库)保存并恢复值。
进程之间?

与线程相同。

如果不是,当CPU执行上下文切换时,如何存储其他寄存器中的值?

[CPU不执行上下文切换(CPU没有上下文的概念),操作系统通过将当前值集存储到内存中的一个位置并从另一位置加载另一个设置来进行操作系统操作。

© www.soinside.com 2019 - 2024. All rights reserved.