Board logo

标题: [讨论]保护模式下的中断响应时间? [打印本页]

作者: ATLaS     时间: 2003-7-9 00:00    标题: [讨论]保护模式下的中断响应时间?

程序是基于DJGPP V2.03, GCC 3.23的。DPMI HOST用的是CWSDPMI r5和PMODE 1.3。
问题描述:假定程序运行于纯保护模式下(pure protected mode),我想测量系统对硬件中断的响应时间,因为我希望这个时间能够<10微秒。实际上在watcom c + dos4g/w下这一点是可以保证的。

中断信号源:信号发生器,4KHz的方波。接入到机器的IRQ7。
测试程序:纯保护模式,用_go32_dpmi_allocate_iret_wrapper(), _go32_dpmi_set_protected_mode_inerrupt_vector()来设置保护模式下的ISR。ISR非常简单,只是在进ISR的时候向并口写1,出来的时候写0,中间只有一个COUNTER++。在主程序中把除了IRQ7以外的所有的可屏蔽中断(IRQ0~IRQ15)都屏蔽掉,只有一个死循环:for (; {}。而且当dpmi host是cwsdpmi时,通过cwsparam.exe关闭了virtual memory。
测量:把中断信号源和并口的输出信号都接入逻辑分析仪来测量时间差。

这种测试在watcom c + dos4g/w下做过,经过通宵测试最大时间差在10微秒左右。但是在djgpp + cwsdpmi或者pmode下测试时,绝大多数时间内,时间差<6微秒,但有时会突然增大到20、30甚至60~80微秒!我今天的试验程序跑了大概7小时,出现了一次20微秒,一次80微秒!这种情况在那种对实时性稍微有些要求的场合都无法让人满意。

我不知道问题会出在什么地方,如果有,大概也是dpmi host的问题?有没有人做过类似的实验?结果又是如何呢?我在comp.os.msdos.djgpp新闻组上发帖子问过,但还没有人回我。