【转】TLB(Translation Lookaside Buffers,TLB)的作用
原文网址: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)的作用相关推荐
- Translation Lookaside Buffer (TLB)
CPU每次访问虚拟内存,虚拟地址都必须转换为对应的物理地址.从概念上说,这个转换需要遍历页表,页表是三级页表,就需要3次内存访问.就是说,每次虚拟内存访问都会导致4次物理内存访问.简单点说,如果一次虚 ...
- 内存管理 -- 快表 TLB (Translation Look-aside Buffers)
一.页表 因为虚拟内存的存在,它最终还是要去访问物理内存,中间就需要通过映射,来达到获取内存中数据的目的.而映射就需要建立虚拟内存与物理内存的关系,这就有了页表的存在. 页表存在于进程的内存之中,MM ...
- linux系统从哪获取tlb信息,关于linux:TLB缓存是个神马鬼如何查看TLB-miss
介绍TLB之前,咱们先来回顾一个操作系统里的基本概念,虚拟内存. 虚拟内存 在用户的视角里,每个过程都有本人独立的地址空间,A过程的4GB和B过程4GB是齐全独立不相干的,他们看到的都是操作系统虚构进 ...
- Hybrid TLB Coalescing:Improving TLB Translation Coverage under Diverse Fragmented Memory Allocations
Hybrid TLB Coalescing: Improving TLB Translation Coverage under Diverse Fragmented Memory Allocation ...
- 深入理解Linux内核第3版--笔记-1.pdf
深入理解Linux内核第3版.pdf Understanding the Linux Kernel, 3rd Edition Preface The Audience for T ...
- Linux内存管理 —— 为buddy做准备:MMU, TLB, ZONE
本文都是假设系统是32位,页大小为4KB,基于ARM架构(不过和体系结构相关的内容不多). 1. 了解MMU 在启用MMU的Linux内核中,CPU是通过虚拟地址来访问物理内存的.MMU(Memory ...
- 简单介绍MMU和TLB
简单记录一下有关MMU的一些东西 背景 引入虚拟地址的原因 (一)让APP可以以同样的链接地址来编译 举个例子,两个hello应用程序,编译后查看反汇编代码,这两个程序的起始地址都是0x80A4.于是 ...
- 内存管理:Linux Memory Management:MMU、段、分页、PAE、Cache、TLB
目录 Linux Memory Management Memory Address Need for Virtual Addressing Address Translation Address Tr ...
- linux内核编译练习
编译前的准备 一.查看硬件信息. [root@REHL5-T Desktop]# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cp ...
最新文章
- QT小例子GUI(主)线程与子线程之间的通信
- 访问tomcat html,访问云服务器tomcat里html界面
- vue异常——template SyntaxError: string literal contains an unescaped line break
- (王道408考研操作系统)第一章计算机系统概述-第一节5:系统调用
- Majority Number III
- VLAN技术详解三(VLAN三种访问模式)
- oracle 数据误删除 数据恢复
- 前端开发主流框架整理推荐
- 2014年9月-前端开发月刊
- php 控制usb打印,usb口打印机的指令打印和驱动打印
- LoadLibraryEx(DONT_RESOLVE_DLL_REFERENCES)的缺陷
- 沟通的艺术:看人入里,看出人外 - part 2
- node.js-day04
- 使用阿里云PCDN降低内容分发成本
- Jenkins创建一键发布即父子项目
- 【Python案例】基于Pygame黑白棋游戏(附源码)
- android_54a3,Android最新的各个分支版本号(2013-10-27)
- Frontend 当前前端的三种渲染方式
- JAVA根据经纬度计算两点距离
- comsol_multiphysics入门教程
热门文章
- 自动控制原理第二版王建辉_气箱脉冲布袋除尘器的工作原理
- jquery 获取索引值在一定范围的列表
- Qt笔记-QTcpSocket跨线程调用(官方推荐方法,非百度烂大街方法)
- Java笔记-Spring Boot JDBC连接Oracle数据库
- C++ opengl 使视野转头移动(站桩看世界)
- android 360旋转动画,ANDROID——仿360手机卫士的旋转打分控件
- chart.js x轴显示不全_机床大讲堂第67讲——基于FANUC系统的数控铣床增加第四轴的方法...
- php 重新编译_linux下为php添加GD库(重新编译php)
- char装cstring_VC中char*转换为CString
- 移动端vant时间选择器_vue移动端组件库(vant)