引言

在之前的章节中,我们详细讲解了计算机系统中一些核心组成部分,如中央处理器(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设备

程序直接控制和中断控制方式

  1. 首先,我们来讨论数据寄存器(Data Register)。当CPU需要将数据写入I/O设备时,例如打印内容为“GeekTime”,首先要将字符“G”发送给对应的I/O设备。
  2. 接下来是命令寄存器(Command Register)。CPU向打印机发送一个命令,告诉它开始打印工作。此时,打印机的控制电路将执行两个动作。首先,它会设置状态寄存器中的状态为not-ready,表示打印机正在工作中。然后,它会实际操作打印机进行打印。
  3. 而状态寄存器(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设备的神秘世界!的更多相关文章

  1. BIOS启动项中的设备都有哪些

    Floppy 软式磁盘驱动器,简称FDD,也就是我们平时所说的软驱. CD-ROM 不用多说了,大家都知道,这是光盘驱动器,也就是我们平时说得光驱. SCSI SCSI的全名是:Small Compu ...

  2. 关于Linux虚拟化技术KVM的科普 科普二(KVM虚拟机代码揭秘)

    代码分析文章<KVM虚拟机代码揭秘--QEMU代码结构分析>.<KVM虚拟机代码揭秘--中断虚拟化>.<KVM虚拟机代码揭秘--设备IO虚拟化>.<KVM虚拟 ...

  3. 多设备同时进行monkey抗压测试

    adb工具操作monkey抗压测试. 首先得安装adb工具,且配置好环境配置.推荐链接: 安装方法:https://blog.csdn.net/L_201607/article/details/781 ...

  4. usb设备运行不正常的解决方法(转)

    add by zhj:上午鼠标还用的好好的,下午就不能用了,插上之后提示“跟这台计算机连接的一个usb设备运行不正常”,尼玛,什么情况?我今天没安装软件啊,换了个USB接口也不行,在另一台电脑上试还是 ...

  5. [Linux 001]——计算机和操作系统的基础知识

    在正式开始学习 Linux 操作系统之前,有必要先回顾/学习一下计算机和操作系统的基本知识,为我们在后续的学习中铺路搭桥,在了解计算机一些基础原理的条件下再去进行学习,理解应该会更透彻一些.我会从一个 ...

  6. spring-session(一)揭秘

    前言 在开始spring-session揭秘之前,先做下热脑(活动活动脑子)运动.主要从以下三个方面进行热脑: 为什么要spring-session 比较traditional-session方案和s ...

  7. 计算机组成原理 — CPU 中央处理器

    目录 文章目录 目录 前文列表 逻辑电路部件 组合逻辑电路 时序逻辑电路 阵列逻辑电路 中央处理器(CPU) 控制单元(控制器) 运算单元(运算器) 存储单元(寄存器组和片内缓存) CPU 的工作原理 ...

  8. 【VS开发】【DSP开发】浅谈Linux PCI设备驱动(一)

    要弄清楚Linux PCI设备驱动,首先要明白,所谓的Linux PCI设备驱动实际包括Linux PCI设备驱动和设备本身驱动两部分.不知道读者理不理解这句话,本人觉得这句话很重要,对于PCI.US ...

  9. 【VS开发】设备控制台 (DevCon.exe) 示例

    设备控制台 (DevCon.exe) 示例 本部分提供以下设备控制台 (DevCon.exe) 命令的示例: DevCon HwIDs 示例 1:查找所有硬件 ID 示例 2:使用模式查找硬件 ID ...

  10. python第一天 :计算机基础(一)

    1.什么是编程语言 答:人类与计算机交流的介质 2.什么是编程 答:利用编程语言控制计算机解决问题 3.为什么要编程 答:可以控制计算机做事,提高生产生活效率 4.计算机的五大组成部分分别有什么作用? ...

随机推荐

  1. 园子的商业化努力:欢迎参加DataFun联合行行AI举办的数据智能创新与实践人工智能大会

    大家好,今年是园子商业化生死攸关的一年,正在艰难而努力地向前推进,今天在首页发布一篇大会推广博文,望谅解. DataFun联合行行AI举办第四届"数据智能创新与实践人工智能大会", ...

  2. Windows系统使用Nginx部署Vue

    Nginx是什么? Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 ,同时也提供了IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的R ...

  3. 【Docker】离线安装

    离线安装Docker 1.下载docker 离线安装包 ​ 下载地址如下:Index of linux/static/stable/x86_64/ 2.将下载的包上传至服务器上 我这里下载的是20.1 ...

  4. 2023年ccpc大学生程序设计竞赛-crf

    第一次参加这种大型线下程序设计比赛,心情自然是很激动,但比赛中并没有想象中那么顺利,甚至可以说有些惊险,比赛开始的时候,我们三人随便看看题,顺便等着跟榜,对于签到题我们自然是相信clk可以很快地独立完 ...

  5. HTML超文本标记语言3

    三.HTML表单标签 1.form标签 <form> form标签 name=表单名称,action=表单提交的地址,method=表单提交方式:get/post get/post详解: ...

  6. js中调用函数中的变量

    (function f1() { var num = 10; window.num = num;})(); console.log(num);

  7. 26194136 psu安装步骤

    26194136 psu安装步骤 1.拷贝 安装包p26194136_112040_MSWIN-x86-64.zip到 目录 2..关闭rac crsctl stop crs srvctl stop ...

  8. 掌握Spring条件装配的秘密武器

    本文分享自华为云社区<Spring高手之路9--掌握Spring条件装配的秘密武器>,作者:砖业洋__. 在Spring框架中,条件装配是一个强大的功能,可以帮助我们更好地管理和控制Bea ...

  9. 如何将训练好的Python模型给JavaScript使用?

    前言 从前面的Tensorflow环境搭建到目标检测模型迁移学习,已经完成了一个简答的扑克牌检测器,不管是从图片还是视频都能从画面中识别出有扑克的目标,并标识出扑克点数.但是,我想在想让他放在浏览器上 ...

  10. Luckysheet:一个纯前端的excel在线表格

    最近因为项目要求,需要在页面上添加一个在线编辑excel的功能,因此只能在网上找有没有直接用的插件,最后很幸运的是幸好找到了一个 ----luckysheet. 这个是从luckysheet官网上找的 ...