操作系统原理 教学课件 ppt 作者 周苏 教学课件 第10章 输入-输出原理

上传人:E**** 文档编号:89156565 上传时间:2019-05-19 格式:PPT 页数:120 大小:1.74MB
返回 下载 相关 举报
操作系统原理  教学课件 ppt 作者 周苏 教学课件 第10章  输入-输出原理_第1页
第1页 / 共120页
操作系统原理  教学课件 ppt 作者 周苏 教学课件 第10章  输入-输出原理_第2页
第2页 / 共120页
操作系统原理  教学课件 ppt 作者 周苏 教学课件 第10章  输入-输出原理_第3页
第3页 / 共120页
操作系统原理  教学课件 ppt 作者 周苏 教学课件 第10章  输入-输出原理_第4页
第4页 / 共120页
操作系统原理  教学课件 ppt 作者 周苏 教学课件 第10章  输入-输出原理_第5页
第5页 / 共120页
点击查看更多>>
资源描述

《操作系统原理 教学课件 ppt 作者 周苏 教学课件 第10章 输入-输出原理》由会员分享,可在线阅读,更多相关《操作系统原理 教学课件 ppt 作者 周苏 教学课件 第10章 输入-输出原理(120页珍藏版)》请在金锄头文库上搜索。

1、,操作系统原理,by Zhou Su,内容(篇),4,第4篇 输入/输出与文件管理,10,第10章 输入/输出原理,第10章 输入/输出原理,除了提供抽象以外,例如进程(和线程)、地址空间和文件,操作系统还要控制计算机的所有I/O(输入/输出)设备。操作系统必须向设备发送命令,捕捉中断,并处理设备的各种错误。它还应该在设备和系统的其他部分之间提供简单且易于使用的接口。如果可能,这个接口对于所有设备都应该是相同的,这就是所谓的设备无关性。I/O部分的代码是整个操作系统的重要组成部分。,10.1 I/O硬件原理,不同的人对于I/O硬件的理解是不同的。对于电子工程师而言,I/O硬件就是芯片、导线、电

2、源、电机和其他组成硬件的物理部件。对程序员而言,则只注意I/O硬件提供给软件的接口,如硬件能够接收的命令、它能够完成的功能以及它能够报告的错误。我们的讨论限于如何对硬件编程而不是其内部的工作原理。然而,很多I/O设备的编程常常与其内部操作密切相关。,10.1.1 I/O设备,I/O设备大致可分为两类:块设备和字符设备。块设备把信息存储在固定大小的块中,每个块有自己的地址。通常块的大小在512字节至32 768 字节之间,所有的传输以一个或多个完整的(连续的)块为单位。块设备的基本特征是每个块都能独立于其他块而读写。硬盘、CD-ROM 和USB盘是常见的块设备。,10.1.1 I/O设备,如果仔

3、细观察,块可寻址的设备与其他设备之间并没有严格的界限。磁盘是公认的块可寻址的设备,无论磁盘臂当前处于什么位置,它总是能够寻址其他柱面并且等待所需要的磁盘块旋转到磁头下面。现在考虑一个用来对磁盘进行备份的磁带机。磁带包含按顺序排列的块。如果给出命令让磁带机读第N块,它可以首先向回倒带,然后再前进直到第N块。该操作与磁盘的寻道相类似,只是花费的时间更长。不过,重写磁带中间位置的块就有可能做不到。,10.1.1 I/O设备,或接收一个字符流,而不考虑任何块结构。字符设备是不可寻址的,也没有任何寻道操作。打印机、网络接口、鼠标(用作指向设备),以及大多数与磁盘不同的设备都可看做是字符设备。,10.1.

4、1 I/O设备,这种分类方法并不完美,有些设备就没有包括进去。例如,时钟既不是块可寻址的,也不产生或接收字符流。它所做的工作就是按照预先规定好的时间间隔产生中断。内存映射的显示器也不适用于此模型。但是,块设备和字符设备的模型具有足够的一般性,可以用作使处理I/O设备的某些操作系统软件具有设备无关性的基础。例如,文件系统只处理抽象的块设备,而把与设备相关的部分留给较低层的软件。,10.1.1 I/O设备,I/O设备在速度上覆盖了巨大的范围,要使软件在跨越这么多数量级的数据率下保证性能优良,给软件造成了相当大的压力。表10-1列出了某些常见设备的数据率,这些设备中大多数随着时间的推移而变得越来越快

