要深入了解WinCE的memory结构,就不得不在这里先画个virtual memory space的图。这个图是针对WinCE 5.0的。由于WinCE 6的结构做了很大变化,关于WinCE 6的内容将在以后介绍。    关于这个图的来源,有两点要说明。其一,绘制这个图的主要依据是Micorsoft一份ppt。其二,在Nasiry的blog上也有一份类似的图(http://www.cnblogs.com/nasiry/archive/2004/11/16/64437.html)。也正是Nasiry的那幅图给我启发,才让我想在这里重新绘制一份,并写下一些说明。
     WinCE 5.0 的virtual memory 分为4GB。其中高位的2GB为Kernel space,低位的2GB为User space。Kernel space可以被拥有权限(运行在Kernel mode)的线程访问。任何线程,可以通过调用SetKMode来让自己切换到Kernel mode或者User mode。低位的2GB,只是理论上可以被任何线程访问,但实际上访问起来也要受到一些限制。这点在下文说明。
     关于Kernel Space:
0x8000 0000 ~ (0xC000 0000 - 1): 这1GB的空间是用来做static mapping的。在WinCE启动时,WinCE会把物理地址通过静态映射到这1GB的空间。其中0x8000 0000 - (0xA000 0000 - 1)的512MB空间是带缓存的映射,另外的高512MB空间是不带缓存的。为什么同样的memory要做两次映射?目前能想到的例子是,当我们使用一片memory,比如FileMapping的方式在多个进程之间共享memory的时候,如果一个进程写,一个进程读,那么这片meomry可能要设置为UnCached,从而保证两边的数据不会因为cache的原因而出现不同步的情况。另外,由于静态映射的地址空间已经确定了,最大为512MB,那么也就限定了WinCE 5.0最多只能管理512MB的memory。 0xC000 0000 ~ (0xC200 0000 -1) 未使用。 0xC200 0000 ~ (0xC400 0000 -1): NK.exe进程被load的位置。 0xC400 0000 ~ (0xE000 0000 -1):OEM可以使用的静态映射空间,具体如何使用尚未遇到过。 0xE000 0000 ~ 0xFFFF FFFF:Trap,KPAGE等地址空间。 关于User space,可以被分为64个,每个为32MB的slots。
0x0000 0000 ~ (0x0200 0000 - 1):Slot0 为当前运行的进程。前面说道每个线程虽然可以放问user space,但时机上,在访问其它进程的空间时,需要获得对那个进程的访问权限。可以通过调用SetProcPermissions 获得对其它进程的访问权限。 0x0200 0000 ~ (0x0400 0000 - 1):slot1 为存放XIP DLL的地方。所谓XIP,就是execute in place的缩写。XIP区域就是可以直接从ROM中执行,不需要load到RAM中的代码。 0x0400 0000 ~ (0x4200 0000 - 1):存放另外31个进程的slot。0x4200 0000 ~ (0x7E00 0000 - 1):object store,share memory(eg. memory mapped files)。可以被所有线程访问。0x7E00 0000 ~ (0x8000 0000 - 1):存放dll的resource。
发表

转载于:https://www.cnblogs.com/googlegis/archive/2008/11/28/2979219.html

WinCE 5.0 virtual memory space相关推荐

  1. hive任务优化-Current usage: 2.0 GB of 2 GB physical memory used; 4.0 GB of 16.2 GB virtual memory used.

    目录 错误背景 错误信息定位 client端日志 APPlication日志 map和reduce单个错误日志 错误分析 解决方案 1. 取消虚拟内存的检查(不建议): 2.增大mapreduce.m ...

  2. linux qemu 报错 Unable to reserve 0xfffff000 bytes of virtual address space at 0x1000 解决方法

    目录 错误现象 可能原因 解决过程 解决方法 错误现象 使用 qemu-i686 运行 i686平台文件 报错 qemu-i686: Unable to reserve 0xfffff000 byte ...

  3. S3C6410 SD Card一键烧写 WINCE 6.0

    S3C6410 SD Card一键烧写 WINCE 6.0 博客迁移至 CSDN 了,感觉 markdown 写的文章就是要好看一些. 关于 S3C6410 安卓编译及烧录的博客在我的博客园里面,就不 ...

  4. 深入理解计算机系统——第九章 Virtual Memory

    深入理解计算机系统--第九章 Virtual Memory 9.1 Physical and Virtual Addressing 9.2 Address Spaces 9.3 VM as a Too ...

  5. DumpMem and Monster - Virtual Memory Explorers on Windows Mobile/CE

    Windows Mobile 5 和 6的平台是建立在CE5.x的基础上的.当可用的内存很少时,平台会自动关闭应用程序.而且,在这个移动平台上,同时只能运行32个process.在桌面电脑上,我们有4 ...

  6. 【计算机基础】 Virtual memory 虚拟内存

    Virtual memory 虚拟内存 虚拟内存的作用 将主存看成存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,高效实用主存 为每个进程提供一致的地 ...

  7. linux 64位内存划分,linux 64位内存空间大小?(linux 64 bits memory space size? [closed])

    linux 64位内存空间大小?(linux 64 bits memory space size? [closed]) 在Linux 32bit中,内核占用1GB的内存,而用户空间将占用剩余的gigs ...

  8. virtual memory exhausted: Cannot allocate memory Linux虚拟内存不足,扩展虚拟内存的解决办法

    Linux虚拟内存不足,扩展虚拟内存的解决办法 virtual memory exhausted: Cannot allocate memory 在编译软件的时候,出现了这个错误: virtual m ...

  9. Docker CI: 安装 SonarQube 异常 max virtual memory areas vm.max_map_count [65530] is too low

    Docker CI: 安装 SonarQube 异常 max virtual memory areas vm.max_map_count [65530] is too low 一.问题 # docke ...

最新文章

  1. 简约而不简单的Django新手图文教程
  2. C++ Primer 第六章 语句
  3. linux学习wdlinux学堂
  4. python获取返回值_python 调用 shell ,获取返回值和返回信息
  5. java多线程机制计时器_java多线程定时器与单例模式
  6. 中缀表达式转后缀表达式 java_中缀表达式转后缀表达式并计算结果Java实现
  7. JS无刷新修改URL类似博客园翻页效果
  8. 人工智能数学基础之线性代数(持续更新)
  9. R语言安装bibliometrix包的代码
  10. Windows android adb interface驱动安装失败 ADB interface驱动安装失败解决方法
  11. visual basic是不是计算机语言,辉煌不再!Microsoft计划结束Visual Basic编程语言
  12. 网络口碑推广主要目的全知道
  13. Registry Workshop —— 强大的注册表编辑工具
  14. java使用微博开发者api步骤
  15. 电脑主板有哪几种结构?
  16. 2023年全国最新工会考试精选真题及答案32
  17. Win7 时间不准不能自动同步,执行w32tm /register发生下列错误: 拒绝访问(0x80070005)
  18. 计算机游戏攻略32关,保卫萝卜3游乐场第32关通关攻略 保卫萝卜3分享
  19. 计算机组成原理 day01 - 第一章
  20. 五分钟理解主存储器的基本组成结构

热门文章

  1. LeetCode 1717. 删除子字符串的最大得分
  2. LeetCode 1428. 至少有一个 1 的最左端列(二分查找)
  3. LeetCode 1200. 最小绝对差
  4. LeetCode 1138. 字母板上的路径
  5. redis 查看key的有效期_redis中key设置过期时间
  6. java中字母用什么单词赋值_Java初学
  7. 珍爱生命,远离大厂政治斗争
  8. 科研福利!国内TOP3的超算中心,免费领2000核时计算资源
  9. Spring Cloud Hystrix的请求合并
  10. 论文浅尝 | Distant Supervision for Relation Extraction