地址转换--TLB缓存一致性
TLB缓存的一致性由软件(内核)提供保证,不是硬件。
TLB缓存是对页表项的缓存
如何保证页表项跟TLB缓存之间的一致性?
对页表项的修改情形分类
- 整个页表项失效
比如,当发生进程间切换时,对于新进程来说,旧进程的所有虚拟地址都失效了,即相应的页表项和TLB缓存条目都失效,如果不做相应的清理工作,则新进程就可以读取就进程的数据结构,要么导致旧进程崩溃,要么窃取旧进程的敏感信息。
系统一般的做法是:
首先,修改页表寄存器使其指向新的进程;
其次,要么清空所有TLB条目,要么在原TLB条目中添加进程id信息
tagged TLB entry = {
process ID,
virtual page number,
physical page frame number,
access permissions
}
【地址转换--TLB缓存一致性】注意:(1)这里不需要修改硬件多级页表里存储的旧进程的页表项;
(2)新进程和老进程可能使用了相同的虚拟地址
- 权限修改
-- 权限增强
当内核增强需要增强一个页的权限时,首先中断相应进程,保证TLB中没有旧的地址转换的结果。如果这个页是共享的,则要保证TLB中没有任何一个引用该页的进程id的拷贝。比如,将一块内存区域标记为copy-on-write,系统需要将这块内存区域从可读可写降级为只读,需要移除所有引用该内存区域的进程id的拷贝,因为引用该内存区域的旧TLB条目可能还是可读可写权限。
-- 权限降级
什么都不用做,比如:页表项由invalid变成valid(动态增长堆栈时,需要分配物理内存和修改invalid页表项指向新的物理内存),页表项从只读变成可读可写等
对于多处理器来说,每个处理器上的TLB里都可能存在同一个进程的地址转换结果拷贝。只要有页表项发生修改,则在修改生效前,每个处理器上的TLB里相应的拷贝都要被丢弃。具体地讲,当前处理器可以立即使其TLB失效,移除其他处理器上的条目需要操作系统中断其他处理器,请求移除该拷贝。
推荐阅读
- 一起来学习C语言的字符串转换函数
- 视频转换器哪种好用()
- ts泛型使用举例
- 以太坊中的计量单位及相互转换
- www和https://又被Chrome地址栏隐藏了
- 怎么将桌面上的CAD图纸添加到软件中进行BMP格式转换()
- 狗狗定点大小便视频教程下载地址
- 零基础学习Python作业本(13)
- 一切顺利、一路平安
- NAT(网络地址转换技术)