2008-7-18 21:05:02 ·RSS ·WAP ·加入收藏 ·设为首页

banner
关于Windows Mobile 5和2003的存储杂谈
作者:PLAYBOY111 来源: 发布时间:2008年02月20日 点击数:

有人说,WM5的存储是Windows Mobile的一大改进。

一、关于不同类型的 Flash ROM

的确,对于WM5的Flash存储是一大进步,不过,把全部存储都移到FlashROM上真的好吗?

FlashROM,顾名思义是ROM(Read Only Memory),的确有他的好处:资料存储后不丢失。
FlashROM,普遍上分为NOR(或非门阵列)Flash和NAND(与非门阵列)Flash。
对于大部分用户存储,都使用NAND Flash。原因是其造价低廉(这也是为什么现在的存储卡这么便宜的原因,以前的卡用NOR,现在的卡用NAND),而且可以做到很大的容量,但是存储容易出错(所以需要ECC),工艺不好还会有大量坏块。

NAND型的闪存理论上可擦写次数是100万次,而NOR只有10万次,所以寿命比NOR的高。在读写速度上,NAND型读速度较慢(但写入速度较快)NOR则相反,缺点是组成一个存储单元的晶体管元件比NAND的多,导致相同容量的存储卡NAND的体积大,生产成本也高,所以现在大容量的存储卡都采用NAND型的。(感谢 网友 pda_MAN的修正)。


通常PPC中,NOR用于存放系统、Bootloader。NAND则用于存放用户数据。这也是PPC中出现2个ROM容量指标的原因。

但无论是NOR也好,NAND也好。他们的写入次数是有限的。另外,Flash写入需要整个存储块(512B一个)写入,而且写入只能从0xFF(全1)向下降。

简单来说,Flash的写入操作是把该位的电子导出,使写入的位置成为低电平。也就是说,你无法使Flash中的一个位从0变到1,只能从1变到0。所以改写Flash的时候,通常要先擦除(充电),使该位变为1再写入。
然而事实上并没有这么简单。Flash的写入操作是以块为单位的写入。即是说,如果你只要改变某一块的某一个字节中的某一个位,则整块就会控制芯片被读出,暂存在SRAM中,写入改变的位到SRAM,擦除Flash中的对应块(512B为一块),使该块全为0xFF,再写入。也就是说,只要改变一个字节,哪怕只是一个字节中的1个位,将会导致整块重写。当然,这样的速度也就很慢了。当然速度慢还有其他原因,例如NAND Flash要外加控制芯片,每次只读1个字节,寻址和读取都花费比内存要多地周期等等...

二、关于 Flash ROM 的文件系统

有人试图把临时文件放在Flash上,是不明智的做法,也会使得系统巨慢(针对2003或以前系统来说)。

曾经就有人尝试在PDA上装Linux的时候,把Swap和tmpfs mount到了Flash上,真是看了都心寒(试想一下Linux的Swap在1秒内改写多少次?不足1年就把Flash寿命用尽!)。注:这个是Linux的情况,不是PPC的

现在好了,PPC用户也开始受到国外的影响,对于2003或以前版本的系统,有人为了节省的内存,把各种cache和临时文件的目录相应移到了存储卡上。这样不仅降低了系统的效率,而且还有可能导致存储卡过多写入(导致存储卡过多写入只是可能,关于这个问题下面再讨论)。

然后我们再看Fat/Fat32的存储方式,是使用文件分配表+链式存储。简单来说,每创建、修改一个文件,就会改写文件分配表,而文件分配表却是一块固定的区域。试想象,如果疯狂的往Flash新建文件、删除文件的话,文件分配表无疑是写入次数最多的,这块区域也是最容易坏的。(联想到日后的病毒用此方法来破坏Flash。。。)


三、关于 WM5 的存储机理

对于WM5,先简单解释一下他的存储机理。WM5把不同的Flash映射到一个路径上,也就是说,对于一个给定的路径,他会先寻找NAND Flash(用户存储区),找不到再找VFS(RAM Disk,如果有的话),再找不到再找NOR Flash(Kernel ROM区),再找不到再报错(至于如何解决不一致性和冲突的问题,这里不讨论。)。这样无疑是给数据稳定性带来了很大的帮助。因为所有的数据都优先存储在NAND中。不过,相应的TMPFS和各种临时文件区都放到了NAND Flash中。这可以说是WM5的一个大毛病,不出2年,肯定有大量用户报告内置Flash出现坏区(关于这个问题,只是个人看法。关于WM5对Flash的存储,请看下面的讨论)

