操作系统 | 内存管理——页表、页表项、页目录、多级页表

操作系统 | 内存管理——页表、页表项、页目录、多级页表一 页表 页表项页表由多个页表项组成 即页表中每一行的就是一个页表项

大家好,欢迎来到IT知识分享网。

零、页面与页框的区别

操作系统 | 内存管理——页表、页表项、页目录、多级页表

 

一、页表、页表项

页表由多个页表项组成,即页表中每一行的就是一个页表项。

页表项中记录的信息:

  •     页框号:记录虚页面对应的具体哪个物理页面
  •     有效位:标识该页表项对应的虚页面有没有读进内存,否则在磁盘
  •     访问位:引用位,标识该页面有没有被访问过
  •     修改位:此页面在内存中有没有被修改过,如果被修改过,将来是要被持久化到磁盘上的,该标志位就是这个目的
  •     保护位:标识该页面的读写等权限

页表项一般是由硬件设计的,因为地址转换时大多数是由硬件完成的。
 


二、页目录、多级目录

引出页目录:

对于32位虚拟地址空间,假设页面大小为4K,页表项大小为4字节:

一个进程有 4G/4K = 2^20个页面
因为一个页面需要一个页表项来对应,所以,进程的页表项个数也为2^20个
不难得出该进程的页表占用了 2^20 * 4 / 4K = 1024个页面的大小

对于64位的虚拟地址空间来讲,页表规模更大,理论值32000TB

其实,页表页就是存放进程页表的页面,他属于进程的一部分,页表也是以页为基本存储单位的

所以,为了内存的高效使用,一般都不会将这么大规模的页表页存放在连续的内存上,所以,我们引入了页表页的地址索引表,页目录。提供一个目录,这样就变成了一个二维的结构,甚至现在很多计算机有多维的页表结构,也叫多级页表。
 

二级页表的访问过程

当一个进程上CPU运行时,需要将页目录的起始地址存放在CR3寄存器中(x86体系结构)

还是32位的虚拟地址:

操作系统 | 内存管理——页表、页表项、页目录、多级页表

  1. 通过CR3寄存器,我们得到了页目录的地址
  2. 然后,根据虚拟地址的前10位,标识页目录中的偏移量,该偏移量对应的地址,保存的是页表的地址
  3. 得到页表地址,根据页表偏移,再得到页表项地址,那么我们就可以看到对应的是哪个物理页面
  4. 最后,根据物理页面的编号,访问物理页面,加上页内的偏移,就可以找到对应的数据或者指令。
     

整个过程,通过地址拼接,就可以得到物理地址,2级页表,最大可以标识4G的虚拟地址空间。

Core I7的4级页表结构:

操作系统 | 内存管理——页表、页表项、页目录、多级页表

整个过程由MMU完成:

CPU取到虚拟地址-> MMU查页目录->MMU查页表->MMU得到页表项->MMU得到物理页面编号->MMU得到物理地址。


原文来自于

OS内存管理之页表,页表项以及页目录_KingOfMyHeart的博客-CSDN博客_页目录和页表

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/150945.html

(0)
上一篇 2025-03-16 14:20
下一篇 2025-03-16 14:25

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信