
Linux
文章平均质量分 93
Truman楚门
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux的页表管理
本文摘要: Linux内存管理机制解析,重点介绍了物理帧号(PFN)与页表结构的关系。32位系统使用二级页表(PDE-PTE),64位系统使用四级页表(PGD-PUD-PMD-PTE)。文章详细阐述了页错误(Page Fault)的触发机制与处理流程,包括内核页表init_top_pgt的初始化过程。同时分析了进程切换时页表更新的机制,指出内核通过clone_pgd_range将部分内核页表(273-511项)拷贝到用户进程页表,既保证内核页表不变,又防止用户空间越界访问内核区域。最后对比了32位与64位系原创 2025-08-14 14:36:17 · 532 阅读 · 0 评论 -
Per-CPU pages
这些缓存在pcp中的页框,若释放到free_area中则可能可以与其它页框合并成order更高的内存块,从而减少系统的内存碎片。PS: 通过per_cpu_ptr(zone->per_cpu_pageset, cpu_x);得到一个指针,指向cpu_x的那个struct per_cpu_pages空间。(1)为每个zone调用setup_zone_pageset分配并初始化per_cpu_pageset。(2)初始化每个cpu的struct per_cpu_pages的每个变量, 这里是给每个变量都赋0。原创 2025-08-11 16:24:16 · 795 阅读 · 0 评论 -
Linux中vmalloc的实现
本文分析了Linux内核中vmalloc的实现机制。vmalloc用于在内核空间分配虚拟连续但物理不连续的内存,其核心流程包括:1)通过__get_vm_area_node在vmalloc区域查找可用虚拟地址,使用红黑树管理vmap_area结构;2)通过__vmalloc_area_node从buddy系统分配物理页,建立页表映射;3)处理缺页异常时,通过vmalloc_fault将init进程的页表项复制到当前进程。该机制通过init_mm共享内核页表,实现了进程间内核地址空间的同步。原创 2025-08-11 16:38:52 · 931 阅读 · 0 评论 -
kmalloc
摘要:kmalloc是Linux内核中用于分配小块连续内存(≤4K)的核心机制,底层依赖slab(小内存)或buddysystem(大内存)。其分配策略为:≤8K从slab分配(预定义kmalloc_caches管理不同尺寸的slab,如8B~8K),>8K则直接调用buddysystem(最大支持4M)。内存地址通过内核启动时已建立线性映射(PA=VA-FixedOffset)。实现上,kmalloc通过编译优化区分常量/非常量请求,最终调用___kmalloc_large_node(buddysyst原创 2025-08-11 16:30:33 · 958 阅读 · 0 评论 -
Slub(Slab)
本文摘要: Linux内核SLUB内存分配器是对SLAB的改进版本,采用分层管理结构。核心数据结构包括kmem_cache(描述缓存池)、kmem_cache_cpu(CPU本地缓存)、kmem_cache_node(NUMA节点缓存)和slab(内存页管理单元)。SLUB采用两级回收机制(CPU级和Node级),通过freelist实现快速分配。当本地CPU缓存不足时,会依次检查partial链表和伙伴系统获取内存。调试特性包括红区检测和kfence工具。关键函数kmem_cache_create/all原创 2025-08-11 16:28:58 · 783 阅读 · 0 评论 -
Buddy system
Linux引入了伙伴算法(buddy system)来解决内存外碎片问题。该算法将物理内存划分为2^n大小的块,并按大小组织成不同阶(order)的链表。分配时,先查找合适阶的链表,若没有则从高阶分割出所需块;释放时,会检查相邻空闲块是否为伙伴关系,是则合并成高阶块。核心数据结构free_area数组管理各阶空闲链表,通过__rmqueue_smallest等函数实现分配,释放时通过合并减少碎片。算法还支持不同迁移类型(MIGRATE_TYPES)的内存管理,并包含fallback机制处理分配失败情况。原创 2025-08-11 16:19:19 · 894 阅读 · 0 评论 -
Linux内核对物理内存组织与分配
Linux物理内存管理采用分层结构:NUMA架构下引入node概念,每个node对应一个物理内存节点,由pglist_data结构表示。node进一步划分为多个zone(如DMA、NORMAL等),由zone结构描述。物理内存以page为单位管理,通过mem_map全局数组跟踪所有页框。Linux采用四种机制管理不同粒度的内存分配:伙伴系统处理大块连续内存(>32K),per-CPU页缓存优化小内存分配(≤32K),slab缓存管理小块对象(<4K),vmalloc机制提供虚拟连续的内存空间。这原创 2025-08-11 16:12:37 · 770 阅读 · 0 评论 -
IPMI的SOL (Serial Over LAN)原理与使用
本文档介绍了在服务器上配置和使用SOL远程控制Linux和ESXi直接控制台的方法。原创 2024-01-08 15:29:42 · 9661 阅读 · 0 评论