armv7-a mmu 配置

L1 page table

​ L1 page table 将 32位内核的整个 4GB 地址空间划分为 4096 个大小相等的部分(entry),每个部分映射 1 MB 范围内的虚拟内存空间。

​ 每个条目 (entry) 可以保存指向二级转换的地址,也可以保存用于表示这 1MB 虚拟内存对应的物理内存基地址。

​ L1 转换表中的每个 entry 下的低 2 bit 表示该 entry 类型,有 4 种类型

bit0bit1说明
00fault. This can be either a prefetch data abort
10bit10 ~ bit31 point to 2 level page table
01bit20 ~ bit31 Section Base Address
01bit24 ~ bit31 Supersection Base Address

L1 page table 转换

​ 根据虚拟地址的高 12 bit (32 bit 地址)定位到 L1 page table 中的 entry number,然后计算该 entry 所在的物理地址:L1 page table addr + number * 0x4。

​ 得到 entry 的物理地址后,通过读取该地址的内容获取虚拟地址对应的物理基地址,最终确定物理地址。转换过程如下图:在这里插入图片描述

L2 page table

​ L2 与 L1 page table 一样,都需要存放到一片物理内存上,L2 table 有 256 个字大小(4字节)的 entry ,需要1KB的内存空间,并且必须与1KB的边界对齐,如果每个 entry 映射 4KB 物理内存,那么一个 L2 table 就映射 1MB 物理内存。

​ L2 page table 中的每个 entry 下的低 2 bit 表示该 entry 的类型,有 3 种类型:

bit0bit1说明
00fault:产生同步异常,可以是预取或数据中止,取决于访问类型
10laegr page: 表示该 entry 映射 64KB 的物理地址 (由于每个条目都指向 4KB 的地址空间,因此大页面条目必须重复 16 次)
XN1small page: 表示该 entry 映射 4KB 的物理地址

L2 page table 转换

​ L2 page table 的基地址需要通过 L1 page table 中的 entry 得知,就需要使用 L1 page table 中的第二个类型(用于指向 L1 page table 的物理地址)。

​ 根据虚拟地址的高 12 bit (32 bit 地址) 定位到 L1 page table 中的 entry number,然后计算该 entry 所在的物理地址:L1 page table addr + number * 0x4。然后读取出 entry 中的 L2 page table 的物理地址(entry 中的 bit10 ~ bit31)

​ 得知 L2 page table 物理地址后,根据虚拟地址的 bit12 ~ bit19 定位 L2 page table 的 entry number,然后计算出该 entry 的物理地址,该 entry 中记录了该虚拟内存对应的物理基地址,L2 page table entry 格式如下图:在这里插入图片描述

​ 如采用 small page,bit12 ~ bit31 为物理基地址,最后加上虚拟地址的 bit0 ~ bit11 (页内偏移)即为该虚拟地址对应的物理地址。

​ L2 page table 转换过程如图:在这里插入图片描述

在 rtos 中的应用

​ 系统中可以将 L1 与 L2 同时使用,对于某些地址,如外设的地址,并没有达到 1MB 连续的地址,这时候可以分为更细的粒度,如 4kb 的粒度,这时候将该 L1 entry 指向 L2 table,然后再根据虚拟地址的 bit12 - bit19 来找到 L2 的 entry,因为有 8 bit,所以最大 256。

0x2400fc00 ==> 001001000000 00001111 110000000000576		  15
通过虚拟地址的高 12bit 定位到 L1 页表第 576 号 entry, 该 entry 中记录了 L2 页表的地址,通过读取该页表的高 22 bit 就能获取到 L2 页表的地址(第 10 bit 无效,说明 L2 页表必然 1KB 地址对齐)。定位到 L2 页表的地址后,再根据虚拟地址的 bit12 ~ bit19 (第 15 个 entry)来定位 L2 页表的 entry,得到 entry 后,该 4 字节的 entry 中就表示了该虚拟地址对应的物理地址,该 entry 是小页表类型,则 bit12 ~ bit31 说明了该虚拟地址对应的起始物理地址(这里有个点,低 12 bit 为 0,说明这个起始物理地址是 4KB 对齐的),得到物理地址之后 + 虚拟地址的第 12 bit。

​ 每个 L1 页表的 entry 能映射 1MB 范围的物理内存,而有时候,芯片的 memmap 可能并不是按照 1MB 来划分,比如 I2c0_base 为 0x90000000, I2c1_base 为 0x90001000,中间其他 IP 的基地址到 0x90010000 就结束了,并没有把这 1MB 完全覆盖,也就是并没有达到 0x90100000。

