那么下面,我们将要进入计算机组成原理的最后一章,也就是我们的第七章,输入输出系统的学习。那么这一部分内容呢,我们之前呢一直在提,但是并没有详细地讲解,那么进入到我们第七章输入输出系统这一部分,我们就要来详细地讲解这部分的内容。那么这一章的内容呢,和我们操作系统那门课的第五章,它呢有一些交叉的部分,所以大家学完我们计算机组成原理的内容之后呢可能对我们操作系统那部分的内容有更加深入的了解,或者大家可能在操作系统那部分学习了这些内容之后,我们呢对我们这一章的内容也会有着更加深入的理解,所以这部分内容和操作系统那部分内容呢是相辅相成的,所以大家要详细地来掌握一下。
那么我们这一章内容呢有哪些内容,我们分为四部分给大家讲解。第一部分内容呢就是我们这一节课将要讲解的,也就是最基础那一部分。输入输出系统它的基本概念,我们分两块来给大家讲解,第一块内容呢我们将要讲解输入输出系统是如何进行演变的,那么它的演变过程是怎样的,那么也就引出了我们I/O方式一些最基本的内容。接着呢我们将要讲解I/O系统的它的组成部分,它呢和我们计算机系统组成是差不多的。我们计算机系统呢是分为硬件和软件,同样呢我们的I/O系统也是分为I/O软件和I/O硬件的,我们将要讲解它的详细内容。那么下一小节内容就是我们第二部分,我们将要讲解外部设备。外部设备分为三大块的内容,第一部分是输入设备,比如我们的键盘我们的鼠标。那么第二部分就是我们的输出设备,输出设备分为显示器啊打印机啊这一部分,那么这部分的重点在于哪儿呢?在于我们的显存的计算,这部分内容将要着重地掌握。那么第三块内容就是外存储器部分,外存储器呢比如我们的磁盘、我们的磁带还有我们的光盘它们都是外存储器的部分,那么它的重点在于哪儿呢?在于磁盘存储时间的这样的一个计算,这是我们的重点。那么接下来的两块内容呢,I/O接口和I/O方式这两块内容是本章的一个重点。其中I/O接口我们将要讲解I/O接口的主要功能,它的功能是什么,我们经常听I/O接口这个名词,但是我们并不知道它的具体的内容是什么。那么我们将要在本章的第三节I/O接口这部分详解它的主要的功能。还有我们的I/O系统、I/O接口它是如何组成的,最后我们还要讲解这个I/O接口是如何和我们的主机进行通信的,所以有我们的I/O端口和它的一个编址的方式。这部分内容呢是本章的一个重点。那么本章的重中之重也就是在出题的时候最容易出的是哪儿呢?它考的部分就是我们最后一小节的部分,I/O方式呢我们在这一节也就是基本概念这一节我们只是简单地提一下,那么着重的掌握呢我们将要在最后一小节也就是第四小节,将要讲解I/O方式,分为三大块的内容,程序查询方式、程序中断方式以及DMA方式。刚才已经讲过了,我们整个第七章的重中之重就是我们的I/O方式,所以大家一定要对第四小节I/O方式做最重点的掌握。它的每一年都会出题,它不仅会以选择题的方式来考查大家对它的基本概念和它的基本原理的一个掌握的方式,比如说它的流程,它的每一步这个任务大家一定要掌握。还会在综合题当中进行考查,特别是I/O的它的方式的效率的计算,还有中断方式的各种原理啊、特点、处理过程什么中断屏蔽,以及DMA方式它的特点它的传输过程,还有它和中断方式的一个区别,这部分内容大家一定要掌握,它不仅是重点而且还是难点。所以大家对我们的输入输出系统这一章已经有了一个大概的了解了,那么虽然它是最后一章,最后一章不代表它是最不重要的,它呢是非常重要的。
所以我们将要来看一下我们第一节的内容是输入输出系统的它的一个基本概念。
下面我们进入第七章的第三节,I/O接口。
I/O接口呢,
下面我们进入到本章的最重要的一部分,也就是我们的I/O方式。
那么我们之前已经把I/O接口、外设都已经讲完了,那么什么是I/O方式呢?I/O方式就是说我们的输入输出系统啊,要实现主机和I/O设备之间的一个数据传送,所采用的不同的一个控制方式。那么这一些控制方式在我们的性能、代价和问题着重点啊等等这方面都是有不同的侧重的。那么我们常用的呢就有程序查询方式、程序中断方式和DMA方式这三种。
那么我们先来简单地看一下这三种方式,首先是程序查询方式,它是怎样的?比如说,比如说,我们现在的CPU啊正在执行着现有的一个程序。
然后执行到一个过程之后,在某一个时间点它现在要启动I/O了,
然后就启动I/O。
启动I/O之后我们的I/O设备就在那儿准备数据。那么在这一段时间里面CPU是不进行其他工作的,它只是在不断地等待,然后呢再不断地查询这个I/O设备是否准备好了。所以一旦等I/O设备准备好了之后,然后传输了I/O数据之后,然后CPU才会执行之前的那个先行程序。所以,在I/O准备和传输的这一个过程,CPU都是不干其他事的,都是在不断地查询并且不断地等待我们的I/O设备是否已经把数据准备好了,所以这是一个程序查询方式的一个大概的介绍。
那么程序中断方式是怎样的呢?是这样的。首先我这个CPU在执行一个程序,执行到一定时间之后在某一个时间点,
我现在启动I/O了。启动I/O之后我还是在执行我的程序的,也就是说我现在不像刚才那样,我在等着你准备好,然后再不断地查询你是否已经准备好。而是说我先启动完之后,我就不管你了,我再去执行我原来的那个程序。
你这段时间呢你自己呢就在这儿准备,你准备的时候我还在执行我的程序。
直到你准备好了之后,然后I/O设备向我的CPU发送一个中断请求,发送一个中断请求之后等我这一个程序的执行周期结束以后,我去响应你的这个中断请求。我先去保存一下现场,保存一下现场之后呢,
然后我切到你这个中断服务程序这一边,然后去处理你这个I/O请求。然后现在CPU就开始处理我这个中断服务程序,然后实现一个I/O和主机之间的传送。
传送完了之后,
然后再返回到刚才我的那一个中断点,
再去执行我的那个程序。所以程序中断方式和我的程序查询方式有什么不同,不同点就在于刚才的程序查询方式,这个I/O准备的时候,CPU是不干其他事的,都在等着你,然后不断地查询你是否准备好了。但是呢程序中断方式就是说我启动完I/O之后,我还在执行我原来的那个程序,直到你这个I/O准备好了,给我发送了一个中断请求之后,我再去响应你的请求,再去处理我这个中断服务程序。所以,这就是,也就是一定程度上解决了这样的一个串行的问题,所以一定程度上就实现了CPU和I/O的一个并行的一个这样的一个功能。
接着呢,更加解放我们CPU的呢,就是DMA方式。它有什么不同的呢?它是这样的。
首先我去启动I/O,
同样的在你I/O准备的时候,我还在执行我原有的程序。直到我这个I/O准备好了,然后我发送一个DMA请求,啊,刚才是中断请求,现在是DMA请求。但是呢,和刚才不同的是,刚才必须要等一个执行周期结束,然后我再去保护现场保存现场,然后再切到你这个中断服务程序。
但是它不一样,它现在只要你存取周期结束之后,我就用一个DMA,也就是说我的DMA,就是外设和内存之间开辟的一个直接数据通道,然后这样的信息传送就不再经过我们的CPU了,它就直接进行一个存储器的存取。所以由于这样传输方式是不经过CPU的,也就不需要进行什么保护啊恢复啊这样的一些繁琐的操作,就是说I/O和主存之间进行数据传送的时候,我是不进行内存访问的,不进行这样的一个存储访问的。我只要存储周期结束之后我就可以触及这样的一个请求。那么在这一段时间里面,我们的CPU是不进行任何的存储的这样的一个功能的,然后在这段时间里面是由我们的直接数据通道、这样的一个直接的数据通路进行一个访问的,所以呢更大程度上解放了CPU。那么它们两个的这个区别就在于前面是要保护现场恢复现场的,然后需要CPU来处理一个中断请求的,而现在DMA方式你只要存储周期结束之后,我这一段时间是不进行存储访问的,然后我可以去干其他的事。那么而且是不需要经过我们的CPU的进行一个数据传送的,也就解放了CPU。所以呢,这就是程序中断方式和DMA方式的一个简要的一个区别。那么我这一节课只是简单地介绍了一下这三种方式,那么下面我们就来详细地介绍一下每一种I/O方式。
下面我们来看一下第一种I/O方式,也就是程序查询方式。那么这一种方式呢相较于后两种方式来说,是最简单,也是最容易理解的,我们来看一下。
之前呢我们已经把I/O方式做了一个大概的介绍,
那么我们的程序查询方式呢又把它细分为啊CPU等待查询的这样的一个I/O准备的这个过程,以及CPU控制数据传送的这一个数据传送的过程。也就是说我们的CPU在I/O准备数据这段时间里面它都是在查询等待不做其他事的,然后呢一旦I/O准备好了然后CPU就控制它进行一个数据传送。
那么我们来看一下它的一个流程图。
首先第一步,CPU先执行这样的一个初始化的程序,然后呢预置一个传送的参数,然后呢设置计数器,再设置数据的首地址,这是做一个初始化的一个这样的任务。
接着CPU就启动了外设也就是发送一个命令字,启动I/O设备,然后接着就是我们的程序查询方式的I/O准备阶段。
那么CPU呢从I/O接口读取这样的一个设备的状态的信息,看这个I/O设备是否已经准备好了。
一直等到外设准备好了然后才进行一个传送数据。
也就是说在框框框起来的这一部分里面,我们的CPU都是在等待的。就是说,我们的CPU一旦在启动I/O之后,就必须停止它刚才执行的那一个程序,然后呢在执行的这个程序当中插入一段这个程序,插入一段这个程序就是说CPU在不断地查询我们外设的这样的一个状态,也就是说CPU有一个“踏步”等待的现象,这是一个循环的结构。只要外设没有准备好,这个CPU就一直在这儿等着,一直在这儿读取设备的状态信息,也就是说CPU和I/O是一个串行工作。串行工作就是说当I/O在准备的时候,CPU是不能干其他事的,它都在这儿查询着,它都在这儿等待着,一直等到I/O准备好了,于是向I/O传送数据或者I/O向这个CPU传送数据。
一般来说,这样的数据的传送的单位都是一个字,这是由它的硬件决定的。后来呢就修改这样的一个地址和计数器的参数,
等到传送结束之后整个的这一个过程才结束,否则传送没有结束了之后还回到刚才的那样一个读取等待的这样的一个循环当中。好的这就是查程序查询方式的这样的一个过程,其实还是非常容易理解的。它的核心就在于CPU不断地去查询不断地去等待。
那么它的优点是什么呀?优点就是说你理解起来也是非常简单的,所以它的接口设计起来也是非常简单的,它的设备量是非常少的。
缺点就在于,CPU在信息传送的过程当中,要花费绝大部分时间都是在这儿查询和等待着,而且由于CPU和I/O是串行工作的,所以只能和一台外设交换信息,它的效率是非常低的。它的绝大部分时间都在于这儿的查询、等待,然后查询、等待,等到外设准备就绪之后,然后传送数据。那么它的核心呢就在于用框框出来的这部分。好的,整个过程大家应该都理解了,还是非常容易理解的。
那么我们来看一下这一个I/O接口的设计。那么它的具体的是如何设计的大家不需要了解,大家只需要看一下就行了。我们可以看到I/O接口呢它是非常简单的,刚才也说了它的一个优点就是说我们的接口设计是非常简单的。它有一个设备状态寄存器,是用来保存这个设备状态的,然后有一个数据缓冲寄存器,是用来传送这个数据的。最后呢还有一个设备选择电路,你看是非常简单的,只要这三个部分就可以了。而且数据缓冲寄存器呢是和CPU的寄存器进行一个交互的,所以它的传送单位都是一个字。啊每次都是以字为单位进行传送的,所以呢I/O接口是和CPU里面的寄存器进行一个数据交互的。好了,这就是I/O接口的一个设计,大家看一下过一下就知道了。
反正你只要记住刚才的那个流程图,然后呢要记住它的这个优点就是说很简单,以及它的缺点就是说我们的CPU花费的时间都在这儿等待和查询,而且呢它由于这个查询和等待,为什么叫程序查询方式呢?都是CPU运行它的一个查询程序来进行查询等待的,所以由于CPU在运行那个程序,就不可以进行其他的工作了,都是在这儿查询着、等待着。
那么接口就是非常简单的,只有这三个部分组成。
那么我们来看一下这一部分的一道题目。这是课后题的综合练习题的第四题,我们来看一下。在程序查询方式的输入输出系统当中,如果不考虑处理时间,我们不考虑它传送的时间,我们每一个查询操作需要100个时钟周期,CPU的时钟周期呢它的时钟频率是50MHz。现在考虑两个外设,一个是鼠标一个是硬盘,CPU对鼠标的查询呢每秒是30次,而硬盘呢是以32位字长为单位进行一个传送的,所以每32位都需要被CPU查询一次。刚才那个流程图,你看它是每传送一次然后查询一次的,所以呢硬盘就是每传送一次单位这样的数据之后,CPU呢就查询一次。传输率是2*2^20字节每秒,现在要求的是CPU对这两个设备查询所花费的这样的一个时间的比率,然后问你有什么结论。
首先我们按照大家最常使用的一种方法就是算时间,算时间的方式来看一下。