距离cpu比较近的总线速度快,价格昂贵一些,根据重要程度选择总线,cpu不是通过总线直接和io设备相连接的,而是通过设备控制器进行连接的,暂时只需要关注cpu和设备控制器的直接进行的操作。
通过判断状态寄存器是否usy或者ready来决定是否将数据加载到寄存器里。
程序执行时判断状态寄存器是否为busy,如果busy则等待,如果ready则将内存的数据写到exa寄存器中,再将寄存器里的值写数据寄存器里面,此时需要处理数据,所以设置状态寄存器为busy,再将数据加载到命令寄存器中,通过控制电路去打印相应的数据,当打印完成时再将设置为ready,ready时才可以往数据寄存器内写入数据,通过一个中间件来完美地控制打印机的操作。
问题:CPU如何知道将数据发送给哪一个寄存器?
答:例如内存中存在指令 out 0X03B0 exa,out指令将exa的值给端口号为0X03B0的寄存器,将每个不同的寄存器标志为不同的端口,或者将不同的寄存器编址为不同的地址。参考下图。
因为上一篇文章中提到了用户态和内核态,一些out/in指令作为内核态中的指令,只能在操作系统中进行,所以在打印程序进行时必然调用了操作系统的接口,从而使操作系统进行了out操作如下图。