存储系统总结

news2024/9/22 22:40:07

内存物理组成

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的一部分)

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

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

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

内存管理概念

①内存空间的分配与回收
②地址转换
③内存空间扩充:利用虚拟存储技术从逻辑上扩充
④内存共享:多个进程访问内存的同一部分,只有只读区域才可以共享
⑤存储保护:设置上下限寄存器,基址寄存器/重定位寄存器、界地址寄存器/限长寄存器

编译、链接(静态链接、装入时动态链接和运行时动态链接)和装入(绝对装入、可重定位装入、动态运行时装入)

绝对装入:单道程序,绝对地址,编译或者汇编时给出。
可重定位装入:装入时对目标程序中的相对地址的修改过程称为重定位。(静态重定位)
动态运行时装入:装入内存中不会立即转换,将要运行时才进行转换。(需要重定位寄存器)

静态链接:运行之前链接好
装入时链接:装入内存时链接
运行时动态链接:执行需要某模块的时候才链接这个模块

进程几个要素:代码段、数据段、PCB、堆和栈

可重入代码也叫纯代码,允许多个进程同时访问但是不允许被任何进程修改的代码。

存储管理方式:单一连续分配→动态分区分配。连续分配→离散分配(页式分配)
 

连续分配管理方式
单一连续分配:一个P占用整个用户区,内部碎片
固定分区分配:用户内存空间划分为固定大小的分区(可以大小相等或者大小不等),建立分区使用表,也有内存碎片
动态分区分配:可变分区分配,根据进程的需要动态的分配内存。但是会出现外部碎片

动态分区分配算法
①基于顺序搜索的分配算法

首次适应(第一个合适的分区):这个是最好的
邻近适应(从上次查找的地方接着找)
最佳适应(容量递增排列,最容易产生内存碎片)
最坏适应(容量递减排列,性能差)
②基于索引搜索的分配算法
快速适应算法:根据索引表找到可以容纳的最小的空闲分区链表
伙伴系统:先找2^i≥n的块数,如果没有则找2^(i+1)的块,分为两半,一个用于分配一个加入链表
哈希算法:构建哈希函数,根据空闲分区大小生成key

上述都是连续分配

非连续分配:分页存储管理、分段存储管理(进程一次性全部丢进去)

基本分页存储管理
页表:系统为每个进程建立一张页面映射表,页表。每个页表项由页号和块号组成,记录了页面在内存中对应的物理块号。

两级页表:
①用一张索引表来记录各个页表的存放位置
②只将当前需要的部分页表调入内存,其余继续驻留磁盘,需要时再调入。
实现:增加一个外层页表寄存器(页目录基址寄存器)
在多级页表机制中,各级页表的大小不能超过一个页面

基本分段存储管理
分页和分段对比:
页是信息的物理单位,目的是提高内存利用率。
段是信息的逻辑单位,更好的满足用户需求。

页大小固定,段大小不固定

页地址是一维的,段地址是二维的

虚拟内存管理

当内存空间不够时,由os将内存中暂时用不到的信息换出外存,从而腾出空间存放要调入内存的信息,这个过程就是页面置换。这样,系统好像为用户提供了一个比实际内存容量大得多的存储器,叫做虚拟存储器(多次性、对换性、虚拟性)

请求分页存储管理
请求分段存储管理
请求段页式存储管理

需要内外存、页表机制、中断机构,地址变换机构

页表机制:比起基本的页表机制,多了状态位(是否在内存)、访问字段(在一段时间内被访问的次数)、修改位(是否被修改)、外存地址(页在外存的存放地址)

中断:缺页中断,调用缺页中断处理程序。缺页进程被阻塞,放入阻塞队列。调入页面后唤醒。

