- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
系统对进程的虚拟内存管理:mm{},vm_area_struct{}
系统对物理内存管理:page{}
每个进程都可用4G的虚拟地址空间 0~4G,
每个进程的页表不同(page table : 内存映射。 Memory mapping)
几种内存地址:
??????????????????????????? 物理地址(PA),
虚拟地址:? 内核空间: 3~4G共1G, 内核虚拟地址(其中包括896M的内核逻辑地址)
又划分为两部 分:实际的物理地址直接映射到内核空间,
当实际物理内存896M时,此时要做映射,通过建立页表, 只有前896M存 在这种映射关系
当实际物理内存896M时,PA全部映射到内核空间,此时内核VA – 3G = 对应的物理PA,反之亦然。此部分地址称为内核逻辑地址区域kernel logical address
?????? 用户空间:? 0~3G ,页表映射
?
?? 高端内存: 896M的内存空间
?? 以上4G虚拟地址空间分配见本子Figure-1。重点掌握kernel logical address
见课件
涉及到的内核结构体:
????? task-struct { mm_struct *mm ;}
?????? ? mm_struct *mm {pgd_t pgd;}
???? ?vm_area_struct? * mmap{ }?? /* emphasis Linux内核中对应进程内存区域的数据结构,一个进程有多个内存区域, 所以有多个vma*/
cat /proc/pid/map
内存映射 的两层含义:1. 把VA 映射到对应的 PA上(对VA的操作即对PA的操作)
??????????????????? 2. 把一个文件的地址空间(文件打开后有缓存,即文件 打开后存在于内存上,占用一定内存空间)映射到进程,让进程可以通过访问内存从而访问文件。
?
内存映射的基本单位都是VMA,如struct file_operations{
?????????????????????????????????? ???????????????????? int (*mmap) (struct file *,? struct vm_area_struct *);
}
?
Linux内存管理中,4G的进程地址空间, 0-3G为用户空间,3-4G为内核空间,内核空间中小于896M的虚拟内存可以通过offset容易的映射到物理内存,大于896M的部分通过页表映射到物理内存,假 如只有800M内 存,会被内核空间完全映射,那用户空间的虚拟地址映射到物理内存哪里?
是不是内核空间虽然能够完全映射到物理内存,但是因为不会全部使用物理内存,所以当用户空间需要内 存映射时,会从物理内存中空闲的部分进行映射?如果是这样,对于物理内存而言,同时存在着内核空间的映射和当前进程的用户空间的映射
?
Problems:
文件打开后被调入内存,称之为缓存
下载一个新的内核
?
叶框与页区别
页的状态
page cache, buffer cache
file inode
char tr = malloc(0);
把各个函数都用一下,把每个函数的返回值打印出来,看在哪个空间内。
?
8.1进程与内存
8.1.1进程如何使 用内存(进程的内存映像)
?????? 毫无疑问所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码, 或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的。
?????? 对任何一个普通进程来讲,它都会涉及到5种不同的数据段。稍有编程知识的朋友都该能想到这几个数据段种包含有“程序代码段”、“程序数据 段”、“程序堆栈段”等。不错,这几种数据段都在其中,但除了以上几种数据段之外,进程还另外包含两种数据段。下面我们来简单归纳一下进程对应的内存空间 中所包含的5种不 同的数据区(由vm_area_struct描述各个段)。
?
代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存种的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作, 而不允许写入(修改)操作——它是只读不可写的。
?
数据段:数据段用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静态分配的变量和全局变量。可读可写
?
BSS段[2]:BSS段包含了程序中未初始化全局变量,在内存中 bss段 全部置零。
?
堆(heap):堆是用于存放进程运行中被动态分配的内存段,它大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张
您可能关注的文档
- 魅族M9、MX远程控制使用教程.doc
- 魅族手机系统介绍.doc
- 门禁监控系统_嵌入式.doc
- 门禁系统简介.doc
- 门禁系统希望有帮助.doc
- 孟庆昌Linux复习提纲.doc
- 米茄手机社区,安卓4.0 索尼SGPT111刷机教程.doc
- 免费Linux、嵌入式、Oracle教学视频连接(网站).doc
- 免费PHP主机byethost使用教程详解.doc
- 免费下载苹果iphone、ipad、app程序游戏应用.doc
- 陕科大附中初三化学二模考试初中学业模拟试卷物理与.pdf
- 教程8805-0235pginas ib文凭计划级1portuguese paper 1 sl.pdf
- airbus call vol 1 umentation空中客车通话卷.pdf
- 输入客户信用备忘录更改历史记录此时根据下表fiar.pdf
- 学员学习别克14凯越.pdf
- 高考调研届高三物理一轮复习课件七章-恒定电流.pdf
- 古代汉语考研复习笔记.pdf
- 亚太地区转型maggie tan transformation in asia.pdf
- 济学下国际贸易部分克鲁格曼课后答案英文国贸mkrugim c17.pdf
- 英语作为二语言播客english cafe guide.pdf
文档评论(0)