《操作系统导论》第18章总结 分页:介绍

文章介绍了分段和分页两种内存管理方法。分段基于代码段、堆栈等,但可能导致内部碎片;分页则将内存划分为固定大小的页,减少了外部碎片,通过页表进行虚拟地址到物理地址的转换,页表项包含有效位、保护位等信息,确保内存访问的安全和效率。
摘要由CSDN通过智能技术生成

前情提要

前面几章介绍了分段的概念,将一个进程分为代码段、堆段和栈段,然后通过硬件的支持基址寄存器和界限寄存器来实现虚拟地址和物理地址之间的映射。
但是分段有一些明显的缺点:

  • 就是内存分配时,要考虑堆和栈的增长方向,所以会造成中间的内存域没有得到充分利用,造成内部碎片的问题。
  • 大量的内存分配并不是连续的,所以当剩余的连续内存不能够满足进程的需求时,进程就是申请内存失败,但是实际上分散的内存是足够的,所以会造成外部碎片的问题。

分页

主要是搞清楚几个概念:

什么是页?

与分段不同,分页不考虑进程的代码段和堆栈,分页将每个进程划分成固定大小的单元,每个单元就称之为一个页。
与页相对应的就是页帧的概念。

什么是页帧(PF)?

上面的页划分的是虚拟内存,页帧则是将实际的物理内存划分成一个个的固定大小的槽块,每个槽块就称之为一个页帧。虚拟内存中的页是映射到物理内存的页帧,所以页帧和页的大小应该是相等的。

什么是页表(PT)?

页表是操作系统为每个进程维护的一个数据结构,用来记录虚拟内存和物理内存之间的映射关系,也就是虚拟内存页记录在物理内存中的什么位置(页帧)。

如何进行虚拟地址转换?

要进行虚拟地址转换,首先将虚拟地址转换为两个部分:VPN,Offset.
VPN是虚拟页面号,offset代表偏移量,也就是该页面的第几个字节。
举个例子:
比如操作系统虚拟化了一个64B的虚拟地址空间,并将其分成4个页,每个页也就是16个字节。表示该地址空间则需要6个二进制位( 2 6 = 64 2^6=64 26=64),四个页需要用2个二进制位来表示,剩余的4个二进制位来表示偏移量。
此时操作系统找到VPN,并检索页表,找到该VPN所对应的页表项,从而找到对应的物理页帧。

什么是页表项(PTE)?

下面的是X86的页表项
在这里插入图片描述
图片来源于《操作系统导论》

显然,上面的概念只足够操作系统用于虚拟化内存和地址转换,但是没法保证每个进程正在做的事情是合法的。这就是页表项存在的价值。
页表项的内容跟随不同的硬件是不同的,但是目的都是一样的。其中:

  • 有效位:用于表示特定地址的转换是否有效。只有该进程正在使用的内存是有效的,没有使用的内存被标记为无效。
  • 保护位:用于表示该页所表示的内存的操作权限,是否允许写入、读出和执行。
  • 存在位:表示该页是在内存还是在磁盘上。
    比如上面的图片中,P表示存在位,R/W表示读写权限,U/S表示用户级别等等

分页的优点

相比分段的策略,分页不会导致外部碎片的问题,因为分页将内存分成固定大小的单元,并且支持稀疏存储,也就是每个进程的内存是分散的。
不管是分段还是分页,目的都是为了操作系统更加方便的进行内存管理,从而提高系统的性能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值