第2部分第5次课linux2.6内核之内存管理讲解.ppt

第2部分第5次课linux2.6内核之内存管理讲解.ppt

  1. 1、本文档共168页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式Linux 内核体系架构 李超 lichao-runing@163.com内存管理 Linux的内存管理 PART 4.1 linux内存管理 内存管理是一个操作系统必不可少,并且非常重要的一环。Linux的成功和它优秀的内存管理联系非常密切,因为一个系统的高效性欲稳定性往往决定于它的内存管理机制。 对每个程序员来说.他们都希望有无穷大的快速的内存,然而,现阶段是不可能的。 为了解决无穷大,Linux 引入了虚拟存储系统;为了解决快速,Linux 引入了cache、交换机制等等,以使的存储系统,在容量上接近硬盘,在速度上接近cache。 每个程序员都喜欢无穷大、快速的存储器,同时又希望它是廉价的。但不幸的是,当前技术没有能够提供这样的存储器,大部分的计算机都有一个存储器层次结构: 即少量的非常快速、昂贵、易变的高速缓存(cache); 若干兆字节的中等速度、中等价格、易变的主存储器(RAM); 数百兆或数千兆的低速、廉价、不易变的磁盘。 这些资源的合理使用与否直接关系着系统的效率。 地址映射机制,就是在虚拟内存与物理内存上的一个桥梁。要做的事情可能就是通过几个不同的表,把虚拟地址转换成物理地址,把物理地址转化虚拟地址。 虚拟内存的基本思想:在计算机中运行的程序,其代码、数据和堆栈的总量可以超过实际内存的大小,操作系统只将当前使用的程序块保留在内存中,其余的程序块则保留在磁盘上。必要时,操作系统负责在磁盘和内存之间交换程序块。 虚拟内存-共4G字节,分为两部分: 内核空间(最高的1G字节) 用户空间(较低的3G字节) 每个进程最大拥有3G字节私有虚存空间 地址转换-通过页表把虚存空间的一个地址转换为物理空间中的实际地址。 任意一个时刻,在一个CPU上只有一个进程在运行。所有对于此CPU来讲,在这个时刻,整个系统只存在一个4GB的虚拟地址空间。尽管每个进程都可以有4GB的虚拟地址空间,但是在CPU眼里,只有一个虚拟地址空间存在 当进程发生切换,页表也将更换为相应进程的页表,这就可以使每个进程都有自己的虚拟地址空间而互不影响。所以,在任意时刻,对于一个CPU来说,只需有当前进程的页表,就可以实现虚拟地址到物理地址的转换 内核空间由所有进程共享,其中存放的是内核代码和数据,即“内核映象”(kernel image) 进程的用户空间中存放的是用户程序的代码和数据 内核空间映射到物理内存总是从最低地址(0开始,使之在内核空间与物理内存之间建立简单的线性映射关系。 Linux虚拟内存的实现需要多种机制的支持 地址映射机制 请页机制 内存分配和回收机制 交换机制 缓存和刷新机制 PART 4.2 用户进程管理 每个进程经编译、链接后形成的二进制映像文件有一个代码段和数据段,其中代码段在下,数据段在上。 数据段中包含了所有静态分配的数据空间,即全局变量和所有声明为static的局部变量,这些空间是进程所必需的,是在建立一个进程的运行映像时就分配好的。 由图可以看出,堆栈段安排在用户空间的顶部,运行时由顶向下延伸;代码段和数据段则在低部,运行时并不向上延伸。从数据段的顶部到堆栈段地址的下沿这个区间是一个巨大的空洞,这就是进程在运行时调用malloc()可以动态分配的空间,也叫动态内存或堆。 每个进程拥有3GB的用户空间,但其地址都是虚地址,因此用户进程在这个虚拟内存中并不能真正地运行起来,必须把用户空间中的虚地址最终映射到物理存储空间才行,而这种映射的建立和管理是由内核完成的。 所谓向内核申请一块空间,实际上是请求内核分配一块虚存区间和相应的若干物理页面,并建立映射关系 内核在创建进时并不是为整个用户空间都分配好相应的物理空间,而是根据需要才正分配一些物理页面并建立映射。 系统利用了请页机制避免对物理内存的过分使用。因为进程访问的用户空间中的页可能当前不在物理内存中,这时,操作系统通过请页机制把数据从磁盘装入到物理内存。为此,系统需要修改进程的页表,以标志用户空间中的页已经装入到物理页面中。 Linux把进程的用户空间划分为一个个区间,便于管理 一个进程的用户地址空间主要由mm_struct结构和vm_area_structs结构来描述。 mm_struct结构对进程整个用户空间进行描述 vm_area_structs结构对用户空间中各个区间(简称虚存区)进行描述 struct mm_struct { atomic_t count; pgd_t * pgd; int map_count; struct semaphore mmap_sem; unsigned lo

文档评论(0)

美洲行 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档