gpt4 book ai didi

memory - 什么是分页?

转载 作者:行者123 更新时间:2023-12-04 13:24:41 24 4
gpt4 key购买 nike

此处在页面#6中说明了分页:

http://www.cs.ucc.ie/~grigoras/CS2506/Lecture_6.pdf

在我的演讲笔记中,但我一生无法理解。我知道这是一种将虚拟地址转换为物理地址的方法。因此,磁盘上的虚拟地址被分成2 ^ k的块。在这之后我真的很困惑。有人可以简单地向我解释一下吗?

最佳答案

如前所述,分页是一种虚拟内存。要回答@John Curtsy提出的问题:它通常与虚拟内存分开讨论,因为还有其他类型的虚拟内存,尽管(到目前为止)分页是最常见的。

分页虚拟内存非常简单:将所有物理内存分成多个块,每个块的大小均相等(尽管实际上选择两种或三种大小是相当普遍的)。使块大小相等使得它们可以互换。

然后您有地址。首先将每个地址分成两部分。一个是页面内的偏移量。通常,您对该部分使用最低有效位。如果使用(比如说)4K页面,则需要12位的偏移量。使用(比如说)32位地址空间,则可以再保留20位。

从那里开始,事情实际上比最初看起来要简单得多。基本上,您将构建一个小的“描述符”来描述内存的每一页。这将具有一个线性地址(客户端应用程序用于寻址该内存的地址),该内存的物理地址以及一个Present位。 (至少通常是)其他一些事情,例如权限,指示该页面中的数据是否可以读取,写入,执行等。

然后,当客户端代码使用一个地址时,CPU首先将与该地址其余部分的页偏移量分解。然后,它将获取其余的线性地址,并浏览页面描述符以查找与该线性地址一起的物理地址。然后,为了寻址物理内存,它使用物理地址的高20位和线性地址的低12位,它们一起形成了实际的物理地址,该地址在处理器引脚上输出并从存储芯片中获取数据。 。

现在,我们进入获得“真实”虚拟内存的部分。当程序使用的内存超过实际可用内存时,操作系统将获取其中一些描述符的数据,并将其写出到磁盘驱动器中。然后,清除该内存页面的“Present”位。内存的物理页面现在已释放,用于其他目的。

当客户端程序尝试引用该内存时,CPU会检查Present位是否已设置。如果不是,则CPU引发异常。发生这种情况时,CPU会像上面那样释放一块物理内存,从磁盘读回当前页面的数据,并用当前所在物理页面的地址填充页面描述符。完成所有这些操作后,它将从异常中返回,并且CPU重新开始执行导致异常开始的指令-除非现在将Present位设置为1,所以可以使用内存。

您可能需要了解一个详细信息:页描述符通常安排在页表中,(重要的部分)对于系统中的每个进程(对于OS内核,通常都有一组单独的页表)本身)。每个进程具有单独的页表意味着每个进程可以使用相同的线性地址集,但是根据需要可以将它们映射到不同的物理地址集。您还可以通过仅创建两个包含相同物理地址的独立页面描述符(每个进程一个)来将同一物理内存映射到多个进程。大多数操作系统都使用此功能,例如,如果您正在运行同一个程序的两个或三个副本,则它实际上在内存中将只有该程序的可执行代码的一个副本-但它将只有两个或三个指向同一代码的页面描述符集,因此它们所有人都可以使用它,而无需为每个代码制作单独的副本。

当然,我正在简化很多工作-已经写了很多关于虚拟内存的完整(通常是相当大的)书籍。机器之间也存在相当大的差异,其中添加了各种装饰,对参数进行了较小的更改(例如,页面是4K还是8K),等等。尽管如此,这至少是对所发生事情的核心的一般了解(并且它仍然处于足够高的水平,可以等效地应用于ARM,x86,MIPS,SPARC等)。

关于memory - 什么是分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5971766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com