美文网首页BB-black开发板[Linux arm-v8]
理论复习:MMU技术--Apple的学习笔记

理论复习:MMU技术--Apple的学习笔记

作者: applecai | 来源:发表于2020-09-12 21:47 被阅读0次

前言:

为什么要复习MMU和Cache,因为我之前就学习过uboot,但是当初跳过了MMU,另外我平时学习过程中基本上忽略了内存管理。只是了解一个皮毛,没有深入思考过。而这次要准备自制系统而重学uboot,当然不能放过MMU啦~

问题1:MMU就是虚拟地址转物理地址的作用吗?

谈论到MMU我首先想到的是内存映射即虚拟地址和物理地址转换,然后想到的是rtos没有MMU但是linux有的这句话,但是这句话开始就想不通了,就比如我现在用的tc275就是地址转换的呀,以前用过的D-flash动态窗口也是有地址转换的呀,不都是MMU吗?后来网上查资料,发现MMU是一种内存管理技术。虚拟地址转物理地址是它其中一种基本能力而已。

问题2:Cache能通过寄存器控制吗?和MMU有什么关系?

最近看到了Cache,其实我也知道Cache就是速度更快的内存,其它就没有研究了,现在在深入理解MMU那么就一起了解了Cache。当前的理解MMU可以管理所有内存,所有当然可以控制Cache。因为Cache也是内存的一种。

问题3:MMU到底什么功能?

网上搜索的内容太碎片化,而且准确度不高,还是看书吧!我家什么最多,就是书最多,每年双11我都会买很多,但是都是囫囵吞枣看一下V翻阅《深入理解计算机系统》第9章的首页概述中我get到3个信息。
a.还记得linux的用户空间和内核空间吧,这样的空间保护这就是靠MMU,而RTOS就没有。
b.提到了malloc的段错误和保护错误,这部分我从没了解过,只是freertos之前简单了解过heap处理,目的就是要让内存都存在在一起,这样可以加快访问速度,而非碎片化访问。而linux中防止碎片估计就是靠MMU。然后我想起来AutosarOS为每个component通过lds来分配空间,也是不能访问其它空间的,AutosarOS也有内存保存功能,这个MMU有异曲同工之妙。
c.虚拟内存和共享空间的关系,通过读写某个内存位置修剪过一个磁盘文件内容。这部分暂时猜测就是同一个物理映射到了不同的虚拟地址,所以实现了共享吧。

好了只看了第一页我就开始想入非非了,还有60页边看边写吧,一定会有新的认识~

问题4:第二页中写了将DRAM缓冲来表示虚拟内存系统的缓存,DRAM是什么和L1 L2 cache有什么区别?

网上搜索了DRAM 只能将数据保持很短的时间。为了保持数据,DRAM 必须隔一段时间刷新。cache一般是sram访问速度比dram快10倍。所以DRAM可以理解为物理介质,而cache的物理介质一般是sram。

问题5:说到PTE分页条目,缓存,未缓存和未分配。这个和虚拟地址和物理地址有什么关系?

不着急,先记录问题,要继续向后看,这个图让我搞明白了。首先通过PTE进行地址翻译是芯片硬件做的事。PTE就是我以前在单片机中会用到的page+offset的寄存器。关于缓存,未缓存和未分配其实是一种MMU的管理技术中的对象,会有些算法策略来应对这些对象,否则大的不命中及访问第一个字节的开销会比较大。所以对应这3个对象的管理算法决定了虚拟地址转物理地址的性能消耗。

image.png

问题6:上图中的虚拟地址和cache有什么关系?

上图中的表都是有地方存储的,物理内存当然是保存在磁盘等设置上,而虚拟内存是保存在闪存上,可以理解为sram。那些表之后还有多级分页表示保存在cache上的。

问题7:程序必须复制到内存中才能运行吗?

我很早就是知道虚拟内存的概念,那个例子就是火车轨道只有火车长度的1/4,那么火车能开到目的地吗?只要铺设轨道的速度为火车快,就可以到达目的。程序要复制到内存中运行,主要是内存去数据速度为磁盘要快100倍。但是单片机应该就是直接中flash中取代码运行的吧!所以不是必须的,但是linux有虚拟内存,所以都是这样运行程序的。

