【计组OS】访存过程以及存储层次化结构

embedded/2024/12/19 21:02:39/

                                                                            苏泽 

本专栏纯个人笔记作用 用于记录408 学习笔记记录(敲了两年码实在不习惯手写笔记了)

                                                         如果能帮助到大家当然最好   

但由于是工作后退下来备考 很多说法和想法都会结合实际开发的思想 可能不是那么的纯粹应试

希望大家挑选自己喜欢的口味食用    仅供参考


首先捋清楚 存储体系的层次化结构  我把知识整理成了这样的一张图

那么我们就能很清晰的在这张图上面理解到CPU在访问存储数据的过程

  1. Cache 访问

    • CPU尝试从Cache中获取所需的数据。
    • 如果Cache命中(Cache Hit),则直接从Cache中读取数据,完成访存操作。
  2. TLB 查询

    • 如果Cache未命中(Cache Miss),CPU接下来会检查TLB(Translation Lookaside Buffer)。
    • TLB是一种特殊的存储器,用于快速地址转换,存储最近访问的页表条目。
    • 如果TLB命中(TLB Hit),则使用TLB中的信息完成地址转换。
  3. 页表查询

    • 如果TLB未命中(TLB Miss),CPU将访问页表进行地址转换。
    • 页表存储逻辑地址到物理地址的映射关系。
    • 操作系统维护页表,其中包含有效位,指示对应的页面是否在物理内存中。
  4. 有效位检查

    • 在页表中找到对应的页表项后,CPU检查该项的有效位。
    • 如果有效位为1,表示数据在主存中,CPU可以继续访问主存以获取数据。
  5. 缺页异常处理

    • 如果有效位为0,表示数据不在主存中,即发生了缺页异常(Page Fault)。
    • 缺页异常处理程序被调用,操作系统开始处理这一异常。
  6. 辅存访问

    • 操作系统确定辅存中数据的位置,通常通过页面置换算法的数据结构来选择一个页面进行置换。
  7. 数据加载与页表更新

    • 操作系统从辅存中加载缺失的数据到主存。
    • 加载完成后,操作系统更新页表,将新的物理地址映射到原来的逻辑地址。
  8. 重新尝试访问

    • 页表更新后,操作系统会重新执行导致缺页异常的指令。
    • CPU再次尝试访问数据,这次数据应该已经在主存中,可以成功访问。
  9. 继续执行程序

    • 一旦数据被加载到主存并且页表被更新,CPU可以继续执行程序,就像没有发生缺页异常一样。


http://www.ppmy.cn/embedded/36736.html

相关文章

市面上好用的AI工具有哪些?

市面上的AI工具数不胜数,选择合适自己的AI工具则需要考虑自己的需求,看是否能满足的使用需求。那么市面上又有哪些好用的AI工具呢? 泰迪智能科技拥有简单易用的大数据挖掘建模平台,能够让数据创造更大的价值。 功能板块&…

前端axios发get请求,后端springboot接收不到参数且返回400

这是我的前端请求 import service from "/utils/axios";login(userInfo){return service.get(/login,{param:userInfo});}, 这是我的后端接收 RequestMapping(value"/login",methodRequestMethod.GET)ResponseBodypublic Map<String, Object> logi…

C数据结构:链表高级篇

单链表的定义 由于顺序表的插入删除操作需要移动大量的元素&#xff0c;影响了运行效率&#xff0c;因此引入了线性表的链式存储——单链表。单链表通过一组任意的存储单元来存储线性表中的数据元素&#xff0c;不需要使用地址连续的存储单元&#xff0c;因此它不要求在逻辑上相…

什么是接口和类?Java中的集合框架有哪些主要接口和类?

Java中的集合框架有哪些主要接口和类&#xff1f; Java中的集合框架&#xff08;Java Collections Framework&#xff09;提供了一套丰富的接口和类&#xff0c;用于存储和操作对象的集合。以下是Java集合框架中的主要接口和类&#xff1a; 主要接口 Collection&#xff1a; 这…

leetcode LCR088.使用最小花费爬楼梯

思路&#xff1a;DP 这道题相对来说比较基础&#xff0c;但是有时候容易出错的一点就是在dp递推的时候&#xff0c;由于我们的思路是从最后一步向着初始状态推的&#xff0c;所以在编写程序的时候也容易就直接推着走了。其实实际上我们倒着想只是为了推理&#xff0c;真正要递…

Linux程序库文件调试测试方法

Linux编译后的.so文件是需要进行上机测试的&#xff0c;对于已经量产的硬件平台来说一般是通过具有相同功能的样机测试新版本的功能&#xff0c;具体如下。 Linux的量产固件由于已经经过裁剪系统内部的usr lib etc等目录是只读的权限不可以修改因此不能将测试库直接放到其下进行…

Leetcode 590:N叉树的后序遍历

给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 后序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#xff0c;每组子节点由空值 null 分隔&#xff08;请参见示例&#xff09;。 //后序遍历N叉树public static List<Integer> postorder(Node root) {…

02-Fortran基础--Fortran操作符与控制结构

02-Fortran基础--Fortran操作符与控制结构 0 引言1 操作符1.1 数学运算符1.2 逻辑运算符1.3 关系运算符 2 控制流程2.1 条件结构2.2 循环结构2.3 分支结构 0 引言 运算符和控制流程对编程语言是必须的,Fortran的操作符和控制流程涉及到各种数学运算符、逻辑运算符以及控制结构。…