首页 > 系统相关 >【操作系统-内存】地址翻译流程图

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

时间:2023-06-28 11:46:26浏览次数:47  
标签:操作系统 访问 -- Cache 内存 TLB PA 页表 流程图

简略版:

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,内存,TLB,PA,页表,流程图
From: https://www.cnblogs.com/Mount256/p/17510980.html

相关文章

  • 《深入理解Java虚拟机第3版》垃圾收集器与内存分配策略、虚拟机性能监控故障处理工具
    目录往期博客:Java课堂篇3_初识JMM、常量池简单理解(字符串常量池、静态常量池、大整型常量池)为什么要了解垃圾收集和内存分配?如何判断对象已死?引用计数算法可达性分析算法JDK1.2之后引用的扩充回收方法区垃圾收集算法分代收集理论标记清除标记复制标记整理对象分配虚拟机......
  • Java内存区域
    JVM内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【Java堆、方法区】、直接内存。线程私有数据区域生命周期与线程相同,依赖用户线程的启动/结束而创建/销毁(在HotspotVM内,每个线程都与操作系统的本地线程直接映射,因此部分内存区域的存/否跟随本......
  • 麒麟操作系统无法打开美图秀秀解决方法
    麒麟操作系统2303安装美图秀秀双击无法打开提示如下使用脚本运行报错/opt/mtxx/mtxx.sh报错信息如下mtxx:/opt/mtxx/libcrypto.so.1.1:version`OPENSSL_1_1_1f'notfound(requiredby/lib/x86_64-linux-gnu/libssl.so.1.1)原因分析:操作系统模块libssl.so.1.1问题......
  • 2023春季操作系统复习
    2023春季操作系统复习目录2023春季操作系统复习ch1操作系统概述1.2计算机系统组成1.2.3I/O结构1.3计算机系统的体系结构1.3.2多处理器系统1.3.3集群系统1.4操作系统的结构1.5操作系统的执行1.5.1双重模式与多重模式1.5.2定时器1.6进程管理1.7内存管理1.8存储管理1.8......
  • 麒麟操作系统怎么取消打开浏览器弹出秘钥环
    麒麟操作系统打开Edge谷歌浏览器会弹出输入密钥环的弹窗解决方法单击继续按钮需要连续点击两次复现弹出密钥环操作,删除以下文件夹即可复现$HOME/.local/share/keyrings......
  • ubunut 虚拟机 , 编译过程中, 内存爆满, 卡死 ,重启后报错。
    问题: 在虚拟机中编译linux 过程中,内存沾满,之后强制重启,之后,虚拟机无法启动。报错如下:  解决的方法就是,找到虚拟机的文件夹,然后删除以.lck后缀的文件夹,所有的都产出,重启就可以了。 ......
  • 驱动开发:内核读写内存多级偏移
    让我们继续在《内核读写内存浮点数》的基础之上做一个简单的延申,如何实现多级偏移读写,其实很简单,读写函数无需改变,只是在读写之前提前做好计算工作,以此来得到一个内存偏移值,并通过调用内存写入原函数实现写出数据的目的。以读取偏移内存为例,如下代码同样来源于本人的LyMemory读写......
  • ​​统信UOS服务器操作系统迁移docker目录​​
    原文链接:统信UOS服务器操作系统迁移docker目录hello,大家好啊,今天给大家带来一篇在统信UOS服务器操作系统上迁移docker目录的文章,在工作中我们会发现,当我们没有将/var目录单独分区的时候,运行docker容器后,会将根目录挤压,因此我们可以通过迁移docker目录的方式,释放根路径的磁盘空间,文......
  • Hyper-V是微软开发的一种虚拟化技术,它允许在一台物理计算机上创建和管理多个虚拟机。
    Hyper-V是微软开发的一种虚拟化技术,它允许在一台物理计算机上创建和管理多个虚拟机。虚拟机可以运行不同的操作系统,如Windows、Linux等。以下是关于Hyper-V的一些要点:虚拟化技术:Hyper-V是一种类型-1(裸金属)虚拟化技术,它直接运行在硬件上,而不需要一个宿主操作系统。这使得虚拟机能......
  • Visual Basic(简称VB)是一种编程语言,由微软公司开发。它是基于事件驱动的编程语言,主要用
    VisualBasic(简称VB)是一种编程语言,由微软公司开发。它是基于事件驱动的编程语言,主要用于Windows操作系统上的应用程序开发。在VisualBasic中,可以使用图形用户界面(GUI)来创建各种应用程序,包括桌面应用程序、数据库应用程序、Web应用程序等。VisualBasic提供了许多现成的控件和工......