冰块的博客

日拱一卒 不期而至

riscv PMP内存保护机制

riscv pmp momery mechanism

PMA 简介 PMA,即Physical Memory Attributes,物理内存属性 完整的系统物理内存映射包含各种地址空间范围: 常规内存区域 MMIO区域 空洞 每个内存区域有自己的访问属性,可能是如下特性的某个集合 支持/不支持 读取、写入或者执行 支持/不支持 子字或者子块访问 支持/不支持 原子操作操作 支持/不支持 缓存一致性 具有...

iommu概述

kernel iommu

本文翻译自 An Introduction to IOMMU Infrastructure in the Linux Kernel 概述 The Input-Output Memory Management Unit (IOMMU) 是内存控制器中的一个硬件组件,用于将设备虚拟地址(也可以称为I/O地址或设备地址)转换为物理地址。 这种硬件辅助的I/O地址转换显著提高了虚拟环境中的系...

riscv mmu 介绍

riscv mmu instroduction

MMU负责将虚拟地址转换为物理地址, 实现虚拟内存的管理。 在SUPERVISOR模式下,所有虚拟内存地址都经历单级地址转换过程,以将其转换为相应的物理地址; 当存在HYPERVISOR时,虚拟地址可以经历两级地址转换过程: 在第一阶段中,客户虚拟地址(GVA)被转换为客户物理地址(GPA), 在第二阶段中,GPA被转换为监管者物理地址。这两个阶段也被称为VS阶段和G阶段的转换。 五级...

riscv plic中断控制器

riscv plic

简介 PLIC(platform-level interrupt controller),平台级中断控制器。 PLIC将各种设备中断复用到Hart上下文的外部中断线上,具有硬件支持的中断优先级。 PLIC支持最多1023个中断(0号中断保留) 和15872个上下文,但实际中断和上下文的数量取决于PLIC的实现。 PLIC规范中声称支持15872个上下文,这个数字是基于对多个中断目标和...

riscv原子指令

riscv atomic instructions

简介 原子操作需要处理器提供硬件支持,不同的处理器体系结构在原子操作上会有不同的实现。 对riscv架构来说,就是A扩展,也被称为原子指令集扩展。 包含了一些指令,可以原子地读取、修改和写入内存,主要是为了在同一内存空间中的多个RISC-V处理器之间提供同步。 A扩展提供了两种类型的原子指令,分别是原子fetch-and-op内存(AMO)指令和load-reserved/store-c...

高速缓存的别名和同名问题

cache alias and homonyms

高速缓存 三种映射方式 直接相连映射 全相连映射 组相连映射 三种缓存匹配方式 VIVT 虚拟索引虚拟标记 VIPT 虚拟索引物理标记 PIPT 物理索引物理标记 地址高位部分是标记,中间位置是索引,低位部分是cache行内地址。 索引就是用于查找cache行匹配的行号,和行内地址共同定位cache中的数据。 根据索引找到cache行,就可以获取到...

内存屏障

memory barriers

MESI协议 该协议用于解决高速缓存一致性问题,理解该协议可以参考文章末尾链接里的论文。 这里只摘录其中两个和使无效队列相关的消息 失效(Invalidate):失效消息包含需要失效的缓存行的物理地址。 所有持有该缓存行副本(状态为Shared或Modified)的其他缓存,必须将对应缓存行状态置为Invalid,并发送Invalidate Acknowledge。 失效确认(Inval...

git常用命令

Common Git Commands

分支操作 git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git git tag // 查看所有发布版本 git checkout v6.4.9 // 切换分支 git checkout -b develop // 创建并切换到develop分支 git bran...

riscv异常处理流程

riscv kernel handle exception

异常简介 riscv架构上异常分为两类,同步异常和异步中断,二者均属于狭义上的具体的异常类型。 这个从内核代码实现也可以看出来,中断和异常处理有统一入口handle_excpetion 。 handle_excpetion会根据scause寄存器判断具体属于异常还是中断。 后续所说异常统指这两种异常,除非明确指明是具体类型异常或者具体类型中断。 从功能上划分,riscv定义...

拷贝大文件时系统异常

dts cma配置不当引起的panic

问题背景信息 内核版本号5.4.74 设备2G内存,使能CONFIG_TMPFS和CONFIG_SHMEM,使用内存文件系统 系统起来之后bash下执行cp file1 file2拷贝命令时panic,文件大小200M左右 问题基本必现,每次异常地址都是0xffff000010080000 无论何种场合,执行用户态命令都不应该导致系统panic,除非内核或者驱动本身有问题。 pan...