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优化.导航.分页.购物车.订单.产品管 ...
随机推荐
- atlas读写分离
Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug ...
- 一个简单的IM聊天程序Pie IM(以后会更新)
这个程序用多线程,实现设备之间的聊天,支持win10通知,欢迎下载 依赖的第三方库 win10toast 代码 将以下代码写入任意.py文件 1 print('Welcome to use Pie I ...
- Go RPC 框架 KiteX 性能优化实践 原创 基础架构团队 字节跳动技术团队 2021-01-18
Go RPC 框架 KiteX 性能优化实践 原创 基础架构团队 字节跳动技术团队 2021-01-18
- celery 原理
https://mp.weixin.qq.com/s/FzvZHQpF5mhV9t_HBzlcwg Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处 ...
- p2p nat 穿透原理
nat 打洞穿透原理,需要服务端. 假设有A.B两个客户端和S一个服务器 Step 1 : A.B发送UDP请求给S,S知道了A.B在公网的IP和端口. Step 2: A从S中取B在公网的IP和端口 ...
- SpringMVC听课笔记(十二:文件的上传)
1.Spring MVC为文件上传提供了直接的支持,这种支持是通过即插即用的MultipartResolver实现的.Spring用Jakarta Commons FileUpload技术实现了一个M ...
- python学习:随机数的产生,随机数拼接字在脚本中的应用
学习random的时候,看到一份表格觉得不错,转载记录到自己的笔记中: random以及它们在numpy.random中对应的函数应该会很有帮助: 注意:NumPy专门用于构建和操作大型多维数组.如果 ...
- CSS3 Flex Box 弹性盒子、弹性布局
目录 1. 概要 2. justify-content 属性 3. align-items 属性 4. flex-wrap 属性 5. align-content 属性 6. 居中 7. align- ...
- 二:整合Spring Security
整合Spring Security 1.项目创建 2.初次体验 3.用户名配置 3.1 配置文件配置用户名/密码 3.2 Java 配置用户名/密码 4.登录配置 5.忽略拦截 江南一点雨:Sprin ...
- Mysql 5.5升级5.8
前言,因为升级跳板机,需要将mariadb 升级到10.2,也就是对应MySQL的5.8,废话不多说下面开始进行mariadb 5.5 的升级 Welcome to the MariaDB monit ...