内存管理 - 虚拟地址到物理地址的转换

内存管理 - 虚拟地址到物理地址的转换

我需要将逻辑(虚拟)地址转换为物理地址的正确方法,我有以下问题:

给定以下页表:

在此处输入图片描述

已知虚拟页面和物理框架都是 1k 字节,那么下列每个虚拟地址用十六进制编码后对应的内存地址是多少:142A 和 0AF1?

我是这样解决的,但我不知道它是否正确:

142A(十六进制)=5162(十进制)

5162/1024=5(页码)<----> 页表中的第 1 帧

5162mod1024=42(偏移)

因此 142A 对应的物理地址 = 1(物理)+42(偏移量)或(1*1024+42)

那么这是正确的吗?

亲切的问候

答案1

1Kbytes = 1024字节。1024 10 = 0400 16

  • 第 0 页 = 0000 16,第 1 页 = 0400 16,第 2 页 = 0800 16,第 3 页 = 0C00 16,第 4 页 = 1000 16,第 5 页 = 1400 16

    • 因此,142A 16在第 5 页......
  • 逻辑页面 5 指向物理页面 1。每页为 0400 16字节。物理​​页面 1 从 0400 16开始(页面 0 从 0000 16开始)。

  • 142A 16距第 5 页起始处 1400 16处还有 2A 16 个字节……

    • 因此,您将 2A 16添加到物理页面 1 的起始地址 0400 16。因此逻辑地址 142A 16实际上是物理地址 042A 16

    • 任何 1400 16到 17FF 16在逻辑上都与 0400 16到 07FF 16在物理上相对应,等等。


这是您可以制作的表格类型,可以帮助您。全部基于 0400 16的倍数,因为这是页面大小。

Logical Page Number   Logical Page Address  ->  Physical Page Number   Physical Page Address
         0               0x0000 - 0x03FF                  4                0x1000 - 0x13FF                                                                            
         1               0x0400 - 0x07FF                  6                0x1800 - 0x1BFF                                                                            
         2               0x0800 - 0x0BFF                  8                0x2000 - 0x03FF                                                                            
         3               0x0C00 - 0x0FFF                  9                0x2400 - 0x27FF                                                                            
         4               0x1000 - 0x13FF                  12               0x3000 - 0x33FF                                                                            
         5               0x1400 - 0x17FF                  1                0x0400 - 0x07FF                                                                            

相关内容