嵌入式Linux操作系统 教学课件 华清远见嵌入式学院 孙天泽 第4章 存储管理.pptVIP

嵌入式Linux操作系统 教学课件 华清远见嵌入式学院 孙天泽 第4章 存储管理.ppt

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式Linux操作系统 第4章 存储管理 第1章 嵌入式Linux操作系统简介 第2章 Linux操作系统使用与系统配置 第3章 嵌入式Linux编程环境 第4章 存储管理 第5章 操作系统进程 第6章 进程间通信 第7章 中断与系统调用 第8章 文件管理 第9章 设备管理 第10章 嵌入式Linux的构建 第4章 存储管理 4.1 进程虚存空间的管理 4.2 内存空间/地址类型 4.3 分页机制与MMU 4.4 高速缓存 4.5 内存区域Zone 4.6 获得内存页面 4.7 slab分配器 4.8 kmalloc 4.9 高端内存 4.10 虚拟内存的申请和释放 思考题 4.1 进程虚存空间的管理 Linux运行在x86架构时,进程的虚拟内存为4GB。进程虚存空间的划分在系统初始化时由GDT确定,它定义在/arch/i386/kernel/head.S文件中: .quad 0x0000000000000000 /* NULL 描述符 */ .quad 0x0000000000000000 /* 未使用*/ .quad 0xc0c39a000000ffff /* 内核代码段1GB在0xc0000000 */ .quad 0xc0c392000000ffff /* 内核数据段1GB在0xc0000000 */ .quad 0x00cbfa000000ffff /* 用户代码段3GB在0*/ .quad 0x00cbf2000000ffff /* 用户数据段3GB在0*/ .quad 0x0000000000000000 /* 未使用 */ .quad 0x0000000000000000 /* 未使用 */ .fill 2*NR_TASKS,8,0 /* 各个进程LDT描述符和TSS描述符的空间 */ Linux的存储管理主要是管理进程虚拟内存的用户区。进程虚拟内存的用户区分成代码段、数据段、堆栈以及进程运行的环境变量、参数传递区域等。每一个进程都用一个mm_struct结构体来定义它的虚存用户区。mm_struct结构体首地址在任务结构体task_struct成员项mm中。 4.1 进程虚存空间的管理 4.1.1 进程的虚存区域 一个虚存区域是虚存空间中一个连续的区域,在这个区域中的信息具有相同的作和访问特性。每个虚拟区域用一个vm_area_struct结构体进行描述.它定义在/include/linux/mm.h中 4.1 进程虚存空间的管理 4.1.2 虚存空间的映射和虚存区域的建立 虚拟内存使计算机可以操纵更大的地址空间,还可以使系统中的每一个进程都有自己的虚拟地址空间。这些虚拟的地址空间是相互完全分离的,所以运行一个应用程序的进程不会影响另外的进程。另外,硬件的虚拟内存机制允许对内存区写保护。这可以防止代码和数据被错误的程序覆盖。 内存映射可以将CPU的虚拟地址空间映射到系统的物理内存。 核心的共享虚拟内存机制,虽然允许进程拥有分离(虚拟)的地址空间,但有时也需要进程之间共享内存。例如,系统中可能有多个进程运行命令解释程序bash 。尽管可以在每一个进程的虚拟地址空间都拥有一份 bash 的拷贝,但更好的方法是在物理内存中只拥有一份拷贝,所有运行 bash 的进程共享代码。动态连接库是多个进程共享执行代码的另一个常见例子。另外,共享内存也经常用于进程间通讯机制,两个或多个进程可以通过共同拥有的内存交换信息。Linux系统支持系统V的共享内存 IPC机制。 Linux虚存采用动态地址映射方式,即进程的地址空间和存储空间的对应关系是在程序的执行过程中实现的。进程使用的是虚拟地址,因此它对每个地址的访问都需通过MMU把虚拟地址转化为内存的物理地址。 4.1 进程虚存空间的管理 4.1.2 虚存空间的映射和虚存区域的建立 动态地址映射使Linux可以实现进程在主存中的动态重定位,虚存段的动态扩展和移动,也为虚存的实现提供了基础。当Linux中的进程映象执行时,需要调入可执行映象的内容。但并不需要把这些数据直接调入物理内存,只需要把这些数据放入该进程的虚拟内存区。只有当在执行需要这些数据时才真正调入内存。这种进程的映象和进程虚拟进程空间的连接叫内存映象。当需要将进程映象调入进程的虚拟内存空间时,需要申请一段合适的虚拟内存空间,在这种情况下需要用到mmap系统调用来获得所需的内存空间。 Linux使用do_mmap()函数完成可执行映像向虚存区域的映射,由它建立有关的虚存区域 do_mmap()函数定义在include\linux\mm.h文件中: static inline unsigned long do_mmap(struct fil

您可能关注的文档

文档评论(0)

时间加速器 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档