解决问题的办法很简单,就是把经常变化的文件目录(TMPFS和各种临时文件目录)放在内存中,反正临时文件掉电丢失也无所谓。(注:现在有人开发出了WM5的RAM Disk驱动,已经附上,请看下面的另一节)

四、关于 WM2003 的Flash解决方案

再来就说一下Windows Mobile 2003的问题了。我现在用的E750已经没办法升级系统了,这是致命的打击。如何使WM2003拥有WM5的Flash解决方案呢?从驱动入手!
我这里提出解决方法:



在logical file system层中,把文件的访问进行映射,例如把某一目录A的任何写入和读取操作映射到另一目录B上(也就是说把另一目录B挂载(mount)到A上,挂载后2者都可以操作,这里暂时不考虑一致性和同步互斥问题)。在VFS层里使用这个方法就可以使得文件写入Flash避免丢失。当然还有更好的处理方法,但都是源于一个思想,在驱动程序里把多个驱动器映射到同一逻辑驱动器上并按照一定的优先级别来进行访问。

驱动程序在WM2003中是可以安装和替换的,现在已经有公司利用更改io control层来实现存储卡的压缩存储(对用户透明,只须装一个驱动)。
但可惜并没有人去开发Flash存储用户文件这种驱动程序。
上述是小弟在搞嵌入式开发和使用PDA过程中的见解,若有不当之处,还望各位DX指点一下。

五、WM5的RAM Disk解决方案!提高你的系统速度!

我认为,WM5肯定对Flash有一定的保护机制,但使用RAM Disk来存储临时文件(特别是浏览器的cache)肯定会把系统速度提高不少的。
RAM Disk程序请看: ramdisk.zip

注意:只适合WM5的机型

使用方法:
ramdisk 你要建立的Ram Disk大小,以KB计算
例如:ramdisk 4096 即建立 4MB的RAM Disk
ramdisk /U 删除Ram Disk,释放内存

据说建立大于8MB的Ram Disk会导致部分机型的驱动程序冲突,建议大家不要建立8MB以上,临时文件也用不了这么多的^_^。

建立RAM Disk后还要用工具把临时文件改放在Ram Disk才可以哦

附上brighthand的连接: http://forum.brighthand.com/showthread.php?t=224727

六、WM5对如何避免Flash的过多写入,大家都来讨论一下

pda_MAN的说法:NAND型的闪存并不是想象中的那么短命,如果是这样的话,INTEL也不会在下一代的PC上推出混合型硬盘了(闪存颗粒+硬盘),军用本本也不采用闪存型硬盘了PS:即使闪存出现坏块也可以格式化把坏块给屏蔽掉。当然为了延长ppc机内闪存寿命可以把经常要读写的文件转移到存储卡上(卡坏了容易换 )

ruby2005的说法:电压低到一定程度,就增加写FLASH的频度,过低的话就关闭交互方式,之后后台直接写FLASH,末了只有在电压恢复到一定水平后(充电后)才能开机。不知有人试过突然拔掉电池后,装WM5的机器会不会丢数据。 所以如果能优化到关机前写Flash的话(排除用户显式要求写FLASH(这在2003中也存在)),对FLASH的伤害还是微不足道的, 否则那些升级为WM5的朋友们可就惨了!

【字体: 】 【收藏】 【打印文章】 【查看评论
用户登录
本月排行TOP10
用户列表
  • 用户名   文章数
  • admin    [1974]
  • league2001    [11]
  • lianfz82    [3]
  • 黑白颠倒    [1]
  • isadon    [0]
  • hnlxlibing2008    [0]
  • 爱车的神    [0]
  • chen76524    [0]
  • 520518999    [0]
  • 520518    [0]
网站统计
  • 晓宇网址导航
  • 游戏网址导航
  • 百乐网址导航
  • 好253网址之家
  • “站长版”遨游浏...
  • TOMPDA