ARMv7-A 架构下的MMU
ARM架构中MMU的作用主要就是将CPU发出的虚拟地址转换成为物理地址,从实现内核和用户程序和用户程序之间的虚拟地址空间隔离。MMU的主要组成为两部分,其一是内部的TLBs缓存;还有就是转换表装换单元。CPU发出虚拟地址会被MMU拦截从而进行地址转换,地址装换过程优先查询MMU内部的Cacha是否有现成的转换条目。如果有则直接映射出物理地址,否则需要转换单元按配置的方式和装换表进行地址装换以得到物理地址,如果成功装换虚拟地址到物理地址则MMU还会新建这-条目。转换后的物理地址就可以被总线拿来访问物理内存了,不过在物理存储之前还需要查询对应的Cacha是否有当前地址的数据的缓存,因为真正的物理存储的访问速度相对于处理器的处理速度是十分缓慢的。如果在cacha中命中了对应的数据则省去了去访问外部存储的时间,反之则需要访问外部存储获取数据,然后更新cacha-----利用程序地址空间局限性提高cacha的命中率。
在启用MMU之前必须先建立好MMU转换需要的转换表,并通过协处理器的特殊寄存器保存转换表的基址。转换表不同的系统的实现方式不同。MMU的映射是以页为单位的,不同的页面size转换是的方式略有差别但是本质的原理流程通用。需要注意的是大的页size能提高TLB的命中率,但是会造成内存的浪费。小的页面能更好的控制内存访问属性和节省内存,但是TLB的命中率就会比较低。
TLB的结构大致如下
TAG [ASID] DESCRIPTION
VA [ASID] PA + Attributes
VA [ASID] PA + Attributes
VA [ASID] PA + Attributes
.
.
.
使用后SID的原因是避免应用程序在TLB中的转换条目无法区分的问题,因为用户空间程序的虚拟地址空间都是相同的在TLB中使用ASID进行区分。TLBs中的缓存可能存在过期的情况,如果系统软件修改了装换表,此时应该通过对应的协处理器指令使对应的TLB条目无效,或者粗犷一点直接使所有的装换条目无效。
常见的转换过程有很多种这里说一下两级4K页的转换过程:
两级页面的映射需要两级页表,第一级页表的页面项保存看二级页表的基址,二级页表项加虚拟地址低12bits 描述看物理页面和页面属性。拿一个32位的4K页面的系统来说虚拟地址将分为三个位域,其中最低12位作为业内偏移,余下的20位如何划分取决于实现可按10和10的分法分配,即最高10bits用来表示一级表项在一级页表的偏移,中间10bits则表示二级页表的目录项偏移。一级页表的基址保存在协处理器的基址寄存器中一共有两个TTBR0/1,如果按32位4G空间的映射的话,则一级页表有1024个目录项每一个占四个字节,二级表项每一个也有1024个表项每一个也同样占4个字节。这样下来转换表总共占的内存空间是1024*4+1024*1024*4 < 4.1M的物理内存空间。所以如何安排32位虚拟地址到物理地址之间的映射讲决定装换表所占的内存空间。仔细查上面的页表大小和处理器的要,arm内核要求一级页表必须是对其在16K字节边界上,而二级页表的大小是4K自然也是对其到4K的边界上方便访问,所以一级页表项和二级页表项的低12位一定是为0的,鉴于此低12位就被用来,就被用来描述对应映射到的内存空间的属性信息,这样一级页表项的属性描述的就是4M的物理地址空间的内存属性;进而二级页表项描述的就是一个页的属性。属性主要由权限位和访问属性、缓存属性等信息。
为什么内核硬件上会实现两个装换表基址寄存器TTBR0和TTBR1呢?
使用两个转换表基址寄存器是为了节省内存,避免16K的L1转换表存在N个副本。因为每个进程的装换表中都包括了部分内核的地址空间映射,通常内核区域的映射都是固定不变的所以避免每个进程都重复建立内核部分的地址映射才出现了两个装换表基址寄存器。使用TTB控制寄存器配置虚拟地址最高N个bit都为0时使用TTBR0否则使用TTRB1,这样就能区别使用内核空间或用户空间装换转表基址。假如配置N为7则虚拟地址低32M空间使用TTBR0,如Linux就将其配置为2所以,低0-1G的内核空间使用TTBR0,用户空间使用1-4G的3G虚拟内存空间使用TTBR1。
这里随便一条心得:Linux 自旋锁可以采用WFE和SEV配合以降低功耗。
ARMv7-A 架构下的MMU的更多相关文章
- CI Weekly #5 | 微服务架构下的持续部署与交付
CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...
- OpenGL Insights 阅读有感 - Tile Based架构下的性能调校 翻译
Performance Tunning for Tile-Based Architecture Tile-Based架构下的性能调校 by Bruce Merry GameKnife译 译序 在大概1 ...
- MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构
在"MVC项目实践,在三层架构下实现SportsStore-02,DbSession层.BLL层"一文的评论中,博友浪花一朵朵建议用类图来理解本项目的三层架构.于是就有了本篇: I ...
- MVC项目实践,在三层架构下实现SportsStore-02,DbSession层、BLL层
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-04,实现分页
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-05,实现导航
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-06,实现购物车
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
随机推荐
- Spring依赖注入的方式、类型、Bean的作用域、自动注入、在Spring配置文件中引入属性文件
1.Spring依赖注入的方式 通过set方法完成依赖注入 通过构造方法完成依赖注入 2.依赖注入的类型 基本数据类型和字符串 使用value属性 如果是指向另一个对象的引入 使用ref属性 User ...
- MySQL全面瓦解21(番外):一次深夜优化亿级数据分页的奇妙经历
背景 1月22号晚上10点半,下班后愉快的坐在在回家的地铁上,心里想着周末的生活怎么安排. 突然电话响了起来,一看是我们的一个开发同学,顿时紧张了起来,本周的版本已经发布过了,这时候打电话一般来说是线 ...
- jvm源码解析java对象头
认真学习过java的同学应该都知道,java对象由三个部分组成:对象头,实例数据,对齐填充,这三大部分扛起了java的大旗对象,实例数据其实就是我们对象中的数据,对齐填充是由于为了规则分配内存空间,j ...
- 同步与异步 Python 有何不同?
你是否听到人们说过,异步 Python 代码比"普通(或同步)Python 代码更快?果真是那样吗? 1 "同步"和"异步"是什么意思? Web 应用 ...
- https://www.cnblogs.com/AloneSword/p/3209653.html
proc/sys/net/ipv4/下各项的意义 - 孤剑 - 博客园 https://www.cnblogs.com/AloneSword/p/3209653.html
- C# 防止程序多开(重复开启)
Mutex(mutual exclusion,互斥)是 .Net Framework 中提供跨多个线程同步访问的一个类.它非常类似了 Monitor 类,因为他们都只有一个线程能拥有锁定.而操作系统能 ...
- Map类型数据导出Excel--poi
https://blog.csdn.net/KevinChen2019/article/details/101064790 <dependency> <groupId>org. ...
- 僵尸网络(botnet)概念浅析
僵尸程序 僵尸程序是用于构建僵尸网络以形成大规模攻击平台的恶意代码.僵尸网络是被黑客集中控制的计算机群,其核心特点是黑客能够通过一对多的命令与控制信道操纵感染僵尸程序的主机执行相同的恶意行为,如可同时 ...
- (万字好文)Dubbo服务熔断与降级的深入讲解&代码实战
原文链接:(万字好文)Dubbo服务熔断与降级的深入讲解&代码实战 一.Dubbo服务降级实战 1 mock 机制 谈到服务降级,Dubbo 本身就提供了服务降级的机制:而 Dubbo 的服务 ...
- codevs 1344 模拟退火
1344 线型网络 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamo 题目描述 Description 有 N ( <=20 ) 台 PC 放在机房内 ...