
linux进程地址空间
文章平均质量分 79
bullbat
爱好程序设计,对待问题喜欢追根溯源。
展开
-
linux内核分析之进程地址空间
本文主要介绍linux内核中进程地址空间的数据结构描述,包括mm_struct/vm_area_struct。进程线性地址区间的分配流程,并对相应的源代码做了注释。 内核中的函数以相当直接了当的方式获得动态内存。当给用户态进程分配内存时,情况完全不同了。进程对动态内存的请求被认为是不紧迫的,一般来说,内核总是尽量推迟给用户态进程分配内存。由于用户进程时不可信任的,因此,内核必须能随时准备捕获用原创 2011-12-27 15:36:32 · 3314 阅读 · 0 评论 -
linux内核分析之缺页中断
linux缺页异常程序必须能够区分由编程引起的异常以及由引用属于进程地址空间但还尚未分配物理页框的页所引起的异常。在x86-ia32体系上由do_page_fault函数处理,每个版本有所差异,现分析的版本为2.6.32 /* regs:该结构包含当异常发生时的微处理器寄存器的值 3位的error_code,当异常发生时由控制单元压入栈中 -如果第0位被清0,则异常由访问一个不存在原创 2011-12-28 11:39:54 · 8744 阅读 · 0 评论 -
linux内核分析之缺页中断(二)
对于缺页中断的非法访问由函数bad_area执行,该函数的执行情况分为:1,如果在用户空间访问,直接发送SEGSEGV信号;2,如果在内核空间访问分为两种情况:1)地址是一个错误的系统调用参数,修正码(典型是发送SIGSEGV信号);2)反之,杀死进程并显示内核的OOPS信息;static void__bad_area_nosemaphore(struct pt_regs原创 2011-12-28 13:59:12 · 3598 阅读 · 0 评论 -
对一个程序在内存中的分析
bullbat 译 内存管理是操作系统的核心;它对于程序员和系统管理员都很关键。在接下来的几篇文章里面我将对内存的关键技术做谈论,但是不会远离其本质。然而概念很普通,例子多半来自32位X86系统的LINUX和Window操作系统。这第一篇文章谈论程序在内存中如何存放。 在多任务操作系统中的每一个进程运行在他自己的内存地址空间中。这个地址空间就是虚拟地翻译 2012-02-29 08:23:13 · 7481 阅读 · 5 评论 -
内核怎样管理你的内存
bullbat 译 在分析了进程的虚拟地址布局,我们转向内核以及他管理用户内存的机制。下图是gonzo的例子: Linux进程在内核中是由task_struct进程描述符实现的,task_struct的mm字段指向内存描述符mm_struct,他是进程的一个内存执行摘要。如上图所示,mm_struct存储了内存各个段的开始和结束地址、进程所使用的内存页面数(翻译 2012-03-02 13:48:00 · 3875 阅读 · 1 评论 -
进程虚拟地址空间之数据分区存放
作者:bullbat 在前面的《对一个程序在内存中的分析 》中很好的描述了程序在内存中的布局,这里对这个结果做些总结和实验验证。下面以Linux为例(实验结果显示windows上的结果也一样)。 我们还是利用前面看到过的这个图,如下图:32位X86机器的内存布局图,内存主要分为栈、堆、BSS段、数据段、代码段5个段。 代码段:代原创 2012-03-04 17:05:33 · 4234 阅读 · 1 评论