自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小立仔

小立仔的知识笔记

  • 博客(286)
  • 收藏
  • 关注

原创 ARM64 指令 --- CCMP/CSEL

本文介绍了ARMv8架构中的CCMP(条件比较)指令和CSEL(条件选择)指令。CCMP指令根据前一条指令的条件标志决定是否执行比较操作,否则直接设置NZCV标志位。

2025-12-23 20:21:26 1051

原创 ARM64 指令 --- TST/CSEL

TST指令是ARM架构中的测试指令,用于检查寄存器中的特定位而不修改寄存器内容。它执行逻辑AND操作并设置条件标志位(NZCV),常用于条件分支判断前。

2025-12-18 20:35:46 829

原创 ARM64 --- NZCV标志位

ARM64架构中的NZCV条件标志寄存器位于PSTATE中,包含N(负数)、Z(零)、C(进位)和V(溢出)四个关键状态位,用于记录最近算术或逻辑操作的结果状态。常见指令如ADDS、SUBS、ANDS会修改NZCV标志,而普通ADD、MOV等指令则不会。条件码如EQ、NE、LT等基于NZCV进行条件判断。NZCV标志在数值比较、位测试和条件执行中发挥重要作用,是ARM64条件分支和运算的基础机制。

2025-12-18 19:20:04 976

原创 ARM64 指令 --- CASP / CASPA / CASPL / CASPAL

CASP指令是ARM架构中的原子比较交换指令,用于对内存中的32/64位字对进行原子操作。主要特点包括:提供四种内存序语义(CASP无屏障、CASPA获取语义、CASPL释放语义、CASPAL全屏障);

2025-12-12 18:31:01 884

原创 Linux 内存 --- get_user_pages/pin_user_pages函数

本文介绍了Linux内核中固定用户内存页(pin user pages)的概念及其实现机制。

2025-10-22 19:25:17 1187

原创 Linux 内存 --- get_user_pages_remote 函数

本文介绍了Linux内核中的get_user_pages_remote()函数,该函数用于跨进程获取用户空间内存页的物理页描述符(struct page*)。文章首先分析了函数原型和工作原理,指出其主要用于DMA、零拷贝I/O等场景,但存在无法自动重试缺页的缺陷。随后提供了一个完整的代码示例:用户程序通过mmap分配内存并获取其物理地址,内核模块则通过指定PID和虚拟地址,使用get_user_pages_remote()验证目标进程内存。

2025-10-22 19:21:44 500

原创 Linux内存 --- pte_offset_map/pte_offset_kernel

本文分析了Linux内核中两种页表访问函数pte_offset_kernel()和pte_offset_map()的区别。pte_offset_kernel()用于内核页表访问,由于内核页表恒在线性映射区,可直接指针访问;pte_offset_map()则用于用户页表访问,在32位系统上需要kmap临时映射页表页,而在64位架构(如x86_64/ARM64)上由于没有高端内存,pte_offset_map()实际上等同于pte_offset_kernel()。

2025-10-14 19:40:58 1048

原创 Linux用户空间/内核空间获取用户空间地址的页表

本文介绍了在Linux系统中获取用户空间地址页表的两种方法。第一种通过/proc/[pid]/pagemap文件接口,从用户空间查询虚拟地址对应的物理页帧号(PFN)和物理地址,需要root权限;第二种在内核空间通过遍历进程页表(pgd→p4d→pud→pmd→pte)直接获取物理地址。文章提供了完整的代码示例,包括用户态程序通过pagemap查询物理地址的实现,以及内核模块遍历页表获取物理地址的函数。两种方法最终都能正确获取用户空间虚拟地址映射的物理地址,验证结果一致。

2025-10-14 18:05:44 619

原创 Linux 获取用户空间虚拟地址的物理地址--- pagemap文件

