Linux内存管理 -- malloc,kmalloc,vmalloc区别

1. Linux内存管理

高性能处理器一般会提供一个内存管理单元(MMU),该单元辅助操作系统进行内存管理,提供虚拟地址和物理地址的映射、内存访问权限保护和 Cache 缓存控制等硬件支持。操作系统内核借助 MMU,可以让用户感觉到好像程序可以使用非常大的内存空间,从而使得编程人员在写程序时不用考虑计算机中的物理内存的实际容量。

MMU 具有虚拟地址和物理地址转换、内存访问权限保护等功能, 这将使得 Linux操作系统能单独为系统的每个用户进程分配独立的内存空间并保证用户空间不能访问内核空间的地址,为操作系统的虚拟内存管理模块提供硬件基础。

但是,MMU 并非对所有处理器都是必须的,例如常用的 SAMSUNG 基于ARM7TDMI 系列的 S3C44B0X 不附带 MMU,其上无法运行老版的 Linux,而只能运行改版的μcLinux,但是新版的 Linux 2.6 则支持不带 MMU 的处理器。在嵌入式系统中,仍存在大量无 MMU 的处理器,Linux 2.6 为了更广泛地应用于嵌入式系统,融合了μcLinux,以支持 MMU-less 系统,如 Dragonball、ColdFire、Hitachi H8/300 等。

对于包含 MMU 的处理器而言,Linux 系统提供了复杂的存储管理系统,使得进程所能访问的内存达到 4GB。
在 Linux 系统中,进程的 4GB 内存空间被分为两个部分——用户空间与内核空间。用户空间地址一般分布为 0~3GB(即 PAGE_OFFSET,在 0x86 中它等于 0xC0000000),
这样,剩下的 3~4GB 为内核空间,如图 11.5 所示。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间虚拟地址。用户进程只有通过系统调用(代表用户进程在内核态执行)等方式才可以访问到内核空间。

2. 用户空间内存动态申请 -- malloc

在用户空间动态申请内存的函数为 malloc(),这个函数在各种操作系统上的使用是一致的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值