存储系统总结

内存物理组成

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专题有)

抖动和工作集
①工作集:某段时间间隔内要访问的页面集合
②驻留集:分配物理块大小

驻留集不能小于工作集,不然会抖动。
此外要注意FIFO的belady异常(分配物理块增加缺页次数增加)和抖动(经常换入换出页面)不一样

内存映射文件
内存映射文件是操作系统向应用程序提供的一个系统调用,在磁盘文件与进程的虚拟地址空间之间建立映射关系。

进程通过此系统调用,将一个文件映射到其虚拟地址空间的某个区域,之后就用访问内存的方式读写文件(将文件当成内存中的大数组,不用IO方式),进程退出文件映射的时候才将修改写回外存

进程可以通过共享内存来通信,共享内存时通过映射相同文件到通信进程的虚拟空间来实现。一个进程在共享内存上完成了写操作,此刻当另一个进程在映射到这个文件的虚拟空间上执行读操作的时,就可以直接看到结果。

影响性能的因素
页面大小适中,物理块数保证缺页率很低范围即可,好的页面置换算法,写回磁盘的频率(仅当被换出页面数达到定值的时候,才将他们一起写回磁盘)


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值