本文主要是介绍TLB的刷新方式--linux 2.4,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
TLB刷新的时机(i386)
struct tlb_state cpu_tlbstate[NR_CPUS] = {[0...NR_CPUS-1] = {&init_mm, 0}};
一般情况各个CPU的cpu_tblstate的state设置成TLBSTATE_OK,表示如果正在使用中的页面目录或页面表内容发生了变化就要刷新TLB的内容。
- 与vmalloc有关
- 与HIGHMEM映射有关
- 与外设总线(例如PCI)有关的映射
与TLBSTATE_OK相对的是TLBSTATE_LAZY。
在__exit_mm()和schedule()中会设置TLBSTATE_LAZY。
TLB刷新的方式(i386)
对TLB的刷新(其实是废弃当前TLB中的内容)可以是针对整个TLB的,也可以是针对一个具体页面相关的TLB的刷新。
- 对于整个TLB的刷新,直接读出CR3控制器后再写回;
- 对于一个具体页面相关的TLB的刷新,使用invlpg命令实现。
对整个TLB的冲刷由local_flush_tlb()进行;而废弃某个页面的相关的TLB,则由__flush_tlb_one()完成。
这篇关于TLB的刷新方式--linux 2.4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!