图1 uClinux运行在Palm上
应用无内存管理
uClinux与普通Linux系统的主要区别就是它没有内存管理。在普通Linux下,通过使用虚拟内存(VM)来实现内存管理。虚拟内存一般是通过内存管理单元(Memory Management Unit,简称MMU)来实现,而在uClinux的世界里,经常可以看到“NOMMU”这个词。
在有虚拟内存的情况下,所有的进程都在相同的地址空间运行,由虚拟内存系统处理虚拟内存到物理内存的映射。因此,即使进程看到的虚拟内存是连续的,它所占的物理内存也可能是分散的,有的甚至被交换到了硬盘。因为物理内存能映射到进程地址空间的任何位置,所以这种环境下能够向正在运行的进程添加内存。
在没有虚拟内存的情况下,每个进程必须被分配到固定的内存位置。由于一个进程的上、下(内存位置)都可能有别的进程在运行,所以它通常不能动态扩展内存。这就是说,在uClinux下运行的进程不能在运行过程中动态增加可用内存,这与传统Linux下的情况有所不同。
对于uClinux开发者来说,分配内存是一个棘手的问题,并且由于没有任何形式的内存保护,任何应用程序或内核都可能破坏系统。更为糟糕的是,无意识的误操作不会引人注意,造成要跟踪随机的、进程间的破坏非常困难。但是这些缺陷对于uClinux来说几乎不算问题,这是因为使用uClinux的系统一般没有硬盘驱动器和足够的内存,完全没有必要做复杂的管理和交换。