OS内存管理之页表结构(分层分页,哈希页表)

在前面介绍分页的文章中,采用了一个32位机分页的例子,即把虚拟地址p的前20位作为页码,在页表中查询对应帧码。维护一个进程的页表就需要4M内存空间,该空间应是连续(为了在O(1)时间内查找),但有时候内存碎片较多,并不想在内存中分配4M这么多的连续地址空间,所以可以采用分层页表的方式。

分层页表

继续使用32位系统做例子,为了不使用4M那么多的连续地址空间,可以把一个页表再进行分块,一个页表中有220个条目,我们把他拆成210块,那么每块就有210个条目,这些块就可以分配到不连续的内存空间中,为了能找到每一块,就应该维护一个映射表,里面记录了每一块对应的基地址,称该映射表为外部页表,那么我们拿到一个虚拟地址p时,就先取高10位p[31:22],到外部页表中查找他对应那一块的基地址,再取中间10位p[21:12]作为基地址偏移,来访问记录该虚拟地址的页表,从而得到其对应的帧码,最后将帧码与低12位p[11:0]组合,即为真实物理地址。结构如下图
在这里插入图片描述
当系统为64位时,分层页表就不适用了,因为为了让每一级页表不能太大,就得分多层,因此访问一次物理地址需要访问多次页表,进行多次内存访问,这是不能接受的。对于64位系统,可以使用哈希页表,倒置页表等。

哈希页表

对于64位系统,当我们得到一64位虚拟地址p时,将前几位作为虚拟页码(前几位可能与页大小有关),计算虚拟页码的哈希值(哈希函数可能是取模吧),计算出哈希值后到哈希表对应条目进行查找,哈希表使用链表来解决碰撞问题,每个链表节点有3个内容,虚拟页码,映射的帧码,下一个节点指针。链表处理哈希碰撞的查找属于数据结构基础内容,不细讲了。查找到帧码后将其与页偏移组合,得到真实物理地址。

倒置页表

可以参考这篇文章,介绍很详细

倒排页表(inverted page tabe)

对于倒置页表来说,共享内存实现起来较为困难,书上介绍的是只允许页表包含一个虚拟地址到共享物理地址的映射。并没有理解这句话意思,希望有懂哥在评论区里解释一下,感谢

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
请求式分页是一种基于页面置换算法的内存管理方式。在这种方式中,操作系统不是预先将所有页面映射到物理内存上,而是按需将页面从磁盘中调入内存,并将其映射到物理内存中。这种方式可以有效地利用内存资源,提高内存的利用率。 在请求式分页中,一般采用页来映射虚拟地址和物理地址之间的关系。页通常是一个由操作系统维护的数据结构,用于记录每个虚拟页面和其对应的物理页面之间的映射关系。其中,页项是页中的一个记录,用于记录虚拟页面和物理页面之间的映射关系。 下面是一个请求式分页页结构的示例: ``` typedef struct PageTableEntry { unsigned int present : 1; // 该页面是否在物理内存中 unsigned int modified : 1; // 该页面是否被修改过 unsigned int referenced : 1; // 该页面是否被访问过 unsigned int frame : 29; // 该页面在物理内存中的帧号 unsigned int page : 32; // 该页面在虚拟地址空间中的页号 } PageTableEntry; ``` 在该结构中,`present`字段示该页面是否在物理内存中;`modified`字段示该页面是否被修改过;`referenced`字段示该页面是否被访问过;`frame`字段示该页面在物理内存中的帧号;`page`字段示该页面在虚拟地址空间中的页号。 当操作系统需要访问一个虚拟页面时,它会根据该页面在页中的记录,判断该页面是否已经在物理内存中。如果该页面已经在物理内存中,则直接访问该页面;如果该页面不在物理内存中,则需要将其从磁盘中调入内存,并将其映射到一个物理页面上,然后再访问该页面。在这个过程中,操作系统会根据页面置换算法选择一个物理页面来替换,以便为新的虚拟页面腾出空间。同时,操作系统会更新页中相应页面的状态信息,以便后续的访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值