![Linux操作系统分析9-1_第1页](http://file4.renrendoc.com/view/ab40cb0974529c59f7c9c7c46e835f97/ab40cb0974529c59f7c9c7c46e835f971.gif)
![Linux操作系统分析9-1_第2页](http://file4.renrendoc.com/view/ab40cb0974529c59f7c9c7c46e835f97/ab40cb0974529c59f7c9c7c46e835f972.gif)
![Linux操作系统分析9-1_第3页](http://file4.renrendoc.com/view/ab40cb0974529c59f7c9c7c46e835f97/ab40cb0974529c59f7c9c7c46e835f973.gif)
![Linux操作系统分析9-1_第4页](http://file4.renrendoc.com/view/ab40cb0974529c59f7c9c7c46e835f97/ab40cb0974529c59f7c9c7c46e835f974.gif)
![Linux操作系统分析9-1_第5页](http://file4.renrendoc.com/view/ab40cb0974529c59f7c9c7c46e835f97/ab40cb0974529c59f7c9c7c46e835f975.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux操作系统分析中国科学技术大学计算机系陈香兰(0512-87161312)xlanchen@助教:裴建国、冯晓静Autumn2008进程地址空间中国科学技术大学计算机系陈香兰(0512-87161312)xlanchen@助教:裴建国、冯晓静Autumn2008内核态和用户态分配内存的不同内核中的函数以直接了当的方式获得动态内存内核是操作系统中优先级最高的成分。内核信任自己采用我们上次课介绍的页面级内存分配和小内存分配线性空间(3GB~4GB)线性空间(<3GB)物理内存:highmem物理内存:DMA物理内存:Normal2/4/20233LinuxOSanalysis内核态和用户态分配内存的不同给用户态进程分配内存时请求被认为是不紧迫的用户进程不可信任因此,当用户态进程请求动态内存时,并没有立即获得实际的物理页框,而仅仅获得对一个新的线性地址区间的使用权这个线性地址区间会成为进程地址空间的一部分,称作线性区(memoryareas)2/4/20234LinuxOSanalysis进程地址空间进程最多能访问4GB的线性地址空间但进程在访问某个线性空间之前,必须获得该线性空间的许可因此,一个进程的地址空间是由允许该进程访问的全部线性地址组成内核使用线性区资源来表示线性地址空间每个线性区由起始线性地址、长度和一些存取权限描述2/4/20235LinuxOSanalysis与进程地址空间相关的描述符2/4/20236LinuxOSanalysis线性区的开始和结束都必须4KB对齐进程获得新线性区的一些典型情况:刚刚创建的新进程使用exec系统调用装载一个新的程序运行将一个文件(或部分)映射到进程地址空间中当用户堆栈不够用的时候,扩展堆栈对应的线性区……2/4/20237LinuxOSanalysis线性区(memoryarea)比如0x08048000——0x0804C000这段线性地址空间被分配给了一个进程,进程就可以访问这段地址空间进程只能访问某个有效的memoryarea。进一步讲,这个area可以被标志为只读或者不可执行(nonexecutable)如果进程试图访问一个有效的area之外的地址或者用不正确的方式访问一个有效的area,内核将通过段异常(segmentationfault)杀死这个进程2/4/20238LinuxOSanalysis线性区中可以包含各种内容可执行文件代码段的内存映射,就是.textsection数据段的内存映射,.datasectionzeropage的内存映射用来包含未初始化的全局变量,.bsssection为库函数和链接器附加的代码、数据、bss段文件的内存映射共享内存的映射匿名内存区域的映射,比如通过malloc()函数申请的内存区域2/4/20239LinuxOSanalysis进程地址空间中所有有效的线性地址都确定的存在于一个area中memoryareas不重叠进程中每个单独的area对应一个不同内存区:堆栈、二进制代码、全局变量、文件映射等等task_struct中的内存描述符2/4/202310LinuxOSanalysis内核使用内存描述符来描述进程的整个地址空间(即进程的全部线性区)2/4/202311LinuxOSanalysis内存描述符内存描述符包含了跟进程地址空间相关的所有信息mm_users表示共享这个地址空间的进程数目比如两个轻量级进程共享了这个area,mm_users就等于2mmap和mm_rb是两个不同的数据结构,但是包含了相同的东西:进程地址空间中所有的memoryareas前者使用链表存储areas后者用红黑树存储areas所有的mm_struct结构通过mmlist域链接在一个双向链表上。这个链表的第一个元素是idle进程的mm_struct结构2/4/202312LinuxOSanalysis分配一个内存描述符copy_mm函数用来在fork()调用中从父进程拷贝内存描述符而mm_struct数据结构本身的空间是从mm_cachep指向的slab缓存中通过allocate_mm()宏分配得到的如果父进程在fork()创建子进程时,通过一些标志指明要和子进程共享地址空间。那么,只需要childtask->mm=parent->mm2/4/202313LinuxOSanalysis释放一个内存描述符在进程退出时,exit_mm()函数被调用首先做一些清除工作,更新一些内核全局统计数据接着调用mmput(),这个函数减内存描述符的mm_users域如果mm_users域变成了0,就调用mmdrop()函数来减mm_count域如果mm_count域变成了0,就由free_mm()宏调用kmem_cache_free()函数把mm_struct返还给mm_cachp指向slab缓存2/4/202314LinuxOSanalysis线性区(memoryareas)每个线性区由一个vm_area_struct结构来表示这个结构描述了一段给定的内存区间区间中的地址都有同样的属性,比如同样的存取权限和相关的操作函数用这个结构可以表示各种线性区,比如映射可执行的二进制代码的线形区、用作用户态堆栈的线形区等等2/4/202315LinuxOSanalysis2/4/202316LinuxOSanalysis线性区的存取权限vm_flags域描述有关这个线性区全部页的信息。例如,进程访问每个页的权限是什么。还有一些标志描述线性区自身,例如它应该如何增长VM_READ,VM_WRITE,VM_EXECVM_SHAREDVM_RESERVEDVM_GROWSUP2/4/202317LinuxOSanalysis线性区的链表和红黑树通过内存描述符中的两个域mmap和mm_rb都可以访问线性区。事实上,它们都指向了同一个vm_area_struct结构,只是链接的方式不同mmap指向的线性区链表用来遍历整个进程的地址空间红黑树用来定位一个给定的线性地址落在进程地址空间中的哪一个线性区中2/4/202318LinuxOSanalysis处理线性区内核进程需要对一个线性区进行处理,比如确定一个给定线性地址是否存在于一个线性地址空间中find_vma(),查找一个线性地址两个参数:进程内存描述符的地址mm和线性地址addr2/4/202319LinuxOSanalysis创建一个线性区间mmap()和do_mmap(),创建一个线性区根据file参数映射指定的文件中偏移量为offset,长度为len的一段内容addr参数指明从何处开始查找一段可用的空闲线性地址区间Prot参数指定这个区间所包含的页的存取权限flags参数指定这个创建的线性区本身的一些标志staticinlineunsignedlongdo_mmap(structfile*file, unsignedlongaddr, unsignedlonglen, unsignedlongprot, unsignedlongflag, unsignedlongoffset)
2/4/202320LinuxOSanalysis删除一个线性区间munmap()和do_munmap()do_munmap()函数从进程地址空间中删除一段线性空间mm参数指向了当前进程的内存描述符addr参数为线性区的起始地址len参数指明要删除的区间大小int
do_munmap
(struct
mm_struct*mm,unsignedlongaddr, size_t
len) 2/4/202321LinuxOSanalysis缺页异常(i386中14号异常)如前所述,内核只是通过mmap()等调用分配了一些线性地址空间给进程,并没有真正的把实际的物理页框分配给进程当进程试图访问这些分配给它的地址空间时,比如一段线性地址空间映射的是二进制代码,则进程被调度执行的时候会跳转到这个地址上去执行。此时,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 现代家居设计与生活品质的提升
- 现代办公环境中营销自动化策略的实施
- Unit2 An Accident(说课稿)-2024-2025学年北师大版(三起)英语六年级上册
- 3-1《百合花》(说课稿)高一语文同步高效课堂(统编版 必修上册)
- 2023二年级数学上册 七 分一分与除法第5课时 小熊开店说课稿 北师大版
- 3 天窗(说课稿)2023-2024学年部编版语文四年级下册
- 《8和9的加、减法的应用》(说课稿)-2024-2025学年一年级上册数学人教版
- Unit 1 Art Using language 2 说课稿 -2023-2024学年高中英语人教版(2019)选择性必修第三册
- Unit 5 Colours Lesson 1(说课稿)-2024-2025学年人教新起点版英语一年级上册
- 2023四年级数学上册 1 大数的认识第4课时 亿以内数的大小比较说课稿 新人教版
- 苏教版四年级数学下册第三单元第二课时《常见的数量关系》课件
- 2025年中考物理总复习《压强》专项测试卷含答案
- 《智能传感器技术》课件
- SaaS服务具体应用合同范本2024版版
- 山东省潍坊市2024-2025学年高三上学期1月期末 政治试题(含答案)
- 残疾人挂靠合作合同协议书范本
- 浙江省台州市2021-2022学年高一上学期期末质量评估政治试题 含解析
- 宁夏“8·19”较大爆燃事故调查报告
- 中国高血压防治指南(2024年修订版)解读课件
- 2024年员工规章制度具体内容范本(三篇)
- 2024年浙江省中考科学试卷
评论
0/150
提交评论