Linux进程地址空间
2011年04月10日
1.概述 进程地址空间由每个进程中的线性地址区组成,而且更为重要的特点是内核允许进程使用该空间的地址。进程地址空间中的任何有效地址只能位于惟一的区域,这些内存区域不能相互覆盖,可以看到,在执行进程中,每个不同的内存片段都对应一个独立的内存区域: 栈,对象代码,全局变量,被映射的文件等等。
2. 内存描述符
内核使用内存描述符结构体来表示进程的地址空间。该结构包含了和进程地址空间有关的全部信息。内存描述符由mm_struct 结构体表示,定义在.
struct mm_struct{
struct vm_area_struct *mmap /*内核区域链表*/
struct rb_root
struct vm_area_struct *mmap_cache
pgd_t *pgd
......
}
所有的mm_struct结构体都通过自身的mmlist域连接在一个双向链表中,该链表的首元素是init_mm描述符,它代表init进程的地址空间。在进程的描述符中,current->mm域中存放该进程使用的内存描述符。所以current->mm代表当前进程的内存描述符。
3. 内存区域
内存区域由vm_area_struct结构体描述,定义在中。内存区域在内核中也经常被称为虚拟内存区域VMA。
vm_area_struct 描述了指定地址空间内连续区间上的一个独立内存范围。vm_mm指向和VMA相关的mm_struct结构体,注意每个VMA对其相关的mm_struct结构体来说都是以惟一的,所以即使两个进程将同一个文件映射到各自的地址空间,它们分别都会有一个vm_area_struct结构体来标志自己的内存区域。
VMA标志,VM_READ,VM_WRITE,VM_EXEC标志内存区域的页面读,写和执行权限。这些标志要求组合构成VMA的访问权限。
VMA操作,vm_area_struct 结构体中的vm_ops域指向与指定内存区域相关的操作函数表。内核使用表中的方法操作VMA。
具体的方法如下:
void open(struct vm_area_struct *area);
当一个指定的内存区域被加一个地址空间时,该函数被调用。
void close(struct vm_area_struct *area);
当指定的内存区域从地址空间中删除时,该函数被调用。
struct page* nopage(struct vm_area_struct *area,unsigned long address,int unused);
第二个参数是用户空间的虚拟地址,当访问的页不在物理内存中时,该函数被页错误处理调用。
int populate(struct vm_area_struct *area,unsigned long address,unsigned long len,pgprot_t prot,unsigned long pgoff,int nonblock);
该函数被系统调用remap_pages()调用来为将要发生的缺页中断预映射一个新映射。
mmap()和do_mmap()函数:
内核使用do_mmap()函数来创建一个新的线性地址区间,说该函数创建一个新的VMA并不非常准确,如果创建的地址区间与一个已经存在的地址区间相邻,就会合并。
总之,每个进程对应一个进程区域描述符mm_struct,而虚拟内存区域VMA指定了mm_struct上的一段连续的独立的内存范围。
发表评论
-
Linux驱动学习――网络接口DM9000驱动学习 mini2440
2012-01-20 08:22 1368Linux驱动学习――网络接口DM9000驱动学习 mini2 ... -
《Linux内核设计与实现》ch14
2012-01-20 08:22 552《Linux内核设计与实现 ... -
从头开始编写操作系统(8) 第7章:系统结构
2012-01-20 08:22 595从头开始编写操作系统( ... -
堆和栈的区别
2012-01-20 08:22 557堆和栈的区别 2010年10 ... -
自动下载并运行的VBS脚本代码[转载]
2012-01-19 13:35 535自动下载并运行的VBS脚本代码[转载] 2012年01月15 ... -
Windows XP的小秘密 {10}
2012-01-19 13:35 797Windows XP的小秘密 {10} 2011年06月03 ... -
Redflag SP3 介绍
2012-01-19 13:35 770Redflag SP3 介绍 2010年07月05日 ... -
MAX三百问(珍藏版)上
2012-01-19 13:34 710MAX三百问(珍藏版)上 2011年06月13日 安装篇 ... -
Windows XP的小秘密 {7}
2012-01-17 03:24 609Windows XP的小秘密 {7} 201 ... -
Windows下Android开发环境配置
2012-01-17 03:24 443Windows下Android开发环境配置 2011年06月 ... -
Zigbee入门指导(二)
2012-01-17 03:24 795Zigbee入门指导(二) 2010年08月06日 Zi ... -
周围的那些个朋友们????????????
2012-01-16 01:59 772周围的那些个朋友们???????????? 2011年01月 ... -
123
2012-01-16 01:58 470123 2010年06月12日 ... -
转:不断迎接最美好的你自己--- ―一个经络按摩师的生涯规划
2012-01-16 01:58 694转:不断迎接最美好的你 ... -
广告销售的技巧
2012-01-16 01:58 489广告销售的技巧 2010年0 ... -
struts2 处理请求流程分析(结合源码)1- 孤星随缘ツ http://t.sina.com.cn/samzhxing-iteye技术网站
2012-01-11 02:00 581struts2 处理请求流程分析(结合源码)1- 孤星随缘ツ ... -
JavaScript中setTimeout()
2012-01-11 02:00 493JavaScript中setTimeout() 2011年0 ... -
键盘事件
2012-01-11 01:59 458键盘事件 2011年08月01日 键盘事件的种类: ... -
案例学习Oracle错误:ORA-00604 | 主流数据库的比较
2012-01-11 01:59 629案例学习Oracle错误:ORA-00604 | 主流数据库的 ... -
java 1.5 annotation-3 设值让反射拿
2012-01-11 01:59 532java 1.5 annotation-3 设值让反射拿 2 ...
相关推荐
通过实验验证Linux下进程的地址空间分布情况
32位系统的每个进程的地址空间都是0-4G,那相同的进程地址空间是怎么映射到不同的?请看这里
2. Linux进程地址空间 3. Linux内核地址空间 4. Linux内核链表 5. Linux内核定时器 第三天 1. Linux进程控制 2. Linux进程调度 3. Linux系统调用 4. Proc文件系统 5. Linux内核异常分析 第四天 1. 嵌入式Linux产品...
深入理解linux内核(3)第9章.进程地址空间 仅供学习参考,喜欢请购买正版图书
Linux下C程序进程地址空间布局描述,可以查看下。
深入理解linux内核,中文第三版,可随便复制粘贴,包含所有20章的内容
对于每一个进程,系统会为它分配一个单独的进程空间,不同的进程有不同的进 程空间,相互之间没有什么关系,在这种系统中,不能用全局变量等一般的手段 来实现不同进程间的数据交换,所以必须提供特有的数据交换...
LINUX进程的地址空间研究.pdf
Linux的进程地址空间研究.pdf
进程地址空间.rar 致读者:深入理解LINUX内核第三版pdf版本扫描出来的,内容比较大,所以必须分章节才能上传。我上传比你下载要更长时间,请大家谅解和支持,但是本文可以确保是第三版内容,希望大家下载后好好学习...
详细的描述linux系统调用fork、vfork、clone在内核中的实现,既有详细文字描述又有全部的源码加注释,有助于深入理解linux进程地址空间
深入理解Linux内核第9章,进程地址空间,这个是涵盖2.6版的高清晰影印版
linux进程的一切知识.zip 进程占用的内存空间布局,虚拟空间地址分布 进程启动的3种方式 监控子进程的状态 进程的终止 僵尸进程
Linux内核源代码导读-陈香兰-中国科学技术大学-进程地址空间
Linux中进程创建和内存空间申请: 除进程0外,所有进程都是由一个已有进程在用户态下完成创建的。 进程0创建进程1前,要将进程0由内核态转变为用户态,方法是调用move_to_user_mode函数 硬件对5个push压栈的数据分别...
主要介绍了Linux内核私闯进程地址空间并修改进程内存的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
俺花了N个大洋买来的,现在免费提供给大家
Linux操作系统课程指导:Ch15ProcessAddressSpace(进程地址空间).pptx
Linux操作系统课程指导:Ch15 Process Address Space (进程地址空间).ppt
IPC(InterProcess Communication)... 共享空间 套接口 前五种IPC只能用于一台主机内的进程间通信,套接口既可以用于一台主机内的进程间通信,也可以用于多台主机间的进程间通信。关于套接口将在网络编程中介绍。