linux 内存管理 自学报告

物理页作为内核管理的基本单位。主要的三个用途: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结构,这个结构就贴在每个进程的内核栈的末端。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值