MMU和TLB
MMU和TLB
记得那家芯片公司给我电话面试的时候,别的都还好,可是他问我什么是MMU,我只能干瞪眼。今天在看《Linux内核源码(陈莉君)》的时候,无意中看到第二章内存地址这一节,学习如下:
在任何一台计算机上,都存在一个程序能产生的内存地址的集合。当程序执行这样一条指令时:
MOVE  REG,ADDR
它把地址为ADDR(假设为10000)的内存单元的内容复制到REG中,地址ADRR可以通过索引、基址寄存器、段寄存器和其它方式产生。在8086的实模式下,把某一段寄存器左移4位,然后与地址ADDR相加后被直接送到内存总线上,这个相加后的地址就是内存单元的物理地址,而程序中的这个地址就叫逻辑地址(或叫虚地址)。在80386的保护模式下,这个逻辑地址不是被直接送到内存总线,而是被送到内存管理单元(MMU)。MMU由一个或一组芯片组成,其功能是把逻辑地址映射为物理地址,即进行地址转换(看图片,MMU是CPU的一部分)。
当使用80386时,我们必须区分以下三种不同的地址:
逻辑地址: 机器语言指令仍用这种地址指定一个操作数的地址或一条指令的地址。这种寻址方式在Intel的分段结构中表现得尤为具体,它使MS-DOS或Windows程序员把程序分为若干段。每个逻辑地址都由一个段和偏移量组成。
线性地址:线性地址是一个32位的无符号整数,可以表达高达232(4GB)的地址。通常用16进制表示线性地址,其取值范围为0x00000000~0xffffffff。
物理地址:也就是内存单元的实际地址,用于芯片级内存单元寻址。物理地址也由32位无符号整数表示。
从图2.7可以看出,MMU是一种硬件电路,它包含两个部件,一个是分段部件,一个是分页部件,在本书中,我们把它们分别叫做分段机制和分页机制,以利于从逻辑的角度来理解硬件的实现机制。分段机制把一个逻辑地址转换为线性地址;接着,分页机制把一个线性地址转换为物理地址,如图2.8所示。图2.8 MMU把逻辑地址转换为物理地址。
-------------------------------------------------------------------------------------------
翻译后援存储器(TLB)(第六章 Linux内存管理)
页表的实现对虚拟内存系统效率是极为关键的。例如把一个寄存器的内容复制到另一个寄存器中的一条指令,在不使用分页时,只需访问内存一次取指令,而在使用分页时需要额外的内存访问去读取页表。而系统的运行速度一般是被cpu从内存中取得指令和数据的速率限制的,如果在每次访问内存时都要访问两次内存会使系统性能降低三分之二。
对这个问题的解决,有人提出了一个解决方案,这个方案基于这样的观察:大部分程序倾向于对较少的页面进行大量的访问。因此,只有一小部分页表项经常被用到,其它的很少被使用。采取的解决办法是为计算机装备一个不需要经过页表就能把虚拟地址映射成物理地址的小的硬件设备,这个设备叫做TLB(翻译后援存储器,Translation Lookside Buffer), 有时也叫做相联存储器(associative memory),如图6.20所示 。它通常在MMU内部,条目的数量较少,在这个例子中是6个,80386有32个。每一个TLB寄存器的每个条目包含一个页面的信息:有效位,虚页面号,修改位,保护码,和页面所在的物理页面号,它们和页面表中的表项一一对应,如图6.21所示。
当一个虚地址被送到MMU翻译时,硬件首先把它和TLB中的所有条目同时(并行地)进行比较,如果它的虚页号在TLB中,并且访问没有违反保护位,它的页面会直接从TLB中取出而不去访问页表,如虚页面号在TLB但当前指令试图写一个只读的页面,这时将产生一个缺页异常,与直接访问页表时相同。如MMU发现在TLB中没有命中,它将随即进行一次常规的页表查找,然后从TLB中淘汰一个条目并把它替换为刚刚找到的页表项。因此如果这个页面很快再被用到的话,第二次访问时它就能在TLB中直接找到。在一个TLB 条目被淘汰时,被修改的位被复制回在内存中的页表项,其它的值则已经在那里了。当TLB从页表装入时,所有的域都从内存中取得。必须明确在分页机制中,TLB中的数据和页表中的数据的相关性,不是由处理器进行维护,而是必须由操作系统来维护,高速缓存的刷新是通过装入处理器(80386)中的寄存器CR3来完成的。(见刷新机制flush_tlb())这里要还提到命中率,即一个页面在TBL中找到的概率。一般来说TLB的尺寸大可增加命中率,但会增加成本和软件的管理。所以一般都采用8--64个条目的数量。假如命中率是0.85,访问内存时间是120那秒,访TLB时间是15那秒。那么访问时间是:0.85*(15+120)+(1-0.85)*(15+120+120)=153那秒。
MMU和TLB的更多相关文章
- MMU 以及 TLB
		MMU 以及 TLB MMU(Memory Management Unit)内存管理单元: 一种硬件电路单元负责将虚拟内存地址转换为物理内存地址 所有的内存访问都将通过 MMU 进行转换,除非没有使能 ... 
