显然,x86 INVD使高速缓存层次结构无效,而不将内容写回内存.
我很好奇,这样的教学有什么用?鉴于人们对各种缓存级别的数据控制得很少,甚至对异步刷新的内容控制得更少,这似乎只是一种确保你不知道什么数据的方法.再也不在记忆中了.
我想知道是否有一种方法可以将数据直接存储在处理器的数据缓存中,而不是存储在主内存中。我知道缓存的工作方式是存储最常用的数据,但是,有意义的是要有一个汇编指令来告诉处理器,这将是一个常用数据。我正在使用IA-32汇编语言。
谢谢!
如果一个64字节的缓冲区被大量读/写,那么它很可能会被保存在L1中; 但有没有办法强迫这种行为?
同样,给一个核心独占访问这64个字节,并告诉它不要将数据与其他核心和内存控制器同步,这样这些64个字节总是存在于一个核心的L1中,无论CPU是否认为它经常被使用.
我正在开发一个必须部署在具有root访问权限的客户端的私有云服务器上的软件程序.我可以通过安全端口与软件进行通信.
我想阻止客户对我的程序进行逆向工程,或者至少让它"足够难".以下是我的方法:
我认为这种方法可以阻止root用户:
使用调试器对我的代码进行反向工程
反复运行程序以检查输出
我的问题是:这个设计的弱点是什么?root用户如何攻击它?
谈到效率,缓存是核心。
我知道缓存通常会自动发生。
但是,我想自己控制缓存的使用,因为我认为我可以比一些不知道确切程序的启发式方法做得更好。
因此,我需要汇编指令来直接移入或移出高速缓存单元。
喜欢:
movL1 address content
Run Code Online (Sandbox Code Playgroud)
我知道有一些指令会给出“缓存系统”提示,但我不确定这是否足够,因为这些提示可能会被忽略,或者它们可能不足以表达任何可以通过这种移入/移出缓存来表达的内容命令。
是否有任何允许完全缓存控制的汇编程序?
旁注:为什么我想改进缓存:
考虑一个具有 1 个寄存器和一个包含 2 个单元的缓存的假设 CPU。
考虑以下两个程序:
(其中 x,y,z,a 是存储单元)
"START"
"move 1 to x"
"move 2 to y"
"move 3 to z"
"move 4 to a"
"move z to x"
"move y to x"
"END"
"START"
"move 1 to x"
"move 2 to y"
"move 3 to z"
"move 4 to a"
"move a to x"
"move y to x"
"END"
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,您将寄存器和缓存用于 x,y,z(a 只写入一次)在第二种情况下,您将寄存器和缓存用于 a,x,y (z只写入一次)
如果 CPU …