目录
1.进程以分页的方式存储在内存中,即将进程进行拆分,再将其放入内存的物理页框中(数据部分和指令部分)
2.指令的执行需要使用某些数据时,其地址通过逻辑地址(VA)的形式给出;PC指向的也是逻辑地址(VA);每个进程的部分相同的低地址(或者高地址)都会映射到同一些页框中(相当于页面共享),这些页框中存放的是执行系统调用的代码
即执行需要的数据和下一条指令都是逻辑地址,都要进行逻辑地址到物理地址的转换
3.虚拟内存地址位数由操作系统位数决定,36位操作系统,即36bit的虚拟地址
4.页内偏移量位数(页内地址)由页面大小决定,每个页面大小为4KB,即页内地址为12位(物理地址和虚拟地址的页面大小相等,即页内地址位数相同)
5.物理地址地址位数由物理地址空间大小决定,物理地址空间4GB,即32bit的物理地址(通常物理地址的位数小于虚拟地址的位数)
6.每个进程一张页表,页表始址存放在该进程的PCB中
1.页表存储在内存中;TLB由SRAM组成,当CPU访问某一页表项后,该页表项将会被复制到TLB中,下次访问同一地址时,就无需访存查页表,由TLB就可以得到其物理地址,加快地址转换速度
2.①没有TLB(需要访存):根据虚拟页号查询页表→页框号→将页框号和页内偏移量进行拼接→物理地址
②有TLB(不需要访存):TLB
(1)根据虚拟页号查询TLB→TLB命中→页框号→将页框号和页内偏移量进行拼接→物理地址(命中即跳过查询慢表的过程,直接进行拼接得到物理地址)
(2)根据虚拟页号查询TLB→TLB未命中→根据虚拟页号查询页表→页框号→将页框号和页内偏移量进行拼接→物理地址
3.①单级页表:通过页号 * 页表项单位大小的方式找到该页号所对应的页表项(CPU会存储当前进程的页表起始地址,即页表始址):页表项顺序存储(类似数组),且每个页表项的大小相等
②由于页表需要连续存储的特性,因此,单级页表可能过长的连续空间,通过多级页表的方式解决需要占用过大连续存储空间的问题,使其可以离散存放(二级页表):
将24bit的页目录号分成12bit页目录号(一级页表)和12bit页号(二级页表),先对比页目录号得到存放二级页表的页框号,再通过页号得到物理地址的页框号
即页目录表→二级页表→物理页框(TLB的存储形式不会发生改变)
4.TLB就是最近访问的页表中某行页表项的副本数据(TLB标记即虚拟页号)
5.TLB的查询方式:用虚拟页号和TLB中每行的TLB标记进行比较(同时比较),并且需要注意有效位是否为1
根据虚拟页号的末尾3bit查找对应的组号→依次对比剩余虚拟页号位(24 - 3 = 21位)是否和组内TLB标记匹配→对比有效位→拼接得到物理地址
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.主存块大小 = Cache块大小;页框大小 >Cache块大小:主存块和页框是不同概念
2.字块内地址位数决定Cache块的大小,字块内地址6bit即Cache块大小为64B
3.根据Cache映射方式和Cache块大小确定物理地址的格式结构
4.根据字块内地址确定访问该Cache块中的具体字节 / 字
用标记对比Cache中的每一行,且有效位为1,根据字块内地址找到某个字 / 字节
1.根据Cache中有几行,确定行号的位数
2.Cache标记位数 = 物理地址总位数 - 字块内地址位数
3.根据物理地址中行号所对应的位数唯一确定该数据块在Cache中出现的位置
4.查询顺序:对比行号→对比Cache标记→对比有效位→根据字块内地址访问Cache块中的某一字 / 字节
5.Cache中的行号隐含(顺序存储,类似数组)
1.每组中Cache块的行数决定是几路组相联映射,每组2行即2路组相联映射
2.组个数决定组号的位数,8组即组号3bit(0 - 7)
3.查询顺序:对比组号→对比Cache标记→对比有效位→根据字块内地址访问Cache块中的某一字 / 字节
4.路数代表每组多少个,而不是分为多少组;总个数 / 路数 = 组数
设主存大小为4KB
(1)①每个页框为1KB → 共4个页框 → 页框号为2bit,页内偏移量为10bit
②主存大小为4KB,每个主存块为64B → 共4KB / 64B = 64块,即主存块号为6bit,字块内地址为6bit
③主存若以页框为单位,被分为4个页框;若以主存块为单位,被分为64个主存块
(2)逻辑地址转换为物理地址:以页框为单位;使用物理地址通过Cache找数据时,以块为单位
(3)磁盘和主存以页框为单位进行数据交换,容量大方便进行数据交互;主存和Cache以主存块为单位,基于局部性原理,保证Cache的效率
(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(写回磁盘)的速度和读写主存的速度差异过大
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总行数 + 几路组相联映射决定位数(总行数 / 路数)
行号和组号是被隐含的,不会额外占用标志位
1.Tag:①全相联映射:位数 = 虚拟页号位数
②组相联映射:位数 = 虚拟页号位数 - 组号位数
2.有效位:一定存在,且固定为1bit
3.页框号:由页大小决定(注意区别于主存块大小)
4.替换信息位:与Cache同理
(1)①总块数 = 数据区容量 / 主存块大小 = 32KB / 64B = 512块
②组数 = 总块数 / 8路 = 512 / 8 = 64 → 6bit
③块内地址: 主存块大小 = 64B → 6bit
④Tag = 32bit(物理地址位数) - 6 bit(组号)- 6 bit(块内地址)= 20 bit
⑤直写法:Cache数据和对应的主存块数据保持一致,不需要修改位
⑥LRU:8路组相联映射,每组8个,故3 bit(0 - 7)
(1)物理地址为28bit(右侧20 + 3 + 5,即是物理地址分成三个部分)
(2)TLB采用全相联映射,SRAM
(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.通过中间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 → 四路组相联映射
四路组相联映射