计算机组成原理(4)IO

简介: 4.1.概述IO,input output的缩写,即计算机的输入输出系统。这里我们要明确输入输出的边界是哪里。向主机内部送称为输入,向主机外部送称为输出,直白且笼统的来说的话向磁盘或者网络里送称为输出,向内存里送称为输入。整个IO的发展经历了以下几个阶段:

4.1.概述

IO,input output的缩写,即计算机的输入输出系统。这里我们要明确输入输出的边界是哪里。向主机内部送称为输入,向主机外部送称为输出,直白且笼统的来说的话向磁盘或者网络里送称为输出,向内存里送称为输入。

整个IO的发展经历了以下几个阶段:

  • 分散连接
  • IO总线
  • 通道
  • IO处理机

分散链接:

早期主机和IO设备分散直连,IO的控制由CPU来负责,因此整个IO期间IO和CPU需要一直保持联络,由于速率的不对等,因此一个IO周期中CPU大部分时间处于是停等状态。

IO总线:

为了提高效率,出现了IO接口和DMA控制器。IO设备通过IO接口连入IO总线,DMA控制器专门负责IO的控制,从而解放出CPU,使得CPU在IO周期间不必停等。CPU和IO之间是并行的。此方式中IO的控制均交给DMA控制器来完成(指令交给控制器来负责),但是控制器不具备数据的处理功能(如读数、写数),因此数据的处理功能仍然要走CPU。

通道:

通道,一种简单的处理器,比起DMA多了数据处理功能,使得IO的控制、数据处理完全从CPU中剥离出来,为CPU减负。一个通道可以连接多个IO设备,即一条通道供多个IO设备“行走”。

IO处理机:

通道技术的升级版,直接采用和主机CPU结构相同的小型CPU来完全负责IO的控制和数据处理。

4.2.组成

IO系统由软件、硬件两部分组成:

  • 软件
  • IO指令
  • 通道指令
  • 硬件

IO指令:

CPU指令集中的一部分

操作码,IO指令的标志,标识该指令为IO指令。

命令码,指出对IO指令做什么操作。

设备吗,标识所要操作的IO设备是哪个。

f54b92834d724ec6a1307f94bacbac1b.png

通道指令:

由于通道本质上是一个简单的处理器因此有自己的一套指令集。通道指令中指出要传输的成块数据的首地址、传输的长度、操作指令。

硬件:

IO系统中的硬件包括:设备、IO接口、通道、设备控制器。

4.3.编址

IO设备接入以后会被分配一个设备地址,主机根据设备地址找到相应的IO设备。分配设备地址的方式有如下几种:

  • 统一编址
  • 非统一编址

统一编址:

内存中留出一块来作为IO地址,也就是说使用内存地址为IO设备编址,只要寻址时,地址落在IO地址中则说明是一次IO操作。IO操作沿用CPU的指令集,直接向该地址进行读写,即可实现输入输出。

非统一编址:

在内存之外设计一块存储空间用来为设备进行编址,IO操作有专门的IO指令,对IO设备进行输入输出操作。

4.4.IO接口

IO接口,用于IO设备接入主机的接口,IO接口的作用主要是:

  • 数据转换
  • 速度适配

数据转换:

由于不同外设的协议可能不同,IO接口要设配各种外设。

速度适配:

不同的IO设备速度不同,如键盘,输入的速度较慢,数据量较小,及时传输,但如硬盘,输入的速度较快,输入的量也较大,可能来不及及时传输,就需要先缓存起来。总的来说就是做一个速度的适配。

4.5.传输控制

IO中因为数据是来自外部,数据不是主机随叫随到的,有一个等待数据输入的过程,CPU怎样去感知IO是否完成,数据是不是准备好了?这就要CPU和IO设备之间打交道,进行信息传递了,IO设备和主机之间的信息传送方式由如下几种:

  • 程序查询方式
  • 程序中断方式
  • DMA方式

