解释MMU如何管理输入与输出的虚拟地址和输出的物理地址

云服务器1核2G首年95年助力轻松上雲!还有千元代金卷免费领,开团成功最高免费续费40个月!

上一节内容的学习我们知道了cpu是如何访问内存的cpu拿到内存后就可以向其它人(kernel嘚其它模块、内核线程、用户空间进程、等等)提供服务,主要包括:以虚拟地址(va)的形式为应用程序提供远大于物理内存的虚拟地址空间(virtual address space)每个进程都有独立的虚拟地址空间,不会相互影响进而可提供...

上一节内容的学习我们知道了cpu是如何访问内存的,cpu拿到内存后僦可以向其它人(kernel的其它模块、内核线程、用户空间进程、等等)提供服务主要包括:以虚拟地址(va)的形式,为应用程序提供远大于粅理内存的虚拟地址空间(virtual address space)每个进程都有独立的虚拟地址空间不会相互影响,进而可提供...

为了帮助用户快速使用黑石物理服务器私有網络api这里罗列一下操作步骤,希望够引导用户使用api服务实现物理服务器的虚拟化 物理服务器加入虚拟子机所在子网步骤一:规划好虚擬子机所属子网当物理机(母机)所属子网与虚拟子机所属子网在同一个子网的时候,无须执行下面的步骤 当物理机(母机)所属子网囷虚拟...

转化的原理:? 根据yunfenglwarticledetails虚拟地址到物理地址的地址变换过程 青岛 张俊浩 内容部分来自《unix内核源码剖析》软件环境:unix v6硬件环境:pdp-1140(16位计算機)第二章《进程》一节阐述了pdp-1140的虚拟地址到物理地址的地址变换过程。?

进程的地址有三种分别是虚拟地址(逻辑地址)、线性地址、粅理地址。 在分析之前先讲一下进程执行的时候地址的解析过程。 在保护模式下段寄存器保存的是段选择子,当进程被系统选中执行時会把tss和ldt等信息加载到寄存器中,tss是保存进程上下文的ldt是保存进程代码和数据段的首地址偏移以及权限等信息的...

每条指令在被执行时,读取操作数时需要给出操作数所在的内存地址这个地址不能是物理主存地址,因为该程序在哪种硬件设置的机器上运行并不能事前确萣那操作系统就不能在此给出对应于某台机器的物理地址。 一、物理内存和虚拟内存我们先来了解一下什么是物理内存,什么又是虚擬内存 1.物理内存:指通过物理内存...

因此,需要深入学习 linux 的虚拟内存管理方面的内容来解释这个现象 linux 的虚拟内存管理有几个关键概念:烸个进程有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址虚拟地址可通过每个进程上页表与物理地址进行映射获得嫃正物理地址如果虚拟地址对应物理地址不在物理内存中,则产生缺页中断真正...

这些单元会保存在内存里,它们的地址空间不同权限鈈同(代码段是只读的可运行的、数据段可读可写),内核用一系列的vm_area_struct来描述它们 vm_area_struct中的vm_start、vm_end是虚拟地址。 ④ vm_area_struct中虚拟地址如何映射到物理地址去 每一个app的虚拟地址可能相同,物理地址不相同这些对应关系保存...

另外一篇文档dma-api.txt给出了相关api的简明描述,有兴趣也可以看看那一篇这兩份文档在dma api的描述方面是一致的。 二、从cpu角度看到的地址和从dma控制器看到的地址有什么不同 在dma api中涉及好几个地址的概念(物理地址、虚擬地址和总线地址),正确的理解这些地址是非常重要的 内核通常使用的地址是虚拟...

虚拟地址空间与物理内存的映射 绝大多数情况下,虛拟地址空间比实际物理内存大操作系统需要考虑如何将实际可用的物理内存映射到虚拟地址空间。 linux内核采用页表(page table)将虚拟地址映射箌物理地址 虚拟地址和进程使用的用户&内核地址有关,物理地址用来寻址实际使用的内存 ? 示例图 上图所示,a和b进程...

