- 博客(31)
- 收藏
- 关注
原创 Linux Mem -- Slub内存分配器的几点疑问及解答(2)
摘要:本文深入探讨Linux内核SLUB内存管理机制的核心问题。分析了kmem_cache_cpu中slab与freelist的关系,指出slub最大可分配连续内存空间为8KB,超出则使用page allocator。详细阐述了shrink和merge两种管理策略的实现及其触发条件。解答了对象释放时的归属判断、跨Node分配策略等问题,并探讨了kmem_cache中slab的状态管理、数据结构分布和初始化过程。最后说明已分配对象不在freelist中,以及slab在各级链表间的转移机制。
2025-06-04 08:35:41
871
原创 Linux Mem -- 通过reserved-memory缩减内存
本文是解决具体的一些思考总结,和Linux内核的reserved-memory机制相关。参考代码:Linux-6.10。
2025-03-29 22:08:45
1116
原创 Linux Mem -- Slub内存分配器的几点疑问及解答
近期在解读Linux slub内存分配管理器相关代码,随着代码的不断深入会不断地自我提出新的疑问点,自己带着疑问又再次走查代码解答自我的疑问。这篇便是对于解读Slub内存时的自我疑问解。
2025-03-29 20:44:06
1051
原创 Linux Mem -- 关于AArch64 MTE功能的疑问
前面几篇文章是在介绍为什么需要MTE功能、MTE功能逻辑和硬件实现。从这篇文件起,结合之前MTE逻辑和硬件实现,开始介绍MTE功能在软件中的实现。首先我要通过调查推理回答自己的几个问题。
2025-02-28 22:44:58
847
原创 Linux Mem -- MTE in AArch64 Linux
ARMv8.5 版本的处理器介绍了MTE(memory tagging Extensio)特性。MTE是基于ARMv8.0的虚拟地址标签(TBI:top byte ignore)特性 ,允许软件访问4-bit的allocation tag 为16字节粒度物理空间。具有MTE特性的内存空间映射需要带Normal-Tagged内存属性。逻辑tag被应用于虚拟地址的59-56bit。使能MTE的处理器将比较logical tag 和 allocation tag,如果比较失败则根据系统寄存器配置上报响应异常。
2025-02-14 19:30:00
973
原创 Linux Mem -- ARM8.5-A Memory Tagging Extension
内存安全违例主要有两种:空间安全和时间安全。在设计、开发的违规案例的第一阶段是运用恶意炸弹或者是链接和其他有类型的安全隐患去获取系统控制权限或者泄露系统权限信息。当一个对象访问它的真实边界之外时,就属于空间安全的违例。例如,当栈中的buffer溢出,这中违例可能导致函数的返回地址被重写,这可能导致一种基础的若干类型的攻击。当一个对象的指针超出其指向的范围时,就会造成时间安全类型的违例。通常在重新分配了支持对象的内存之后。例如,当包含某种函数指针的类型被恶意数据覆盖时,也可能导致一种基础的若干类型的攻击。
2025-02-14 19:30:00
1106
原创 Linux Mem -- Where the mte store and check in the real hardware platform
ARM的MTE允许分配、设置、比较一个 4bit的allocation tag 为16字节粒度的物理地址。当对MTE有一定了解后,应该会产生如下疑问:MTE tag是被存在在哪里、是怎样进行检查的在实际的硬件平台?是的,带着这个疑问查阅了好多资料,最终在ARM官方找到了答案。如下内容来自。
2025-02-14 19:30:00
1053
原创 Linux Mem -- AArch64 MTE功能Tag寄存器
如前文提到为了将memory tag保存到内存,需要对MTSX中的tag相关寄存器进行编程,以保证MTSX能够根据请求的物理地址来决定tag地址。本文参考。
2025-02-14 19:30:00
843
原创 Linux中断 -- 中断路由、优先级、数据和标识
承前文,本文从中断路由、优先级、数据结构和标识意义等方面对Linux内核中断进行一步的解析。
2024-01-27 00:06:45
2368
原创 Linux中断 -- 中断应答、嵌套、
本章主要从内核软件层面来看各中断控制器对中断信号处理&应答(关于硬件层面的处理硬件过程可以参考前文)。同样使用前文中GICv3 & PIO 中断控制器为硬件框架,介绍PIO接受到外部中断时软件层各控制器的应答(文中设定supports_deactivate_key 为false)
2024-01-09 23:40:04
1525
原创 Linux中断 -- Softirq & Tasklet
softirq顾名思义是通过软件触发的中断,与之前介绍的通过硬件的触发的中断相对应;两者在逻辑上又有一定的相关性。tasklet属于softirq的特殊类型,其他实现和触发方式有其他自身的特点。本文将就softirq的实现、触发、其与硬件中断的相关性,tasklet相对于softirq的特性进行介绍。
2024-01-08 22:03:34
1249
原创 Linux中断 -- 级联中断控制器注册与中断处理
本文的目的在在于介绍中断控制器的注册过程及中断的处理,从软件系统的角度理解级联中断控制器。背景:Arm64处理器、Linux-4.14内核目录1.内核中关于中断控制器的宏定义1.1 IRQCHIP_DECLARE 宏1.2 IRQCHIP_OF_MATCH_TABLE宏1.3 irqchip相关变量2.中断控制器设备注册2.1 root interrupt controller2.1.1 系统初始化GICV3中断控制器的流程2.1.2 GICV3中断控制器的初始化2.2 child中断控制器的注册过程
2023-10-07 00:22:57
817
原创 ARM处理器 -- 处理器中的级联中断控制器
本文在以移动产品Arm处理器为例,介绍级联中断控制器。随着手机功能的增加,手机系统的复杂度也在不断的提升,处理器由之前的单核、演变为双核、多核,系统的中断控制器也有单一的GIC控制器演变问题级联结构的多中断控制器。
2023-08-13 08:15:35
607
原创 ARM处理器 -- 中断控制器GICv3
其他安全状态的中断被作为FIQ类型中断、此类异常被带入EL3执行环境,软件切换到EL3环境执行时,需要执行必要的上下文切换。软件分配LPI中断的中断号到Collections,便于高效的移动中断从一个PE到另一个PE。当PE已经在处理一个低优先级的中断时收到一个高优先级的中断信号,此时就有可能发生中断对PE的竞争。SPI、PPI、SGI中断的优先级为8bit,但是LPI的中断优先级只有6bit,低两位通常作为0. LPI也总是被当作Non-Secure Group1 中断。
2023-07-22 16:19:49
2476
原创 DLKM module获取cmdline参数
Android GKI2.0方案中屏蔽了boot_command_line变量及cmd_line相关API,因此非built-in的内核module不能容易的获取command_line参数,故一些通过commad line参数来实现设备兼容方案不在适用。 如果有DLKM module必须通过获取command line来实现部分功能时,应怎么处理、怎样实现command line参数的获取?
2023-03-02 22:46:15
1193
原创 Linux内存 -- Fixmap映射固定虚拟地址
继上文介绍内核在启动初期为内核段建立了临时映射页表,实现了内核物理地址到虚拟地址的映射;该映射完成后可以通过虚拟地址访问内核空间,但此段仅限于内核段的访问,内核之外的内存空间还不能使用虚拟地址进行访问,需要继续完成内存空间外的内存映射。要实现其他内存空间的映射就需要从fdt中解析系统的内存情况,要访问fdt就要先实现fdt的映射,即要引出本章的介绍的主角fixmap。
2022-10-29 15:55:16
978
原创 Linux内存 -- 内核空间物理与虚拟地址转换
内核启动过程中完成临时的内核空间页表创建后,就可以实现内核空间物理地址与对应虚拟地址间的相互转化,该转化过程可以通过__phys_to_kimg 、__kimg_to_phys实现
2022-10-21 19:17:19
1814
原创 Linux内存 -- 启动过程的临时页表创建
页表用时实现内存物理地址到虚拟地址的映射,实现虚拟地址到物理的转化;是虚、实内存地址转化的媒介。页表,是由物理地址向虚拟地址映射时创建的,由软件代码逻辑进行实现;虚拟地址向物理地址的转化需要借助MMU硬件单元实现
2022-10-14 20:13:45
2015
原创 Linux唤醒系统irq处理流程(1/2)
本文主要从软件的角度介绍唤醒系统中断的中断处理函数的执行流程,本文会分为三部分。第一部分介绍正常模式下系统中断处理函数的执行流程,第二部分介绍系统休眠状态时,唤醒系统的irq handle处理流程,第三部分介绍怎样配置irq中断可唤醒功能及注意事项。正常模式下中断函数处理流程 如下图,以MTK平台eint中断处理流程为例。系统处理处于中正常模式(非安全及其他异常模式)时,CPU会从el1_irq函数进入irq handle的处理流程,经过irq现场的保护后切入中断的处理...
2022-06-01 16:07:33
1780
原创 Linux resume流程
目录resume执行流程:resume各阶段主要动作: 本文主要介绍Linux系统resume唤醒的软件执行流程,相对于Linux suspend过程,resume是一个完全逆向过程。resume执行流程:Arm核linux系统的Suspend待机过程,是由suspend_ops->enter进入到Arm核固件级别的待机状态。Resume过程时也是由suepend_ops->enter退出固件及待机进入Linux系统...
2022-05-30 20:53:29
2074
原创 Linux interrupt相关
1. 查看interrupt信息cat /proc/interruptsa.非待机状态时如下,第一列对应的硬件映射的中断号;CPUX对应的列为该CPU处理的此 中断的次数;倒数第二列为对应的硬件中断号, 最后一列为中断明;b.待机模式如下,由于待机模式下只有主CPU0 在运行故只能看到CPU0上处理的该中断次数2.MTK平台获取eint中断寄存器状态,如外部中断3echo 3 > ...
2022-05-18 22:17:18
435
原创 Linux suspend流程
1.各种suspend状态及其对应关系和执行动作:suspend各状态宏 宏值 pm_labels /sys/power/state mem_sleep_labels /sys/power/mem_sleep 各状态待机动作 PM_SUSPEND_ON 0 PM_SUSPEND_TO_IDLE 1 freeze s2idlbe 1.停止用户空间程序运行 2.所有外设备设置低功耗状态 PM_.
2022-05-18 22:04:08
2013
原创 Charge IC logic Q&A
Q:Q4 关断有哪些影响 A: 1. 充电停止 2. Vbat 到 Vsys 通路被断开,Vbus 到 Vsys 通路不受影响Q: Q4 可能被打开的情况 A: 1. 手机时 shipmode 模式时插入充电器 2. 清除 BATFET_DIS 标志位 3. 设置 REG_RST 标志位 reset 所有寄存器设置(包含 BATFET_DIS 标志位) 4. QON pin 的逻辑高->低(低持续时间 tshipmode 1.25s – ...
2022-02-06 17:49:16
1050
原创 uboot中DTS相关处理(1 )
1、boot img中各种img分布及各img加载到内存地址boot imgbootimgimg szieMem Addrboot headerbootloader sz (2048B)读取到指定的数组结构中kernelkernel sz0x80008000RamdiskRamdisk sz0x8
2015-04-28 14:15:34
4071
4
原创 uboot中DTS相关处理
1、boot img中各种img分布及各img加载到内存地址 
2015-04-28 14:12:06
314
原创 Input event 分析
以gsensor器件为例:1、Gsensor上报ABS_ DISTANCE后,接着上报sync事件,当event core 检测到sync事件时,认为一包event数据完成【参考下文代码得出】。 static void XXX_pls_report_dps(unsigned char data, struct input_dev *input){ ……
2015-04-15 13:30:20
2676
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人