为什么要在中断驱动的IO中打印字符串,只需要复制第一个字符?

时间:2016-04-27 18:56:45

标签: io operating-system driver interrupt

我在网上找到的几乎所有材料都参考了Tananbaum的OS书中的以下代码。但是我真的不明白为什么会打印整个字符串而不是第一个字符。

是否因为中断将以递归方式生成?但这不会花费大量资源吗?或者我错过了什么?

我真的很困惑。任何帮助将不胜感激。

打印系统调用时执行的代码:

copy_from_user (buffer, p, count);
enable_interrupts ();
while (*printer_status_reg !=READY);
*printer_data_register = p[0];
scheduler ();

中断处理程序:

if (count == 0) {
  unblock_user ();
} else {
  *printer_data_register = p[i];
  count = count – 1;
  i++;
}
acknowledge_interrupt ();
return_from_interrupt ();

1 个答案:

答案 0 :(得分:1)

您在缓冲区中写入第一个字符并开始传输。 传输完成后,将生成Tx_Complete中断。

现在,您的中断处理程序会检查是否还有要传输的字节(else部分)。如果可用,它将下一个字节添加到发送寄存器,减少要发送的字节数并增加缓冲区索引。

此过程继续......当要传输的字节数达到零时,您不会启动下一次传输,并且您的中断将停止。

通过传输第一个字节,启动进程,其余字节由中断处理程序传输。您必须确保count正确无误。 你可以猜测,如果数量少于或多,可能会发生什么!