- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux的内存映射在讲解内存映射之前,不得不去探讨Linux内存管理方面的知识。需要说明的是,我们并不需要深入的理解Linux虚拟内存才能去实现Linux的内存映射,所以对于Linux内存管理方面的知识也仅限于最基础的概念。一、Linux的内存管理Linux的内存管理子系统是采用请求调页式的虚拟存储器技术实现的,有关虚拟存储器方面的知识可以参考《深入理解计算机系统》第二版的第9章内容,在这里就不做说明。??1、Linux进程的虚拟空间及其划分在32位硬件平台上,Linux的逻辑地址为32位,因此,每个进程的虚拟地址空间为4GB,在4GB的空间中,操作系统占用了高端的1GB,而低端的3GB则留给用户程序使用。如下图所示:1)?Linux内核虚拟存储器Linux中1GB的内核虚拟存储器空间又被划分为物理内存映射区、虚拟内存分配区、高端页面映射区、专用页面映射区和系统保留映射区这几个区域。? ?一般情况下,物理内存映射区最大长度为896MB,系统的物理内存被顺序映射到物理内存映射区中。当系统物理内存大于896MB时,超过系统物理内存的那部分内存称为高端内存(小于896MB的系统物理内存称为常规内存),内核在存取高端内存时必须将它们映射到高端内存映射区中。下图可以反映出Linux内核虚拟存储器与物理内存之间的映射关系。注意:物理内存中0~896MB区域通常由内核使用,当然内核不用时用户程序可以使用;896MB以上的区域通常由用户程序来使用。2)?Linux用户虚拟存储器Linux用户虚拟存储器总是通过页表访问内存,决不会直接访问。如下图所示:??2、进程空间的描述内核为系统中的每个进程维护一个单独的任务结构task_struct。任务结构中的元素包含或者指向内核运行该进程所需要的所有信息(例如,PID、指向用户栈的指针、可执行目标文件的名字以及程序计数器)。task_struct中的一个条目指向mm_struct,它描述进程使用的地址空间,我们感兴趣的两个字段是pgd和mmap,其中pgd指向第一级页表(页全局目录)的基址,而mmap指向一个vm_area_struct(区域结构)的链表,每个vm_area_struct结构描述的是进程的一个用户区。如下图所示:二、Linux的内存映射当可执行文件准备运行时,可执行文件的内容仅仅映射到了对应进程虚拟地址空间中,而并没有调入物理内存。当程序开始运行并使用到这部分时,Linux才通过缺页中断把它们从磁盘上调入内存。这种将文件连接到进程虚拟地址空间的过程称为内存映射。??1、vm_area_struct结构struct?vm_area_struct?{struct?mm_struct?*?vm_mm;?/*所处的地址空间*/unsigned?long?vm_start;?/*开始的虚拟地址*/unsigned?long?vm_end;?/*结束的虚拟地址*/pgprot_t?vm_page_prot;?/*访问权限*/unsigned?long?vm_flags;?/*标志,VM_IO和VM_RESERVED等*/????????//操作VMA的函数集struct?vm_operations_struct?*?vm_ops;unsigned?long?vm_pgoff;?/*偏移(页帧号)*/struct?file?*?vm_file;?/*指向该区域(如果存在的话)相关联的file结构指针*/void?*?vm_private_data;?/*驱动程序用来保存自身信息的成员*/};?vm_operations_struct结构的定义如下:struct?vm_operations_struct?{????????//打开VMA的函数void?(*open)(struct?vm_area_struct?*?area);??????????//关闭VMA的函数void?(*close)(struct?vm_area_struct?*?area);????????//访问的页不在内存时调用struct?page?*?(*nopage)(struct?vm_area_struct?*?area,?unsigned?long?address,?int?*type);unsigned?long?(*nopfn)(struct?vm_area_struct?*?area,?unsigned?long?address);????????//驱动程序不必实现populate方法int?(*populate)(struct?vm_area_struct?*?area,?unsigned?long?address,?unsigned?long?len,?pgprot_t?prot,?unsigned?long?
您可能关注的文档
最近下载
- 2024年最新财务法规解读.pptx
- 人教版五年级数学上册全册全套课件【最新版】.ppt VIP
- 七年级开学初家长会.pptx VIP
- 腰椎管狭窄症手术治疗规范中国专家共识(2014年)腰椎管狭窄症手术治疗规范中国专家共识组(发布时间:2014-09).pdf VIP
- 2025-2026学年统编版(2024)道德与法治三年级上册全册教学设计.pdf
- TBGEA001-2019预拌流态固化土填筑工程技术标准.pdf VIP
- 智能制造 第7章 智能制造服务.ppt VIP
- 乳腺腔镜手术介绍.pptx VIP
- 医院艾滋病知识培训课件.pptx VIP
- 应对老年人患者烫伤情景考核评分表.doc VIP
文档评论(0)