Memory 将虚拟地址转换为物理地址

Memory 将虚拟地址转换为物理地址,memory,memory-management,operating-system,virtual,Memory,Memory Management,Operating System,Virtual,下表适用于具有16位虚拟和物理地址以及4096字节页面的系统。当页面被引用时,引用位设置为1。线程周期性地将参考位的所有值归零。所有数字都以十进制形式提供。 我想将以下虚拟地址(十六进制)转换为等效的物理地址。我还想为页面表中的适当条目设置参考位 •0xE12C •0x3A9D 0x3A9D = 0011 1010 1001 1101 0011 = 3 PageTable[3] = 10 10 in decimal = 1010 in binary 1010 1010 1001 1101 in

下表适用于具有16位虚拟和物理地址以及4096字节页面的系统。当页面被引用时,引用位设置为1。线程周期性地将参考位的所有值归零。所有数字都以十进制形式提供。

我想将以下虚拟地址(十六进制)转换为等效的物理地址。我还想为页面表中的适当条目设置参考位

0xE12C

0x3A9D

0x3A9D = 0011 1010 1001 1101
0011 = 3
PageTable[3] = 10
10 in decimal = 1010 in binary
1010 1010 1001 1101 in binary = 0xAA9D
0xA9D9

0x7001

0xACA1

我知道答案很简单,但我想知道如何才能获得这些答案:

0xE12C → 0x312C
0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1

我找到并尝试了,但没有多大帮助。

要将虚拟地址转换为物理地址(仅适用于此作业问题),我们需要知道2件事:

  • 页面大小
  • 虚拟地址的位数
在本例中:16位系统4KB页面大小物理内存大小64KB

首先,我们需要确定作为页内偏移量所需的位数
log2(页面大小)
=
log2(4096)
=12偏移量的位

在虚拟地址的16位中,12位表示偏移量,这意味着每个进程都有
2^4=16
虚拟页面。页面表中的每个条目都存储相应的页面框架。例如:

现在让我们翻译

首先,为了便于工作,让我们将
0xE12C
转换为
二进制

0xE12C = (1110 0001 0010 1100) in base 2
1110 = 14 in decimal
Entry 14 in P.T => Page frame 3.
让我们将其连接到12个偏移位

Answer: (0011 0001 0010 1100) = 0x312C
另一个示例:
0x3A9D

0x3A9D = 0011 1010 1001 1101
0011 = 3
PageTable[3] = 10
10 in decimal = 1010 in binary
1010 1010 1001 1101 in binary = 0xAA9D

虚拟地址的长度为16位。
因此,虚拟地址空间中有2^16个地址。
页面大小为4KB(页面中有4K(4*(2^10))个地址),因此页数为(2^16)/(2^12)=2^4。
要寻址每页,需要4位。
虚拟地址中最重要的4位表示所引用的页码,其余12位表示页偏移量。

需要记住的一点是页面大小(在虚拟地址空间中)始终与主内存中的帧大小相同。因此,物理地址中的最后12位将保持与虚拟地址相同

要获得主存储器中的帧地址,只需使用前4位。
示例:考虑虚拟地址0xACA1

这里,ACA1中的A表示页码(10),相应的帧号为5(0101),因此结果物理地址为→ 0x5CA1。

要帮助您解决此问题,我们需要正确了解详细信息:

  • 16位虚拟地址空间=2^16=65536地址空间
  • 16位物理地址空间=2^16=65536地址空间
  • 4096字节的页面大小决定偏移量,即Log(4096)/Log(2)=12位。这意味着,页面大小为2^12
  • 根据@Akash Mahapatra,虚拟地址的偏移量直接映射到物理地址的偏移量
  • 因此,我们现在有:

    • 2^16(16位)表示虚拟地址-2^12(12位)表示偏移量=4位表示页面,或者更确切地说是可用页面总数
    • 我不会重复物理计算,因为它是相同的数字
    • 2^4(4位)表示页面=16,这与上面的表条目数相关
    我们快到了。。。耐心点!:)

    以十六进制表示法表示的内存地址0xE12C也被称为包含16位地址。(因为问题中已经说明了。)

    我们现在就把地址砍掉

    我们首先从信息中删除“0x”

    我们可以将E12C转换为二进制表示法,比如@Tony Tannonus,但我将使用一条捷径

    我只是使用一个比率。地址用上面的4个字符表示,因为16/4=4,我可以将第一个字母定义为虚拟地址,而其他3个是偏移地址

    有了十六进制格式的信息“E”,我需要转换成十进制=14。然后我看了一下您提供的表,发现了页面框架“3”。页面第3帧以十进制格式标注,然后需要将其转换回十六进制格式。。。嗯!。。。哪一个是3

    因此,可以在物理内存上的0x312C处找到虚拟内存位置0xE12C的物理地址映射

    然后返回表,并参考参考位列,在第14行加上“1”

    对这些应用相同的概念-

    0x3A9D → 0xAA9D
    0xA9D9 → 0x59D9
    0x7001 → 0xF001
    0xACA1 → 0x5CA1
    
    如果您注意到,最后3位数字是相同的(这决定了偏移量)。 4位数字中的第1位根据下表进行映射:

    table entry 3 -> page frame 10 -> hex notation A
    table entry A (10) -> page frame 5 -> hex notation 5
    table entry 7 -> page frame 15 -> hex notation F
    table entry A (10) -> page frame 5 -> hex notation 5
    
    希望这个解释能帮助你和像我这样的人!:)