华的专栏

讨论与进步

排序:
默认
按更新时间
按访问量

Linux Swap机制概述

识别需交换的页 1.      页框回收算法(PFRA)将页分为不可回收页、可交换页、可同步页、可丢弃页四种类型。其中,可交换页包括: I.属于进程匿名线性区(如用户态堆、栈)的页; II.属于进程私有内存映射的脏页; III.属于IPC共享内存区的页; 对于内存中的...

2017-01-26 09:24:10

阅读数:1472

评论数:1

LINUX内核内存管理kmalloc,vmalloc

一.kmalloc与vmallco     在设备驱动程序或者内核模块中动态开辟内存,不是用malloc,而是kmalloc ,vmalloc,释放内存用的是kfree,vfree,kmalloc函数返回的是虚拟地址(线性地址). kmalloc特殊之处在于它分配的内存是物理上连续的,这对于...

2016-10-27 16:24:12

阅读数:808

评论数:0

linux内存映射

内存管理分为对连续物理内存区管理和非连续内存区管理,本文主要讲解连续的物理内存区管理的技术中所涉及到的内核线性地址空间映射的相关知识。涉及到的东西有:页框,管理区(高端内存,低端内存),高端内存映射等,这些知识是掌握伙伴系统算法和slab分配器的基础。 一、页框      页框为物理内存分配的...

2016-10-26 17:54:52

阅读数:230

评论数:0

shrink_page_list 函数分析

shrink_page_list 是页面回收体系中最至关重要的一个函数,它决定在zone->inactive_list中的页面最后是否能被回收释放掉。这个函数的处理流程总结如下 1、如果页面被锁住了,放入继续将页面保留在inactive list中,后就再扫描到底时候再试图回收这些page ...

2016-10-18 09:34:52

阅读数:948

评论数:0

linux内存源码分析 - SLAB分配器概述

之前说了管理区页框分配器,这里我们简称为页框分配器,在页框分配器中主要是管理物理内存,将物理内存的页框分配给申请者,而且我们知道也可页框大小为4K(也可设置为4M),这时候就会有个问题,如果我只需要1KB大小的内存,页框分配器也不得不分配一个4KB的页框给申请者,这样就会有3KB被白白浪费掉了。为...

2016-09-08 09:10:47

阅读数:288

评论数:0

linux内存源码分析 - 伙伴系统(初始化和申请页框)

