none
WinCE系统上移除SD卡后,上面运行的进程无法无法强制关闭 RRS feed

  • 问题

  • 我在开发板上面研究拔卡以后进程退出的过程,做了一些实验。
    有一些问题搞不清楚,希望与各位老师同学们一同讨论。

    WinCE系统
    插入SD 以后 程序在上面运行, 而且(读写) 上面的文件。
    在此过程中拔掉 卡,在上面运行的程序(正在读取上面的文件)程序就会失去响应。

    进程管理器 也无法关闭。

    进程至少要能够被kill掉吧,
    变成连TerminateProcess也消除不了的zombie进程,这是为何?

     

    不只是我写的程序, 好多软件都是这样。
    比方说: 一些导航软件
    现在PND上的导航软件,大都具有拔卡自动退出的功能。但并不完美,还有down掉系统的可能。

    有谁研究过这个功能是怎样做的吗?

     

    拔卡操作,在SD协议栈里面,不是SD主控制驱动所做的事情,这部分在客户端驱动与总线驱动里面去处理。

    在拔卡以后,系统会有哪些动作?

     

    有些时候程序收不到拔卡的通知消息,还有些时候整个系统都会down掉。
    这是为什么?

    系统在装载exedll的时候,是通过内存映射的方式来把exe/dll内容映射到内存。
    在装载的时候,可以用pe section的标志位来控制:
    是把exe/dll的内容复制到物理内存,
    或者不全部复制,用到的时候再从文件来访问。

    现在的发现是: 
    如果,
    修改pe section的标志位,使得在装载的时候,把exe/dll的内容复制到物理内存,
    程序就不至于变成zombie进程,至少可以kill掉。
    不过,
    占用的物理内存比较多。
    除了这样做(修改pe section),还有没有其它办法?

     

    创建进程的时候, exe/dll是从文件映射到内存的,
    (如果装载的时候,没有复制到物理内存,)
    拔卡以后,系统会做下述没有意义的事情: 尝试从卡上读取”exe/dll文件,

    是不是呢?

    这种情况下,会出现什么结果呢?

     

    2010年2月4日 9:13

全部回复