• 2024-06-18linux内存管理(十一)- 页面迁移
    这里有一篇很好的博客宋宝华:论Linux的页迁移(PageMigration)完整版-CSDN博客为什么需要页面迁移?试想系统在经过长时间运行,内存块趋于碎片化,想要分配一块大的连续内存已经不可能了。此时并非没有足够的内存,而只是内存碎片化。这个时候如果可以是已经分配的内存聚集在一起就可以得到
  • 2024-06-18linux内存管理(十)- 页面回收(二)
    本篇了解一下内核是怎样触发页面回收的。触发内存回收的方式有两种,同步和异步回收。alloc_pages在分配内存的时候,如果内存短缺会主动回收内存,这是同步回收;内核有一个或多个kswapd内核线程负责在后台回收内存,这是异步。 看一下shrink_active_liststaticvoidshrink_lruvec(st
  • 2024-06-15linux内存管理(八)- 反向映射RMAP
    这里有一篇博客讲的不错。linux内存管理笔记(三十八)----反向映射_linux反向映射-CSDN博客页表是把虚拟地址映射到物理页面,但是如何根据一个物理页找到所有映射它的pte呢?答案是用反向映射ReverseMapping(RMAP)。这在页面回收中很有用。回收页面需要将到物理页的映射断开(改一下pte
  • 2024-06-12linux内存管理(九)- 页面回收
    参考《深入理解linux内核架构》和这篇博客Linux中的内存回收[一]-知乎(zhihu.com)内核代码v6.8-rc2内存在计算机系统中经常是稀缺资源,当系统中内存不足甚至耗尽,为了让系统继续运行必须回收一部分内存。为了回收内存,我们必须首先知道系统中的内存都处于什么状态。内存中的页
  • 2024-06-11linux内存管理(七)- 写时复制
    在fork进程的时候子进程会共享父进程的页表,但并没有分配新页。此时页表时只读的,如果父进程或者子进程写内存就会触发pagefault,内核会重新分配内存更改页表,从此分道扬镳。因此写时复制包含两部分内容,第一是fork进程时复制页表并设置pte为只读,第二是写内存发生pagefault。先来看
  • 2024-06-11linux内存管理(六)- 内核新struct - folio
    folio大概是5.16引入的,看起来像是page的封装,这里有一篇讲解folio很好的博客,论好名字的重要性:Linux内核page到folio的变迁-CSDN博客structfolio{/*private:don'tdocumenttheanonunion*/union{struct{/*public:*/unsignedlon