Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:2141回复:23

把实时的数据存储到硬盘上,怎么操作比较好?熟悉文件系统的水友提提意见

楼主#
更多 发布于:2004-08-05 10:50
用户被禁言,该主题自动屏蔽!

最新喜欢:

cyliucyliu
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-08-05 10:55
直接写扇区可能更快一点,因为不要经过FAT表的查找,转换中间过程。
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2004-08-05 10:57
用户被禁言,该主题自动屏蔽!
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-08-05 11:14
直接读写扇区的文章好象本站就有啊。
不过你写进去,还要能正确的读出来,当然不能靠WINDOWS的文件系统了。
另外,每次写63扇区,并且个各扇区连续,就可以达到硬盘的速度极限,如果速度也不能满足你,就想别的办法了。
GHOST在这方面做的很好,用GHOST恢复一个分区的速度,基本上就是该硬盘的极限速度。不过有的牌子的硬盘有点例外。
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2004-08-05 11:31
用户被禁言,该主题自动屏蔽!
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-08-05 11:51
唯一能做的就是,保证扇区连续,另外一次写的数据不要超过一个磁道的容量,一般是63*512。
另:上面说的并不是没有意义,无非是你自己写个专用的读写函数,函数中用OFFSET参数就行了。关键是考虑极限速度能不能达到你的要求。
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2004-08-05 12:19
用户被禁言,该主题自动屏蔽!
Gong_XG
驱动太牛
驱动太牛
  • 注册日期2002-10-01
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分313分
  • 威望46点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-08-05 12:30
我曾做过一个存储实时数据的,好像一次存9999个没问题,再多了就出错!只好多次存储!
当时也没查处问题原因!
RED_spring
驱动中牛
驱动中牛
  • 注册日期2002-07-28
  • 最后登录2016-11-06
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望19点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2004-08-05 12:56
常用的是做一个队列,每次的写请求都入队列,并触发一个Event。

系统线程里等待这个Event,每次触发就把队列里的写请求清空。(当然,数据也要写上去 :D :D)
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2004-08-05 13:46
用户被禁言,该主题自动屏蔽!
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
10楼#
发布于:2004-08-05 14:38
直接通过IO写硬盘扇区速度很慢,还是通过文件系统的好,我曾经尝试写一个类似CIH的2K/XP下RING0病毒,直接写硬盘扇区,发现速度很慢就放弃了,郁闷。。。。。。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
AthlonxpX86
驱动小牛
驱动小牛
  • 注册日期2002-11-10
  • 最后登录2013-07-17
  • 粉丝0
  • 关注0
  • 积分29分
  • 威望43点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-08-05 15:31
我现在的做法是在运行一个系统线程,将实时的数据用ZwWriteFile向文件里写。大家提提建议,可能请不了大家吃饭,但是分数相送没问题。
这个数据量比较大,每秒15MByte/s。

首先绝对不可能实时的,这违背多任务操作系统的基本思想,NTZwWriteFile引起I/O管理器工作,一般情况这将调用文件系统驱动的快速I/O.快速I/O与Cache管理器一起工作,将数据cache.(因此不会实时写硬盘,不过将加快数据传输速率)如果没有快速I/O,I/O管理器发送IRP_MJ_WRITE给文件系统驱动程序,驱动程序处理解析产生IRP,然后将IRP传递给位于I/O堆栈的下一个驱动程序处理.....以此类推,最后将写入硬盘。


一般情况下中不过要达到15MByte/s是绝对可以的,现在的硬盘一般都能达到25MByte/s。
在NT系统中如果是大数据量的文件传输操作,应该使用异步I/O用信号量来通知APP读写操作的完成情况,

给分吧,我最需要分,DDK2003正愁没分下载!!!
AthlonxpX86(桃源村)
RED_spring
驱动中牛
驱动中牛
  • 注册日期2002-07-28
  • 最后登录2016-11-06
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望19点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2004-08-05 16:10
如果持续15MByte/s的速度的话对系统性能会有点影响哦。 用ZwWriteFile 基本上就凑合了。我试过1G的数据大概就是1分钟多一些。
hzhq1
驱动老牛
驱动老牛
  • 注册日期2002-12-13
  • 最后登录2012-03-29
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望1054点
  • 贡献值0点
  • 好评度606点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-08-05 16:23
直接通过IO写硬盘扇区速度很慢,还是通过文件系统的好,我曾经尝试写一个类似CIH的2K/XP下RING0病毒,直接写硬盘扇区,发现速度很慢就放弃了,郁闷。。。。。。


是数据直接写入物理扇区?
还是写到硬盘的缓冲区后,待空闲或缓冲满,硬盘控制器再将缓冲内容写入物理扇区?


这是一个,一个风雨交加的,漆黑的夜晚......恩,情节越来越复杂了。
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2004-08-05 16:24
用户被禁言,该主题自动屏蔽!
hzhq1
驱动老牛
驱动老牛
  • 注册日期2002-12-13
  • 最后登录2012-03-29
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望1054点
  • 贡献值0点
  • 好评度606点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-08-05 16:25
用API的WriteFile写普通的IDE硬盘,
速度大约能到多少啊?

这是一个,一个风雨交加的,漆黑的夜晚......恩,情节越来越复杂了。
hzhq1
驱动老牛
驱动老牛
  • 注册日期2002-12-13
  • 最后登录2012-03-29
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望1054点
  • 贡献值0点
  • 好评度606点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-08-05 16:28
IDE标称传输速度、硬盘缓冲大小、PCI-IDE接口速度等等因素,
对传输速率有什么影响啊?


恩,反正偶没做过,
乱问一通再说
 :D
这是一个,一个风雨交加的,漆黑的夜晚......恩,情节越来越复杂了。
hzhq1
驱动老牛
驱动老牛
  • 注册日期2002-12-13
  • 最后登录2012-03-29
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望1054点
  • 贡献值0点
  • 好评度606点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-08-05 16:29
我已经实现了不丢数据了。
但是想问问大家有没有更好的操作方法。谢谢。

 


众多水鬼们强烈要求资源共享
 :P
这是一个,一个风雨交加的,漆黑的夜晚......恩,情节越来越复杂了。
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
18楼#
发布于:2004-08-05 16:44
用户被禁言,该主题自动屏蔽!
hzhq1
驱动老牛
驱动老牛
  • 注册日期2002-12-13
  • 最后登录2012-03-29
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望1054点
  • 贡献值0点
  • 好评度606点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-08-06 10:55
继续关注中
这是一个,一个风雨交加的,漆黑的夜晚......恩,情节越来越复杂了。
上一页
游客

返回顶部