嵌入式系统 - 内存管理

教材:嵌入式系统及应用,罗蕾、李允、陈丽蓉等,电子工业出版社

嵌入式系统开发

内存管理

概述

  • 实时内核所采用的内存管理方式与应用领域和硬件环境密切相关
    • 在强实时应用领域,内存管理方法就比较简单,甚至不提供内存管理功能
    • 一些实时性要求不高,可靠性要求比较高,且系统比较复杂的应用在内存管理上就相对复杂些,可能需要实现对操作系统或是任务的保护

嵌入式实时操作系统在内存管理方面需要考虑如下因素

快速而确定的内存管理

通常的操作系统都至少具有基本的内存管理方法:提供内存分配与释放的系统调用

不使用虚拟存储技术

在嵌入式实时操作系统中一般不使用虚拟存储技术,以避免页面置换所带来的开销

内存保护

内存保护包含两个方面的内容

  • 防止地址越界:每个应用程序都有自己独立的地址空间,当应用程序要访问某个内存单元时,由硬件检查该地址是否在限定的地址空间之内,只有在限定地址空间之内的内存单元访问才是合法的,否则需要进行地址越界处理
  • 防止操作越权:对于允许多个应用程序共享的存储区域,每个应用程序都有自己的访问权限,如果一个应用程序对共享区域的访问违反了权限规定,则进行操作越权处理

内存管理机制

应用根据需要从固定大小存储区或者可变大小存储区中获得一块内存空间,用完后将该内存空间释放回相应的存储区

静态分配

系统在启动前,所有的任务都获得了所需要的所有内存,运行过程中将不会有新的内存请求

  • 在强实时系统中,减少内存分配在时间上可能带来的不确定性。
  • 不需要操作系统进行专门的内存管理操作。
  • 系统使用内存的效率比较低下,只适合于那些强实时,且应用比较简单,任务数量可以静态确定的系统

动态分配

应用通过分配(malloc)与释放(free)操作来使用内存

  • 堆(heap)会带来碎片

  • 垃圾回收

    对内存堆进行重新排列,把碎片组织成为大的连续可用内存空间。但垃圾回收的时间长短不确定:不适合于处理实时应用

  • 在实时系统中,避免内存碎片的出现,而不是在出现内存碎片时进行回收

固定大小存储区

在指定边界的一块地址连续的内存空间中,实现固定大小内存块的分配

  • 可供使用的一段连续的内存空间被称为是一个分区;
  • 分区由大小固定的内存块构成
  • 固定大小存储区管理的系统开销对用户的影响为零
  • 由于内存块的大小固定,不存在碎片的问题

可变大小存储区

可变大小存储区管理为基于堆的管理方式,在指定边界的一块地址连续的内存空间中,实现可变大小内存块的分配

  • 堆为一段连续的、大小可配置的内存空间,用来提供可变内存块的分配
  • 可变内存块称为,最小分配单位称为,即段的大小是页的大小的整数倍
  • 如果申请段的大小不是页的倍数,实时内核将会对段的大小进行调整,调整为页的倍数
  • 可变大小存储区中的空闲段通过双向链表链接起来,形成一个空闲段链
  • 对申请的内存的大小作了一些限制,避免了内存碎片的产生

内存保护

  • 内存保护可通过硬件提供的MMU(memory management unit)来实现

  • MMU现在大都被设计作为处理器内部指令执行流水线的一部分

  • 原来的嵌入式CPU的速度较慢,采用MMU通常会造成对时间性能的不满足,而现在CPU的速度也越来越快,并且采用新技术后,已经将MMU所带来的时间代价降低到比较低的程度

MMU的功能

  • 内存映射

    把应用程序使用的地址集合(逻辑地址)翻译为实际的物理内存地址(物理地址)

  • 检查逻辑地址是否在限定的地址范围内,防止页面地址越界;

  • 检查对内存页面的访问是否违背特权信息,防止越权操作内存页面

    MMU提供二进制位来标识每个页面的特权或状态信息

  • 在必要的时候(页面地址越界或是页面操作越权)产生异常

  • 在操作系统的支持下,MMU还提供虚拟存储功能,即在任务所需要的内存空间超过能够从系统中获得的物理内存空间的情况下,也能够得到正常运行

MMU不同功能程度的使用方式

  • 0级,内存的平面使用模式

    没有使用MMU,应用程序和系统程序能够对整个内存空间进行访问

  • 1级,处理具有MMU和内存缓存的嵌入式处理器

    该模式仍然只是拥有MMU打开特性的平面内存模式

  • 2级,内存保护模式

    • MMU被打开,且创建了静态的域(应用程序的逻辑地址同应用程序在物理内存中的物理地址之间的映射关系在系统运行前就已经确定),以保护应用和操作系统在指针试图访问其他程序的地址空间时不会被非法操作
    • 通常使用消息传送机制实现数据在被MMU保护起来的各个域之间的移动
  • 3级,虚拟内存使用模式

    • 通过操作系统使用CPU提供的内存映射机制,内存页被动态地分配、释放或是重新分配
    • 从内存映射到基于磁盘的虚拟内存页的过程是透明的

你可能感兴趣的:(嵌入式系统及应用)