不少汇编程序在in、out指令之后加了几个nop指令,说是等待io指令完成,一般要等几个nop指令的时间?
还有一个问题:如果执行到io指令时刚好程序的时间片用完,发生进程调度,操作系统保存了本程序的上下文而调度其它程序了,那么该io指令完成时已经不是原来的程序了,这不会造成程序逻辑上的错误吗?
------解决方案--------------------------------------------------------
nop 延时只适合简单的io(比如os比较简单就是单任务,或者io速度比较快,几个指令周期就搞定的)
如果io本身比较慢的话,os可能直接把程序切出,调度下一个程序,知道io完成的中断信号过来再唤醒程序.
io指令不会出现你说的那种错误,io的所有参数在os内核有保存,
如果是多任务的话,进程上下文可能也有一个handle指向内核对象,切换的时候其它进程是不管的.
------解决方案--------------------------------------------------------
这是为了让一些慢速设备做好准备或者完成给他的任务作的等待,在以前的PIO设备的
交互代码由会看见很多,对于现在的高速DMA设备,由于存在interrupt事件,所以
可以用更好的方式来解决这个问题。