分页内存管理——虚拟地址到物理地址的转换

前言:

         此篇博客内容在于着重帮助读者明白在分页内存管理下,虚拟地址和物理地址转换计算是怎么进行的。

         有关分页内存管理的其他知识请事先参阅有关资料。^_^

在计算之前需要了解如下知识:

  ①

 对每个程序而言,就好像自己独占了内存空间从0到极限的计算机。虚拟地址都是以0开始到某个上限结束。

这是因为某个程序在何种硬件设备的机器上运行并不能事先确定(因为写出来的程序一般都会在很多计算

 机上运行,而每台计算机的内存占用情况事先肯定无法知晓),操作系统自然不可能对症下药地发出对于某

 台机器的物理主存地址。因此,指令里面的地址是程序空间(虚拟空间)的虚拟地址(程序地址)。所以当

 程序真正运行起来的时候,每个虚拟地址必然要对应着一个物理地址(实际存在)。既然要对应,那就比如存

在某种对应机制。

  ②

分页内存管理机制将虚拟内存和物理内存都分成大小一样大的部分,我们称为页,然后按页进行内存分配,

一般页的大小有4KB、8KB、16KB。在该管理机制下内存分配单位化而且不需要空闲连续在一起即可使用

(比如第四页和第8页都空闲则可以组合起来给一个程序使用,但在分页内存管理发明之前是不可以的,因

 为两段空间不连续,至于为什么~~~~~~此处不予解释,需要了解的同学可以参阅相关资料。)

虚拟地址的页号表示和物理地址页号表示是从0开始的。

(比如虚拟地址的第1页前面还有第0页,这个对理解计算非常重要)。

理解了上面几点知识就可以尝试理解如下图表:(了解页表是什么即可。)

通过页表我们就可以发现,每个虚拟页面号都对应着一个物理页面号,比如虚拟页面号是1,查询该表

我们就可以知晓虚拟页面号1对应的物理页面号在哪里。之所以有这个表存在,就是因为我们使用的物理

内存是不连续的(参考知识点②)。

现在直接上题:

      

题目给出了虚拟地址:0010 0000 0000 0100

第一步由页面大小为4KB可以得出页内偏移值为12位,也就是0010 0000 0000 0100,前面四位为页面号,

即 0010 0000 0000 0100,由此我们可以知道虚拟页面为2。

可能到这里有不少读者会困惑为什么是这样子计算,我以十进制数做说明。

假设一个页面大小是10000KB,已知某个虚拟地址为26000,我们就可以知道这个地址是  虚拟页面2的起始地址+6000  

后的一个地址。(虚拟页面0、虚拟页面1对应了前20000个地址),同理二进制数也这么看。

此处还要注意的一点是:1KB=2^10 B=1024B  而不是1KB=1000B。

第二步,知道了虚拟地址对应的虚拟页面是2后我们就可以查询页表,发现虚拟页面2对应的物理页面是110,

所以我们可以计算出所求虚拟地址对应的物理地址为:

110 0000 0000 0000(页面110的物理首地址)+100(偏移量)=110 0000 0000 0100

&补充题目(一道笔试题)

逻辑地址0对应的页为0 查询页表可知虚拟页0对应的物理页为2,

所以物理页的首地址是2×4×2^10=8192

再加上偏移量0 得出物理地址为8192+0=8192 所以选A。

注明:

  物理地址是从0开始标注的 ,

  假如一个页大小为16,

  那么第0页地址为0~15

  所以第1页首地址为16,也就是1×16=16

  所以第2页首地址为32,也就是2×16=32,

  以此类推。

         

猜你喜欢

转载自blog.csdn.net/qq_40780910/article/details/81570439