计算机组成原理--存储系统

1.页式存储系统

虚拟地址=虚拟页号+页内地址(页内偏移量)  物理地址=页框号+页内地址

1.进程以分页的方式存储在内存中,即将进程进行拆分,再将其放入内存的物理页框中(数据部分和指令部分)

2.指令的执行需要使用某些数据时,其地址通过逻辑地址(VA)的形式给出;PC指向的也是逻辑地址(VA);每个进程的部分相同的低地址(或者高地址)都会映射到同一些页框中(相当于页面共享),这些页框中存放的是执行系统调用的代码

即执行需要的数据和下一条指令都是逻辑地址,都要进行逻辑地址到物理地址的转换

3.虚拟内存地址位数由操作系统位数决定,36位操作系统,即36bit的虚拟地址

4.页内偏移量位数(页内地址)由页面大小决定,每个页面大小为4KB,即页内地址为12位(物理地址和虚拟地址的页面大小相等,即页内地址位数相同)

5.物理地址地址位数由物理地址空间大小决定,物理地址空间4GB,即32bit的物理地址(通常物理地址的位数小于虚拟地址的位数

6.每个进程一张页表,页表始址存放在该进程的PCB中

    1. TLB

1.1.1.全相联映射-以存放在任意位置(Cache存储空间利用率高,但是,可能需要查找所有块的标记,查找速度最慢)

1.页表存储在内存中;TLB由SRAM组成,当CPU访问某一页表项后,该页表项将会被复制到TLB中,下次访问同一地址时,就无需访存查页表,由TLB就可以得到其物理地址,加快地址转换速度

2.①没有TLB(需要访存):根据虚拟页号查询页表→页框号→将页框号和页内偏移量进行拼接→物理地址

②有TLB(不需要访存):TLB

(1)根据虚拟页号查询TLB→TLB命中→页框号→将页框号和页内偏移量进行拼接→物理地址(命中即跳过查询慢表的过程,直接进行拼接得到物理地址)

(2)根据虚拟页号查询TLB→TLB未命中→根据虚拟页号查询页表→页框号→将页框号和页内偏移量进行拼接→物理地址

3.①单级页表:通过页号 * 页表项单位大小的方式找到该页号所对应的页表项(CPU会存储当前进程的页表起始地址,即页表始址):页表项顺序存储(类似数组),且每个页表项的大小相等

②由于页表需要连续存储的特性,因此,单级页表可能过长的连续空间,通过多级页表的方式解决需要占用过大连续存储空间的问题,使其可以离散存放(二级页表):

将24bit的页目录号分成12bit页目录号(一级页表)和12bit页号(二级页表),先对比页目录号得到存放二级页表的页框号二级页表所在的物理块号,再通过页号得到物理地址的页框号

即页目录表→二级页表→物理页框(TLB的存储形式不会发生改变=TLB始终是一级页表)

4.TLB就是最近访问的页表中某行页表项的副本数据(TLB标记即虚拟页号)

5.TLB的查询方式:用虚拟页号和TLB中每行的TLB标记进行比较(同时比较),并且需要注意有效位是否为1

1.1.2.组相联映射--据主存块号的末尾n位可以唯一确定该主存块将会存入属于Cache的哪个组

        本图为4路组相连映射

根据虚拟页号的末尾3bit查找对应的组号→依次对比剩余虚拟页号位(24 - 3 = 21位)是否和组内TLB标记匹配→对比有效位→拼接得到物理地址

1.2.各组件存放位置

1.PCB:抽象为一种数据结构,存放在主存的内核区

2.页表:存放在主存的内核区

3.页表始址:指明该进程的页表从哪开始存放,INT型变量,包含于PCB

4.页表始址寄存器(硬件):包含于MMU(内存管理单元)中;系统运行进程前(切换进程),CPU将会把页表始址复制到页表始址寄存器中(每个进程的页表始址不同)

5.MMU(硬件):集成在CPU中

6.TLB(硬件,当前进程页表项的副本):高速存储器,SRAM,包含于MMU,属于CPU;切换进程后,之前的TLB的有效位全部置为0(TLB是当前进程的页表项副本,故之前进程的TLB作废

7.Cache(硬件,内存的副本):高速存储器,包含于CPU,但不属于MMU的一部分;切换进程,Cache进程不作废,不同进程可能共享同一页框

(1)TLB和Cache在底层硬件原理上相同,但作用不同

(2)切换进程:页表始址寄存器更新;TLB作废;Cache不需要全部作废,但是会经常出现Cache未命中

1.3.Cache

1.主存块大小 = Cache块大小;页框大小 >Cache块大小:主存块和页框是不同概念

原因:内存物理上被分为若干页框考试中一般认为页框大小和磁盘块大小一致,但是现实中可能不一致)

页框是主存从外存进行数据交换的的基本单位,主存块是主存与cache进行数据交换的基本单位

由于主存在磁盘中交换数据的效率不高,速度慢,所以一次会交换比较多的数据,但是Cache的容量小,主存和Cache交换数据不会太多

2.字块内地址位数决定Cache块的大小,字块内地址6bit即Cache块大小为64B

3.根据Cache映射方式和Cache块大小确定物理地址的格式结构

4.根据字块内地址确定访问该Cache块中的具体字节 / 字

1.3.1.全相联映射

用标记对比Cache中的每一行,且有效位为1,根据字块内地址找到某个字 / 字节

1.3.2.直接映射

1.根据Cache中有几行,确定行号的位数

2.Cache标记位数 = 物理地址总位数 - 字块内地址位数

3.根据物理地址中行号所对应的位数唯一确定该数据块在Cache中出现的位置

4.查询顺序:对比行号→对比Cache标记→对比有效位→根据字块内地址访问Cache块中的某一字 / 字节

5.Cache中的行号隐含(顺序存储,类似数组)

1.3.3.组相联映射

1.每组中Cache块的行数决定是几路组相联映射,每组2行即2路组相联映射

2.组个数决定组号的位数,8组即组号3bit(0 - 7)

3.查询顺序:对比组号→对比Cache标记→对比有效位→根据字块内地址访问Cache块中的某一字 / 字节

4.路数代表每组多少个,而不是分为多少组;总个数 / 路数 = 组数

1.4.页框和主存块的关系

设主存大小为4KB

  1. ①每个页框为1KB → 共4个页框 → 页框号为2bit,页内偏移量为10bit

②主存大小为4KB,每个主存块为64B → 共4KB / 64B = 64块,即主存块号为6bit,字块内地址为6bit

③主存若以页框为单位,被分为4个页框;若以主存块为单位,被分为64个主存块

(2)逻辑地址转换为物理地址:以页框为单位;使用物理地址通过Cache找数据时,以块为单位

(3)磁盘和主存以页框为单位进行数据交换,容量大方便进行数据交互;主存和Cache以主存块为单位,基于局部性原理,保证Cache的效率

1.5.真题--2016

  1. ①按字节编址:每个地址对应一个字节

②虚拟地址为32位→VA = 32bit;物理地址为24位→PA = 24bit;页大小为8KB→页内地址 = 13bit;Cache数据块大小为64KB→Cache所有块容量之和为64KB

③页内地址13 bit,且虚拟地址为 32bit → A(虚拟页号)地址为 32 - 13 = 19 bit

④TLB采用全相联映射 → TLB标记位 = 虚拟页号位 → B = A = 19 bit

⑤页内地址13 bit → 页内偏移量 = 13bit → D = 13bit

⑥物理地址24 bit,页内偏移量13 bit → C = 页框号 = 24 - 13 = 11 bit

⑦Cache采用二路组相联映射方式 → 物理地址被分为三部分:Cache标记位(Tag) + 组号 + 字块内地址

⑧Cache块大小 = 主存块大小 = 64B → 字块内地址 = 6 bit

⑨Cache数据块大小为64KB → 共有64KB / 64B = 1K 个Cache块 → Cache采用二路组相联映射方式 → 每组两行Cache → 共有 1K / 2 = 512个组 → 组号 9bit

⑩Cache标记位 = 物理地址总位数24 bit - 字块内地址6 bit - 组号9 bit = 9 bit

(2)①将4099转换为18bit的二进制数 → 00 0001 0000 0000 0011 → 组号为末尾9 bit → 0 0000 0011 = 3→ 组号为3

②H为Cache标记位,即4099的前9bit →00 0001 000

(3)Cache缺失处理将主存块调入Cache中;缺页处理从外存调入一个页进入主存;磁盘I/O速度低于主存读写速度,故缺页处理时间开销更大

(4)① 直写策略:Cache中内存块被修改的时候同步写回主存的内存块

回写策略:只有Cache中该主存块被淘汰时,才将修改内容写回块中

②磁盘I/O(写回磁盘)的速度和读写主存的速度差异过大

2.Cache行和TLB的构成

2.1.Cache行的构成

1.Cache数据区总大小 = Cache总行数 * Cache块大小

2.Cache总大小 = Cache数据区总大小 + Cache标志位总大小

3.Cache行构成 = Tag + 有效位 + 替换信息位 + 脏位 + 块内数据

①Tag:Cache标签;由物理地址位数 + Cache总行数 + Cache块大小 + Cache映射方式共同决定位数

(1)直接映射:Tag = 物理地址位数 - 行号位数 - 块内地址位数(行号 = Cache总行数)

(2)组相联映射:Tag = 物理地址位数 - 组号位数 - 块内地址位数(组号 = Cache总行数 / 几路组相联)

(3)全相联映射:Tag = 物理地址位数 - 块内地址位数

②有效位:该Cache行的数据是否有效,固定存在且固定为 1 bit

③替换信息位:反映当Cache行满需要进行替换时,该Cache的被替换优先级;由映射方式 + 替换算法 + Cache总行数决定位数

(1)直接映射:每个主存块唯一确定在Cache中的映射位置,故不需要替换信息位,即 0 bit

(2)全相联映射:随机替换算法 → 0 bit;FIFO、LRU → log 行数(以2位底)bit

(3)组相联映射:随机替换算法 → 0 bit;FIFO、LRU → lod 路数(以2位底)bit

④脏位(修改位):在该行Cache被替换时,根据脏位判断该Cache是否被修改过,即是否需要写回内存

写回法(write - back):只有淘汰某个Cache块时才将被修改过的Cache写回主存,故需要脏位来表示Cache是否被修改过;脏位为 1 bit

直接法(write - through):Cache被修改时直接写回主存,即Cache内数据和主存中数据保持一致,故不需要脏位;脏位为 0 bit

⑤块内数据:Cache块大小决定位数

⑥行号(直接映射):Cache总行数决定位数

组号(组相联映射):Cache总行数 + 几路组相联映射决定位数(总行数 / 路数)

行号和组号是被隐含的,不会额外占用标志位

2.2.TLB的构成

1.Tag: ①全相联映射:位数 = 虚拟页号位数 

②组相联映射:位数 = 虚拟页号位数 - 组号位数

2.有效位:一定存在,且固定为1bit

3.页框号:由页大小决定(注意区别于主存块大小)

4.替换信息位:与Cache同理

3.真题--2020

八路组相连映射--8块为1组

(1)①总块数 = 数据区容量 / 主存块大小 = 32KB / 64B = 512块

②组数 = 总块数 / 8路 = 512 / 8 = 64 → 6bit   

③块内地址: 主存块大小 = 64B → 6bit

④Tag = 32bit(物理地址位数) - 6 bit(组号)- 6 bit(块内地址)= 20 bit

直写法:Cache数据和对应的主存块数据保持一致,不需要修改位

  回写法:写Cache的时候不写主存,只有淘汰Cache块时才会把整块写回主存(需要设置脏位)

⑥LRU:8路组相联映射,每组8个,故3 bit(0 - 7)

(2)起始地址0080 00C0H-->0000 0000 1000 0000 0000 0000 1100 0000B

块内地址从0开始,代表数组S从一个主存块的起始地址开始存放,每个主存块刚好存放64B/4B=16个数组元素

一共得访问1024个元素,故需要占1024/16=64个块,由于刚开始Cache为空,所以每个块的第一个元素第一次被访问时都会造成Cache缺失,Cache共缺失64次

(3)注:别忘了开始时Cache均为空,代表着cache行的有效位都为0

0001 003H=0000 0000 0001 0000 0000 0000 0000 0011B

根据物理地址的组号得到对应的Cache的第0组,由于一组包括8个Cache行

检查0号分组的8个Cache块,有效位均为0,因此Cache访问缺失

由于Cache均为空,所以会将主存单元0001 0003H对应的主存块整块放到Cache第0组的任意一行

并将有效位置为1,并修改LRU位
根据块内地址000011从Cache行中取出指令字

备注:LRU算法  ---替换“计数器”最大的

  1. 命中时,所命中的行的计数器清零,比其低的计数器加1,其余不变
  2. 未命中时且还有空闲行时,新装入的行的计数器置0,其余非空闲行全加1
    (3)为命中且无空闲块时,计数器值最大的被淘汰,新装入的块的计数器置0,其余全加1

真题--2019

(1)物理地址为28bit(右侧20 + 3 + 5,即是物理地址分成三个部分)

(2)TLB采用全相联映射,SRAM

     如果是组相连映射或者直接映射,就不会依次对比,而且地址划分也不会是Tag+实页号

(3) ①组相联映射(每次都判断左右tag是否匹配,故是组相联映射,且为二路组相联

②LRU → 替换信息位;二路组相联映射 → 每组2个Cache行 →1bit

③写回法 → 脏位:1 bit

④Cache总行数:组号3bit → 分为8组;二路组相联映射 → 每组2行Cache;8 * 2 = 16行

⑤Tag = 20bit

⑥总容量 = (20 + 1 + 1 + 1 + 32 * 8)* 16b,即(Tag + 脏位 + 有效位 + LRU + 数据)* 行数

⑦有效位说明该Cache的数据是否有效

(4) ①0008 C040H的虚拟页号位0008 C得到实页号为0040

②实页号0040与页内地址040进行拼接得到物理地址→0040 040H

③0040 040H的末尾8bit为40H,即0100 0000,得到组号为010,即2

④对比组号为2的Cache,有0040 0的Cache标签,但是有效位为0,故Cache未命中

⑤0007 C260H的页内地址为260H,取末尾8bit,即0110 0000,组号为011,即3

1.45题中的第一列为行号,第二列为指令的虚拟地址,第三列为机器指令,第四列为汇编指令

2.主存地址32位,即物理地址为32位

3.页大小为4KB,按字节编址,即页内偏移量为12位

4.push指令的虚拟地址为0040 1000H,即虚拟页号为0040 1;ret指令的虚拟地址为0040 104AH,即虚拟页号为0040 1;两者的虚拟页号相等,故两个指令在同一页中

5.主存块大小为64B,即块内地址为6位

6.指令Cache有64行;采用四路组相联映射,即每组4行Cache;组数 = 64 / 4 = 16,即组号4bit

7.Tag标记位 = 32位(物理地址)- 6位(块内地址)- 4位(组号)= 22位

8.Call指令的虚拟地址为0040 1025H,转换成二进制后,相应的组号位为0000,即0号组

虚拟地址分为虚拟页号和页内偏移量,虚拟地址转换为物理地址时,将会使用对应的页框号拼接上页内偏移量形成物理地址,故页内偏移量就是物理地址的一部分,且为物理地址的低地址部分

  1. Cache硬件原理拓展

1.通过中间3位找到对应的组,通过比较器同时比较组内两个Cache行的Tag是否与物理地址的Tag标记位匹配:通过电路分别将物理地址的Tag标记位和Cache的Tag输入到比较器中(物理地址来自MAR),如果两者相等,比较器输出1;如果两者不相等,比较器输出0

2.通过比较器上面的与门控制多路选择器是否接通:当且仅当比较器输出1(即Cache的Tag和物理地址的Tag相等)且有效位的电路输出1(即Cache数据有效)时,与门输出1给多路选择器,即多路选择器连通(但是仅连通左半边或者右半边,即将左边的Cache行的Data输入到多路选择器中或者将右边的Cache行的Data输入到多路选择器中,二者只会发生一个),然后多路选择器将输入的Data输出到数据中

3.将物理地址末尾的5位输入到数据中与2中输入的Tag位拼接,形成访问数据的具体字节的地址

①虚拟地址→物理地址:虚拟地址48位由36位VPN(虚拟页号)和12位VPO(页内偏移量)组成

1.左上角:VA即虚拟地址:由36位虚拟页号(VPN)和12位页内偏移量(VPO)组成

2.36位虚拟页号(VPN):由32位TLB标签(TLBT,Tag)和4位组号(TLBI,INDEX)组成;即说明采用的是组相联映射方式

3.组号4位:分为16个分组(16sets)

4.每组4个:四路组相联映射(4entries / set),每个的标志位由PPN(physical page number,物理页号)、Valid(有效位)和Tag(TLB标签)组成

5.通过进行前32位(虚拟页号36位 - 组号4位)和组内各行TLB标签(同32位)进行匹配后,若命中(TLB - hit),则将PPN和PPO(physical page offset,页内偏移量)进行拼接得到物理地址PA

6.左下角:如果TLB miss(TLB未命中),则前36位虚拟页号将会被拆分为4个9位的虚拟页号(VPN),说明采用的是4级页表;CR3是CPU中的寄存器,指向第一级页表的起始地址,然后逐级寻找下一级页表的页表项位置,最终得到PPN,再进行拼接得到物理地址

②物理地址→Cache:物理地址42位由40位CT(Tag)+ 6位CI(Index,组号)+ 6位CO(offset,块内偏移量)组成

1.Cache共64个分组(64 sets),每组8行Cache → 8路组相联映射

2.用物理地址的前40位Tag和组内各行Cache的Tag进行匹配,Cache Hit则得到具体块号,通过块内偏移量在相应位置读出32/64bit

1.TLBT(Tag): TLB标签位,6bit

2.TLBI(Index):TLB组号位,Set为组号,0 - 3,即4组,2bit

3.TLBT + TLBI = VPN(虚拟页号),8bit

4.VPO(页内偏移量),6bit

5.每个Set中有4行Cache → 四路组相联映射

四路组相联映射

2011

1.存取方式

(1)随机存取存储器(Random Access Memory, RAM):读写任何一个存储单元所需时间都相同,与存储单元所在的物理位置无关。【内存条】

(2)顺序存取存储器(Sequential Access Memory, SAM):读写一个存储单元所需时间取决于存储单元所在的物理位置。【磁带】

(3)直接存取存储器(Direct Access Memory,DAM):既有随机存取特性,也有顺序存取特性。先直接选取信息所在区域,然后按顺序方式存取。【磁盘】

(4)相联存储器(Associative Memory):即可以按内容访问的存储器(Content Addressed Memory,CAM)可以按照内容检索到存储位置进行读写,“快表”就是一种相联存储器。

2.信息的可更改性

(1)读写存储器(Read/Write Memory)——即可读、也可写(如:磁盘、内存、Cache)

(2)只读存储器(Read Only Memory)——只能读,不能写(如:实体音乐专辑通常采用 CD-ROM,实体电影采用蓝光光碟,BIOS通常写在ROM中

事实上很多ROM也可多次读写,只是比较麻烦

3.信息的可保存性

信息读出后,原存储信息被破坏——破坏性读出(如DRAM芯片,读出数据后要进行重写)

信息读出后,原存储信息不被破坏——非破坏性读出(如SRAM芯片-cache、磁盘、光盘)

4.存储器的性能指标

  1. 存储容量:存储字数×字长(如1M×8位)。
  2. 单位成本:每位价格 = 总成本 / 总容量。
  3. 存储速度:数据传输率 = 数据的宽度 / 存储周期。
  4. 主存带宽:主存带宽又称数据传输率,表示每秒从主存进出信息的最大数量,单位为字/秒、字节/秒(B/s)或位/秒(b/s)。
  5. 存取时间与存取周期

① 存取时间:存取时间是指从启动一次存储器操作到完成该操作所经历的时间,分为读出时间和写入时间

② 存取周期:存取周期又称为读写周期或访问周期。它是指存储器进行一次完整的读写操作所需的全部时间,即连续两次独立地访问存储器操作(读或写操作)之间所需的最小时间间隔。

数据区容量和Cache总容量的区别

数据区容量表示Cache中能同时容纳的数据信息的总量

“cache总容量”表示Cache中能够同时容纳的数据信息和控制信息的总量

存储器的分类

ROM和RAM都满足随机存取的特性,但是CD-ROM属于光盘,采用的是串行存取方式

芯片引脚的计算

地址线+数据线+读写控制线(看题干)+片选线(有时可用行选通替代)+供电和接地引脚(2)

  1. DRAM地址复用技术,通过行选通线、列选通线分行、列两次传送地址信号

题1:

:2^10=1024,因为采用地址复用技术,因此地址线为5根,数据线8根,行选通线+列选通线+读写控制线4根,一共17根

题2:

4M=2^22,采用地址复用技术,地址线为11根,数据线为8根,共19根

题3:

  1. SRAM不采用地址复用技术

主存容量扩展

  1. 位扩展 多个存储芯片并联 8片8K*1位-->8K*8位
  2. 字扩展 多个存储芯片串联 4片16K*8位-->64K*8位

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值