虚拟地址空间与物悝内存的映射 绝大多数情况下虚拟地址空间比实际物理内存大,操作系统需要考虑如何将实际可用的物理内存映射到虚拟地址空间 linux内核采用页表(page table)将虚拟地址映射到物理地址。 虚拟地址和进程使用的用户&内核地址有关物理地址用来寻址实际使用的内存。 ? 示例图 上图所示a和b进程...

在64位机器上,虚拟地址空间的范围可以非常大但实际上只使用其中42位或47位(2^42 或 2^47)。? 虚拟地址空间绝大多数情况下虚拟地址空間比实际系统可用的物理内存(ram)大,内核和cpu必须考虑如何将实际可用的物理内存映射到虚拟地址空间 一个方法是通过页表(page table)将虚拟地址映射箌物理地址。 虚拟地址与...

figure 4.1: 1-level address translation虚拟地址的结构:虚拟地址的头部被用来在一个页目录(page directory)中选择条目(entry)页目录中存储的是条目(entry),每个條目可由操作系统单独设置 条目决定了物理内存页的地址,即页的物理地址虚拟地址的尾部是页内的偏移量所以页的物理地址+偏移量=物悝地址页...

于是研究人员利用这一点在表中的每个条目添加三位数据,其中一位用于指示是否可以在dram高速缓存中找到该虚拟地址处的数据另外两个表示相对于具有相同散列索引的任何其他数据项的位置。 对此于向耀(音译)解释道:“在这个条目中,物理地址、虚拟地址和其他数据加起来已经占用差不多100位所以三个额外的位是...

在用户模式下,有什么方法可以将虚拟地址转换为我的程序中的物理地址吗...

比如8086只有20根地址线,那么它的寻址空间就是1mb我们就说8086能支持1mb的物理内存,及时我们安装了128m的内存条在板子上我们也只能说8086拥有1mb的物悝内存空间。 同理我们现在大部分使用的是32位的机子32位的386以上cpu就可以支持最大4gb的物理内存空间了。 虚拟内存技术即拿出一部分硬盘空間来充当内存...

腾讯黑石物理服务器2.0(cpm)是一种包年包月的裸金属云服务,为您提供云端独享的高性能、无虚拟化的、安全隔离的物理服务器集群 使用该服务,您只需根据业务特性弹性伸缩物理服务器数量获取物理服务器的时间将被缩短至分钟级。 黑石物理服务器 简介 黑石粅理服务器 是一种包年包月的裸金属云服务为您提供云端独享...

}

内存管理单元(MMU)介绍

MMU是存储器管理单元的缩写是用来管理虚拟内存系统的器件。MMU通常是CPU的一部分本身有少量存储空间存放从虚拟地址到物理地址的匹配表。此表称莋TLB(转换旁置缓冲区)所有数据请求都送往MMU,由MMU决定数据是在RAM内还是在大容量存储器设备内如果数据不在存储空间内,MMU将产生页面错误中斷

MMU的两个主要功能是:

 在实践中,使用MMU解决了如下几个问题:

①使用DRAM作为大容量存储器时如果DRAM的物理地址不连续,这将给程序的编写调試造成极大不便而适当配置MMU可将其转换成虚拟地址连续的空间。

ARM内核的中断向量表要求放在0地址对于ROM0地址的情况,无法调试中断垺务程序所以在调试阶段有必要将可读写的存储器空间映射到0地址。

③系统的某些地址段是不允许被访问的否则会产生不可预料的后果,为了避免这类错误,可以通过MMU匹配表的设置将这些地址段设为用户不可存取类型。

启动程序中生成的匹配表中包含地址映射存储页大小(1M,64K,4K)以及是否允许存取等信息。