此时有两个策略:

  • 策略一:使用 L1 page table,直接将 0x90000000 这个地址按照 1MB 进行映射,此时 L1 page table 中的一个 entry 就能覆盖到 0x90000000 ~ 0x90100000,此时这 1MB 的内存属性是一样的,有时我们并不希望 0x90010000 ~ 0x90100000 之后的内存被访问,这时候仅使用 L1 page table 就不合适了。
  • 策略二:使用 L1 page table + L2 page table,L2 page table 能够更小粒度的映射上面的内存,让每 4KB 为一个 entry,这样子每 4KB 的内存属性是一样的。此时 L1 page table 依然是映射的 1MB,只不过这 1MB 被 L2 page table 进而分成了 256 份。

​ 其实这两种策略都是可以的,只不过第二种策略能够更精细化的管理内存,但初始化的时候略微复杂些,不过也还好了,按照手册的说明来就行了,第一种策略就较为简单粗暴了,但也无伤大雅。

page table 中的每个 entry 中还有其余 bit 可以使用,这些 bit 用来描述该 虚拟/物理 内存的属性,如是否可执行、可读、可写、cacheable、uncacheable 等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/445708.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

胤娲科技:AI绘梦师——一键复刻梵高《星空》

想象一下,你手中握有一张梵高的《星空》原图,只需轻轻一点,AI便能化身绘画大师,一步步在画布上重现那璀璨星河。 这不是科幻电影中的桥段,而是华盛顿大学科研团队带来的“Inverse Painting”项目,正悄然改变…

uniapp__微信小程序使用秋云ucharts折线图双轴

