注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

男儿当自强的博客

每天进步一点

 
 
 

日志

 
 
 
 

WINCE---内核(kernel)---内存架构(memory archtitecture)学习  

2012-02-26 10:02:06|  分类: wince操作系统 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

********************************LoongEmbedded********************************

作者:LoongEmbedded(kandi)

时间:2012.02.26

类别:WINCE系统开发

********************************LoongEmbedded********************************

1.    WINCE内存模型

 

WINCE---内核(kernel)---内存架构(memory archtitecture)学习 - 男儿当自强 - 男儿当自强的博客

 

图1  WINCE5.0和WINCE6.0内存模型对比图

WINCE6.0之前的WINCE操作系统支持的进程最多只有32个,并且每个进程只有32MB的虚拟内存空间,并且所有的进程共享相同的4GB地址空间。在WINCE6.0中,内核进程占用4GB虚拟内存空间的高2GB,每个用户进程都有独立拥有低端的2GB虚拟内存空间,WINCE6.0支持的最大进程数达到32000个。进程数量的实际限制是受物理内存的大小来决定的。之前的WINCE版本,当前的应用在slot0执行,在WINCE6.0中,抛弃了原来的按Slot分配的方式,而是只要你需要你就可以创建内存,每个都有2GB的有效虚拟内存空间。

因为虚拟内存访问是通过内存管理单元MMU转化为物理内存的访问,所以虚拟内存代码是依赖于CPU的。ARM和x86处理器使用硬件页表OEMAddressTable,所以硬件可以直接访问虚拟内存单元。WINCE支持的其他CPU使用一个软件转换旁路缓冲区TLB(translation look-aside buffer,可理解为页表缓冲或是快表)miss handler,这需要完里面填充虚拟内存的内容。

WINCE6.0基于下面的目标来设计虚拟内存管理:

⑴ 每个进程具有大容量的虚拟内存。

⑵ 不存在进程数量的限制。

⑶ 进程直接相互保护。

⑷ 最低程度降低使虚拟内存管理依赖CPU的代码。

⑸ 有效的虚拟内存分配

⑹ 有效的TLB选中处理机制(miss handling)。

 

2.    WINCE虚拟内存分配

 

下面来看WINCE6.0虚拟内存地址空间图,先看内核模式下的虚拟内存地址空间分配。

WINCE---内核(kernel)---内存架构(memory archtitecture)学习 - 男儿当自强 - 男儿当自强的博客

 

图2  内核模式虚拟内存空间分配图

⑴ 静态映射到虚拟内存,有缓冲的,范围为0x80000000~0xA0000000,大小为512MB,通过CPU的cache直接访问物理内存,这段也就是BSP包中g_oalAddressTable映射表对应于物理内存到虚拟内存的映射关系。

⑵ 静态映射到虚拟内存,无缓冲的,范围为0xA0000000~OxBFFFFFFF,大小为512MB,不需要通过CPU的cache,直接访问物理内存。

⑶ 内核XIP DLLs所在的虚拟内存空间,范围为0Xc0000000~0Xc7ffffff,大小为128MB。

⑷ 对象存储区域,范围为0xC8000000~0Xcfffffff,大小为128MB,主要用于存储RAM文件系统、CEDB数据库、基于RAM的注册表和遗留的数据存储(legacy data sore)。

⑸ 内核虚拟内存空间,为内中中装载的所有服务和驱动所共享,范围为0xD0000000~0xDFFFFFFF,大小为256MB,另外的256MB的虚拟内存空间取决于具体CPU,范围为0xE0000000~0xEfffffff。

⑹具体CPU的虚拟内存空间,用于系统调用的陷阱捕获区域,范围为0xF0000000~0xFFFFFFFF,大小为256MB。

 

用户模式下的虚拟内存地址空间分配如下

WINCE---内核(kernel)---内存架构(memory archtitecture)学习 - 男儿当自强 - 男儿当自强的博客

 

图3  用户模式虚拟内存空间分配图

⑴每个进程的进程空间,主要用于可执行代码和数据,用户堆的虚拟内存分配,

范围为0x00000000~0x3FFFFFFF,大小为1GB。

⑵ 用户模式DLLs的代码和数据空间,范围为0x40000000~0x5FFFFFFF,大小为512MB。

⑶ 用于RAM-backed映射文件,范围为0x60000000~0x6FFFFFFF,大小为256MB。

⑷ 共享系统堆,范围为0x70000000~0x7FFFFFFF,大小为256MB。

 

一次只能映射一个虚拟内存,不能直接通过其他进程的虚拟内存地址来访问它们的内存。虚拟内存地址只能在已被进程分配的情况下使用,比如应用程序不能在代码中调用VirtualProtect函数来改变自己已有访问保护。

 

free(可用):可被分配

reserved(保留):虚拟地址被保留,不能再分配。但不能被使用,因为它没有被映射到物理内存。

committed(提交):映射到物理地址。

 

  评论这张
 
阅读(1437)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017