TLB(Translation Lookaside Buffer)转换检测缓冲区是一个内存管理单元,用于改进虚拟地址到物理地址转换速度的缓存。
TLB是一个小的,虚拟寻址的缓存,其中每一行都保存着一个由单个PTE(Page Table Entry,页表项)组成的块。如果没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理地址和取数据。

关于TLB与cache-CPU缓存的关系,TLB介于CPU与cache之间,是内存的管理单元,用于程序从逻辑地址访问实际内存地址的页表缓存。

当程序或cpu要读取数据,CPU会根据程序提供的逻辑地址的前20位映射码到TLB中查询,TLB中保存所有已运行程序的前20位逻辑地址的映射码,查到(命中)根据前20位映射码直接访问实际内存地址。查不到(不命中)CPU会到CPU缓存(cache)中查询,没有CPU会重新加载(实际内存)所有逻辑地址的映射码(一些程序停止响应后过一会又响应),后直接读取硬盘上数据,同时将逻辑地址映射信息保存回TLB(刷新TLB)。TLB归系统(OS)在内存中创建、管理,也算是一种缓存,软缓存。CPU cache是加快CPU与内存之间数据交换的缓存,归CPU管理,是一种硬件缓存。

当CPU访问程序时,内存读取速度很快,将CPU需要的数据块(实际内存地址)读取保存在内存中,内存空间有限,符合软件编写规则的程序都只能保存很小的数据块在内存中,并且内存中这些数据块只有被CPU全部处理完,内存才会加载下一个数据块。CPU要一点一点的处理这些内存中的数据块,当CPU处理完这个数据块需等待内存加载下一个数据块。(也可以说内存停止慢慢等CPU处理完。)这就造成了数据处理的停顿(虽然这点时间可能就是几毫秒),为了保持数据处理的连贯性、持续性,CPU
cache应运而生。内存中要处理或优先处理的数据块先被CPU cache加载,不再影响内存的运作,CPU优先从CPU
cache中加载处理数据。CPU
cache起了缓冲、缓存作用。(这只是CPU运行的大方向的理论,实际IU与AU对缓存还有不同的处理,并且像IU酷睿与新的I系列CPU在缓存、内置内存控制器等多有改进,但无论怎样这大方向的理论没变!同频率不同价的CPU多是砍CPU
cache大小或指令来区分,资金不是太紧张的同学还是选同频大缓存的CPU为好。同类型相比I3与I3,别拿I3与I5比。。。。)

如上,CPU、CPU
cache或内存都会分优先级来加载处理数据,一些暂时不用的数据,内存会自动卸载数据到虚拟内存中,同时映射地址供以后直接调用。没有启用虚拟内存,内存会直接卸载暂时不用的数据,用时再从硬盘上读取。大家注意到,直接以后从硬盘上读取还是卸载数据到虚拟内存中,好像都一样,都要从硬盘上读取。实际使用时是不一样的,调用虚拟内存,实际内存只要通过映射码直接读取。调用硬盘上数据有一个加载、选择需要数据块的时间(虽然这点时间可能还是几毫秒)。到此其实虚拟内存更像实际内存的缓存(但不是必须的),虚拟内存的作用更像TLB。所以偶一直建议大家启用虚拟内存。对于一些大容量内存的同学,也要尽量启用虚拟内存。不是关闭虚拟内存,系统就会运行更快。这是一个网路上流传甚广的歧义解读。

关闭虚拟内存让程序在实际内存中运行,需要几个前提条件,需要x64系统,只有x64系统才能更有效的管理、分配更多的内存地址。像一些x86系统开启或支持4G以上内存都是障眼法的过眼瘾,x86系统本身的内核出于稳定性的要求已经屏蔽了内存地址的扩展。(无论微软还是Linux都一样,不要听一些神人的通灵神释,如果Linux等x86内核本身支持Linux还出什么x64系统。)x86伺服器系统也是如此,只能看到更多的内存存在,(针对x86伺服器系统以前有几个专门优化的程序可以使用3g内存,现在基本已经绝种了)如我们都知道银行有许多毛爷爷,但你能把银行的钱拿来就用吗!第二个先决条件就是软件本身要支持、启用内存地址扩展,也就是x64位程序并编译到了可以启用更多的内存地址扩展,有些程序(偶就不说软件名了)只是包了x64皮的x86程序。。。。。

x86程序以Windows系统下为例为了最大兼容性先天就限制了内存地址的调用(“符合软件编写规则的程序都只能保存很小的数据块在内存中”),如xxx不能读、xxx不能写的报错就是内存地址不能供软件调用,x64程序内存地址还是有限制但通过内存地址扩展可使用更多内存,如PS
x64版软件可以使用128G以上内存容量。

内存无论有多大,都会在开机时被系统初始化,分配好数据空间(实际内存地址)。内存像一栋楼,楼中有许多房间,x86程序无论怎样只能住小房间,x64程序可以住大房间,像PS等x64程序可以包下整个单元。无论x86还是x64程序房间住满了可以将一些暂时不用的放到下房(或叫小仓房)虚拟内存中,如没有多出的只能先丢掉了