本文介绍了Linux内核中的/proc/[pid]/pagemap文件,它提供了进程虚拟地址到物理页帧号(PFN)的映射接口。文件内容按虚拟页顺序排列,每个虚拟页对应一个64位条目,包含PFN、交换状态、软脏位、写保护标记等信息。文章详细说明了条目的位格式定义,并给出了通过lseek()+read()读取条目的方法。

2025-09-26 19:14:13 1205

原创 Linux ARM64 内核页表初始化 paging_init

本文基于Linux 6.16内核,分析了ARM64架构下内存映射初始化过程。重点研究了paging_init()函数如何通过map_mem()建立内核虚拟地址空间映射。

2025-09-24 19:44:49 447

原创 Linux C语言基于FP寄存器进行栈回溯

本文介绍了基于帧指针的栈回溯原理及实现方法。在X86架构中,RBP寄存器作为帧指针,通过其保存的前一个栈帧基址形成链表结构,从而实现栈回溯。

2025-09-22 19:47:35 531

原创 Linux ARM64 内核/用户虚拟空间地址映射

本文分析了Linux在AArch64架构下的内核虚拟地址空间布局,重点探讨了线性映射与页表映射的机制。

2025-09-05 20:11:08 1170 1

原创 Linux arm64 PTE contiguous bit

ARM64架构通过Contiguous PTE机制优化TLB性能,允许将16个连续的4KB页(共64KB)合并为一个TLB条目。该特性通过PTE表项的bit52(PTE_CONT)标记,使MMU将物理连续、权限一致的多个PTE条目缓存为单个TLB项,减少TLB占用并提高命中率。

2025-09-03 19:51:02 880

原创 ubuntu24.04安装 bpftool 以及生成 vmlinux.h 文件

ubuntu24.04安装 Bpftool以及生成vmlinux.h文件

2025-08-13 19:30:15 914

原创 Linux 内存管理之page folios

Linux内核5.16版本引入page folio新机制,旨在解决传统内存管理中长期存在的"复合页"概念混乱问题。传统复合页由头页和尾页组成,导致内核函数接收page指针时无法明确区分应操作单个页还是整个复合页,造成接口语义模糊。page folio通过保证非尾页特性,使函数能明确操作整个内存单元,既提升了代码清晰度,又通过减少compound_head()调用优化了性能。

2025-08-08 20:09:48 1776

原创 Linux 内存管理之 Rmap 反向映射(二)

本篇文章主要描述父进程fork子进程创建匿名页面时 Rmap 反向映射机制。

2025-08-05 19:21:47 1115

原创 Linux 内存管理之 Rmap 反向映射(一)

反向映射是内存管理中的一个核心概念,用于高效地通过物理页找到映射了该页的所有虚拟地址(即页表项)。

2025-08-01 20:14:08 1337

原创 Linux内存管理之 compound pages

本文介绍了Linux内核中的复合页(compound page)机制。复合页是由多个物理连续页组成的逻辑单元,通过头部页(first head page)和尾部页(tail pages)结构实现统一管理。文章详细分析了复合页的元数据布局,说明其特有信息存储在第一个尾部页中,包括分配阶数、析构函数等。同时指出复合页可以存在于页缓存中,并通过alloc_pages()分配时需设置__GFP_COMP标志。最后介绍了复合页的三种析构函数类型及其应用场景,包括透明大页(THP)和hugetlbfs子系统等。

2025-07-15 19:37:35 1028

原创 Linux 内存管理之LRU链表

本文主要分析了Linux内核中page cache通过LRU链表的管理机制。

2025-07-11 20:27:14 672

原创 Linux 内存管理之address_space

本文介绍了Linux内核中用于管理文件页缓存(page cache)和内存映射的关键数据结构address_space。address_space通过基数树(radix tree)组织同一文件的所有缓存页,并提供了快速查找机制。

2025-07-10 19:36:17 1258

原创 Linux 内存管理之page cache

Page Cache通过内存缓存磁盘文件数据,显著提升I/O性能,其优势基于内存访问速度远高于磁盘和被访问数据的高概率重复性。 详细区分了File-backed pages(文件页)和Anonymous pages(匿名页)两种内存类型,包括其数据结构差异、内存回收特性及swap机制。

