缓存
知识点
WC(写组合/写合并)
同一时刻只能保证4个地址;
WB(写回绕/回写)
WT(直写)
通常是做多媒体
实验代码
课程中test1比test2快, 实验是test2比test1快???
1 | // 10_19_Cache(缓存).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 |
PAT
TLB
每个核有4个TLB, 2个数据核(dTLB), 2个指令TLB(iTLB);
实验步骤
- 申请2个地址, 分别赋值;
- 把第一个地址挂在0地址上, 然后访问, 取出结果保存变量;
- 又把第二个地址挂在0地址上, 然后访问, 取出结果也保存变量;
- 观察变量1, 变量2有什么不同;
401080
gdtr: 0040ec00`00081080
实验代码
代码出现问题, 获取0地址时为0;
1 | // 10_21_TLB.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 |
刷新CR3
- 当切换CR3的时候, CPU就认为在切换不同的页表; 当页表发生变化的时候, TLB就会产生一个刷新; 凡是G位等于0的通通刷新掉; 刷新除G位为1的情况;
切换线程的时候, 判断当前被切换与切换是否是一个进程, 如果不是, 会切换页表(CR3);
1 | mov eax, cr3; //刷新cr3 |
- 把地址变为无效缓存; 刷新一条
1 | invlpg dword ptr ds:[0]; // 强制刷新TLB中某一行 |
- CR4控制寄存器中有一个PGE位, 这个是控制所有的G位是否有效; 刷新所有;