wangson
驱动牛犊
驱动牛犊
  • 注册日期2006-05-12
  • 最后登录2010-07-26
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望39点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:1590回复:6

请教关于文件系统FAT16缓存的问题

楼主#
更多 发布于:2008-02-19 15:38
困扰了几天,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里面就修改掉。

请教各位,有什么办法可以做到这点?谢谢!
wangson
驱动牛犊
驱动牛犊
  • 注册日期2006-05-12
  • 最后登录2010-07-26
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望39点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-02-20 13:25
大牛们帮忙
AlexSho
驱动牛犊
驱动牛犊
  • 注册日期2008-01-10
  • 最后登录2017-12-01
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望164点
  • 贡献值0点
  • 好评度45点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2008-02-20 16:18
看看FatInitializeVcb的代码:
处理IOCTL_STORAGE_GET_HOTPLUG_INFO或者把设备报告为软盘。
wangson
驱动牛犊
驱动牛犊
  • 注册日期2006-05-12
  • 最后登录2010-07-26
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望39点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-02-20 17:35
AlexSho,如何将设备报告为软盘?
是在FAT文件系统中有一个header, BPB_Media第一项的值吗?我用的是0xF8,"Fixed media type"
AlexSho
驱动牛犊
驱动牛犊
  • 注册日期2008-01-10
  • 最后登录2017-12-01
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望164点
  • 贡献值0点
  • 好评度45点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2008-02-21 09:11
看FatInitializeVcb的代码
wangson
驱动牛犊
驱动牛犊
  • 注册日期2006-05-12
  • 最后登录2010-07-26
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望39点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-02-21 10:22
AlexSho, FatInitializeVcb的代码哪里可以down到?google没搜到啊,谢谢您啊
AlexSho
驱动牛犊
驱动牛犊
  • 注册日期2008-01-10
  • 最后登录2017-12-01
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望164点
  • 贡献值0点
  • 好评度45点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2008-02-21 12:25
fastfat的代码,IFS或者WDK里面都有,看你的DDK安装目录下有没有
游客

返回顶部