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结构,这个结构就贴在每个进程的内核栈的末端。
内核把页划分为不同的区(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结构,这个结构就贴在每个进程的内核栈的末端。
相关文章推荐
- linux 虚拟文件系统 自学报告
- Linux 进程地址空间 自学报告
- linux 内核同步自学报告
- linux 页高速缓存和页回写 自学报告
- linux 块I/O层 自学报告
- Linux内存管理之slab机制(分配对象)
- Linux内存管理--用户空间和内核空间【转】
- 浅谈Linux的内存管理机制
- Linux内存管理的基本框架(Linux内核源代码情景分析读书笔记连载)
- linux 内存管理 - paging_init 函数
- 深入理解Linux中内存管理
- linux自学视频资料第一讲----第六讲 温习测试题(含答案)
- Linux内存管理之综合篇
- 菜鸟自学ARM:linux下编程获取系统时间和设置时间
- 自学Linux---(3)如何使用gcc编译器
- Linux自学第二天(权限管理命令、文件搜索命令、帮助命令)
- linux高端内存管理之永久内核映射
- 个人专著推荐1:Red Hat Linux 9实务自学手册(含光盘)
- Linux实验报告-源代码编译安装Apache(Tarball文件安装)
- Linux内核学习笔记九——内核内存管理方式