您的位置:首页 > 运维架构 > Linux

linux 内存管理 自学报告

2012-04-08 22:28 274 查看
物理页作为内核管理的基本单位。主要的三个用途:1,页缓存使用(mapping域指向和这个页关联的address_space对象);2,作为私用数据(由private指向);3,进程页表的映射。用sturct page表示。这个数据结构的目的在于描述物理内存的一个页本身,而不描述包含在其中的数据。使用者可能是1,用户空间进程,2,动态分配的内核数据,3,静态内核代码,4,页高速缓存。

内核把页划分为不同的区(zone).使用区对具有相似特性的页进行逻辑分组。(DMA,NORMAL,HIGHMEM(高于896M=1G-128M,分配只有page,没有逻辑地址),后面有加了一个removal)。

内核分配可以用alloc_page,get_zoroed_page或者kmalloc(函数)。gfp_mask标记,是申请内核的标记。可分为三类:1,行为修饰符,2,区修饰符及3,类型。行为修饰符表示内核应当如何分配所需的内存。比如__GFP_WAIT,__GFP_NOFAIL。 区修饰符表示从哪个一个区分配内存。类型标志组合了行为修饰符和区修饰符,将各种可能用到的组合归纳为不同类型,简化了修饰符的使用。

vmalloc分配的内存虚拟地址是连续的,但是物理地址无需连续,需要“修正”页表,可能比直接内存映射大得多的tlb抖动。

slab分配器扮演了通用数据结构缓存层的角色。每个高速缓存都存放着不同类型的对象。由一个或多个物理上连续内存组成。一般不能低于1页。

每个进程的内核栈大小既取决于体系结构,也与编译时的选项有关,历史上,每个进程都有两个页的内核栈。也可以设置单页内核栈。当内核栈溢出时,首先面临考验的是thread_info结构,这个结构就贴在每个进程的内核栈的末端。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: