当前位置: 首页 > news >正文

HNU计院操作系统实验8

本次实验需要使用arm提供的寄存器实现页表地址转换功能。使用字典树的思想逐级建立3级页表VA达到48位使用TTBR_EL0、TTBR_EL1寄存器将UART串口设备的虚拟地址和进程的虚拟地址分开映射使得低异常级别的程序在硬件上无法越权访问高异常级别的系统地址空间大家在做这个实验的时候记得调试的时候看一下自己的TTBR_EL0、TTBR_EL1是否真的有一个的值是高地址之前很多同学都没有注意调试。注意每一个叶子节点的大小是4kb虽然每个节点定义的是512entry但是512*9bit是4096b注意考虑每个条目本身存储所占用的大小每一级9位是arm的官方手册定的不能乱改呀推荐完成时间 60分钟 理解比较困难可以借助ai理解一下目录1 实验项目一... 31.1 项目名称... 31.2 实验目的... 31.3 实验资源... 42 实验任务... 52.1 Armv8的地址转换... 52.2 前置知识... 52.2.1 粒度granule. 62.2.2 Gathering Reordering EarlyWriteAcknowledgement 72.3 Mmu管理... 92.3.1 src/bsp/mmu.c. 92.3.2 src/bsp/mmu.h. 102.3.3 src/bsp/cache_asm.S. 112.4 启用MMU.. 122.5 成品展示... 132.6 拆解代码原理... 142.6.1 定义映射区域... 152.6.2 设置映射的地址和页表大小... 162.6.3 设置粒度... 162.6.4 新建页表... 172.6.5 查找页表... 182.6.6 清除cache和buffer的数据... 192.6.7 重新置位... 202.7 Lab8作业... 203 总结... 233.1 实验中出现的问题... 233.2 真实感受... 23实验项目一项目名称分页内存管理实验目的实现分页Page实验资源实验任务Armv8的地址转换TTBR0指向整个虚拟空间下半部分通常用于应用程序的空间TTBR1指向虚拟空间的上半部分通常用于内核的空间。其中TTBR0除了在EL1中存在外也在EL2 and EL3中存在但TTBR1只在EL1中存在。这个分隔意味着OS不必为每个任务重新分配转换表了。先选择基址寄存器再进入每个条目翻译成对应的PTE前置知识EL0是应用层EL1是OS层粒度granule其实就是偏移offset范围一页的大小Gathering Reordering EarlyWriteAcknowledgement可以看出4kb粒度启用写回写分配缓存机制这里启用了之前已经算好的东西那么重要的东西就有tabletcrattrMmu管理src/bsp/mmu.csrc/bsp/mmu.hsrc/bsp/cache_asm.S启用MMU成品展示可以看到确实在启用MMU拆解代码原理整个代码运作机制如图所示我们整个程序的主要目的就是在主存内生成完整的页表给TTBR0用然后做好粒度之类的设置TCR。页表其实就像一棵树只不过是按位来存储的使用VPN查询页表的PTE实际上VPN算是句柄PTE算是一个节点节点内存储了到达下一个节点的地址也就是PFN。现在我们的树是扁平化地存储在内存中的DFS深度优先建树从0级节点内的512个条目中的其中一个条目构建然后再继续直到最终指向物理空间的块3级。定义映射区域设备区域被定义的特别严格根据这样的起始地址定义两个映射设置映射的地址和页表大小这里看链接文件的定义以当前位置.分配了页表起始位置然后长度就是以一个地址之间的差值定义的这个大小可以在链接文件里面修改。设置粒度MMU的粒度新建页表这里有512个条目然后全部初始化为0查找页表这里和书上写的差不多清除cache和buffer的数据这里让这些东西无效化是害怕有未定义数据被写回内存里面所以每次启动都要无效化一次重新置位这里重新置位了CMI位Lab8作业第一次运行造成错误。溢出了需要把U32换成U64Ld位置定义了这个符号表ttbr1_el1没有被启用总结实验中出现的问题几乎做完之前要崩溃了有种思考乏力的感觉像是缺乏休息没有力气这种状态很难走出来多出去走走吧拓宽思路找不到英文文档的重点之前对页表的理解有偏差真实感受感谢某同学在北辰三角洲陪我走了一段路我才能回过神来不再踌躇这实验弄懂了简单没弄懂就难数据结构真的很重要头一次看到扁平化建512叉树上一次看DFS深度优先建树深度为3层还是在设备树那里
http://www.rkmt.cn/news/1393635.html

相关文章:

  • IDM永久激活终极指南:免费解锁完整功能的最佳解决方案
  • 兴化楼市观察:改善需求下的现房低密选择 - 花开富贵112
  • 无监督动态图神经网络:从图嵌入到时序对齐的完整实践
  • 1-16.调试图片是什么?怎么生成?
  • 1-15.代码看不懂怎么办
  • Twine完全指南:三步掌握互动叙事创作神器
  • ARM MPAM架构:多执行环境下的内存资源隔离与监控
  • 《C语言学习:数组》10
  • Linux 日志系统入门:/var/log 和 journalctl 怎么排查问题?
  • 叙事脚本与模拟社交平台:青少年数字素养教育的创新实践
  • 11.1 KFD Context 的设计动机:从单进程单上下文到多上下文隔离
  • 一次通关结构体、位断、联合体和枚举这四大痛点
  • 燃气管网在线监测自动告警系统方案
  • Tablacus Explorer:终极免费文件管理器快速入门指南
  • 正则表达式极速教程
  • 国电华美车载式高压无局放,把试验室“开”到现场
  • 异构感知终端全域统管方案
  • 武汉国电华美车载式高压无局放,现场干活儿的得力帮手
  • 5步掌握Django电子商务项目实战:从零构建完整电商系统
  • 简单好用!WinRAR的三种密码保护方式
  • Linux 环境变量详解:PATH、export、source 到底是什么?
  • 小样本时间序列分类:多模态编码与元特征融合框架解析
  • 实现自己的IOC容器——Winter (一)Bean加载
  • 爆款标题生成率提升4.8倍!广告公司总监压箱底的ChatGPT创意写作AB测试报告(2024Q2最新)
  • 百度网盘下载加速终极指南:使用Python工具实现满速下载的完整教程
  • 系统辨识选最小二乘还是最大似然?一个传感器噪声的例子讲明白
  • 从“飞起来”到“管得好”:2026工程进度低空管理系统供应商推荐 - 品牌2025
  • ChatGPT账号被临时限制?官方未公开的4级风控触发阈值(含IP信誉分、会话熵值、UA指纹校验逻辑)
  • 鸿蒙数学108篇 第四篇:存在与虚无数理逻辑:数学存在的底层公理
  • Scrum成功案例分析