除了运行无限循环之外,是否有任何技巧(如可能缓存未命中?)使CPU尽可能热?
这可能是特定于体系结构的.
cpu temperature cpu-architecture cpu-usage computer-architecture
人们可以快速学习以下形式的命令,例如 C 语言中的命令
printf("%d", x);
Run Code Online (Sandbox Code Playgroud)
或者
printf("%lu", x);
Run Code Online (Sandbox Code Playgroud)
但是对于x的二进制表示形式,不存在%lu或%d的类似物。
我的问题首先是为什么会这样,其次是在什么时候(在哪个抽象级别)二进制表示形式会转变为十进制或十六进制?
Stack 网络上的类似点似乎只能引出特定于语言的答案或实现/库建议。然而,我的问题是关于我对数据如何抽象的整体理解,以及操作系统是否见过二进制文件,或者是否有比操作系统更低级别的东西覆盖它。
为了进一步强调我的方向,考虑一个切题的问题:以十六进制编程源文件比以十进制编程(例如在常量或变量初始化期间)对性能(速度或存储)有任何好处吗?
对于一个新手/愚蠢的问题,我很抱歉,但这让我困扰了一段时间,而且似乎很难找到直接的答案。问题是关于计算机如何在低级别工作 - 更具体地说,是否有计算机可以执行的命令未包含在x86-64指令中。换句话说,您可能会问是仅使用 x86-64 指令编程的操作系统,并且操作系统运行的程序也是如此。请注意,我不是在询问特定于处理器的隐藏命令或附加命令,我们可能假设这些不存在。
提问的动机:
通常的说法是编译器将特定语言的程序编译为机器码。但是,有许多命令不能(据我所知)仅使用 x86-64 指令用汇编语言编写。甚至像“malloc”这样简单的东西。所以看起来为操作系统编写的实际程序由机器代码和操作系统指令组成?
如果查看 x86-64 指令集,似乎 I/O 命令(例如访问键盘、鼠标、硬盘驱动器、GPU、音频接口、时间、显示器、扬声器等)并没有针对它的所有命令,尽管可以使用 INT 命令来完成某些任务。根据这个答案“在现代体系结构上,外围设备的访问方式与内存类似:通过总线上的映射内存地址。”,无论在代码方面意味着什么。所以看起来甚至操作系统也不是只用 x86-64 指令编写的?
assembly operating-system cpu-architecture machine-code low-level
Intel x64 CPU 也可以运行 x86 asm。CPU 中是否有标志或模式来确定指令是否应解码为 x86 还是 x64?CPU 如何知道指令是 x86 还是 x64?
在 CPU 级别(不是操作系统级别!),是否可以混合使用 x86 和 x64 指令?
注意:在操作系统级别有很多关于这个问题的 SO 问答;我对CPU级别感兴趣。谈论库、文件等,都不是CPU层面的。
假设有两条顺序指令,如下所示:
instruction A
instruction B
Run Code Online (Sandbox Code Playgroud)
由于 CPU 流水线的原因,B 将在 A 完成之前启动。
是否存在一种机制来确保 B 在 A 完成后启动?
更新:
很抱歉我没有准确描述问题。我的意思是,这两条指令具有应用程序级排序依赖性,但没有危险。例如,在事务系统中,第一条指令将日志刷新到持久存储,第二条指令通知客户端有关事务提交的信息。因此,在第一条指令完成之前,我们无法执行第二条指令。如何提供这个执行指令?
Cortex-A53 处理器有 1 到 4 个内核,每个内核都有一个 L1 内存系统和一个共享的 L2 缓存。
assembly ×3
cpu ×2
low-level ×2
arm ×1
binary ×1
c ×1
cortex-a ×1
cpu-cache ×1
cpu-usage ×1
intel ×1
machine-code ×1
pipelining ×1
temperature ×1
x86 ×1
x86-64 ×1