Linux进程分配内存的两种方式--brk() 和mmap()
来源:互联网 发布:怎么样做淘宝客赚钱 编辑:程序博客网 时间:2024/05/16 12:14
如何查看进程发生缺页中断的次数?
用ps -o majflt,minflt -C program命令查看。
majflt代表major fault,中文名叫大错误,minflt代表minor fault,中文名叫小错误。
这两个数值表示一个进程自启动以来所发生的缺页中断的次数。
发成缺页中断后,执行了那些操作?
当一个进程发生缺页中断的时候,进程会陷入内核态,执行以下操作:
1、检查要访问的虚拟地址是否合法
2、查找/分配一个物理页
3、填充物理页内容(读取磁盘,或者直接置0,或者啥也不干)
4、建立映射关系(虚拟地址到物理地址)
重新执行发生缺页中断的那条指令
如果第3步,需要读取磁盘,那么这次缺页中断就是majflt,否则就是minflt。
内存分配的原理
从操作系统角度来看,进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。
1、brk是将数据段(.data)的最高地址指针_edata往高地址推;
2、mmap是在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的虚拟内存。
这两种方式分配的都是虚拟内存,没有分配物理内存。在第一次访问已分配的虚拟地址空间的时候,发生缺页中断,操作系统负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。
在标准C库中,提供了malloc/free函数分配释放内存,这两个函数底层是由brk,mmap,munmap这些系统调用实现的。
下面以一个例子来说明内存分配的原理:
情况一、malloc小于128k的内存,使用brk分配内存,将_edata往高地址推(只分配虚拟空间,不对应物理内存(因此没有初始化),第一次读/写数据时,引起内核缺页中断,内核才分配对应的物理内存,然后虚拟地址空间建立映射关系),如下图:
2、进程调用A=malloc(30K)以后,内存空间如图2:
3、进程调用B=malloc(40K)以后,内存空间如图3。
情况二、malloc大于128k的内存,使用mmap分配内存,在堆和栈之间找一块空闲内存分配(对应独立内存,而且初始化为0),如下图:
5、进程调用D=malloc(100K)以后,内存空间如图5;
6、进程调用free(C)以后,C对应的虚拟内存和物理内存一起释放。
8、进程调用free(D)以后,如图8所示:
- Linux进程分配内存的两种方式--brk() 和mmap()
- Linux进程分配内存的两种方式--brk() 和mmap()
- 进程分配内存的两种方式--brk() 和mmap()(不设计共享内存)
- 向操作系统申请内存的两种方式:brk和mmap
- 进程的内存分配函数之brk和mmap(不考虑共享内存)的应用
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap系统调用
- Linux内存分配小结--malloc、brk、mmap
- linux内存管理函数mmap和brk
- 频繁分配释放内存导致的性能问题的分析--brk和mmap的实现
- brk和sbrk及内存分配函数相关-linux+内存
- linux下brk、mmap、malloc和new的区别
- table表头对不上的问题
- 时区修改与服务之间时间同步
- 操作系统课程设计——文件系统
- 史上最全的maven pom.xml文件教程详解
- Zabbix的安装和配置
- Linux进程分配内存的两种方式--brk() 和mmap()
- EBS中Java并发请求代码编写规范
- RN动画
- [BZOJ]1103: [POI2007]大都市meg dfs序+树状数组
- 详解FOF基金的四种运作模式
- MongoDB
- 文章标题
- 转载一篇非常使用的文章mysql在linux下的安装
- APP打包遇到的问题和解决办法总结 <待更新>