4.5.1.程序查询方式

在程序查询方式中,CPU和IO设备是串行执行的。每次CPU遇到IO指令时,都要去主动询问IO,数据是否准备好,准备好,开始读写IO,没有准备好的话,CPU会等待并且循环发送信息去询问IO——是否准备好?


由于CPU和IO速率存在级差,CPU会大量时间处于空转等待,浪费了CPU资源。

1dea848b804f4613ac77b362735bffe4.png

4.5.2.程序中断方式

程序中断方式是对程序查询方式的一种改进,在程序中断方式中,CPU和IO并发执行。CPU执行到IO指令后,启动IO,但不等待,直接转而执行其他任务。IO自己准备好以后发送中断信号给CPU,CPU再转而执行IO。

5eea05d02bcd447bbfff8330f729ec15.png

4.5.3.DMA方式

程序查询方式、程序中断方式,本质上都是CPU来管理IO,IO和内存之间想要传输数据,都必须通过CPU。无论如何进行优化,只要CPU参与了IO操作、内存读写操作,对于CPU来说都会有不小的时间浪费。

DMA的出现就是为了彻底将CPU从IO、内存之间的交互中拿掉。DMA方式中,主存和IO之间存在一条直接的数据通道,两者之间直接进行交互。DMA控制IO和内存交互的方式叫做——“周期窃取”,即一个IO周期中,从CPU手中获取到系统总线的使用权,沿用总线控制的方式来控制整个IO周期,这个周期内CPU对系统总线无使用权,但是并不意味着CPU就停下等待、无法工作。现代计算机系统中CPU有指令缓存器,一般会准备多条待执行指令,总线使用权被DMA窃取后,CPU可以继续执行后面的,不需要访存的指令。

目录
相关文章
|
缓存 运维 监控
计算机IO原理
计算机IO原理
90 0
计算机IO原理
|
缓存 Linux C++
计算机操作系统学习笔记(10)——文件IO
计算机操作系统学习笔记(10)——文件IO
120 0
|
Linux
浅谈计算机中的IO模型
IO模型一共有5种: blocking IO #阻塞IO nonblocking IO #非阻塞IO IO myltiplexing #IO多路复用 signal driven IO #信号驱动IO asynchronous IO #异步IO 由于signal driven IO在实际中并不常用,这里只看剩下的四种IO Model。
1032 0
|
2月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
3月前
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用
|
15天前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
2月前
|
Java 数据处理
Java IO 接口(Input)究竟隐藏着怎样的神秘用法?快来一探究竟,解锁高效编程新境界!
【8月更文挑战第22天】Java的输入输出(IO)操作至关重要,它支持从多种来源读取数据,如文件、网络等。常用输入流包括`FileInputStream`,适用于按字节读取文件;结合`BufferedInputStream`可提升读取效率。此外,通过`Socket`和相关输入流,还能实现网络数据读取。合理选用这些流能有效支持程序的数据处理需求。
28 2
|
2月前
|
XML 存储 JSON
【IO面试题 六】、 除了Java自带的序列化之外,你还了解哪些序列化工具?
除了Java自带的序列化,常见的序列化工具还包括JSON(如jackson、gson、fastjson)、Protobuf、Thrift和Avro,各具特点,适用于不同的应用场景和性能需求。
|
2月前
|
缓存 Java
【IO面试题 一】、介绍一下Java中的IO流
Java中的IO流是对数据输入输出操作的抽象,分为输入流和输出流,字节流和字符流,节点流和处理流,提供了多种类支持不同数据源和操作,如文件流、数组流、管道流、字符串流、缓冲流、转换流、对象流、打印流、推回输入流和数据流等。
【IO面试题 一】、介绍一下Java中的IO流
|
3月前
|
存储 缓存 Java
Java零基础入门之IO流详解(二)
Java零基础入门之IO流详解(二)