网站添加ico,hfs网络文件服务器可以做网站,房地产网站 模板,wordpress主题手机制作教程内存回收#xff1a;
应用程序通过 malloc 函数申请内存的时候#xff0c;实际上申请的是虚拟内存#xff0c;此时并不会分配物理内存。
当应用程序读写了这块虚拟内存#xff0c;CPU 就会去访问这个虚拟内存#xff0c; 这时会发现这个虚拟内存没有映射到物理内存…内存回收
应用程序通过 malloc 函数申请内存的时候实际上申请的是虚拟内存此时并不会分配物理内存。
当应用程序读写了这块虚拟内存CPU 就会去访问这个虚拟内存 这时会发现这个虚拟内存没有映射到物理内存 CPU 就会产生缺页中断进程会从用户态切换到内核态并将缺页中断交给内核的 Page Fault Handler 缺页中断函数处理。
缺页中断处理函数会看是否有空闲的物理内存如果有就直接分配物理内存并建立虚拟内存与物理内存之间的映射关系。
如果没有空闲的物理内存那么内核就会开始进行回收内存的工作回收的方式主要是两种快速内存回收直接内存回收和kswapd内存回收。
回收内存页类型 文件页和匿名页的回收都是基于 LRU 算法。可以调整文件页和匿名页的回收倾向使MMU优先回收文件页从而减少内存回收对系统性能的影响回收内存时伴随着大量的磁盘访问而干净页不需要操作磁盘。因此实际系统又据此此为五种链表匿名页的 active 链表inactive 链表和文件页的active 链表 inactive 链表非回收链表
LRU_INACTIVE_ANON非活动匿名页链表里面存放的是最近没有被访问过的页描述符。在内存回收时会从该链表中取出部分页框放入swap分区。其活动标志PG_active是0。LRU_ACTIVE_ANON活动匿名页链表按最近访问时间排序放置页描述符这些页框不能直接放入到swap分区需要先放到LRU_INACTIVE_ANON链表中。其活动标志PG_active是1。LRU_INACTIVE_FILE非活动文件页链表存放的是最近没有被访问过的文件页描述符在内存回收时。这些页框可以取出一部分回写到硬盘然后被释放掉。其活动标志PG_active是0。LRU_ACTIVE_FILE活动文件页链表按最近访问时间排序放置页描述符这些页框不能直接被回收需要先放入到LRU_INACTIVE_FILE链表中。其活动标志PG_active是1。LRU_UNEVICTABLE在内存中被锁的页框这些页框不能被回收。可能是匿名页也可能是文件页。