computer-architecture相关内容
我对指令大小和可寻址空间感到有点困惑(我假设指令大小应该与地址位的大小相同。我没有在我的书中找到足够的解释)如果我是正确的,那么在理论上,如果我们在32位体系结构(RISC风格)中有2^32个可寻址单元(字节)的内存,那么4字节大小的加载指令如何保存操作码和地址? 推荐答案 您假设一条指令可以对来自任意绝对地址的加载进行编码。在x86上也是如此,即使在64位模式下也是如此(但有一个特殊
..
在我的计算机组织课程中,我遇到了这些基本的MIPS说明: lw $to, AddrConstant4($s1) //&t0 = constant 4 add $s3, $s3, St0 //$s3 = $s3 + $t0 ($t0 == 4) 我的老师说$s1是一个寄存器地址,常量4存储在内存中。 在我看来,内存地址和寄存器地址似乎断开了连接。 我想
..
我一直在读类似的句子 不要依赖 1 个字节的大小为 8 位 使用 CHAR_BIT 而不是 8 作为常量在位和字节之间进行转换 等等.今天有哪些现实生活系统,这在哪里适用?(我不确定 C 和 C++ 之间在这方面是否存在差异,或者它实际上是否与语言无关.如有必要,请重新标记.) 解决方案 在较旧的机器上,小于 8 位的代码相当普遍,但其中大多数已经死去多年了. C
..
我想了解 ISR(中断服务程序)和函数调用之间的区别. 我觉得从硬件的角度来看,函数调用和 ISR 是一样的.如果我错了,请纠正我.我能找到的关于 ISR 和函数调用的所有信息如下: ISR: 在执行过程中随时可能发生的异步事件程序 将 PC、标志和寄存器保存在堆栈中,并禁用所有中断并加载 ISR 的地址 ISR 不能有可传递给它的参数 无法返回值 启用中断
..
英特尔表示,复位后处理器处于实模式,软件初始化代码从 0xFFFFFFF0H 开始.我的问题: 如果处理器处于实模式,它如何访问内存 > 1MB (0xFFFFFFF0H) 这是如何发生的,或者当 RAM 在
..
CPU 从用户模式切换到内核模式:它到底做了什么?它是如何实现这种转变的? 编辑: 即使它依赖于架构,也请给我一个答案.架构由您决定.告诉我你知道的架构. 我想了解其中涉及的所有内容. 解决方案 注意:这主要与 x86 架构相关.这是一个稍微简化的解释. 过渡通常由以下原因之一引起: 错误(例如,页面错误或由执行指令引起的其他异常) 中断(例如键盘中断或 I
..
我熟悉 MIPS 架构,它有一个软件管理的 TLB.因此,您(操作系统)想要存储页表和页表条目的方式和位置完全取决于您.例如,我做了一个带有单个倒置页表的项目;我看到其他人在每个进程中使用 2 级页表. 但是 x86 的故事是什么?据我所知,TLB 是硬件管理的.x86 是否告诉您,“嘿,这是您当前使用的页表条目需要去的地方 [物理地址范围]"?但是等等,我一直认为 x86 使用多级页表,所
..
我熟悉 MIPS 架构,它有一个软件管理的 TLB.因此,您(操作系统)希望如何以及在何处存储页表和页表条目完全取决于您.例如,我做了一个带有单个倒页表的项目;我看到其他人在每个进程中使用 2 级页表. 但是 x86 的故事是什么?据我所知,TLB 是硬件管理的.x86 是否告诉您,“嘿,这是您当前使用的页表条目需要去[物理地址范围] 的地方"?但是等等,我一直认为 x86 使用多级页表,所
..
有人知道可以用来测量时间的x86指令吗?导致任务切换的定时器是否可以通过软件访问? 解决方案 在 x86 平台上测量时间的方法: 实时时钟 - 您操作系统的时间和日期来源.1秒精度.标准 PC 中唯一可用于测量绝对时间的时间源. 8254 Counter/Timers - 已经存在的标准计数器/定时器芯片自 PC 诞生以来的主板上(现在是芯片组内的一个功能块).这是 IRQ0
..
我知道一般的理论,但我无法适应细节. 我知道程序驻留在计算机的辅助存储器中.一旦程序开始执行,它就会被完全复制到 RAM 中.然后处理器一次检索一些指令(这取决于总线的大小),将它们放入寄存器并执行. 我也知道一个计算机程序使用两种内存:栈和堆,它们也是计算机主内存的一部分.堆栈用于非动态内存,堆用于动态内存(例如,与 C++ 中的 new 运算符相关的所有内容) 我无法理解的是
..
我目前正在研究可以检测分支预测错误的 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)标签?" 首先我定义了这个问题中的术语,并使用了另一个堆栈溢出直接映射缓存问题和我在 缓存 作为参考(如果我的任
..
我一直在读这样的句子 不要依赖 1 个字节的大小为 8 位 使用 CHAR_BIT 而不是 8 作为常量在位和字节之间转换 等等.今天有哪些现实生活系统,这适用于哪些地方?(我不确定 C 和 C++ 在这方面是否存在差异,或者它是否实际上与语言无关.如有必要,请重新标记.) 解决方案 在较旧的机器上,小于 8 位的代码相当普遍,但其中大部分已经消失多年了. C 和
..
这是我正在解决的问题 问题:高速工作站具有 64 位字和 64 位地址,地址解析为字节级别.工作站的地址空间中可以有多少个字? 我在问题中定义了不同的术语 字长 - 处理器自然数据单位.字长决定了一次可以处理的信息量 字节级寻址 - 支持访问单词内单个字节的硬件架构 64 位寻址- 您有 64 位来指定 运行时内存 中保存指令或数据的地址 地址空间 - 运行程序的内存视图在
..
我面临以下情况: 32 位设备 + 应用 armv7 + 动态库 armv7 arm64 =工作 64 位设备 + 应用 armv7 + 动态库 armv7 arm64 =不起作用 不起作用 - 应用在加载时崩溃并出现以下错误: dyld 错误消息库未加载原因未找到合适的图像 有什么解释吗? 解决方案 说明:加载到 64 位设备上的 32 位二进制文件无法执行
..
我面临以下情况: 32 位设备 + 应用 armv7 + 动态库 armv7 arm64 =工作 64 位设备 + 应用 armv7 + 动态库 armv7 arm64 =不起作用 不起作用 - 应用在加载时崩溃并出现以下错误: dyld 错误消息库未加载原因未找到合适的图像 有什么解释吗? 解决方案 说明:加载到 64 位设备上的 32 位二进制文件无法执行
..
此代码片段摘自三星 Tab S 上的 Android 崩溃报告: 构建指纹:'samsung/chagallwifixx/chagallwifi:5.0.2/LRX22G/T800XXU1BOCC:user/release-keys'修订:'7'ABI:'手臂'r0 a0d840bc r1 a0dcb880 r2 00000001 r3 a0d840bcr4 a0dc3c4c r5 000000
..
当MCR或MRC指令以不同的cRm或opt2执行时,cRn 注册?例如,如果运行: asm volatile("mcr p15, 0, %0, c9, c13, 0" : : "r"(val)) 或 asm volatile("mcr p15, 0, %0, c9, c13, 2" : : "r"(val)) 那么,c9 或 c13 将更改哪个寄存器的值?以及最后一个选项(0 或 2)的作
..