存储系统总结

2024-09-01 16:44
文章标签 总结 存储系统

本文主要是介绍存储系统总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内存物理组成

SAM:顺序存取存储器,按照某种顺序存取,存取时间和在存储体上的物理位置有关系
DAM:直接存取存储器,先寻找一块小区域,接着顺序查找
RAM:随机存取存储器,存取时间与物理位置无关

存取时间:启动一次存储器操作到完成所经历的时间
存取周期:连续进行两次独立访问存储器操作之间所需要最小的时间间隔

存取周期>存取时间(因为要恢复存储)

存储层析的主要思想:上一层的存储器作为低一层存储器的高速缓存。
主存和cache之间的交换都是硬件自动完成的,
cache-主存的速度接近cache,容量接近主存。主存-辅存的速度接近主存,容量接近辅存。
前者对所有程序员都是透明的,后者只对应用程序员是透明的。

SARM和DRAM都是易失性的,前者是双稳态触发器,后者是栅极电容。前者非破坏性读出,后者是破坏性读出。

DRAM的刷新分为:集中刷新、分散刷新(不存在死时间)和异步刷新(在译码阶段刷新)
刷新是对CPU透明的,不依赖于外部。DRAM的刷新单位是行,芯片内部自动生成行。刷新不需要选片,直接全部刷新所有芯片。

传统DRAM是异步交换数据,CPU发出信号后,延迟一段时间数据才读写完成,CPU不做别的工作。SDRAM与CPU之间采取同步方式,他可以把CPU传送的信号锁存起来,CPU和在读写完成前做其他的操作。SDRAM也可以突发传输。

行缓冲器用来缓存指定行中的数据,大小为列数×位平面数,通常是SRAM

存储芯片:存储体、IO读写电路、地址译码器和控制电路组成。

PROM只能编写一次,EPROM可以多次
FLASH:可以长期保存信息,又能快速读写
SSD:控制单元和存储单元(FLASH芯片)组成
U盘时由E2PROM类型的存储器

编址单位是指具有相同地址的那些存储元件构成的一个单位

CPU→MAR→M的地址寄存器→M的地址译码器→M→MDR→CPU
CPU同步读写信号:写信号时同步将内容传入MDR,将内容放在数据线上写入单元。读信号时,将单元内容通过数据线传入CPU中。

MAR位数与地址线位数相同,MDR位数与数据线位数相同。如果数据线位数不等于存储字长,MDR是和数据线一致。

DRAM的地址引脚复用,也只有DRAM复用。想要引脚最少|r-c|最小,其次r≤c

多模块存储器:
空间并行技术,利用多个结构完全相同的存储模块的并行工作来提高吞吐率。
①单体多字存储器,每个存储单元存储m个字,总线宽度也为m个字,一次性并行读出m个字。在一个周期内,从同一个地址取出m条指令(每1/m和周期,CPU取出一条指令)

②多体并行存储器:每个模块都用独立的读写控制电路、地址寄存器和数据寄存器
i) 高位交叉编址:将地址的前几位数当做体号确定模块,但是这种本质还是串行存取,顺序存储器
ii)低位交叉编址:将地址的后几位数当做体号确定模块,相当于扩字。

轮流启动:如果一次读写位数正好等于数据线位数,存取周期为T,总线周期(传输整个流程耗时)为r,为了实现轮流启动,模块数要 ≥ T/r。其实就是保证,下一次读取这个模块整个存储操作完成。此时连续存取m个字的时间为:T+(m-1)r。如果是顺序存储则为mT。交叉存取器中访存可能冲突,如果访存的地址出现在同一个模块则会冲突,此时需要延迟发生冲突的请求。

同时启动:所有模块一次并行读写的总位数刚好等于数据的总线位数。

外存物理组成

磁盘:①量大价低②记录介质重复使用③长时间存储,脱机存储④非破坏性读出

磁盘存储器:磁盘驱动器(读写器械),磁盘控制器(IO)和盘片
存储区域:磁盘面,面上磁道,磁道划分为扇区。
磁盘高速缓存:在内存中开辟一部分区域,用于缓冲将被送到磁盘上的数据。优点:写磁盘的时候是按照“簇”进行的,可以避免频繁使用小块数据写盘,有些中间结果数据在写回磁盘之前可以被快速再次使用。

磁记录方式:调频制FM和改进型调频制MFM

磁盘容量有非格式化容量和格式化容量。非格式化容量是指磁记录表面可利用的磁化单元总数,非格式化容量=记录面数×柱面数×每条磁道的磁化单元数。格式化容量是指按照某种特定的记录格式所能存储信息的总量。格式化容量=记录面数×柱面数×每个扇区的容量。格式化后的容量比非格式化容量小。

柱面号        盘面号        扇区号

磁盘属于机械式部件,其读写操作是串行的,不可能在同一时间既读又写,也不可能在同一时刻读两组或写两组数据。

RAID磁盘阵列
RAID是指将多个独立的物理磁盘组成一个独立的逻辑盘,数据在多个物理盘上分割交叉存储、并行访问,具有更好的存储性能、可靠性和安全性。

RAID0:无冗余和无校验的磁盘阵列
RAID1:镜像磁盘阵列
RAID2:采用纠错的海明码的磁盘阵列
RAID3:位交叉奇偶校验的磁盘阵列
RAID4:块交叉奇偶校验的磁盘阵列
RAID5:无独立校验的奇偶检验磁盘阵列

