WINCE对象存储区(object store)

来源:互联网 发布:电脑网络异常wifi能用 编辑:程序博客网 时间:2024/06/15 17:18

 备注:这里object store应该理解为对象存储区区比对象存储区更为合适

 

1.       对象存储区概述

WINCE设备在更换主电池的时候,只要备用电池为RAM提供电源,那么WINCE对象存储区就能够为应用程序和其数据提供持久存储,在物理上,对象存储区是保存在非易失性RAM芯片中,这是微软设计的目标。但是我们的WINCE设备只有主电池,也没有非易失性RAM芯片,所以在更换电池或是冷启动的时候,保存在根目录下的文件和数据都会丢失。

 

从概念上讲,对象存储区包含文件系统、数据库和系统注册表这三种类型的持久性存储,虽然文件系统、数据库和系统注册表共享一个内存堆,从物理的角度上,但它们不一定保存(reside)在对象存储区上。它们可以保存在ROM中,在独立安装的系统中,或是一个外部设备中,比如flash存储设备。数据的创建和检索是通过存储类型来实现的,这独立于实际的存储设备。

 

OS使用对象存储区来执行下面任务:

⑴管理堆和内存栈

⑵必要时,压缩和扩展文件。

⑶无缝集成基于ROM的应用程序和基于RAM的数据。

 

对象存储区中数据的存储机制是交互的(transaction-based),如果在向对象存储区中写数据的时候,电源中断了,WINCE要么通过在系统重启的时候完成此操作,要么在中断前通过恢复到最后已知的状态,这样WINCE确保对象存储区没有被损坏。对于系统文件,包括注册表设置,如果被定义用来保存当前设置的系统没有备份,这种机制意味着可以从ROM中重新加载原始的设置。

 

 

RAM文件系统最大大小为128MB,单个文件的最大大小是是32MB,在对象存储区中支持最多大约为400万个对象。

 

2.       对象和对象标示符(objects and objects identifiers)

一个对象被定义为以下类型之一:

⑴注册表中的一个键

比如,[HKEY_CURRENT_USER\ControlPanel\PowerControl]

⑵注册表中的一个值

比如[HKEY_CURRENT_USER\ControlPanel\PowerControl]

         "PowerControlSelect"=dword:0

⑶一个文件

⑷一个4KB块大小的文件数据,比如,一个包含12KB的文件,它有一个文件对象和3个4KB数据块的12KB的文件,它们都是对象。

⑸数据库中的一条记录,最多可容纳4KB的数据

⑹数据库中一条记录的扩展信息,它可以是一个4KB的额外数据。

⑺一个数据库

⑻一个数据库卷(A database volume)

WINCE为对象存储区中每个对象指定一个唯一的CE标示符(CEOID),CEOID最主要的作用是用来访问对象数据和获取对象数据,比如访问数据库记录。因为CEOID只是保证一个卷(volume)而不是在多个卷中对象标示符的唯一性,WINCE还需要为每个数据库卷一个预定义的CE全球唯一标示符(CEGUID),使用CEGUID连同CEOID作为对象存储区和数据库卷中每个对象唯一标示符,访问或是控制对象的任何信息的第一步是要获取一个对象的标示符。

 

3.       对象存储区大小

对象存储区最大为128MB,这块存储区可压缩、非易失性和RAM存储,对象存储区的大小可以以用于应用程序和相关数据持久存储的需求来定制大小,有下面三种的调整方式:

⑴在冷启动的时候,通过使用config.bib配置文件的配置项FSRAMPERCENT来设置对象存储区的默认大小。

⑵用户可以通过使用控制面板system下面移动滑动条来重新分配存储内存(也就是对象存储区)和程序内存的大小。

图1

⑶一个受信任的应用程序能够调用SetSystemMemoryDivision函数来设置对象存储区的大小。

 

对于热启动,对象存储区大小没有改变,而只能被一个特权的运行时应用程序或是用户通过控制面板的应用来修改对象存储区的大小。对于冷启动,只有FSRAMPERCENT的设置没变,那是因为它被编译到ROM的镜像文件中,就算是一个持久的注册表或是一个持久的文件系统已经被挂载作为根文件系统,也不会改变。比如,用户使用控制面板设置对象存储区大小,接着用户关闭设备,然后重启,如果持久化被使用,那么所有用户数据就存在。但是,对象存储区还是被设置为默认的大小。