Upload
kesler
View
120
Download
14
Embed Size (px)
DESCRIPTION
项目 6 :内存分配- PDA 的内存管理 ( 1 ). 本节课程主要知识点 Windows CE5.0 的内存管理 Windows CE5.0 的内存结构 进程地址空间结构. 重点和难点. 重点 内存管理的基本概念 难点 虚拟内存的使用. Windows CE5.0 的内存管理. 内存管理. 内存管理是操作系统中最重要的功能之一,尤其是在嵌入式系统中更为重要。 内存管理的目的是为了充分利用内存,尽可能方便用户使用内存。 解决程序空间比实际内存空间大的问题。. Windows CE5.0 的内存管理. - PowerPoint PPT Presentation
Citation preview
项目 6:内存分配- PDA的内存管理 ( 1 )本节课程主要知识点 Windows CE5.0 的内存管理 Windows CE5.0 的内存结构 进程地址空间结构
重点和难点重点 内存管理的基本概念
难点 虚拟内存的使用
Windows CE5.0的内存管理
内存管理 内存管理是操作系统中最重要的功能之
一,尤其是在嵌入式系统中更为重要。 内存管理的目的是为了充分利用内存,
尽可能方便用户使用内存。 解决程序空间比实际内存空间大的问题。
Windows CE5.0 的内存管理 Windows CE5.0 内存管理是在 Windows
XP 内存管理的基础上优化而成的。 内存管理采用虚拟内存方式来管理内存
的使用。
物理内存 Windows CE5.0 最大支持 512MB 的物理
内存。 物理内存包括 RAM 、 ROM 和 Flash 存
储器。 操作系统的映像和相关文件一般存储在 F
lash 中。
虚拟内存 Windows CE5.0 支持 4GB 的虚拟内存。 管理虚拟内存的硬件是内存管理单元 M
MU ,负责把虚拟地址映射到内存的物理地址。
整个 4GB 虚拟地址空间划分为两部分,地址 0x8000 0000 以上的 2G 空间为内核使用部分, 0x8000 0000 以下的 2G 空间为应用程序使用部分。
内核空间与用户空间 内核空间 ( 地址 0x8000 0000 以上 )
运行于核心态的进程使用静态映射物理地址
用户空间 ( 地址 0x8000 0000 以下 )划分为 64 个 Slots ,每一个 Slot 有 32
MB大多数情况下,动态映射物理地址
物理内存映射虚拟内存2 G
BUser
512 MB
Uncached
512 MB
Cached
32 MB Flash
Physical Memory Virtual Memory
04000000
82000000
8000 0000
A000 0000
C000 0000
00000000
64 MB RAM
0000 0000
64 MB RAM
32 MB Flash
64 MB RAM
FFFF FFFF
AddressTranslation
32 MB Flash
Kernel Space
UserSpace
Windows CE5.0的内存结构
Windows CE5.0 的内存结构
2 GB2 GB
UserUserSpaceSpace
Slot 97: NK.EXESlot 97: NK.EXE
ReservedReserved
Statically Mapped Statically Mapped Virtual Addresses: Virtual Addresses:
Un-CachedUn-Cached
Statically Mapped Statically Mapped Virtual Addresses: Virtual Addresses:
CachedCached Slot 0 – Current ProcessSlot 0 – Current Process
Slot 1 – XIP DLL codeSlot 1 – XIP DLL code
Slots 2-32 - ProcessesSlots 2-32 - Processes
Slots 33-63Slots 33-63
Object Store and Object Store and Memory-Mapped FilesMemory-Mapped Files
FFFF FFFFFFFF FFFF
E000 0000E000 0000
C400 0000C400 0000
C200 0000C200 0000
C000 0000C000 0000
A000 0000A000 0000
8000 00008000 0000
7FFF FFFF7FFF FFFF
4200 00004200 0000
0400 00000400 0000
0200 00000200 0000
0000 00000000 0000
Total 4 GB Virtual SpaceTotal 4 GB Virtual Space
2 GB2 GB
Kernel Kernel SpaceSpace
Kernel SpaceKernel Space User SpaceUser Space
ReservedReserved
Kernel Addresses: Kernel Addresses: KPAGE, Trap Area, KPAGE, Trap Area,
OthersOthers
地址范围地址范围 用途用途
0x00000000-0x41FFFFFF0x00000000-0x41FFFFFF3333 个槽,每个槽个槽,每个槽 32MB32MB ,,每个进程占用一个槽每个进程占用一个槽
0x42000000-0x7FFFFFFF0x42000000-0x7FFFFFFF 共享区域,应用程序创建共享区域,应用程序创建堆、内存映射文件等堆、内存映射文件等
0x8000000-0x9FFFFFFF0x8000000-0x9FFFFFFF 物理地址映射空间,有缓冲物理地址映射空间,有缓冲
0xA000000-0xBFFFFFFF0xA000000-0xBFFFFFFF 物理地址映射空间,无缓冲物理地址映射空间,无缓冲
0xC000000-0xC1FFFFFF0xC000000-0xC1FFFFFF 系统保留系统保留0xC200000-0xC3FFFFFF0xC200000-0xC3FFFFFF NK.EXENK.EXE 占用占用0xC400000-0xDFFFFFFF0xC400000-0xDFFFFFFF 用户定义静态虚拟地址空间用户定义静态虚拟地址空间
0xE000000-0xFFFFFFFF0xE000000-0xFFFFFFFF 内核使用的虚拟地址内核使用的虚拟地址
内核与用户空间的地址分配
Active ProcessActive ProcessActive ProcessActive ProcessActive ProcessActive ProcessActive ProcessActive ProcessActive ProcessActive Process
Windows XP 内存结构
System ReservedSystem Reserved(kernel mode space)(kernel mode space)
0000 0000
8000 0000
FFFF FFFF
ApplicationApplicationSpaceSpace
Windows CE 内存结构
System ReservedSystem Reserved(kernel mode space)(kernel mode space)
0000 0000
0400 0000
4200 0000
8000 0000
FFFF FFFF
Active ProcessActive ProcessActive ProcessActive ProcessActive ProcessActive ProcessActive ProcessActive ProcessActive ProcessActive ProcessActive ProcessApplication Space
ReservedReserved
Large Memory AreaLarge Memory Area(memory mapped files)(memory mapped files)
Application SpaceApplication Space
0000 00000400 0000
4200 0000
8000 0000
Large Memory Area(memory mapped files)
虚拟内存中的 Slots
Application Slots
(Slots 2-32)
Current Application(Slots 0-1)
2 Gigabytes2 Gigabytes
Divided into 64 32 MByDivided into 64 32 MByte Slotste Slots
31 slots for LMA31 slots for LMA
31 slots for applications31 slots for applications
2 slots for current applic2 slots for current applicationation
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 。
进程的地址空间
Slot 30
Slot 31
Slot 32
. . .
01FF FFFF
0001 0000
0000 0000
32 MB Process Space
Current Process
XIP ROM DLLs
nk.exe
filesys.exe
shell.exe
device.exe
gwes.exe
C400 0000
C200 0000
Free Virtual Space
Slot 63
. . .
Resource DLLs
Slot 2
Slot 3
Slot 4
Slot 5
Slot 1
Slot 0
0A00 0000
3E00 0000
3C00 0000
4000 0000
4200 0000
0000 0000
0400 0000
0200 0000
0600 0000
0800 0000
0C00 0000
. . .Slot 97
8000 0000
7E00 0000
不同 CPU 的内存结构 不同的 CPU 内存管理方法也不同。 对于 MIPS 和 SHX 系列 CPU 来说,物理
地址映射是由 CPU 完成的, Windows CE 内核可以直接访问 512MB 的物理内存。
对于 x86 系列和 ARM 系列的 CPU 来说,在内核启动过程中它会将现有物理内存地址全部映射到 0x8000 0000 以上的虚拟地址空间中供内核以后使用。