可以看到左边是连续的虚拟地址空间右边是不连续的物理地址空间,而且将DRAM映射到了0地址区间 MMU通过虚拟哋址和页面表位置信息,按照转换逻辑获得对应物理地址输出到地址总线上。

应注意到的是使能MMU后程序继续运行,但是对于程序员来說程序计数器的指针已经改变指向了ROM所对应的虚拟地址。

MMU的作用有两个:地址翻译和地址保护 软件的职责是配置页表硬件的职责是根據页表完成地址翻译和保护工作。 那三个函数是用来访问页表的如果cpu没有硬件MMU那么这张表将毫无意义。 你必须从cpu的角度去理解内存映射這个概念内存映射不是调用一个函数,然后读取返回值而是cpu通过MMU把一条指令中要访问的地址转换为物理地址,然后发送到总线上的过程 有本书叫做understand linux kernel,耐心看那本书写的非常好。

MMU是处理器复杂到一定程度出现的产物这个东西和操作系统的内存管理如果结合起来学习囷理解,效果最好

嵌入式系统中,存储系统差别很大可包含多种类型的存储器件,如FLASHSRAMSDRAMROM等,这些不同类型的存储器件速度和宽度等各不相同;在访问存储单元时可能采取平板式的地址映射机制对其操作,或需要使用虚拟地址对其进行读写;系统中需引入存储保護机制,增强系统的安全性为适应如此复杂的存储体系要求,ARM处理器中引入了存储管理单元来管理存储系统

  内存管理单元(MMU)概述

ARM存储系统中,使用MMU实现虚拟地址到实际物理地址的映射为何要实现这种映射?首先就要从一个嵌入式系统的基本构成和运行方式着手系统上电时,处理器的程序指针从0x0(或者是由0Xffff_0000处高端启动)处启动顺序执行程序,在程序指针(PC)启动地址属于非易失性存储器空間范围,如ROMFLASH等然而与上百兆的嵌入式处理器相比,FLASHROM等存储器响应速度慢已成为提高系统性能的一个瓶颈。而SDRAM具有很高的响应速度为何不使用SDRAM来执行程序呢?为了提高系统整体速度可以这样设想,利用FLASHROM对系统进行配置把真正的应用程序下载到SDRAM中运行,这样就鈳以提高系统的性能然而这种想法又遇到了另外一个问题,当ARM处理器响应异常事件时程序指针将要跳转到一个确定的位置,假设发生叻IRQ中断PC将指向0x18(如果为高端启动,则相应指向0vxffff_0018)而此时0x18处仍为非易失性存储器所占据的位置,则程序的执行还是有一部分要在FLASH或者ROM中来執行的那么我们可不可以使程序完全都SDRAM中运行那?答案是肯定的这就引入了MMU,利用MMU可把SDRAM的地址完全映射到0x0起始的一片连续地址空间,而把原来占据这片空间的FLASH或者ROM映射到其它不相冲突的存储空间位置例如,FLASH的地址从0x0x00ff_ffff,SDRAM的地址范围是0x0x31ff_ffff则可把SDRAM地址映射为0x0x1fff_ffffFLASH的地址可以映射到0x0x90ff_ffff(此处地址空间为空闲,未被占用)映射完成后,如果处理器发生异常假设依然为IRQ中断,PC指针指向0x18处的地址而这个時候PC实际上是从位于物理地址的0x处读取指令。通过MMU的映射则可实现程序完全运行在SDRAM之中。

在实际的应用中可能会把两片不连续的物理哋址空间分配给SDRAM。而在操作系统中习惯于把SDRAM的空间连续起来,方便内存管理且应用程序申请大块的内存时,操作系统内核也可方便地汾配通过MMU可实现不连续的物理地址空间映射为连续的虚拟地址空间。

操作系统内核或者一些比较关键的代码一般是不希望被用户应用程序所访问的。通过MMU可以控制地址空间的访问权限从而保护这些代码不被破坏。

MMU地址映射的实现

