第二章 存储系统

上一章只是简简单单的讲了计算机是怎么运行的,从这章开始,就要进行系统的学习计算机的每一个系统了,那么第二章讲的就是存储系统。

2.1 存储系统概述

存储系统就是计算机存储程序和数据的系统,由各种存储设备和控制部件及管理信息调度的硬件和软件组成,具有存入和取出两大功能。

2.2.1 存储体系

现代的计算机需要满足大容量,高速度和低成本三项要求。但是,大容量的便宜运算速慢。运算速度快的储存元件运算速度快但是价格大,存储内容小。于是为了满足现代计算机的要求,采用了分层存储体系。把各种不同存储容量,不同存取速度,不同价格的存储器组合在一起。发挥它们最大的优势。

它们之间的信息调度是由辅助硬件或者软件直接完成的。能发挥整个存储系统的最大效能,有最佳的性价比。

当然最主要的是它的工作原理:

cpu先访问运行速度最快的存储器,如果找到了返回,没有则通过管理软件或者辅助硬件向下一级运算速度较慢存储器中寻找。找到则返回内容,如果还没有则到运算速度更慢的存储器中寻找比如硬盘,直到找到。没有找到的化,则返回失败。找到了,则把内容逐渐上调。

这里同时也要注意,在cpu和主存之间有一个高速缓冲存储器,用来提高CPU的访问速度。这个是由纯硬件实现。而在主存和辅存之间采用虚拟存储技术,由软件和硬件共同实现,扩充容量。同时,CAche的容量很小,只有几兆字节,用来存放临时数据和指令。而主存的容量有几G字节,速度稍微慢点。辅存是最大的,用来存放系统程序和大型文件和数据库等,运行速度是最慢的。

2.1.2 存储器分类

1,按照构成存储器的器件和存储介质分类可分为磁介质存储器,电子介质存储器,纸介质存储器等。目前主要用的是磁介质存储器。

2,按存取方式分类可分为随机存储器RAM,只读存储器ROM和串行存储器SAM。

3,按制造工艺来分可分为双极性存储器和金属氧化物半导体存储器。

4,按照计算机的作用来分类的化,存储器又可分为主存储器,辅存储器和缓存。

5,按信息的可保护性分类又可分为易失性存储器和非易失性存储器。这里简单说一下,易失性存储器就是断了电没法保存信息了,主要应用于主存。而非易失性就是断了电还能保存,就是硬盘啥的。

具体分类大家自己再去网上查一下。

2.1.3 存储器的主要性能指标

说到这个,大家可以去前面我写的文章里查看一下CPU的性能指标都是啥,下面来介绍一下存储器的性能指标。

1,存储器的存取时间

从存储器中读出或者写入一个存储单元的信息所需要的平均时间叫存储器的存取时间,从字面意思上就已经好理解了。

2,存储器存取周期

存储器进行一次完整的读写操作所需要的全部时间叫存取周期。举个例子,就是说老师第一节课45分钟休息10分钟,那么上课(存取)时间就是45分钟,上课周期(存取周期)也就是55分钟。周期是这一个操作完成到下一个操作开始中间所间隔的时间。

3,数据传输率

单位时间可写入存储器或从存储器取出的信息的最大数量称为“数据传输率”或者“存储器的传输带宽”,单位为字节/秒(B/s,Bps)或位/秒(b/s,bps)。举个例子简单的了解一下,

某存储器数据传输率BW,存储周期Tm,存储器主频F,每次访问读写n个字节,则

存储器主频:F=1/Tm

存储器带宽:BW=n/Tm=n*F

当然还有一些其他指标,比如价格啊啥的,最主要的就是以上三个指标。

2.2 主存储器

2.2.1 主存储器的基本组成

1,主存储器的组成部分

①存储阵列,就是存储单元集合在一起

②地址译码与驱动器,驱动地址译码器翻译从CPU传来的地址并选中某一单元

③读写电路,对你选中的那个存储单元进行读或者写操作

④控制部件,控制操作的顺序。

2,存储器的组成结构

主存储器主要有两种基本组成结构:字片式结构和位片式结构

(1)字片式结构

它是一种采用单译码方式的结构,访存地址只进行一个方向的译码。具体请看下图

