MMU简介与测试
一、MMU简介
MMU(Memory Management Unit),内存管理单元,负责虚拟地址与物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制等,是大内核系统对比与嵌入式小系统比较典型的特征。
现代的多进程操作系统通常需要MMU才能保证每个进程都拥有独立的地址空间,它的常见权限包括:虚拟内存的读、写、可执行、无法访问四种。怎样测试其权限是各开发者关心的问题,下面小编将使用内存MAP测试MMU权限管理(内存保护),一起来看看吧~
二、MMU测试
1.内存MAP 简介
内存MAP通过MMU把虚拟内存“映射”到物理内存,把虚拟内存和物理内存一一对应起来。为了达到这个目的,需要3个要素:虚拟地址的起始地址,物理地址的起始地址,以及需要MAP(映射)的大小。(由于分页机制,一般MAP时都是以页为单位,也就是4096字节。)
在完成MAP时,还需要指定映射内存的属性,也就是这里的权限管理:读、写、可执行、无法访问。
unsigned long attr = map_mk_attr(MAP_PTL_PAGES, MAP_TYPE_RAM, MAP_AP_KRW_URO,
MAP_FLAG_CACHEABLE | MAP_FLAG_SHAREABLE);
arg.v_start = 0x60050000;
arg.p_start = 0x60000000;
arg.map_size = 0x1000;
arg.attr = attr;
以上的代码就是表示将虚拟地址从0x60050000映射到物理地址0x60000000,连续映射一个页,也就是大小为0x1000(4096字节),属性为KRW,表示内核可读写,URO表示用户态可读可写。
2. 四种权限的测试
2.1读权限测试
unsigned long attr = map_mk_attr(MAP_PTL_PAGES, MAP_TYPE_RAM, MAP_AP_KRW_URO,
MAP_FLAG_CACHEABLE | MAP_FLAG_SHAREABLE);
arg.v_start = 0x60050000;
arg.p_start = 0x60000000;
arg.map_size = 0x1000;
arg.attr = attr;
如以上代码:建立映射0x60050000到0x60000000,大小为4096字节,MAP属性为URO,也就是用户态只读。
测试方法:用户态读取地址0x60050000的值,预期可以成功。然后向地址0x60050000写入任意值,比如1,预期会失败,抛出异常。
2.2读写测试
unsigned long attr = map_mk_attr(MAP_PTL_PAGES, MAP_TYPE_RAM, MAP_AP_KRW_URW,
MAP_FLAG_CACHEABLE | MAP_FLAG_SHAREABLE);
arg.v_start = 0x60050000;
arg.p_start = 0x60000000;
arg.map_size = 0x1000;
arg.attr = attr;
如以上代码:建立映射0x60050000到0x60000000,大小为4096字节,MAP属性为URW,也就是用户态读、写。
测试方法:用户态读取地址0x60050000的值,预期可以成功。然后向地址0x60050000写入任意值,比如1,预期会成功,无任意异常。
2.3读写可执行测试
unsigned long attr = map_mk_attr(MAP_PTL_PAGES, MAP_TYPE_RAM, MAP_AP_KRW_URW,
MAP_FLAG_CACHEABLE | MAP_FLAG_SHAREABLE | MAP_FLAG_EXECUTABLE);
arg.v_start = 0x60050000;
arg.p_start = 0x60000000;
arg.map_size = 0x1000;
arg.attr = attr;
如以上代码:建立映射0x60050000到0x60000000,大小为4096字节,MAP属性为URW,也就是用户态读、写,同时指定EXECUTABLE(可执行)属性。
测试方法:用户态读取地址0x60050000的值,预期可以成功。然后向地址0x60050000写入return指令的机器码,预期会成功,最后跳到地址0x60050000执行,由于写入的是return指令,所以预期执行完该代码,就会返回主调用线程,最后正确结束测试,无异常。
2.4不可访问测试
unsigned long attr = map_mk_attr(MAP_PTL_PAGES, MAP_TYPE_RAM, MAP_AP_KRW_UNA,
MAP_FLAG_CACHEABLE | MAP_FLAG_SHAREABLE );
arg.v_start = 0x60050000;
arg.p_start = 0x60000000;
arg.map_size = 0x1000;
arg.attr = attr;
如以上代码:建立映射0x60050000到0x60000000,大小为4096字节,MAP属性为UNA,也就是用户态NO ACCESS(无法访问)。
测试方法:用户态读取地址0x60050000的值,预期会直接抛出异常,因为该地址的MAP属性是无法访问。
好啦,以上就是对使用内存MAP测试MMU权限的全部介绍,快动手尝试一下吧!有疑问欢迎在评论区留言讨论哦~

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Google:互联网 60% 是重复内容
前几天在新加坡举行的 GoogleSearch Central Live 活动上,Google Webmaster 趋势分析师 Gary Illyes 称,互联网上六成的内容是重复的。 互联网上有大量重复内容是众所周知的事实,问题是比例有多大,作为最大最流行的搜索引擎,Google 给出了它的答案。 当然,大家更想知道 Google 如何定义“重复内容”。是 100% 完全相同的重复?还是标题不同但实际内容一致的重复,比如社交网络中的转载,或者进行搜索引擎优化之后的重复等。根据 Google 搜索中心文档的解释,重复内容一般是指在域内或跨域的实质性内容块,这些内容与使用同一种语言的其他内容完全匹配,或有一定体量的内容明显相似。 后面参加了此次会议的观众补充了 Gary Illyes 提出此说法时的上下文,主要是在解释 Google 如何处理“重复数据”,Google 在这里对“重复内容”的定义是基于抓取数据的考虑。 1.删除协议重复的内容 — 有利于 HTTPS 2.删除www/non-www 3.删除包含无用参数的 URL(例如 sessionID?) 4.删除斜线/无斜线的变体 5...
- 下一篇
Vision Transformer这两年
作者|Maximilian Schambach OneFlow编译 翻译|胡燕君、杨婷 在NLP领域取得巨大成功后,Transformer架构在计算机视觉方面的作用日渐凸显,成为越来越普遍的CV工具。自2020年10月Vision Transformer模型推出以来 ,人们开始高度关注Transformer模型在计算机视觉上的应用。 图 1:各类Vision Transformer模型的推出时间(此处以论文在arXiv平台上的发表时间为准) 恰逢Vision Transformer推出两周年之际,借此机会我们对其稍作介绍,并讨论这两年来发展出的多种Vision Transformer模型变体以及Transformer在计算机视觉应用方面面临的各种挑战。 本文由OneFlow社区编译。 1 自注意力机制和Transformer架构 从NLP说起,2017年,Attention is all you need一文提出了Transformer架构( Vaswani et al. 2017 )。Transformer架构的本质是一个序列到序列模型:输入的是一种称为token的序列,tok...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8安装Docker,最新的服务器搭配容器使用