小樱知识 > 生活常识内存管理(硬件编程)

内存管理(硬件编程)

提问时间:2022-06-03 18:08:06来源:小樱知识网


1.MMU是什么?

在早期的CPU(比如8086),或者现在使用的MCU(单片机),程序是直接运行在物理内存(SDRAM或者NOR Flash)上的。当程序运行时,通过总线访问的数据、读写地址都是物理地址。例如,程序计数器PC中的值是预取指令所在的物理存储器的地址值。

冯·诺依曼计算机模型

这种方法易于硬件电路设计,程序处理逻辑简单,但不适用于复杂系统,尤其是多任务操作系统。首先,我们来看看原方法的不足和缺陷。

物理内存不足。例如,一个程序需要64K的内存才能运行,但机器只有32K的物理内存。

程序的运行地址不确定。加载到内存中的同一程序的地址每次都可能不同。

内存使用率低。要运行一个程序,你需要在运行它之前把整个程序装入内存。

不支持多任务处理。有一个问题是进程间地址空没有隔离,或者一个任务失败,可能导致整个系统宕机。

然而,随着计算机科学技术的发展,所要解决的问题越来越复杂,单任务批处理已经不能满足需求。此外,应用程序所需的内存量也在增加。而且随着多任务的需求,这种技术架构已经不能满足需求。在这样的背景下,MMU应运而生,可见任何技术的发展都必须是需求驱动的。MMU(内存管理单元)主要用于管理虚拟内存和物理内存的控制线,同时还负责虚拟地址到物理地址的映射,用硬件机制提供内存访问授权,多任务多进程操作系统。

如果处理器使能MMU,CPU执行单元发送的内存地址会被MMU截获。CPU到MMU的地址称为虚拟地址(VA),MMU将这个地址翻译成另一个地址发送到CPU芯片的外部地址引脚,也就是将VA映射到PA,如下图所示:

MMU硬件电路的功能

二、MMU的具体功能

1.页表的映射和转换

MMU的主要功能是将虚拟地址转换成物理地址。但是每一个“映射”都要解决两个问题:映射的最小单位(粒度)和映射的规则。

A.虚拟地址空被划分为一个称为page的单元,同时对应的物理地址空也被划分。单位是页框,页面和页框的大小必须相同。映射的最小粒度是从单个虚拟页面到物理页面,页面大小通常为4K,即一次至少要将一个4K VA页面块映射到一个4K PA页面块(从0开始,用4K对齐方式划分页面块),页内偏移量为常数。

例如,VA的页面0x30004000~0x30004fff映射到PA的页面0x00008000~0x00008fff。CPU执行单元访问虚拟地址0x30004008时,实际访问的物理地址是0x00008008(0x30004008和0x00008008位于虚拟和虚拟地址/[/]以页为最小单位意味着VA中的一页不能分成几个小块分别映射到不同的PA,VA中属于不同页的块也不能映射到PA中一页的不同部分,所以整个页到页的映射是必要的。

B.MMU软件配置的核心是页表,页表描述了MMU的映射规则,即虚拟内存的哪些页映射到物理内存的哪些页框。页表由表示映射规则的记录组成,每个记录称为页表条目(PTE),整个页表存储在片外存储器中。MMU通过查找页表来确定VA应该映射到哪个PA,以及是否有权限映射。

c、如果MMU每次地址翻译时都在位于外存的页表中查找PTE,翻译速度会大大降低,于是出现了TLB。TLB(Translation look aside Buffers)是翻译快速表,也简称为快速表。可以理解为MMU中存储页表的专用缓存,保存最近使用的PTE甚至所有页表。收到虚拟地址后,MMU首先在TLB查找它。如果它找到对应于VA的PTE,它将直接转换它。如果它找不到它,它将在外部存储器页表中查找它,并在TLB中替换它。TLB属于片上SRAM,存取速度快。通过在TLB缓存PTE,MMU可以节省访问外部存储器页表的时间,从而加快虚拟-真实地址转换。TLB的工作方式类似于CPU缓存,只是TLB专用于缓存MMU的页表。

地址转换的整个过程

2.MMU的存储保护功能。既然所有发送到内存的地址信号都要经过MMU的处理,那这个特意插入的翻译层让它只做地址翻译岂不是浪费了?很明显,它具有更多限制虚拟地址访问的能力(就像路由器在转发网络数据包的同时可以过滤各种非法访问),比如内存保护。可以在PTE条目中保留一些位来设置访问权限的属性,例如禁止访问、可读、可写和可执行。设置后,当CPU访问一个VA时,MMU在页表中找到对应的PTE,将指令的权限要求与PTE中的限制条件进行比较,符合要求的将VA转换为PA;否则,不允许访问,并生成异常。

三。操作系统对内存管理单元的管理

实际上,MMU是为了满足操作系统日益复杂的内存管理而产生的。与奥斯穆的关系简述如下:

1.系统初始化代码会在内存中生成页表,然后将页表地址设置到MMU对应的寄存器中,这样MMU就可以知道页表在物理内存中的什么位置,以便需要的时候查找。之后,MMU由特殊指令启动,该指令用作边界。之后程序中所有的内存地址都变成虚拟地址,MMU硬件开始自动完成查表和虚实地址转换。

2.在操作系统初始化的后期,创建第一个用户进程。在这个过程中,还需要创建一个页表,并将其地址赋给进程结构中的指针成员变量。也就是说,每个进程必须有自己的页表。3.当用户创建一个新进程时,子进程复制父进程的一个页表,然后页表的内容随着程序的运行逐渐更新和改变。

4.系统处理内存寻址,内存寻址由操作系统管理和维护,以确保正常进程。

存储器寻址概述图

上图显示了内存管理的硬件结构和处理流程:

a、cpu发起寻址请求,由MMU处理;

b、如果在TLB缓冲区中找到MMU,直接使用映射后的物理地址从主存中读取;如果没有找到,则需要从当前进程的页表中查询,如果找到,则返回更新TLB;;

C.如果页表中没有虚拟地址,当发现虚拟地址还没有分配给物理地址空时,就会触发缺页中断。此时,这个虚拟地址对应的磁盘文件的内容会被检查,加载到内存中,并在页表中建立映射关系,这样程序才能继续执行。

了解了地址翻译的过程,VA到PA的映射过程就清晰了:MMU先在TLB查找VA,如果找不到匹配的PTE条目,就在TLB查找外部页表替换;根据PTE条目中访问权限的限制,检查该VA指令是否合规,如果不合规,则不继续,并抛出异常exception;满足要求后,根据VA的地址段查询页表,保持偏移量(广义)不变,合并物理地址,发送出去。

以上内容就是为大家推荐的内存管理(硬件编程)最佳回答,如果还想搜索其他问题,请收藏本网站或点击搜索更多问题

内容来源于网络仅供参考
二维码

扫一扫关注我们

版权声明:所有来源标注为小樱知识网www.xiaoyin02.com的内容版权均为本站所有,若您需要引用、转载,只需要注明来源及原文链接即可。

本文标题:内存管理(硬件编程)

本文地址:https://www.xiaoyin02.com/shcs/275596.html

相关文章