将逻辑(虚拟)地址转换为物理地址

JAN*_*JAN 0 memory-management process virtual-memory

我有如下页表process1:

在此输入图像描述

假设寻呼系统使用16bit地址和页面大小4k

我想将逻辑地址16000转换为物理地址.

我对这个话题有点新意,所以对我很轻松:

部分解决方案:地址16000适合3页表中的单元格编号,所以我想我需要处理该单元格及其存储的框架 - 2.

我现在如何找到偏移量和物理地址?

谢谢

Dee*_*ght 6

在您的情况下,进程1当前可以访问最多4*4k字节的虚拟内存.
通常,进程可以访问高达4gb的虚拟内存(具体取决于实现).
现在,您提供的表将虚拟内存映射到实际物理地址(在RAM上).页表的每个条目都将4k内存从虚拟空间映射到物理空间.
因此,地址16000对应于页表的第3个条目的物理地址被映射到从中开始的物理地址8192(3*4096) till 12288 (8192+4096).

16000 mod 4096 =  3712(offset).
Run Code Online (Sandbox Code Playgroud)

在虚拟页面2中的3172字节偏移处,即在物理页面3中的偏移量3172处(在地址8192处),您找到对应于地址16000的数据.
所有这些映射由MMU(存储器管理单元)为每个映射完成.地址访问过程.
理解这个概念的好链接就在这里.

干杯:)