最近在处理U盘操作出现系统卡死的问题
现象描述:
1.U盘在转储文件(将设备上文件拷贝到U盘上),有概率出现拷贝卡死,从而导致系统死机(通过插拔U盘,偶尔能够恢复正常)
2.文件并不大,大小也没有太大关心
3.部分U盘容易出来,其他不容易出来
4. 实验模拟,已经排除其他因素。当出现卡死的情况,是因为 CreateFile (创建一个空的文件)没有返回导致的,估计系统底层卡死了
卡死之后,也不能进行其他文件操作,如果操作就系统死掉
尝试了很多方法,基本排除其他因素
后来,发现有一处奇怪地方:
在copy文件的之前,有一个操作 delete。也就是 不管文件是否已经存在U盘,都先delete,然后再对文件进行copy。
逻辑上,这样做并没有错误。
但实际效果,这样做的确存在很大概率性问题,由于CreateFile是API函数,也没底层函数,所以没办法跟踪究竟卡在什么流程上
分析:
当U盘插入时,系统仅仅识别到U盘,并没有读取文件系统?
如果读取文件,是否会读取文件系统?貌似只有有delete或写文件时,才能完整读取文件系统
不知道是否这样。当然也只有这样,系统处理才会快!
先给系统一个删除文件的指令,此时系统发现该U盘未曾识别(文件系统没有缓冲等),系统先加载文件系统
然后给一个创建文件的指令,等系统加载好文件系统,发现删除文件与创建文件存在冲突,估计有锁或保护措施,导致死等!
这样问题就出来了。