问题标签 [demand-paging]

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 投票
2 回答
11140 浏览

memory-management - 请求分页和页面替换有什么区别?

据我了解,需求分页基本上是带交换的分页,因此您可以在需要时交换页面。但是页面替换似乎或多或少是一回事,您需要引入一个页面并将其与物理内存中的现有页面进行切换。

那么有明显的区别吗?

0 投票
1 回答
77 浏览

paging - 除了页面错误陷阱之后,页面如何加载到 RAM 中?

我试图了解需求分页概念,但找不到答案。页面错误率如何相对较小,如果唯一的方法是让操作系统了解它需要特定页面,就是获取指令并发现该页面没有加载到 RAM 中?如果页面错误率很小,操作系统如何设法在 RAM 中加载正确的页面?它如何提前猜测,将需要该特定页面?谢谢。

0 投票
1 回答
1503 浏览

operating-system - 操作系统中的页面错误。(无效寻址或页面不在主存储器中)

我正在阅读有关需求分页中的页面错误的信息。页面错误发生在 1)被访问的内存是非法的 2)页面是有效的但不存在于主内存中

我读到使用有效-无效位可以判断内存是否不在逻辑地址空间中,因为相应的位将被标记为无效。

相同的有效-无效位用于识别上述2个条件。

我的问题是操作系统如何知道被访问的内存是非法的,或者页面是否有效但不在主内存中,只有一个有效-无效位?谢谢你!

0 投票
0 回答
185 浏览

operating-system - 如果使用纯需求分页,CPU 如何知道第一条指令在可执行文件中的位置?

我正在阅读操作系统概念的Chap9,纯需求分页的概念描述如下:

在极端情况下,我们可以开始执行内存中没有页面的进程。当操作系统将指令指针设置为进程的第一条指令时,该指令位于非内存驻留页面上,进程立即为该页面出错......

但是如果没有页面,特别是包含代码的页面,在内存中,操作系统如何知道程序计数器首先在哪里?通过检查磁盘上的程序映像是否将程序计数器设置为进程创建的一部分?如果是这样,我会假设操作系统知道二进制图像的格式,并且可以直接访问磁盘上的该信息。如果操作系统决定不将包含此信息的页面以某种方式存储在程序执行期间不需要的程序映像部分中,那么它才有意义。

总而言之,我想知道:

  • 如果使用纯需求分页,如何为新进程设置程序计数器?
  • 是否有任何真正的操作系统使用纯按需分页,它有什么好处?
  • 可执行文件的二进制格式(例如 ELF、PE 格式)如何帮助操作系统进行请求分页(操作系统至少需要知道第一页在哪里?)
0 投票
2 回答
694 浏览

operating-system - 请求分页的内存访问次数

我一直在研究操作系统概念,我所指的书是 Peter B. Galvin、Greg Gagne 和 Abraham Silberschatz 的操作系统概念。

在虚拟内存一章中,本书开始讨论分页和内存访问次数,系统在给定逻辑地址的情况下读取存储在内存中特定帧中的数据。作者指出,当主内存中存在页表时,系统需要两次内存访问才能读取存储在帧中的数据。第一次访问页表以读取正确的帧号,下一次访问是从帧中读取字节/字。

几节之后,本书讨论了需求分页和页面错误。作者指出,在没有缺页的情况下,需要一次内存访问,在缺页的情况下,我们将考虑缺页服务时间(包括交换时间、换出时间、一次内存访问等)并提出有公式的读者

有效访问时间 = (1-p) x 1 个内存访问时间 + px 缺页服务时间

其中 p = 页面错误率

我无法理解为什么作者建议在没有页面错误的情况下只需要一次内存访问。应用同一作者之前介绍的标准分页方案的思路,我们应该需要一个内存访问来读取页表,另一个来从帧中读取数据。

是因为我们在谈论访问页表后的时间范围吗?那么为什么同样的计算标准不适用于标准版的分页呢?

0 投票
0 回答
42 浏览

virtual-memory - 寻找需求分页的下限

我有一个使用 2 GiB RAM 的按需分页 8192 字节的系统。如果一个正在运行的程序在其生命周期内总共访问了 280,000 个不同的虚拟内存页面。有没有办法只用这个信息找到下限,如果是,那怎么办?

提前致谢!

0 投票
1 回答
654 浏览

memory-management - 动态加载和按需分页的区别

我认为区别在于:

  • 在动态加载中不需要操作系统支持,用户有责任设计程序以使其可以从动态加载中受益,但在按需分页中,需要操作系统支持来管理页面。虚拟内存使程序员的工作更轻松。
  • 在动态加载中,我们在需要时加载例程和模块,在按需分页中,我们在需要时加载页面。

但我认为我错过了更多差异,非常感谢任何帮助!

这也是我的第一个问题,所以请放轻松:)

0 投票
0 回答
24 浏览

operating-system - 如何索引大小大于虚拟内存的程序的任何位置?

虚拟内存是可以单独由 CPU 索引的东西,32 位架构能够生成 2^32 个位置(比如字节可寻址机器,然后 2^32 字节=4GB)。如果进程大小大于 RAM,我们当然可以使用请求分页,但是如果进程大小大于虚拟内存本身呢?当然,您可以再次使用按需分页,但我的问题是,CPU 如何定位任何大于 2^32 的字节?假设编写的程序大小为 5GB,cpu 如何索引大于 5GB 的字节?它只能生成直到 4GB 的位置。

0 投票
1 回答
47 浏览

caching - 如何将分页系统(按需分页)视为另一层缓存?

我尝试解决以下问题


考虑一台具有 128MiB(即 2^27 字节)主内存和一个 MMU 的机器,其页面大小为 8KiB(即2^13 字节)。操作系统为大型旋转磁盘提供按需分页。将此分页系统视为处理器的最后一级缓存 (LLC) 之下的另一层缓存,请回答以下有关此“缓存”特性的问题:

行大小(以字节为单位)?2^13(每页有 2^13 个字节)

关联性?全联想

缓存中的行数?2^14(内存大小/页面大小)

标签大小以位为单位?14(缓存中的行数为 2^14,这为我们提供了 14 位用于标记)

换货政策?我完全不确定(可能是近似 LRU 的时钟算法)

回写还是直写?回写(始终与磁盘不一致) 写分配?是的,因为在页面错误之后,我们将页面带到内存中进行写入和读取

排他性/包容性?我认为非包容性和非独占性(NINE),可能是因为内存映射文件部分在内存中,部分在交换文件或 ELF 文件(程序文本)中。例如,进程堆栈仅在内存中,除非我们用完内存并将其发送到交换文件。我对吗?


如果有人检查我的答案并帮助我正确解决这个问题,我会很高兴,谢谢!抱歉,如果这里不是问这些问题的地方

0 投票
0 回答
99 浏览

c - 为什么在 malloc 没有实际写入的情况下 rss 一直在增长?

AFAIK,malloc 没有理由使用物理内存,除非进行实际的写操作,因为Demand paging,但是当我实际测试时:

然后在另一个 shell 中,您会注意到gcc test.c -o test && ./testrss正在疯狂增加!top -d $(pgrep test)