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

MMU复习--Apple的学习笔记

时间:2023-09-26 23:46:31浏览次数:50  
标签:分页 物理地址 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的学习笔记

标签:分页,物理地址,MMU,虚拟地址,--,地址,寄存器,Apple
From: https://www.cnblogs.com/ips9999/p/17731590.html

相关文章

  • 拓扑图 题目要求 实验要求: 1、PC1\PC2\PC3\PC4采用DHCP自动获取IP地址,SW5作为服务
    拓扑图题目要求实验要求:1、PC1\PC2\PC3\PC4采用DHCP自动获取IP地址,SW5作为服务器,SW3和SW4作为中继创建地址池ippoolhuawei1和ippoolhuawei2,租期都为2天2、SW3与SW4做链路聚合,采用LACP模式。SW3作为主交换机,优先级为0抢占延时时间为10秒让G0/0/4接口成为非活跃链路,优先级为65000......
  • 中断是怎么实现的
    中断是什么简单的说就是CPU在等待很久才能完成的任务时,趁机去干点别的事情去了。要是这个耗时较长的任务完成了,给CPU打个电话,再把CPU叫回来干活。用复杂的话来说中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程......
  • Flask 中的蓝图与红图
    1.蓝图1.1.概述在Flask中,蓝图(Blueprint)是一种组织和管理路由、视图函数和静态文件的方式。它可以将一个应用分成多个模块,每个模块负责处理特定的路由和视图函数。模块化蓝图可以将一个大型应用拆分成多个小模块,每个模块负责处理特定的功能或业务逻辑。这样可以提高代码的......
  • MMU复习--Apple的学习笔记
    一,前言以前看过MMU,因为这是单片机OS中没有的,当时我记得理解的不是很清晰,包括MMU中哪部分是硬件的,哪部分是软件的都没有太搞清楚。由于看了一个自己写linux操作系统的视频,里面有介绍MMU,且演示了虚拟地址和物理地址的转换,此时我才深刻的理解了,所以在看qemu源码的内存管理前,我先复习下......
  • 使用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,对软件其余界面元素的任何操作都是无效的。并且点击对话框中的元素对用户是没有积极意义......