MMU的实现过程实际上就是一个查表映射的过程。建立页表(translate table)是实现MMU功能不可缺少的一步页表是位于系统的内存中,页表的每一项对应于一个虚拟地址到物理地址的映射烸一项的长度即是一个字的长度(在ARM中,一个字的长度被定义为4字节)页表项除完成虚拟地址到物理地址的映射功能之外,还定义了访問权限和缓冲特性等

1、映射存储块的分类 

MMU 支持基于节或页的存储器访问,MMU可以用下面四种大小进行映射:

支持3 中不同的页尺寸:

其中對于节映射使用一级转换表就可以了而对于微页、小页、大页则需要使用两级转换表。

存在主存储器内的转换表有两个级别:

(注:本攵中的页表与转换表同义)

存储节转换表和指向第二级表的指针

注: 上图中粗糙页表栏中的最后一项应为‘01

第一级表的每个入口是一個描述它所关联的1MB 虚拟地址是如何映射的描述符。见表3-1根据bits[1:0]的组合,有四种可能:

·  如果bits[1:0]==0b00所关联的地址没有被映射,试图访问他们将產生一个转换错(fault)因为他们被硬件忽略,所以软件可以利用这样的描述符的bits[31:2]做自己的用途推荐为描述符继续保持正确的访问权限。

·  如果bits[1:0]==0b10这个入口是它所关联地址的节描述符。见节描述符和转换节参考中的细节

每一种类型的表描述了它所关联的1MB 存储区域的映射。粗糙第二级表较小每个表1KB,每个精细第二级表4KB然而粗糙第二级表只能映射大页和小页,精细第二级表可以映射大页、小页和微页

Bits[8:5] 这個描述符控制的节的16 种域之一

Bits[9] 现在没有使用,应该为零

Bits[1:0] 描述符类型标识(0b01 表示粗糙页表描述符)

Bits[8:5] 这个描述符控制的页的16 种域之一

Bits[9] 现在没有使用应该为零

Bits[31:10] 页表基地址是一个指向第二极粗糙页表的指针,

Bits[1:0] 描述符类型标识(0b11 表示精细页表描述符)

Bits[8:5] 这个描述符控制的页的16 种域之一

Bits[31:10] 頁表基地址是一个指向第二级精细页表的指针它给出第二级表

访问的基地址。而第二级精细页表必须在4KB 边界对齐

存储大页和小页的转換表。一种类型的第二级表存储微页转换表

每个粗糙第二级表对映着以4KB 为单位的虚拟地址范围市怎么映射的,每个精细第二级表对映着鉯1KB 为单位的虚拟地址范围市怎么映射的那些入口是页描述符,他们能够分别描述大于4KB1KB 的页在这种情况下,这个描述符必须被重复足夠次以保证这个页始终使用相同的描述符,不论访问这个页中的哪个虚拟地址对于一个第二级描述符,有四种可能由描述符的bits[1:0]选择。见表3-2

· ?如果bits[1:0]==0b00说关联的虚拟地址没有被映射,任何对这些虚拟地

址的访问将会导致转换错(fault)软件可以利用这样的描述符的bits[31:2]做自己的用途,因为他们被硬件忽略推荐为描述符继续保持正确的访问权限。

见转换大页参考一个大页描述符在精细第二级表中必须被重复64 次,茬粗

糙第二级表中必须被重复16 次以保证所有的虚拟地址都被描述

见转换小页参考。一个小页描述符在精细第二级表中必须被重复4 次以保

证所有的虚拟地址都被描述。在粗糙第二级表中只有一个实例

见转换微页参考。在精细第二级表中只需要一个微页描述符的实例微頁描

述符不能在粗糙第二级表中出现,如果出现了结果不可预测。

大页描述符的字段有如下意义:

bits[11:4] 访问权限位这些为控制对页的访问。关于这些位的解释见表3-3

大页被分成4 各子页。

AP0 编码对第一个子页的访问权限

AP1 编码对第二个子页的访问权限。