5、。,表10-1 某些典型的设备、网络和总线的数据率,10.1.2 设备控制器,I/O设备一般由机械部件和电子部件两部分组成。通常可以将这两部分分开处理,以提供更加模块化和更加通用的设计。电子部件称作设备控制器或适配器。在个人计算机上,它经常以主板上芯片的形式出现,或者以插入(PCI)扩展槽中的印刷电路板的形式出现。机械部件则是设备本身。,10.1.2 设备控制器,控制器卡上通常有一个连接器,通向设备本身的电缆可以插入到这个连接器中。很多控制器可以操作2个、4个甚至8个相同的设备。如果控制器和设备之间采用的是标准接口,无论是官方的ANSI、IEEE或ISO标准还是事实上的标准,各个公司都可以制造

6、各种适合这个接口的控制器或设备。例如,许多公司都生产符合IDE、SATA、SCSI、USB或火线(IEEE 1394)接口的磁盘驱动器。,10.1.2 设备控制器,控制器与设备之间的接口通常是一个很低层次的接口。例如,磁盘可以按每个磁道10 000个扇区,每个扇区512字节进行格式化。然而,实际从驱动器出来的却是一个串行的位(比特)流,它以一个前导符开始,接着是一个扇区中的4096位,最后是一个校验和,也称为错误校正码。前导符是在对磁盘进行格式化时写上去的,它包括柱面数和扇区号、扇区大小以及类似的数据,此外还包含同步信息。,10.1.2 设备控制器,控制器的任务是把串行的位流转换为字节块,并进

7、行必要的错误校正工作。字节块通常首先在控制器内部的一个缓冲区中按位进行组装,然后在对校验和进行校验并证明字节块没有错误后,再将它复制到主存中。,10.1.2 设备控制器,在同样低的层次上,监视器的控制器也是一个位串行设备。它从内存中读入包含待显示字符的字节,并产生用来调制CRT电子束的信号,以便将结果写到屏幕上。该控制器还产生信号使CRT电子束在完成一行扫描后做水平回扫,并且产生信号使CRT电子束在整个屏幕扫描结束后做垂直回扫。如果没有CRT控制器,那么操作系统程序员只能对显像管的模拟扫描直接进行编程。有了控制器,操作系统就可以用几个参数(这些参数包括每行的字符数或像素数、每屏的行数等)对其初

8、始化,并让控制器实际驱动电子束。平板TFT显示器的工作原理与此不同,但是也同样复杂。,10.1.3 内存映射I/O,每个控制器有几个寄存器用来与CPU进行通信。通过写入这些寄存器,操作系统可以命令设备发送数据、接收数据、开启或关闭,或者执行某些其他操作。通过读取这些寄存器,操作系统可以了解设备的状态,是否准备好接收一个新的命令等。 除了这些控制寄存器以外,许多设备还有一个操作系统可以读写的数据缓冲区。例如,在屏幕上显示像素的常规方法是使用一个视频RAM,这一RAM基本上只是一个数据缓冲区,可供程序或操作系统写入数据。,10.1.3 内存映射I/O,CPU在与设备的控制寄存器和数据缓冲区进行通信

9、时存在两个可选的方法。在第一个方法中,每个控制寄存器被分配一个I/O端口号,这是一个8位或16位的整数。所有I/O端口形成I/O端口空间,并且受到保护,使得普通的用户程序不能对其进行访问(只有操作系统可以访问)。使用一条特殊的I/O指令,例如 IN REG PORT CPU可以读取控制寄存器PORT的内容,并将结果存入到CPU寄存器REG中。,10.1.3 内存映射I/O,类似地,使用 OUT PORT REG CPU可以将REG的内容写入到控制寄存器中。大多数早期计算机,包括几乎所有大型主机,如IBM 360及其所有后续机型,都是以这种方式工作的。 在这一方案中,内存地址空间和I/O地址空间

10、是不同的,如图10-1 a)所示。,图10-1 地址空间,10.1.3 内存映射I/O,指令 IN R0, 4 和 MOV R0, 4 在这一设计中完全不同。前者读取I/O端口4的内容并将其存入R0,而后者则读取内存字4的内容并将其存入R0。因此,这些例子中的4引用的是不同且不相关的地址空间。,10.1.3 内存映射I/O,第二个方法是POP-11引入的,它将所有控制寄存器映射到内存空间中,如图10-1 b)所示。每个控制寄存器被分配唯一的一个内存地址,并且不会有内存被分配这一地址。这样的系统称为内存映射I/O。通常分配给控制寄存器的地址位于地址空间的顶端。图10-1 c)所示是一种混合的方案

11、,这一方案具有内存映射I/O的数据缓冲区,而控制寄存器则具有单独的I/O端口。Pentium处理器使用的就是这一体系结构。在IBM PC兼容机中,除了0到64K-1的I/O端口之外,640K到1M-1的地址保留给设备的数据缓冲区。,10.1.3 内存映射I/O,在各种情形下,当CPU想要读入一个字的时候,不论是从内存中读入还是从I/O端口中读入,它都要将需要的地址放到总线的地址线上,然后在总线的一条控制线上置起一个READ信号。还要用到第二条信号线来表明需要的是I/O空间还是内存空间。如果是内存空间,内存将响应请求。如果是I/O空间,I/O设备将响应请求。如果只有内存空间(如图10-1 b)所

