首先,假定操作系统有中断系统。
- 等待的键盘写入的时候,txt进程被read函数阻塞。
- 输入a之后,首先控制器,把扫描到的a放入到了控制器的寄存器中。
- 触发硬中断通知cpu—> 中断IO控制方式,由硬件触发的。键盘读入中断
- cpu触发软中断,调用键盘驱动程序,将a读入到读队列中。
- 然后txt进程从阻塞态,变成就绪态。
- txt进程调用receivefrom函数,将a读入到用户态内存中。
- 之后,调用write函数,发生内核态到用户态的转换,将a写入到写队列中。
- 写队列中有内容,触发硬中断通知cpu----> 缓冲满中断
- cpu触发软中断,调用屏幕的驱动程序。
- 写完之后,触发硬中断,通知cpu已经写完了,cpu读取到了硬件状态寄存器的状态,发现没有问题,就通知显示屏幕显示。----> 屏幕写完中断
总结一下参与者
- txt进程
- 键盘
- 显示器
注意这里没有explore进程和所谓的定时读的进程。因为控制方式是中断方式,所以一旦队列中有内容之后,会触发中断,而不是定时轮询。另外由于键盘和显示屏幕都是字符设备。所以采用中断方式,而不是DMA方式进行IO,那么就是以字节为单位进行的输入输出。一旦有了一个字节到缓冲队列,就会直接触发中断。
最后
键盘输入到内存这一块没啥问题,但是对于屏幕显示,我看有的文章中说,是由某一进程,定时刷新做的。这里还是假定是txt进程进行了系统调用,将内容写到屏幕上。就像ctrl+s,将内容写入到磁盘上一样。