虚拟地址与内存管理单元MMU

内存管理单元(MMU)是一种将CPU发出的虚拟地址转换为物理地址的硬件。每个能够运行多用户和多任务操作系统的处理器内核都有一个MMU。

在运行地址翻译之前,MMU应该由以适当的特权级别运行的软件正确配置。

CPU核心用自己的虚拟地址空间执行程序。因此,每次获取指令或CPU执行LOAD/STORE指令时,都会从CPU核心发出虚拟地址。这些虚拟地址被输入到MMU,MMU将它们转换为物理地址。然后,内存控制器使用这些物理地址访问主存(SDRAM)。

0a131e6fe82cfa43a0f12e3efb17b014.jpeg

虚拟地址翻译

当程序运行时,它假设可以访问连续的虚拟内存。 这个虚拟内存空间通常比系统中可用的物理内存(SDRAM)大得多。 当程序访问内存时,它使用虚拟地址。 然后,MMU将这些地址转换为与特定物理内存位置相对应的物理地址。

MMU翻译虚拟内存中连续的虚拟地址块,而不是单个内存位置。 翻译单个内存位置效率极低,因为每次内存访问都需要单独的翻译。 通过一次翻译整个数据块的虚拟地址,MMU减少了地址转换相关的开销。

 虚拟内存块称为页面page。 MMU通常通过将虚拟地址空间划分为大小相等的page来工作。 与单个内存位置相比,page通常相对较大(例如4 kB)。 这种粒度在高效的地址转换和内存管理之间取得了平衡。 分页有几个好处:

1. 效率:如果每个内存位置单独翻译,管理和存储翻译映射的开销会高得多。

2. 空间局部性:程序通常倾向于访问彼此附近的内存位置。 MMU通过翻译整个页面来利用这种空间位置来提高性能。 一旦访问了一个页面,可能会在同一页面内进行后续内存访问,从而最大限度地减少对额外翻译的需求。

fa41243986448f759701fbb9b3ef1363.jpeg

3.硬件实现:为单个内存位置实现地址转换将需要更复杂的硬件,并为每次内存访问产生更高的延迟。翻译整个页面允许MMU使用更简单的结构,从而实现更快、更高效的地址转换。

总体而言,在page级别而不是每个地址翻译虚拟地址,在效率和硬件复杂性之间提供了良好的平衡,使其成为现代计算机系统的首选方法。

分页的基本想法很简单,虚拟内存被划分为大小相等的块,称为page。物理内存也分为大小相等的块,称为page frames。两者大小相同,典型大小为4 kB。

4f97798b63dbbb7872c77e5b33339c26.jpeg

简单来说就是,offset保持不变,从虚拟地址的page翻译到物理地址的frame

页面偏移字段offset中的位数决定了页面大小。 虚拟地址空间中的page数量不需要与主内存中的frame数量匹配。 page越多,程序就会产生它可以使用的未绑定内存的错觉。 

事实上,主存仅包含属于程序的所有页面的一部分。 其他页面存储在磁盘上,以节省主内存中的空间。 当程序尝试访问不在主存中的页面时,会发生所谓的页面故障pagefault。 页面故障将触发中断,中断服务例程将把请求的页面从存储(HDD或SSD)传输到主存中。

类似于cache,page在主存和磁盘中的替换也设计一些替换策略,尽量剔除一些不常用的页面。因为主存和辅助存储之间的传输非常缓慢,pagefault需要数百万个CPU周期才能处理。


虚拟内存系统中页面大小的选择可能会显著影响系统性能。较大的页面大小通常会导致更少的页面故障,因为每个页面都包含更多的内存位置。随着页面的扩大,后续内存访问更有可能位于同一页面内,从而减少页面故障的数量。相反,较小的页面大小可以更高效地利用内存。对于较小的页面,操作系统可以更精确地容纳较小的内存分配,减少内存碎片。

内存碎片是指由于在固定大小的页面中分配内存而浪费的空间,这些内存可能无法被其中存储的数据充分利用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值