【发布时间】:2020-03-26 03:27:59
【问题描述】:
我正在尝试了解page layouts according to these notes,刚刚开始学习操作系统,所以这有点让我头疼。具体来说是这样的:
在 linux 中有 4 个“级别”的页表。一个表由一个 pXX_t 类型的条目数组组成,包装了一个 pXXval_t:
- 页面全局目录 (PGD) -
pgd_t/pgdval_t。- 页面上层目录 (PUD) -
pud_t/pudval_t。- 页面中间目录 (PMD) -
pmd_t/pmdval_t。- 页表条目目录 (PTE) -
pte_t/pteval_t。这些类型只是依赖于基本架构的类型的 typedef 包装器,将所有 x86-64 类型聚集在一起......
然后他们画这个:
6 5 4 3 2 1
4321098765432109876543210987654321098765432109876543210987654321
0000000000000000000000000000000000000000101100010111000000010000
[ RESERVED ][ PGD ][ PUD ][ PMD ][ PTE ][ OFFSET ]
| | | |-PAGE_SHIFT
| | |-----------PMD_SHIFT
| |--------------------PUD_SHIFT
|---------------------------PGDIR_SHIFT
它仍然在我的脑海中,尤其是所有的缩写等等。
能否用稍微温和的术语解释一下我们这里到底有什么?我想在 JS 操作系统中实现虚拟内存分页,以模拟一种现实的操作系统。我想知道正在使用哪些结构以及它们在内存本身中的实际外观(或者如果通过汇编完成,则更易于使用来解释/教授)。
所以现在我正试图弄清楚(在 JavaScript 中)如何使用 1 数组 来管理多个进程的所有内存。没有作弊和使用其他 JavaScript 数组或对象或其他任何东西,只有 1 个数组,然后是整数。我一直试图弄清楚如何在不使用数组的情况下在内存中创建一个数组(一片内存)哈哈。然后为了让它更复杂,我需要在这个 1 数组中创建页面,这些页面映射到每个进程允许的内存部分。我试图详细弄清楚如何做到这一点,这些笔记是我最接近实际看到的,但它们有点太详细了。想知道是否可以帮助简化解释,并帮助描绘如何在单个数组中创建页面/进程映射。解释这个 Linux 系统将有助于形象化。
【问题讨论】:
-
This 似乎很有帮助,但也有点详细。
标签: linux memory process operating-system virtual-memory