阅读:1591回复:6
请教关于文件系统FAT16缓存的问题
困扰了几天,google无果,特来求救。
将8M的SRAM(外带电池)空间虚拟成一个磁盘,文件格式为FAT16,盘符暂时设定为B: 这个在网上可以down到sample code,有兴趣的可以去MS的网站上看看。 经过测试,发现问题如下: 在虚拟的B盘上copy或delete文件时,文件头总会有2~5秒的延时,就是说copy文件后,数据已经写到相关的RAM里面去了,但是OS的文件系统在构建FAT table时候总是滞后。这样导致的一个后果是,如果copy完文件 2seconds内断电,虽然SRAM有电池,但是这个文件还是不存在,因为文件系统没有把FAT table建立好。实际上数据已经写到SRAM里了,就差文件头没做好。 我在用户态下写了工具sync.exe,通过FlushFileBuffers可以避免这种现象,其作用是使文件系统立即flush cache。但客户不同意这种做法,希望在ram disk的driver里面就修改掉。 请教各位,有什么办法可以做到这点?谢谢! |
|
沙发#
发布于:2008-02-20 13:25
大牛们帮忙
|
|
板凳#
发布于:2008-02-20 16:18
看看FatInitializeVcb的代码:
处理IOCTL_STORAGE_GET_HOTPLUG_INFO或者把设备报告为软盘。 |
|
地板#
发布于:2008-02-20 17:35
AlexSho,如何将设备报告为软盘?
是在FAT文件系统中有一个header, BPB_Media第一项的值吗?我用的是0xF8,"Fixed media type" |
|
地下室#
发布于:2008-02-21 09:11
看FatInitializeVcb的代码
|
|
5楼#
发布于:2008-02-21 10:22
AlexSho, FatInitializeVcb的代码哪里可以down到?google没搜到啊,谢谢您啊
|
|
6楼#
发布于:2008-02-21 12:25
fastfat的代码,IFS或者WDK里面都有,看你的DDK安装目录下有没有
|
|