`
helloyesyes
  • 浏览: 1295325 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Linux进程地址空间

阅读更多

哈尔滨理工大学软件工程专业08-7李万鹏原创作品,转载请标明出处

http://blog.csdn.net/woshixingaaa/archive/2011/04/15/6326472.aspx

内核使用内存描述符结构体表示进程的地址空间,该结构体包含了和进程地址空间有关的全部信息。内存描述符由mm_struct结构体表示,定义在文件<linux/sched.h>中。进程地址空间由每个进程的线性地址区(vm_area_struct)组成。通过内核,进程可以给自己的地址空间动态的添加或减少线性区域。如下图是内存描述符mm_struct和线性区域描述符vm_area_struct的关系:

mm_users域记录正在使用该地址的进程数目。比如,如果两个进程共享该地址空间,那么mm_users的值便等于2;mm_count域是mm_struct的结构体的主引用计数,只要mm_users不为0,那么mm_count值就等于1.当mm_users值减为0(两个线程都退出)时,mm_count域的值才变为0。如果mm_count的值等于0,说明已经没有任何指向该mm_struct结构体的引用了,这时该结构体会被销毁。mmap和mm_rb这两个不同的数据结构描述的对象是相同的:该地址空间中的全部内存区域。mmap结构体最为链表,利于简单,高效地遍历所有元素;而mm_rb结构体作为红-黑树,更适合搜索指定元素。所有的mm_struct结构体通过自身的mmlist域连接在一个双向链表中,该链表的首元素是init_mm内存描述符,它代表0号进程的地址空间。在进程的进程描述符中,mm域存放着该进程使用的内存描述符。copy_process函数利用copy_mm函数复制父进程的内存描述符。像vfork和clone系统调用指定的CLONE_VM标志的,仅仅需要在调用copy_mm()函数中将mm域指向其父进程的内存描述符就可以了:

而fork系统调用产生的子进程中的mm_struct结构体实际是通过文件kernel/fork.c中的alloc_mm()宏从mm_cachep slab缓存中分配得到的。通常,每个进程都有一个唯一的mm_struct结构体,即唯一的进程地址空间。是否共享地址空间,几乎是进程和Linux中所谓线程间本质上的唯一区别。

vm_start域指向线性区域的首地址,vm_end域指向尾地址之后的第一个字节,也就是说,vm_start是线性区域的开始地址,vm_end是线性区域的结束地址。vm_mm域指向和VMA相关的mm_struct结构体,注意每个VMA对其相关的mm_struct结构体来说都是唯一的,所以即使两个独立的进程将同一个文件映射到各自的地址空间,他们分别都会有一个vm_area_struct结构体来标志自己的内存区域;但是如果两个线程共享一个地址空间,那么他们也同时共享其中的所有vm_area_struct结构体。

查看init进程的地址空间效果如下:

分享到:
评论

相关推荐

    Linux进程地址空间分析

    下面我们将详细探讨Linux进程地址空间的构成和分析方法。 首先,Linux进程的地址空间被划分为几个主要区域,包括: 1. **文本段(Text Segment)**:存储程序的机器代码和只读数据,如常量。这部分内存通常被映射...

    linux 进程地址空间的创建过程-详解

    在Linux操作系统中,进程的地址空间分配以及创建过程是计算机科学中的一个核心话题,特别是在内存管理的范畴内。首先,需要明确的是32位系统中每个进程理论上拥有一个从0到4GB的地址空间。在这4GB的地址空间中,0到3...

    Linux的进程地址空间研究.pdf

    Linux操作系统中的进程地址空间是其内存管理的核心组成部分。...内存分配策略、页表结构以及线性地址到物理地址的映射机制,构成了Linux进程地址空间管理的基础,对于理解和优化Linux系统性能至关重要。

    linux进程编程ppt

    总结来说,Linux进程编程是系统级编程的基础,理解和掌握进程的生命周期、状态转换、地址空间以及控制机制对于开发高效、稳定的系统级应用程序至关重要。通过学习和实践,开发者可以更好地利用Linux系统资源,构建...

    深入理解linux内核(3)第9章.进程地址空间

    进程地址空间"这一章节,将带你深入探讨Linux内核如何组织和管理进程的虚拟地址空间,这是理解Linux系统性能和调试关键问题的基础。 首先,我们需要了解的是,每个进程都有其独立的地址空间,这是进程隔离的一个...

    linux-进程和线程

    - **Linux进程地址空间布局**:进程的地址空间通常分为多个区域,包括文本(代码)区、数据区、堆区和栈区。每个进程都有自己独立的地址空间,互不影响。 - **进程特征**:包括独立的内存空间、拥有资源、并发执行...

    国嵌嵌入式(Linux)开发培训课件 内核开发与系统移植

    2. Linux进程地址空间 3. Linux内核地址空间 4. Linux内核链表 5. Linux内核定时器 第三天 1. Linux进程控制 2. Linux进程调度 3. Linux系统调用 4. Proc文件系统 5. Linux内核异常分析 第四天 1. 嵌入式Linux产品...

    LINUX进程的地址空间研究.pdf

    这篇文章主要探讨了Linux进程的虚拟地址空间的组织和管理,包括页表结构、内存分配策略以及线性地址与物理地址之间的映射。 在80x86架构中,Linux 2.6采用了分页和分段相结合的方式来管理内存。对于32位系统,常规...

    Linux进程间通讯视频教程

    本教程通过6个视频,深入浅出地讲解了Linux进程间通信的关键概念和技术。 首先,我们来了解一下什么是进程间通信。在Linux系统中,进程是程序的一次执行实例,每个进程都有自己的独立内存空间,因此它们之间的数据...

    Unix/linux进程池管理

    在Unix/Linux系统中,...综上所述,Unix/Linux进程池管理涉及多方面的技术,包括进程创建、任务调度、进程间通信、资源管理和错误处理。理解并掌握这些知识点对于开发高效、稳定的银行系统或其他服务型应用至关重要。

    Linux进程基本管理与进程控制

    在 Linux 环境下,进程是操作系统中一个基本的执行单元,每个进程都有其自己的虚拟地址空间、打开的文件描述符、信号处理函数和优先级等资源。因此,了解进程的基本操作和管理是非常必要的。 首先,需要认识进程与...

    linux进程间通信与同步.pdf

    ### Linux进程间通信与同步详解 #### 一、概述 在多任务操作系统中,进程间通信与同步机制是解决进程间数据交换与资源共享的关键技术。这些机制确保了多个并发运行的任务能够有效地协作,并且避免了资源冲突。对于...

    linux进程编程介绍

    对于开发者而言,深入理解Linux进程编程是提升技术水平的重要一环。本文将详细探讨Linux进程编程的基础知识,包括进程的概念、创建与管理进程、进程间通信以及线程的使用。 首先,我们需要了解什么是进程。在操作...

    LINUX进程管理实验

    在LINUX系统中,每个进程都拥有自己的独立地址空间,可以与其他进程并发执行。 #### 二、并发执行的本质 并发执行是现代操作系统中的一项关键特性,它允许多个进程或线程同时存在并交替执行,即使在单处理器环境下...

    Linux的进程管理.doc

    进程空间和系统空间是 Linux 进程管理中的重要概念。系统为每个进程分配一个独立的虚拟地址空间(虚拟内存)。进程的虚拟地址空间被分做两个部分,用户空间和系统空间。用户进程本身的程序和数据(可执行映象)映射...

    Linux内核私闯进程地址空间并修改进程内存的方法

    在Linux系统中,每个进程都拥有自己的独立地址空间,这是现代操作系统为了确保数据安全和系统稳定性而采取的重要机制。进程地址空间的隔离意味着一个进程不能直接访问另一个进程的内存,除非内存是通过共享映射等...

    操作系统课程实践之Linux进程创建.doc

    Linux进程可以通过系统调用fork()和clone()创建,fork()创建的进程与父进程共享虚拟地址空间,而clone()创建的进程则拥有独立的虚拟地址空间。 二、fork()系统调用 fork()系统调用是Linux操作系统中创建新进程的...

    linux进程源代码分析

    - **虚拟内存信息**:进程使用的虚拟地址空间。 - **处理机相关信息**:如CPU亲和性设置。 ##### 2.2 其他相关数据结构 除了`task_struct`之外,Linux还使用了其他一些数据结构来辅助进程管理: - **task数组**:...

Global site tag (gtag.js) - Google Analytics