1.页式存储系统
1.进程以分页的方式存储在内存中,即将进程进行拆分,再将其放入内存的物理页框中(数据部分和指令部分)
2.指令的执行需要使用某些数据时,其地址通过逻辑地址(VA)的形式给出;PC指向的也是逻辑地址(VA);每个进程的部分相同的低地址(或者高地址)都会映射到同一些页框中(相当于页面共享),这些页框中存放的是执行系统调用的代码
3.虚拟内存地址位数由操作系统位数决定,36位操作系统,即36bit的虚拟地址
4.页内偏移量位数(页内地址)由页面大小决定,每个页面大小为4KB,即页内地址为12位(物理地址和虚拟地址的页面大小相等,即页内地址位数相同)
5.物理地址地址位数由物理地址空间大小决定,物理地址空间4GB,即32bit的物理地址(通常物理地址的位数小于虚拟地址的位数)
6.每个进程一张页表,页表始址存放在该进程的PCB中
1.1.TLB
1.1.1.全相联映射
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
1.1.2.组相联映射
根据虚拟页号的末尾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块大小:主存块和页框是不同概念
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.真题
(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中该主存块被淘汰时,才将修改内容写回块中