Windows内核-TLB
CPU Cache与TLB的区别
(1)CPU缓存是位于CPU与物理内存之间的临时存储器,它的容量比内存小得多但是交换速度比内存快得多
(2)CPU缓存中:存储的是物理地址<->内容 的映射
而TLB中存储的是 线性地址<---->物理地址 的映射
TLB
Translation lookaside buffer。根据功能可以译为快表,直译可以翻译为旁路转换缓冲,也可以把它理解成页表缓冲。里面存放的是一些页表文件(虚拟地址到物理地址的转换表)。当处理器要在主内寻址时,不是直接在内存的物理地址里查找的,而是通过一组虚拟地址转换到主内存的物理地址,页表文件(PTE page table entry 页表条目存放在内存中)就是负责将虚拟内存地址翻译成实际的物理内存地址,TLB中存放了部分PTE页表的缓存。而CPU寻址时会优先在TLB中进行寻址。TLB是在MMU中包括的一段小的缓存(MMU memory management unit 存储器管理单元,是CPU芯片上的一个专用硬件)。处理器的性能就和寻址的命中率有很大的关系。
TLB命中与失败
如果TLB中正好存放着所需的页表,则称为TLB命中(TLB Hit);如果TLB中没有所需的页表,则称为TLB失败(TLB Miss)。
如果命中的话,就可以直接将虚拟地址转换为物理地址,如果不命中,则必须在PTE页表中继续查找,并将找到的PTE存放到TLB中,覆盖已经存在的一个条目。
TLB结构
LA(线性地址) | PA(物理地址) | ATTR(属性) | LRU(统计) |
---|---|---|---|
0x8000000 | xxxx |
其中
(1)ATTR(属性):物理页属性,若是10-10-12机制,则是PDT属性&PTT属性;若是2-9-9-12机制,则是PDPE属性&PDT属性&PTT属性
(2)一个CPU有一个(组)TLB,若发生进程切换(Cr3改变),TLB立刻刷新。
(3)操作系统高2GB的映射基本不变,若Cr3发生改变,即切换进程,TLB刷新,低2GB在TLB中的映射立刻改变。实现机制: PDE、PTE中低12位中的G标志位,若G=1,TLB刷新时不会刷新该表项。若TLB满,则废弃LRU低的表项。
TLB种类
一个CPU一组TLB,TLB在X86体系中,一般有4组TLB
(1)缓存一般页表(4K字节页面)的指令页表缓存(Instruction-TLB)
(2)缓存一般页表(4K字节页面)的数据页表缓存(Data-TLB)
(3)缓存大尺寸页表(2M/4M,2M针对2-9-9-12机制,4M针对10-10-12机制)的指令页表缓存(Instruction-TLB)
(4)缓存大尺寸页表(2M/4M,2M针对2-9-9-12机制,4M针对10-10-12机制)的指数据页表缓存(Data-TLB)
TLB联合方式
当CPU需要页表数据时,它必须迅速做出如下的2个判断:一个是所需要的页表是否已缓存在TLB内部(即判断TLB命中或是失败),另一个是所需要的页表在TLB内的哪个条目内。为了尽量减少CPU做出这些判断所需的时间,就必须在TLB页表条目和内存页表条目之间的对应方式上动点脑筋,下面是几种常见的对应关系。
名称 | 方式 | 应用 |
---|---|---|
全联合 | 内存页表中的任何一个条目(PTE)都可能被对应缓存到TLB的任何一个条目,TLB内所有条目都可能被对应到内存页表里的所有条目上 | Athlon XP |
4路联合 | 只有内存页表区的部分条目可能被缓存到TLB的某个4个页表条目所在块上 | P4 |
Windows内核-TLB相关推荐
- Windows内核执行体对象管理器的操作过程与分析
我之前写过一个有关于对象管理的读书笔记.但是这篇文章与前面的不同,这是我个人对对象管理器到底是什么的一个分析,而且也是直接对WRK代码进行的阅读. 执行体对象即我们通常所言的内核对象,我们知道Wind ...
- 2、从汇编语言到Windows内核编程笔记(2)
内核线程 在驱动中生成的线程一般是系统线程.系统线程所在的进程名为"System". NTSTATUS PsCreateSystemThread( OUT PHANDLE Thre ...
- 读书笔记之《Windows内核原理与实现》
最近学习<Windows内核原理与实现>发现其博大精深,粗略过了一遍,很多东西比较茫然,看书之余把书中涉及的函数,结构,全局变量的所在页数总结出来,便于以后查阅. 由于半自动半手工,难免有 ...
- Windows内核函数的命名
<Windows内核情景分析--采用开源代码ReactOS(上.下册)>本书通过分析ReactOS的源代码介绍了Windows内核各个方面的结构.功能.算法与具体实现.本小节为大家介绍Wi ...
- Windows内核新手上路1——挂钩SSDT
Windows内核新手上路1--挂钩SSDT 这个系列记录学习我学习windows内核的点点滴滴,高手请直接无视. 文章核心内容:挂钩SSDT中函数列NtOpenProcess,NtDuplicate ...
- Windows内核新手上路3——挂钩KeUserModeCallBack
Windows内核新手上路3--挂钩KeUserModeCallBack 1. 简介 在Windows系统中,提供了几种方式从R0调用位于R3的函数,其中一种方式是KeUserModeCall ...
- Windows内核新手上路2——挂钩shadow SSDT
Windows内核新手上路2--挂钩shadow SSDT 文章核心内容:安全软件窗口保护.安全输入.截屏保护的一些思路.挂钩NtUserFindWindowEx.NtUserGetForegroun ...
- Windows内核 基本汇编指令
1)用VS2010新建Win32 Console Application,工程名为ACECore,工程建立完成后得到打开文件ACECore.cpp,代码如下: #include "stdaf ...
- 在 Windows 内核上运行 Docker 靠谱吗?专家六问六答帮你解惑!
本文首发自"Docker公司"公众号(ID:docker-cn) 编译丨小东 每周一.三.五 与您不见不散! 上周三,我们为大家带来了新一期的网络研讨会--不改代码!看 Dock ...
最新文章
- SAP中添加自定义菜单
- python中的私有化
- python三维数据增强_python图像数据增强——imgaug (三)
- win32以动态链接库导出类及其成员变量
- ubuntu下的jdk环境变量配置(解决sun jdk和open jdk的问题)
- (转)Flex compc ant 编译
- 汉字转拼音以及五笔码
- 普通话-汉语拼音字母表
- 三极管放大电路基础知识
- c语言串口通信实验报告,单片机串口通信实验报告总结
- 20脚的RSIC-V MCU,竟然可以基于FOC开发PMSM电机
- php计算众数,C++算法代码——众数
- linux vi 编辑器下经常会用到保存退出与不保存退出
- 服务器硬防和软防是什么意思?服务器软件防火墙
- Excel表格怎么转PDF?这两种途径都可以
- unity添加背景图片
- 高等数学(第七版)同济大学 习题12-1 个人解答
- Python聊天室设置与实现
- Android 局域网扫描
- Python 导出手机通讯录文件 VCF 文件中的手机号码