处理器高速缓存和TLB控制

处理器高速缓存和TLB控制

*flush_tlb_all和flush_cache_all刷出整个TLB/告诉缓存。
*flush_tlb_mm和flush_cache_mm刷出所所有术语地址空间mm的TLB/高速缓存项。
*flush_tlb_range和 flush_cache_ragee暑促胡地址范围vma->vm_mm中虚拟地址start和end之间所有TLB/告诉缓存项
*flush_tlb_page和flush_cache_page 刷出虚拟地址贼范围内所有的TLB/高速缓存项。
*update_mmu_cache在处理页失效之后叼哦那个。
内核对数据和指令告诉缓存不做区分。如果需要区分,特定于处理器的代码可根据vm_area_struct->flags的VM_EXEC标志是否设置,来确定告诉缓存包含的指令还是数据。
flush_cache_和flush_tlb_函数经常成对出现。
操作的顺序是:刷出高速缓存、操作内存、刷出TLB。这个顺序很重要,一下有两个原因
*如果顺序反过来,那么在TLB刷出之后,正确信息提供之前,多处理器系统中的另一个CPU可能从进程的页表取得错误的信息。
*在刷出告诉缓存时,某些体系结构需要依赖TLB中的“虚拟->物理”转换规则。flush_tlb_mm必须在flush_cache_mm之后执行,以确保这一点。有些控制函数明确地应用于数据高速缓存或指令高速缓存
*如果高速缓存包含几个虚拟地址不同额项指向内存中的同一页,可能会发生所谓的alias问题,flush_dcache_page有助于防止该问题。
*在内核向内核内存方位写入数据,而该数据将在此后作为代码执行,则此时需要调用flush_icache_range.该场景的一个标准实例是向内核载入模块时。二进制数据首先复制到物理内存中,然后执行。
*flush_icache_user_range是一个特殊函数,用于ptrace机制。

小结

在内核进入正常运作之后,内存管理分两个层次处理。伙伴系统负责物理页帧的管理,而slab分配器则处理小块内存的分配,并提供了用户层malloc函数组的内核等价物。
伙伴系统围绕有多页组成的连续内存块的拆分和在合并展开。
slab分配器在伙伴系统之上实现。他不仅允许分配任意用途的小块内存,还可用对经常使用的数据结构创建特定的缓存。
内存管理的初始化很有挑战性,因为该子系统自身使用的数据结构月需要内存,必须从某处进行分配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值