我解释一下它是怎么进行读出存取的,CPU先发出指令000010,也就是A0-A5,然后放到寄存器里面,当控制信号过来了告诉它可以进行编译了,放入地址寄存器的地址译码器开始进行译码,然后在W0-W63中选到了W1,因为这是个字片式结构所以它只能选一个方向,图中的就是行方向,然后把w1这一行里面所有的存储单元全部取出一共是8位一个字节,传给读写电路。

(2)位片式结构,这一个就很好一点它是双译码方式的结构,需要对列地址和行地址(这个是cpu主动分配的)两个方向进行译码,选中行和列交叉处的存储单元被唯一选中具体请看图

它是怎样寻找存储单元的呢,首先CPU发出000100 100101分别对应A0-A5和A6-A11,都放入它们对应的寄存器里面。然后,cpu控制信号来了,地址译码器分别对行地址和列地址进行译码,然后分别选中某一行和某一列,然后这行和列交叉的存储单元就被放入读写电路。只有1位。

2.2.2 RAM

我们规定AB=10为1,AB=01为0

1,SRAM 无需刷新

这个就是SRAM。我给大家解释一下,SRAM是由双稳态触发器构成,靠mos管存储信息。

像T5,T6那就是mos管,上面一通电,下面就可以有电流流过。那么它是怎么进行读和写的呢。

读:X,Y地址选中,T5T6通电,电流打通

1)若存的是“1”AB=10则T2通,有电流传导,到D非进而到I/O非然后右侧有脉冲表示1

2)若存的是“0”,AB=01则T1通,左侧有电流传到到D,进而到I/O,左侧有脉冲,表示0

写:写就容易多了,X地址和Y地址选中,强行打入高电平和低电平,假设T2为高电平T1为低电平表示为10为1然后你要写0即01那么你就直接在I/O和I/O非端进行输入电平信号强行改变即可。

2,DRAM需要刷新

它没有SRAM那么复杂,没有那么多mos管,造价比较便宜,是由电容和少量mos管组成

读:读选择线选中通入电流,T2导通,然后预充电信号给出T4也导通,如果Cg里面有电荷那么读数据线就会有电流,如果里面没有,那么读数据线就没有电流。由此可以判断是否为0或1.我们可以看到这个读会破坏Cg里面的电荷,所有这是破坏性的读。需要不断刷新来维持里面数据的正确性,同时还有一个理由就是cg会随着时间久慢慢放电,所以需要不断地刷新来维持数据。

写:先是写选择线选入,T3导通,如果写1,则在写数据线通入电流给Cg充电,如果写0,则不充,反之放电把里面的电荷放光。

当然,还有更简单的DRAM

只用两个mos管和一个Cg

读:X地址和Y地址被选中,T和T'导通,如果cg里面有电则i/o会检测到电流,为1.若没有检测到电流说明里面没有电荷为0.我们可以看出,他也是一个破坏性的读操作,也需要不断地刷新。

写:T和T’导通,i/o给电流,充电为1,不给电流,则放电为0

当然,最重要的是刷新操作,刷新总共有三种方式,集中刷新,分散刷新和异步刷新

集中刷新:集中刷新是在信息保存的允许范围内,集中一段时间对所有的基本存储单元一行一行地顺序刷新,这段时间称为刷新时间。

刷新时间=存储矩阵行数×存储周期(刷新一行所需要的时间)

举个例子,一共有128行,刷新周期为2ms就是说要在2ms内完成读写和刷新所有操作。假如一次读写是0.5us那么128行刷新就需要64us,且只有1936us用来读写。那么在那64us内就不能进行读写了,这就变成了死时间。虽然读写操作不受刷新工作的影响,但是在那死时间内必须停止读写。

分散刷新:每隔一段时间刷新一次,把刷新操作分散到每个存取周期内进行,此时系统的存取周期tc被分为两段,前断ta进行读写操作和保持,后断tb进行刷新即tc=ta+tb,刷新操作与CPU操作无关。

举个例子,若ta=0.5us那么tc就是0.5+0.5=1us对128行进行存储的化刷新周期为128秒,虽然没有死时间但是存取周期太长,读取写入太慢。而且刷新时间过于频繁。

异步刷新:是结合前两种刷新方式。就是说,根据刷新的行数对刷新间隔进行分割,分割后的每段时间中,再分成两部分前一段时间用来读写或者保持。后一段时间用来刷新。

举个例子,刷新间隔为2ms,当行数为128时每隔2ms/128=15.6us就刷新一行,而每次刷新的时间仍然是0.5us这样死时间就只有0.5us了。异步刷新虽然减少了刷新次数但是仍然有死区,但比集中刷新少了很多。

