问题标签 [page-tables]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
713 浏览

linux-kernel - 驱动mmap操作页表创建

我试图了解驱动程序中的 mmap 操作。我知道我们为什么要做 mmap。我对以下两种 mmap 实现感到困惑:

第一个例子是一个简单的实现,它不修改页表......但第二个例子。

那么第二种方法的基本原理是什么。第一个示例也可以正常工作。

0 投票
1 回答
338 浏览

virtual-memory - 为什么有一个大页表不好?

在我的讲师关于虚拟内存的幻灯片中,他写道,拥有大页表是一个问题,为什么会这样?

0 投票
1 回答
152 浏览

memory - 如果只使用一半,多级页表是否存储整个页表?

想象一下,我有一个包含 1024 个条目的 2 级页表。考虑到只使用了 3 个 2 级页表,其中一个是半空的,所以我有一个包含三个条目的顶级页表。

现在,我的页表系统在我的 RAM 中占用了多少内存?

我必须存储每页 4 页1024 * 32bits = 4kBytes,还是只允许存储我使用的内容?(3 + 1024 * 2 + 1024 * (1/2)) * 32只有位?

0 投票
1 回答
1143 浏览

memory - 计算 2 级页表的大小

所以我有页大小4kb32位地址 CPU 和一个实现的 2 级页表。

我想存储1081页,所以我需要:

  1. 1024二级页表中的条目
  2. 57另一个二级页表中的条目
  3. 2包含条目的顶级页表。

现在,我需要在内存中存储这些页表的全部大小还是它们占用的内容?

  1. 在第一种情况下,我会使用4bytes * 2 + 4bytes * 1024 + 4bytes * 57
  2. 否则会是1 * 4bytes * 1024 + 2 * 4bytes * 1024

有什么提示吗?

0 投票
1 回答
263 浏览

virtual-address-space - 计算每个级别的 2 级页表位和页表项

  1. 一级页表正好占用一页内存
  2. 32位虚拟地址
  3. 页面大小 8kb
  4. PTE 4 字节

每个字段有多少位?
1 级表中有多少条目?
2 级表中有多少条目?
2级页表映射多少页?

我尝试得到 13 的偏移量和 11 的水平 1 和 8 的水平 2。不知道如何解决其余的问题。

0 投票
1 回答
6720 浏览

operating-system - 如何确定页表中有多少条目

假设我的系统使用 32 位地址空间,每个条目为 32 位,每页为 8 KB。页表将包含多少个不同的条目?

我的逻辑:32 位地址空间意味着 2^32 个总地址,因此 2^37 个总位。每页 8 KB 意味着每页总共 2^16 位。因此,页表中将有 2^37 / 2^16 = 2^21 个条目。

这个对吗?

0 投票
1 回答
1478 浏览

linux - 在可执行文件上使用 mmap() 时如何工作?

我正在开发 Ubuntu 14.04 LTS。

  • 有两个文件:file1.cfile2.c
  • 它们分别被编译成exec1exec2file2.c使用静态库中的函数。

exec1使用 .映射exec2到它的虚拟地址空间mmap。以下行来自file1.c

发生以下一系列事件:

  1. exec1被执行。
  2. exec1映射exec2到它的虚拟地址空间(这里到底发生了什么?)
  3. exec2被执行(在这个阶段,exec1一直在后台运行。现在到底发生了什么?)

PS:我想知道当exec2它在磁盘上并且它是mmap由 ed时会发生什么exec1?虚拟地址空间和对应的页表是如何exec1变化的?
接下来,当exec2实际执行时,它被带到主存中。事情如何变化?内存中使用的静态库函数在file2.c哪里?我对这个过程没有一个清晰的概念。任何人都可以阐明这个话题吗?

0 投票
1 回答
358 浏览

operating-system - 确定地址和页表大小

我知道这个问题已经被问过很多次了,但我仍然觉得我很挣扎。

我需要确定物理地址和虚拟地址的外观以及计算页表大小。

我不确定我所拥有的是否正确,但这是我目前所拥有的:

页条目数为2^20/2^10=2^10

如何计算页表大小?我很困惑,因为每个 PTE 都有虚拟地址和物理地址。它会是页面条目数*(物理地址+虚拟地址)吗?如果我设置了当前位,会有什么不同?

0 投票
2 回答
974 浏览

operating-system - 操作系统在驱逐受害者页面时如何更新适当的页表?

在使用虚拟内存的操作系统中,每个进程都有一个页表。每个页表将进程的虚拟内存页映射到系统的物理内存页,并指示给定页当前是否有效(加载到内存中)。

假设内存运行不足,操作系统需要选择一个页面从物理内存中逐出。为此有不同的算法。例如,先进先出、LRU。一旦操作系统选择要驱逐的页面,它如何使对该页面的任何现有引用无效?

如果活动进程当前正在使用受害页面,则操作系统必须使当前进程的页表中的映射无效。如果受害者页面当前被另一个进程使用,操作系统必须使其他进程的页表中的映射无效。无论如何,操作系统如何确定要更新哪个页表(如果有),以及它如何知道映射在该页表中的位置而不进行线性搜索?

从本演示文稿的幻灯片 22 开始,详细描述了 x86 页表结构:

http://www.scs.stanford.edu/12au-cs140/notes/l8.pdf

我还发现了一些有用的虚拟内存概述:

http://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/9_VirtualMemory.html http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/virtual.html

没有答案的类似 Stack Overflow 问题:

上下文切换后linux如何更新页表

0 投票
1 回答
183 浏览

operating-system - 特定的 MMU 可以使用 32 位和 64 位虚拟地址吗?

当一个新进程启动时,操作系统使用进程的页表初始化 MMU 的寄存器。虚拟地址转换 MMU 获得一个虚拟地址,将其传递给比较器并获得物理地址(如果我弄错了,请纠正我)。因此,如果页表是硬件的一部分,那么单个 MMU 如何与 32 位和 64 位操作系统一起工作。我的意思是,如果它被编程为获得 32 位虚拟地址,那么当它获得 64 位虚拟地址时它是如何工作的。

谢谢。