Linux内核剖析——内核的内存管理

本文深入探讨Linux内核的内存管理机制,包括以页为单位的管理,区分DMA、正常和高端内存的区,以及kmalloc和vmalloc的分配方式。重点介绍了slab层,它是如何优化内核数据结构的分配和回收,减少内存碎片。
摘要由CSDN通过智能技术生成

内核的内存管理不同于用户空间的内存管理,首先来讲内核本身的限制点就比较多,比如内核一般不能睡眠,因此处理内存错误一般来讲是件很困难的事情,再加上其他限制以及内核内存机制不能太复杂导致想获取内核内存变成了一件难事。

一、页

在说内核的内存管理机制之前,首先我们得明白内核内存管理的基本单位才行,一般来讲内核都是以页为单位对内核进行内存管理的,正因为如此MMU(管理内存并把虚拟地址转换为物理地址的硬件)以页为单位来管理系统中的页表,从虚拟内存的角度来看,页就是最小单位。

内核中一般用struct page这个结构体来表示系统中的每个物理页,

这里我只说其中两个域的作用,_count域,相当于页的引用计数,当改计数不为0时则证明该页被引用了多少次,当其值为0时说明当前内核并未使用改页,该页就变为了空闲页。virtual域,这是个很有意思个人感觉也很重要的域,因为它就是在虚拟内存中该页的地址,换句话说就是记录了映射关系的东西。但在有些情况下有些内存并不永久的映射到内核的地址空间上,这个域的值为NULL,需要的时候必须动态映射的这些页。这指的就是内核中的高端内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值