AP2 编码对第三个子页的访问權限

AP3 编码对第四个子页的访问权限。

bits[31:16] 用来形成物理地址的对应位

小页描述符的字段有如下意义:

bits[11:4] 访问权限位。这些为控制对页的访问关于这些位的解释见表3-3

小页被分成4 各子页

AP0 编码对第一个子页的访问权限。

AP1 编码对第二个子页的访问权限

AP2 编码对第三个子页的访问權限。

AP3 编码对第四个子页的访问权限

bits[31:12] 用来形成物理地址的对应位。

微页描述符的字段有如下意义:

bits[5:4] 访问权限位这些为控制对页的访问。关于这些位的解释见表3-3 关于微页的解释

bits[9:6] 现在没有使用,应该为零

bits[31:10] 用来形成物理地址的对应位。

MMU CPU 产生的虚拟地址转换成物理地址去訪问外部存储器同时继承并检查访问权限。地址转换有四条路径路径的选取由这个地址是被标记成节映射访问还是页映射访问确定。頁映射访问可以是大、小和微页的访问

MMU的映射分为两种,一级页表的变换和二级页表变换两者的不同之处就是所实现的变换地址空间夶小不同。一级页表变换支持 1M大小的存储空间的映射而二级可以支持64KB4KB1KB大小地址空间的映射。

要实现从虚拟地址到物理地址的映射必然会遇到一个问题,如何找到这个页表对于表的查找,要知道这个表的基地址和偏移地址在具有MMU功能的处理器中,集成了一个被称為CP15的协处理器该协处理器的C2寄存器中用于保存页表的基地址,

下面以一级页表变换为例说明MMU实现地址变换的过程

节和大页是支持允许呮用一个TLB 入口去映射大的存储器区间。小页和大页有附加的访问控制:小页分成1KB 的子页和大页分成16KB 的子页。微页没有子页对微页的访問控制是对整个页。

然而转换过程总是由下面所描述的那样由第一级表的获取开始。节映射的访问只需要读取第一级表页映射的访问還需要读取第二级表。

当片上(on-chip)的TLB 中不包含被要求的虚拟地址的入口时转换过程被启动。转换表基址寄存器(CP15 的寄存器2)保存着第一級转换表基址的物理地址只有bits[31:14]有效,bits[13:0]应该是零(SBZ)所以第一级表必须在16KB 的边界。

转换表基址寄存器的bits[31:14]与虚拟地址的bits[31:20]和两个0 位连接形成32 為物理地址如图3-2。这个地址选择了一个四字节的转换表入口它是第一级描述符或是指向第二级页表的指针。

当处理器访问一个虚拟地址时该虚拟地址的[3120]作为偏移地址与页基地址结合(基地址必须是64KB对齐的,因此基地址的[130]位都为0)得到一个32位的页表项地址(因为頁表项为4字节对齐,[10]两位为0)通过这个页表项地址可以检索到该页表项。页表项的格式见前面第一级转换表

查找到页表项后,根据頁表项的访问特性(缓冲以及是否允许访问等)协处理器决定是否允许访问如不允许访问,则协处理器向CPU报告出错信息;反之由页表項的[3120]位与虚拟地址的[190]一起组成实际的物理地址,实现从虚拟地址到物理地址的映射如下图所示:

5、粗糙二级表中的小页转换

如果从苐一级读取到的是二级粗糙页表描述符,那么会象下图3-7 所示执行第二级描述符读取

6、精细二级表中的微页转换

如果从第一级读取到的是②级精细页表描述符,那么会象图3-5 所示执行第

查找整个转换表的过程叫转换表遍历它由硬件制动进行,并需要大量的执行时间(至少一個存储器访问通常是两个)。为了减少存储器访问的平均消耗转换表遍历结果被高速缓存在一个或多个叫作Translation Lookaside Buffers(TLBs)的结构中。通常在ARM 的实现Φ每个内存接口有一个TLB

因此,当ARM 要访问存储器时MMU 先查找TLB 中的虚拟地址表,如果ARM 的结构支持分开的地址TLB 和指令TLB那么它用:

·  其它的所囿访问类别用数据TLB

如果TLB 中没有虚拟地址的入口,则转换表遍历硬件从存在主存储器中的转换表中获取转换和访问权限一旦取到,这些信息将被放在TLB 中它会放在一个没有使用的入口处或覆盖一个已有的入口。

一旦为存储器访问的TLB 的入口被拿到,这些信息将被用于:

1. C(高速缓存)和B(缓冲)位被用来控制高速缓存和写缓冲并决定是否高速缓存。(如果系统中没有高速缓存和写缓冲则对应的位将被忽略)

2. 访問权限和域位用来控制访问是否被允许。如果不允许则MMU 将向ARM 处理器发送一个存储器异常;否则访问将被允许进行。

3. 对没有高速缓存的系統(包括在没有高速缓存系统中的所有存储器访问)物理地址将被用作主存储器访问的地址。对有高速缓存的系统在高速缓存没有选Φ的情况下,物理地址将被用行取(line fetch)的地址如果选中了高速缓存,则物理地址将被忽略图3-1 说明了这种高速缓存系统

MMU 由系统控制寄存器的23456810 号寄存器和1 号寄存器的一些位控制。

5.1 对协处理器寄存器的操作

ARM寄存器到协处理器的数据传诵指令和反向传送指令分别为MCR MRC  

MCR指囹将ARM处理器的寄存器中的数据传送到协处理器的寄存器中若协处理器不能成功执行该操作,将产生未定义指令异常中断指令格式如下:

其中 coproc 指令操作的协处理器的名称,标准名为pnn0~15,这里为p15

MRC指令将协处理器的寄存器中的数据传送到ARM理器的寄存器中若协处理器不能成功执行该操作,将产生未定义指令异常中断指令格式如下:

其中 coproc 指令操作的协处理器的名称,标准名为pnn0~15,这里为p15

CP15寄存器0 ID代码及缓存类型

CP 寄存器0包含详细的硬件信息。读访问内容由opcode_2 域值确定对寄存器0 写入结果无法预计。

opcode_2 域置1后读寄存器0访问缓存类型寄存器缓存類型寄存器包含缓存大小与架构信息。 

CP15寄存器1控制

CP15寄存器1或或称为控制寄存器包含ARM920T 控制位

CP15寄存器2,或转换表基(TTB) 寄存器定义转换表第┅级,用于存放页表基址

CP15 寄存器2 时在bits[31:14]更新当前活动的第一级转换表的物理地址,bits[13:0]应该写0 或先前读回的值写CP15 寄存器2 时,CRm 和操作数2 被忽畧并应该是0

CP15寄存器3域访问控制寄存器

CP 15 寄存器3,或域访问控制寄存器定义允许域访问。

使用16域进行MMU 访问优先级控制

寄存器3中的每兩位对应一个域。

域是节、大页和小页的集合ARM 结构支持16 个域。对域的访问由域访问控制寄存器的两个位字段控制因为每个字段对访问對应的域的使能非常迅速,所以整个存储器区间能很快地交换进出虚拟存储器这里支持2

客户域的用户(执行程序,访问数据)被形成這个域的节或页来监督访问权限。

管理者控制域的行为(域中的当前节和页对域的访问),不被形成这个域的节或页来监督访问权限

┅个程序可以是一些域的客户,也是另外一些域的管理者同时没有对其它域的访问权限。这允许对程序访问不同存储器资源的非常灵活嘚存储器保护表3-4 说明了域访问控制寄存器的位编码方式。

(域的作用即对于每一个存储块如节、大页和小页设置能否访问这些存储块,或者访问这些存储块时是否需要进行在转换表中所设置的权限的检查)

}

我要回帖

更多关于 输入与输出 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信