2.2.3 ROM

ROM大家就自行上百度进行搜索了解,并不为重点,简单的了解一下即可。

2.2.3 半导体存储容量的扩展

1,半导体存储容量扩展需要考虑的问题

我们知道CPU从存储器中进行读写操作时,先给出地址到存储芯片上,然后进行信息交换,但是一个单片存储器的容量是有限的,需要许多片来进行组合才能成为一定容量的存储器。但是这么多存储片怎么通过地址来查找到正确的存储片进而在这个存储片中寻找到单元呢,于是就有了地址译码实现片选,进而寻找正确的存储单元。它主要有三种方法有线选法,全译码法和部分译码法。下面我们一个一个的进行讲解

1)线选法:直接将某些高位地址线连接到存储芯片的片选端,当该地址线为0或者1时就选中该芯片,即用一根地址线选通一块芯片。

下面请看一个例子

【例】某微机系统的地址位为16位,选用256×8的ROM和RAM存储器芯片各一片扩展为512B存储器

这里我给大家解释一下,因为这个微机系统的地址为16位所以其地址为A0-A15比如0000 0000 0101 1011,加入我用A15作为标志,若A15为1选中第一个,A15为0选中第二个,这个就是进行片选,选中哪一个芯片,然后A0-A7就是片内选,在这个芯片中选中哪一个存储单元。但是,这里A8-A14没有进行译码,比如0000 0100 1010 1101 和0000 101011010 1101因为该译码方式只译码A0-A7和A15,所以这两个地址码对于内存都是一样的。这就发生了地址重叠。

为了避免发生地址重叠,我们就用全译码方法

2)全译码法

全译码法是对全部地址线进行译码,将地址的低位直接接到存储器芯片的地址端,实现片内选址;将剩余的高位全部接译码器的输入端,经译码器后做输出并进行片选,实现片选寻址。

【例】某十六位微机系统扩展2kBRAM和2kBROM,用1K×8的芯片,地址安排在64K空间的最低4K位置。

解释一下,比如俩地址A0-A15,这回我要它们全部进行译码,其中A0-A9用来进行片内寻址,A10-A15进行片选寻址,这样每一个地址都没有浪费,而且也不会发生地址重叠,比如1010 0100 1100 1110和1101 0100 1100 1110 那么前面六位1010 01和1101 01进行片选将它们放入地址译码器中用来进行片选选取哪个芯片,而后面的00 1100 1110和00 1100 1110 用来对选中那个芯片进行片内选址,在这个芯片里选取正确的单元。虽然很好,但是电路太过于复杂。

3)部分译码法

这个就是前面两个的结合体不要求提供CPU可寻址的全部单元,则用两者结合的方法。将高位地址的部分地址线参加译码,一部分不参加译码,所以会出现地址重叠。但不是很多

【例】CPU地址总线为16位,存储器由4片8容量为8kB的芯片构成,采用部分译码寻址32KB。

有了上面两个例子的理解,这个例子就会好理解很多,A13-A14进行片间寻址,A0-A12就是片内寻址寻找正确的存储单元。其中A15不参加译码。由此可见还是会存在地址重叠但是不是很多。

2,半导体存储器的扩展方式

扩展半导体存储器的容量有三种方式:位扩展方式和字扩展方式和字位扩展方式。这里字位同时扩展就需要先进行位扩展再进行字扩展。给大家画张图来理解一下

因为位比较好扩展所以先进行位扩展然后再进行字扩展。

存储器芯片的容量个数由以下公式得出:

存储器芯片数量=(存储器总的单元数×位数/单元)/(每片存储芯片的单元数×位数/单元)

1)位扩展方式 当芯片的单元数与存储器要求的单元数一致,比如我要128个字节就有128个字节了但是位数我要16位你只给我8位那么我必须要进行位扩展。其连接的方式就是:将所有的芯片地址线,片选信号和读写控制线并联,数据线单独列出,分别连接CPU数据线的对应位。

【例】 用2114(1K×4)芯片构建1kB的半导体存储器。

先确定存储芯片的数量,运用那个公式,1K×8/1K×4=2于是就是要两片芯片,然后进行如图连接即可

2)字扩展方式

