本文是个人分析《Linux内核设计与实现》而写的总结,欢迎转载,请注明出处:

http://blog.csdn.net/dlutbrucezhang/article/details/13621133

      第七章--进程地址空间
      内核运行在内核地址空间中,相应的,用户程序需要运行,肯定也需要地址空间,这其实是属于资源的。进程运行在自己的地址空间中,进程描述符中有指向这一地址的指针。线程没有自己独立的地址空间,所以,它和进程共享地址空间,也就是说线程的地址空间字段也是指向它所在进程的地址空间。

      1.地址空间
      内存区域也称为虚拟内存区域,它包含多个不同的内存对象。
      代码段:可执行文件的内存映射
      数据段:可执行文件已初始化的全局变量的内存映射
      bss 段:可执行文件未初始化的全局变量的内存映射
      进程的用户空间栈的零页内存映射
      共享库的代码段,数据段和bss段也会包含在进程的地址空间中
      。。。。。。

      2.内存描述符
      为了更好的理解进程的地址空间,首先贴出它的数据结构,之后再简单的介绍其中的字段。
struct mm_struct
{
struct vm_area_struct *mmap; //list of VMA
rb_root_t mm_rb; //指向vma段红黑树的指针
struct vm_area_struct *mmap_cache; //last find_vma result 存储上一次查询的操作的结果
pgd_t *pgd; //进程页目录的起始地址
atomic_t mm_users; //how many users with user space
atomic_t mm_count; //how many reference to "struct mm_struct"
int map_count; //Number of VMA
struct rw_semaphore mmap_sem; //对mmap操作的互赤信号量
spinlock_t page_table_lock; //Protects task page tables and mm->rss
struct list_head mmlist; //list of all active mm's. These are globally together off init_mm.mmlist,and are protected by mmlist_lock
unsigned long start_code,end_code,start_data,end_data;
unsigned long start_brk,brk,start_stack;
unsigned long arg_start,arg_end,env_start,env_end;
unsigned long rss,total_vm,locked_vm; //rss进程内容驻留在物理内存的页面地址
unsigned long def_flags;
unsigned long cpu_vm_mask;
unsigned long swap_address; //页面换出过程用到交换空间地址 unsigned dumpable:1;
//Architecture-specific MM context
mm_context_t context; //存放着当前进程使用的段起始地址
};

从中我们可以看出,进程中确实包含了代码段,数据段,bss端,栈等内存区域。对于每一个内存区域,都有着一致的属性描述,例如,映射的物理内存,权限(可读,可写,可执行)等。


      3.mm_struct 和内核线程
      由于内核线程不会访问用户的地址空间,所以,它并不存在地址空间,但是这个字段又不能为空,所以,为了效率,Linux的设计方案是一旦内核线程执行,那么它就用前一个执行进程的地址空间字段,这当然包含了进程的页表,内核线程虽然不会访问用户地址空间,但是仍然需要与内核交互。
      

Linux内核探讨-- 第七章的更多相关文章

  1. Linux内核分析——第七章 链接

    第七章——链接 1.链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载到存储器并执行. 2.链接可以执行于编译时,加载时,运行时. 7.1编译器驱动程序 1.大多数编译系 ...

  2. 深入理解Linux内核-第七章 进程调度

    原文:http://blog.csdn.net/sailor_8318/article/details/2460177

  3. Linux内核设计第七周 ——可执行程序的装载

    Linux内核设计第七周 ——可执行程序的装载 第一部分 知识点总结 一.预处理.编译.链接和目标文件的格式 1.可执行程序是怎么得来的 编译链接的过程 预处理阶段 gcc -E -o XX.cpp ...

  4. LINUX内核分析第七周学习总结:可执行程序的装载

    LINUX内核分析第七周学习总结:可执行程序的装载 韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...

  5. Linux内核分析(七)----并发与竞态

    原文:Linux内核分析(七)----并发与竞态 Linux内核分析(七) 这两天家里的事好多,我们今天继续接着上一次的内容学习,上次我们完善了字符设备控制方法,并深入分析了系统调用的实质,今天我们主 ...

  6. 十天学Linux内核之第七天---电源开和关时都发生了什么

    原文:十天学Linux内核之第七天---电源开和关时都发生了什么 说实话感觉自己快写不下去了,其一是有些勉强跟不上来,其二是感觉自己越写越差,刚开始可能是新鲜感以及很多读者的鼓励,现在就是想快点完成自 ...

  7. Linux内核分析第四章 读书笔记

    Linux内核分析第四章 读书笔记 第一部分--进程调度 进程调度:操作系统规定下的进程选取模式 面临问题:多任务选择问题 多任务操作系统就是能同时并发地交互执行多个进程的操作系统,在单处理器机器上这 ...

  8. Linux内核分析 第七周 可执行程序的装载

    张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核分析 第七 ...

  9. LINUX内核分析第七周学习总结

    LINUX内核分析第七周学习总结 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.c ...

随机推荐

  1. 【C++】非原创|统计代码覆盖率(一:C++)

    也是转别人的,因为我c++好菜好菜啊... http://blog.chinaunix.net/uid-23741326-id-3316943.html c++跟C基本是一样的,统计覆盖率,需要生成g ...

  2. Android 者开发如何选择测试机列表

    Android 系统已经分化成多种不同的定制版本,制造厂商的不同手机使用的硬件千差万别.差异化带来良好的用户体验的同时,也给开发者带来的适配的问题.于是每个开发团队都需要面临选择测试机列表的问题.我基 ...

  3. Web开发中设置快捷键来增强用户体验

    从事对日外包一年多以来,发现日本的无论是WinForm项目还是Web项目都注重快捷键的使用,日本人操作的时候都喜欢用键盘而不是用鼠标去点,用他们的话来说"键盘永远比鼠标来的快",所 ...

  4. 免费CDN

    什么是CDN? CDN (Content Delivery Network) ,CDN 是包含可分享代码库的服务器网络. CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用.与将 ...

  5. [cocos2d-js]chipmunk例子(二)

    ; ; ; ; <<; var NOT_GRABABLE_MASK = ~GRABABLE_MASK_BIT; var MainLayer = cc.Layer.extend({ _bal ...

  6. 前端复习-01-dom操作包括ie和现代浏览器处理相关

    一.事件流事件流描述的是从页面中接受事件的顺序.IE的事件流是事件冒泡流,而Netscape的事件流是事件捕获流1.事件冒泡事件冒泡,即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点)接收,然 ...

  7. 3.VS2010C++相关文件说明

    stdafx.h说明:stdafx的英文全称为:Standard Application Framework Extensions(标准应用程序框架的扩展).所谓头文件预编译,就是把一个工程(Proj ...

  8. C++11散列表

    [C++11散列表] 散列表对应于C++03中的hash_xxx,分为set和map两种 上述的类型将满足对一个容器类型的要求,同时也提供访问其中元素的成员函数: insert, erase, beg ...

  9. POJ 1556 The Doors(线段交+最短路)

    The Doors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5210   Accepted: 2124 Descrip ...

  10. windows服务安装及卸载

    1)安装脚本Install.bat%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe JobSchedule.exeNet ...