Linux
文章平均质量分 81
分享Linux开发过程及学习记录
以梦为马无处可栖
程序猿的一生
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
初识Linux内核--1
Linux内核启动分为三个阶段:引导加载(BIOS/UEFI初始化、加载内核)、内核初始化(架构设置、子系统初始化)和用户空间启动(init进程)。硬件抽象层通过架构代码、驱动框架、内存管理和中断子系统实现硬件差异屏蔽,提供统一接口。关键实现包括多级页表抽象、内存区域划分、中断号统一管理等,使内核能适配不同硬件平台。原创 2025-12-15 17:14:43 · 225 阅读 · 0 评论 -
Tracepoint 机制
Linux内核Tracepoint机制是内核预定义的静态探测点,用于高效收集运行时信息。Tracepoint包含名称、开关状态和桩函数,通过debugfs向用户态提供数据输出。相比printk,它将信息存入ringbuffer,并通过钩子函数实现定制化数据采集。开发者可通过/sys/kernel/debug/tracing目录查看所有Tracepoint,使用TRACE_EVENT宏创建包含6个组件的自定义跟踪点,包括名称、原型、参数、数据结构、赋值和输出格式。内核通过DEFINE_TRACE定义trace原创 2025-11-04 11:14:29 · 918 阅读 · 0 评论 -
kmalloc内存池的设计与实现
:数组中的索引(index)通常对应内存块尺寸的2的次幂(如index=3对应8B,2^3=8)。内核在启动初始化时,就通过kmem_cache_create接口预先创建好一系列特定尺寸的slab cache,当内核代码调用kmalloc申请内存时,会根据请求的大小自动选择最合适的slab cache进行分配。内核中除了针对特定数据结构task_struct/mm_struct等的专用slab内存池外,还存在大量对小内存的需求,如8B/16B等,kmalloc内存池体系就是为了高效满足这种需求设计的。原创 2025-09-30 10:47:05 · 648 阅读 · 0 评论 -
缺页中断处理机制
动态映射区,内核通过vmalloc()分配内存后,会立即分配物理页并修改内核页表,当进程访问这边新vmalloc区域时,发现页表内核部分的对应的项为空,就会触发缺页,此时执行vmalloc_fault,该函数的主要工作就是将主内核页表 中对应的顶级页目录项同步到当前进程的页表内核部分。真正的物理内存分配与映射,是延迟到第一次访问该区域,从而触发缺页中断时,由内核根据vma的类型(匿名/文件、私有/共享)和访问类型(读/写),以一种“用到再给”的懒惰策略完成的。原创 2025-09-29 15:33:14 · 526 阅读 · 0 评论 -
内核伙伴系统设计原理与实现-1
Linux内核伙伴系统原理设计与实现,代码走读原创 2025-07-18 11:03:11 · 59 阅读 · 0 评论 -
futex内核态代码走查
futex内核态代码流程简述原创 2025-06-26 16:32:37 · 85 阅读 · 0 评论 -
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc原创 2025-06-10 19:55:59 · 238 阅读 · 0 评论 -
Linux内核学习小记-1
内存管理子系统内容摘要原创 2025-06-10 11:41:02 · 72 阅读 · 0 评论 -
内存管理子系统学习记录
内存管理子系统学习记录原创 2025-05-22 19:17:09 · 138 阅读 · 0 评论 -
内核常见面试问题汇总
汇总面试中常见的内核问题,持续更新中原创 2025-05-20 16:36:10 · 178 阅读 · 0 评论 -
内核常见问题汇总
常见Linux内核问题汇总,后期会不断更新原创 2025-04-29 15:29:31 · 80 阅读 · 0 评论 -
内存管理之匿名页面
匿名页面在刚分配的时候会加入到active LRU链表的头部,在活跃LRU链表移动一段时间后 ,会到达链表的尾部,shrink_active_list()会将该页加入到不活跃LRU链表中,然后shrink_inactive_list()会扫描不活跃链表,然后通过add_to_swap()为该页面分配交换区,再进过pageout()把该页面写到交换分区。匿名页面的建立是在缺页中断分配完成之后,此时已经建立了进程虚拟地址和物理地址之间的映射关系,用户进程访问虚拟地址就可以访问到匿名页面中的内容。原创 2025-01-14 19:24:17 · 211 阅读 · 0 评论 -
内存管理之页面回收
在LRU算法中新产生的页面被添加到链表的开头,当系统内存紧张时,LRU链表尾部的页面将会离开并被换出,当系统再需要这些页面的时候,会重新置于链表的开头,也是会存在一种情况,频繁被使用的页面,也会不可避免的会被换出。内存紧张时总是优先换出文件映射的文件缓存页面,而不是匿名页,因为大多数情况下,文件混存页面不需要被回写到磁盘,除非页面内容被修改了,也就是脏页,匿名页面总是要在写入交换分区之后,才能被换出。直接内存回收是同步回收,就是执行页面回收的进程就是应用进程本身,会阻塞调用者进程的执行。原创 2025-01-13 20:53:05 · 195 阅读 · 0 评论 -
Linux内存管理调试
1. 当pages free小于pages min,说明所有内存耗尽,此时说明内存压力过大,会开始触发同步回收,表现为系统卡死,分配内存被阻塞,开始尝试碎片整理、内存压缩,如果都不奏效,则开始执行 OOM Killer,直到pages free大于pages high。2. 当pages free在pages min和pages low之间,说明内存压力较大,kswapd0线程开始回收内存,直到pages free大于pages high。slab相关信息,包括总页面大小,可回收页面和不可回收页面。原创 2025-01-10 11:34:17 · 85 阅读 · 0 评论 -
xvisor调试记录
记录一次虚拟化方案xvisor启动调试案例原创 2024-12-10 20:10:36 · 919 阅读 · 0 评论 -
IMA/EVM开发和测试流程
评估的含义是在进程存取文件之前,内核先判断文件的完整性度量值和预先存入到文件的扩展属性“security.ima”中的值是否一致,如果一致则允许存取操作,不一致则拒绝。EVM 子系统将安全相关的扩展属性的值合在一起作为消息输入,将密钥“evm-key”作为密钥输入,算出当前的 HMAC 值,用这个值和之前存储在扩展属性 security.evm 中的值进行比较,确定文件的安全相关扩展属性的完整性是否被破坏。同样,EVM的扩展属性security.evm的值也有两种形式,一种是HMAC,另一种是数字签名。原创 2024-10-21 11:26:51 · 1326 阅读 · 0 评论 -
ima-evm-util交叉编译
ima/evm调试中,需要集成evmctl工具,本文提供一种交叉编译方法原创 2024-09-29 16:34:56 · 216 阅读 · 0 评论 -
cgroup基本原理与使用
在cgroups v2中,虚拟文件系统通常挂载在`/sys/fs/cgroup/`,并且不同控制器的文件不再分散,而是统一到一个cgroup目录下。说明:控制该 cgroup 的内存换出到 swap 的倾向,值在 0 到 100 之间,数值越大表示更倾向于将内存换出到 swap。说明:设置该 cgroup 的内存软限制,允许 cgroup 在有剩余内存时使用更多的内存,但当系统内存紧张时会首先回收超出部分。说明:控制当进程迁移到一个新的 cgroup 时是否将其当前的内存使用量一起迁移。原创 2024-09-18 11:00:30 · 397 阅读 · 0 评论 -
sysbench下载与交叉编译
sysbench性能测试工具编译与调试原创 2024-09-09 20:20:17 · 1448 阅读 · 0 评论 -
Linux内核性能增强
内存压缩和调度增强是现代操作系统中的关键技术,它们直接影响系统的响应速度、吞吐量和资源利用效率。原创 2024-08-15 19:01:26 · 385 阅读 · 0 评论 -
zRAM和zswap
linux内核性能增强原创 2024-08-24 15:38:18 · 1342 阅读 · 0 评论 -
Linux中RT-Mutex实现
本文主要梳理优先级继承的基本原理,优先级继承主要是用来解决优先级反转,可以简单理解为一个进程在当前进程拥有的锁上阻塞时,会继承另一个进程的优先级。举个例子说明,进程A、B、C,其中A优先级最高,B次之,C最小,那么当 A 在 C 拥有的锁上阻塞时,C 将继承 A 的优先级。因此,如果 B 变为可运行状态,它将不会抢占 C,因为此时 C 具有 A 的高优先级。一旦 C 释放锁,它将失去继承的优先级,然后 A 可以继续使用 C 拥有的资源。原创 2024-07-31 16:58:12 · 1225 阅读 · 0 评论
分享