内存
文章平均质量分 90
绍兴小贵宁
这个作者很懒,什么都没留下…
展开
-
Linux arm进程内核空间页表同步机制
Linux arm进程内核空间页表同步机制进程创建内核页表修改页表项同步 本文针对ARM32处理器进行说明。内核页表: 即书上说的主内核页表,在内核中其实就是一段内存,存放在主内核页全局目录init_mm.pgd(swapper_pg_dir)中,硬件并不直接使用。进程页表: 每个进程自己的页表,放在进程自身的页目录task_struct.pgd中。进程创建 进程创建,frok时会拷贝内核页表到当前进程页表中。调用关系:do_dork->copy_process->copy_m原创 2021-11-20 12:28:41 · 1620 阅读 · 0 评论 -
/proc/meminfo VmallocUsed为0问题
/proc/meminfo VmallocUsed为0问题说明总结说明 /proc/meminfo可以用来计算用户态内存占用,内核态内存占用(包含slab占用和vmalloc占用等),以及黑洞内存占用。像free命令也是通过cat /proc/meminfo来获取内存使用情况的。 meminfo节点中存在Vmalloc统计功能,用于统计vmalloc区域使用情况。最近在4.9版本内核调试过程中,发现VmallocUsed、VmallocChunk两项值均为0。 随后去查看了内核源码,这两项直接原创 2021-10-31 10:36:01 · 996 阅读 · 0 评论 -
Linux内存子系统——分配物理页面(alloc_pages)
Linux内存子系统——分配物理页面(alloc_pages)分配页面 内核中常用的分配物理内存页面的接口函数是alloc_pages(),用于分配一个或多个连续的物理页面,分配的页面个数只能是2的整数次幂。 诸如vmalloc、get_user_pages、以及缺页中断中分配页面,都是通过该接口分配的物理页面。分配页面 alloc_pages函数有两个参数,一个是分配掩码gfp_mask,另一个是分配阶数order。[include/linux/gfp.h]#define alloc_p原创 2021-08-22 22:36:04 · 5074 阅读 · 0 评论 -
Linux内存子系统——vmap/vmalloc
Linux内存子系统——vmalloc重要数据结构vm_structvmap_areavmalloc初始化vmalloc接口分析__get_vm_area_nodealloc_vmap_area__vmalloc_area_nodemap_vm_areavmap接口 vmap机制,将不连续的物理内存页框映射到连续的虚拟地址空间中。vmalloc是一个接口函数, 使用vmap机制在虚拟内存中连续但在物理内存中不一定连续的内存。 vmalloc函数原型如下,只需要一个参数,以字节为单位。:void *原创 2021-07-31 13:40:44 · 1886 阅读 · 0 评论 -
Linux页表与ARM硬件页表
Linux页表与ARM硬件页表说明ARM二级页表映射关系说明Kernel版本:4.0.0ARM处理器,Contex-A9,QEMU平台 内核初始化arm页表的内容,low_memory映射过程,之前也大概写了。但是在arm平台中,引入了硬件页表、linux页表的概念,本文描述为何要这样处理,以及内核、arm硬件页表属性进行说明。 参考书籍《奔跑吧Linux内核:基于Linux4.x内核源代码问题分析》2.2.1 ARM32页表映射。ARM二级页表映射关系 Linux中ARM32位架构采用原创 2021-07-31 10:10:53 · 1766 阅读 · 1 评论 -
linux /dev/mem /dev/kmem驱动分析
/dev/mem说明驱动注册用户空间调用mmap方法/dev/mem/dev/kmem说明/dev/mem”是linux系统的一个虚拟字符设备,无论是标准linux系统还是嵌入式linux系统,都支持该设备。 物理内存的全镜像。可以用来访问物理内存/dev/kmem: kernel看到的虚拟内存的全镜像。可以用来访问kernel的内容。kernel部分内存用户空间本不可访问。但是因为所有进程共享内核空间的页表。所以内核虚拟地址对应物理地址是确定的。kmem的作用即是根据kernel的虚拟地址,找到对应原创 2021-07-18 14:21:23 · 2711 阅读 · 0 评论 -
Linux内存初始化(4)——伙伴系统(buddy)
Linux内存初始化说明mm_initmem_initfree_all_bootmem相关文章说明Kernel版本:4.0.0ARM处理器,Contex-A9,QEMU平台 上文完成了zone的初始化工作,接下来需要初始化伙伴系统(Buddy系统)。mm_init mm_init函数,主要对内核内存分配器进行初始化。start_kernel->mm_init/* * Set up kernel memory allocators */static void __init mm原创 2021-06-27 17:59:30 · 1222 阅读 · 0 评论 -
Linux内存初始化(3)——pglist_data/zone初始化
Linux内存初始化说明重要数据结构struct pglist_datastruct zonebootmem_initzone_sizes_initfree_area_init_nodecalculate_node_totalpagesalloc_node_mem_mapfree_area_init_core总结数据结构调用关系相关文章说明Kernel版本:4.14.111ARM处理器,Contex-A7,四核(arm32) 接上文paging_init,对bootmem_init进行说明。原创 2020-07-05 17:05:45 · 2412 阅读 · 0 评论 -
Linux内存初始化(2)——paging_init初始化
Linux内存初始化说明paging_initprepare_page_tablemap_lowmemcreate_mapping概念说明重要数据结构create_mapping代码实现重要说明说明Kernel版本:4.14.111ARM处理器,Contex-A7,四核(arm32)Linux内存初始化(1)——memblock初始化 在上文中,跳转到start_kernel前,已知,内核已创建了kernel、dtb的线性映射,即内核可以访问自己代码段等区域,并能访问dtb所在内存区域的虚拟地址原创 2020-07-05 12:53:47 · 1538 阅读 · 1 评论 -
Linux内存初始化(1)——memblock初始化
Linux内存初始化说明物理内存大小说明Kernel版本:4.14.111ARM处理器,Contex-A7,四核物理内存大小 一般情况下,内存大小设置有两种方法,通过设备树设置,或者通过bootargs设置。1)通过dtb设置...原创 2020-06-27 22:59:34 · 2624 阅读 · 1 评论