严格要求组装以使操作系统的"最低"部分?
我是中级(抽象)程序员,几个月前,我开始认为是否应该减少或增加抽象(我选择减少). 现在,我认为我已经完成了有关我需要的大部分"研究",但仍然存在一些问题. 现在,虽然我"有效地无所作为",但我只是加强了我的C技能(购买了" K&R C编程lang"),而我想(在感到舒适)开始学习操作系统(如Minix)只是出于学习目的,但是我有一个想法,我真的不知道我是否应该在乎. 在理论上(

14 2022-06-21

MESI协议和STD :: Atomic-是否确保其他线程都可以立即看到所有写入?
关于std::atomic,C ++ 11标准状态存储在原子变量上的状态将在"合理的时间"中可见该变量的负载. 从29.3p13: 实施应使原子存储在合理的时间内可见原子负载. 但是,我很想知道处理基于MESI CACHE相干协议(X86,X86-64,ARM等)的特定CPU体系结构时发生了什么. 如果我对MESI协议的理解是正确的,则核心将始终立即读取先前编写/由另一个核

16 2022-06-21

在测量执行时间(RDTSC + LFENCE + RDTSC)和(RDTSC + RDTSCP)之间是否有任何区别?
据我所知,关于RDTSC和RDTSCP指令,处理器中运行时排序的主要区别在于,执行是否等待直到所有先前的指令在本地执行. 换句话说,这意味着lfence + rdtsc = rdtscp,因为在RDTSC指令之前的LFENCE使以下RDTSC在本地所有先前的指令完成后将执行以下RDTSC. 但是,我看到了一些示例代码,这些代码在测量开始时使用了RDTSC,最后在RDTSCP开始时使用了

10 2022-06-21

根据英特尔的说法,我的高速缓存应该是24向关联,但这是怎么回事?
根据"英特尔64和IA-32架构优化参考手册", 2012年4月第2-23页 LLC数据阵列中保存的数据的物理地址分布在 哈希函数的缓存切片,使地址均匀分布.这 缓存块中的数据阵列可能有4/8/12/16与相对应的方式 0.5m/1m/1.5m/2m块大小.但是,由于地址分布 从软件角度来看,缓存块,这并不是正常的n向 缓存. 我的计算机是一座2核沙桥,带有3 MB,12向套件的Ass

24 2022-06-21

是否允许访问跨越X86中零边界的内存?
允许一次访问0和0xFFFFFF...之间的bounary,x86 1 ? 例如,给定eax(64位中的rax)为零,允许以下访问: mov ebx, DWORD [eax - 2] 我对x86(32位)和x86-64感兴趣,以防答案不同. 1 当然,考虑到该区域在您的过程中映射等. 解决方案 我刚刚使用此EFI程序进行了测试. (正如预期的那样,它有效.)如果您想复

14 2022-06-21

是否有带有64位操作的P4模型?
我还记得,初始P4 Micro-Architecture的一个有趣特征之一是它是 双泵的alu .我认为英特尔称其为类似于快速执行单元,但基本上意味着ALU中的每个执行单元的有效运行频率是频率的两倍,并且可以在单个周期中处理两个简单的ALU操作, 即使它们是依赖的. 此功能在某个时刻(与P4的同时或同时消失),但是有 64位 p4是否有双倾倒Alu? P4的64位变体在最初的32位发行后大约

8 2022-06-21

使用RING BUS拓扑的Intel CPU如何解码和处理端口I/O操作
我从硬件抽象级别中了解端口I/O(即,断言一个指示通用设备的PIN,该端口是该地址是端口地址,该地址是一个端口地址,它在较早的CPU上使用简单的地址总线模型很有意义),但是我' m不确定它是如何在现代CPU微体系上实现的,尤其是端口I/O操作在环形总线上的显示方式. 首先. IN/OUT指令在哪里分配给预订站或负载/存储缓冲区?我最初的想法是,它将被分配在负载/存储缓冲区中,并且内存调度程序

12 2022-06-21

如何使用CPU本身分辨X86-64指令OPCODE的长度?
我知道有库可以"解析"二进制机器代码/opcode来告诉长度X86-64 CPU指令. 但我想知道,由于CPU具有内部电路可以确定这一点,是否有一种方法可以使用处理器本身来告诉二进制代码的指令大小? (甚至可能是黑客?) 解决方案 因此,如果您编写了调试器,则可以使用CPU的单稳定功能在代码块中找到指令边界.但是,只有运行它,如果它发生故障(例如,来自未上限地址的负载),您将获得该异

8 2022-06-21

Endianness与堆栈增长方向之间的关系
处理器的端性与堆栈生长方向之间有关系吗? 例如, x86体系结构是 Little Endian ,堆栈向下生长(即,它以最高地址开始,并在每个push操作中朝着较低的地址生长).同样,在 sparc体系结构( big endian )中,堆栈从最低地址开始,并朝着更高的地址增长. 这种关系模式几乎在所有架构中都可以看到. 我相信必须有这种未说的惯例的原因.这可以从计算机架构或操作系统的

10 2022-06-21

ICE湖48KIB L1数据缓存的索引如何工作?
英特尔手册优化(修订2019年9月)显示了48 KIB 8路关联L1数据缓存. 1 软件可见延迟/带宽将根据访问模式和其他因素而有所不同. 这让我感到困惑,因为: 有96套(48 KIB/64/8),这不是两个. 集合的索引位和字节偏移的索引位添加到12位以上,这使得 speak pipt -as-vipt-trick 不适合4KIB页面. 总的来说,缓存似乎更昂贵,但延

6 2022-06-21