缓存与内存;缺页中断;缓存映射:组相联

news2025/4/24 22:14:11

文章目录

  • 内存(RAM)与缓存(Cache)
  • Memory Management Unit
      • 缺页中断
  • 多级缓存
      • 缓存替换策略
      • 缓存的映射方式

内存(RAM)与缓存(Cache)

  • 缓存: CPU 内部或非常靠近的高速存储,超快
  • 内存 (Random Access Memory): 是磁盘的缓存 【纳秒】
  • 磁盘:
    • 固态硬盘 SSD:Solid State Drive 【微秒】
    • 机械硬盘 HDD:Hard Disk Drive 【毫秒】
CPU Register(寄存器)   ← 几十个字节,最快
↓
L1 Cache(一级缓存)     ← KB 级,纳秒级访问
↓
L2/L3 Cache
↓
RAM(内存)              ← GB 级,百纳秒级访问
↓
SSD / HDD(磁盘)        ← 秒级或毫秒级访问

Cache 是用专用的高速 SRAM(静态随机存储器)芯片实现的,属于硬件。

通常直接集成在 CPU 核心内部或周围。

L1 Cache, L2 Cache 通常在核内部或旁边,每个核心一个

L3 Cahce 在核外,是多个核共享的。

Memory Management Unit

MMU(Memory Management Unit,内存管理单元)

缺页中断

Page Fault

当CPU 通过虚拟地址访问内存时,会通过 MMU 将虚拟地址转换为物理地址。
如果某个虚拟页当前没有映射到物理内存中,MMU 就会触发一个 缺页中断(Page Fault),交由操作系统处理。

原因:

  • 未分配:程序第一次访问一个尚未分配物理内存的虚拟页。
  • 该页被置换到磁盘了:操作系统为了节省内存,把部分不活跃页换出到磁盘,访问时需重新加载。
  • 访问权限错误:如 对只读页进行写操作
  • 非法访问:不属于该进程的

处理流程:

  1. CPU 检测到缺页,触发中断。
  2. 中断处理器进入内核态,调用页错误处理函数。
  3. 操作系统根据页表和进程内存映射信息判断缺页原因。
    如果是合法访问(页在磁盘 swap 中),则从磁盘读入物理页。
    如果是不合法访问(野指针、非法地址等),则发送 SIGSEGV 信号给进程,通常导致程序崩溃。
  4. 更新页表
  5. 恢复用户态
  • 软缺页(Minor Page Fault)
    虚拟页尚未映射,但实际数据已在内存中(如共享页)
  • 硬缺页(Major Page Fault)
    页不在内存中,必须从磁盘读取。

多级缓存

Multi-level Cache

缓存(Cache)是介于 CPU 和主存(RAM)之间的高速存储器

CPU 在访问数据时,依次查询:

L1 → L2 → L3 → RAM → 磁盘

一旦某级缓存命中,就不再往后找(称为 Cache Hit),否则就是 Miss,继续向后查询。

缓存替换策略

Cache Replacement Policy

  1. LRU(Least Recently Used)最少使用
  2. FIFO(First-In First-Out)先进先出
  3. LFU(Least Frequently Used)最不常用
  4. Random 随机替换
  5. CLOCK 算法(近似 LRU)

缓存的映射方式

缓存到哪个位置呢?

  • 直接映射(Direct-Mapped Cache)【一路组相联】
    每个内存块 只能映射到缓存中的一个固定位置。冲突失效高
  • 全相联(Fully Associative Cache)
    每个内存块 可以放到缓存中的任意位置。但查找需要遍历所有缓存块
  • 组相联缓存(Set-Associative Cache)
    把缓存划分为多个 集合(Set),每个集合中有多个 块(line)。
    一个内存块可以映射到某个集合中任意一个块。

二路组相联

假设缓存有 8 个块,划分为 4 个集合,每个集合有 2 个块:

Cache:
Set 0: [块0, 块1]
Set 1: [块2, 块3]
Set 2: [块4, 块5]
Set 3: [块6, 块7]

某个地址会通过 hash 函数(如 地址 % 4)映射到某个 Set
在Set内自由放置,如果已满,则使用替换策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2341979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA入门学习Day1——设计一个DDS信号发生器

