
linux 内存管理
文章平均质量分 83
白水煮鸡蛋
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux中的mips64 tlb管理
Linux中的mips64 tlb管理 (2011-08-31 07:37)标签: mips64 tlb 分类: mips64关于tlb的描述可参考mips run2以及mips64官方手册。tlb条目:tlb entry寄存器:entryHi, entryLo0, entryLo1, mask, index, wired指令:转载 2012-03-27 23:21:15 · 3694 阅读 · 0 评论 -
内存管理-SLAB(创建SLAB块cache_grow())
从buddy system给cache分配新的slab。static int cache_grow (kmem_cache_t * cachep, int flags, int nodeid){struct slab *slabp;void *objp;size_t offset;int local_flags;unsigned long转载 2012-05-07 22:42:16 · 1135 阅读 · 0 评论 -
内存管理-SLAB(撤销SLAB块slab_destroy())
static void slab_destroy (kmem_cache_t *cachep, struct slab *slabp){/*获得第一个对象的地址*/void *addr = slabp->s_mem - slabp->colouroff;#if DEBUGint i;for (i = 0; i num; i++) {void *objp = slabp-转载 2012-05-07 22:43:19 · 899 阅读 · 0 评论 -
浅析linux内核内存管理之buddy system
浅析linux内核内存管理之buddy system Linux采用著名的伙伴系统(buddy system)算法来解决外碎片问题。把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续的页框。对1024个页框的最大请求对应着4MB大小的连续RAM块。每个块的第一个页框的物转载 2012-04-20 22:36:18 · 18715 阅读 · 1 评论 -
浅析linux内核内存管理之kmalloc
在SLAB的高速缓存中有普通高速缓存和专用高速缓存,平时用kmem_cache_create创建的是专用高速缓存,比如存放task_struct,mm_struct的高速缓存。普通高速缓存主要供kmalloc使用。第一个高速缓存叫kmem_cache,存放在cache_cache变量中,这个cache专门用于为其他cache分配描述符。[cpp] view plai转载 2012-05-09 22:48:39 · 8802 阅读 · 0 评论 -
浅析linux内核内存管理之高端内存(上)
进程可以寻址4G,其中0~3G为用户态,3G~4G为内核态。如果内存不超过1G那么最后这1G线性空间足够映射物理内存了,如果物理内存大于1G,为了使内核空间的1G线性地址可以访问到大于1G的物理内存,把物理内存分为两部分,0~896MB的进行直接内存映射,也就是说存在一个线性关系:virtual address = physical address + PAGE_OFFSET,这里的PAGE_转载 2012-05-09 23:27:50 · 2019 阅读 · 0 评论 -
浅析linux内核内存管理之内存池
内存池(memory pool)是linux 2.6的一个新特性。内核中有些地方的内存分配是不允许失败的。为了确保这种情况下的成功分配,内核开发者建立了一种称为内存池的抽象。内存池其实就是某种形式的后备高速缓存,它试图始终保存空闲的内存,以便在紧急状态下使用。下边是内存池对象的类型:[cpp] view plaincopytypedef st转载 2012-05-09 22:19:15 · 4450 阅读 · 0 评论 -
内存管理-高端内存(下)
固定映射的线性区从FIXADDR_START~FIXADDR_TOP,而临时内核映射区只是固定映射的线性区的一部分。固定映射用fixed_addresses中的索引从0xfffff000开始倒着往前分配固定地址的映射区。而临时内核映射其实就是永久映射的原子实现版本,它使用固定映射中FIX_KMAP_BEGIN到FIX_KMAP_END(它们都是的fixed_addresses中的枚举类型)这段区间转载 2012-05-11 20:47:16 · 1409 阅读 · 0 评论 -
linux Slob内存管理小析
Slob分配对象大小是从三个链中选择的static LIST_HEAD(free_slob_small);static LIST_HEAD(free_slob_medium);static LIST_HEAD(free_slob_large); 对于小于256字节的对象,将从free_slob_small链表中寻找slob进行分配;对于小于1024字节的对象,将从free_原创 2013-02-07 10:32:43 · 1100 阅读 · 0 评论 -
内存管理-SLAB(释放SLAB对象kmem_cache_free())
释放的过程正好与分配的过程相反,先将object释放到cpu local slab中,如果cpu local slab满了,就将cpu local slab中的free object释放到share local slab中,如果share local slab也满了,就把share local slab的部分free object释放到slab lists中,然后再将cpu local slab中转载 2012-05-07 22:37:12 · 4001 阅读 · 0 评论 -
内存管理-SLAB(分配SLAB对象kmem_cache_alloc())
调用kmem_cache_alloc()来分配空闲对象,如果cpu local slab中没有空闲对象,则从share local slab中填充cpu local slab,如果share local slab也没有空闲对象了,则从slabs_partial或slabs_free中找空闲对象填充share local slab,然后share local slab再填充cpu local sla转载 2012-05-07 22:36:29 · 3941 阅读 · 1 评论 -
内存管理-SLAB(销毁SLAB高速缓存kmem_cache_destroy())
调用kmem_cache_destroy()释放cache。这个函数一般是在模块卸载的时候调用,在调用这个函数之前,cache应该是empty的。调用者必须保证在执行kmem_cache_destroy()的时候,不会对这个cache有任何内存分配。这里将share local slab中的指针释放回slab,然后对slabs_free上所有的slab进行释放。int kmem转载 2012-05-07 22:35:51 · 3718 阅读 · 0 评论 -
linux mmap 详解
一.前言mmap的具体实现以前在学习内核时学习过,但是对于其中的很多函数是一知半解的,有些只能根据其函数名来猜测其具体的功能,在本文中,一起来重新深入理解其具体的实现。二.mmap的用户层应用void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize); 具体参数含义start :转载 2012-03-22 22:19:46 · 1176 阅读 · 0 评论 -
浅析linux内核内存管理之分页
浅析linux内核内存管理之分页 硬件中的分页硬件中的分页分常规分页和扩展分页:常规分页,32位的线性地址被分为3个域:Directory(目录) 最高10位Table(页表) 中间10位Offset(偏移量)转载 2012-04-15 20:28:39 · 6095 阅读 · 2 评论 -
浅析linux内核内存管理之PAE
浅析linux内核内存管理之PAE 早期Intel处理器从80386到Pentium使用32位物理地址,理论上,这样可以访问4GB的RAM。然而,大型服务器需要大于4GB的RAM来同时运行数以千计的进程,近几年来这对Intel造成了压力,所以必须扩展32位80x86所支转载 2012-04-15 20:12:42 · 7709 阅读 · 1 评论 -
浅析linux内核内存管理之最终内核页表
浅析linux内核内存管理之最终内核页表 在系统初始化的时候进行了最终内核映射,主要在paging_init函数中:[html] view plaincopy499void __init paging_init(void)转载 2012-04-15 21:40:27 · 6055 阅读 · 0 评论 -
浅析linux内核内存管理之临时内核页表
浅析linux内核内存管理之临时内核页表 临时页全局目录是在内核编译过程中静态地初始化的,而临时页表是由startup_32()汇编语言函数初始化的。临时页全局目录存放在swapper_pg_dir变量中,临时页表在pg0变量开始出存放,紧接在内核未初始转载 2012-04-15 21:18:12 · 2856 阅读 · 0 评论 -
浅析linux内核内存管理之page allocator
本文档主要介绍page allocator,page allocator是buddy system的前端,在请求页框分配的时候会先调用page allocator里的函数,page allocator再去调用buddy system里的函数分配实际的页框。page allocator分配时对外的接口是alloc_pages函数:[html] view plainco转载 2012-05-01 20:54:38 · 4124 阅读 · 0 评论 -
内存管理-SLAB(SLAB的基本数据结构)
slab分配器基本原理: slab最初是在Solaris 2.4中引入linux操作系统的,用于解决内碎片问题。程序经常需要创建一些数据结构,比如进程描述符task_struct,内存描述符mm_struct等。slab分配器把这些需要分配的小块内存区作为对象,类似面向对象的思想。每一类对象分配一个cache,cache有一个或多个slab组成,slab由一个或多个转载 2012-05-07 22:33:37 · 2895 阅读 · 0 评论 -
内存管理-SLAB(创建SLAB高速缓存kmem_cache_create())
这篇主要讲解专用高速缓存的创建函数kmem_cache_create()的流程。kmem_cache_create()主要是建立的cache描述符,填充了其成员,设置cpu local slab,设置外置slab描述符还是内置slab描述符,并没有分配slab块和对象。最终将cache描述符添加到cache_chain链表上。首先写了一个简单的测试程序:[cpp]转载 2012-05-07 22:35:14 · 21174 阅读 · 0 评论 -
linux slab内存管理小析
最近把slab机制看了一下,网上分析内容丰富全面,不再过多赘述,只是自己做了个简单的小结 1. 几大重要数据结构(1)Kmem_cache数据结构:struct kmem_cache { struct array_cache *array[NR_CPUS]; CPU本地高速缓存 unsigned int batchcount;原创 2013-01-22 20:26:10 · 1426 阅读 · 0 评论