This question already has answers here:
Is there a way to disable CPU cache (L1/L2) on a Linux system?

(2个答案)


3年前关闭。




我正在尝试禁用我的CPU的内部和外部内存缓存,我的配置如上所述:
-戴尔精密工作站
-Intel Core 2 Duo E6550 2.33 GHz
-Ubuntu 8.10

我试图通过BIOS禁用它,但它表明DELL计算机不允许用户访问缓存,然后我发现了另一种方法,那就是以编程方式禁用缓存,英特尔架构手册A.3指出cr0寄存器可以被设置为通过设置位30禁用缓存,我写了上面的代码然后:

invd

mov eax,cr0

mov eax,40000000H;设置位30

mov cr0,eax

该程序已成功编译,但是当我尝试运行exe文件时,它出现段错误(我正在使用NASM)

有人可以帮我吗?

最佳答案

请注意,即使由于处于内核中或在DOS下以保护模式运行工具而处于环0中,将 0x40000000 移至 cr0 肯定也会造成灾难。您会看到,控制寄存器(cr0)控制着影响处理器运行方式的各种因素,例如启用分页,保护模式(不是直接启用)等。如果取消所有这些位的设置,结果将完全不同如果您先前启用了分页功能,那么在环境和出现段错误方面就不足为奇了。

您应该改为这样做:

mov eax,cr0
or eax, 40000000H ;set bit 30 without clearing the others
mov cr0,eax

10-06 08:57