use*_*463 3 embedded operating-system computer-architecture
我正在学习计算机体系结构,并碰到一个说法:“完全没有虚拟内存就可以运行,而只有物理内存(实际上,大多数嵌入式系统都以这种方式运行)”。
是这样吗?如果是,那么我想知道如何?
谢谢。
不使用虚拟内存的嵌入式系统通常作为单个进程或线程运行,或者支持多线程而不是多处理任务模型。也就是说,所有线程/任务共享一个公共地址空间,但具有单独的堆栈(尽管也位于单个地址空间中)。
在具有MMU并支持虚拟内存的处理器上,只需不配置MMU或至少具有一对一映射的静态MMU配置,以使物理地址和MMU地址相同,或者至少使它们相同,即可完成此操作只有一个虚拟地址空间。
嵌入式系统中使用的许多中低端架构,例如PIC,AVR,ARM7,ARM Cortex-M,Zilog Z8等,都缺少MMU,并且与典型的ARM9 / 11 / Cortex-A相比,其内存资源通常要小得多。或基于x86的系统。
为了在无MMU的系统中提供多线程支持,通常应使用实时操作系统(RTOS)。大多数RTOS(带有一些值得注意的例外)是带有IPC和同步原语的简单任务计划程序,它们不使用也不支持MMU。QNX和VxWorks等高端RTOS支持MMU,尽管在VxWorks中它是可选的。
uCLinux是针对处理器的GPOS,这些处理器具有足够的内存资源来运行Linux,但缺少诸如ARM7和Cortex-M之类的MMU。尽管可以说,没有MMU的Linux却错过了使用Linux的主要优势之一,同时缺乏硬实时性能,并且需要大内存;一个典型的RTOS内核需要少于10kBytes的代码。
虚拟内存只是物理内存的一种呈现方式,以便每个进程都有独立的内存空间。这种间接寻址是通过称为MMU (内存管理单元)的特殊硬件单元实现的。
早期的计算机系统只是直接使用物理内存。这导致了安全问题,即一个用户可以访问同一系统上所有其他用户的进程内存。虚拟内存通过将每个进程的内存空间分开来解决这个问题。