揭秘计算机奇迹:探索I/O设备的神秘世界!
引言
在之前的章节中,我们详细讲解了计算机系统中一些核心组成部分,如中央处理器(CPU)、内存、硬盘等。这些组件负责处理和存储数据,使得计算机能够有效地运行。然而,除了这些核心组件,计算机系统还包含许多其他重要的部分,其中之一就是输入输出设备。它们使得计算机能够与用户进行有效的沟通和交流,提升了计算机的实用性和用户体验。因此,在学习计算机系统的过程中,深入了解输入输出设备的原理和工作方式也非常重要。
输入输出设备

I/O接口,又被称为I/O控制器或设备控制器,是一种负责协调主机与外部设备之间数据传输的关键组件。其主要功能是管理数据的输入和输出,在数据传输过程中起到桥梁的作用。通过有效地控制和调度数据流,I/O接口能够实现高效的数据传输,提升系统的整体性能。

I/O控制器涵盖了多种多样的类型和标准。其中,针对不同外部设备的控制需求,相应的I/O接口也会制定相应的标准。举例来说,我们有用于控制USB设备的I/O接口,它提供了可靠的数据传输和连接性能,使得计算机可以方便地与各类USB设备进行通信。另外,还有用于控制SATA 3.0硬盘的I/O接口,它支持高速数据传输,并具备热插拔和高可靠性的特点。


如今,随着技术的不断进步和集成电路的发展,现代的I/O接口(芯片)也趋向于被集成到南桥芯片内部。
CPU如何控制I/O设备
程序直接控制和中断控制方式

- 首先,我们来讨论数据寄存器(Data Register)。当CPU需要将数据写入I/O设备时,例如打印内容为“GeekTime”,首先要将字符“G”发送给对应的I/O设备。
- 接下来是命令寄存器(Command Register)。CPU向打印机发送一个命令,告诉它开始打印工作。此时,打印机的控制电路将执行两个动作。首先,它会设置状态寄存器中的状态为not-ready,表示打印机正在工作中。然后,它会实际操作打印机进行打印。
- 而状态寄存器(Status Register)的作用是向CPU报告设备状态。当设备开始工作时,状态寄存器会告知CPU设备正在工作中。在这个阶段,CPU发送的任何数据或命令都是无效的。只有当前面的动作完成,状态寄存器重新变为ready状态时,CPU才能发送下一个字符或命令。
现在,让我们讨论快速的I/O设备(如磁盘),如果每准备好一个字就向CPU发送一次中断请求,会导致什么问题呢?
这种情况下,CPU需要花费大量的时间来处理中断服务程序,从而导致CPU利用率严重下降。每次中断请求都会打断CPU正在执行的任务,使其无法充分利用时间进行其他计算工作。这种频繁的中断请求会导致CPU的效率下降,影响系统的整体性能。
为了解决这个问题,可以采取一些优化措施。例如,可以引入缓冲区,将多个字节的数据一次性传输给CPU,减少中断请求的次数。另外,也可以使用DMA(直接内存访问)技术,将数据直接传输到内存,减轻CPU的负担。通过这些优化措施,可以提高CPU的利用率,提升系统的整体性能。
DMA存取方式

DMA控制方式是一种优化技术,它通过在主存和设备之间建立一条直接数据通路(DMA总线)来实现高速数据传输。在这种方式下,CPU只需向DMA接口发送读/写命令,并指示主存地址、设备地址以及读写数据的数量等参数,然后DMA控制器便会自动控制设备与主存之间的数据读写操作。
具体而言,当CPU发出读/写命令后,DMA控制器会通过DMA总线直接访问设备,并将数据传输到主存或从主存传输到设备。为了保证数据的完整性,在每传输一整块数据(如1KB)后,DMA控制器才会向CPU发出一次中断请求,通知CPU数据传输已完成。这样,CPU就能够及时处理其他任务,而不需要等待每个数据传输的完成。
通道控制方式

有的商用中型机、大型机可能会接上超多的I/0设备。如果都让CPU来直接管理这些设备的数据传输和操作,那么CPU的负担将会非常沉重,无法充分发挥其处理计算任务的能力。为了解决这个问题,引入了通道的概念。
通道是具有特殊功能的处理器,可以将CPU与I/0设备之间的通信过程进行统一管理。通道有自己的数据寄存器、命令寄存器和状态寄存器,可以完成与I/0设备之间的数据传输、设备控制和错误处理等任务。CPU只需要发送指令给通道,然后通道会自动完成与设备之间的数据传输和操作,不再需要CPU的直接参与。

通道可以被理解为是一种功能较为有限的处理器,类似于“弱鸡版的CPU”,它能够识别并执行一系列通道指令,通常这些指令的种类和功能比较单一。
信号和地址
一旦我们理解了实际的I/O设备和接口之间的关系,就会面临一个新的问题:CPU到底需要向总线发送怎样的命令,才能与I/O接口上的设备进行通信呢?
在计算机系统中,CPU和I/O设备之间的通信是通过CPU支持的特定机器指令来实现的。这些机器指令被称为I/O指令,用于控制和操作I/O设备。CPU可以使用这些指令来发送命令、读取数据、写入数据以及查询设备状态等操作。
为了简化已经足够复杂的CPU,计算机系统将I/O设备的各个寄存器和I/O设备内部的内存地址都映射到主内存地址空间中。主内存的地址空间中会为不同的I/O设备预留一段一段的内存地址。当CPU想要与这些I/O设备进行通信时,它会向这些预留的地址发送数据。
而我们的I/O设备会监控地址线,并在CPU向其发送数据时,将传输过来的数据接入到对应设备的寄存器和内存中。无论是向I/O设备发送命令、查询设备状态还是传输数据,CPU都可以通过这种方式进行。这种方式被称为内存映射I/O(Memory-Mapped I/O,简称MMIO)。

CPU 和 I/O 设备之间的通信
在计算机系统中,CPU和I/O设备之间的通信是通过以下方式来解决的。
首先,在I/O设备一侧,我们将I/O设备分成可以与CPU通信的接口电路和实际的I/O设备本身。接口电路包含状态寄存器、命令寄存器、数据寄存器、数据缓冲区和设备内存等组件。接口电路通过总线与CPU通信,接收来自CPU的指令和数据。接口电路中的控制电路会解码接收到的指令,并实际操作相应的硬件设备。
而在CPU一侧,CPU通过访问内存地址或端口地址进行数据的传输和读取。对于CPU来说,它并不直接与特定设备进行交互,而是通过读写特定的内存地址或端口地址来实现与I/O设备的通信。在软件层面,通过定义传输命令和数据的方式,而不是引入新的指令,来实际操作对应的I/O硬件。这样,CPU可以通过与接口电路的通信来与I/O设备进行交互,完成输入和输出的功能。
总结
本文主要介绍了计算机系统中输入输出设备的原理和工作方式。输入输出设备是计算机系统中的重要组成部分,它们使得计算机能够与用户进行有效的沟通和交流。文章介绍了I/O接口的功能和作用,以及不同类型的I/O接口的标准。同时,还介绍了CPU如何控制I/O设备的程序直接控制和中断控制方式,以及使用DMA和通道控制方式进行优化的方法。最后,文章解释了CPU和I/O设备之间的通信方式。通过深入了解输入输出设备的原理和工作方式,可以更好地理解计算机系统的工作原理,提升系统的整体性能。
揭秘计算机奇迹:探索I/O设备的神秘世界!的更多相关文章
- BIOS启动项中的设备都有哪些
Floppy 软式磁盘驱动器,简称FDD,也就是我们平时所说的软驱. CD-ROM 不用多说了,大家都知道,这是光盘驱动器,也就是我们平时说得光驱. SCSI SCSI的全名是:Small Compu ...
- 关于Linux虚拟化技术KVM的科普 科普二(KVM虚拟机代码揭秘)
代码分析文章<KVM虚拟机代码揭秘--QEMU代码结构分析>.<KVM虚拟机代码揭秘--中断虚拟化>.<KVM虚拟机代码揭秘--设备IO虚拟化>.<KVM虚拟 ...
- 多设备同时进行monkey抗压测试
adb工具操作monkey抗压测试. 首先得安装adb工具,且配置好环境配置.推荐链接: 安装方法:https://blog.csdn.net/L_201607/article/details/781 ...
- usb设备运行不正常的解决方法(转)
add by zhj:上午鼠标还用的好好的,下午就不能用了,插上之后提示“跟这台计算机连接的一个usb设备运行不正常”,尼玛,什么情况?我今天没安装软件啊,换了个USB接口也不行,在另一台电脑上试还是 ...
- [Linux 001]——计算机和操作系统的基础知识
在正式开始学习 Linux 操作系统之前,有必要先回顾/学习一下计算机和操作系统的基本知识,为我们在后续的学习中铺路搭桥,在了解计算机一些基础原理的条件下再去进行学习,理解应该会更透彻一些.我会从一个 ...
- spring-session(一)揭秘
前言 在开始spring-session揭秘之前,先做下热脑(活动活动脑子)运动.主要从以下三个方面进行热脑: 为什么要spring-session 比较traditional-session方案和s ...
- 计算机组成原理 — CPU 中央处理器
目录 文章目录 目录 前文列表 逻辑电路部件 组合逻辑电路 时序逻辑电路 阵列逻辑电路 中央处理器(CPU) 控制单元(控制器) 运算单元(运算器) 存储单元(寄存器组和片内缓存) CPU 的工作原理 ...
- 【VS开发】【DSP开发】浅谈Linux PCI设备驱动(一)
要弄清楚Linux PCI设备驱动,首先要明白,所谓的Linux PCI设备驱动实际包括Linux PCI设备驱动和设备本身驱动两部分.不知道读者理不理解这句话,本人觉得这句话很重要,对于PCI.US ...
- 【VS开发】设备控制台 (DevCon.exe) 示例
设备控制台 (DevCon.exe) 示例 本部分提供以下设备控制台 (DevCon.exe) 命令的示例: DevCon HwIDs 示例 1:查找所有硬件 ID 示例 2:使用模式查找硬件 ID ...
- python第一天 :计算机基础(一)
1.什么是编程语言 答:人类与计算机交流的介质 2.什么是编程 答:利用编程语言控制计算机解决问题 3.为什么要编程 答:可以控制计算机做事,提高生产生活效率 4.计算机的五大组成部分分别有什么作用? ...
随机推荐
- 【阅读笔记】Rapid, Detail-Preserving Image Downscaling
Rapid, Detail-Preserving Image Downscaling(快速的图像缩放技术) 该论文提出了一种基于卷积滤波器的算法,并确定滤波器的权值,使重要的细节保留在缩小比例的图像. ...
- Hexo、Typecho博客添加旅行足迹网页
本文部署的足迹地图,地址如下: http://www.aomanhao.top/index.php/archives/183/ jVectorMap JVectorMap 是一个优秀的.兼容性强的 j ...
- 【Python】从同步到异步多核:测试桩性能优化,加速应用的开发和验证
测试工作中常用到的测试桩mock能力 在我们的测试工作过程中,可能会遇到多个项目并行开发的时候,后端服务还没有开发完成,或者我们需要压测某个服务,这个服务测在试环境的依赖组件(如 MQ) 无法支撑我们 ...
- SQL Server 配置允许远程连接
前言 需要别人远程你的数据库,首先需要的是在一个局域网内,或者连接的是同一个路由器,接下来就是具体步骤: 1.首先是要检查SQLServer数据库服务器中是否允许远程链接.其具体操作为: 1. 打开数 ...
- linux内核笔记(二)微机计算机组成结构
一个系统有四个基本组成部分: 输入部分:接收系统的数据(键盘等) 处理中心:处理(cpu) 能源部分:处理需要的硬件资源(内存等) 输出部分:显示给用户(显示器等) 计算机系统分为: 计算机系统分为软 ...
- iptables简要介绍及使用iptables实践NAT技术
简介 iptables的文章多如牛毛,但是,我读了一些,发现虽然成体系,但是不便理解,今天就结合自己的理解,好好讲解下,另外,我们也会使用iptables来实验一个nat地址转换的demo,nat转换 ...
- RAT蓝队自动化测试框架
RAT蓝队自动化测试框架 介绍 RAT 是根据 MITRE ATT&CK 战术矩阵测试蓝队检测能力的脚本框架,由 python2.7 编写,共有 50 多种不同 ATT&CK 技术点和 ...
- Pandas: title函数的作用
代码演示 将首字母大写,其余小写 效果演示 参考链接 https://www.w3resource.com/pandas/series/series-str-title.php
- node:spawn npm ENOENT
错误背景 封装脚手架时报错 错误原因 windows系统原因 解决方案 const createProjectAction = async (project) => { console.log( ...
- 使用 VirtualBox+Vagrant 创建 CentOS7 虚拟机
一.准备工作 1.1 软件下载 VirtualBox:Downloads – Oracle VM VirtualBox Vagrant:Install | Vagrant | HashiCorp De ...