如果说程序操作数据是计算机系统的主题,而程序指令本身也是数据,那么作为存放数据的存储体系是计算机系统不可或缺的重要组成。微机系统的存储体系,按照访问速度划分为寄存器、高速缓冲存储器、存储器(主存储器或内存)、外存储器(外存或辅存)。
在CPU诞生之初,为了提高运算速度,也为了方便实现指令功能,设计CPU时将一部分存储单元安排在CPU内部,这样寄存器就诞生了。
随着微机的发展,CPU结构不断演进,一方面在CPU内部出现了内存管理部件,使得通过辅存模拟主存以扩展微机内存的虚拟存储技术开始出现,这是一种以牺牲微机的执行速度,换取内存空间的扩展的策略,即“以时间换空间”。
另一方面,为了弥补CPU与主存之间的工作速度的差距(有时相差2到3个数量级),设计人员在CPU与主存之间安排少量的高速缓冲存储器,以提高CPU访问主存的速度,这是一种以牺牲较为昂贵的存储空间为代价,换取微机执行速度的提高的策略,即“以空间换时间” 。
最后,说明一下存储器能够用高速缓冲存储器提速,用虚拟存储技术扩容,它所依据的规律——程序局部性规律,程序在运行中,总是频繁地使用那些最近被使用过的指令和数据。如果你熟悉循环程序结构,就对这一点会产生直觉。另外,由于指令寻址在一般情况下以顺序寻址居多,因此,下一条要执行的指令,大概率局限在当前指令地址的附近。
高速缓冲存储器通常由高速存储器、联想存储器、替换逻辑电路和相应的控制线路组成。在有高速缓冲存储器的计算机系统中,中央处理器存取主存储器的地址划分为行号、列号和组内地址三个字段。于是,主存储器就在逻辑上划分为若干行;每行划分为若干的存储单元组;每组包含几个或几十个字。高速存储器也相应地划分为行和列的存储单元组。二者的列数相同,组的大小也相同,但高速存储器的行数却比主存储器的行数少得多。
联想存储器用于地址联想,有与高速存储器相同行数和列数的存储单元。当主存储器某一列某一行存储单元组调入高速存储器同一列某一空闲的存储单元组时,与联想存储器对应位置的存储单元就记录调入的存储单元组在主存储器中的行号。
当中央处理器存取主存储器时,硬件首先自动对存取地址的列号字段进行译码,以便将联想存储器该列的全部行号与存取主存储器地址的行号字段进行比较:若有相同的,表明要存取的主存储器单元已在高速存储器中,称为命中,硬件就将存取主存储器的地址映射为高速存储器的地址并执行存取操作;若都不相同,表明该单元不在高速存储器中,称为脱靶,硬件将执行存取主存储器操作并自动将该单元所在的那一主存储器单元组调入高速存储器相同列中空闲的存储单元组中,同时将该组在主存储器中的行号存入联想存储器对应位置的单元内。