![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Memory Management
文章平均质量分 89
ctthuangcheng
这个作者很懒,什么都没留下…
展开
-
linux物理内存探测
linux在被bootloader加载到内存后, cpu最初执行的linux内核代码是/header.S文件中的start_of_setup函数,这个函数在做了一些准备工作后会跳转到boot目下文件main.c的main函数执行,在这个main函数中我们可以第一次看到与内存管理相关的代码,这段代码调用detect_memeory()函数检测系统物理内存在header.S中执行下面汇编代码:转载 2013-04-03 09:33:52 · 1620 阅读 · 0 评论 -
linux slub分配器浅析
在《linux内存管理浅析》中提到内核管理自己使用的内存时,使用了SLAB对象池。SLAB确实是比较复杂,所以一直以来都没有深入看一看。不过现在,linux内核中,SLAB已经被它的简化版--SLUB所代替。最近抽时间看了一下SLUB的代码,略记一些自己的理解。尽管SLUB是在内核里面实现的,用户态的对象池其实也可以借鉴这样的做法。SLUB的总体思想还是跟SLAB类似,对象池里面的原创 2013-05-11 19:49:05 · 2804 阅读 · 0 评论 -
linux页面回收浅析
关于页面的使用在之前的一些文章中,我们了解到linux内核会在很多情况下分配页面。1、内核代码可能调用alloc_pages之类的函数,从管理物理页面的伙伴系统(管理区zone上的free_area空闲链表)上直接分配页面(见《linux内核内存管理浅析》)。比如:驱动程序可能用这种方式来分配缓存;创建进程时,内核也是通过这种方式分配连续的两个页面,作为进程的thread_info结构和内原创 2013-05-11 19:34:11 · 3396 阅读 · 0 评论 -
linux内核mem_cgroup浅析
memory cgroupmem_cgroup是cgroup体系中提供的用于memory隔离的功能。admin可以创建若干个mem_cgroup,形成一个树型结构。可以将进程加入到这些mem_cgroup中。(类似这样的管理功能都是由cgroup框架自带的。)为了实现memory隔离,每个mem_cgroup主要有两个维度的限制:1、res - 物理内存2、mems原创 2013-05-12 01:20:48 · 4061 阅读 · 0 评论 -
linux memory lock浅析
linux内核提供了用于锁定内存的系统调用,如:mlock:lock一段地址范围内已map的内存mlockall:lock进程虚拟地址空间内已map的内存,还可以选择对于此后新map的空间是否自动lockmmap+MAP_LOCKED选项:在mmap的同时,对相应地址范围进行mlock利用这些系统调用,用户进程可以对自己需要使用的内存进行lock。loc原创 2013-05-12 01:06:01 · 5852 阅读 · 0 评论 -
内核源码学习:伙伴算法
1.原理 Linux的伙伴算法把所有的空闲页面分为10个块组,每组中块的大小是2的幂次方个页面,例如,第0组中块的大小都为20 (1个页面),第1组中块的大小为都为21(2个页面),第9组中块的大小都为29(512个页面)。也就是说,每一组中块的大小是相同的,且这同样大小的块形成一个链表。 我们通过一个简单的例子来说明该算法的工作原理。 假设要求分配的块转载 2013-04-13 13:45:53 · 1846 阅读 · 0 评论 -
内存管理简介之Buddy算法和slab分配
1.Buddy算法linux对空闲内存空间管理采取buddy算法, Buddy算法:把内存中所有页面按照2^n划分,其中n=0~5,每个内存空间按1个页面、2个页面、4个页面、8个页面、16个页面、32个页面进行六次划分。划分后形成了大小不等的存储块,称为页面块,简称页块,包含一个页面的页块称为1页块,包含2个页面的称为2页块,依次类推。每种页块按前后顺序两两结合成一对Buddy“转载 2013-04-13 13:45:05 · 6332 阅读 · 0 评论 -
linux物理内存描述
linux使用于广泛的体系结构,因此需要用一种与体系结构无关的方式来描述内存。linux用VM描述和管理内存。在VM中兽药的普遍概念就是非一致内存访问。对于大型机器而言,内存会分成许多簇,依据簇与处理器“距离”的不同,访问不同的簇会有不同的代价。每个簇都被认为是一个节点(pg_data_t),每个节点被分成很多的成为管理区(zone)的块,用于表示内存中的某个范围。除了ZONE_DMA,ZON转载 2013-04-03 09:20:48 · 1419 阅读 · 0 评论 -
linux内存管理概述
linux内存管理建立在基本的分页机制基础上,在linux内核中RAM的某些部分将会永久的分配给内核,并用来存放内核代码以及静态内核数据结构。RAM的其余部分称为动态内存,这不仅是进程所需的宝贵资源,也是内核本身所需的宝贵资源。实际上,整个系统的性能取决于如何有效地管理动态内存。因此,现在所有多任务操作系统都在经历优化对动态内存的使用,也就是说,尽可能做到当要时分配,不需要时释放。内存管理是o转载 2013-04-03 09:10:08 · 1324 阅读 · 0 评论 -
linux内存管理之活动内存区
Linux内存活动区域其实就是全局变量e820中的内存块做了相关的检查和对其处理后的区域。在管理区初始化等地方有用到。数据结构[cpp] view plaincopyprint?struct node_active_region { unsigned long start_pfn; unsigned long end_pfn; int转载 2013-04-03 09:52:37 · 1409 阅读 · 0 评论 -
linux内存管理浅析
[地址映射](图:左中) linux内核使用页式内存管理,应用程序给出的内存地址是虚拟地址,它需要经过若干级页表一级一级的变换,才变成真正的物理地址。 想一下,地址映射还是一件很恐怖的事情。当访问一个由虚拟地址表示的内存空间时,需要先经过若干次的内存访问,得到每一级页表中用于转换的页表项(页表是存放在内存里面的),才能完成映射。也就是说,要实现一次内存访问,实际上内存被访问原创 2013-05-11 19:26:08 · 4685 阅读 · 4 评论