一.概述:
由于缺少了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. 应用程序必须一次性载入。


pinkfirex 于 2006-08-25 17:01:19发表:
介绍的好象不全,尽管这样也要支持你