页框分配
①内存分配:
固定分配局部置换、可变分配全局置换(只要缺页就增加物理块)、可变分配局部置换(根据缺页率来着呢增加物理块)
②物理块调入:固定分配的时候,将空闲物理块分配给各个进程。平均分配算法、按比例分配算法、游戏那去哪分配算法。
③调入页面的时机:预调页策略(用于首次调入,程序员指出,例如main函数的页)、请求调页
④从何处调入页面:外存分为存放文件的文件区和用于存放对换页面的对换区(也叫交换区),对换区连续存放,文件区采用离散分配方式,对换区的IO速度比文件区大。
i.系统拥有足够的对换区空间(全部从对换区调入)
ii.系统缺少足够的对换区空间(不会修改的直接从文件区调入,可能修改的直接从对换区调入)
iii.UNIX方式。与进程有关的文件都在文件区,未运行的页面从文件区调入,换出的页面放对换区。共享页面如果被其他进程调入,则不需要再次调入

页面置换算法(os专题有)
 


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2096039.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第8讲 ,ISP 串口程序下载

1 硬件的连接 需要使用 串口下载软件。 flymcu 这是 正点原子的 自启动电路。 2 stm32 的串口下载的原理 stm32 下载 只能是 串口一 , 也就是 PA9, PA10 3 然后是 stm32 的启动顺序 这里使用的是 第二种的 启动模式, 也就是 通过 串口进行烧…

Java 入门指南:Java 并发编程 —— Condition 灵活管理线程间的同步

Condition Condition 是 Java 并发编程中的一种高级同步工具,它可以协助线程之间进行等待和通信。提供了一种比传统的 wait() 和 notify() 更加灵活的方式来管理线程间的同步。Condition 接口通常与 Lock 接口一起使用,允许更细粒度的控制线程的等待和唤…

idea插件开发的第一天-写一个小Demo

介绍 Demo说明 本文基于maven项目开发,idea版本为2022.3以上,jdk为1.8本文在Tools插件之上进行开发 Tools插件说明 Tools插件是一个Idea插件,此插件提供统一Spi规范,极大的降低了idea插件的开发难度,并提供开发者模块,可以极大的为开发者开发此插件提供便利Tools插件安装需…

Python爬虫案例五:将获取到的文本生成词云图

基础知识: # 词云图 wordcloud # 1、导包 jieba wordcloud import jieba from wordcloud import WordCloud data 全年经济社会发展主要目标任务圆满完成 data_list list(jieba.cut(data)) # print(data_list) # generator数据类型# 2、构造词云图样式 》虚拟的…

LabVIEW与Python联合图像处理