1、子组件 <template><view class"charts-box"><qiun-data-charts type"line":opts"computedOpts":chartData"chartData"/></view> </template><script> export default {props: {chartData: {t…

后端——eclipse实现前端后端的交互(2)

1.新建前后端文件 新建HTML文件和后端交互Servlet文件。新建文件的地址也有所要求&#xff0c;Servlet文件要在JavaResources下的src中。HTML文件在WebContent下 2. 引入jqury文件 后端与前端的互传需要通过jQuery的ajax,所以要传入jQuery的包到eclipse中&#xff0c;传入位置…

Apache HTTP Server 配置SSL证书(Windows)

Apache2.4.39 HTTP Server 配置SSL证书 1. 申请证书 申请证书步骤(略) 证书名称如下: ca-bundle.crt xxx_com.crt xxx_com.key2. 配置 证书位置:Apache2.4.39\conf\ssl Apache2.4.39\conf\ssl修改两个配置文件: 0localhost_80.conf <VirtualHost *:80>Rewrite…

QGroundControl最新版本MacOS平台编译(使用CMakeLists.txt)

1.下载源码: git clone https://github.com/mavlink/qgroundcontrol.git --recursive 2.安装依赖: brew install GStreamer 设置环境变量:GST_PLUGIN_PATH 安装SDL2: brew install SDL2

【记录】PPT|PPT 箭头相交怎么跨过

众所周知&#xff0c;在PPT中实现“跨线”效果并非直接可行&#xff0c;这一功能仅存在于Visio中。然而&#xff0c;通过一些巧妙的方法&#xff0c;我们可以在PPT中模拟出类似的效果。怎么在PPT中画交叉但不重叠的线-百度经验中介绍了一种方法&#xff0c;而本文将介绍一种改进…

浅谈虚拟电厂在分布式光伏发电应用示范区中的应用及前景

0引言 随着电力体制改革的持续推进&#xff0c;电力市场将逐步建立和完善&#xff0c;未来的售电主体也将随着配售电业务的逐步放开而日益多元化&#xff0c;新的政策不断鼓励分布式电源和微电网作为独立的配售电市场主体推动运营模式的创新。与微电网所采取的就地应用为控制目…

springboot001基于SpringBoot的在线拍卖系统(论文+源码)_kaic

医护人员排班系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了医护人员排班系统的开发全过程。通过分析医护人员排班系统管理的不足&#xff0c;创建了一个计算机管理医护人员排班系统的方案。文章介绍了医…

InfluxDB持久层封装

InfluxDB持久层封装 了解如何使用spring-boot来操作InfluxDB数据库&#xff0c;首先我们来看下整个的系统结构图例&#xff1a; 对比下mybatis中的执行流程&#xff1a; 1_自动装配 首先&#xff0c;我们来看下第一步自动装配&#xff1a;依赖spring-boot自动装配出InfluxDB对…

ubuntu22.04 ROS2 - 安装

参考链接:Ubuntu 22.04 LTS安装ROS2 (ros-humble-desktop)-CSDN博客 1、安装测试 ros2 run demo_nodes_cpp listener再开一个终端ros2 run demo_nodes_cpp listener2、小海龟模拟器 ros2 run turtlesim turtlesim_noderos2 run turtlesim turtle_teleop_key两个终端分别执行…

Linux内核与基础命令学习总结

Linux操作系统 Linux操作系统博大精深&#xff0c;其中对线程&#xff0c;IO&#xff0c;文件系统等概念的实现都很有借鉴意义。 ​ 文件系统和VFS 文件系统的inode上面讲过了。VFS主要用于屏蔽底层的不同文件系统&#xff0c;比如接入网络中的nfs文件系统&#xff0c;亦或…

用SpringBoot给Servlet容器Tomcat打war包步骤

首先写一个类来代替启动类 先在SpringBoot项目里打开pom.xml导入依赖,原本SpringBoot里面spring-boot-starter-web依赖里面有Tomcat,所以我们要先在spring-boot-starter-web里面导入依赖,把Tomcat给排除掉,并且加上你要打的war类型依赖 然后先刷新,再清除,最后再打包 成功之后,…

2024最新版安装教程!Python安装+PyCharm安装使用教程!!(非常简单)

Python下载安装 一、进入Python官网首页&#xff0c;下载最新版的Python 官方网址&#xff1a;Download Python | Python.org 鼠标悬浮在Downloads&#xff0c;选择最新版本 注意&#xff1a;由于Python官网服务器设立在国外&#xff0c;所以下载速度非常慢&#xff0c;我这…

管家婆-本地化-无法打开处理,链接失败

一、首先检测sql是否正常 二、检测管家婆svr是否正常 三、检测管家婆服务正常 阿雪技术观 拥抱开源与共享&#xff0c;见证科技进步奇迹&#xff0c;畅享人类幸福时光&#xff01; 让我们积极投身于技术共享的浪潮中&#xff0c;不仅仅是作为受益者&#xff0c;更要成为贡献…

数据库(1)

目录 1. 内存和外存的区别&#xff1f; 2. 常见的关系型数据库&#xff1a; 3. 常见的非关系型数据库&#xff1a; 4. 数据库与数据结构有什么关系&#xff1f; 5. SQL分类 6. 数据库的基本操作 7. 创建数据库 8. 删除数据库 9. 数值类型&#xff1a; 10. 字符串类型…

游戏如何应对薅羊毛问题

在大众眼里&#xff0c;“薅羊毛”是指在电商领域&#xff0c;“羊毛党”利用平台、商家的促销规则&#xff0c;低价获取商品和服务的行为。如前不久“小天鹅被一夜薅走7000万”的案例震惊全网。 然而实际上&#xff0c;“薅羊毛”现象不仅存在于电商场景&#xff0c;在游戏中…

【AAOS】Android Automotive 13模拟器源码下载及编译

源码下载 repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r69 repo sync -c --no-tags --no-clone-bundle 源码编译 source build/envsetup.sh lunch sdk_car_x86_64-userdebug make -j8 运行效果 emualtor Home Map All apps Sett…

提升邮件营销设计精准度秘诀,效率与效果实践

邮件营销通过确定目标群体、数据分析、邮件设计、测试优化、保持频率时效性及结合其他渠道实现精准营销&#xff0c;提高市场效益。ZohoCampaigns集成CRM、自动化功能和客户细分提升效果。 1、确定目标群体 精准营销的第一步是了解并确定你的目标群体。标定目标群体包括年龄、…

HUAWEI_HCIA_实验指南_Lib3.1_VLAN 基础配置及 Access 接口

1、原理概述 早期的局域网技术是基于总线型结构的。总线型拓扑结构是由一根单电缆连接着所有主机&#xff0c;这种局域网技术存在着冲突域问题&#xff0c;即所有用户都在一个冲突域中&#xff0c;那么同一时间内只有一台主机能发送消息&#xff0c;从任意设备发出的消息都会被…

单脉冲阵列和差波束形成实现比幅测角法(MATLAB仿真)

单脉冲阵列和差波束形成实现比幅测角法&#xff08;MATLAB仿真&#xff09; 文章目录 前言一、和差波束形成二、比幅测角法原理三、MATLAB仿真四、MATLAB仿真代码(超详细)单脉冲阵列和差波束形成实现比幅测角法MATLAB仿真超详细代码 总结 前言 单脉冲雷达天线要求产生一个主瓣…