computer-architecture相关内容

32位IR如何保持加载指令?(RISC风格32位体系结构)

我对指令大小和可寻址空间感到有点困惑(我假设指令大小应该与地址位的大小相同。我没有在我的书中找到足够的解释)如果我是正确的,那么在理论上,如果我们在32位体系结构(RISC风格)中有2^32个可寻址单元(字节)的内存,那么4字节大小的加载指令如何保存操作码和地址? 推荐答案 您假设一条指令可以对来自任意绝对地址的加载进行编码。在x86上也是如此,即使在64位模式下也是如此(但有一个特殊 ..

1字节!= 8位的系统?

我一直在读类似的句子 不要依赖 1 个字节的大小为 8 位 使用 CHAR_BIT 而不是 8 作为常量在位和字节之间进行转换 等等.今天有哪些现实生活系统,这在哪里适用?(我不确定 C 和 C++ 之间在这方面是否存在差异,或者它实际上是否与语言无关.如有必要,请重新标记.) 解决方案 在较旧的机器上,小于 8 位的代码相当普遍,但其中大多数已经死去多年了. C ..
发布时间:2022-01-31 10:18:02 C/C++开发

ISR 和函数调用的区别?

我想了解 ISR(中断服务程序)和函数调用之间的区别. 我觉得从硬件的角度来看,函数调用和 ISR 是一样的.如果我错了,请纠正我.我能找到的关于 ISR 和函数调用的所有信息如下: ISR: 在执行过程中随时可能发生的异步事件程序 将 PC、标志和寄存器保存在堆栈中,并禁用所有中断并加载 ISR 的地址 ISR 不能有可传递给它的参数 无法返回值 启用中断 ..

CPU 从用户模式切换到内核模式:它到底做了什么?它是如何实现这种转变的?

CPU 从用户模式切换到内核模式:它到底做了什么?它是如何实现这种转变的? 编辑: 即使它依赖于架构,也请给我一个答案.架构由您决定.告诉我你知道的架构. 我想了解其中涉及的所有内容. 解决方案 注意:这主要与 x86 架构相关.这是一个稍微简化的解释. 过渡通常由以下原因之一引起: 错误(例如,页面错误或由执行指令引起的其他异常) 中断(例如键盘中断或 I ..
发布时间:2022-01-11 22:55:50 其他开发

x86 页表是如何工作的?

我熟悉 MIPS 架构,它有一个软件管理的 TLB.因此,您(操作系统)想要存储页表和页表条目的方式和位置完全取决于您.例如,我做了一个带有单个倒置页表的项目;我看到其他人在每个进程中使用 2 级页表. 但是 x86 的故事是什么?据我所知,TLB 是硬件管理的.x86 是否告诉您,“嘿,这是您当前使用的页表条目需要去的地方 [物理地址范围]"?但是等等,我一直认为 x86 使用多级页表,所 ..

x86 页表如何工作?

我熟悉 MIPS 架构,它有一个软件管理的 TLB.因此,您(操作系统)希望如何以及在何处存储页表和页表条目完全取决于您.例如,我做了一个带有单个倒页表的项目;我看到其他人在每个进程中使用 2 级页表. 但是 x86 的故事是什么?据我所知,TLB 是硬件管理的.x86 是否告诉您,“嘿,这是您当前使用的页表条目需要去[物理地址范围] 的地方"?但是等等,我一直认为 x86 使用多级页表,所 ..

x86 处理器中的时间源

有人知道可以用来测量时间的x86指令吗?导致任务切换的定时器是否可以通过软件访问? 解决方案 在 x86 平台上测量时间的方法: 实时时钟 - 您操作系统的时间和日期来源.1秒精度.标准 PC 中唯一可用于测量绝对时间的时间源. 8254 Counter/Timers - 已经存在的标准计数器/定时器芯片自 PC 诞生以来的主板上(现在是芯片组内的一个功能块).这是 IRQ0 ..
发布时间:2021-12-31 15:30:42 其他开发

计算机程序运行时会发生什么?

我知道一般的理论,但我无法适应细节. 我知道程序驻留在计算机的辅助存储器中.一旦程序开始执行,它就会被完全复制到 RAM 中.然后处理器一次检索一些指令(这取决于总线的大小),将它们放入寄存器并执行. 我也知道一个计算机程序使用两种内存:栈和堆,它们也是计算机主内存的一部分.堆栈用于非动态内存,堆用于动态内存(例如,与 C++ 中的 new 运算符相关的所有内容) 我无法理解的是 ..
发布时间:2021-12-21 10:00:28 C/C++开发

分支目标缓冲区检测到什么分支错误预测?

我目前正在研究可以检测分支预测错误的 CPU 管道的各个部分.我发现这些是: 分支目标缓冲区 (BPU CLEAR) 分支机构地址计算器(BA CLEAR) 跳转执行单元(不确定这里的信号名称??) 我知道 2 和 3 检测到什么,但我不明白 BTB 中检测到什么错误预测.BAC 检测 BTB 在哪里错误预测了非分支指令的分支,BTB 未能检测到分支,或者 BTB 错误预测了 x8 ..

对齐缓存行并了解缓存行大小

为了防止错误共享,我想将数组的每个元素与缓存行对齐.所以首先我需要知道缓存行的大小,所以我为每个元素分配了一定数量的字节.其次,我希望数组的开头与缓存行对齐. 我使用的是 Linux 和 8 核 x86 平台.首先我如何找到缓存行大小.其次,我如何与 C 中的缓存行对齐.我正在使用 gcc 编译器. 因此结构如下,假设缓存线大小为 64. element[0] 占用字节 0-63el ..

什么是“虚假分享"?如何重现/避免它?

今天我和我的教授在并行编程课上有了不同的理解,关于什么是“虚假共享".我的教授说的没有意义,所以我立即指出.她认为“虚假分享"会导致节目结果出错. 我说过,当不同的内存地址分配给同一个缓存行时,就会发生“错误共享",将数据写入其中一个会导致另一个被踢出缓存.如果处理器在两个伪共享地址之间写转转,两者都不能停留在缓存上,所有的操作都会导致DRAM的访问. 这是我目前的看法.事实上,我也不 ..

直接映射缓存的地址字段中有多少位?

这是一个基于直接映射缓存的问题,所以我假设在这里问也可以. 这是我正在解决的问题: 问题:“一个高速工作站有 64 位字和 64 位地址,在字节级别进行地址解析.假设直接映射缓存有 8192 条 64 字节线,那么每条线有多少位?缓存的以下地址字段?1)字节 2)索引 3)标签?" 首先我定义了这个问题中的术语,并使用了另一个堆栈溢出直接映射缓存问题和我在 缓存 作为参考(如果我的任 ..
发布时间:2021-12-20 11:27:13 其他开发

