红联Linux门户
Linux帮助

UClinux的内存管理

发布时间:2006-08-25 01:01:49来源:红联作者:asiaec
一.概述:

由于缺少了MMU硬件支持,uClinux不能支持虚拟内存管理(virtual memory management)和内存保护.这就意味着它完全不使用标准linux内核(kernel)中的分页管理机制,也就没有了页表(page table)和页目录(page directory)对线性地址的映射,从而线性地址到物理地址的转 换也是不需要进行任何工作的。换句话说,uClinux中所使用的都是直接物理地址。而且,由于没有了虚拟内存管理的功能,uClinux不再使用”按需调页”(demand paging)。这样在程序载入内存执行的时候需要将程序的全部映像都一次装入。那些比物理内存还大的程序将无法执行。这也是uclinux的缺陷之一。

尽管如此,uClinux还是将整个物理内存划分成大小为4KB的页面。由数据结构page管理,有多少页面就有多少page结构,它们又作为元素组成一个数组mem_map[]。

进程可以向核心申请使用物理内存。这仍然通过使用传统的kmalloc()和kfree实现。这些内存块来自于free_area数组,由blocksize表、sizes表、page_descriptor结构和blockheader结构共同管理。

二.uClinux内存管理的局限性:

由于缺少了MMU硬件的支持,uClinux的多任务管理功能受到一定限制:

1. uClinux中无法实现fork而只能使用vfork.这并不意味着uClinux不具有多任务功能,而是父进程在调用vfork之后必须在子进程调用exec()或者exit()之前阻塞。

2. 标准linux中的内存分段为应用程序提供了接近无限的堆空间和栈空间,而uClinux为可执行程序在紧随它的数据段结束处分配堆栈空间。这样如果堆栈增长的太大,它将可能覆盖程序的静态数据段和代码段。

3. 不具有内存保护。

4. 应用程序必须一次性载入。
文章评论

共有 1 条评论

  1. pinkfirex 于 2006-08-25 17:01:19发表:

    介绍的好象不全,尽管这样也要支持你