精华内容
下载资源
问答
  • 行业-电子政务-2级存储器分级结构中的存储器侧高速缓存的动态部分断电.zip
  • 为什么会有存储器分级策略? 要想弄清楚存储器分级策略。 首先,你要弄清楚,“我们希望存储器是什么样子的”,也就是“我们的需求是什么”? 然后,你要弄清楚,我们的需求有哪些“实现约束”。 从需求上讲,我们...

    为什么会有存储器分级策略?

    要想弄清楚存储器分级策略。

    首先,你要弄清楚,“我们希望存储器是什么样子的”,也就是“我们的需求是什么”?

    然后,你要弄清楚,我们的需求有哪些“实现约束”。

    从需求上讲,我们希望存储器速度快、体积小、空间大、能耗低、散热好、断电数据不丢失。但在现实中,我们往往无法把所有需求都实现。

    下面我们举几个例子,带你深入体会一下,比如:

    • 如果一个存储器的体积小,那它存储空间就会受到制约。

    • 如果一个存储器电子元件密度很大,那散热就会有问题。因为电子元件都会产生热能,所以电子元件非常集中的 CPU,就需要单独的风扇或者水冷帮助电子元件降温。

    • 如果一个存储器离 CPU 较远,那么在传输过程中必然会有延迟,因此传输速度也会下降。

    这里你可能会有疑问,因为在大多数人的认知里,光速是很快的,而信号又是以光速传输的。既然光速这么快,那信号的延迟应该很小才对。但事实并不是这样,比如时钟信号是 1GHz 的 CPU,1G 代表 10 个亿,因此时钟信号的一个周期是 1/10 亿秒。而光的速度是 3×10 的 8 次方米每秒,就是 3 亿米每秒。所以在一个周期内,光只能前进 30 厘米。

    你看!虽然在宏观世界里光速非常快,但是到计算机世界里,光速并没有像我们认知中的那么快。所以即使元件离 CPU 的距离稍微远了一点,运行速度也会下降得非常明显。

    你可能还会问,那干吗不把内存放到 CPU 里?

    如果你这么做的话,除了整个电路散热和体积会出现问题,服务器也没有办法做定制内存了。也就是说 CPU 在出厂时就决定了它的内存大小,如果你想换更大的内存,就要换 CPU,而组装定制化是你非常重要的诉求,这肯定是不能接受的。

    此外,在相同价格下,一个存储器的速度越快,那么它的能耗通常越高。能耗越高,发热量越大。

    因此,我们上面提到的需求是不可能被全部满足的,除非将来哪天存储技术有颠覆性的突破。

    存储器分级策略

    既然我们不能用一块存储器来解决所有的需求,那就必须把需求分级。

    一种可行的方案,就是根据数据的使用频率使用不同的存储器:高频使用的数据,读写越快越好,因此用最贵的材料,放到离 CPU 最近的位置;使用频率越低的数据,我们放到离 CPU 越远的位置,用越便宜的材料。
    在这里插入图片描述
    具体来说,通常我们把存储器分成这么几个级别:

    • 1.寄存器;

    • 2.L1-Cache;

    • 3.L2-Cache;

    • 4.L3-Cahce;

    • 5.内存;

    • 6.硬盘/SSD。

    寄存器(Register)

    寄存器紧挨着 CPU 的控制单元和逻辑计算单元,它所使用的材料速度也是最快的。就像我们前面讲到的,存储器的速度越快、能耗越高、产热越大,而且花费也是最贵的,因此数量不能很多。

    寄存器的数量通常在几十到几百之间,每个寄存器可以用来存储一定字节(byte)的数据。比如:

    32 位 CPU 中大多数寄存器可以存储 4 个字节;

    64 位 CPU 中大多数寄存器可以存储 8 个字节。

    寄存机的访问速度非常快,一般要求在半个 CPU 时钟周期内完成读写。比如一条要在 4 个周期内完成的指令,除了读写寄存器,还需要解码指令、控制指令执行和计算。如果寄存器的速度太慢,那 4 个周期就可能无法完成这条指令了。

    L1-Cache

    L1- 缓存在 CPU 中,相比寄存器,虽然它的位置距离 CPU 核心更远,但造价更低。通常 L1-Cache 大小在几十 Kb 到几百 Kb 不等,读写速度在 2~4 个 CPU 时钟周期。

    L2-Cache

    L2- 缓存也在 CPU 中,位置比 L1- 缓存距离 CPU 核心更远。它的大小比 L1-Cache 更大,具体大小要看 CPU 型号,有 2M 的,也有更小或者更大的,速度在 10~20 个 CPU 周期。

    L3-Cache

    L3- 缓存同样在 CPU 中,位置比 L2- 缓存距离 CPU 核心更远。大小通常比 L2-Cache 更大,读写速度在 20~60 个 CPU 周期。L3 缓存大小也是看型号的,比如 i9 CPU 有 512KB L1 Cache;有 2MB L2 Cache; 有16MB L3 Cache。

    内存

    内存的主要材料是半导体硅,是插在主板上工作的。因为它的位置距离 CPU 有一段距离,所以需要用总线和 CPU 连接。因为内存有了独立的空间,所以体积更大,造价也比上面提到的存储器低得多。现在有的个人电脑上的内存是 16G,但有些服务器的内存可以到几个 T。内存速度大概在 200~300 个 CPU 周期之间。

    SSD 和硬盘

    SSD 也叫固态硬盘,结构和内存类似,但是它的优点在于断电后数据还在。内存、寄存器、缓存断电后数据就消失了。内存的读写速度比 SSD 大概快 10~1000 倍。以前还有一种物理读写的磁盘,我们也叫作硬盘,它的速度比内存慢 100W 倍左右。因为它的速度太慢,现在已经逐渐被 SSD 替代。

    在这里插入图片描述
    当 CPU 需要内存中某个数据的时候,如果寄存器中有这个数据,我们可以直接使用;如果寄存器中没有这个数据,我们就要先查询 L1 缓存;L1 中没有,再查询 L2 缓存;L2 中没有再查询 L3 缓存;L3 中没有,再去内存中拿。

    缓存条目结构

    上面我们介绍了存储器分级结构大概有哪些存储以及它们的特点,接下来还有一些缓存算法和数据结构的设计困难要和你讨论。比如 CPU 想访问一个内存地址,那么如何检查这个数据是否在 L1- 缓存中?换句话说,缓存中的数据结构和算法是怎样的?

    无论是缓存,还是内存,它们都是一个线性存储器,也就是数据一个挨着一个的存储。如果我们把内存想象成一个只有 1 列的表格,那么缓存就是一个多列的表格,这个表格中的每一行叫作一个缓存条目。

    方案 1
    缓存本质上是一个 Key-Value 的存储,它的 Key 是内存地址,值是缓存时刻内存地址中的值。我们先思考一种简单的方案,一个缓存条目设计 2 列:

    • 1.内存的地址;

    • 2.缓存的值。

    CPU 读取到一个内存地址,我们就增加一个条目。当我们要查询一个内存地址的数据在不在 L1- 缓存中的时候,可以遍历每个条目,看条目中的内存地址是否和查询的内存地址相同。如果相同,我们就取出条目中缓存的值。

    这个方法需要遍历缓存中的每个条目,因此计算速度会非常慢,在最坏情况下,算法需要检查所有的条目,所以这不是一个可行的方案。

    方案 2
    其实很多优秀的方案,往往是从最笨的方案改造而来的。现在我们已经拥有了一个方案,但是这个方案无法快速确定一个内存地址缓存在哪一行。因此我们想要找到一个更好的方法,让我们看到一个内存地址,就能够快速知道它在哪一行。

    这里,我们可以用一个数学的方法。比如有 1000 个内存地址,但只有 10 个缓存条目。内存地址的编号是 0、1、2、3,…,999,缓存条目的编号是 0~9。我们思考一个内存编号,比如 701,然后用数学方法把它映射到一个缓存条目,比如 701 整除 10,得到缓存条目 1。

    用这种方法,我们每次拿到一个内存地址,都可以快速确定它的缓存条目;然后再比较缓存条目中的第一列内存地址和查询的内存地址是否相同,就可以确定内存地址有没有被缓存。

    指令的预读

    之前我们学过,CPU 顺序执行内存中的指令,CPU 执行指令的速度是非常快的,一般是 2~6 个 CPU 时钟周期;上面我们学习了存储器分级策略,发现内存的读写速度其实是非常慢的,大概有 200~300 个时钟周期。

    不知道你发现没有?这也产生了一个非常麻烦的问题:CPU 其实是不能从内存中一条条读取指令再执行的,如果是这样做,那每执行一条指令就需要 200~300 个时钟周期了。

    那么,这个问题如何处理呢?

    一个解决办法就是 CPU 把内存中的指令预读几十条或者上百条到读写速度较快的 L1- 缓存中,因为 L1- 缓存的读写速度只有 2~4 个时钟周期,是可以跟上 CPU 的执行速度的。

    这里又产生了另一个问题:如果数据和指令都存储在 L1- 缓存中,如果数据缓存覆盖了指令缓存,就会产生非常严重的后果。因此,L1- 缓存通常会分成两个区域,一个是指令区,一个是数据区。

    与此同时,又出现了一个问题,L1- 缓存分成了指令区和数据区,那么 L2/L3 需不需要这样分呢?其实,是不需要的。因为 L2 和 L3,不需要协助处理指令预读的问题。

    缓存的命中率

    接下来,还有一个重要的问题需要解决。就是 L1/L2/L3 加起来,缓存的命中率有多少?

    所谓命中就是指在缓存中找到需要的数据。和命中相反的是穿透,也叫 miss,就是一次读取操作没有从缓存中找到对应的数据。

    据统计,L1 缓存的命中率在 80% 左右,L1/L2/L3 加起来的命中率在 95% 左右。因此,CPU 缓存的设计还是相当合理的。只有 5% 的内存读取会穿透到内存,95% 都能读取到缓存。 这也是为什么程序语言逐渐取消了让程序员操作寄存器的语法,因为缓存保证了很高的命中率,多余的优化意义不大,而且很容易出错。

    展开全文
  • 存储器层级结构

    千次阅读 2020-05-13 18:36:56
    存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。每一层于下一层相比都拥有较高的速度和较低延迟性,以及较小的容量。 存储器层次结构,对应用程序的性能有着巨大的影响。理解系统是如何将数据...

    1、概述

    存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。每一层于下一层相比都拥有较高的速度和较低延迟性,以及较小的容量

    存储器层次结构,对应用程序的性能有着巨大的影响。理解系统是如何将数据在存储器层次结构中上下移动,可写出更符合系统运行的应用程序,运行更快。

    2、存储器的层次结构

    存储器的层次结构图如下所示:

    在这里插入图片描述
    从顶层往底层走,存储设备变得更慢、更便宜和更大。在最高层L0,是少量快速的CPU寄存器,CPU可在一个时钟周期内访问它们。接下来是一个或多个基于SRAM的高速缓存,可在几个时钟周期内访问它们。在下一层是基于DRAM的主存,可以在几十到几百个时钟周期内访问它们。接下来是速度更慢的本地磁盘…

    3、存储器层次结构中的缓存

    高速缓存(cache) 是一个小而快速的存储设备,它用来存储下一层更大、也更慢的设备中的数据对象的缓冲区域。使用高速缓存的过程称为 缓存(caching)

    对照层次图简单来说: L0 缓存 L1 中的数据,L1 缓存 L2 中的数据,L2 缓存 L3 中的数据,依此类推。

    每层都会拥有多个块(连续数据对象组成的结构),数据总是以块的大小为基本单元在层级之间传递。上一层存储器更小,拥有的块比下一层少很多,只能缓存下层部分数据。如下图所示:

    在这里插入图片描述
    当CPU从存储器中读取数据时,会发生以下几种情况:

    3.1、缓存命中

    缓存命中:当程序需要第 k+1 层的某个数据对象 d 时,它首先在 第 k 层的块中查找 d,如果 d 刚好缓存在 第 k 层。

    3.2、缓存不命中

    缓存不命中:第 k 层 没有缓存数据对象 d。当发生缓存不命中时,第 k 层 从 第 k+1 层取出包含 d 的那个块,来写入或覆盖第 k 层的缓存中。覆盖一个现存的块的过程称为替换或驱逐。被驱逐的这个块称为 牺牲块。

    3.3、缓存不命中的种类

    冷缓存:第 k 层是空的,任何数据都不会命中。

    放置策略:确定把第 k+1 层中取出的块放在哪里。如:随机放置策略。

    冲突不命中:每次访问数据都是不命中状态,是由某些放置策略引起的不命中。

    3.4、缓存管理

    在每一层上,都会有由硬件和软件组成一种逻辑进行缓存管理。不需要程序采取特殊的行动。

    4、局部性原理

    程序倾向于一次又一次地访问相同的数据集合,或倾向于访问邻近的数据集合。这种倾向性,我们称为局部性原理。通常有以下两种形式:

    • 时间局部性:被引用过一次的存储器位置的内容在不远的将来再被多次引用。
    • 空间局部性:如果一个内存位置被引用了一次,那么程序很可能在不远的将来引用附近的一个内存位置。

    一般而言,有良好局部性的程序比局部性差的程序运行得更快。现代计算机系统的各个层次,从硬件到操作系统、在到应用程序,它们的设计都利用了局部性。举例来说:

    int sumvec( int  vec[N])
    {
    	int i , sum = 0;
    	for( i = 0; i < N; i++)
    		sum += vec[i];
    	return sum;
    }
    

    在这个程序中,变量sum,i在每次循环迭代时被引用一次,因此对sum和i来说,有较好的时间局部性。
    对变量vec来说,它是一个int类型数组,循环时按顺序访问vec,因为一个C数组在内存中是占用连续的内存空间。因而的较好的空间局部性.

    再看一个例子:

    int sumarraycols(int array[M][N])
    {
        int i, j, sum = 0;
        for(i = 0; i < N; i++){
            for(j = 0; j < M; j++)
                sum += array[i][j];
        }   
        return sum;
    }
    

    这是一个空间局部性很差的程序。
    假设这个数组是array[3][4],因为C数组在内存中是按行顺序来存放的。所以sumarraycols对每个数组元素的访问顺序成了这样:0, 4, 8, 1, 5, 9…… 7, 11。所以它的空间局部性很差。

    5、总结

    通过上面的介绍可以发现,存储层级天然符合局部性原理;

    利用时间局部性:当缓存了一个对象时,我们并不从缓存中删除,期望后面对该缓存有一系列的访问。

    利用空间局部性:缓存数据时,都是以block块为单位缓存的,期望对该块的其它数据进行访问。

    感谢大家,我是假装很努力的YoungYangD(小羊)

    参考资料:
    《深入理解计算机系统》
    https://www.cnblogs.com/yaoxiaowen/p/7805661.html

    展开全文
  • 存储器分级介绍

    2021-05-03 10:18:17
    分级原因 从需求上讲,我们需要存储器速度快、体积小、空间大、能耗低、散热好、断电数据不丢失。但在现实中,往往无法把所有需求都实现。...既然不能用一块存储器来解决所有问题,那就必须把需求分级分级策略 一种

    分级原因

    从需求上讲,我们需要存储器速度快、体积小、空间大、能耗低、散热好、断电数据不丢失。但在现实中,往往无法把所有需求都实现。
    有一下原因:

    1. 如果一个存储器的体积小,那它存储空间就会受到制约。
    2. 如果一个存储器电子元件密度很大,那散热就会有问题。因为电子元件都会产生热能,所以电子元件非常集中的 CPU,就需要单独的风扇或者水冷帮助电子元件降温。
    3. 如果一个存储器离 CPU 较远,那么在传输过程中必然会有延迟,因此传输速度也会下降。
      既然不能用一块存储器来解决所有问题,那就必须把需求分级。

    分级策略

    一种可行的方案,就是根据数据的使用频率使用不同的存储器:高频使用的数据,读写越快越好,因此用最贵的材料,放到离 CPU 最近的位置;使用频率越低的数据,放到离 CPU 越远的位置,用越便宜的材料。
    具体来说,通常把存储器分成这么几个级别:

    1. 寄存器;
    2. L1-Cache;
    3. L2-Cache;
    4. L3-Cahce;
    5. 内存;
    6. 硬盘/SSD。

    寄存器(Register)

    寄存器紧挨着 CPU 的控制单元和逻辑计算单元,它所使用的材料速度也是最快的。就像前面讲到的,存储器的速度越快、能耗越高、产热越大,而且花费也是最贵的,因此数量不能很多。

    寄存器的数量通常在几十到几百之间,每个寄存器可以用来存储一定字节(byte)的数据。比如:

    • 32 位 CPU 中大多数寄存器可以存储 4 个字节;

    • 64 位 CPU 中大多数寄存器可以存储 8 个字节。

    寄存机的访问速度非常快,一般要求在半个 CPU 时钟周期内完成读写。比如一条要在 4 个周期内完成的指令,除了读写寄存器,还需要解码指令、控制指令执行和计算。如果寄存器的速度太慢,那 4 个周期就可能无法完成这条指令了。

    L1-Cache

    L1- 缓存在 CPU 中,相比寄存器,虽然它的位置距离 CPU 核心更远,但造价更低。通常 L1-Cache 大小在几十 Kb 到几百 Kb 不等,读写速度在 2~4 个 CPU 时钟周期。

    L2-Cache

    L2- 缓存也在 CPU 中,位置比 L1- 缓存距离 CPU 核心更远。它的大小比 L1-Cache 更大,具体大小要看 CPU 型号,有 2M 的,也有更小或者更大的,速度在 10~20 个 CPU 周期。

    L3-Cache

    L3- 缓存同样在 CPU 中,位置比 L2- 缓存距离 CPU 核心更远。大小通常比 L2-Cache 更大,读写速度在 20~60 个 CPU 周期。L3 缓存大小也是看型号的,比如 i9 CPU 有 512KB L1 Cache;有 2MB L2 Cache; 有16MB L3 Cache。

    内存

    内存的主要材料是半导体硅,是插在主板上工作的。因为它的位置距离 CPU 有一段距离,所以需要用总线和 CPU 连接。因为内存有了独立的空间,所以体积更大,造价也比上面提到的存储器低得多。现在有的个人电脑上的内存是 16G,但有些服务器的内存可以到几个 T。内存速度大概在 200~300 个 CPU 周期之间。

    SSD 和硬盘

    SSD 也叫固态硬盘,结构和内存类似,但是它的优点在于断电后数据还在。内存、寄存器、缓存断电后数据就消失了。内存的读写速度比 SSD 大概快 10~1000 倍。以前还有一种物理读写的磁盘,也叫作硬盘,它的速度比内存慢 100W 倍左右。因为它的速度太慢,现在已经逐渐被 SSD 替代。
    在这里插入图片描述
    当 CPU 需要内存中某个数据的时候,如果寄存器中有这个数据,以直接使用;如果寄存器中没有这个数据,就要先查询 L1 缓存;L1 中没有,再查询 L2 缓存;L2 中没有再查询 L3 缓存;L3 中没有,再去内存中拿。

    缓存条目结构

    CPU 想访问一个内存地址,那么如何检查这个数据是否在 L1- 缓存中?缓存中的数据结构和算法是怎样的?

    无论是缓存,还是内存,它们都是一个线性存储器,也就是数据一个挨着一个的存储。如果把内存想象成一个只有 1 列的表格,那么缓存就是一个多列的表格,这个表格中的每一行叫作一个缓存条目。

    方案 1

    缓存本质上是一个 Key-Value 的存储,它的 Key 是内存地址,值是缓存时刻内存地址中的值。一种简单的方案,一个缓存条目设计 2 列:

    • 内存的地址;

    • 缓存的值。

    CPU 读取到一个内存地址,就增加一个条目。当要查询一个内存地址的数据在不在 L1- 缓存中的时候,可以遍历每个条目,看条目中的内存地址是否和查询的内存地址相同。如果相同,就取出条目中缓存的值。

    这个方法需要遍历缓存中的每个条目,因此计算速度会非常慢,在最坏情况下,算法需要检查所有的条目,所以这不是一个可行的方案。

    方案 2

    其实很多优秀的方案,往往是从最笨的方案改造而来的。现在已经拥有了一个方案,但是这个方案无法快速确定一个内存地址缓存在哪一行。因此想要找到一个更好的方法,让看到一个内存地址,就能够快速知道它在哪一行。

    这里,可以用一个数学的方法。比如有 1000 个内存地址,但只有 10 个缓存条目。内存地址的编号是 0、1、2、3,…,999,缓存条目的编号是 0~9。思考一个内存编号,比如 701,然后用数学方法把它映射到一个缓存条目,比如 701 整除 10,得到缓存条目 1。

    用这种方法,每次拿到一个内存地址,都可以快速确定它的缓存条目;然后再比较缓存条目中的第一列内存地址和查询的内存地址是否相同,就可以确定内存地址有没有被缓存。

    这里用到了一种类似哈希表的方法:地址 % 10,其实就构成了一个简单的哈希函数。

    指令的预读

    接下来讨论下指令预读的问题。

    CPU 顺序执行内存中的指令,CPU 执行指令的速度是非常快的,一般是 2-6 个 CPU 时钟周期;内存的读写速度其实是非常慢的,大概有 200-300 个时钟周期。

    这产生了一个非常麻烦的问题:CPU 其实是不能从内存中一条条读取指令再执行的,如果是这样做,那每执行一条指令就需要 200~300 个时钟周期了。

    一个解决办法就是 CPU 把内存中的指令预读几十条或者上百条到读写速度较快的 L1- 缓存中,因为 L1- 缓存的读写速度只有 2~4 个时钟周期,是可以跟上 CPU 的执行速度的。

    这里又产生了另一个问题:如果数据和指令都存储在 L1- 缓存中,如果数据缓存覆盖了指令缓存,就会产生非常严重的后果。因此,L1- 缓存通常会分成两个区域,一个是指令区,一个是数据区。

    与此同时,又出现了一个问题,L1- 缓存分成了指令区和数据区,那么 L2/L3 需不需要这样分呢?其实,是不需要的。因为 L2 和 L3,不需要协助处理指令预读的问题。

    缓存的命中率

    接下来,还有一个重要的问题需要解决。就是 L1/L2/L3 加起来,缓存的命中率有多少?

    所谓命中就是指在缓存中找到需要的数据。和命中相反的是穿透,也叫 miss,就是一次读取操作没有从缓存中找到对应的数据。

    据统计,L1 缓存的命中率在 80% 左右,L1/L2/L3 加起来的命中率在 95% 左右。因此,CPU 缓存的设计还是相当合理的。只有 5% 的内存读取会穿透到内存,95% 都能读取到缓存。 这也是为什么程序语言逐渐取消了让程序员操作寄存器的语法,因为缓存保证了很高的命中率,多余的优化意义不大,而且很容易出错。

    缓存置换问题

    最后的一个问题,比如现在 L1- 缓存条目已经存满了,接下来 CPU 又读了内存,需要把一个新的条目存到 L1- 缓存中,既然有一个新的条目要进来,那就有一个旧的条目要出去。所以,这个时候就需要用一个算法去计算哪个条目应该被置换出去。这个问题叫作缓存置换问题。(后续讨论)

    总结

    本文介绍了存储器分级策略,讨论了 L1/L2/L3 缓存的工作原理。是所有缓存知识的源头。所有缓存系统的设计,都是存储资源的分级。在设计缓存的时候,除了要关心整体架构外,还需要注意细节,比如:

    条目怎么设计?
    算法怎么设计?
    命中率怎么统计?
    缓存怎么置换等?

    问题一:SSD、内存和 L1 Cache 相比速度差多少倍?

    答: 因为内存比 SSD 快 10-1000 倍,L1 Cache 比内存快 100 倍左右。因此 L1 Cache 比 SSD 快了 1000~100000 倍。所以你有没有发现 SSD 的潜力很大,好的 SSD 已经接近内存了,只不过造价还略高。

    这个问题说明,不同的存储器之间性能差距很大,构造存储器分级很有意义,分级的目的是要构造缓存体系。

    问题二:假设有一个二维数组,总共有 1M 个条目,如果要遍历这个二维数组,应该逐行遍历还是逐列遍历?
    答:“先列后行”遍历发生的页面交换次数要比“先行后列”多,且cache命中率相对较低。例如对于int b[128][1024];假设内存页大小为4096字节,该数组每行正好占据一个内存页的空间,若按先行后列遍历,外层循环每走一行,内层走过1024个元素正好一页,没发生页面调度,遍历完整个数组页面调度次数最多为128次;若按先列后行,则每遍历一个元素,都发生一次页面调度,因为列上每个元素位于同行内(不同页),遍历整个数组页面调度次数可能达到1024*128次;实际中由于物理内存足够,调度次数会减少很多.

    展开全文
  • 存储器六个层级结构

    2021-08-15 19:52:24
    在人脑的世界里,海马体是负责存储和学习的,而在计算机里,存储器就是计算机的“海马体”,可以说,存储器的性能直接影响计算机的综合性能,是不可或缺的一部分。 存储器是用来存储计算机信息的,且是电脑系统不可...

            在计算机时代,计算机成为仅次于人脑的一个存在。在人脑的世界里,海马体是负责存储和学习的,而在计算机里,存储器就是计算机的“海马体”,可以说,存储器的性能直接影响计算机的综合性能,是不可或缺的一部分。

            存储器是用来存储计算机信息的,且是电脑系统不可或缺的组成部分之一。电脑中的存储器大致可划分两大类:一类是主存,即内存;另一类是辅存,即外存二者的重要区别之一,就在于他们CPU之间的物理连接方法不同。与CPU地址线直接相连的存储器就是内存,而通过接口与CPU间接相连的存储器就是外存。

            存储器六个层级结构: 寄存器高速缓存主存储器磁盘存储固定磁盘可移动存储介质

    寄存器访问速度最快,能与CPU协调工作,但价格昂贵,容量不大。用途:寄存器用于加速存储器的访问速度,如用寄存器存放操作数,或作地址寄存器加快地址转换速度。

    高速缓存容量大于或远大于寄存器,但小于内存,访问速度高于主内存器。根据程序局部性原理,将主存中一些经常访问的信息存放在高速缓存中,减少访问主存储器的次数,可大幅度提高程序执行速度。通常,进程的程序和数据存放在主存,每当使用时,被临时复制到高速缓存中,当CPU访问一组特定信息时,首先检查它是否在高速缓存中,如果已存在,则直接取出使用,否则,从主存中读取信息。有的计算机系统设置了两级或多级高速缓存,一级缓存速度最高,容量小;二级缓存容量稍大,速度稍慢。

    主存储器是计算机系统中的一个主要部件,用于保存进程运行时的程序和数据,CPU的控制部件只能从主存储器中取得指令和数据,数据能够从主存储器中读取并将他们装入到寄存器中,或者从寄存器存入到主存储器,CPU与外围设备交换的信息一般也依托于主存储器地址空间。但是,主存储器的访问速度远低于CPU执行指令的速度,于是引入了寄存器和高速缓存。

    磁盘缓存,磁盘的IO速度远低于对主存的访问速度,因此将频繁使用的一部分磁盘数据和信息暂时存放在磁盘缓存中,可减少访问磁盘的次数,磁盘缓存本身并不是一种实际存在的存储介质,它依托于固定磁盘,提供对主存储器空间的扩充,即利用主存中的存储空间,来暂存从磁盘中读出或写入的信息。主存可以看做是辅存的高速缓存,因为,辅存中的数据必须复制到主存方能使用,反之,数据也必须先存在主存中,才能输出到辅存。

    展开全文
  • 不管怎样,作为程序员我还是强烈建议大家多阅读原理性的书籍,例如《深入理解计算机系统》。。。 本节梳理下存储相关的知识点。 1、存储分类 (1)寄存器 ...(1)一个存储器层次结构的示意图 (...
  • 存储器的分类和结构层次

    千次阅读 2019-10-12 22:26:52
    文章目录存储器的分类按照存储介质分类按存取方式分类按在计算机中的作用分类存储器结构层次 存储器的分类 按照存储介质分类 半导体存储器 磁表面存储器 磁芯存储器 光盘存储器 ​ 半导体存储器 按其...
  • 存储器分级策略

    2020-10-24 10:49:48
    拉钩教育 重学操作系统 05 | 存储器分级:L1 Cache 比内存和 SSD 快多少倍? 部分片段 为什么会有存储器分级策略? 要想弄清楚存储器分级策略。 首先,你要弄清楚,“我们希望存储器是什么样子的”,也就是“我们的...
  • 存储容量应确保各种应用的需要,存储器速度应尽量与CPU的速度相匹配并支持I/O操作,存储器的价格应比较合理。但是存储器的速度越快,则每位的价格就越高;存储器的容量越大,则存储器的速度就越慢。按照目前的技术...
  • 存储器的层次结构 三级——cpu寄存器+主存+辅存 计算机系统内部的数据需要通过主存放入cpu寄存器进行操作,而外部的数据需要通过辅存放入主存当中进而在进行相关操作 六级——寄存器+高速缓存器+主存+磁盘缓存+磁盘+...
  • 计算机存储器结构体系详解

    万次阅读 多人点赞 2018-05-26 17:47:52
    因为价格的限制,我们在存储器中,就得有个恰当的搭配,以达到价格与性能的平衡。在前面那些大神的不断努力之后,弄出了很多种材料,不同的存储器,最后,得到了下面这张图。 在以前还在的学校的时候,我长期被...
  • 计算机组成原理-存储器分级

    千次阅读 2013-11-05 23:56:35
    多级存储器体系结构: 内存储器: 特点:CPU能够直接访问的存储器分类: 高速缓冲存储器(CPU内的寄存器) 特点: 高速小容量半导体存储器 作用: 快速存取,以便使存取速度和CPU的运算速度相...
  • 到目前我们只看到了一个简化的计算机系统模型,其中CPU执行指令,而存储器系统为CPU存放指令和数据,实际上存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。CPU寄存器保存最常用的数据;靠近CPU...
  • 在本章中,我们会先了解存储技术(SRAM\DRAM\ROM\旋转固态硬盘),描述这些存储器是如何被组织成层次结构的。接下来会谈到什么是拥有良好局部性的程序以及编写这样的程序需要注意的问题。然后我们开始探究本质,为...
  • 1、为什么会有存储器分级策略? 2、存储器分级策略 2.1 存储器的级别 2.2.1 L1-Cache 2.2.2 L2-Cache 2.2.3 L3-Cache 3、内存 4、SSD 和硬盘 5、缓存条目结构 6、指令的预读 7、缓存的命中率 8、缓存置换...
  • 《CSAPP》 6.3 存储器层次结构 文章目录1、存储器层次结构1)中心思想2)缓存的原理2、缓存命中和不命中解答:为什么有良好局部性的程序通常比局部性差的程序运行得更快?参考 1、存储器层次结构 右边的文字是表示...
  • 行业分类-设备装置-可主动回写的分级指令存储器结构容错方法和装置
  • 3.2存储器层次结构

    2017-08-25 14:02:00
    存储器层次结构 6.1 存储技术 6.2 局部性 6.3 存储器层次结构 6.4 高速缓存存储器 6.5 编写高速缓存友好的代码 6.7 小结 6.8 关于磁盘的补充讲解  好的程序代码不仅要有好的算法,对计算机硬件的充分利用也是很关键...
  • 对于操作系统,我们知道,越靠近CPU的存储器,其存储速度就会越来越快,如果将整个存储系统视作一个金字塔,CPU作为塔顶,那么从上到下,访问速度会越来越慢,但存储容量越来越大,价格越来越低,按照常用的存储系统...
  • 由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓存+内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的...
  • 计算机存储器的层次

    2016-11-16 23:40:27
    由于硬件技术的限制,我们可以制造出容量很小但很快的存储器,也可以制造出容量很大但很慢的存储器,但不可能两边的好处都占着,不可能制造出访问速度又快容量又大的存储器。因此,现代计算机都把存储器分成若干级,...
  • 存储器层次结构

    千次阅读 2015-01-27 11:01:24
    存储器层次结构  好的程序代码不仅要有好的算法,对计算机硬件的充分利用也是很关键的一步。  存储器系统(memorysystem)是一个具有不同容量、成本和访问时间的存储设备的层次结构。CPU寄存器保存着最常用的数据。...
  • 机组复习之 存储器分层体系

    千次阅读 2019-03-13 17:28:43
    一、存储器概述 (一)存储器的分类 1、按存储元件分类:半导体存储器、磁表面存储器、光盘存储器 2、按存取方式分类:随机存取存储器、顺序存取存储器、直接存取存储器,相联存储器; 3、按信息的可更改性分类...
  • 来源 | 小林coding责编| 寇雪芹头图|下载于视觉中国前言大家如果想自己组装电脑的话,肯定需要购买一个 CPU,但是存储器方面的设备,分类比较多,那我们肯定不能只买一种存储器,...
  • 文章目录存储器概述存储器分类按存储介质区分按存取方式分按存储器读写功能分按信息的可保存性分按在计算机系统中的作用分存储器分级结构高速缓冲存储器(CACHE)主存储器外存储器存储器的基本构成半导体存储器芯片...
  • 存储器的层次结构:   存储器是分层次的,离CPU越近的存储器,速度越快,每字节的成本越高,同时容量也越小。寄存器速度最快,离CPU最近,成本最高,所以个数容量有限,其次是高速缓存(缓存也是分级,有L1,L2,...
  • 文章目录存储器简介数据存储介质的分类按照存储方式分类按照信息保存时间分类按照功能或存储体系的分层结构分类衡量性能指标存储容量存取周期可靠性性能价格比 存储器简介 存储器分为两种: 内存储器或主存储器。...
  • 存储器

    2019-07-05 17:30:16
    存储器:由存储体以及能访问存储体的地址译码及读写控制电路组成。 存储器的分类 1按存储介质分: 半导体存储 磁表面存储(如磁盘和磁带) 2按存取方式分: 随机存储器(半导体存储器都是随机存储器) 顺序存储器...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,859
精华内容 1,143
关键字:

存储器分级结构