首页 > 其他分享 >MMU复习--Apple的学习笔记

MMU复习--Apple的学习笔记

时间:2023-09-26 23:36:59浏览次数:80  
标签:分页 物理地址 MMU 虚拟地址 -- 地址 寄存器 Apple

一,前言

以前看过MMU,因为这是单片机OS中没有的,当时我记得理解的不是很清晰,包括MMU中哪部分是硬件的,哪部分是软件的都没有太搞清楚。由于看了一个自己写linux操作系统的视频,里面有介绍MMU,且演示了虚拟地址和物理地址的转换,此时我才深刻的理解了,所以在看qemu源码的内存管理前,我先复习下linux的内存管理,本章blog主要复习MMU。

二,分析

  1. 逻辑地址通过分段形成了线性地址空间(由虚拟地址构成),然后虚拟地址通过分页机制MMU转换到物理地址。

MMU复习--Apple的学习笔记_虚拟地址

  1. 线性地址空间,段的base地址+offset0作为线性地址空间的start,base地址+限长度,也就是这个进程可用的最大size。这就是线性地址空间的概念,它由一个段中GDT的线性地址最大构成。
  2. 段Base地址+偏移=某一个虚拟地址,即可以找到某个字节。但是这个字节如何映射到物理地址中某个字节呢?就是通过分页机机制(MMU)。虚拟地址(逻辑地址)也可以叫线性地址。
  3. 拿x86的芯片举例GDTR寄存器保存了GDT的首地址+界限(总描述符字节长度),GDT数据结构的8字节内容。选择子是13bit,也就是2^13=8192个选择。

MMU复习--Apple的学习笔记_虚拟地址_02

  1. 关于分页中,页目录和页表的最后12bit是属性位,主要是有效属性,可读写属性,权限属性,脏页,可访问等。

MMU复习--Apple的学习笔记_虚拟地址_03

6. 有了分段为什么还要有分页?分段和分页比较大的2个区别是,分页是固定4K的,分段可以设置任意大小,分段最大仅8192项。所以可以理解为仅用分段比较浪费内存,分页就变成更小颗粒度了,后来除了伙伴算法还发明了slub技术比分页的颗粒度更小的object来分配内存。另外一个重要的原因是考虑到fork的机制包括了复制内存表,但是不同的进程缺有不同的物理空间,主要就是靠分页不同。 

三,小结

本次我了解了MMU的实现方式,那么就很容易的区分了MMU技术中哪些是硬件实现的,哪些是软件实现的。软件其实就是要构建GDT表保存在内存物理地址中,然后芯片硬件中有GDTR等base地址的寄存器用来保存GDT表的首地址,按上图的段选择符也是一个寄存器,偏移量也是一个寄存器。分页中有类似的寄存器用来保存表页的首地址和offset等信息,那么芯片硬件就可以计算出物理地址了。

所以开启了MMU功能,只要填充完分段和分页表的内容到内存且写入相关寄存器后,当软件代码写入一个虚拟地址,硬件会自动写入到对应的物理地址中。而我以前没有搞清楚,导致我无法思考它是如何实现的原因是不了解这些内核寄存器。arm芯片的话主要是TTBR寄存器。

标签:分页,物理地址,MMU,虚拟地址,--,地址,寄存器,Apple
From: https://blog.51cto.com/u_16247275/7615238

相关文章

  • 使用HttpServletResponse实现curl接口时控制台输出(续)
    上一篇文章的问题在上一篇文章SpringBootRestController接口如何输出到终端中讨论了如何使用HttpSerlvetResponse写入输出流,使应急接口通过curl调用时可以在控制台输出信息,使运维人员知道命令执行情况。但是上一篇文章的问题是,HttpServletResponse是Controller的参数......
  • Visual Studio 2022快捷键
    向上新增一行并跳转:ctrl+Enter向下新增一行并跳转:ctrl+shift+Enter跳到行首:home跳到行尾:end按词移动:Ctrl+ →按词移动:Ctrl+←选中行首到光标之间的代码:shift+home选中行尾到光标之间的代码:shift+end折叠/展开代码:ctrl+m+m[只对函数起作用]调用智能提示:ctrl+j......
  • UE4 创建UObject类
    什么是UObject类?参考:https://zhuanlan.zhihu.com/p/252431932创建一个UObject类的继承类#pragmaonce#include"CoreMinimal.h"#include"Student.generated.h"/****/UCLASS()classMYGAME1_APIUStudent:publicUObject{GENERATED_BODY()public:......
  • JavaScript-Object 对象的相关方法
    Object.getPrototypeOf() Object.getPrototypeOf方法返回参数对象的原型。这是获取原型对象的标准方法。varF=function(){};varf=newF();Object.getPrototypeOf(f)===F.prototype//true上面代码中,实例对象f的原型是F.prototype。下面是几种特殊对象的原型。//空对......
  • 案例1:求圆的面积和周长
    圆的面积=π*r*r;圆的周长=2*π*r;π可以定义一个符号常量,然后输入一个半径r,即可求出圆的面积和周长。示例代码如下:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#definePI3.1415voidmain(){ doublearea,zhouChang; floatr; printf("请......
  • 应用程序人机交互的一些反面教材
    无用的模态对话框下图是安信可开发的一款串口工具,当前是已插入USB串口并且软件为打开状态。当用户在上述情况下,主动拔除USB设备时,软件会弹出对话框,用户除了点击对话框中的OK或者右上角的X,对软件其余界面元素的任何操作都是无效的。并且点击对话框中的元素对用户是没有积极意义......
  • 高精度除法
    #include<iostream>#include<vector>#include<algorithm>usingnamespacestd;vector<int>div(vector<int>&A,int&b,int&r){vector<int>C;r=0;//r为余数for(inti=A.size()-1;i>=0......
  • 9月26日总结
    一.今天做了什么今天上午学习了数据结构和马克思主义原理,下午进行了团日活动,之后和朋友出去看电影了,看了《敢死队4》,盆友迟到了半个小时,感觉亏了,但是看完后又感觉没亏,因为少看了点史。这片真的太烂了。。。。二.遇到的问题,如何解决无三.明天准备做什么背20个单词......
  • vite+vue3项目发布到手机
    1.修改vite.config.jsexportdefaultdefineConfig({plugins:[vue(),],resolve:{alias:{'@':fileURLToPath(newURL('./src',import.meta.url))}},server:{hmr:true,host:"0.0.0.0",......
  • VS2019安装PCL 1.11.1
    1.从官网下载PCL:https://github.com/PointCloudLibrary/pcl/releases 下载这两个文件就行2.安装运行下载好的exe进行安装,注意这一步要选第二个添加到系统变量,一直下一步安装到默认路径即可: 我这里安装的时候选成了第一个,但是没关系,安装好后再系统变量的Path里添加: 然......