Computer science 一个计算机系统既需要高速缓存,也需要虚拟内存,还是一个可以替代另一个?为什么?

Computer science 一个计算机系统既需要高速缓存,也需要虚拟内存,还是一个可以替代另一个?为什么?,computer-science,cpu-architecture,virtual-memory,Computer Science,Cpu Architecture,Virtual Memory,我知道高速缓存提高了CPU的访问速度。每当程序准备好执行时,就会从主存中取出,然后复制到高速缓存中。但是,如果其副本已存在于高速缓存中,则直接执行该程序。然而,虚拟内存增加了主内存的容量。在虚拟内存中,甚至允许执行比主内存大的程序。我仍然不知道计算机系统是否需要两者。正如评论中所指出的,虚拟内存和缓存是不同的东西,它们不能互换 虚拟内存是系统物理内存的抽象——这允许顺序虚拟内存地址位于内存中的不同位置(不一定是顺序物理地址)。从纸面上看,这似乎使系统拥有比实际更多的内存。例如,每个程序专用的内存

我知道高速缓存提高了CPU的访问速度。每当程序准备好执行时,就会从主存中取出,然后复制到高速缓存中。但是,如果其副本已存在于高速缓存中,则直接执行该程序。然而,虚拟内存增加了主内存的容量。在虚拟内存中,甚至允许执行比主内存大的程序。我仍然不知道计算机系统是否需要两者。

正如评论中所指出的,虚拟内存和缓存是不同的东西,它们不能互换

虚拟内存是系统物理内存的抽象——这允许顺序虚拟内存地址位于内存中的不同位置(不一定是顺序物理地址)。从纸面上看,这似乎使系统拥有比实际更多的内存。例如,每个程序专用的内存空间非常大,可能比您的计算机拥有的内存量还要大。但是,虚拟地址允许操作系统仅在需要时使用物理内存,同时仍然使用您期望的虚拟地址空间(因此堆栈可以向下扩展,堆可以向上扩展)

另一方面,缓存是计算机内存高级结构的一部分。基本上,所有形式的存储都有一个速度与大小和成本的权衡。缓存是访问速度最快的,但很少(与较低级别相比)。在缓存下面,您有计算机的ram。它的访问速度要慢得多,但您拥有的信息要多得多。最终,您可以使用磁盘/页面文件甚至云存储。通过处理较低层的每一层高层结构,系统能够大大增加访问时间

因此,虽然在技术上并不需要这两个地址(一些嵌入式系统将只使用物理地址),但您可能希望在您的计算机上同时使用这两个地址


TL;DR:操作系统使用虚拟内存来管理您的物理内存,使系统看起来每个程序都有更多内存(但实际上,您的物理内存仍然有限)。缓存用于将常用数据存储在访问速度更快的介质中,从而帮助加快对常用数据的访问速度。

虚拟内存和缓存内存是两种完全不同的东西,不是“一种或另一种”关系。虚拟内存是一种抽象,用于解决向应用程序公开物理地址的一系列问题,而缓存则用于避免重复、昂贵地访问主内存。“然而,虚拟内存增加了主内存的容量”——不,虚拟内存只是隐藏物理地址的操作系统,以产生每个进程都可以访问整个地址空间的错觉。虚拟内存实际上不会增加物理容量。但是,虚拟内存会增加主内存的容量。-分页可以做到这一点,并由虚拟内存启用。但更重要的是,虚拟内存为每个进程提供了自己的虚拟地址空间。与缓存的功能完全无关。计算机系统不需要这两种组件,例如DOS和Atari ST’s TOS等操作系统在没有缓存或MMU的系统上运行。在大多数系统上,堆栈向下增长,通常从虚拟地址空间的顶部开始。在某些ISA上,这两种选择都是可能的,但如果您想使用高效的指令,例如x86的
调用
ret
,以及通过硬件中断和异常如何使用堆栈来嵌入内核代码,则向下扩展是不可能的。但是,在大多数CPU设计中,缓存透明地提高了物理RAM的速度。(历史上,一些CPU实际上已经处理了L1缓存,这些缓存需要操作系统在上下文切换上刷新它们,但大多数现代系统都对缓存进行了物理标记。)无论哪种方式,缓存都与虚拟内存正交。一个可以不使用另一个,并且它们的优点没有重叠。不要在文本中用“编辑:”来表示编辑,尤其是不需要只在编辑更改日志消息中显示的内容。帮你修好了。