嵌入式操作系统的内存管理(之一)

最近看书,关于wince和arm-linux的内存管理
复杂在有MMU的部分。
arm-linux的资料比较多,基本原理是这样的:

操作系统的虚拟内存空间:
低3G属于应用程序/高1G属于linux操作系统

arm对内存地址的划分:
4个区块,每个区块1G,DRAM是从0xc00000000000开始的
这个区块里的虚拟地址是和物理地址重合的,当然也不是全部映射的。
而低3G的空间则是浮动的,要根据MMU的转换来完成。

关于页表:
MMU需要和TLB配合来完成快速地址转换。
对于strongarm页的大小是4k,操作系统要维护一个一级页表和二级页表
一个虚拟地址(CPU发出的)高12位用来索引一级页表,所以一级页表有
4096项,每项有4个字节,共占用16KB.
一级页表中的8位用来索引2级页表,所以2级页表有256项.
2级页表中有多少项本来是由页面大小决定的,但ARM统一把4K/1K/64K统一
为256项的2级页表。大页面的时候,256项中有部分连续的项目是重复的。

值得注意的是调入是按页进行的。--TLB还是DCACHE?



WINCE3.0
看了一下MSDN,WINCE的内存空间是这样描述的。

页面大小和ARM-LINUX的相似
每个进程的虚拟空间大小有32M,奇怪为什么ARM-LINUX的可以是3G

WINCE3.0中的RAM分为object store和program两部分。object store类似一个不掉电的RAM,系统进入休眠模式后再重新启动时会查看object
store以便快速恢复。program供给用户程序使用。而他们之间的界限是
可以调节的,这个在PPC控制面板里可以看见,有的应用程序需要大内存时,可以调这个划分。

posted on 2004-07-08 11:09  embed  阅读(3049)  评论(0编辑  收藏  举报

导航