当所需位数相同但是我的芯片容量不够,可以用足够多的存储芯片扩展单元来进行组合达到要求。比如我需要128K×8个字节但是我一个芯片是64×8个字节于是我只能用两个芯片进行连接。

【例】用6116(2K×8)芯片构建8KB的半导体存储器。

套用公式需要4片

3)字位扩展方式,当你所需要的位数也不够字节数也不够那么我们必须两个方面都进行扩展才能满足要求。

【例】CPU地址总线为16位,用SRAM(1K×4)芯片构成4K×8位存储器,画出连接图,并写出地址分配表。

首先我们要确定需要多少个芯片

存储器芯片数量=(存储器总的单元数×位数/单元)/(每片存储芯片的单元数×位数/单元)

即(4K×8)/(1k×4)=8需要8片那么连接如图

地址分配表如下图:


更:

前面讲的就是一些存储器的东西,但是为了提高速度除了提高主存的绝对速度之外还有一种就是通过改变主存的结构进行,提高其相对速度。

2.5.5 并行存储技术

1,单体多字系统

首先看图:

因为程序和数据在存储体内是连续存放的,因此CPU访存信息也是连续的,所以主存将一个地址给过去可以把周围所有的数据都给拿出去,传输出去。这样一下子可以拿出4个w位的数据。但是这有一个坏处,就是你要确保这里的指令和数据在主存内都是连续存储的,一旦遇到转移指令,或者操作数的存放不连续,那么该方案就失去提速的效果。

2,多体并行系统

它由多个能够独立操作的模块构成,称为“多模块存储器”,每个模块包括独立的存储器地址寄存器MAR,存储数据寄存器MDR,读写电路和存储体。它有两种编址方式

1)高位交叉编址

主存地址被分为高n位和低m位,高n位为模块地址,低m位为块内地址;在一个模块内,信息从低地址连续存放,连续单元存取一般只对一个模块进行存取。它的运行速度很慢,但是比较容易扩充

T为存取一个字所需要的时间,t为总线传输周期,m为模块数

它连续读取m个字所需要的时间为

t2=mT

2)低位交叉编址

和上面的正好相反,它的是低位m表示模块地址,高位n表示块内地址,对连续单元进行存放时多个模块并行工作,怎么说呢就是你要取一个连续存储空间的数据,比如00 0000-00 0011内的数据,这四个同时工作,但是如果你要用高位编址的话,那就只有一个在工作,大大地提高了速度。

T为存取一个字所需要的时间,t为总线传输周期,m为模块数

它连续读取m个字所需要的时间为

t2=T+(m-1)*t

2.3 高速缓冲存储器

这个东西你这样理解,一般CPU10ns就可以执行一条指令,而主存呢60-120ns才可以访问一次,这就造成了当cpu急着干活嘞,你主存不把工作给它。于是缓冲器就出现了,它是介于主存和cpu之间的一个由纯硬件实现的东西。它的读取速度很快,它先把主存里的那些常用的数据和指令都放在里面,这样cpu就先从缓冲器里面找指令,然后执行,与此同时不断地更新缓冲器里面的内容。它就相当于主存的副本,一些常用的指令数据副本。

2.3.1 CACHE的基本工作原理

1,程序访问的局部性原理

提供它的目的就是让其适应CPU的存取速度,即一定时间内,被访问的指令和数据集中一部分。它包括两个方面:

1)时间局部性:就是说现在达到访问数据或者指令将来可能还会被访问,就是循环程序

2)空间局部性:如果一个存储单元被访问那么它相邻的存储单元有可能也会被访问这就因为其中大部分指令是顺序存储的,顺序执行的且数据也是由数组,树等结构簇聚在一起。

2,cache——主存存储空间结构

你这样看这个图,先看主存地址,它的主存块号是不是有m位,那就说明他有2^m

个字块,你再看块内地址,是不是有b位那就说明有2^b个字,那么主存就是有2^m×2^b个字

你看cache的,有c位缓存块号,那么它就有2^c个字块,和主存一样一个字块里有2^b个字,它就有2^c×2^b个字,这样我们可以看出c<<m的,毕竟主存的字块比cache的字块多啊。

3,cache的基本结构

它主要有cache存储体,主存-cache地址映像变换机构和替换控制部件部分组成。

我来一一解释下

1)cache存储体,就是上面我讲的字块和一个块里有多少个字,说白了就是cache里面有多少个字。

