计算机存储系统简介
存储器系统是 不同容量,成本和访问时间的存储设备的层次结构。 包括最快的寄存器,高速缓存存储器和主存储器以及磁盘等。 随机访问存储器: 包括静态存储器和动态存储器(静态RAM和动态RAM), 静态RAM(SRAM): 采用双稳态的存储器单元,由六个晶体管电路实现,可以无限期的保持两个不同电压配置或者状态,常用语高速缓存动态RAM(DRAM): 使用电容的充电来存储记录,但是容易受到外界干扰,所以存储时间很短10-100毫秒,但是计算机处理速度在纳秒级别,所以对于计算机也够用了。 因为晶体管使用较少,所以造价更便宜,内存更大。常用语主存储器。DRAM: 一块常规的DRAM芯片: 一般被分成d个超单元,每个超单元包含w位, 如 一个 16*8 的芯片,表示一共有16个超单元,每个超单元存储8位,总计存储164位。 一般会给16个芯片组合成4*4的阵列。而计算机会根据 [i,j] 来定位哪个位置。 如 [2,1] 表示第3行第2个超单元,取出8位一个字节的内容。存储器模块:再往上组装,一般会 设置 8个 DRAM芯片 为一组, 如 8个 16*8的 芯片组成一组,8个芯片编号为0-7, 如果模块收到 取 [i,j]的位置的数据, 就会遍历8个芯片,每个芯片都取出 自己的 [i,j] 位置的一个字节数据,然后组装成 8*8一共64位的数据。从模块传出去。新技术: SDRAM: 同步DRAM, DDR SDRAM双倍数据速率同步DRAM等 都会使访问速度比原来更快。
8. 非易失性存储器: 如果断电:SRAM和DRAM都会丢失信息,是易失的。 虽然可以写,但是习惯称为只读存储器(ROM) 。 根据能够被重新编写的次数可以分为 可编程ROM 和 可擦写可编程ROM
9. 可编程ROM(PROM) : 是一种熔丝,只能存储一次10. 可擦写可编程(EPROM) : 是石英窗口,允许光到达存储单元。通常是机械硬盘11. 电子可擦除PROM : 不需要物理上独立的编程设备,可以直接在印制电路卡上编程,次数更高100000次,更小可以在手机等设备插入。
访问主存
数据流通过总线的共享电路,在处理器和DRAM主存之间来来回回,每次CPU和主存之间数据传输通过一系列步骤完成,称为 总线事务读事务:从主存传输数据到CPU写事务:从CPU传输数据到主存。
4. 总线是并列的导线,能携带地址。数据。和控制信号。 cpu的系统总线外接 i/o 桥接器,能转发到i/o设备,或者存储器主存等。5. move A,%eax 将地址A的数据赋值给寄存器经过怎样的流程呢? 首先CPU执行到这条指令,总线接口处会发起一个读事务,读事务由三个步骤组成, 首先a将地址A放到系统总线;b,经过桥接器转发给主存储器,主存接收到地址后,从DRAM中取出数据并协会到存储器总线。 桥接器把总线信号翻译成系统总线信号,传输给系统总线。最后c将数据写到寄存器中6. move %eax, A, 将发起写事务, 首先将地址传给存储器,主存接收到后等待数据字。 然后将数据字放到总线上传给主存。 最后主存读到数据后存储到地址A
磁盘存储:
磁盘能存储大量的数据, 但是速度却很慢,从磁盘读信息大概几毫秒, 比从DRAM慢10万倍,比SRAM慢100万倍。磁盘的构成盘片:一个盘片有两面,面上有磁性记录材料,面上又分多个圈,每个圈是一个磁道,类似古老唱片是的,每个磁道又分一组扇区,每个扇区存储固定大小数据。每个磁盘由n个磁片构成,然后密封到一个包装中,通过主轴转动来读写数据。整个装置称为磁盘驱动器或磁盘。磁盘容量: 一个磁盘,5个盘片,每个面有20000条磁道,每个磁道平均300个扇区,每个扇区512字节。容量是 5* 20000 *300 * 512访问磁盘:磁盘是通过inter 的PCI(外围设备互联)总线这样i/o总线连接到cpu和主存的。 同系统总线和存储器总线不同,pci这种io总线设计如底层CPU无关, 虽然io总线比系统总线和存储器总线慢,但是却可以连接种类繁多的第三方io设备: 如USB(通用串行总线)控制器将设别连接到USB的电路, 图形卡(显卡)包含硬件和软件逻辑,用来绘制图像, 磁盘控制器包含硬件和软甲逻辑,用来读写磁盘io设备的访问: CPU使用一种存储器映射io的技术,向io设备发射命令。 在存储器映射 io的系统中,地址空间中有一块地址是为io设备通信保留的。每个这样的地址称为io端口。 读取磁盘的过程是: a.cpu通过将命令,逻辑块号和目的存储器地址写到磁盘相关联的存储器映射地址,发起一个磁盘读。 b 磁盘控制器读扇区,并执行到准村的DMA传送, c,当DMA传输完成时,磁盘控制器发起一个中断通知CPU.细节说明:假设磁盘控制器的端口地址是0xa0,CPU通过执行三个对地址0xa0的存储指令,发起磁盘读:第一条指令告诉发起读以及是否读完中断等。 第二个指令指明读的逻辑块号(也就是唯一的位置), 第三个指令应该指明应该存储数据的主存的地址。在磁盘读数据,转针找数据的过程中,很慢,CPU一般会做点其他的事情,阻塞的话很浪费cpu。当磁盘接收到读命令之后,将逻辑块号翻译成扇形地址,取出数据发给主存,不需要CPU干涉,这个设备可以自己完成读或者写总线事务,称为DMA(直接存储器访问)。 这种数据传送称为DMA传送。当数据传完,磁盘控制器会发给CPU一个中断信号到CPU芯片的一个外部管脚上,会导致CPU暂停它当前正在做的工作,跳转到一个操作系统函数。这个函数会记录io操作已经完成,并把控制返回到被中断的地方
高速缓存
局部性:编写良好的计算机程序倾向于局部性,倾向于引用的数据项邻近于其他最近引用过得数据项。包含时间局部性和空间局部性两种, 一个存储器位置,可能在不久的将来再次被引用多次使用局部性的原理,计算机会使用高速缓存存储器来保存最近引用的指令和数据项,从而提高主存的访问速度。局部性的原理有很多应用: 高速缓存, 主存来缓存常用的磁盘块, 或者web服务器会缓存最近使用的文档。代码中使用局部性:循环数组的局部性: 步长为1的局部性更好, 按照内存顺序的二维数组比跳的顺序访问局部性要好。取指令的局部性: 类似循环的指令,会被执行多次,拥有比较好的局部性。循环体越小,次数越多,局部性越好。
存储器层次结构:
存储器是分层的,越上层的速度越快,越小,越下层的速度越慢,容量越大。 传送单元(块):数据在k和k+1层的传输总是以固定大小传输的。比如L0 和 L1 之间固定1个字节传送数据块,而L1和L2之间会以4-8个字节。k层会缓存k+1层的块数据,如L0会缓存L1层1个字节的块数据,而L1会缓存L2层4-8个字节的块数据缓存命中:当程序需要k+1层的某个数据对象时,如果k层的缓存中有这个块,则认为是缓存命中缓存未命中:会从k+1层取出这个数据块,然后尝试放在k层,如果k层空间已满,会覆盖掉一个块。缓存管理:缓存未命中是有替换策略的,越靠近cpu的通常是由硬件自己去替换的,主存之类的往往是软件去决定替换策略的,如mysql的文件管理。高速缓存的例子:如果遍历一个数组,步进是1,高速缓存取出一个块是4个长度,那么再循环的时候,相当于数组0是未命中,然后取数据到高速缓存中,在访问数组1,2,3都是在高速缓存中直接命中,速度更快了,如果步进增加,那么可能越过高速缓存。 这个只是举例,有的高速缓存很大,可以直接缓存整个数组,那么就速度更快了,所以现在计算机追求更大的高速缓存。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/97098.html