标签: page-tables

结构与数组的对齐规则冲突

正如标题所暗示的,问题是关于Linux 上 x86-64 中聚合类型的对齐

在我们的讲座中,教授介绍了结构(及其元素)与附加幻灯片的对齐方式。因此,我会假设(根据维基百科和其他讲座材料)对于任何聚合类型,对齐是根据其最大成员。不幸的是,在以前的考试问题中似乎并非如此,它说:

“假设每个页表 [4kB,每个 PTE 64b] 都存储在内存中一个“自然对齐”的物理地址(即一个表大小的整数倍的地址),......”

为什么对于页表(它基本上是内存中的 8 字节值的数组),对齐规则不是根据最大的元素,而是根据整个表的大小?

非常感谢澄清!
菲利克斯 讲座幻灯片

x86 struct memory-alignment page-tables

2
推荐指数
1
解决办法
113
查看次数

在上下文切换上刷新 TLB

这可能取决于操作系统,但一般来说,据我所知,当发生页面错误(所需的页面不在主内存中)时,操作系统将指示CPU从磁盘读取页面,我想知道操作系统是否分派到另一个处理磁盘 I/O 时?如果确实如此,那么上下文切换时将完全刷新 TLB,对吗?

operating-system context-switch virtual-memory tlb page-tables

1
推荐指数
1
解决办法
7027
查看次数

究竟什么是分页?OSDEV

我正在尝试编写自己的操作系统,但到了需要设置分页的地步。我写了一些似乎有效的代码,但我意识到我不明白分页是如何工作的。现在我将尝试解释我是如何理解事物的,我将有一些问题!

所以据我所知,分页是一种将地址映射到其他地址的方式,以便每个应用程序都可以看到完整的地址空间(?)。有一种叫做页目录的东西,它存储 1024 个 4 字节的条目,每个条目包含一个指向页表的指针,该页表也有 1024 个条目。页表的每个条目都有一个指向 4 KiB 物理地址块开头的指针。这意味着 4096 字节 * 页表中的 1024 个条目 * 页目录中的 1024 个条目 = 可以映射的 4 GiB 内存。例如,我可以将应用程序加载到 0x80000000 并将该地址映射到 0x00000000,应用程序将看到其地址从 0x00000000 开始。

问题:

  1. 每个应用程序都有自己的页面目录还是只有一个页面目录,应用程序如何访问页面以及它们具体做什么?
  2. 如果应用程序获得 4 KiB 的空间块或一页,他们应该如何查看完整的地址空间?
  3. 你如何将页面写入硬盘驱动器?
  4. 我们应该如何分配页面供应用程序使用?

paging x86 osdev virtual-memory page-tables

1
推荐指数
1
解决办法
232
查看次数

页表项的大小

页表项的大小是否取决于进程的逻辑/虚拟内存空间的总大小?

paging operating-system cpu-architecture virtual-memory page-tables

1
推荐指数
1
解决办法
907
查看次数

如果为进程页表中的条目设置了当前位,这意味着什么?

这是否意味着引用的页面位于进程的逻辑地址空间内?我在想也许引用的页面是内存驻留的?

x86 operating-system osdev virtual-memory page-tables

0
推荐指数
1
解决办法
2578
查看次数