静态随机访问存储器(SRAM)
SRAM中数据保存在一对正负反馈门电路(时钟RS触发器)中,只要供电,数据就一直保持,不是破环性读出,无需重写与刷新。
动态随机访问存储器(DRAM)
刷新:DRAM的一个重要特点是,数据以电荷的形式保存在电容中电容的放电使得电荷通常只能维持几十个毫秒左右,相当于1M个时钟周期左右,因此要定期进行刷新(读出后重新写回),按行进行(所有芯片中的同一行一起进行)。
DRAM有两个片选线:RAS#和CAS#
SRAM、ROM有一个片选线:CS#
DRAM芯片的规格:
若一个2^n ×b位DRAM芯片的存储阵列是r行×c列,则2^n=r×c。
如:16K×8位DRAM, 则r=c=128。
芯片内的地址位数为n,其中行地址位数为log(2)r,列地址位数为log(2)c。如:16K×8位DRAM,则n=14,行、列地址各占7位。
n位地址中高位部分为行地址,低位部分为列地址。
为提高DRAM芯片的性价比,通常设置的r和c满足r≤c且|r-c|最小。
读写:
地址线分时复用,由RAS和CAS提供控制时序
行地和列地址分时复用,每出现新一代DRAM芯片,至少要增加一根地址线。每加一根地址线,则行地址和列地址各增加一位,所以行数和列数各增加一倍。而容量至少提高到4倍。
顺序编址和交叉编址
磁盘存储器的信息存储原理:
不同的磁化状态被记录在磁盘表面。
写1:线圈通以正向电流,使呈N-S状态
写0:线圈通以反向电流,使呈S-N状态
读时:磁头固定不动,载体运动。因为载体上小的磁化单元外部的磁力线通过磁头铁芯形成闭合回路,在铁芯线圈两端得到感应电压。根据感应电压的不同的极性,可确定读出为0或1。
磁盘存储器的磁道和扇区:
磁盘表面被分为许多同心圆,每个同心圆称为一个磁道每个磁道都有一个编号最外面的是0磁道。
每个磁道被划分为若干段(段又叫扇区)。
每个扇区的存储容量为512字节。每个扇区都有一个编号。
磁盘格式化操作指在盘面上划分磁道和扇区,并在扇区中填写ID域信息的过程
磁盘数据地址:柱面号(磁道号) | 盘面号(磁头号) | 扇区号
操作过程:寻道、旋转、读/写
低密度存储:内道扇区数量与外道扇区数量一致
高密度存储:分区域记录
道密度:沿磁道分布方向上单位长度内的磁道数目
位密度:沿磁道方向,单位长度内存放的二进制信息数目
存储容量:整个存储器所能存放的二进制信息量,它与磁表面大小和记录密度密切相关
未格式化容量:按道密度和位密度计算出来的容量,包括头空、ID域、CRC等,是所有磁化单元的总数
格式化容量:格式化后实际可用容量
低密度存储 未格式化容量计算
柱面数=(有效记录区外径-有效记录区内径)÷2×道密度
磁盘总容量=记录面数×理论柱面数×内圆周长×最内道位密度
实际数据容量=2×盘片数×磁道数/面×扇区数/磁道×512B/扇区
数据传输速率:磁表面存储器完成磁头定位和旋转等待以后,单位时间内从存储介质上读出或写入的二进制信息量,也称为内部传输速率或持续传输速率
内部数据传输速率=每分钟转速÷60×内圆周长×最内道位密度
外部传输速率:主机中外设控制接口从(向)外存储器的缓存读出(写入)娄数据的速度,由外设采用的接口类型决定。也称突发数据传输速率或接口传输速率
硬盘的操作流程如下:所有磁头同步寻道(由柱面号控制))→选择磁头 (由磁头号控制) →被选中磁头等待扇区到达磁头下方(由扇区号控制)→读写该扇区中数据
磁盘信息以扇区为单位进行读写,平均存取时间为:
T=平均寻道时间+平均旋转等待时间+数据传输时间(忽略不计)
平均寻道时间–磁头寻找到指定磁道所需平均时间(约5ms)
平均旋转等待时间–指定扇区旋转到磁头下方所需平均时间
(约4~6ms)(转速:4200/5400/7200/10000rpm)
数据传输时间–(大约0.01ms/扇区)
每道扇区:(4MB/(5400RPM/60s)/512B
访问局部性使得每次磁盘访问大多在局部几个磁道,实际寻道时间变少。
容量 = 记录面x磁道数x磁道位容量(最内圆周长*位密度) = 20 x (3.92 * 51) x ((355.6-51*2)mmxPI * 90bit/mm) = 20x200x71667 bit ≈ 286669 bit
平均存取时间 = 平均寻道时间(移动次数为道数-1) + 平均旋转等待时间 + 数据传输时间(忽略) = 1/2*(200-1)*0.2ms+ 1/2*1/(2400RPM/60s)
平均数据传输率 = 磁道位容量x每秒读道数 = 71667*(2400RPM/60s)
操作时间 = 读出时间 + 处理时间 + 写回时间 = (平均寻道时间 + 平均旋转等待时间 + 数据传输时间) + 处理时间 + (平均寻道时间 + 平均旋转等待时间 + 数据传输时间) = (10ms + 1/2*60s/7200RPM + 4KB / 40MB/s)*2 + 20000/(500*10^6)*1000 ms = 32.58ms
操作次数 = (1000ms / 32.58ms) = 30.7 次
磁盘存储器的连接:
磁盘的最小读写单位是扇区,因此,磁盘按成批数据交换方式进行读写,采用直接存储器存取(DMA,DirectMemoryAccess)方式进行数据输入输出,需用专门的DMA接口来控制外设与主存间直接数据交换,数据不通过CPU。通常把专门用来控制总线进行DMA传送的接口硬件称为DMA控制器。
在较短时间间隔内,程序产生的地址往往集中在一个很小范围内这种现象称为程序访问的局部性:空间局部性、时间局部性
程序具有访问局部性特征的原因
指令:指令按序存放,地址连续,循环程序段或子程序段重复执行
数据:连续存放,数组元素重复、按序访问
主存被分为主存块block,Cache被分为Cache行line(槽slot)
Cache是一种小容量高速缓冲存储器,它由SRAM组成Cache直接制作在CPU芯片内,运行时,CPU使用的一部分数据/指令会预先成批拷贝在Cache中,Cache的内容是主存储器中部分内容的映象。当CPU需要从内存读(写)数据或指令时,先检查Cache,若有,就直接从Cache中读取,而而不用访问主存储器。
主存中的信息按 块 送到Cache中。
执行指令时,CPU产生访存要求。
CPU给出主存地址AD
若被访问信息不在cache中,称为缺失或失靶(miss)。
cache缺失处理:
若被访问信息在cache中,称为命中(hit)
命中的概率称为命中率p,它等于命中次数与访问总次数之比;
缺失率等于不命中次数与访问总次数之比。
命中时所用的时间开销就是cache的访问时间T,称为命中时间;
缺失时所用时间开销为主存访问时间Tm和cache访问时间Tc之和;通常把Tm称为缺失损失。
平均访问时间为:Ta=p*Tc+(1-p)*(Tm+Tc)=Tc+(1-p)*Tm
Cache性能由缺失率确定而缺失率与Cache大小、Block大小等有关
外部(Off-chip)Cache:不做在CPU内而是独立设置一个Cache
片内(On-chip)Cache:将Cache和CPU作在一个芯片上
单级Cache:只用一个片内Cache
多级Cache:同时使用L1Cache和L2Cache,甚至有L3Cache,L1Cache更靠近CPU,其速度比L2快,其容量比L2小
分立:指数据和指令分开存放在各自的数据和指令,L1Cache
联合:指数据和指令都放在一个Cache中一般L2Cache都是联合Cache
T = PL1*TL1++(1-PL1)*(TL2+(1-PL2)*Tm)
L1和L2的命中率都很高,所以L1的命中时间更重要,又因为Tm的开销相较过大,所以L2的命中率更重要
Cache行比主存块少,因而多个主存块映射到一个Cache行中
直接(Direct):每个主存块映射到Cache的固定行
全相联(FullAssociate):每个主存块映射到Cache的任一行
组相联(SetAssociate):每个主存块映射到Cache固定组中任一行
直接映射Cache
主存每一块只能映射到固定的Cache行(槽)
也称模映射(ModuleMapping)
映射关系为:
Cache行号 = 主存块号 mod Cache行数
举例:4=100mod16(假定Cache共有16行)(说明:主存第100块应映射到Cache的第4行中。)
Cache标记(tag)指出对应行取自哪个主存块群
主存地址 前11位主存块号 后13位cache地址
V为有效位,为1表示信息有效,为0表示信息无效
开机或复位时,使所有行的有效位V=0
某行被替换后使其V=1,某行装入新块时使其V=1
通过使V=0来冲刷Cache(例如:进程切换时,DMA传送时)
通常为操作系统设置:“cache冲刷”特权指令
全相联Cache
因为可映射到任意一个cache行中,没有cache索引字段。
组相连映射
将Cache所有行分组,把主存块映射到Cache固定组的任一行中。
也即:组间模映射、组内全映射。映射关系为:
Cache组号=主存块号modCache组数
举例:假定Cache划分为:8K字=8组x2行/组x512字/行
4=100mod8
结合直接映射和全相联映射的优点。当Cache组数为1时,变为相联映射;
当每组只有一个槽时,变为直接映射。
每组2或4行(称为2路或4路组相联)较常用。通常每组4行以上很少用。在较大容量的L2Cahce和L3Cahce中使用4路以上。
划分:
主存地址 前11位主存块号
常见替换算法
先进先出FIFO(first-in-first-out)
最近最少用LRU(least-recentlyused)
最不经常用LFUleast-frequentlyused)
随机替换算法(Random)
写命中(WriteHit):要写的单元已经在Cache中
写不命中(WriteMiss):要写的单元不在Cache中
写命中:
WriteThrough(通过式写、写直达、直写)
同时写Cache和主存单元
在Cache和Memory之间加一个WriteBuffer
CPU同时写数据到Cache和WriteBuffer
Memorycontroller(存控)将缓冲内容写主存Writebuffer(写缓冲)是一个FIFO队列
当频繁写时,易使写缓存饱和,
发生阻塞如何解决写缓冲饱和?加一个二级Cache
WriteBack(一次性写、写回、回写)
只写cache不写主存,缺失时一次写回,每行有个修改位(“dirty bit-脏位”),大大降低主存带宽需求,但控制较复杂
写不命中:
writeAllocate(写分配)
回写Cache通常用写分配将主存块装入Cache,然后更新相应单元
试图利用空间局部性,但每次都要从主存读一个块
NotWriteAllocate(非写分配)
直接写主存单元,不把主存块装入到Cache
计算题:
主存地址空间 确定 主存地址位数
块大小 确定 块内地址位数
cache总容量/块大小=cache行数的位数 即为索引
以四路组相联为例,计算所得Cache行数需要/4 所得的组 组号的位数即为 索引
主存地址位数 - 块内地址位数 - cache行数 = 标记位数
Cache容量 = cache行数 x ((修改位1位_只有 写回方式 有)+ 有效位1位 + 标记位数 + 贮存块大小 x 8bit)
内存被分成固定长且比较小的存储块==(页框、实页、物理页)==
每个进程也被划分成固定长的程序块==(页、虚页、逻辑页)==
程序块可装入主存页框中
无需用连续页框存放一个进程
操作系统为每个进程生成一个页表
通过页表(pagetable)实现逻辑地址向物理地址转换
逻辑地址 (Logical Address) :
程序中指令所用地址(进程所在地址空间),也称为虚拟地址(VirtualAddress,简称VA)
物理地址 (Physical Address, 简称PA):
存放指令或数据的实际主存地址,也称为实地址、主存地址。
程序员在比实际主存空间大得多的逻辑地址空间中编写程序
程序执行时,把当前需要的程序段和相应的数据块调入主存,其他暂不用的部分存放在磁盘上
指令执行时,通过硬件将逻辑地址(也称虚拟地址或虚地址)转化为物理地址(也称主存地址或实地址)
在发生程序或数据访问失效时,由操作系统进行主存和磁盘之间的信息交换
页表描述了虚拟页和物理页框之间的映射关系
虚拟存储器机制由硬件与操作系统共同协作实现,涉及到操作系统中的许多概念,
如进程、进程的上下文切换、存储器分配、虚拟地址空间、缺页处理等。
每个进程有一个页表,其中有
装入位、修改(Dirt)位、替换控制位、访问权限位、禁止缓存位、实页号。
一个页表的项数由什么决定?
页表首址记录在页表基址寄存器中,理论上由虚拟地址空间大小决定。
每个进程的页表大小一样吗?
各进程有相同虚拟空间,故理论上一样。实际大小看具体实现方式。
把经常要查的页表项放到Cache中,这种在Cache中的页表项组成的页表称为TranslationLookasideBufferorTLB(快表)
TLB中的页表项:tag+主存页表项
TLB全相联时,没有index,只有Tag,虚页号需与每个Tag比较;
TLB组相联时,贝则虚页号高位为Tag,低位为index,用作组索引1。
结构如下:
页:14位 虚页号:36-14=22位 物理页号:18位
组号:256/2=128 索引:7位 标记:22-7=15位
虚页号 : (15+1+1+2+2+18)=39 标记+有效位+修改位+使用位+存取位+物理页号
快表大小:39*256位
分段式
根据程序的模块化性质,将程序按逻辑结构划分成多个相对独立的部分,这些相对独立的部分被称为段
例如,代码段、只读数据段、可读写数据段
一个大程序由多个程序段和数据段构成,这些段作为独立的逻辑单位可以被其他程序段调用,形成段间连接
由于段是按程序逻辑结构划分的,分段对程序员(编译器)是不透明;而分页方式对编译器是透明的段通常带有段名或基地址,以便于程序编写、编译器优化和操作系统调度管理
段表首地址在段表基址寄存器 段表由段表项组成
虚拟地址=段号(段名)+段内偏移
分页:实现简单、开销少;但页面不是逻辑上独立的实体,可能会出现跨页问题,不利于管理、保护和共享
分段:段的分界与程序的自然分界相对应,逻辑独立的段分开易于编译、管理、修改和保护;但段长度各不相同,给主存分配带来麻烦,且内存容易形成大量碎片
段页式
段、页式结合:程序的虚拟地址空间按模块分段、段内再分页,在主存以页为基本单位管理
逻辑地址由段地址、页地址和偏移量三个字段构成
用段表和页表(每段一个)进行两级定位管理
先分段:根据段地址到段表中找到该段对应的页表首地址,按段实现共享和保护
再分页:根据页地址从页表中找到对应页框地址,形成物理地址,按页调入调出
兼具分页式和分段式存储的有点,但在地址转换过程中需要多次查表
部分CPU状态只能由内核程序读写而不能由用户程序读写,操作系统内核可以用特殊的指令来读写这些特殊指令又称管态指令或特权指令,如刷新Cache、刷新TLB、改变特权模式、停止处理器执行等
执行内核程序时处理器所处的模式称为管理模式(SupervisorMode)、内核模式(KernelMode)、超级用户模式或管理程序状态,简称管态、管理态、内核态或核心态
执行用户程序时处理器所处的模式称为用户模式(UserMode)、用户状态或目标程序状态,简称目态或用户态
提供让CPU在管理模式(内核态)和用户模式(用户态)之间的相互转换机制
如果用户需要访问内核代码和数据,必须通过系统调用接口LO(执行陷阱指令)来间接访问
响应异常和中断可使CPU从用户态转到内核态
异常和中断处理后的返回指令可使CPU从内核态转到用户态