Skip to content

Commit 47c4074

Browse files
committed
修正直接映射部分的翻译
1 parent 63e0fbb commit 47c4074

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

09-paging-implementation.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ x86_64 = "0.7.5"
4242

4343
![A virtual and a physical address space with various virtual pages mapped to the physical frame with the same address](https://os.phil-opp.com/paging-implementation/identity-mapped-page-tables.svg)
4444

45-
在此示例中,我们看到了一些直接映射的页表帧。这样,页表的物理地址也是有效的虚拟地址,因此我们可以轻松地从CR3寄存器访问所有级别的页表。
45+
在此示例中,我们看到了很多被恒等映射的页表帧。这样一来,页表的物理地址也是有效的虚拟地址,因此我们可以轻松地从CR3寄存器访问所有级别的页表。
4646

47-
但是,它会使虚拟地址空间变得混乱,并使得找到更大尺寸的连续存储区域变得更加困难。例如,假设我们要在上面的图形中创建一个大小为1000 KiB的虚拟内存区域,例如用于[内存映射文件](https://zh.wikipedia.org/wiki/内存映射文件)。我们无法在`28 KiB`处开始该区域,因为它会与`1004KiB`处已映射的页面碰撞。因此,我们必须进一步寻找,直到找到足够大的未映射区域,例如`1008 KiB`。这是与分段类似的碎片问题。
47+
但是,它会使虚拟地址空间变得混乱,并使得找到大尺寸的连续内存区域变得更加困难。例如,假设我们要在上面的图形中创建一个大小为 1000 KiB 的虚拟内存区域,例如用于[内存映射文件](https://zh.wikipedia.org/wiki/内存映射文件)。我们无法在 `28 KiB` 处开始该区域,因为它会与 `1004KiB` 处已映射的页碰撞。因此,我们必须继续寻找,直到找到足够大的未映射区域,例如 `1008 KiB` 。这是与分段类似的碎片问题。
4848

49-
同样,这使创建新的页表变得更加困难,因为我们需要找到其相应页尚未使用的物理帧。例如,假设我们为内存映射文件保留了从`1008 KiB`开始的虚拟1000 KiB内存区域。现在我们不能再使用物理地址在`1000 KiB``2008 KiB`之间的任何帧,因为我们无法对其进行直接映射。
49+
同样,这使创建新的页表变得更加困难,因为我们需要找到其对应的页尚未使用的物理帧。例如,假设我们为内存映射文件保留了从`1008 KiB` 开始的虚拟 1000 KiB 内存区域。现在我们不能再使用物理地址在`1000 KiB``2008 KiB`之间的任何帧,因为我们无法对其进行直接映射。
5050

5151
### 以固定偏移量映射
5252
为避免虚拟地址空间混乱的问题,我们可以为**页表映射使用单独的内存区域**。 因此,我们将其带固定偏移量地映射到虚拟地址空间中,而不是直接映射页表框架。 例如,偏移量可以是10 TiB:

0 commit comments

Comments
 (0)