找回密码
 注册
搜索
查看: 774|回复: 0

[综合资料] Palm OS的内存管理

[复制链接]
发表于 2009-3-19 11:09:27 | 显示全部楼层 |阅读模式
目前,对于计算机内存的管理方式有两种方法:直接访问物理内存(direct physical memory access)和虚拟内存(virtual memory)。当前所有的PC机操作系统都采用了虚拟内存的管理方式。它是基于一个被称为MMU(Memory Management Unit,内存管理单元)的电路结构。它的核心就是为物理内存建立一个相对应的内存地址镜像,供程序访问。例如:对于地址为0x12345678的物理内存单元,MMU会建立一个地址为0xF7D3798E的地址镜像,供程序调用。这样可以允许操作系统在物理内存中进行必要的数据移动;当有其它任务时,系统可以把暂时不用的数据送到硬盘中;或者使得那些在物理内存中分片存放的数据在虚拟内存中表现一片连续的地址单元。而进行以上操作时,尽管数据在物理内存中的地址发生了变化,但是程序不用去关心,他们只需要去访问MMU忠德地址镜像就行了,MMU会自动将数据从不同的地方取出来。

  但是,Palm掌上设备使用的Motorola Dragonball处理器,以及目前其它的兼容机型,都不具备MMU功能。因此,Palm掌上设备中存储的数据往往是不连续的存储在物理内存中的,就像PC机的硬盘中的数据存储方式一样。用户结束某一个程序的时候,大部分的内存单元都会被正常的释放,但是他们中的绝大部分都被切割成很小的数据区块,以至于不能被分别有效地利用。当拥有MMU时,当然能够很方便的解决这个问题。但是在没有MMU的情况下,Palm掌上设备选择了另外一套内存管理方法来管理内存。

  Palm OS的开发者使用了“handle(句柄)”机制来解决这个棘手的问题。一个句柄就像是虚拟内存系统中的一个虚拟地址:它并不是直接对应某个物理内存地址,而是通过建立一个映射表的方式找到一个实际的物理内存地址。当一个程序准备利用句柄来访问一段存储单元时,它将首先锁定(lock)这部分存储单元。锁定的方式时通过访问这段物理内存,然后返回一个这段地址的首地址的地址指针(pointer)。当句柄锁定了一段存储单元以后,操作系统或其他程序将无法对这个句柄对应的存储单元进行操作,只能是调用这个句柄的程序能够对其进行操作。当程序完成对这部分存储单元的访问之后,句柄会释放地址指针,这也就意味着系统或其他程序能够访问这段存储单元了。

  在Palm掌上设备中,对database的访问就是一个典型的句柄应用。访问database的函数通常会返回一个句柄。如果要访问其中的数据的话,你需要锁定这个句柄,获得地址指针。当你完成对数据的访问后,你应该对句柄解除锁定,操作系统就会收回这段存储单元,用于其它用途。

  当Palm OS系统发现存储器空间不够时,或者当掌上设备被重新启动时,系统就会开始内存碎片整理程序(defragment)。用户也可以通过调用一个相应的函数的方法在任何时候进行碎片整理工作。尽管这是个对提高系统运行效率很有帮助的工作,但是由于它一般会花费很长时间,因此用户往往不会主动来进行碎片整理。当一台Palm掌上设备在启动时花费了超过1分钟,那么肯定是系统在整理存储器的碎片。

  在编程中,开发人员应该有尽可能释放句柄的习惯。同样,也不要在释放了一个句柄之后,还在继续使用与之对应的地址指针。因为一旦某个句柄被释放,系统就会用该句柄的指针所指的内存空间来存放其它的数据。这个时候,如果你的程序还像以前那样访问这部分存储单元的话,就会被这部分毫不相干的数据引起错误甚至系统崩溃。这里还有另外一个问题——这也是Palm OS系统没有采用MMU的一个严重后果:Palm系统没有内存保护机制。开发人员可以通过程序对存储器的任何位置进行读写操作,包括存放重要系统信息的存储空间。由于没有内存保护机制,当开发者的程序一不小心对系统文件进行了修改时,Palm不可能像PC机那样通过显示蓝屏、GPF(一般保护行错误)警告、或者核心数据转储(core dump)来阻止你对系统信息的误操作。(这个说法可能不是太严密,主要是因为Dragonball处理器对内存访问权限方面还是有一些限制的。但是事实上对内存的随机的读写操作会导致违反该限制,从而导致“bus error,总线错误”)
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-10-8 06:29 , Processed in 0.052676 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表