内存, mem
内存, mem 内存对于缓存更新策略,要区分Write-Through和Write-Back两种策略。前者更新内容直接写内存并不同时更新Cache,但要置Cache失效,后者先更新Cache,随后异步更新内存。通常X86 CPU更新内存都使用Write-Back策略。 虚拟内存 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存 (一个连续完整的地址空间) ,而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存 (例如RAM) 的使用也更有效率。 注意: 虚拟内存不只是「用磁盘空间来扩展物理内存」的意思——这只是扩充内存级别以使其包含硬盘驱动器而已。把内存扩展到磁盘只是使用虚拟内存技术的一个结果,它的作用也可以通过覆盖或者把处于不活动状态的程序以及它们的数据全部交换到磁盘上等方式来实现。对虚拟内存的定义是基于对地址空间的重定义的,即把地址空间定义为「连续的虚拟内存地址」,以借此「欺骗」程序,使它们以为自己正在使用一大块的「连续」地址。 为什么要使用虚拟内存 a. 产生的背景 (摘自书籍Rechnerarchitektur : Von der digitalen Logik zum Parallelrechner 作者Andrew S. Tanenbaum )早期的计算机内存容量非常小,通常只能存储几千个Wörter 1(即数据单元),但价格却是十分昂贵。(之后的Beispiele是指一些关于早期计算机的具体例子) 所造成的不便: a. 使用这些容量很小的内存,导致了程序运行的速度很慢,原因是在于存放相对高效的算法需要占用的内存空间相对较大,所以程序员们只能使用执行效率较低的,但是占用内存容量较小的算法。à对于这个问题的传统解决方案是,(物理上,或者说在硬件上)新增加一个(或多个)内存空间(例如,硬盘- Plattenspeicher)。b. 而同时还造成的一个不便之处,是在这种内存容量很小的情况下,程序员需要人为地将程序分解成为多个部分(Overlays), 然后分开来存储进内存中。在执行程序时,就首先执行第1个Overlay, 执行完毕后,继而调用第2个Overlay,以此类推。à进展:尽管这个方法在那个时代已经很广泛地普及化了,但是由于使用Overlay进行管理执行程序的办法需要大量的人力投入,这其中的成本仍是不容小觑的。于是在1961年,一位来自英国曼彻斯特的研究人员提议,不如将程序通过Overlays执行这个方法设计成自动化的模式,这样就无需程序员费劳管理程序的划分与安置的任务。这个新的方法所使用到的一个新的概念即是虚拟内存virtueller Speicher。b.使用虚拟内存的优势: (摘自https://blog.csdn.net/vernice/article/details/41783601) 1 程序员无需操心如何存储(数据,程序等等的)内容。2 通过分布在同一个物理内存空间的两个不同的区间,虚拟内存里的数据和程序可以彼此共享使用3 它使得应用程序在系统中可以更自如地在物理地址中被执行。虚拟内存的操作过程是怎么样的 假如说这台机器不适用虚拟内存这个概念,那么程序就会报错,例如"该指定的地址范围在内存中不存在",继而程序终止执行。而反过来若是这台机器是适用虚拟内存的,那么这个任务会按照如下步骤来执行: 1 寻找位于存储盘上,介于地址8192和12287之间的数据单元。2 将这段原来地址为8192~12287的数据单元加载到内存中。3 而这段数据对应到内存中的地址将被定义为0~4095。4 而程序将继续正常地执行下去。 人们将这项自动划分区间(Overlays)的技术命名为Paging (deuts. Seitenauslagerung),而这一段段从硬盘中读出来的程序区间即被命名为Page (deuts. Seiten)。 虚拟地址通过对虚拟地址空间到物理地址空间的一个动态映射来实现。而虚拟的地址空间也会相应地划分成Pages, 然后整个虚拟地址空间就相当于一张划分地址空间的表格,与实际的物理内存地址相互对应。 (只是这个图像的内存中没有包含多个4KB的内存空间,而是指设置了一个,所以这个具例中,我们只能一次对应一个4KB的空间。) 而这个对应的关系实际上也可以更为的复杂,这是完全可以做到的。我们一方面将存储程序的地址称为虚拟地址空间Adressraum (Virtual Address Space),另一方面将真正存在的,有线路控制的内存地址称作物理地址空间(Physical Address Space)。依据对应的物理地址空间规划虚拟地址空间上的内容区划。这里我们假设首先是有足够的空间来装得下虚拟的地址空间的。这样人们就会获得一种假象,这种假象会让人感到好像有十分充足的(物理)内存空间一样,但实际上这些都是因为虚拟内存这个概念的应用,而现实中物理内存的实际容量远远少于人们所需要的。 有了这个优势,程序就可以任意地将虚拟地址空间里的数据加载出来,或者将新的数据存储到虚拟的内存空间中去,而人们也完全无需去顾虑是否物理内存的容量是否够用。 (有的)程序员甚至可以完全不需要知道虚拟内存的存在。计算机于是看上去是有一个很大很大的内存的。 而实现虚拟内存的一个本质前提是要有一个可以存放整个程序和数据的硬盘。这一个硬盘可以是可以转动的那种硬盘,也可以是固态硬盘。在书中我们统一将"Platte"或者说"Festplatte" 理解为固态硬盘。(将存在硬盘里的程序作为原件,而将程序数据转运到内存中所要做的即是一个复制的功能)自然的,在执行操作后要保持对硬盘里的程序(即原件)的更新。当在内存中原数据的"副本"改变后,反过去就要对硬盘的程序进行改动。 内存管理单元,内存控制单元 (MMU) 什么是MMU MMU(Memory Management Unit)主要用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权、多任务多进程操作系统。 (来自百度百科,对其几个点不熟悉,因此可以只考虑加粗部分) ...