首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux 内核 内存管理】引导内存分配器 bootmem ② ( bootmem_data 结构体源码分析 | bootmem_data 与内存节点 pglist_data 的关联 )

文章目录 一、bootmem_data 结构体源码分析 1、node_min_pfn 成员 2、node_low_pfn 成员 3、node_bootmem_map 成员 4、last_end_off...成员 5、hint_idx成员 二、引导内存分配器 bootmem_data 与 内存节点 pglist_data 的关联 在上一篇博客 【Linux 内核 内存管理】引导内存分配器 bootmem...① ( 引导内存分配器 bootmem 工作机制 | 引导内存分配器 bootmem 的描述 bootmem_data 结构体 ) 引入了 " 引导内存分配器 bootmem " 其作用是在 Linux...; struct list_head list; } bootmem_data_t; 源码路径 : linux-4.12\include\linux\bootmem.h#33 一、bootmem_data...node_min_pfn; 2、node_low_pfn 成员 node_low_pfn 成员表示 结束的物理页 编号 ; unsigned long node_low_pfn; 3、node_bootmem_map

88110
您找到你想要的搜索结果了吗?
是的
没有找到

Linux-3.14.12内存管理笔记【建立内核页表(1)】

前面已经分析过了Intel的内存映射和linux的基本使用情况,已知head_32.S仅是建立临时页表,内核还是要建立内核页表,做到全面映射的。...(MAXMEM) 其中PFN_DOWN(x)的定义为: (file:/include/linux/pfn.h) #define PFN_DOWN(x) ((x) >> PAGE_SHIFT...Linux是一个支持多硬件平台的操作系统,各种硬件芯片的分页并非固定的2级(页全局目录和页表),仅仅Intel处理器而言,就存在3级的情况(页全局目录、页中间目录和页表),而到了64位系统的时候就成了4...所以Linux为了保持良好的兼容性和移植性,系统设计成了以下的4级分页模型,根据平台环境和配置的情况,通过将页上级目录和页中间目录的索引位设置为0,从而隐藏了页三级目录和页中间目录的存在。...由此管中窥豹,看到了Linux内存分页映射模型的存在和相关设计,暂且也就先了解这么多。 分析宏是一件很乏味的事情,不过以小见大却是一件很有意思的事情。

1.8K41

一文掌握 Linux 内存管理

Linux 内存管理是一个很复杂的“工程”,它不仅仅是对物理内存的管理,也涉及到虚拟内存管理、内存交换和内存回收等 物理内存的探测 Linux 内核通过 detect_memory()函数实现对物理内存的探测...在段描述符表准备完成之后会通过汇编跳转到保护模式 事实上,在上面这个过程中,linux 并没有明显地去区分每个段,所以这里并没有很好地起到保护作用,linux 最终使用的还是内存分页管理(开启页式映射可以参考...到这里,可以大致知道linux 虚拟内存的构造: linux 内存分页 linux 内核主要是通过内存分页来管理内存的,这里先介绍两个重要的变量:max_pfn 和 max_low_pfn。...Middle Directory) 页表(Page Table) 对于没有启动 PAE(物理地址扩展)的 32 位系统,Linux 虽然也采用四级分页模型,但本质上只用到了两级分页,Linux 通过将...在 linux 内核直接映射区里内核逻辑地址与物理页的转换关系如下: #define pfn_to_virt(pfn) __va(pfn_to_phys(pfn)) #define virt_to_pfn

1.8K31

Linux-3.14.12内存管理笔记【构建内存管理框架(1)】

由于NUMA存储结构的引入,这就需要相应的管理机制来支持, linux 2.4版本就已经开始对其支持了。...于是当前分析的3.14.12版本,linux的物理内存管理机制将物理内存划分为三个层次来管理,依次是:Node(存储节点)、Zone(管理区)和Page(页面)。 ?...linux内核的设计就是腾出32个页全局目录项,256的1/8。那么32个页全局目录项对应多大的内存空间?算一下可以知道是128M,也就是说直接映射的内存空间是896M。...= highend_pfn = max_pfn; if (max_pfn > max_low_pfn) highstart_pfn = max_low_pfn; printk...这里sparse memory涉及到linux的一个内存模型概念。linux内核有三种内存模型:Flat memory、Discontiguous memory和Sparse memory。

82420

使用procrank分析内存利用及分析源代码

作者尝试过几个Linux发行版,都没有把procrank作为可以安装的包。这也不奇怪,作者接触这个命令的时候,也是在Android中使用到的。...代码实现在linux-4.0.4/fs/proc/task_mmu.c文件的pagemap_read函数中。 ?...代码实现在linux-4.0.4/fs/proc/page.c文件的kpagecount_read函数中。 ? 依然只看注释,也大致了解到:通过传进来的PFN来计算当前的page被映射过几次。...代码实现在linux-4.0.4/fs/proc/page.c文件的kpageflags_read函数中。函数实现了通过PFN获取page的flags的功能。...c,遍历待统计的进程的maps中的所有地址区间,通过pagemap得到进程使用的所有的PFN。再通过kpagecount&kpageflags得到所有的PFN被引用的次数和对应的flags。 ?

3.8K70

FPGA Xilinx Zynq 系列(三十六)Linux 内核

一个页简单说就是一段内存,具有一个唯一的页帧编号(Page Frame Number,PFN)。而页表中存放的是映射数据,使得处理器可以把虚拟 内存地址映射到物理地址上。...比如这里进程 A 的虚拟 PFN1 映射到了物理的 PFN3。为了能把这个虚拟 PFN1 映射到物理的 PFN3,处理器要用虚拟页中的某个偏移量来做页表的索引。...如果页表中有一项是对应那个偏移量的,就能获得那个物理 PFN。...内存管理子系统提供了一些功能,再来看图 23.3,可以发现虚拟 PFN 和物理 PFN 之间并非一一对应,实际上不同的进程中的几个虚拟 PFN 可以被映射到相同的物理 PFN 上,比如可以看到进程 A...和进程 B 都有页映射到物理内存的 PFN3。

1.4K30
领券