gpt4 book ai didi

operating-system - 页表如何处理堆栈和堆内存地址?

转载 作者:行者123 更新时间:2023-12-05 05:18:35 24 4
gpt4 key购买 nike

有人告诉我,当 CPU 生成逻辑地址时,它会使用页表转换为物理地址,页表通常是在操作系统的内存空间中分配的连续数组。该数组的索引是虚拟地址的最高位(也称为页码)。

此外,我知道堆地址的逻辑地址较低,而堆栈地址的逻辑地址较高,因为它们的增长方向相反,堆栈从 0xffffffffffffffff 开始。

所以我的问题是,由于堆地址的页码较低,而堆栈地址的页码很高,因此 CPU 生成的页码(或页表中的索引)不是连续的,而是非常高或非常低.那么如何在不创建非常大的页表的情况下使用索引页表。

此外,我们需要保持进程的大小,并在页数大于限制(分配给进程的页/帧数)时引发段错误。如果有效页码不连续,如何做到这一点。

最佳答案

So my question is that since the page number is low for heap addresses but very high for stack addresses, the page number (or the index in the page table) that CPU generates is not contigous but is either very high or very low. Then how is it used to index the page table without creating a very large page table.

CPU 生成的是虚拟内存(虚拟意味着不是真实的),它与实际的物理内存没有任何关系(也称为主内存)。 虚拟内存只不过是一大块虚构的连续内存块。

页表(内存管理单元)的职责是照顾这些虚拟地址并将它们转换为实际的物理地址 你的 RAM(或主内存)。

虚拟页号 i 可以映射到物理内存的 帧号 2000,而下一个 虚拟页号 i + 1可以映射到物理内存的 frame number 10000。这就是 Paging 的美妙之处,因为它允许 non-contiguous memory allocation.

所以来到你的问题:如果页表非常大,那么有一种机制叫做multi-level page tables。 ,可以轻松解决大页表的问题。

Also, we need to maintain the size of the process and raise segmentation fault when the page number is greater than the limit (the number of pages/frames allocated to out process). How is this done if the valid page numbers aren't continous

首先,段错误,发生在您将分段作为非连续内存分配方案时。 分页分段 是两种不同的非连续内存分配方案。无效页码由与每个页表条目关联的有效/无效位处理。

关于operating-system - 页表如何处理堆栈和堆内存地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47502508/

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