碧波液压网 欢迎你,游客。 登录 注册

浅谈μCLinux与标准Linux在内存管理上的区别

版权信息:站内文章仅供学习与参考,如触及到您的版权信息,请与本站联系。

  0.引言

  标准 Linux 因其公开源代码、没有专利费、外部设备驱动丰富、性能非常稳定等特点,广泛地应用在嵌入式领域中,但传统的 Linux 内核采用虚拟内存管理技术, 这种设计运行在没有 MMU 的芯片时,这部分关于内存管理的代码就变成冗余代码,甚至会对系统整体性能产生负面影响。μCLinux 正是为了解决这一问题而开发的。μCLinux 是由Linux2.0/2.4 内核派生而来的,其中,μ 代表 micro 微小,C 代表 control控制,直译过来就是面向微控制领域而设计的 Linux 系统。 通过对标准 Linux 内核剪裁,去除虚拟内存管理部分代码,并对内存分配进行优化,适合运行于资源有限的嵌入式领域。 在本文中,将就标准 Linux与 μCLinux 在内存管理上的不同做简要比较。

  1.标准Linux使用的虚拟内存技术

  虚拟内存的设计思想是系统通过不断的将进程正在使用的部分装入 RAM,而将其余部分(包括暂时没有用到的数据和堆栈等)存储到磁盘上, 从而使对 RAM 需求较大的程序可以在 RAM 容量相对较小的系统中顺利的运行。

  分页技术是把系统的内存划分成大小固定的页面(通常是 4KB),每个页面可以独立的在内存和磁盘之间进行交换。

  由于虚拟内存的存在,产生了两种不同的地址空间:物理地址空间和逻辑地址空间。逻辑地址和物理地址之间的转换工作是由内核和内存管理单元共同完成。 内核告诉 MMU 如何为每个进程分配逻辑页面,MMU 在进程提出内存请求时完成实际的转换工作。 而当地址转换无法完成的时候,比如给定的逻辑地址不合法或者逻辑页面没有对应的物理页面时,MMU 就给内核发出“页面错误”信号。 MMU 还负责增强内存保护,如果一个应用程序试图在它的内存中对一个已经标明是只读的页面进行写操作,MMU 报错,并交由内核处理。

  标准 Linux 是针对有内存管理单元的 CPU 设计的, 在这种 CPU上,虚拟地址被送到 MMU,由 MMU 把虚拟地址映射为物理地址。 系统通过赋予每个任务不同的虚拟/物理地址转换映射, 支持不同任务之间的保护。 一个进程只能访问自己用户空间内的地址,而不会访问和修改其他进程的空间。

  2. μLinux针对没有MMU的特殊处理

  μLinux 是针对没有内存管理单元的 CPU 设计的, 所以不能使用处理器的虚拟内存管理技术。 虽然 μLinux 仍然采用存储器的分页管理,系统在启动时把实际存储器进行分页,在加载应用程序时加载程序分页,但由于没有 MMU 管理,所以实际上 μLinux 采用实存储器管理策略。

  μLinux 系统对内存的访问是直接的, 所有程序中访问的地址都是实际的物理地址。 操作系统对内存空间没有保护,各个进程没有独立的地址转换表,共享一个运行空间。一个进程在执行前,系统必须为进程分配足够的连续地址空间, 然后全部载入主存储器的连续空间中。

你没有登陆,无法阅读全文内容

您需要 登录 才可以查看,没有帐号? 立即注册

标签:
点赞   收藏

相关文章

发表评论

请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。

用户名: 验证码:

最新评论