《Linux内核设计与实现》的地址空间读书笔记的过程
1.核心区域进程包括各种内存对象
种内存对象,比方:
1.可运行文件代码能够包括各种内存映射,称为代码段(text section)。
2.可运行文件的已初始化全局变量的内存映射,称为数据段(data section)。
3.包括未初始化全局变量,也就是bss段的零页(页面中的信息所有为0值,所以能够用于映射bss段等目的)的内存映射。
4.用于进程用户空间栈的内存映射。
5.每个诸如c库或动态链接程序等共享库的代码段、数据段和bss段也会被加载进程的地址空间。
6.不论什么内存映射文件。
7.不论什么共享内存段
8.不论什么匿名的内存映射。比方由malloc()分配的内存。
2.内存描写叙述符
内核使用内存描写叙述符结构体表示进程的地址空间。该结构体包括了和进程地址空间有关的所有信息。内存描写叙述符由mm_struct结构体表示。它的定义为:
mm_user域记录正在使用该地址的进程数目。mmap和mm_rb这两个不同数据结构体描写叙述的对象是同样的:该地址空间中的所有内存区域。可是前者以链表的方式存放而后者以红黑树的结构存放。内核一般会避免使用两种数据结构组织同一种数据,但此时内核这种冗余全然派的上用场。
mmap作为链表,利于简单、高效地遍历所有元素;而mm_rb则更合适搜索指定的元素。
全部的mm_struct结构体都通过自身的mmlist域链接在一个双向链表中,该链表的首元素是init_mm内存描写叙述符,它代表init进程的地址空间,在操作该链表的时候须要使用mmlist_lock锁来防止并发訪问。
3.内存区域
内存区域由vm_area_struct结构体描写叙述,它的定义例如以下:
每一个内存描写叙述符都相应于进程地址空间中的唯一区间。vm_start域指向区间的首地址。vm_end域指向区间的尾地址。
须要注意的是,在同一个地址空间内的不同内存区间不能重叠。
vm_mm域指向和VMA相关的mm_struct结构体,注意每一个VMA对其相关的mm_struct结构体来说都是唯一的,所以即使两个独立的进程将同一个文件映射到各自的地址空间,它们分别都会有一个vm_area_struct结构体来标志自己的内存区域;可是假设两个线程共享同一个地址空间。那么它们也同一时候共享当中的全部vm_area_struct结构体。
4.VMA标志
VMA标志是一种位标志,它包括在vm_flags域内,标志了内存区域所包括的页面的行为和信息。当訪问VMA时。须要查看其訪问权限。
VMA的可选标志例如以下所看到的:
5.实际举例
我们用一个很easy的用户控件程序的样例,它事实上什么也不做。不过为了做说明用:
int main(int argc,char * argv[])
{
return 0;
}
以下列出该进程地址空间中包括的内存区域。
当中有代码段、数据段、和bss段等。该进程与C库动态链接,那么地址空间中还将分别包括libc.so和ld.so相应的上述三种内存区域。此外。地址空间中还要包括进程栈相应的内存区域。
前三行分别相应C库中libc.so的代码段、数据段、和bss段,接下来三行是动态链接程序ld.so的代码段、数据段、和bss段,最后一行是进程的栈。
该进程的所有地址空间大约1340KB,可是唯独约40KB的内存区域是可写和私有的。假设一片内存范围是共享的或不可写的,那么内核只须要在内存为文件保留一份映射多以C库在无力内存中只须要占用1212KB的空间,而不须要为每一个使用C库的进程在内存中都保存一个1212KB的空间。进程訪问了1340KB的数据和代码空间,然而只消耗了40KB的物理内存。能够看出利用这样的共享不可写内存的方法节约了大量的内存。
注意没有映射文件的内存区域的设备标志位00:00,索引节点标志也为0。这个区域就是零页。
假设将零页映射到可写的内存区域。那么该区域将被初始化为全0。这是零页的一个重要的用处。而bss段须要的就是全0的内存区域。因为内存未被共享,所以仅仅要一有进程写该数据,那么该数据就将被拷贝出来(就是我们说的写时拷贝),然后才被更新。
6.动态链接的过程举例(參考《CSAPP》)
动态链接的步骤例如以下所看到的:
在创建可运行文件p2时,没有不论什么libvector.so的代码和数据节真的被复制到可运行文件p2中。链接器仅仅拷贝了一些重定位和符号表信息,它们使得运行时能够解析对libvector.so中代码和数据的引用。
当载入器载入和运行可运行文件时,它注意到可运行文件有一个.interp节,这个节包括动态链接器的路径名。动态链接器本身就是一个共享目标,载入器不再像它通常那样将控制传递给可运行程序,而是载入和运行这个动态链接器。
然后,动态链接器通过运行以下的重定位完毕链接任务:
·重定位libc.so的文本和数据到某个存储器段。
·重定位libvector.so的文本和数据到还有一个存储器段。
·重定位p2中全部由libc.so和libvector.so定义的符号引用。
最后,动态连接器将被转移到整个应用程序的控制。
《Linux内核设计与实现》的地址空间读书笔记的过程的更多相关文章
- 《Linux内核设计与实现》 Chapter4 读书笔记
<Linux内核设计与实现> Chapter4 读书笔记 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子 ...
- Linux内核设计与实现第四周读书笔记
第5章系统调用 5.1与内核通信 主要作用: 为用户控件提供了一种硬件的抽象接口. 保证了系统稳定性与安全性. 为用户空间&系统提供公共接口. 5.2API.POSIX和C库 一般情况,应用程 ...
- 《Linux内核分析》第六周 读书笔记
<Linux内核设计与实现>CHAPTER3阅读梳理 [学习时间:3hours] [学习内容:进程的描述:进程的生命周期(包括创建.终结)] 一.进程(任务)描述 1.进程是处于执行期的程 ...
- linux内核分析 1、2章读书笔记
一.linux历史 20世纪60年代,MIT开发分时操作系统(Compatible TIme-Sharing System),支持30台终端访问主机: 1965年,Bell实验室.MIT.GE(通用电 ...
- 《Linux内核分析》第七周 读书笔记
<深入理解计算机系统>CHAPTER7阅读梳理 [学习时间:3hours] [学习内容:链接需要的代码&数据:链接机制:链接生成的目标文件] 一.链接概述 1.链接 定义:链接是将 ...
- 《Linux内核设计》第17章学习笔记
- 《linux内核》课本第五章读书笔记
- 《Linux内核设计与实现》课本第一章&第二章学习笔记
<Linux内核设计与实现>课本学习笔记 By20135203齐岳 一.Linux内核简介 Unix内核的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件 ...
- 《Linux内核设计与实现》读书笔记 - 目录 (完结)
读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!). 为了方便以后查看, 做个<Linux内核设计与实现>读书笔记 的目录: < ...
随机推荐
- JS跑马灯
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEA ...
- 传智播客成都java培训中心秀就业
传智播客成都java培训中心秀就业 2013年被称为"史上最难就业季",成都传智播客学员如何应对的呢? 成都传智播客的学员在工作经验上颇占优势,我们采用项目驱动式教学模式,具有多年开发实战经验及教学经 ...
- Delphi “Invalid floating point operation.”错误的解决方法(使用System单元提供的Set8087CW函数禁用浮点异常)
这两天用webbrower写东西,有时候打开SSL加密网站时会出现”Invalid floating point operation.”的错误,上网搜了下,把解决方法贴上. 导致原因 在Delphi2 ...
- [C++]引用浅析
Date:2013-12-22 Summary: 引用数据类型的一些概念记录(沟通中提到引用必须结合语境才能知道说的是引用变量还是“引用”这一行为,再次提到引用指的一般是引用变量) Contents: ...
- ios应用接入微信开放平台
前几天试了一下服务端接入微信公众平台,昨天又看了一下APP接入开放平台 开放平台和公众平台的差别 公众平台针对的是公众账号,除了提供管理后台之外.也开放了若干接口,让微信server和开发人员自己的应 ...
- vim经常使用命令总结
vim 选择文本,删除,复制,粘贴 文本的选择,对于编辑器来说,是非常主要的东西,也常常被用到,总结例如以下: v 从光标当前位置開始,光标所经过的地方会被选中,再按一下v结束. V ...
- 使用VS插件在VS2012/2013上编辑和调试Quick-Cocos2d-x的Lua代码
vs 也能够做lua 开发,并进行代码调试 依照以下文档,调试没问题. 參考文档: 点击打开链接
- 使用Swing实现简易而不简单的文档编辑器
本文通过Swing来实现文档简易而不简单的文档编辑器,该文档编辑器的功能包括: 设置字体样式:粗体,斜体,下划线,可扩展 设置字体:宋体,黑体,可扩展 设置字号:12,14,18,20,30,40, ...
- Amazon.com : The Odyssey of the Manual Toothbrusher
Amazon.com : The Odyssey of the Manual Toothbrusher The Odyssey of the Manual Toothbrusher
- 你的App为什么上不了TOP10?
App市场风起云涌.但是,却仅仅有少数几个App能成为"暴发户",很多其它的则沉淀在应用商店中无人问津. 在移动互联网时代.智能手机成为了中心. 手机之所以智能.就在于手机上 ...