#include#include#include#include #include//fork进程//变量的引申 每一个进程有独立的进程地址空间有更深入的理解//写实复制理解// 1. 子进程修改变量时拷贝// 2. 只拷贝页 ----> Linux内核内存管理机制int main(void){.....
分类:
其他好文 时间:
2015-04-15 16:40:37
阅读次数:
105
我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。那虚拟内存空间是什么呢,它与实际物理内存空间又是怎样对应的呢,为什么有了虚拟内存技术,我们就能运行比实际物理内存大的...
分类:
系统相关 时间:
2015-03-15 15:09:35
阅读次数:
262
首先看下进程地址空间示意图: 我们简单的说,从低地址到高地址,代码区和数据区,空洞,堆栈区。 在Linux内核源代码情景分析-内存管理之用户堆栈的扩展,我们申请了从堆栈区往下,数据区上面的页面。 在Linux内核源代码情景分析-内存管理之用户页面的换入,我们申请了用于换入/换出的页面。 在本文中,我们申请的是从数据区往上,堆栈区下面的页面。 我们通过一个实例来分析,b...
分类:
系统相关 时间:
2015-03-09 09:24:25
阅读次数:
246
关于Linux 32位内存下的内存空间布局,可以参考这篇博文Linux下C程序进程地址空间局关于源代码中各种数据类型/代码在elf格式文件以及进程空间中所处的段,在x86_64下和i386下是类似的,本文主要关注vm.legacy_va_layout以及kernel.randomize_va_space参数影响下的进程空间内存宏观布局。情形一:
vm_legacy_va_layout=1
ke...
分类:
系统相关 时间:
2015-03-09 00:34:17
阅读次数:
568
在下面几种情况下会发生,页面出错异常(也叫缺页中断): 1、相应的页面目录项或者页面表项为空,也就是该线性地址与物理地址的映射关系尚未建立,或者已经撤销。本文讨论的就是这种情况。 2、相应的物理页面不在内存中。 3、指令中规定的访问方式与页面的权限不符,例如企图写一个“只读”的页面。 首先看下进程地址空间示意图:...
分类:
系统相关 时间:
2015-03-01 13:16:01
阅读次数:
305
原文链接1 原文链接2
1.进程的环境变量
每个进程都有一个与它关联的环境块(environment block),这是在进程地址空间内分配的一块内存,其中包含字符串类似于:
=::=::\...
VarName=VarValue\0...
\0
除第一个=::=::\外,块中可能还有其他字符串是以等号开头的,这种字符串不作为环境变量使用。
访问环境块...
话说上回说到,C程序运行之前,必须要加载到其进程地址空间中。今儿咱就扯扯这个加载到底是怎么加载的。 一图胜前言,这个图简单说明了可执行文件加载过程的逻辑流,在此只做粗粒度概要说明。需要准确描述的,请出门左转,看源码去吧。1. 程序总是运行在进程上下文(context)中的,当输入./meml...
分类:
其他好文 时间:
2014-12-30 23:21:51
阅读次数:
261
一个成功的男人背后,至少有一个伟大的女人;一个不成功的男人,至少有一双手。而一个C程序,无论成功不成功,它的背后一定有一个操作系统,一个shell,一套工具链。世界本就不公平。隐藏在显而易见的事实背后的,你若能看透,便可以站在对自己公平的那一端。1、进程地址空间一个进程一旦建立,就会自认为占有4G内...
分类:
其他好文 时间:
2014-12-29 22:59:47
阅读次数:
171
vfork是一个比较特别的系统调用,它与fork之间有一些微妙的区别。...
分类:
其他好文 时间:
2014-11-23 17:36:33
阅读次数:
230
上一节讲了由open函数打开一个内存映射文件,再由mmap函数把得到的描述符映射到当前进程地址空间中来。这一节说说另外一种类似的共享内存方法,即 有shm_open函数打开一个Posix.1 IPC名字(也许是文件系统中的一个路径名),所返回的描述符由函数mmap映射到当前进程地址空间。 pos.....
分类:
系统相关 时间:
2014-11-22 21:33:46
阅读次数:
299