- 1、本文档共134页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8.1缺少MMU支持的内存管理-Read.ppt
第8章 存储管理 如何进行存储管理,使系统在有限的硬件环境发挥出尽可能高的性能是存储管理的核心内容。 一般Linux中的内存管理以及uClinux内存管理有什么特点。 本章主要介绍了: ◆ 缺少MMU支持的内存管理。 ◆ 内存管理3种模型。 ◆ 标准Linux的内存管理、uClinux内存管理及其的局限性。 ◆ 内存管理模块的启动过程。 ◆ 用户程序的内存分布、reloc段机制、可执行文件格式和执行文件加载流程。 8.1 缺少MMU支持的内存管理 内存管理是操作系统中非常重要的子模块。 如同普通操作系统一样,在嵌入式操作系统中,内存管理实现的好坏对系统性能有决定性的作用。 Linux内核的内存管理子模块性能优越,目前大多数使用的嵌入式Linux解决方案中都直接使用了标准Linux内存管理机制,或者对Linux内核的内存管理子模块做了很小的改动,但嵌入式Linux的内存管理仍然是值得关心的问题。 目前的Linux内核已经被移植到大量的非x86平台上,包括ARM,M68K,PPC,Alpha,Sparc等。 其中uClinux主要针对缺少MMU内存管理的优秀嵌入式Linux操作系统。 目前,由于体积限制或者出于降低成本的考虑,嵌入式系统中所使用的微处理器大多缺少MMU。 这些硬件平台包括数字信号处理器(DSP),SoC(System on Chip),以及那些不具有MMU的微处理器, 例如ARM7TDMI,Motorola的M68K龙珠系列等。 这些没有MMU的微处理器为传统Linux的应用造成了一个障碍,它们要求使用flat内存模型——即没有虚拟内存(分页/页面交换)、内存地址转换(分段)和内存保护的内存管理机制。 在基于Linux的嵌入式操作系统中,uClinux因为具有在不带内存管理单元(MMU)的硬件平台上运行的能力而独领风骚。 它通过提供修改过的Linux内核、C库和编译器为嵌入式系统开发者提供了与标准Linux相同的APl,实现了从Linux到无MMU的微处理器上的无缝转化。 目前,在无MMU平台上能够运行的Linux仅有uClinux一家。 8.1.1 3种内存管理模型 操作系统的内存管理模型可以分成如下3种: 1. 单一程序模型 这是没有硬件地址转换的内存管理模型。 应用程序始终在物理内存中的同一地址空间运行,一个时刻只有一个应用程序被加载运行,程序加载器把应用程序加载到内存低端,将操作系统加载到高端。 一个应用程序可以对所有的物理内存地址进行寻址。 早期的操作系统受限于硬件能力多采用这种模型,现代操作系统中这种内存管理方式已经不见了。 2. 多程序模型 这也是没有硬件地址转换的内存管理模型。 即使没有硬件地址转换功能,多个程序也可以共享相同的物理地址。 在程序被加载到内存的时候,改变程序中寻址指令(load,store,jump)所使用的地址值为当前被加载到的位置。 uClinux正是使用了这种模型。 3. 具有地址转换硬件的内存管理模型 应用程序使用的是虚拟地址,CPU实际执行程序所使用的是物理地址,从虚拟地址到物理地址的转换需要操作系统和MMU(Memory Management Unit)硬件的参与。 标准Linux以及大多数现代操作系统都使用这种内存管理模型。 8.1.2 标准Linux的内存管理 为了理解uClinux对标准Linux的裁减,首先必须清楚标准Linux中内存管理的各种基本概念。 这里对相关于虚拟内存的各个概念作一个总结。 Linux使用了上述的第三个模型,即使用了地址转换硬件的内存管理模型。 虚拟内存是一种对RAM和磁盘(或称做主存和辅存)进行无缝混合访问的技术。 所有的虚拟内存对于应用程序来说好像是真的存在一样,应用程序在加载的时候并不需要关心是否会超过系统中实际的物理RAM的大小 内核主要通过页目录和页表的地址转换功能将应用程序的虚拟地址转换成物理地址 这个过程中可能将应用程序中使用的超过了实际物理内存大小的虚拟地址映射到适当的真实物理地址,从而使应用程序可以随心所欲地使用巨大的虚拟存储空间(对Linux 2.4内核来说为4GB)。 但是只通过地址映射还不能解决有限的物理内存被虚拟地址空间所使用的问题,操作系统还必须使用页面交换机制将那些暂时不再使用的内存空间交换到外存中以使其他程序,能够使用物理内存。 Linux没有将整个进程所使用的空间都交换到外存中,而是对部
文档评论(0)