缓存 vs 分页

9
我正在上一门计算机架构课程,很难区分缓存和页面的不同。我猜唯一的解释是页面是操作系统让程序以为它在指定的内存区域执行所有工作的方法,而缓存内存是硬件让操作系统以为它正在从一个指定的内存区域读取数据的方法,而实际上并非如此。
操作系统是否会直接指示硬件需要一个“新页面”,还是通过尝试读取当前缓存“页面”(缺乏更好的术语)范围之外的地址来处理?
我的理解正确吗或是完全错误?
2个回答

10

缓存和页面是正交的概念。

缓存是一种高速“内存”,旨在最小化对大型低速“内存”的访问次数。在最普遍的情况下,高速“内存”可以是您的硬盘,用于缓存从网络获取的网页(低速“内存”)。当然,在计算机体系结构的背景下,“缓存”一词更可能指物理RAM,用于加速对较慢的RAM或磁盘的访问。

另一方面,页面仅仅是用于管理RAM或磁盘内容的单元。

这两个概念结合起来实现虚拟内存系统。一个进程可能分配500 MB的内存。这可能超过了可用于分配给该进程的物理RAM,因此操作系统会分配称为页面的磁盘块,其中将保存进程地址空间中某些逻辑页面的内容。

当进程访问其地址空间中的位置,而相关页面目前未映射到物理内存时,CPU会发出页面故障信号,操作系统会在进程处于暂停状态时从磁盘中获取页面。一旦映射了页面,进程就会恢复,并能够访问那个内存位置,就像它一直在那里一样。

常见的观点是虚拟内存是一种欺骗进程认为它具有大量RAM的方法,并非想象中那么简单。您还可以将进程的地址空间视为逻辑上存储在磁盘页面中,并带有操作系统辅助映射到RAM的方式,以缓存这些页面的内容,从而使进程不断地访问硬盘。从这个意义上讲,缓存和分页式虚拟内存在逻辑上是相同的。但请记住,虽然这种观点有助于理解两个概念之间的关系,但它并不完全准确,因为完全可以没有虚拟内存,只使用物理内存(事实上,大多数嵌入式系统都是这样运行的)。


好的,我认为基本上一个页面驻留在缓存“集合”中(假设是多路组相联高速缓存,其中有多个缓存块)。因此,当程序通过操作系统调用地址并且它超出了“范围”时,操作系统会将地址调用到缓存中,这将导致缺失,然后强制从主内存中获取它。但是,我所理解的是页面通常驻留在RAM上,但是由程序定义而不是硬件定义...我想这有所帮助!非常感谢。 - onaclov2000
那么这是否意味着,如果RAM上不存在某个页面,并且发生了页面错误,它会从缓存中逻辑地获取它,还是仍然需要磁盘访问?(缓存不会“预测”下一个需要的页面,对吗?) - onaclov2000
在虚拟内存的背景下,RAM页面和后备存储(磁盘页面)之间没有缓存。物理RAM实际上充当了驻留在磁盘上的页面的缓存。如果发生页面错误,则需要访问磁盘(或者现在可能是SSD芯片)。 - Marcelo Cantos
我忘了提到的一点是,在许多操作系统上,文件系统缓存(通常称为页面缓存)使用与虚拟内存子系统相同的机制实现,因此将RAM分页到页面文件中几乎与将用户打开的文件的缓存部分刷新到磁盘上无法区分。 - Marcelo Cantos

-1

我认为分页是将指令数据从磁盘或辅助存储器带到主存储器,而缓存是将指令数据从主存储器带到CPU。


1
你在发帖前有阅读过被采纳的答案吗? :) 你认为你的回答增加了什么新内容或更好地解释了问题吗?如果可以的话,请改进你的回答。谢谢。 - Eric Aya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接