G
N
I
D
A
O
L

【操作系统-内存】地址翻译流程图

地址翻译流程图

简略版:

stateDiagram-v2 state if_state <> CPU产生VA --> 访问TLB 访问TLB --> 转VA并访问Cache: 命中 访问TLB --> 访问页表: 缺失 访问页表 --> 转VA并访问Cache: 命中 访问页表 --> 缺页处理: 缺失 缺页处理 --> 访问TLB: 重新执行 转VA并访问Cache --> 读取Cache数据: 命中 转VA并访问Cache --> 访问内存数据: 缺失

完整版:(注意,TLB和Cache是组相联的)

stateDiagram-v2 state if_state <> CPU产生VA(VA=页号+页内偏移量) --> 访问PTR(获取页表长度) 访问PTR(获取页表长度) --> 访问TLB(页号=TLB标记+TLB组号): 页号 < 页表长度 访问PTR(获取页表长度) --> 越界中断: 页号 ≥ 页表长度 访问TLB(页号=TLB标记+TLB组号) --> 访问页表(页表项PA=页表起始PA+页号×页表项长度): 缺失,访问PTR(获取页表起始PA) 访问TLB(页号=TLB标记+TLB组号) --> 读取页框号: 命中 访问页表(页表项PA=页表起始PA+页号×页表项长度) --> 缺页中断处理:缺失 访问页表(页表项PA=页表起始PA+页号×页表项长度) --> 读取页框号,修改TLB:命中 state 缺页中断处理{ [*] --> 外存找到缺页 外存找到缺页 --> 内存是否已满 内存是否已满 --> 页面置换: 是 内存是否已满 --> 该页换入内存: 否 页面置换 --> 该页换入内存 该页换入内存 --> 修改页表 state 页面置换{ [*] --> 选择一页换出 选择一页换出 --> 该页是否被修改过 该页是否被修改过 --> 该页写入外存:是 该页是否被修改过 --> [*]:否 该页写入外存 --> [*] } 修改页表 --> [*] } 缺页中断处理 --> 修改TLB 读取页框号 --> CPU获得PA(PA=页框号+页内偏移量) 读取页框号,修改TLB --> CPU获得PA(PA=页框号+页内偏移量) 修改TLB --> 访问TLB(页号=TLB标记+TLB组号): 重新执行被中断指令 CPU获得PA(PA=页框号+页内偏移量) --> 访问Cache(PA=Cache标记+Cache组号+块内偏移量) 访问Cache(PA=Cache标记+Cache组号+块内偏移量)--> 读取数据: 命中 访问Cache(PA=Cache标记+Cache组号+块内偏移量)--> 访问内存: 缺失 访问内存 --> Cache已满? Cache已满? --> 替换算法: 是 Cache已满? --> 写入新行: 否 替换算法 --> 读取数据 写入新行 --> 读取数据

一级分页存储系统

  • 字节编址
  • 一页为 4KB
  • 逻辑地址空间为 32 位(4GB)
  • 物理地址空间为 28 位(256MB)
  • 页表项长度为 4B
  • TLB为八路组相联,一共16行(组数=16/8=2)
  • Cache为四路组相联,一共16行(组数=16/4=4),Cache行大小为64B

image

image

二级分页存储系统

  • 字节编址
  • 一页为 4KB
  • 逻辑地址空间为 32 位(4GB)
  • 物理地址空间为 28 位(256MB)
  • 页表项长度为 4B
  • 规定页目录表只占一页
  • TLB为八路组相联,一共16行(组数=16/8=2)
  • Cache为四路组相联,一共16行(组数=16/4=4),Cache行大小为64B

image

image

posted @ 2023-06-28 11:33  漫舞八月(Mount256)  阅读(176)  评论(0编辑  收藏  举报