我们只想读4个字节,但我们要经过如下的步骤

读取  字节的PDE
读取 字节的 PTE
读取 字节(int 占用4字节)的物理内存

在 10-10-12 分页模式下,CPU 每次要访问额外的访问 8 字节内存数据才能读取到数据

读取  字节 PDPTE
读取 字节 PDE
读取 字节 PTE
读取 字节的物理内存

在2-9-9-12 分页模式下,需要额外的访问 24 字节内存数据才能读取到数据。

还有可能出现四个字节不在同一个物理页上的情况,这样效率就会变得非常低,所以出现了快表:TLB(Translation Lookaside Buffer)

0x12345678如果已经拆分过,TLB表就会记录下次要用的时候直接找TLB,如果没有就只能经过如上的步骤。

  • 为了提高效率,只能做记录。
  • TLB是CPU内部做的表,来记录这些东西,这个表格是CPU内部的,和寄存器一样快
  • 因为是在CPU 中开辟空间,容量不能太大
  1. ATTR (属性) :属性是PDPE PDE PTE三个属性 & 起来的,如果是10-10-12 ,就是PDE & PTE
  2. 不同的CPU这个表的大小不一样.
  3. 只要Cr3变了, TLB立马刷新,一核一套TLB.

如果 TLB 满了, LRU 统计信息就会把不经常使用的那一条抹掉,把新值写上。

操作系统的高2G映射基本不变,如果Cr3改了, TLB刷新重建高2G以上很浪费。
所以PDE和PTE中有个G位,如果G位为1刷新TLB时将不会刷新PDE/PTE的 G位为1的页,
当TLB满了,根据统计信息将不常用的地址废弃,最近最常用的保留…[

TLB种类
TLB在X86体系的CPU里的实际应用最早是从Intel的486CPU开始的,在X86体系的CPU里边,一般都设有如下4组TLB:

如果你的CPU只有一核,那就只有一组TLB

  • 第一组:缓存一般页表(4K字节页面)的指令页表缓存(Instruction-TLB) ;
  • 第二组:缓存一般页表(4K字节页面)的数据页表缓存(Data-TLB);
  • 第三组:缓存大尺寸页表(2M/4M字节页面)的指令页表缓存(Instruction-TLB) ;
  • 第四组:缓存大尺寸页表(2M/4M字节页面)的数据页表缓存(Instruction-TLB)

感受TLB的存在

17.TLB的更多相关文章

  1. COM学习笔记

    2015-10-22 10:24 在第八章学习Aggregation的时候搞晕了,所以就建了一个Workspace名为"COMAggregationDemo"来调试一下,使用的源码 ...

  2. -ffunction-sections -Wl,--gc-sections

    AVR/GCC设置不链接未调用的函数 http://blog.csdn.net/shevsten/article/details/7049688 在AVR Studio4/5的AVR/GCC默认设置下 ...

  3. Linux X86在下面TLB机制

    TLB - translation lookaside buffer 快表.直译为翻译后备缓冲器,也能够理解为页表缓冲.地址变换快速缓存. 因为页表存放在主存中,因此程序每次訪存至少须要两次:一次訪存 ...

  4. linux TLB表

    TLB - translation lookaside buffer 快表,直译为旁路快表缓冲,也可以理解为页表缓冲,地址变换高速缓存. 由于页表存放在主存中,因此程序每次访存至少需要两次:一次访存获 ...

  5. TLB的作用及工作原理

    TLB的作用及工作过程 以下内容摘自<步步惊芯——软核处理器内部设计分析>一书 页表一般都很大,并且存放在内存中,所以处理器引入MMU后,读取指令.数据需要访问两次内存:首先通过查询页表得 ...

  6. KVM源代码解读:linux-3.17.4\arch\x86\include\asm\kvm_host.h

    /* * Kernel-based Virtual Machine driver for Linux * * This header defines architecture specific int ...

  7. KVM源代码解读:linux-3.17.4\include\linux\kvm_host.h

    #ifndef __KVM_HOST_H #define __KVM_HOST_H /* * This work is licensed under the terms of the GNU GPL, ...

  8. Golang, 以17个简短代码片段,切底弄懂 channel 基础

    (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...

  9. .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来

    从该系列的第一篇文章 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 开始,不知不觉已经到第17篇了.每一次我们都是介绍一个小巧甚至微不足道的.NET平台的开源软件,或者学习,或 ...

随机推荐

  1. [NOIP2011提高组day2]-3-观光公交

    3.观光公交 (bus.cpp/c/pas) [问题描述] 风景迷人的小城 Y 市,拥有 n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光 ...

  2. Android 如何永久性开启adb 的root权限【转】

    本文转载自:https://www.2cto.com/kf/201702/593999.html adb 的root 权限是在system/core/adb/adb.c 中控制.主要根据ro.secu ...

  3. maven项目所遇到的问题解决

    1.在Eclipse中创建Maven的Web项目时出现错误:An internal error occurred during: "Retrieving archetypes:". ...

  4. Java Web 项目打包脚本

    可用于 (但不限于) Eclipse 项目. 一次性生成:1. Java doc .zip 包:2. Java 源代码 .zip 包:3. Java 二进制文件 .jar 包:4. Java 源代码加 ...

  5. codeforces B. Bear and Strings 解题报告

    题目链接:http://codeforces.com/problemset/problem/385/B 题目意思:给定一条只有小写英文组成的序列,需要找出至少包含一个“bear”的单词的子序列个数.注 ...

  6. 存储过程系列三:根据表别名方式distinct去重插入

    1.根据表别名方式distinct去重插入 insert into GG_XKZ_YLQXSCXKESL_SCDZ           ( bzj, xkzid,  sqid, jtdz, szsf, ...

  7. php字符串啊的heredoc格式

    Heredoc技术,在正规的PHP文档中和技术书籍中一般没有详细讲述,只是提到了这是一种Perl风格的字符串输出技术.它也出现unix/linux的shell编程里面.但是现在的一些论坛程序,和部分文 ...

  8. Spring MVC 和 Struts2 的区别?

    1.请求拦截级别 struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入 struts2实际上是通过setter ge ...

  9. 随应潮流-基于ABP+Angularjs现代化应用软件开发框架(1)-总体介绍

    系列文章目录 随应潮流-基于ABP+Angulsrjs现代化应用软件开发框架(1)-总体说明 随应潮流-基于ABP+Angulsrjs现代化应用软件开发框架(2)-abp说明 随应潮流-基于ABP+A ...

  10. 第九章-IO编程

    IO是输出输入的意思 在计算机中常用到的数据交换的地方是磁盘, 网络等 输入流是从外面(磁盘, 网络)流进内存 输出流是从内存流到外面(磁盘, 网络) 同步IO是指等待IO完成再继续执行 异步IO是在 ...