12、示的情形),那么每个内存模块和每个I/O设备都会将地址线和它所服务的地址范围进行比较,如果地址落在这一范围之内,它就会响应请求。因为绝对不会有地址既分配给内存又分配给I/O设备,所以不会存在歧义和冲突。,10.1.3 内存映射I/O,这两种寻址控制器的方案具有不同的优缺点。我们首先来看一看内存映射I/O的优点。第一,如果需要特殊的I/O指令读写设备控制寄存器,那么访问这些寄存器需要使用汇编代码,因为在C或C+中不存在执行IN或OUT指令的方法。调用这样的过程增加了控制I/O的开销。相反,对于内存映射I/O,设备控制寄存器只是内存中的变量,在C语言中可以和任何其他变量一样寻址。因此,对于内存映射

13、I/O,I/O设备驱动程序可以完全用C语言编写。如果不使用内存映射I/O,就要用到某些汇编代码。,10.1.3 内存映射I/O,第二,对于内存映射I/O,不需要特殊的保护机制来阻止用户进程执行I/O操作。操作系统必须要做的全部事情只是避免把包含控制寄存器的那部分地址空间放入任何用户的虚拟地址空间之中。更为有利的是,如果每个设备在地址空间的不同页面上拥有自己的控制寄存器,操作系统只要简单地通过在其页表中包含期望的页面就可以让用户控制特定的设备而不是其他设备。这样的方案可以使不同的设备驱动程序放置在不同的地址空间中,不但可以减小内核的大小,而且可以防止驱动程序之间相互干扰。,10.1.3 内存映射

14、I/O,第三,对于内存映射I/O,可以引用内存的每一条指令也可以引用控制寄存器。例如,如果存在一条指令TEST可以测试一个内存字是否为0,那么它也可以用来测试一个控制寄存器是否为0,控制寄存器为0可以作为信号,表明设备空闲并且可以接收一条新的命令。,10.1.3 内存映射I/O,汇编语言代码可能是这样的:,10.1.3 内存映射I/O,如果不是内存映射I/O,那么必须首先将控制寄存器读入CPU,然后再测试,这样就需要两条指令而不是一条。在上面给出的循环的情形中,就必须加上第四条指令,这样会稍稍降低检测空闲设备的响应度。,10.1.3 内存映射I/O,内存映射I/O也有缺点。首先,现今大多数计算

15、机都拥有某种形式的内存字高速缓存。对一个设备控制寄存器进行高速缓存可能是灾难性的。例如在存在高速缓存的情况下考虑上面给出的汇编代码循环。第一次引用PORT_4将导致它被高速缓存,随后的引用将只从高速缓存中取值而不会再查询设备。之后当设备最终变为就绪时,软件却没有办法发现这一点。结果,循环将永远进行下去。,10.1.3 内存映射I/O,为了避免这一情形,对内存映射I/O,硬件必须针对每个页面具备选择性禁用高速缓存的能力。操作系统必须管理选择性高速缓存,所以这一特性为硬件和操作系统两者增添了额外的复杂性。 其次,如果只存在一个地址空间,那么所有的内存模块和所有的I/O设备都必须检查所有的内存引用,

16、以便了解由谁做出响应。如果计算机具有单一总线,如图10-2 a)所示,那么让每个内存模块和I/O设备查看每个地址是简单易行的。,图10-2 总线结构,10.1.3 内存映射I/O,然而,现代个人计算机的趋势是包含专用的高速内存总线,如图10-2 b)所示。装备这一总线是为了优化内存性能,Pentium系统甚至可以有多种总线(内存、PCI、SCSI、USB、ISA)。 在内存映射的机器上具有单独的内存总线的麻烦是I/O设备没有办法查看内存地址,因为内存地址被旁路到内存总线上。此外,必须采取特殊的措施使内存映射I/O工作在具有多总线的系统上。一种可能的方法是首先将全部内存引用发送到内存,如果内存响应失败,CPU将尝试其他总线。这一设计需要额外的硬件复杂性。,10.1.3 内存映射I/O,第二种可能的设计是在内存总线上放置一个探查设备,放过所有潜在地指向所关注的I/O设备的地址。但I/O设备可能无法以内存所能达到的速度处理请求。 第三种可能的设计是在PCI桥芯片中对地址进行过滤,这正是Pentium结构上所使用的。该芯片中包含若干个在引导时预装载的范围寄存器。例如,640K到

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号