我在开发板上面研究拔卡以后进程退出的过程,做了一些实验。
有一些问题搞不清楚,希望与各位老师同学们一同讨论。
WinCE系统 插入 SD卡 以后 程序在上面运行, 而且(读写)卡 上面的文件。
在此过程中拔掉 卡,在上面运行的程序(正在读取上面的文件)程序就会失去响应。
用 进程管理器 也无法关闭。
进程至少要能够被kill掉吧,
变成连TerminateProcess也消除不了的zombie进程,这是为何?
不只是我写的程序, 好多软件都是这样。
比方说: 一些导航软件
现在PND上的导航软件,大都具有拔卡自动退出的功能。但并不完美,还有down掉系统的可能。
有谁研究过这个功能是怎样做的吗?
拔卡操作,在SD协议栈里面,不是SD主控制驱动所做的事情,这部分在客户端驱动与总线驱动里面去处理。
在拔卡以后,系统会有哪些动作?
有些时候程序收不到拔卡的通知消息,还有些时候整个系统都会down掉。
这是为什么?
系统在装载exe与dll的时候,是通过内存映射的方式来把exe/dll内容映射到内存。
在装载的时候,可以用pe section的标志位来控制:
是把exe/dll的内容复制到物理内存,
或者不全部复制,用到的时候再从文件来访问。
现在的发现是:
如果,
修改pe section的标志位,使得在装载的时候,把exe/dll的内容复制到物理内存,
程序就不至于变成zombie进程,至少可以kill掉。
不过,
占用的物理内存比较多。
除了这样做(修改pe section),还有没有其它办法?
创建进程的时候, exe/dll是从文件映射到内存的,
(如果装载的时候,没有复制到物理内存,)
拔卡以后,系统会做下述没有意义的事情: 尝试从卡上“读取”exe/dll文件,
是不是呢?
这种情况下,会出现什么结果呢?