问题8:为什么说nandflash无法运行程序而norflash可以独立运行程序?

原因是nandflash没有地址总线。啊!没有地址总线怎么取数据呀!它有它特殊的通信协议,数据总线和地址总线公用,主要是需要驱动程序去配置nandflash,所以不能独立运行里面保存的代码。而norflash有地址总线,所以它可以独立运行程序。

问题9:MMU中哪些是芯片的职责哪些是算法的职责?

这不是暂时还不是很清晰,当前任务虚拟地址转物理地址是芯片的职责,因为有个这样的寄存器。而MMU生成一个PTE这个芯片干的活还是MMU算法干的活?

问题10:高速缓存中到此保存怎么样的转换表?

MMU生成一个PTE需要花时间,所以先准备好多级分页表,保存在高速缓存中即可。所以高速缓存中会保存转换表。其实在第6章存储器存储结构有具体描述,但是我今天没看。

现在基本上理解了

其实我的这些疑惑主要是不清楚到底哪些是软件干的活,哪些是芯片硬件干的活。并且我之前没有搞清楚虚拟内存和虚拟地址的关系。也没有搞清楚虚拟内存是保存在哪个器件上的,虚拟内存应该是保存在ddr上,所以内存越大加载软件越快。而对于虚拟地址如何转物理地址的方案我早就了解过,包括未命中缺页的处理也早就了解过。

《深入理解计算机系统》9.7.2章节后都是说的Linux虚拟内存管理,和物理内存无关

1.包括一个进程的虚拟内存分区
2.段错误的原因是访问了未分配区域,保护异常访问无权限的段。这些都是一个vm_area_structs结构体就可以标记这些信息了,虚拟内存做权限管理果然方便
3.c语言共享内存机制,fork机制都用到了写时复制。
4.为什么要动态分配空间的原因,就是要充分利用空间,通过不断的申请和释放,否则静态分配没有那么多空间了。
5.堆栈碎片的处理算法。包括最简单的边界标记。看到这里我想起来之前学习tr-thread貌似为task任务块分配空间heap有3种算法可选。
6.链表存储及垃圾回收机制。不可达的就是垃圾。
7.介绍了c语言中与内存有关的错误,确实以前出现段错误或者内存溢出,就是犯下了这些错误。

相关文章

  • 理论复习:MMU技术--Apple的学习笔记

    前言: 为什么要复习MMU和Cache,因为我之前就学习过uboot,但是当初跳过了MMU,另外我平时学习过程中基...

  • Makefile复习--Apple的学习笔记

    10年前第一次学习Makefile就是这份资料。现在正好在做底层,那么就拿出来复习下。 “.PHONY : all...

  • Linux input子系统框架--Apple的学习笔记

    按键中断解决irq_of_parse_and_map返回0的问题--Apple的学习笔记我为了复习相关函数和io模...

  • bb-black添加SocketCAN驱动--Apple的学习笔

    Linux基于pinctrl的LED控制—Apple的学习笔记我先复习了下设备树,然后做了LED控制把整个流程过了...

  • Linux 内存管理

    虚拟内存1.1. 为什么要使用虚拟内存技术1.2. 理论前提1.3. 虚拟内存实现1.4. 页机制1.5. MMU...

  • 倒计时54天

    一、学习 1.笔记3复习[.通风与空调施工技术章节]+(1-32题)(52-65页)90分钟。 2.笔记3复习[....

  • 一建第23天

    一、学习 复习笔记(46..52)103分钟。 复习书本(25..32页)测量技术,做题46道题,92分钟。 整理...

  • 倒计时53天

    一、学习 1.笔记3复习[电梯工程施工技术章节]+(1-41题)(77-88页)61分钟。 2.笔记4复习[消防工...

  • 倒计时55天

    一、学习 1.笔记3复习[电梯工程施工技术]+(1-41题)(78-88页)73分钟。 2.笔记3复习[智能化工程...

  • UML类图关系复习--Apple的学习笔记

    1. opengl shader 最近看完了宝书中的高级opengl章节,选了天空盒子及几何着色器shader的实...

网友评论

    本文标题:理论复习:MMU技术--Apple的学习笔记

    本文链接:https://www.haomeiwen.com/subject/vzibektx.html