linux mm
文章平均质量分 76
linux 内存管理
范吉民(DY Young)
年与时驰,意与日去,遂成枯落!多不接世,悲守穷庐,将复何及?
展开
-
linux mm系列:buddy分配器
buddy分配器的真实接口是 rm_queue,该接口实际调用 rmqueue_buddy. 这个函数不断地尝试从zone中寻找符合order要求的page,申请的核心是__rmqueue_smallest和__rmqueue.这是一个锦上添花的操作,大概的作用就是把空闲的块按照能否移动的性质分成几类,再以后出现大量外碎片的时候,可以做些移动操作来减小。expand函数中的low是申请的内存的order数,high是当前分配的block的order数。剩余的那一个3阶的内存块就是要返回的内存块了。原创 2023-03-26 18:19:21 · 306 阅读 · 0 评论 -
linux mm系列:内核内存管理概述
首先明确内存访问过程,程序中使用的都是虚拟地址,所有的内存访问从软件角度都是虚拟地址。同时,真实的存储都是在物理内存或者外设寄存器上,这些物理内存和外设寄存器在物理地址空间上的分配一同构成了物理内存布局。在解决这两个核心问题后,可以进行一些锦上添花的操作,例如可以在实际写内存时才分配物理内存,提升物理内存的实际利用率等等。这两个问题,在逻辑上是两个完全独立的问题,虚拟内存的分配可以和物理内存分配没有任何关系,让二者关联的方式就是地址映射,也就是通过页表将虚拟地址转换成物理地址。原创 2023-03-26 14:28:57 · 173 阅读 · 0 评论 -
linux mm系列:memblock分配器
memblock是物理分配器还是虚拟分配器?答:memblock管理的核心逻辑是基于物理内存的,从这个角度来看是物理分配器。但是分配的返回地址可以是物理地址也可以是虚拟地址。虚拟地址是通过phys_to_virt函数完成的映射。因此可以看出memblock的工作在直接映射区上,即通过__va()宏得到虚拟地址。memblock的生命周期是怎样的?答:memblock存在于Linux启动初期,这个阶段buddy还未工作。原创 2023-03-26 13:36:39 · 169 阅读 · 0 评论