【发布时间】:2018-10-09 23:42:39
【问题描述】:
如果计算机系统的主内存为1mb,虚拟地址空间为16mb,而磁盘块大小为1kb。内存管理单元如何将虚拟地址映射到物理地址?
【问题讨论】:
标签: memory-management operating-system virtual-address-space
如果计算机系统的主内存为1mb,虚拟地址空间为16mb,而磁盘块大小为1kb。内存管理单元如何将虚拟地址映射到物理地址?
【问题讨论】:
标签: memory-management operating-system virtual-address-space
我假设您打算问“MMU 如何将虚拟内存映射到物理内存”(如您的问题描述中所示)。
首先,虚拟内存由操作系统管理。 MMU 只提供硬件机制来利用它。
操作系统将为每个单独的进程保留一张虚拟地址 -> 物理地址的映射。
例如,如果程序使用虚拟页面 [0, 1, 2, 3],操作系统可以将这些页面映射为 [64, 128, 256, 512] 的物理页面。
由于虚拟地址空间大于物理地址空间,如果物理内存不能容纳所有虚拟内存,则并非所有虚拟内存都会随时映射到物理内存。因此,一些数据将被换出到磁盘,因此不会出现在物理内存中。
例如,让我们通过假设虚拟内存有 8 页来简化您的情况,但物理内存只能保存 4 页数据。如果进程在虚拟页面 [0,1,2,3,4] 上有数据,显然物理内存无法容纳所有 5 个页面。因此其中一个虚拟页面将被放入磁盘中,系统的内存映射将类似于 [0->2, 1->1, 2->3, 4->0],在这种情况下是虚拟页面3 将在磁盘中换出。
只有当程序需要数据时,那些被换出的页面才会被操作系统带回主内存,并且之前存在于主内存中的页面之一需要被换出以腾出空间。确定换出哪个页面的算法是另一个主题(例如,LRU、时钟算法)。
实际上内存系统比这个场景更复杂,因为现代操作系统允许系统中运行多个进程,而操作系统本身使用其他技术(例如设置阈值来触发页面交换)来使内存系统更高效.
【讨论】:
内存管理使用将逻辑地址转换为物理地址。
它使用操作系统定义的 PAGE TABLE 进行翻译。页表的格式因系统而异,处理器至少有三种主要的方法来定义它们。通常,具有一个或多个特权寄存器的处理器指向当前进程的页表。这些寄存器通常作为引入新进程的上下文更改的一部分加载。
在简单的情况下,页表只是一个包含逻辑地址和物理地址之间映射的数组。地址的一些高位用作页表的索引。对应的页表项指定了逻辑页映射到的物理页框。
地址的一些低位作为物理页框的偏移量。
操作系统以 MMU 期望的格式维护页表。MMU 透明地在逻辑地址和物理地址之间进行转换。
磁盘块大小与此转换无关。
【讨论】: