深入浅出计算机组成原理学习笔记:第四十三讲
我们在前面的章节搭建了最简单的电路,在这里面,计算机的输入设备就是一个一个开关,输出设备呢,是一个一个灯泡。的确,早期发展的时候,计算机的核心是做“计算”。
我们从“计算机”这个名字上也能看出这艺点。不管是中文名字“计算机”,还是英文名字“Computer”,核⼼都是在”计算“这两个字上。不过,到了今天,这些“计算”的贡作,更多的是艺个幕后工作。
我们讨论是使用自己的PC,还是智能手机,这部分时间都是在和计算机进行各种“交互操作”。换句话说,就是在和输入输出设备打交道。这些输入输出设备也不再是个一个开关,
或者一个一个灯泡。你在键盘上直接敲击的都是字符,而不是“0”和“1”,你在显示意器上看到的,也是直接的图形或者文字的画面,而不是一个一个闪亮或者关闭的灯泡。
想要了解这其中的关窍,那就请你和我一起来看一看,计算机里面的输入输出设备。
一、经典的适配器模式
1、硬件设备并不是直接和CPU直接通信的
2、内置在主板上的接口
3、CPU的三级缓存
二、经典的适配模式
1、把接口和实际设备分离
2、软件的设计模式口
3、Windows操作系统
三、CPU是如何控制I/O设备的?
首先是数据寄存器
然后是命令寄存器
而状态寄存器
四、发挥总线的价值
1、MIPS的CPU到底是如何通信
2、IntelX86
这个,其实也有点像我们在设计模式⾥⾯的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硬件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2017-08-15 网络编程基础【day10】:IO多路复用