原文网址:http://sdnydubing.blog.163.com/blog/static/137470570201122810503396/

从虚拟地址到物理地址的转换过程可知:使用一级页表进行地址转换时,每次读/写数据需要访问两次内存,第一次访问一级页表获得物理地址,第二次才是真正的读/写数据;使用两级页表时,每次读/写数据需要访问三次内存,访问两次页表(一级页表和二级页表)获得物理地址,第三次才是真正的读/写数据。

上述的地址转换过程打打降低了CPU的性能,有没有办法改进呢?程序执行过程中,所用到的指令、数据的地址往往集中在一个很小的范围内,其中的地址、数据经常多次使用,这称为程序访问的局部性。由此,通过使用一个高速、容量相对较小的存储器来存储近期用到的页表条目(段/大页/小页/极小页描述符),以避免每次地址转换时都到主存去查找,这样可以大幅度地提高性能。这个存储器用来帮助快速地进行地址转换,称为“转译查找缓存”(TLB)。

当CPU发出一个虚拟地址时,MMU首先访问TLB,如果TLB中含有能转换这个虚拟地址的描述符,则直接利用此描述符进行地址转换和权限检查;否则MMU访问页表找到描述符后再进行地址转换和权限检查,并将这个描述符填入TLB中(如果TLB已满,则利用round-robin算法找到一个条目,然后覆盖它),下次再使用这个虚拟地址时就可以直接使用TLB中的地址描述符了。

使用TLB需要保证TLB中的内容与页表一致,在启动MMU之前,在页表中的内容发生变化后,尤其要注意这一点。S3C2440可以使无效(Invalidate)整个TLB,或者通过某个虚拟地址使无效TLB中的某个条目。一般做法是:在启动MMU之前使无效整个TLB,在改变页表时,使无效所涉及的虚拟地址对应的TLB中的条目。

转载于:https://www.cnblogs.com/wi100sh/p/4277346.html

【转】TLB(Translation Lookaside Buffers,TLB)的作用相关推荐

  1. Translation Lookaside Buffer (TLB)

    CPU每次访问虚拟内存,虚拟地址都必须转换为对应的物理地址.从概念上说,这个转换需要遍历页表,页表是三级页表,就需要3次内存访问.就是说,每次虚拟内存访问都会导致4次物理内存访问.简单点说,如果一次虚 ...

  2. 内存管理 -- 快表 TLB (Translation Look-aside Buffers)

    一.页表 因为虚拟内存的存在,它最终还是要去访问物理内存,中间就需要通过映射,来达到获取内存中数据的目的.而映射就需要建立虚拟内存与物理内存的关系,这就有了页表的存在. 页表存在于进程的内存之中,MM ...

  3. linux系统从哪获取tlb信息,关于linux:TLB缓存是个神马鬼如何查看TLB-miss

    介绍TLB之前,咱们先来回顾一个操作系统里的基本概念,虚拟内存. 虚拟内存 在用户的视角里,每个过程都有本人独立的地址空间,A过程的4GB和B过程4GB是齐全独立不相干的,他们看到的都是操作系统虚构进 ...

  4. Hybrid TLB Coalescing:Improving TLB Translation Coverage under Diverse Fragmented Memory Allocations

    Hybrid TLB Coalescing: Improving TLB Translation Coverage under Diverse Fragmented Memory Allocation ...

  5. 深入理解Linux内核第3版--笔记-1.pdf

    深入理解Linux内核第3版.pdf         Understanding the Linux Kernel, 3rd Edition Preface    The Audience for T ...

  6. Linux内存管理 —— 为buddy做准备:MMU, TLB, ZONE

    本文都是假设系统是32位,页大小为4KB,基于ARM架构(不过和体系结构相关的内容不多). 1. 了解MMU 在启用MMU的Linux内核中,CPU是通过虚拟地址来访问物理内存的.MMU(Memory ...

  7. 简单介绍MMU和TLB

    简单记录一下有关MMU的一些东西 背景 引入虚拟地址的原因 (一)让APP可以以同样的链接地址来编译 举个例子,两个hello应用程序,编译后查看反汇编代码,这两个程序的起始地址都是0x80A4.于是 ...

  8. 内存管理:Linux Memory Management:MMU、段、分页、PAE、Cache、TLB

    目录 Linux Memory Management Memory Address Need for Virtual Addressing Address Translation Address Tr ...

  9. linux内核编译练习

    编译前的准备 一.查看硬件信息. [root@REHL5-T Desktop]# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cp ...

最新文章

  1. QT小例子GUI(主)线程与子线程之间的通信
  2. 访问tomcat html,访问云服务器tomcat里html界面
  3. vue异常——template SyntaxError: string literal contains an unescaped line break
  4. (王道408考研操作系统)第一章计算机系统概述-第一节5:系统调用
  5. Majority Number III
  6. VLAN技术详解三(VLAN三种访问模式)
  7. oracle 数据误删除 数据恢复
  8. 前端开发主流框架整理推荐
  9. 2014年9月-前端开发月刊
  10. php 控制usb打印,usb口打印机的指令打印和驱动打印
  11. LoadLibraryEx(DONT_RESOLVE_DLL_REFERENCES)的缺陷
  12. 沟通的艺术:看人入里,看出人外 - part 2
  13. node.js-day04
  14. 使用阿里云PCDN降低内容分发成本
  15. Jenkins创建一键发布即父子项目
  16. 【Python案例】基于Pygame黑白棋游戏(附源码)
  17. android_54a3,Android最新的各个分支版本号(2013-10-27)
  18. Frontend 当前前端的三种渲染方式
  19. JAVA根据经纬度计算两点距离
  20. comsol_multiphysics入门教程

热门文章

  1. 自动控制原理第二版王建辉_气箱脉冲布袋除尘器的工作原理
  2. jquery 获取索引值在一定范围的列表
  3. Qt笔记-QTcpSocket跨线程调用(官方推荐方法,非百度烂大街方法)
  4. Java笔记-Spring Boot JDBC连接Oracle数据库
  5. C++ opengl 使视野转头移动(站桩看世界)
  6. android 360旋转动画,ANDROID——仿360手机卫士的旋转打分控件
  7. chart.js x轴显示不全_机床大讲堂第67讲——基于FANUC系统的数控铣床增加第四轴的方法...
  8. php 重新编译_linux下为php添加GD库(重新编译php)
  9. char装cstring_VC中char*转换为CString
  10. 移动端vant时间选择器_vue移动端组件库(vant)