什么是程序I/O?
它是I/O最简单的形式之一,其中CPU必须完成所有工作。这种技术称为程序I/O。
假设一个用户进程想要使用串行接口在打印机上打印九个字符的字符串“TUTORIALS”。
软件首先在用户空间的缓冲区中组装字符串,如下图所示:
解释
步骤1 - 用户进程通过使用系统调用打开打印机来获取打印机进行写入。
步骤2 - 如果打印机当前正被另一个进程使用,则此系统调用将失败并返回错误代码,或者根据操作系统和调用的参数阻塞,直到打印机可用。
步骤3 - 一旦打印机可用,用户进程就会发出系统调用,告诉操作系统在打印机上打印字符串。
步骤4 - 操作系统通常将包含字符串的缓冲区复制到一个数组中。
步骤5 - 然后它检查打印机当前是否可用。如果不是,则等待直到可用。每当打印机可用时,操作系统就会将第一个字符复制到打印机的数 据寄存器中,在上例中使用内存映射I/O。此操作会激活打印机。字符仍然不会显示,因为某些打印机会在打印任何内容之前缓冲一行或一页。
步骤6 - 在下图中,我们看到第一个字符已打印,并且系统已将“U”标记为要打印的下一个字符。
步骤7 - 每当它将第一个字符复制到打印机时,操作系统就会检查打印机是否已准备好接收另一个字符。
步骤8 - 通常,打印机有一个第二个寄存器,它提供其状态。写入数据寄存器的操作会导致状态变为未就绪。
步骤9 - 当打印机控制器处理完当前字符后,它会通过设置其状态寄存器中的某些位或在其中放置某些值来指示其可用性。
步骤10 - 此时,操作系统等待打印机再次变为就绪状态。
步骤11 - 它打印下一个字符,如第三个图所示。
步骤12 - 此循环持续,直到整个字符串打印完成。
步骤13 - 然后控制权返回到用户进程。
广告