Microsoft Windows Internals,第 4 版 说:
英特尔 x86 处理器的架构定义了四个特权级别或环,以保护系统代码和数据不被较低特权的代码无意或恶意覆盖。Windows 对内核模式使用权限级别 0(或环 0),对用户模式使用权限级别 3(或环 3)。Windows 仅使用两个级别的原因是,过去支持的某些硬件架构(例如 Compaq Alpha 和 Silicon Graphics MIPS)仅实现了两个特权级别。
这是否意味着 Windows 曾经支持 Alpha 和 MIPS?
如果您要构建具有完全现代部件的现代 x86 计算机,您是否可以在没有任何仿真甚至使用 FreeDOS 的情况下将 MS-DOS 6.11 和 Windows 3.11 加载到它上面?我最近看到一个视频,它是在 Windows 95 上完成的,一个 32 位操作系统,但它可以用 Windows 3.1 或更低版本的 16 位操作系统完成吗?
在 Linux 上,/proc/cpuinfo允许以一种简单的方式检查机器具有的所有 CPU 标志。
通常,如果程序需要机器指令集的超集,确定它的最简单方法是运行它并查看它是否发出SIGILL信号。
但就我而言,我所有的处理器都至少支持 SSE4.1 和 AVX。
那么,有没有一种简单的方法来检查二进制文件内部是否有特殊指令?
我正在寻找一些表格或类似的东西,可以帮助我计算汇编代码的效率。
据我所知,位移需要 1 个 CPU 时钟,但我真的在看需要多少加法(减法应该相同),乘法以及如果我知道正在除法的值,如何大概计算除法时间。
我真的需要有关整数值的信息,但也欢迎浮动执行时间。
我正在阅读计算机的历史,我发现了 IA-64(安腾)处理器。它们听起来很有趣,我很困惑为什么英特尔会决定放弃它们。
能够明确选择要在该周期中运行的 2 条指令是一个好主意,尤其是在以汇编语言编写程序时,例如更快的引导加载程序。
对于任何汇编程序员来说,数百个寄存器应该是令人信服的。如果它不调用任何其他函数,您基本上可以将所有函数变量存储在寄存器中。
能够像这样执行三个操作数指令:
(qp) xor r1 = r2, r3 ; r1 = r2 XOR r3
(qp) xor r1 = (imm8), r3 ; r1 = (imm8) XOR r3
Run Code Online (Sandbox Code Playgroud)
与只有两个工作相比:
; eax = r1
; ebx = r2
; ecx = r3
mov eax, ebx ; r1 = r2
xor eax, ecx ; r1 = r2 XOR r3
mov eax, (imm8) ; r1 = (imm8)
xor eax, ecx ; r1 = (imm8) XOR r3
Run Code Online (Sandbox Code Playgroud)
我听说这是因为没有向后的 x86 …
为什么 Windows 7 x64 比我的 PC 上的 x86 版本运行得更快,即使我主要在其中使用 x86 的东西?我有什么问题,我错过了什么?
我使用的大部分东西都是 x86(例如 DAW、游戏、媒体播放器)。然而,其中相当一部分是 x64(尽管它们的 x86 对应项工作得很好)。
我曾尝试在同一系统上使用相同的东西,但最终发现 Windows 7 x64 的运行速度比 x86 略快。我很细心。我什至注意到最小的窗口动画。
系统:Windows 7 Ultimate x64
CPU:Intel Core 2 Duo E7500 @ 2.93 GHz
RAM:2 GB x 2 = 4 GB DDR2 @ 332 MHz
主板:Intel D945GCNL
显卡:ATI Radeon HD 4350 @ 1 GB 专用
音频:M-Audio FastTrack Pro
硬盘:三星 HD753LJ 733 GB 和三星 HD160JJ 156 GB
如您所见,我的系统很旧。
我刚刚在 Heise Online 上阅读了一篇文章(看表格,其余的是德语),其中声称超线程会减慢单线程程序的速度,尽管它们不使用内核的第二个线程。也就是说,如果您在 BIOS 中禁用 HT,单线程应用程序的运行速度会稍快一些。
这是真的还是测量误差?有没有人有关于基准的来源,这些基准断言相同?
当VirtualBox在x86平台上运行时,根据文档:
当启用硬件虚拟化(即 VT-x 或 AMD-V)时,管理程序(即 VirtualBox 本身)以VMX 根模式(又名ring -1)运行,而虚拟机以VMX 非根模式(又名ring 0)运行. 这也是其他管理程序的工作方式。
另一方面,当硬件虚拟化不可用时,会使用软件虚拟化,并且来宾内核在环 1 中运行。从上面链接的第 10.6 节:
访客环 3 代码未经修改,全速运行,尽可能多......
对于 ring 0 中的来宾代码,Oracle VM VirtualBox 使用了一个巧妙的技巧。它实际上重新配置了来宾,以便它的 ring-0 代码改为在 ring 1 中运行,这在 x86 操作系统中通常不使用)。结果,当guest ring-0代码,实际运行n ring 1,例如guest设备驱动程序尝试写入I/O寄存器或执行特权指令时,Oracle VM VirtualBox hypervisor在“真实”ring 0可以接手。
...
- 在 ring 1 中运行 ring 0 代码会导致很多额外的指令错误,因为ring 1 不允许执行任何特权指令,其中 guest …
如何在 x86 平台上安装 Google 的 Android 操作系统?
这样做有什么先决条件吗?
从我对平板电脑的个人体验以及我读过的基准测试和文章来看,几乎在所有移动设备中都可以看到 ARM 处理器,它们在消耗的功率方面提供了令人难以置信的性能。看起来 ARM 本质上比 x86 更节能。
在我看来,这是因为 x86 是CISC 架构而 ARM 是RISC 架构。但是,英特尔凌动处理器在功耗方面也提供了非常好的性能。另外,在研究了计算机架构后,我的理解是在现代处理器中,复杂的 x86指令集架构 (ISA)在内部被翻译成更简单的微操作使用比 x86 更接近更简单的 ARM 或 MIPS ISA 的内部指令集。因此,呈现给程序员的 ISA 只不过是一个向处理器发出命令的接口,而不是芯片执行的实际低级操作的表示。再说一次,实现这个转换层需要芯片上额外的硅空间......
也就是说,假设它们是使用相同的半导体工艺实现的,ARM 是否天生比 x86 更高效?有了适当设计的微体系结构,x86 处理器是否有可能提供与 ARM 处理器相同的每瓦性能?
请记住,我正在寻找本着 Stack Exchange 的精神而不仅仅是猜测的写得很好的技术答案。
x86 ×10
64-bit ×3
assembly ×2
performance ×2
16-bit ×1
android ×1
arm ×1
cpu ×1
installation ×1
latency ×1
linux ×1
mips ×1
power ×1
privileges ×1
virtualbox ×1
windows ×1
windows-3.1 ×1
windows-7 ×1