进程地址空间


虚拟内存

linux操作系统采用虚拟内存管理技术,使得每个进程都有独立的进程空间地址,该空间的大小为3G,用户看到和接触的都是虚拟地址,无法看到实际的物理地址。利用这种虚拟地址不但能起到保护操作系统的作用,而且更重要的事用户程序可使用比实际物理内存更大的地址空间。

linux将4G的虚拟地址空间分为两个部分----用户空间与内核空间。用户空间从0到0xbfffffff,内核空间从3G到4G。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间。例外情况是用户进程通过系统调用访问内核空间。

用户空间对应进程,所以每当进程切换,用户空间就会跟着变化。

每个进程的用户空间都是完全独立、互不相干的。把同一个程序同时运行10次,会看到10个进程使用的线程地址一模一样。ps aus (查看进程号)  cat /proc/<pid>/maps

进程空间

创建进程fork()、程序载入execve()、动态内存分配malloc()等进程相关操作都需要分配内存给进程。这时进程申请和获得的不是物理地址,仅仅是虚拟地址。

实际的物理内存只有当进程真的去访问新获取的虚 拟地址时,才会由“请页机制”产生“缺页”异常,从而进入分配实际页框的程序。该异常是虚拟内存机制赖以存在的基本保证--它会告诉内核去为进程分配物理页,并建立对应的页表,这之后虚拟地址才实实在在地映射到物理地址上。


在应用程序中,常用malloc函数进行动态分配内存,而在Linux内核中,通常使用kmalloc来动态分配内存

kmalloc原型:

#include <linux/slab.h>

void *kmalloc(size_t size, int flags)

参数:

size:要分配的内存的大小

flag:分配标志,它控制kmalloc的行为

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值