咱们在前面的章节搭建了最简单的电路,在这里面,计算机的输入设备就是一个一个开关,输出设备呢,是一个一个灯泡。的确,早期发展的时候,计算机的核心是作“计算”。
咱们从“计算机”这个名字上也能看出这艺点。不论是中文名字“计算机”,仍是英文名字“Computer”,核⼼都是在”计算“这两个字上。不过,到了今天,这些“计算”的贡做,更多的是艺个幕后工做。
咱们讨论是使用本身的PC,仍是智能手机,这部分时间都是在和计算机进行各类“交互操做”。换句话说,就是在和输入输出设备打交道。这些输入输出设备也再也不是个一个开关,
或者一个一个灯泡。你在键盘上直接敲击的都是字符,而不是“0”和“1”,你在显示意器上看到的,也是直接的图形或者文字的画面,而不是一个一个闪亮或者关闭的灯泡。
想要了解这其中的关窍,那就请你和我一块儿来看一看,计算机里面的输入输出设备。设计模式
这个,其实也有点像咱们在设计模式⾥⾯的Command模式。咱们在总线上传输的,是一个个数据对象,而后各个接受这些对象的设备,再去根据对象内容,进行实际的解码和命令执行。缓存
这是一张我本身的显卡,在设备管理器里面的资源(Resource)信息。你能够看到,里面既有MemoryRange,这个就是设备对应映射到的内存地址,也就是咱们上⾯所说的MMIO的访问方式
。一样的,里面还有I/O?Range,这个就是咱们上⾯所说的PMIO,也就是经过端⼝来访问I/O设备的地址。最后,里面还有一个IRQ,也就是会来⾃于这个设备的中断信号了。操作系统
好了,讲到这里,不知道,如今你是否是能够把CPU的指令、总线和I/O设备之间的关系完全串联起来了呢?我来带你回顾一下。
CPU并非发送一个特定的操做指令来操做不一样的I/O设备。由于若是是那样的话,随着新的I/O设备的发明,咱们就要去扩展CPU的指令集了。
在计算机系统里面,CPU和I/O设备之间的通讯,是这么来解决的。设计
首先,在I/O设备这⼀侧,咱们把I/O设备拆分红,能和CPU通讯的接⼝电路,以及实际的I/O设备自己。接⼝电路里面有对应的状态寄存器、命令寄存器、数据寄存器、数据缓冲区和设备内存等等
。接⼝电路经过总线和CPU通讯,接收来⾃CPU的指令和数据。⽽接⼝电路中的控制电路,再解码接收到的指令,实际去操做对应的硬件设备。
而在CPU这⼀侧,对CPU来讲,它看到的并非已个个特定的设备,而是已个个内存地址或者端⼝地址。CPU只是向这些地址传输数据或者读取数据。所须要的指令和操做内存地址的指令其实没有什么本质差异。
经过软件层面对于传输的命令数据的定义,而不是提供特殊的新的指令,来实际操做对应的I/O硬件。3d