2)主存-cache地址映像变换机构:怎么把主存的块地址,块里的字地址和cache里面的块地址和字地址一一对应起来。

3)替换控制部件:采取一定的策略进行数据替换,并修改地址变换机构。

4,cache的工作机制

1)读操作

首先CPU发出读请求后先给cache,看里面有没有即有没有命中,若命中直接读,没有的话去访问主存,并把该字所在的主存字块传给Cache,如果cache满了,那么就调用替换算法,腾出空位把新的主存块调入。

2)写操作

这个就有点难了,因为是对cache进行写操作,那么你也要把主存里面的内容也要写了,不然当程序下回再访问这个地址的时候就会出错,它有两种方法

①写直达法,就是同时把cache和主存里面的内容都进行改写。如果这样,那还要cache干什么,我直接访问主存不就好了吗。于是就有了下面这种。

②写回法,它是先把数据写入cache而不是先写入主存,当cache数据被替换出去的时候才写回主存,写操作时间就是访问cache的时间。就是在cache中每一块设置一个修改位,如果它被读出了,修改位改变,就把它写入主存。

这两种方法与在哪种场合下有关。

2.3.2 cache-主存地址映像与变换

终于到大头了,这是最难也是最重要的一点,为了把主存里面的字块和cache里面的字块进行对应,就出现了cache-主存地址映像与变换,按照映像关系装入cache里面,执行程序时应将主存地址变换成cache地址。

它有三种映像方式全相联映像,直接映像和组相连映像等。

1,全相连映像

就是允许主存里面的每一块映像到cache里面的任何一块,这里大家要明白,这个映像并不是和cache里面的块数一一对应,而是将主存的高m位和cache里面的c位进行比较,并通过这个硬件给cpu发送正确的字块并进一步发送块内的某一个单元

在这里最重要的是那个目录表,它是比较的灵魂部件,将正确的cache字块传给cpu。

它虽然优点灵活但是访问速度太慢

2,直接映像

直接映像的方式就是主存的每一个字块只能映像到cache中一个固定的字块位置,即i=j mod C或i=j mod 2^c其中i是cache块号,j是主存块号,C=2^c为cache的块数。

说白了和哈希表没啥区别,就是通过取余的方法来判断这个主存的块应该和cache里面的哪个块对应。这里可能大家就有疑惑了,怎么知道自己所要查的块数是不是自己想要的呢?这个就要通过标记,比如14和04最后一位都是4那怎么区分呢,就是看前面那一位这个也是,把主存的t位(看图)放入比较器中进行和cache里面所有字块的标记数进行比较,如果有则返回对应的字块。

这个就是相当于把前t个位置和cache里的标记进行比较了,直接返回我所要的对应cache块。

这里给大家一个例题:

【例】假设主存容量为512kB,cache的容量为4KB,每个字块为16个字,每个字32位,存储单元按字节编址。问:

1)cache里地址有多少位?可容纳多少块?

2)主存地址有多少位?可容纳多少块?

3)直接映像方式下,主存地址字段各段的位数为多少?

解:1)4KB=2^12所以有12位地址线,

每个字4个B,16个字就是64B,2^12B/64B=64

所以有64块

2)同理一个字块64B

512KB/64B=8192块

3)主存容量为

512KB=2^19B

有19位地址线,且每个字块为16个字,每个字有4个字节一共有16×4=64个字节

所以字块内地址有2+4=6,cache地址也有6位,剩下的就是主存字块标记为19-6-6=7有7位。


码字不易,希望大家点赞,收藏,关注,三连击。我会一直持续更新,帮助大家更好的学习计算机组成原理。当然,如果有不正确的地方,非常乐意接受大家的批评指正。感谢!

民权资讯网傲世狂妃全文免费阅读令字辈起名男孩商丘到金乡如何正确对待周易与占卜配送公司起个名字吧郑州关键词seo排名给刚出生小男孩起名字十大未解之谜世界十大未解之金木水火土起名大全免费展示设计作品集网站周易解说视频千明周易八字批算起来个园林公司名字大全周易算命生辰八字起名农业合作社怎么起名营口外贸网站优化seo培训学校哪家好咸宁设计网站学seo的好处平面设计工作室网站张家界优化网站宝宝名字八字起名flashplayer100755是哪里的区号聊城网络营销推广公司深圳seo学习班冬天女宝宝起名关于古诗作文青岛公司起名报价金玛梦解玄机寺少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

民权资讯网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化