引言

在之前的章节中,我们详细讲解了计算机系统中一些核心组成部分,如中央处理器(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. Tauri-Admin通用后台管理系统|tauri+vue3+pinia桌面端后台EXE

    基于tauri+vite4+pinia2跨端后台管理系统应用实例TauriAdmin. tauri-admin 基于最新跨端技术 Tauri Rust webview2 整合 Vite4 构建桌面端通 ...

  2. Spring相关API

    ApplicationContext的继承体系 applicationContext applicationContext:接口类型,代表应用上下文,可以通过其实例获得Spring容器中的Bean A ...

  3. Kitex微服务开发实践(ETCD服务注册)

    服务注册通常用于分布式系统或微服务架构中,是一种用于管理和发现这些分布式服务的机制.它的目标是让服务能够动态地找到其他服务,并能够与其进行通信,而无需显式地配置其位置信息 本文简单讲述使用etcd进行 ...

  4. 关于 ModelScope 的视频 “AI 换脸” 优化方案

    前言 前面一文,初步完成了一下 "AI 换脸" 视频处理程序.完成了视频拆帧,拆帧图片人脸融合,已经音频提取和最后的人脸融合图片的整合(也就是将图片和音频组成视频).但是在人脸融合 ...

  5. 更快的训练和推理: 对比 Habana Gaudi®2 和英伟达 A100 80GB

    通过本文,你将学习如何使用 Habana Gaudi2 加速模型训练和推理,以及如何使用 Optimum Habana 训练更大的模型.然后,我们展示了几个基准测例,包括 BERT 预训练.Stabl ...

  6. vue2 如何实现将dom元素转移到指定节点

    背景:在写商城页面时,PC端给的设计图纸是按照宽度1920给的,内部内容区域(main)1191px,写死的指定宽度.然后新出了一个页面,类似于12306的这个页面,图片部分,直接占满了屏幕的100v ...

  7. [golang]标准库-json

    前言 json数据格式通常包含两个操作:序列化(把对象转换成JSON数据类型)和反序列化(把JSON数据类型转换成对象),二者操作互逆. Go语言中相关标准库为encoding/json. 示例代码 ...

  8. 使用MD5算法和sha512sum校验和检验文件完整性

    目录 一.前言 二.MD5算法简介 三.什么是校验和 四.使用MD5算法和sha512sum校验和检验文件完整性 五.总结 一.前言 在我们日常生活中,无论是下载文件.传输数据还是备份重要信息,如何确 ...

  9. TCP 粘包

    TCP(Transmission Control Protocol,传输控制协议)是一种传输层协议. TCP提供了以下主要功能: 可靠性:TCP使用确认.重传和校验等机制来确保数据的可靠传输.它能够检 ...

  10. 论文解读(AdSPT)《Adversarial Soft Prompt Tuning for Cross-Domain Sentiment Analysis》

    Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息 论文标题:Adversarial Soft Prompt Tuning for Cross-Domain Senti ...