之前的文章已经介绍了伙伴系统,这篇我们主要看看源码中是如何初始化伙伴系统、从伙伴系统中分配页框,返回页框于伙伴系统中的。   我们知道,每个管理区都有自己的伙伴系统管理属于这个管理区的页框,这也说明了,在伙伴系统初始化时,管理区必须要已经存在(初始化完成)了。在管理区描述符(struct z...

2016-09-01 10:43:34

阅读数:725

评论数:0

Linux内存映射——mmap

一 mmap系统调用 1.内存映射 所谓的内存映射就是把物理内存映射到进程的地址空间之内,这些应用程序就可以直接使用输入输出的地址空间,从而提高读写的效率。Linux提供了mmap()函数,用来映射物理内存。在驱动程序中,应用程序以设备文件为对象,调用mmap()函数,内核进行内存...

2016-08-30 21:32:03

阅读数:345

评论数:0

linux内存源码分析 - SLUB分配器概述

本文为原创,转载请注明:http://www.cnblogs.com/tolimit/     SLUB和SLAB的区别   首先为什么要说slub分配器,内核里小内存分配一共有三种,SLAB/SLUB/SLOB,slub分配器是slab分配器的进化版,而slob是一种精简...

2016-08-23 07:35:41

阅读数:1350

评论数:0

总结一下linux中的分段机制

这篇文章主要说一下linux对于分段机制的处理,虽然都说linux不使用分段机制,但是分段机制属于CPU的一个功能,即使linux不使用,也要通过代码想办法绕过它,况且linux也使用到了分段机制中的某些功能。   分段机制主要功能只有两点: 将物理内存划分为多个段,让操作系统可以使用...

2016-08-23 07:34:49

阅读数:1729

评论数:0

内核参数说明

因个人能力有限,不能保证所有描述都正确,还请大家集思广益,有错误的地方欢迎大家留言指正,同时也欢迎大家留言对未标注项进行补偿,谢谢。   内核参数列表 kernel.acct acct功能用于系统记录进程信息,正常结束的进程都会在该文件尾添加对应的信息。异常...

2016-08-23 07:33:56

阅读数:2483

评论数:0

linux内存源码分析 - 内存池

内存池是用于预先申请一些内存用于备用,当系统内存不足无法从伙伴系统和slab中获取内存时,会从内存池中获取预留的那些内存。内存池与特殊slab一样,需要使用的设备需要自己创建内存池,而不是系统会自动生成。书上形容得好,内存比作新鲜食物,内存池比作罐头食物,人比作拥有此内存池的模块,当无法吃到新鲜食...

2016-08-23 07:32:48

阅读数:176

评论数:0

linux内存源码分析 - 伙伴系统(释放页框)

翻了一下之前的文章,发现竟然忘记写内核是如何释放页框的,罪过。   释放页框很简单,其实只有几步 检查此页是否被其他进程使用(检查页描述符的_count是否为0)。如果是释放单个页框,则优先把它放回到该CPU的单页框高速缓存链表中,如果该CPU的单页框高速缓存的页框过多,则把该CPU的...

2016-08-23 07:31:56

阅读数:603

评论数:0

linux内存源码分析 - 内存压缩(实现流程)

概述   本文章最好结合linux内存管理源码分析 - 页框分配器与linux内存源码分析 -伙伴系统(初始化和申请页框)一起看,会涉及里面的一些知识。   我们知道内存是以页框为单位,每个页框大小默认是4K(大页除外),而在系统运行时间长后就会出现内存碎片,内存碎片的意思就是一段...

2016-08-23 07:31:13

阅读数:826

评论数:0

linux内存源码分析 - 内存回收(匿名页反向映射)

概述   看完了内存压缩,最近在看内存回收这块的代码,发现内容有些多,需要分几块去详细说明,首先先说说匿名页的反向映射,匿名页主要用于进程地址空间的堆、栈、还有私有匿名共享内存(用于有亲属关系的进程),这些匿名页所属的线性区叫做匿名线性区,这些线性区只映射内存,不映射具体磁盘上的文件。匿名页...

2016-08-23 07:30:14

阅读数:1136

评论数:0

linux内存源码分析 - 内存压缩(同步关系)

概述    最近在看内存回收,内存回收在进行同步的一些情况非常复杂,然后就想,不会内存压缩的页面迁移过程中的同步关系也那么复杂吧,带着好奇心就把页面迁移的源码都大致看了一遍,还好,不复杂,也容易理解,这里我们就说说在页面迁移过程中是如何进行同步的。不过首先可能没看过的朋友需要先看看linux...

2016-08-23 07:29:15

阅读数:592

评论数:0

linux内存源码分析 - 内存回收(lru链表)

概述   对于整个内存回收来说,lru链表是关键中的关键,实际上整个内存回收,做的事情就是处理lru链表的收缩,所以这篇文章就先说说系统的lru链表。   内存回收的核心思想,就是如果一些数据能够保存到磁盘,在内存不足时就把这些数据写到磁盘中,这样这些数据占用的内存页就可以作为空闲内存...

2016-08-23 07:28:25

阅读数:704

评论数:0

linux内存源码分析 - 内存回收(整体流程)

概述   当linux系统内存压力就大时,就会对系统的每个压力大的zone进程内存回收,内存回收主要是针对匿名页和文件页进行的。对于匿名页,内存回收过程中会筛选出一些不经常使用的匿名页,将它们写入到swap分区中,然后作为空闲页框释放到伙伴系统。而对于文件页,内存回收过程中也会筛选出一些不经...

2016-08-23 06:57:48

阅读数:1536

评论数:0

直接内存回收中的等待队列

内存回收详解见linux内存源码分析 - 内存回收(整体流程),在直接内存回收过程中,有可能会造成当前需要分配内存的进程被加入一个等待队列,当整个node的空闲页数量满足要求时,由kswapd唤醒它重新获取内存。这个等待队列头就是node结点描述符pgdat中的pfmemalloc_wait。如果...

2016-08-22 11:34:04

阅读数:430

评论数:0

Linux内存管理之页面回收

请求调页机制,只要用户态进程继续执行,他们就能获得页框,然而,请求调页没有办法强制进程释放不再使用的页框。因此,迟早所有空闲内存将被分配给进程和高速缓存,Linux内核的页面回收算法(PFRA)采取从用户进程和内核高速缓存“窃取”页框的办法不从伙伴系统的空闲块列表。        实际上,在...

2016-08-22 11:20:35

阅读数:1848

评论数:0

页面回收之shrink_zone的实现

页面回收的最重要的函数即:shrink_zone,其主要工作就是shrink_active_list和shrink_inactive_list。         在shrink_zone中,如果该zone中需要扫描到的active和inactive的内存大于swap的阈值,即32个物理页面,则开...

2016-08-22 11:19:02

阅读数:831

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