如何将分页系统(demand paging)视为另一层缓存?

How to view paging system (demand paging) as another layer of cache?

我尝试解决以下问题


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

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

关联性?完全关联性

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

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

替换策略?我完全不确定(也许是近似LRU的时钟算法)

Writeback or write-through? write back (不是一直和Disk一致) 写入分配? 是的,因为在页面错误之后我们将页面带到内存中进行写入和读取

Exclusivity/Inclusivity? 我认为是非包容和非独占(九),可能是因为内存映射文件部分在内存中,部分在交换文件或ELF文件中(程序文本)。例如,进程堆栈仅在内存中,除非我们 运行 内存不足并将其发送到交换文件。我说得对吗?


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

开始;你对线条大小、结合性和线条数的回答是正确的。

Tag size in bits? 14 (Number of lines in cache is 2^14 which gives us 14 bits for tag)

标签大小将是“磁盘上的位置/行大小”,加上一些其他位(例如用于管理替换策略)。我们不知道磁盘有多大(“大”除外)。

但是;向后解决这个问题可能不是不合理的——从假设 OS 被设计为支持各种不同的硬盘大小并且标签是一个很好的“2 的幂”开始;然后假设 4 位用于其他目的(例如 LRU 的“年龄”)。如果标签是 32 位(一个非常常见的“2 的幂”),那么它意味着 OS 可以支持最大 2 TiB 的磁盘大小(“1 << (32-4) * 8 KiB”) ,这(牢记“面向未来”)对于过去 10 年左右设计的 OS 来说有点太小了。下一个更大的“2 的幂”是 64 位,这很可能适用于现代硬件,但不太可能适用于较旧的硬件(例如 32 位 CPU、较小的磁盘)。基于“128 MiB 的 RAM”,我怀疑硬件很旧(例如,正常的 desktop/server 系统在 1990 年代后期开始拥有超过 128 MiB 的内存),所以我会选择“32 位标签” .

Replacement policy? I am not sure at all (maybe clock algorithm which approximates LRU)

Writeback or write-through? write back (It is not consistent with Disk at all times) Write-allocate? yes, because after page fault we bring the page to memory for both writing and reading

没有足够的信息可以确定。

文字直写策略将是一场性能灾难(想象一下,每次将数据推送到堆栈时都必须将 8 KiB 写入相对较慢的磁盘)。回写策略对于容错来说非常糟糕(例如,如果出现电源故障,您将丢失太多数据)。

仅此一项就足以暗示它是某种自定义设计(既不是严格回写也不是严格直写)。

使事情更加复杂; OS 可以考虑“驱逐成本”。例如。如果内存中的数据已经在磁盘上,则该页面可以立即重新使用,但如果内存中的数据已被修改,则必须先将该页面保存到磁盘,然后才能重新使用内存;因此 if/when OS 需要从缓存中逐出数据以腾出空间(例如,对于最近使用的数据),更喜欢逐出未修改的页面(逐出成本更低)是合理的。此外;对于旋转磁盘,OS 优化磁盘访问以最大程度地减少磁头移动(目标是减少寻道时间并提高磁盘 IO 性能)是很常见的。

在决定何时将修改后的数据写入磁盘时,OS 可能会结合所有这些因素。

Exclusivity/Inclusivity? I think non-inclusive and non exclusive (NINE), maybe because memory mapped files are partially in memory and partially in swap file or ELF file (program text). Forexample stack of process is only in memory except when we run out of memory and send it to a swap file. Am I right?

如果将 RAM 视为磁盘缓存,则系统是单级存储的示例(参见 https://en.wikipedia.org/wiki/Single-level_store),而不是普通的 OS(具有普通虚拟内存- 例如交换 space 和文件系统)。通常,使用单级存储的系统是围绕拥有“持久对象”的想法构建的,根本没有文件。考虑到这一点;我认为做出对普通操作系统有意义的假设是不合理的(例如假设存在可执行文件,或者支持内存映射文件,或者磁盘的某些部分是“swap space" 而磁盘的另一部分不是)。

但是;我会假设你对“非包容性和非排他性(NINE)”是正确的 - 包容性对性能不利(出于同样的原因,直写对性能不利)并且独占性对容错性非常不利(出于同样的原因,回写不利于容错)。