2025-06-25 19:37:34 1613

原创 Linux C语言获取elf文件符号信息

Linux C语言获取elf文件符号信息

2025-03-25 22:36:19 677

原创 Linux C语言读取elf文件的代码段,重定位段

Linux C语言读取elf文件的代码段,重定位段

2025-03-24 20:52:11 895

原创 Linux调度器 --- 负载均衡的存在的问题

Linux调度器 --- 负载均衡的存在的问题

2025-03-13 17:41:51 1085 3

原创 Linux 内核自旋锁spinlock(四)--- queued spinlock

Linux 内核自旋锁spinlock(四)--- queued spinlock简介。

2025-02-21 20:19:02 1814

原创 Linux 内核自旋锁spinlock(三)--- MCS locks

Linux 内核自旋锁spinlock(三)--- MCS locks简介。

2025-02-21 11:17:38 1131

原创 Linux ARM64 将内核虚拟地址转化为物理地址

本文介绍一种通用的将内核虚拟地址转化为物理地址的方案以及一种适用于ARM64 将内核虚拟地址转化为物理地址的方案,给出了对应的代码示例。

2025-02-11 10:31:14 1777

原创 Linux 内核自旋锁spinlock(二)--- ticket spinlock

Linux 内核自旋锁spinlock--- ticket spinlock简介。

2025-02-10 11:39:49 1495

原创 Linux 内核自旋锁spinlock(一)

在软件工程中,自旋锁是一种用于多线程应用程序中的同步原语,用于保护共享资源。当一个线程尝试获取自旋锁但发现它已被另一个线程持有时,该线程不会立即进入睡眠状态(如传统互斥锁的情况),而是会在一个循环中持续“自旋”,不断检查锁是否可用。这种行为被称为忙等待。自旋锁能够避免操作系统进程重新调度或上下文切换的开销,因此在线程可能仅会短暂阻塞的情况下,自旋锁非常高效。出于这个原因,操作系统内核经常使用自旋锁。对于操作系统内核:在SMP系统上,各个CPU可能同时处于核心态,在理论上可以操作所有现存的数据结构。

2025-01-17 20:57:42 1462

原创 Linux x86_64 程序动态链接之GOT 和 PLT

Linux x86_64 程序动态链接之 GOT 和 PLT延时绑定技术,以及给出了一个demo。

2025-01-14 17:23:08 1456

原创 Linux x86_64 程序静态链接之重定位

Linux x86_64 程序重定位过程,并给出了两个 demo 演示。

2025-01-09 16:38:29 1312

原创 Linux内存管理 --- 进程创建1号进程虚拟地址的过程

Linux 进程以一号进程为例创建虚拟地址的过程。

2024-12-19 18:00:09 1122

原创 ubuntu22.04 使用crash

ubuntu22.04 vmlinux debug安装教程以及使用crash教程。

2024-12-12 20:15:59 1370

原创 Debian11(pve) 使用.deb包 安装内核头文件

Debian11(pve) 使用.deb包 安装内核头文件过程。

2024-12-09 15:07:31 1718

原创 Linux内核 物理内存管理

Linux 内核物理内存描述

2024-12-05 16:27:16 1017

原创 Linux 进程管理之struct task_struct

Linux 进程管理之struct task_struct结构体描述

2024-11-29 10:08:24 1497

原创 Linux 查看.eh_frame section

Linux 查看.eh_frame section相关操作。

2024-10-11 16:59:41 1841

原创 Linux 给 vmlinux 添加符号

Linux 给 vmlinux 添加符号演示过程。

2024-09-20 20:28:46 1133

原创 Debian Linux 11 使用crash

Debian Linux 11 crash的使用

2024-09-14 20:32:29 1017

原创 Ubuntu 16.04/20.04/22.04 通过deb包安装内核头文件

Ubuntu 16.04 通过deb包安装内核头文件过程。

2024-08-20 15:14:34 2820 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除