1 字节!= 8 位的系统?

我一直在读这样的句子 不要依赖 1 个字节的大小为 8 位 使用 CHAR_BIT 而不是 8 作为常量在位和字节之间转换 等等.今天有哪些现实生活系统,这适用于哪些地方?(我不确定 C 和 C++ 在这方面是否存在差异,或者它是否实际上与语言无关.如有必要,请重新标记.) 解决方案 在较旧的机器上,小于 8 位的代码相当普遍,但其中大部分已经消失多年了. C 和 ..
发布时间:2021-12-02 08:17:30 C/C++开发

地址空间中可以有多少个字?

这是我正在解决的问题 问题:高速工作站具有 64 位字和 64 位地址,地址解析为字节级别.工作站的地址空间中可以有多少个字? 我在问题中定义了不同的术语 字长 - 处理器自然数据单位.字长决定了一次可以处理的信息量 字节级寻址 - 支持访问单词内单个字节的硬件架构 64 位寻址- 您有 64 位来指定 运行时内存 中保存指令或数据的地址 地址空间 - 运行程序的内存视图在 ..
发布时间:2021-11-25 07:46:08 C#

带有动态库的 32 位应用程序在 64 位设备上崩溃

我面临以下情况: 32 位设备 + 应用 armv7 + 动态库 armv7 arm64 =工作 64 位设备 + 应用 armv7 + 动态库 armv7 arm64 =不起作用 不起作用 - 应用在加载时崩溃并出现以下错误: dyld 错误消息库未加载原因未找到合适的图像 有什么解释吗? 解决方案 说明:加载到 64 位设备上的 32 位二进制文​​件无法执行 ..
发布时间:2021-11-17 22:47:26 移动开发

带有动态库的 32 位应用程序在 64 位设备上崩溃

我面临以下情况: 32 位设备 + 应用 armv7 + 动态库 armv7 arm64 =工作 64 位设备 + 应用 armv7 + 动态库 armv7 arm64 =不起作用 不起作用 - 应用在加载时崩溃并出现以下错误: dyld 错误消息库未加载原因未找到合适的图像 有什么解释吗? 解决方案 说明:加载到 64 位设备上的 32 位二进制文​​件无法执行 ..
发布时间:2021-11-17 22:47:23 移动开发