LabVIEW可以将图片作为参数传递给Python进行处理。可以通过LabVIEW调用Python脚本,并传递图片数据。以下是如何实现这个功能的基本思路: 1. 在LabVIEW中读取图像 首先,使用LabVIEW中的图像处理函数(如NI Vision Development Modu…

多态【C++】

文章目录 概念概念虚函数 定义及实现构成条件虚函数的重写override和final重载/重定义(隐藏)/重写(覆盖)的区别 抽象类概念接口继承和实现继承 多态的原理虚函数表 多继承关系的虚函数表 概念 概念 通俗来说,就是多种…

用TCC来解决多个第三方系统数据一致性问题

对于做集成的公司来说,会集成各种第三方系统,要么是通过第三方系统的api,要么直接集成第三方系统的设备。如果是通过api集成,单次请求只调用一个三方系统没问题,同步调用就行,但如果同时要调用多个三方系统…

C++中AVL树的底层逻辑原理及其实现原理和过程

小编在学习完AVL树之后觉得AVL树的底层逻辑原理不是很难,在实现AVL树的过程中可能在调整过程中经过旋转调整会有点难,但是小编可以给大家讲解清楚,结合旋转过程的详细解图,相信大家一定可以学会并且理解AVL树的底层逻辑原理及其实…

[论文阅读]JTORO in NOMA-based VEC:A game-theoretic DRL approach

论文:Joint task offloading and resource optimization in NOMA-based vehicular edge computing: A game-theoretic DRL approach ​​​​​​​​​​​​​​基于 NOMA 的车载边缘计算中的联合任务卸载和资源优化:一种博弈论的 DRL 方法 代码地址…

Salesforce标准RestAPI用法总结,看这一篇就够了(附Java代码实现)

引言 Salesforce提供给外部系统的标准RestAPI类型,还是非常丰富的,能满足用户基本的增删改查的操作。 就是由于提供的RestAPI多,所以本文旨在为salesforce开发者或者是集成开发者,提供一个RestAPI的用法总结,以及基本的java代码实现用例。 目录 第一部分,Salesforce R…

【个人学习】JVM(12):垃圾回收相关概念

垃圾回收相关概念 System.gc() 的理解 在默认情况下,通过System.gc()者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(不能确保立…

大语言模型的超参数含义: Top-P 采样; Top-P 采样;logit_bias:

目录 大语言模型的超参数含义 Top-P 采样 频率惩罚(Frequency Penalty) top_k: logit_bias: top_logprobs: max_tokens: 大语言模型的超参数含义 Top-P 采样 含义:一种采样替代方法,称为核采样。模型考虑top_p概率质量的token结果。例如,0.1表示仅考虑组成前10%…

【学习笔记】卫星通信NTN 3GPP标准化进展分析(四)- 3GPP Release18内容

一、引言: 本文来自3GPP Joern Krause, 3GPP MCC (May 14,2024) Non-Terrestrial Networks (NTN) (3gpp.org) 本文总结了NTN标准化进程以及后续的研究计划,是学习NTN协议的入门。 【学习笔记】卫星通信NTN 3GPP标准化进展分析(一&#xff…

2166. 子树的大小及深度

代码 #include<bits/stdc.h> using namespace std; vector<int> a[110]; int d[110],s[110]; int dfs(int x,int y) {int i;s[x]1;d[x]d[y]1;for(i0;i<a[x].size();i)if(a[x][i]!y)s[x]s[x]dfs(a[x][i],x);return s[x]; } int main() {int n,x,y,i;cin>>…

字符集介绍

在计算机科学中&#xff0c;字符集 (Character Set) 是指一组用于表示文本中字符的集合。字符集通过特定的编码方式&#xff0c;将字符与其在计算机内存或存储设备中的二进制表示联系起来。字符集在文本处理、文件传输、网络通信等场景中起着至关重要的作用。 1. 字符与编码的…

Redis(13)| 缓存与数据库数据一致性问题

本文讨论的前提&#xff1a; 不是一个事务&#xff0c;永远无法满足数据库和缓存的强一直性的;文中会列举不一致的逻辑场景;一定是依解决业务问题&#xff0c;和业务达成的共同目标为前提&#xff1b; 前言 只要用到多数据源存储同一份相同的数据&#xff0c;在更新时&#…

计算方法——插值法程序实现(一)

例题 给出的函数关系表&#xff0c;分别利用线性插值及二次插值计算的近似值。 0.10.20.30.40.51.1051711.2214031.3498591.4918251.648721 参考代码一&#xff1a;Python代码实现&#xff08;自编码&#xff09; import math """ :parameter用于计算插值多项…

linux-基础知识2

目录和文件的权限 修改目录和文件的拥有者 用root用户执行&#xff1a; chown -R 用户:组 目录和文件列表 -R选项表示连同各子目录一起修改 创建aa目录mkdir aa ,查看 ls -l 普通用户没有权限&#xff0c;不能删除 转移权限&#xff0c;chown -R mysal:deb /aa/aa 加上-R…

ModuleNotFoundError: No module named ‘cv2‘,python

ModuleNotFoundError: No module named cv2&#xff0c;python 报错如同&#xff1a; 解决方案&#xff1a; pip install opencv-python https://blog.csdn.net/zhangphil/category_9486298.html

陀螺仪LSM6DSV16X与AI集成(12)----SFLP获取四元数

陀螺仪LSM6DSV16X与AI集成.12--SFLP获取四元数 概述视频教学样品申请源码下载硬件准备SFLP生成STM32CUBEMX串口配置IIC配置CS和SA0设置ICASHE修改堆栈串口重定向参考程序初始换管脚获取ID复位操作BDU设置设置量程初始化SFLP步骤初始化SFLP读取四元数数据 概述 在现代的运动跟踪…