这篇博客中,针对存储器和I/O 设备进行简单介绍。
一、存储系统
1、层次和分类
分层的依据是什么?——读取速度不匹配!
首先存储器是计算机中用于存放指令和数据的部件。计算机在处理数据时,(中央处理器)CPU从存储器读出指令,再按照指令中的地址从存储器中读出数据,按照指令要求对数据进行操作。CPU的高速运算要求存储器要在很短的时间内完成指令和数据的存取操作。
所以有了我们现在的存储系统。上图中,从上而下的特点依次为:存储容量逐渐增大,读取速度依次降低。其中CPU内部寄存器是用于CPU内部各单元之间的周转,是CPU内部用来创建和储存CPU运算结果和其它运算结果的地方,拥有非常高的读写速度,里面的数据是下一步必然会用到的。
CPU内部的寄存器有很多种类型。分为专用处理器和通用处理器。CPU对存储器中的数据进行处理时,往往先把数据从外部取到专用寄存器中,而后再作处理,通用寄存器是计算机中其它一些部件上用于暂存数据的寄存器。
高速缓冲存储器就是我们平常所说的CPU缓存,主要是为了匹配CPU 和主存读取速度的不匹配问题。通常包括一级、二级缓存。
现在不仅在CPU和主内存之间有高速缓存而且在内存和硬盘之间也有Cache(磁盘高速缓存)。可以这么理解凡是位于速度相差较大的两种硬件之间、用于协调两者数据传输速度差异的结构,均可称之为Cache。所以不要只想着存储器之间的读取通信,看过软考书后发现I/O接口和CPU 互联中的DMA 和IOP 技术都属于缓冲技术,以前的我们把缓冲技术理解的太险隘。
说道CPU缓冲,不得不说“命中率”。当CPU处理数据时,它会先到Cache中去寻找,如果数据因之前的操作已经读取而被暂存其中,就不需要再从内存中读取数据。未命中时,那么就涉及操作系统的存储规则了。
通常使用的算法是替换算法。原则确定主存中的信息块,采用替换算法读入到Cache 中被替换掉的哪个信息块空间。常用的有:随机替换算法,先进先出,近期最少使用,优化替换算法。
主存储器就是我们常说的内存条。高速缓冲存储器和主存储器(内存条)由于可以直接被CPU读取,故称之为内存储器,这也是相对于同在计算机内部,却不是内存存期的硬盘等存储器来说的。当然在这里也涉及到内存不足的问题,这也就是图中会出现“虚拟内存”的原因。
虚拟内存只是把硬盘的一部分当作内存内部数据的周转,而不是当做内存来使用。只把一个作业的部分装入到了内存中,其余部分还留在磁盘中,采用“调入和置换”功能在需要的时候连续的读入到内存中。这样从用户的角度来看,程序运行是连续的,内存比实际的也要大。在实现虚拟内存的过程中,尽管存储器的逻辑结构有“页式存储”,“段式存储”,“段页式存储”但是带入主存时采用的都是以“页”为单位。
简单说一下;置换页面的常用方法:
先进先出,最近最少使用,最近未用,还有一个最佳置换算法,是理想化的,很难实现。前四种是实际可行的方法。
高速缓冲也好,虚拟内存也罢,基于的原理都是内存中“程序执行的局部性原理”。体现在“时间”和“空间”两方面。
时间上:如果程序中的某条指令一旦执行,不久该指令可能再次被执行或者某个单元被访问,则不久的将来,该空间单位会被再次访问,产生时间局限性就是因为程序中存在大量的循环操作 。
空间上:一旦程序访问了某个单元,不久,相邻单元也会被访问,即程序一段时间内访问的程序集中在一 块空间内。
为了充分发挥高速缓存的作用,不仅依靠“暂存刚刚访问过的数据”,还要使用硬件实现的指令预测与数据预取技术——尽可能把将要使用的数据预先从内存中取到高速缓存里。
最后的辅助存储器主要是指硬盘,而海量存储器则是指过去主要用的磁带机一类的设备,现在随便硬盘技术的提升,辅助存储器也可以达到“海量”的标准。
PS:博客中有好多标记的文字,是因为,这些东西可能不是出于同一章节,我们在学习的时候,需要多联系,原理通了,自然而然就会结成网,而且把这些东西融合在一起,是一件很快乐的事情,希望对你有用。