2023-06-01 05:55:17
CPU通过总线,和系统中各部分组件相连接。和它连接的硬件,其中就有一组由各部分组件构成的一个存储系统。此外还有其他通过“接口”和总线相连接的外设。接口中有着一些可编程部分,它们负责统一总线通信协议。
BIOS存储在一个固化的存储芯片中,负责引导系统开机。引导系统加载后,它跳转到系统的内存位置,结束任务。操作系统则负责加载自己的其余部分。
在这个过程中,CPU先从Flash取指令,再从主存MM中取指令,其中也会从硬盘加载指令来执行。
系统的存储体系属于金字塔型多级结构。从寄存器到Cache,MM,ROM,磁盘,设备的存储速度逐步下降,价格也逐步下降,存储空间也逐步增加。而这整个体系对于CPU而言是一个完整的体系,它们具有寄存器的速度,也具有磁盘的大容量。这就是依靠存储体系实现的。典型的存储体系是一个三层结构。
存储器的三大要求:大容量、高速度、低成本。这三者往往是矛盾的。
本章的重点是Cache部分
CPU中的寄存器一般使用触发器实现。它集成度最低,容量最小,但是速度也最快。Cache使用SRAM实现,MM使用DRAM实现,BIOS使用ROM实现,辅存使用HDD实现,还有其他脱机存储器,比如磁带,光盘等。
现在,CPU内部的Cache也有多级缓存结构,例如L1 Cache,L2 Cache,L3 Cache。
系统的总线分为北桥和南桥,前者速度比较快,跟CPU相连更近;后者离CPU更远,因此更慢。不过现在南北桥已经集成到SoC(System on Chip)了,两个已经合成一个芯片。
一般存储体系有两种:
透明的说法在这些计算机的书里很流行,它的意思不是说可见,而是说它本身和一块玻璃一样,不可被看见。
分类标准:介质、用途、信息易失性、存取方式(随机,例如RAM;顺序访问,例如顺序存取存储器SAM,直接存取存储器DAM)、读写功能(读写,只读)。
也可以如下分类:
容量、速度(存取时间;存取周期;存储器带宽,单位时间存储器可以读出/写入的字节数,\(B_m=\frac{n}{t_m}\),分子是每次读写字节数,分母是存取周期)、可靠性、功耗、价格、体积、重量、封装方式、工作电压、环境条件等。
由6个晶体管实现,只要不断电,信息不丢失。初始加电,状态随机。电路中总有晶体管导通,功耗大,集成度不高。 2. 动态读写存储器DRAM
四个晶体管实现。内部由电容维持电荷,因此需要定时读取刷新来保持数据。功耗低,集成度高。现在更新的DRAM可以只用一个晶体管和一个电容来实现,因此可以有更高的集成度。通过SenseAMP,可以根据电压变化来刷新存储器的内容。
3. 内存构成
1. 单片存储器芯片的连接
引脚定义:Dn是数据线,An是地址线,OE是读开关,WE是写开关,CS是控制开关,也就是片选端口。
连接方式如图所示,特殊的部分主要集中在片选端口上。这部分电路叫做内存地址译码电路,它负责选择不同的芯片。注意,上划线的是低电平有效端口。
这里的重点就是地址范围分析。这个很简单,只需要让CS为低电平的信号作为高位,再去看低12位的地址总线就能看出来地址范围了。比如,下图的地址范围就是F0000H~F1FFFH这个地址范围。
2. 内存的字扩展
使用\(8K*8bit\)的SRAM去构成32KB的内存,只需要让二者的位数对应上就行。比如这里就只需要4个这种规格的SRAM芯片。如下所示:
所有芯片的Dn和An、OE、WE都并联。而CS则由74138控制片选情况。这时就可以分析得到,从上到下四个芯片的地址范围分别是C0000C1FFF,C2000C3FFF,C4000C5FFF,C6000C7FFF。这称为字扩展。
3. 内存的位扩展
例如,用\(2K*4bit\)的存储芯片构成\(2K*8bit\)的存储芯片。这种接法如下图所示:
也是用74138去进行片选,同时BHE也需要控制。
这里经常会有内存范围的计算。计算地址范围的大小时,记得大地址减去小地址后加一。例如78000H到97FFFH,计算时就应该是用\(98000H-78000H=20000H\),也就是\(2^{17}\)字节(一般都是按字节编址),因此需要\((2^{17}\div 2^{10})KB\div 2KB=64\)片这样的芯片。
可以参考这个例题食用:
无论读写,地址都需要分两次来送。第一次时,给RAS一个下降沿,第二次,给CAS一个下降沿,来让芯片读取这两个地址。得到地址之后,芯片把数据送出数据线。这和如今的DRAM芯片一致。它每隔2ms刷新一次。只需要给RAS一个下降沿,就能刷新一行的DRAM。
这里可能会考到引脚相关的问题,如下所示:
DDR SDRAM:上升和下降沿都能读写数据。
它的用途有:Cache的目录表、页表的块表(TLB)等。
它是实现金字塔型存储体系的关键所在。它可以将上一部分频繁使用的部分存放在其中,以此来提高性能(这是因为它本身的速度就很快)。
局部性原理:时间/空间局部性,相关的变量,会在时间/空间上存在局部性比如循环变量,会存在时间局部性;相邻的数组元素,存在空间局部性
上面是Cache的作用:命中的话,直接使用;未命中Cache,则访问主存,并改动Cache。这一步得注意,由于Cache存在,就出现了数据不一致性,因此得控制好数据写回时机来保证数据一致性。
映射方式一般有三种:全相联、直接映射、组相联。
这样的好处就是,不用相联存储器,访问速度也快(不需要地址变换)。不过缺点也很明显:Cache块利用率低,块冲突概率高。特别是,如果主存存储的变量具有空间相关性(比如数组),那这一个Cache位置几乎每次访问都不会命中了。
它是前两者的折中,优点是提高了利用率,降低了冲突率,也大幅降低了失效比率。但是问题是制造成本和难度上升了。
做题时,要解决Cache分块,只需要把主存地址按照每个编号类型的长度来划分就行。
直接映射不需要替换算法。全相联、组相联有如下几种替换算法:
关于一致性问题有两种策略:写回法,只有Cache被替换时才将它写回;全写/写直达法,写入Cache时顺便写入主存,如果未命中,则直接写主存,然后根据WTWA/WTNWA(写分配/不分配法)来决定是否将块取到Cache。前一种方法高性能,后一种主存一致性好。
其中,\(T_C\)和\(T_M\)分别是Cache和主存的访问周期,数据块装入Cache的时间是\(T_B\),Cache的命中率为\(H\)。当命中率很高时,\(T_A \to T_C\)。
上面的两个等式,对应的分别是1,2两种情况。第二个式子的考量就是,如果没有命中缓存,则耗时为缓存装入时间加上缓存访问时间。
例如,假设\(H=95\%,T_M=100ns,T_C=10ns\),则可得\(T_A=14.5ns,S_P=6.9\)。其中的\(S_P\)就是加速比,定义为\(S_P=\frac{T_M}{T_A}\)。
\(C=(C_1\times S_1+C_2\times S_2)/(S_1+S_2)\),也就是主存价格*主存容量+缓存价格*缓存容量
命中率与Cache容量的关系: \(H=1-S^{-0.5}\)
这给出了Cache容量的合理考虑区间。
未命中率(失效率):\(\text{总失效率}=\text{失效率}_\text{第一级} \times \text{失效率}_\text{第二级}\)
高速的主存容量不能满足要求,因此开发出了虚拟存储器(软件实现)。
CPU集成的:Cache,MMU等。这些为主存的实现提供了基础。
虚拟存储器=主存储器+外部存储器+辅助硬件(MMU)+系统软件(OS)。而虚拟地址得先转换成指向真实物理内存的物理地址才能拿来使用(地址转换)。
地址映像:全相联;地址变换:MMU。虚拟存储器相当于内存扩展的一种实现手段,通过将内存映像到磁盘上,模仿Cache的原理,以此扩大主存容量。
这其中涉及三种地址空间:
因地址映像和变换方法不同,存储方式分为段式存储、页式存储、段页式存储。
缺点有俩。一个是太慢了。因为得做两次运算;另一个是,页表太大了。
它的缺点很明显。当地址空间过大时,它的体积会很大。为了解决这个问题,出现了多级页表。
由于页表本身很大,因此引入了一个CPU内部的Cache用来存储TLB,而慢表存储在主存中。虚拟地址和Cache地址一样,也是把物理地址转化来得到的。每一个段的大小是4KB,页则是由若干个段构成。段有额外的位用于标记读写执行情况。段内有偏移,页内也有偏移。
注意:页/段页都是以页为基础单位来和磁盘交换数据的,只有段式是以段为单位和磁盘交换的。
页表级数为i,则\(\frac{2^P}{B_e}^i=2^V\),简化得:
\[ i=\frac{log_2 2^V}{log_2 2^P-log_2 B^e}=\frac{V}{P-log_2 B^e}=\frac{V}{P-N_e} \]
其中,\(V\)是虚页号的位数,\(P\)是页内偏移的位数,\(N_e\)是页表每一项需要几位编址。
磁盘特点: - 优点:存储容量大,单位价格低、记录介质可重复使用、可长期脱机保存、非破坏性读出 - 缺点:存取速度慢、机械结构复杂、工作环境要求高
记录方式,和计算机网络中的编码是相似的,有RZ,NRZ,NRZ1,FM,MFM,PM等:
这是磁盘的结构,一般民用磁盘大气压和外界一样的,高速旋转时,会在表面形成气垫,托起磁头。
结构方面,单个面分为一个一个的环,称为磁道(Tracks)。几个盘面上的同位置的磁道组合起来称为一个柱面(Cyinder)。磁盘上一个扇形区域称为一个扇区(Sectors)。
存储容量如上,有两种。早期为方便管理,将所有磁道等分为相同的扇区数。磁道外圈可靠性最高(因为外圈的词单元尺寸最大,所以最可靠),从外圈开始编号。
上面是2001年生产的硬盘参数,能从参数看出磁盘对加工精度的极高要求。下面是一个硬盘容量计算的例题。
受限于磁盘的物理原理,磁盘的随机访问性能相对比较差。因此,引入了磁盘阵列RAID。
这部分内容了解就行(
不了解也行
作用就是通过设置重复设备,来提高整体的性能和可靠性。详细可以看这本书:
RAID全称呼:独立冗余磁盘阵列(Redundant Array of Independent Disks)。不过刚开始I表示的是Inexpensive,廉价。
性能高,但是可靠性不高。并且需要至少两块硬盘。
不能并发读写
可以并发读取,不过不能并发写入。
了解就行