目录 一、DDS简介 (一)基本原理 (二)主要优势 (三)与传统技术的对比 二、FPGA存储器 (一)ROM波形存储器 (二)RAM随机存取存储器 (三&…

微信小程序拖拽排序有效果图

效果图 .wxml <view class"container" style"--w:{{w}}px;" wx:if"{{location.length}}"><view class"container-item" wx:for"{{list}}" wx:key"index" data-index"{{index}}"style"--…

WT2000T专业录音芯片:破解普通录音设备信息留存、合规安全与远程协作三大难题

在快节奏的现代商业环境中&#xff0c;会议是企业决策、创意碰撞和战略部署的核心场景。然而&#xff0c;传统会议记录方式常面临效率低、信息遗漏、回溯困难等痛点。如何确保会议内容被精准记录并高效利用&#xff1f;会议室专用录音芯片应运而生&#xff0c;以智能化、高保真…

【Python 学习笔记】 pip指令使用

系列文章目录 pip指令使用 文章目录 系列文章目录前言安装配置使用pip 管理Python包修改pip下载源 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 当前文章记录的是我在学习过程的一些笔记和思考&#xff0c;可能存在有误解的地方&#xff0c;仅供大家…

C# 文件读取

文件读取是指使用 C# 程序从计算机文件系统中获取文件内容的过程。将存储在磁盘上的文件内容加载到内存中&#xff0c;供程序处理。主要类型有&#xff1a;文本文件读取&#xff08;如 .txt, .csv, .json, .xml&#xff09;&#xff1b;二进制文件读取&#xff08;如 .jpg, .pn…

leetcode125.验证回文串

class Solution {public boolean isPalindrome(String s) {s s.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();for(int i0,js.length()-1;i<j;i,j--){if(s.charAt(i)!s.charAt(j))return false;}return true;} }

【Android面试八股文】Android系统架构【一】

Android系统架构图 1.1 安卓系统启动 1.设备加电后执行第一段代码&#xff1a;Bootloader 系统引导分三种模式&#xff1a;fastboot&#xff0c;recovery&#xff0c;normal&#xff1a; fastboot模式&#xff1a;用于工厂模式的刷机。在关机状态下&#xff0c;按返回开机 键进…

【数据可视化-21】水质安全数据可视化:探索化学物质与水质安全的关联

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

【prometheus+Grafana篇】从零开始:Linux 7.6 上二进制安装 Prometheus、Grafana 和 Node Exporter

&#x1f4ab;《博主主页》&#xff1a;奈斯DB-CSDN博客 &#x1f525;《擅长领域》&#xff1a;擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(MongoDB)有了解 &#x1f496;如果觉得文章对你有所帮…

STM32(M4)入门:GPIO与位带操作(价值 3w + 的嵌入式开发指南)

一&#xff1a;GPIO 1.1 了解时钟树&#xff08;必懂的硬件基础&#xff09; 在 STM32 开发中&#xff0c;时钟系统是一切外设工作的 “心脏”。理解时钟树的工作原理&#xff0c;是正确配置 GPIO、UART 等外设的核心前提。 1.1.1 为什么必须开启外设时钟&#xff1f; 1. 计…

Linux419 三次握手四次挥手抓包 wireshark

还是Notfound 没连接 可能我在/home 准备配置静态IP vim ctrlr 撤销 u撤销 配置成功 准备关闭防火墙 准备配置 YUM源 df -h 未看到sr0文件 准备排查 准备挂载 还是没连接 计划重启 有了 不重启了 挂载准备 修改配置文件准备 准备清理缓存 ok 重新修改配…

CSS-跟随图片变化的背景色

CSS-跟随图片变化的背景色 获取图片的主要颜色并用于背景渐变需要安装依赖 colorthief获取图片的主要颜色. 并丢给背景注意 getPalette并不是个异步方法 import styles from ./styles.less; import React, { useState } from react; import Colortheif from colorthief;cons…

解决Docker 配置 daemon.json文件后无法生效

vim /etc/docker/daemon.json 在daemon中配置一下dns {"registry-mirrors": ["https://docker.m.daocloud.io","https://hub-mirror.c.163.com","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","ht…

虚幻基础:ue碰撞

文章目录 碰撞&#xff1a;碰撞体 运动后 产生碰撞的行为——碰撞响应由引擎负责&#xff0c;并向各自发送事件忽略重叠阻挡 碰撞响应关系有忽略必是忽略有重叠必是重叠有阻挡不一定阻挡&#xff08;双方都为阻挡&#xff09; 碰撞启用&#xff1a;纯查询&#xff1a;开启移动检…

数据治理体系的“三驾马车”:质量、安全与价值挖掘

1. 执行摘要 数据治理已从合规驱动的后台职能&#xff0c;演变为驱动业务成果的战略核心。本文将深入探讨现代数据治理体系的三大核心驱动力——数据质量、数据安全与价值挖掘——它们共同构成了企业在数字时代取得成功的基石。数据质量是信任的基石&#xff0c;确保决策所依据…

leetcode 二分查找应用

34. Find First and Last Position of Element in Sorted Array 代码&#xff1a; class Solution { public:vector<int> searchRange(vector<int>& nums, int target) {int low lowwer_bound(nums,target);int high upper_bound(nums,target);if(low high…

Ngrok 内网穿透实现Django+Vue部署

目录 Ngrok 配置 注册/登录 Ngrok账号 官网ngrok | API Gateway, Kubernetes Networking Secure Tunnels 直接cmd运行 使用随机生成网址&#xff1a;ngrok http 端口号 使用固定域名生成网址&#xff1a;ngrok http --domain你的固定域名 端口号 Django 配置 1.Youre a…

利用OLED打印调试信息: 控制PC13指示灯点灯的实验

Do口暗的时候才是高电平,因为光敏电阻传感器的高电平是依靠LM393电压比较器上引脚进入高阻态再加上上拉电阻上拉产生的高电平DO口什么时候会输出高阻态?电压比较器的正极输入电压大于负极输入电压,而正极输入电压是光敏电阻分得的电压,光敏电阻的阻值越大,已分得的电压就越大,…

Appium安装 -- app笔记

调试环境&#xff1a;JDK&#xff08;java&#xff09; SDK&#xff08;android&#xff09; Node.js 雷神模拟器&#xff08;或 真机&#xff09; Appium&#xff08;Appium Server【内外件&#xff08;dos内件、界面化工具&#xff09;】、Appium Inspector&#xff09; p…

【OpenGL】OpenGL学习笔记-1:VS2019配置OpenGL开发环境

在Visual Studio 2019中可以通过手动配置库文件或NuGet包管理器快速安装的方法配置OpenGL环境&#xff0c;详细步骤如下&#xff1a; 一、打开VS2019&#xff0c;创建新的控制台项目 二、方法一&#xff1a;手动配置GLEW/GLFW/GLAD库 GLFW是窗口管理和输入事件的基础设施&…