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相关推荐

  1. Windows内核执行体对象管理器的操作过程与分析

    我之前写过一个有关于对象管理的读书笔记.但是这篇文章与前面的不同,这是我个人对对象管理器到底是什么的一个分析,而且也是直接对WRK代码进行的阅读. 执行体对象即我们通常所言的内核对象,我们知道Wind ...

  2. 2、从汇编语言到Windows内核编程笔记(2)

    内核线程 在驱动中生成的线程一般是系统线程.系统线程所在的进程名为"System". NTSTATUS PsCreateSystemThread( OUT PHANDLE Thre ...

  3. 读书笔记之《Windows内核原理与实现》

    最近学习<Windows内核原理与实现>发现其博大精深,粗略过了一遍,很多东西比较茫然,看书之余把书中涉及的函数,结构,全局变量的所在页数总结出来,便于以后查阅. 由于半自动半手工,难免有 ...

  4. Windows内核函数的命名

    <Windows内核情景分析--采用开源代码ReactOS(上.下册)>本书通过分析ReactOS的源代码介绍了Windows内核各个方面的结构.功能.算法与具体实现.本小节为大家介绍Wi ...

  5. Windows内核新手上路1——挂钩SSDT

    Windows内核新手上路1--挂钩SSDT 这个系列记录学习我学习windows内核的点点滴滴,高手请直接无视. 文章核心内容:挂钩SSDT中函数列NtOpenProcess,NtDuplicate ...

  6. Windows内核新手上路3——挂钩KeUserModeCallBack

    Windows内核新手上路3--挂钩KeUserModeCallBack 1.     简介 在Windows系统中,提供了几种方式从R0调用位于R3的函数,其中一种方式是KeUserModeCall ...

  7. Windows内核新手上路2——挂钩shadow SSDT

    Windows内核新手上路2--挂钩shadow SSDT 文章核心内容:安全软件窗口保护.安全输入.截屏保护的一些思路.挂钩NtUserFindWindowEx.NtUserGetForegroun ...

  8. Windows内核 基本汇编指令

    1)用VS2010新建Win32 Console Application,工程名为ACECore,工程建立完成后得到打开文件ACECore.cpp,代码如下: #include "stdaf ...

  9. 在 Windows 内核上运行 Docker 靠谱吗?专家六问六答帮你解惑!

    本文首发自"Docker公司"公众号(ID:docker-cn) 编译丨小东 每周一.三.五 与您不见不散! 上周三,我们为大家带来了新一期的网络研讨会--不改代码!看 Dock ...

最新文章

  1. SAP中添加自定义菜单
  2. python中的私有化
  3. python三维数据增强_python图像数据增强——imgaug (三)
  4. win32以动态链接库导出类及其成员变量
  5. ubuntu下的jdk环境变量配置(解决sun jdk和open jdk的问题)
  6. (转)Flex compc ant 编译
  7. 汉字转拼音以及五笔码
  8. 普通话-汉语拼音字母表
  9. 三极管放大电路基础知识
  10. c语言串口通信实验报告,单片机串口通信实验报告总结
  11. 20脚的RSIC-V MCU,竟然可以基于FOC开发PMSM电机
  12. php计算众数,C++算法代码——众数
  13. linux vi 编辑器下经常会用到保存退出与不保存退出
  14. 服务器硬防和软防是什么意思?服务器软件防火墙
  15. Excel表格怎么转PDF?这两种途径都可以
  16. unity添加背景图片
  17. 高等数学(第七版)同济大学 习题12-1 个人解答
  18. Python聊天室设置与实现
  19. Android 局域网扫描
  20. Python 导出手机通讯录文件 VCF 文件中的手机号码

热门文章

  1. Windows常用命令以及用法
  2. 共享代购项目计划书_20180704
  3. adb之连接夜神模拟器
  4. HTML初学者常用标签及属性
  5. html怎么让两个div重叠,两个DIV或多个DIV顺序重叠加
  6. 014day(h5的发展史,h5的兼容,h5的语法,h5的语义化,h5的常用标记,百分比下字体居中的两种方法,video视频文件,audio音频文件,
  7. PyQt5 模态对话框与非模态对话框的区别
  8. strings.Split
  9. 微信小游戏的设计和开发
  10. android设置文字水平和垂直居中显示,Android TextPaint 写文字 水平、垂直居中