- 第七章 内存管理单元MMU介绍
		7.1 内存管理单元MMU介绍 7.1.1 S3C2410/S3C2440 MMU特性 负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查 特性: 与ARM V4兼容的映射长度.域.访问权 ... 
- 转 s3c2440硬件学习----内存管理单元MMU
		本篇基本是韦东山书上的 一.内存管理单元MMU介绍 内存管理单元简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查.MMU使得每个用户进程拥有自己独立的地址空间,并通过内存访 ... 
- JZ2440 裸机驱动 第7章 内存管理单元MMU
		本章目标: 了解虚拟地址和物理地址的关系: 掌握如何通过设置MMU来控制虚拟地址到物理地址的转化: 了解MMU的内存访问权限机制: 了解TLB.Cache.Write ... 
- MMU解读
		转:https://blog.csdn.net/yueqian_scut/article/details/24816757 mmu页表也是放在内存中,mmu里有一个寄存器存放页表首地址,从而找到页表( ... 
- 初识virtual memory
		一.先谈几个重要的东西 virtual memory是一个抽象概念,书上的原文是"an abstraction of main memory known as virtual memory& ... 
- CE STEPLDR
		作用:初始化CPU.内存.Flash,复制EBoot到内存并跳入EBoot中运行. 原理:S3C2416有 8-KB 的steppingstone(暂时翻译为垫脚石),在Nand启动模式下可把Nand ... 
- KVM 介绍(2):CPU 和内存虚拟化
		学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ... 
- KVM 内存虚拟化
		内存虚拟化的概念 除了 CPU 虚拟化,另一个关键是内存虚拟化,通过内存虚拟化共享物理系统内存,动态分配给虚拟机.虚拟机的内存虚拟化很象现在的操作系统支持的虚拟内存方式,应用程序看到邻近的内存 ... 
随机推荐
- Ant学习---第五节:Ant_Junit介绍(基于3的版本)
			Junit3 和 Junit4 有本质上的区别 1.普通java类,代码如下: package learn.junit; public class HelloWorld { public String ... 
- linux下的clock skew detected
			今天在虚拟机上用GCC编译一个程序的时候,出现了下面的错误: make: warning: Clock skew detected. Your build may be incomplete 试了ma ... 
- Team Homework #3 软件工程在北航——IloveSE
			任务要求: 采访以前上过北航 (计算机系/软件学院) 软件工程课的同学.现在上研/工作的也可以. 采访问题如下:* 平均每周花在这门课上的时间 (包括上课/作业/上机) * 平均写的代码总行数 ... 
- ELK kibana查询与过滤(17th)
			在kibana中,可通过搜索查询过滤事务或者在visualization界面点击元素过滤. 创建查询 在Discover界面的搜索栏输入要查询的字段.查询语法是基于Lucene的查询语法.允许布尔运算 ... 
- GCC常用命令行一览表
			GCC常用命令行一览表 这些常用的 gcc/g++ 命令行参数,你都知道么?1. gcc -E source_file.c-E,只执行到预编译.直接输出预编译结果. 2. gcc -S source_ ... 
- VIMTUTOR《VIM教程》
			=============================================================================== = 欢 迎 阅 ... 
- 使用 NIO.2 遍历目录下所有的Java文件
			package wellGrounded; import java.io.IOException; import java.nio.file.FileVisitResult; import java. ... 
- Posix线程编程指南(3) 线程同步
			互斥锁 尽管在Posix Thread中同样可以使用IPC的信号量机制来实现互斥锁mutex功能,但显然semphore的功能过于强大了,在Posix Thread中定义了另外一套专门用于线程同步的m ... 
- CSS中的视觉格式化模型
			视觉格式化模型 1. 简介 在视觉格式化模型中,文档树中的每个元素都将会根据盒模型产生零到多个盒子.这些盒子的布局由如下因素决定: 盒子的尺寸和类型 定位策略(正常文档流,浮动或者绝对定位) 和文档树 ... 
- org.apache.kafka.common.network.Selector
			org.apache.kafka.common.client.Selector实现了Selectable接口,用于提供符合Kafka网络通讯特点的异步的.非阻塞的.面向多个连接的网络I/O. 这些网络 ... 