TLB与内存寻址,内存读取,虚拟内存的相关原理的更多相关文章

  1. Linux内核源码分析 day01——内存寻址

    前言 Linux内核源码分析 Antz系统编写已经开始了内核部分了,在编写时同时也参考学习一点Linux内核知识. 自制Antz操作系统 一个自制的操作系统,Antz .半图形化半命令式系统,同时嵌入 ...

  2. 鸿蒙内核源码分析(内存汇编篇) | 谁是虚拟内存实现的基础 | 百篇博客分析OpenHarmony源码 | v14.14

    百篇博客系列篇.本篇为: v14.xx 鸿蒙内核源码分析(内存汇编篇) | 谁是虚拟内存实现的基础 | 51.c.h .o 内存管理相关篇为: v11.xx 鸿蒙内核源码分析(内存分配篇) | 内存有 ...

  3. x64 结构体系下的内存寻址

    欢迎转载,转载请注明出处:http://www.cnblogs.com/lanrenxinxin/p/4735027.html 在阅读NewBluePill源码的时候,看内存的那一块简直头疼,全是x6 ...

  4. Linux x86_64与i386区别之 —— 内存寻址

    毫无疑问,不管是32位,还是64位处理器,所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是 存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途不 ...

  5. X64下MmIsAddressValid的逆向及内存寻址解析

    标 题: [原创]X64下MmIsAddressValid的逆向及内存寻址解析 作 者: 普通朋友 时 间: 2015-10-21,20:03:52 链 接: http://bbs.pediy.com ...

  6. Linux内存寻址

    我会尽力以最简洁清晰的思路来写这篇文章. 所谓内存寻址也就是从写在指令里的地址,转化为实际物理地址的过程.因为操作系统要兼顾许多东西,所以也就变得复杂. 逻辑地址 → 线性地址 → 物理地址 逻辑地址 ...

  7. Linux内存寻址之分页机制

    在上一篇文章Linux内存寻址之分段机制中,我们了解逻辑地址通过分段机制转换为线性地址的过程.下面,我们就来看看更加重要和复杂的分页机制. 分页机制在段机制之后进行,以完成线性—物理地址的转换过程.段 ...

  8. Linux内存寻址之分段机制

    前言 最近在学习Linux内核,读到<深入理解Linux内核>的内存寻址一章.原本以为自己对分段分页机制已经理解了,结果发现其实是一知半解.于是,查找了很多资料,最终理顺了内存寻址的知识. ...

  9. 如何打开Windows Server 2003 内存寻址扩展

    本文介绍了如何在系统内存大于4G的情况下,让windows2003 Advanced Server支持大内存的方法: 由于Windows2003 32bit是32位操作系统,当服务器配备内存高达4G时 ...

随机推荐

  1. lambda,reduce,filter用法

    1.lambda的用法 sum = lambda arg1,arg2:arg1+arg2 sum(10,20) --->30 | | 实际上是def sum(arg1,arg2) return ...

  2. Jmeter-Logic Controllers(逻辑控制器)

    Critical Section Controller(临界区控制器) 参考:http://www.cnblogs.com/yanzhe/p/7729984.html ForEach Controll ...

  3. threejs精灵平面Sprite(类似tip效果)

    效果图:   let center = this.cube.position.clone(), size = this.cube.geometry.boundingBox.getSize(), sca ...

  4. windows下Java调用mysql的客户端备份和恢复

    这种东西没啥好聊的,其实就是Java执行dos界面下的命令,不过有些要注意就是了,真实dos下面的命令和java调用的windows系统的接口其实还是有一点不同. /** * @param hostI ...

  5. Ext.js基础

    第一章:Ext.js基础 好书推荐 Javascript设计模式 征服ajax web 2.0开发技术详解 简介 基础要求 了解HTML.CSS.熟练JS.JS的OOP.AJAX JSP/PHP/AS ...

  6. [TopCoder12141]SweetFruits

    vjudge description 有\(n\)个水果,有一些水果是香的,它们各有一个香度值,剩下的水果是不香的. 现在你要把这\(n\)个水果连成一棵树,定义一个水果是真香的当且仅当它是香的且他与 ...

  7. WiFi密码破解详细图文教程

    每天都能看到有不少网友在回复论坛之前发布的一篇破解WiFi密码的帖子,并伴随各种疑问.今天流云就为大家准备一篇实战型的文章吧,详细图文从思维CDlinux U盘启动到中文设置,如何进行路由SSID扫描 ...

  8. posix对线程的调整

    fork 当多线程进程调用fork创建子进程时,从fork返回时,只有调用fork的线程在进程内存在(其他线程在子进程中不存在,好比调用pthread_exit退出,不再拥有私有数据destructo ...

  9. 安装memcached服务 和 php 安装memcache扩展

    这是所有的命令,至于哪个命令是干嘛的自己悟去吧  ,顺便穿插一些知识点 安装libevent cd /home/ wget  http://www.monkey.org/~provos/libeven ...

  10. 黄聪:VPS配置Filezilla Server支持FTP的Passive被动模式(FTP连接不上怎么办?有详细教程)

    Filezilla Server的配置: 1.Filezilla默认的模式是Port模式,不是Passive被动模式.为了解决防火墙后的客户端连接问题,最好是启用Passive模式.要启动被动模式,首 ...