当前位置:首页 > 内存 > 正文

页表是内存管理的重要数据结构吗

  • 内存
  • 2024-05-11 16:57:21
  • 2220

一、在基本分页存储管理中,页表所起的作用主要是实现()在基本的分页存储管理中,页表的主要作用是提供逻辑到物理地址的映射。
让我们更详细地解释这个概念。在计算机存储系统中,物理内存通常被划分为固定大小的块(称为页),以提高内存使用效率和管理灵活性。相应地,程序的逻辑地址空间也被划分为与物理页大小相同的块。这些块称为页框或逻辑页。当程序运行时,其代码和数据被分配给这些逻辑页。
但是,程序在编写和编译时并不知道它们将在物理内存中的确切位置运行。因此,当程序被加载到内存中准备执行时,操作系统必须有一种机制将程序的逻辑地址转换为实际的物理地址。这个机制就是页表。
页表是通常存储在内存中并由操作系统维护的数据结构。它包含从程序逻辑页到物理页的映射信息。具体地,页表中的每个条目指示与逻辑页对应的物理页的地址(或者指示该页不在存储器中)。
当程序尝试访问逻辑地址时,处理器(CPU)使用该地址的高位部分来索引页表以查找相应的条目。然后处理器使用页表中的信息修改地址的低部分以获得正确的物理地址。然后处理器可以访问物理内存中的数据。
例如,考虑一个具有两个逻辑页面的程序,一个包含代码,一个包含数据。每次执行程序时,这些页面在物理内存中的位置都会发生变化。通过页表,操作系统可以在程序运行时动态管理这些页的物理位置,而程序本身只需要使用逻辑地址来访问代码和数据。
综上所述,页表在基本的分页存储管理中发挥着重要作用,从程序的角度提供了逻辑地址到实际物理地址的高效映射,提供了便捷的方法。支持程序执行所需的地址转换。
二、linux为什么主要采用分页机制来实现虚拟存储管理1分页机制
在虚拟内存中,页表是映射表的概念,即进程可以理解的线性地址(线性地址)到内存上物理地址(物理地址)的映射。,这个页表必须驻留在内存中,以应对频繁的查询映射需求(事实上,支持VM的现代处理器都有“一个称为TLB的硬件级页表缓存组件,本文不会讨论它”)。
1.1为什么要使用多级页表来进行映射
但是为什么要使用多级页表来进行映射呢?
用于将虚拟地址映射到物理地址的数据地址结构称为页表。实现两个地址空间关联的最简单方法是使用一个数组,为虚拟地址空间的每一页分配一个数组元素。该表指向与其关联的页框,但是this.这会导致一个问题。例如,IA-32架构使用4KB页面,如果虚拟地址空间为4GB,则需要包含100万个条目的页表。这个问题在64位架构下会更严重。每个进程都需要自己的页表,这就导致需要使用大量的系统内存来保存页表,想象一个典型的32位X86系统,它的内存用户空间(用户空间)大小为3GB,而典型的页表项(pagetableentry,pte)的大小为4字节,每个页(page)的大小为4KB,因此这3G空间总共有(3G/4k=)786432个页。每页需要一个pte来保存地图信息,总共需要786432个pte!
如何存储这些信息?直观的做法是用数组来存储,这样每个页可以存储(4k/4=)1K,这样总共需要(786432/1k=)768个连续的物理页(physicalpage)。另外,这只是一个过程。如果要存储所有N个进程,这个数字必须乘以N!这是一个巨大的数字。即使内存可以提供这么大的空间,你也需要找到768个连续的物理空间。系统中运行的页面如果一段时间后变得碎片化也是不现实的。
为了减小页表的大小并允许忽略不必要的区域,计算机体系结构会将虚拟地址分为几部分。同时,大部分虚拟地址空间没有被使用,所以。页面与页框没有关联,那么可以使用功能相同但内存占用少得多的模板:多级页表
但是又出现了一个新问题,页表是哪一级合适吗?
232位系统中1,2级页表
从80386开始,Intel处理器的分页单元是页表4KB,32位地址空间分为3个parts
单位
描述
PagesDirectory目录表的最高10位
pagemidtable表的中间10位
页内最低12位偏移位
即页表分为页两部分:目录表Directory和页中间表Tabl
此时进行线性地址转换分两步。
第一步压二级转换表(页目录表和页中间表),最终找到地址所在的页框。
第二步,根据在offset上,找到其所在页框内的偏移量对应的物理地址
使用这个二级页表可以高效。如果使用简单的顶级页表,则减少每个进程页表所需的RAM量。需要220个页表。假设每个元素是4个B,总共220个?每个进程需要4B=4MB页表。当然,我们不需要映射整个线性地址空间(the)。32位机器上的线性地址空间为4GB)。内核通常只请求进程实际使用的虚拟内存区域的页表,以减少内存使用。
1./>通常情况下,对于32位系统来说,两级页表就足够了,但对于64位系统计算机来说,这就远远不够了。
首先,我们假设一个标准页的大小为。4KB。由于1KB涵盖210个地址范围,而4KB涵盖212个地址范围,因此偏移字段需要12位,这为线性寻址表分配了64-12=52位。页目录表目录。如果我们现在决定只使用64位中的48位来寻址(这个限制其实已经足够了,2^48=256TB,可以达到256TB的地址空间)。剩余的48-12=36位)。下面分配给表和目录字段。即使我们现在决定为这两个字段中的每一个保留18位,那么每个进程的页目录和页表都包含218个条目,或者超过256,000个条目。
因此,所有64位处理器的硬件分页系统都使用额外的分页级别。使用的级别取决于处理器类型
平台名称
页面大小
用于寻址的位数
分页级别数
线性地址层次
alpha8KB43310+10+10+13
ia644KB3939+9+9+12
ppc644KB41310+10+9+12
sh644KB41310+10+9+12
x86_644KB4849+9+9+9+12