固态硬盘SSD是一种闪存技术的存储器。
闪存芯片代替磁盘驱动器,闪存翻译层代替磁盘控制器。
数据是以页为单位读写的。只有在一页所属的块整个被擦除后,才能写这一页。
随机写很慢,修改一个页需要将所在整个块复制到别的块中。
磨损均衡:动态磨损均衡(自动选择新的闪存块)、静态磨损均衡(更先进,没有数据写入SSD也会监测并自动进行数据分配)

高速缓冲存储器

cache直接集成在CPU中
局部性:时间局部性和空间局部性
时间局部性:最近的未来要用到的信息,可能为现在正在使用的
空间局部性:最近的未来要用到的信息,可能为现在正在使用的信息空间上邻近

CPU与cache之间的数据交换以字为单位,而cache与主存之间的交换则以cache块为单位。

cache关键问题:①数据查找②地址映射③替换策略④写入策略

直接映射:冲突概率最高空间利用率最低。cache行号=主存块号%cache总行数。
地址结构:tag+cache行号+快内地址

全相联映射:冲突概率低空间利用率高,标记比较速度慢实现成本高要采用按内容寻址的相联存储器。每个cache行都设置一个比较器,比较器位数等于标记字段的位数。(这个是每行都一个)

组相联映射:cache组号=主存块号%cache组数。
地址结构:标记+组号+块内地址
直接映射因为每块只能映射到唯一的cache行,因此只需要设置一个比较器。而r路组相联映射需要在对应分组中与r个cache行进行比较,因此需设置r个比较器。(这个是一次性比较几个有几个)

替换算法
随机算法(RAND)先进先出(FIFO)近期最少使用(LRU)做不经常使用(LFU)

①随机的确定替换cache行,但是未按照局部性原理
②选择最早调入cache行进行替换,也未按照局部性原理
③依据程序访问的局部性原理,选择近期内长久未访问过的cache进行替换(堆栈类算法),其算法需要在cache行增加一个计数器(也叫LRU替换位),其实就是往前数,数到最前面的那个替换
④讲一段时间内被访问次数最少得cache行换出,cache行加一个计数器,每访问一次计数器加一,替换时将计数值最小的行换出。

写命中
①全写法:CPU对cache命中时,将数据同时写入cache和主存。写缓冲(为了减少全写法直接写入主存的时间损耗,在cache和主存之间加一个写缓冲,CPU将数据写到cache和写缓冲中,写缓冲才写到主存中)是一个FIFO队列
②回写法:CPU对cache写命中时,只是把数据写入cache,只有替换时才写回。但是需要增加一个脏位

写不命中
①写分配法:更新主存单元,然后将这个主存单元调入cache中。
②非写分配法:只更新主存单元,而不把主存块调入cache。

非写分配+全写法        写分配+回写法

cache行中一定有有效位,但是有无脏位和替换位看题干。

虚拟存储器

CPU访问主存的时候用的是物理地址
用户编程用的是虚拟空间的虚拟地址

CPU使用虚地址是,先判断虚地址对应内容是否装入主存。若在主存则通过地址变换,直接访问主存。若不在主存中,则把包含这个字的一页或者一段调入主存后再由CPU访问。若主存满了用替换算法置换即可。

虚拟内存要高命中率所以采用全相联映射,在处理一致性问题的时候采用回写法

页式虚拟存储器:
页表:长久的保存在内存中,包括有效位(是否在主存中)、脏位(修改位)和引用位(使用位),后面跟着物理页地址或者磁盘地址。
优点:页面长度固定,页表简单,调入方便。
缺点:内存浪费,处理保护和共享不如段式虚拟存储器方便。

每个进程都有一个页表基址寄存器(存放该进程的页表首地址),根据虚拟地址高位虚拟页号找到对应页表项,如果有效位为1则取出物理页号组成物理地址,否则缺页进行缺页处理。

TLB快表
将最近经常访问的页表项存放在高速缓冲器组成的快表(TLB)中。
快表通过SRAM组成,采用组相联映射或者全相联映射。TLB表项由页表表项内容和TLB标记组成。全相联就是页表项的虚拟页号。组相联则是虚拟页号的高位部分,低位是TLB的组号

序号TLB PageCache说明

访存

1命中命中命中TLB命中则Page一定在内存中,信息在主存中,就可能在cache中0次
2命中命中缺失TLB命中则Page一定命中,信息在主存中,也可能不在cache中。1次
3缺失命中命中TLB缺失但是Page命中,信息在主存中,就可能在cache中。1次
4缺失命中缺失TLB缺失但是Page可能命中,信息在主存,也可能不在cache中2次
5缺失缺失缺失TLB缺失则Page也可能缺失,信息不在主存,一定不在cache中。≥2次

cache缺失由硬件完成,缺页处理由软件完成,操作系统通过“缺页异常处理程序”来实现。TLB缺失既可以通过硬件处理也可以通过软件处理。(TLB被集成在了CPU中,被视为MMU的一部分)

快表快因为是硬件快,慢表(页表)在内存中需要靠算法优化查找。

段式虚拟存储器
分段对程序员来说是不透明的,而分页对程序员透明。

段页式虚拟存储器
把程序按逻辑结构分段,每段再划分固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入调出以页为交换单位。每个程序对应一个段表,每段对应一个页表,段的长度必须是页长的整数倍,段的起点必须是某一页的期待你。
优点:可以按段实现共享和保护。缺点:在地址变换过程中需要两次查表,系统开销大。

这篇关于存储系统总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127489

相关文章

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel