240 likes | 388 Views
项目 6 :内存分配- PDA 的内存管理 ( 1 ). 本节课程主要知识点 Windows CE5.0 的内存管理 Windows CE5.0 的内存结构 进程地址空间结构. 重点和难点. 重点 内存管理的基本概念 难点 虚拟内存的使用. Windows CE5.0 的内存管理. 内存管理. 内存管理是操作系统中最重要的功能之一,尤其是在嵌入式系统中更为重要。 内存管理的目的是为了充分利用内存,尽可能方便用户使用内存。 解决程序空间比实际内存空间大的问题。. Windows CE5.0 的内存管理.
E N D
项目6:内存分配-PDA的内存管理 (1) 本节课程主要知识点 • Windows CE5.0的内存管理 • Windows CE5.0的内存结构 • 进程地址空间结构
重点和难点 重点 • 内存管理的基本概念 难点 • 虚拟内存的使用
内存管理 • 内存管理是操作系统中最重要的功能之一,尤其是在嵌入式系统中更为重要。 • 内存管理的目的是为了充分利用内存,尽可能方便用户使用内存。 • 解决程序空间比实际内存空间大的问题。
Windows CE5.0的内存管理 • Windows CE5.0内存管理是在Windows XP内存管理的基础上优化而成的。 • 内存管理采用虚拟内存方式来管理内存的使用。
物理内存 • Windows CE5.0最大支持512MB的物理内存。 • 物理内存包括RAM、ROM和Flash 存储器。 • 操作系统的映像和相关文件一般存储在Flash中。
虚拟内存 • Windows CE5.0支持4GB的虚拟内存。 • 管理虚拟内存的硬件是内存管理单元MMU,负责把虚拟地址映射到内存的物理地址。 • 整个4GB虚拟地址空间划分为两部分,地址0x8000 0000以上的2G空间为内核使用部分,0x8000 0000以下的2G空间为应用程序使用部分。
内核空间与用户空间 • 内核空间(地址0x8000 0000以上) • 运行于核心态的进程使用 • 静态映射物理地址 • 用户空间(地址0x8000 0000以下) • 划分为64个Slots,每一个Slot有32MB • 大多数情况下,动态映射物理地址
物理内存映射虚拟内存 Virtual Memory Physical Memory FFFF FFFF Kernel Space C000 0000 512 MBUncached 32 MB Flash 64 MB RAM A000 0000 512 MBCached 32 MB Flash 82000000 32 MB Flash 64 MB RAM 8000 0000 04000000 64 MB RAM 2 GBUser AddressTranslation UserSpace 00000000 0000 0000
Windows CE5.0的内存结构 Total 4 GB Virtual Space Kernel Space User Space FFFF FFFF 7FFF FFFF 2 GB Kernel Space Kernel Addresses: KPAGE, Trap Area, Others Slots 33-63 Object Store and Memory-Mapped Files E000 0000 Reserved C400 0000 Slot 97: NK.EXE C200 0000 Reserved 4200 0000 2 GB UserSpace Slots 2-32 - Processes C000 0000 Statically Mapped Virtual Addresses: Un-Cached A000 0000 0400 0000 Statically Mapped Virtual Addresses: Cached Slot 1 – XIP DLL code 0200 0000 Slot 0 – Current Process 0000 0000 8000 0000
Windows XP 内存结构 FFFF FFFF System Reserved (kernel mode space) Active Process Active Process Active Process Active Process 8000 0000 Active Process Application Space 0000 0000
Windows CE 内存结构 FFFF FFFF System Reserved (kernel mode space) 8000 0000 Large Memory Area (memory mapped files) 4200 0000 Reserved Active Process 0400 0000 Active Process Active Process Application Space Active Process Active Process Active Process Application Space 0000 0000
虚拟内存中的Slots 8000 0000 • 2 Gigabytes • Divided into 64 32 MByte Slots • 31 slots for LMA • 31 slots for applications • 2 slots for current application Large Memory Area (memory mapped files) 4200 0000 Application Slots (Slots 2-32) Current Application (Slots 0-1) 0400 0000 0000 0000
Slot • 当一个应用程序启动时,内核为这个程序选择一个空闲的槽(Slot),并且加载所有的代码、资源,并分配堆栈,加载DLL等。 • 当这个进程得到CPU使用权时,它的整个地址空间被内核映射到Slot 0,也就是当前进程使用的地址空间,然后开始运行。
Slot 0 • 每个进程在执行前都要映射到Slot 0。 • 由于进程使用的所有DLL可能来自不同的Slot,为避免所使用的DLL在映射到Slot 0中出现地址空间冲突的现象,内核的加载器在加载DLL时会查找所有槽中加载的DLL的地址,保证在映射到Slot 0时不会发生地址冲突现象。
Slot 2 – Slot 8 • Slot2:通常被Filesys.exe占用 • Slot3:通常被shell.exe占用 • Slot4:通常被device.exe占用 • Slot5:通常被gwes.exe占用 • Slot6:通常被ceemulsrv.exe占用 • Slot7:通常被explorer.exe占用 • Slot8:通常被services.exe占用
Slot中的内存分配 • 进程最低部的64KB作为保留区域。 • 代码段从0x0001 0000开始加载,内核为代码段分配足够的虚拟地址空间。 • 为只读数据和可读/可写数据分配空间。 • 为资源数据分配空间。 • 为默认堆和栈分配空间。
Slot中的DLL加载 • 非XIP DLL从进程最高端地址向下开始加载。 • 非XIP DLL的加载按如下规则:内核先检查要加载的DLL是否已经被其它进程加载,如果加载过,就做一个地址的重定位。避免系统内多次加载相同DLL。如果没有加载过,就按照从槽的高地址到槽的低地址的顺序查找空闲的地址空间。然后分配足够的地址空间用于加载DLL。
进程地址空间结构 • Windows CE5.0同以前版本的Windows CE操作系统在进程地址空间上有所不同。 • 以前的Windows CE把XIP DLL也加载到进程的32MB地址空间中。 • Windows CE5.0把XIP DLL单独加载到Slot 1中,这样对于每个进程来说,它总的地址空间就大了一倍,达到64MB。
C400 0000 32 MB Process Space nk.exe Slot 97 01FF FFFF C200 0000 . . . 8000 0000 Resource DLLs Slot 63 7E00 0000 . . . 4200 0000 Free Virtual Space Slot 32 4000 0000 Slot 31 3E00 0000 Slot 30 3C00 0000 . . . 0C00 0000 gwes.exe Slot 5 0A00 0000 device.exe Slot 4 0800 0000 shell.exe Slot 3 0600 0000 0001 0000 filesys.exe Slot 2 0400 0000 0000 0000 XIP ROM DLLs Slot 1 0200 0000 Current Process Slot 0 0000 0000 进程的地址空间
不同CPU的内存结构 • 不同的CPU内存管理方法也不同。 • 对于MIPS和SHX系列CPU来说,物理地址映射是由CPU完成的,Windows CE内核可以直接访问512MB的物理内存。 • 对于x86系列和ARM系列的CPU来说,在内核启动过程中它会将现有物理内存地址全部映射到0x8000 0000以上的虚拟地址空间中供内核以后使用。