本节书摘来自异步社区《C语言开发从入门到精通》一书中的第1章,第1.4节,作者王长青 , 韩海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.4 揭开存储器的层次
知识点讲解:光盘:视频PPT讲解(知识点)第1章揭开存储器的层次.mp4
当C语言被编译后,编译的中间语言会在CPU中进行处理。按照与CPU的接近程度,存储器分为内存储器与外存储器,简称内存与外存。内存储器又常称为主存储器(简称主存),属于主机的组成部分;外存储器又称为辅助存储器(简称辅存),属于外部设备。访问CPU不能像访问内存那样直接访问外存,外存要与CPU或I/O设备进行数据传输,必须通过内存进行。现在的PC中还配置了高速缓冲存储器(chache),这时内存包括主存与高速缓存两部分。
为了兼顾存储容量和存储速度,当前计算机几乎毫无例外地采用了图1-3所示的层次式存储结构。
80%
图1-3 存储器层次结构
在图1-3中,以处理器为中心,计算机系统的存储依次为寄存器、高速缓存、主存储器、磁盘缓存、磁盘和可移动存储介质等7个层次。距离处理器越近的存储工作速度越高,容量越小。其中,寄存器、高速缓存、主存储器为操作系统存储管理的管辖范围,磁盘和可移动存储介质属于操作系统设备管理的管辖范围。
凡是属于操作系统存储管理范围的存储装置,其共同特点是在系统掉电之后,它们所存储的信息会丢失殆尽,属于可挥发性存储装置。而属于操作系统管理范围的存储装置,则可以永久保存存储的信息,属于非挥发性存储装置。
磁盘缓存本身并不是一种实际存在的存储介质,它依托于固定磁盘,主要用来提供对主存储器的扩充。
寄存器在物理上与处理器的运算控制部分同在一个芯片上,它们与运算部分的距离最近,访问速度也最高,但其容量也因此不会太大。所以,它们主要被用来暂存一些中间数据或控制用的特殊数据,而不能存放像程序之类的大批数据。
主存储器用来存放程序和程序运行所需的数据。一个计算机系统必须有足够大的主存储器,其容量是衡量一个计算机系统性能的指标之一。由于主存储器的访问速度远低于寄存器,所以,为了加快访问速度,计算机系统常常在主存储器和寄存器之间配置高速缓存,以存放处理器当前常用的程序模块和数据。
之所以把存储器分为几个层次,主要是基于如下三点原因。
(1)合理解决速度与成本的矛盾,以得到较高的性能价格比。半导体存储器速度快,但价格高,容量不宜做得很大,因此,仅用作与CPU频繁交流信息的内存储器。磁盘存储器价格较便宜,可以把容量做得很大,但存取速度较慢,因此,用作存取次数较少,且需存放大量程序、原始数据(许多程序和数据是暂时不参加运算的)和运行结果的外存储器。计算机在执行某项任务时,仅将与此有关的程序和原始数据从磁盘上调入容量较小的内存,通过CPU与内存进行高速的数据处理,然后将最终结果通过内存再写入磁盘。这样的配置价格适中,综合存取速度较快。
(2)为解决高速的CPU与速度相对较慢的主存的矛盾,还可使用高速缓存。它采用速度快、价格更高的半导体静态存储器,甚至与微处理器做在一起,存放当前使用最频繁的指令和数据。当CPU从内存中读取指令与数据时,将同时访问高速缓存与主存。如果所需内容在高速缓存中,就能立即获取;如没有,再从主存中读取。高速缓存中的内容是根据实际情况及时更换的。这样,通过增加少量成本即可获得很高的速度。
(3)使用磁盘作为外存,不仅价格便宜,可以把存储容量做得很大,而且在断电时它所存放的信息也不丢失,可以长久保存,且复制、携带都很方便。