操作系统第五章——输入输出管理(上)

提示:初入红尘,不知人间疾苦,蓦然回首,已是苦中之人


5.1.1 IO设备的概念和分类

知识总览

请添加图片描述

什么是IO设备

请添加图片描述

设备的分类——按使用特性

请添加图片描述

设备的分类——按传输速率分类

请添加图片描述

按信息交换的单位分类

请添加图片描述

知识回顾

请添加图片描述

5.1.2 IO控制器

知识总览

请添加图片描述

IO设备的机械部件

请添加图片描述

IO设备的电子部件

请添加图片描述

IO控制器的组成

1)设备控制器与CPU的接口。该接口有三类信号线:数据线、地址线和控制线。数据线通常与两类寄存器相连:数据寄存器(存放从设备送来的输入数据或从CPU送来的输出数据)和控制/状态寄存器(存放从CPU送来的控制信息或设备的状态信息)。
2〉设备控制器与设备的接口。一个设备控制器可以连接一个或多个设备,因此控制器中有一个或多个设备接口。每个接口中都存在数据、控制和状态三种类型的信号。
3)IO逻辑。用于实现对设备的控制。它通过一组控制线与CPU交互,对从CPU收到的IO命令进行译码。CPU启动设备时,将启动命令发送给控制器,同时通过地址线把地址发送给控制器,由控制器的IO逻辑对地址进行译码,并相应地对所选设备进行控制。设备控制器的主要功能有:①接收和识别CPU发来的命令,如磁盘控制器能接收读、写、查找等命令;②数据交换,包括设备和控制器之间的数据传输,以及控制器和主存之间的数据传输:③标识和报告设备的状态,以供CPU处理;④地址识别;⑤数据缓冲;⑥差错控制。
请添加图片描述
值得注意的小细节:①一个I/O控制器可能会对应多个设备;为了区别是哪一个设备,所以同样是需要给设备进行编号,并且因为设备可能会同时工作,所以也就每一种寄存器可能都需要多个。CPU首先会通过控制线向IO逻辑发出一个控制指令,同时也会在地址线上说明是哪一个设备,此时若是输出数据的话,通过一个数据总线将数据送到IO控制器的数据寄存器中,IO设备就可以从数据寄存器中取得要输出的设备,CPU发出的指令可能有一些参数也会放到控制寄存器中,IO逻辑也可以从控制寄存器中取得数据,为了实现对各个设备的管理,CPU需要从状态寄存器中读出各个设备的状态(比如忙碌,空闲还是故障)
注意那些箭头是双向的,那些是单向的

映像IO VS 独立编址

为了实现CPU和IO接口进行通信
1)独立编址,为每个端口分配一个IO端口号,所有IO端口形成IO端口空间,普通用户程序不能对其进行访问,只有操作系统使用特殊的IO指令才能访问端口
2)统一编址。又称内存映射IO,每个端口被分配唯一的内存地址,且不会有内存被分配这一地址,通常分配给端口的地址靠近地址空间的顶端。

请添加图片描述
②数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像i/o;另一些计算机则采用i/o专用地址,即寄存器独立编址。若是独立编址,每一个设备中的寄存器都是从0开始进行编址,所以需要指明是哪一个设备,

知识总结

请添加图片描述

5.1.3 IO控制方式

知识总览

请添加图片描述

程序直接控制方式

请添加图片描述
请添加图片描述
这里需要注意为什么需要将CPU 中的写入内存,就像我们写Scanf的时候,我们等待将获得的值给某个变量a,此时变量a就是存放于内存中,所以为了赋值自然也就需要CPU中的值写入内存了,同理,输出的数据也是存放在内存中,需要从内存中取出,
并且无论是读或者写都是需要根据设备的状态来进行判断此时是否可以读

中断驱动方式

请添加图片描述

请添加图片描述
另外一个缺点是每次读入或者读出都是需要经过CPU,而数据输入无非就是把数据从IO设备写入到内存中,而写出无非是将内存中的数据写到IO设备,所以一个改进的方式就是直接在内存和IO设备之间建立一个通路

DMA方式

请添加图片描述
CPU告诉DMA控制器有关的操作,同样也是DMA控制器发出中断请求,中断方式中因为每一字都需要由CPU给IO设备控制器信息,所以CPU离开不了,但是DMA方式中,CPU一下子告诉一种特殊的IO设备控制器多个字节的信息,也就不需要CPU继续给出信息了,只有上次给DMA的信息使用完之后,才会要CPU的介入。

DMA控制器

请添加图片描述
之前说的DMA控制器其实也是一种IO控制器,他和我们介绍的IO控制器有区别,为了实现块设备和CPU进行通信用样的设置了一系列的寄存器,CPU可以通过系统总线来读或者来写寄存器中的某一些内容,同样的系统总线还会将内存和DMA控制器连接起来,所以DMA和内存可以直接进行读写,不再需要经过CPU,CPU再刚开始对DMA控制器指明这次要读入的数据存放在磁盘的什么位置,这些数据要存放于内存的什么位置这个信息是存放于MAR中的,并且要指明这次读入的数据量是多少,这个数据量是存放在DC中,DMA控制器根据CPU提供的一系列参数从磁盘的相应位置写入到内存,这个过程不再需要CPU的干预

另外需要注意每一次DMA控制器的读入的也是一个字的信息,不过这一个字的信息是先存放在DR中,然后等DR中存放的达到一个块大小的时候才会发出一个中断,(个人理解:此次中段有两个目的,一个是检查这一块数据是否有错误,另外就是若是需要继续传输,之前我们说过磁盘为每一段数据分配空间大多是情况下并不是连续的空间,而是多种方式将离散的空间链接起来,所以则需要CPU提供下一不连续块的信息,)
请添加图片描述
开始的时候需要CPU指明状态,结束的时候通过一个中断使得CPU进行处理,
若是不是连续的块,同样的需要CPU发出多条指令,同样的中断的次数也会增多
DMA方式与中断方式的主要区别是,中断方式在每个字数据需要传输时中断CPU,而 DMA方式则是在所要求传送的一批数据全部传送结束时才中断CPU;此外,中断方式的数据传送是在中断处理时由CPU控制完成的,而 DMA方式则是在 DMA控制器的控制下完成的

通道控制方式

当连接的设备过多的时候,此时依然可能发生频发的中断所以。。。
这种方式是对DMA方式的一种发展,它可以进一步减少CPU的干预,即把对一个数据块的读(或写)为单位的干预,减少为对一组数据块的读(或写)及有关控制和管理为单位的干预。同时,又可以实现CPU、通道和IO设备三者的并行操作,从而更有效地提高整个系统的资源利用率。
请添加图片描述
CPU ,通道,内存会通过系统总线连接到一起,就是相当于CPU让通道去执行一个任务,这个任务的清单已经给你了,但是这个具体需要做什么不是CPU直接告诉通道的,而是由通道去执行这个通道程序所获得的(这个通道程序的地址是在第一次CPU介入的时候告诉通道的)
请添加图片描述

知识点回顾

请添加图片描述
IO通道与一般处理机的区别是:通道指令的类型单一,没有自己的内存,通道所执行的通道程序是放在主机的内存中的,也就是说通道与CPU 共享内存。
I/O通道与 DMA方式的区别是:DMA方式需要CPU来控制传输的数据块大小、传输的内存位置,而通道方式中这些信息是由通道控制的。另外,每个 DMA控制器对应一台设备与内存传递数据(个人理解:所以这个DMA控制器和IO控制器有一个区别就是连接的外设数目不同),而一个通道可以控制多台设备与内存的数据交换。并且一个通道是可以控制多个IO控制器的

5.1.4 IO软件层次结构

知识总览

请添加图片描述

用户层软件

请添加图片描述

设备独立性软件

设备独立性也称设备无关性,使得应用程序独立于具体使用的物理设备。为实现设备独立性而引入了逻辑设备和物理设备这两个概念。在应用程序中,使用逻辑设备名来请求使用某类设备;而在系统实际执行时,必须将逻辑设备名映射成物理设备名使用
使用逻辑设备名的好处是:①增加设备分配的灵活性;②易于实现IO重定向,所谓IO重定向,是指用于IO操作的设备可以更换(即重定向),而不必改变应用程序
为了实现设备独立性,必须再在驱动程序之上设置一层设备独立性软件。总体而言,设备独立性软件的主要功能可分为以下两个方面:①执行所有设备的公有操作,包括:对设备的分配与回收:将逻辑设备名映射为物理设备名;对设备进行保护,禁止用户直接访问设备;缓冲管理;差错控制;提供独立于设备的大小统一的逻辑块,屏蔽设备之间信息交换单位大小和传输速率的差异。②向用户层(或文件层)提供统一接口。无论何种设备,它们向用户所提供的接口应是相同的。例如,对各种设备的读/写操作,在应用程序中都统一使用read/write命令等。
主要实现的功能:
1.向上层提供统一的调用接口(如读写系统调用)
2.设备的保护:原理类似与文件保护。设备被看做是一种特殊的文件,不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也不一样。
3.差错处理:设备独立性软件需要对一些设备的错误进行处理
4 设备的分配与回收:就像之前学过的生产者消费者进程一样
5 数据缓冲区管理:可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异
6 :如下

请添加图片描述
请添加图片描述
请添加图片描述
与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动IO 设备工作的驱动程序。通常,每类设备配置一个设备驱动程序,它是IO进程与设备控制器之间的通信程序,通常以进程的形式存在。设备驱动程序向上层用户程序提供一组标准接口,设备具体的差别被设备驱动程序所封装,用于接收上层软件发来的抽象IO要求,如 read和 write命令,转换为具体要求后,发送给设备控制器,控制IO设备工作;它也将由设备控制器发来的信号传送给上层软件,从而为IO内核子系统隐藏设备控制器之间的差异
请添加图片描述
当我们安装外部设备的时候,很多的时候,右下会弹出正在安装驱动程序,这个驱动程序就是由厂家提供的,所以设备独立性软件不能直接控制硬件,必须调用由厂家提供的设备驱动程序,由这个设备驱动程序来完成对硬件的控制

中断处理程序

用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完毕再恢复被中断进程的现场后,返回到被中断进程。
中断处理层的主要任务有:进行进程上下文的切换,对处理中断信号源进行测试,读取设备状态和修改进程状态等。由于中断处理与硬件紧密相关,对用户而言,应尽量加以屏蔽,因此应放在操作系统的底层,系统的其余部分尽可能少地与之发生联系。
类似于文件系统的层次结构,IO子系统的层次结构也是我们需要记忆的内容
请添加图片描述
因为中断处理程序是需要根据状态寄存器的内容来进行相应的操作的,所以也是需要和硬件打交道的,设备驱动程序同样的也会和硬件打交道,其他再上层的则不会和硬件打交道

知识点回顾

请添加图片描述
请添加图片描述
例如,①当用户要读取某设备的内容时,通过操作系统提供的read命令接口,这就经过了用户层。②操作系统提供给用户使用的接口,一般是统一的通用接口,也就是几乎每个设备都可以响应的统一命令,如 read 命令,用户发出的read命令,首先经过设备独立层进行解析,然后交往下层。③接下来,不同类型的设备对read命令的行为会有所不同,如磁盘接收read 命令后的行为与打印机接收read 命令后的行为是不同的。因此,需要针对不同的设备,把read命令解析成不同的指令,这就经过了设备驱动层。④命令解析完毕后,需要中断正在运行的进程,转而执行read命令,这就需要中断处理程序。⑤最后,命令真正抵达硬件设备,硬件设备的控制器按照上层传达的命令操控硬件设备,完成相应的功能。

5.1.5输入输出应用程序接口u0026驱动程序接口

请添加图片描述

输入输出应用程序接口

(1)字符设备接口
字符设备是指数据的存取和传输是以字符为单位的设备,如键盘、打印机等。基本特征是传输速率较低、不可寻址,并且在输入/输出时通常采用中断驱动方式
get和 put操作。由于字符设备不可寻址,只能采取顺序存取方式,通常为字符设备建立一个字符缓冲区,用户程序通过get操作从缓冲区获取字符,通过 put操作将字符输出到缓冲区。
in-control 指令。字符设备类型繁多,差异甚大,因此在接口中提供一种通用的 in-control 指令来处理它们(包含了许多参数,每个参数表示一个与具体设备相关的特定功能)。
字符设备都属于独占设备,为此接口中还需要提供打开和关闭操作,以实现互斥共享。
(2)块设备接口
块设备是指数据的存取和传输是以数据块为单位的设备,典型的块设备是磁盘。基本特征是传输速率较高、可寻址。磁盘设备的IO常采用DMA方式
隐藏了磁盘的二维结构。在二维结构中,每个扇区的地址需要用磁道号和扇区号来表示。块设备接口将磁盘的所有扇区从0到n-1依次编号,这样,就将二维结构变为一种线性序列。将抽象命令映射为低层操作。块设备接口支持上层发来的对文件或设备的打开、读、写和关闭等抽象命令,该接口将上述命令映射为设备能识别的较低层的具体操作。内存映射接口通过内存的字节数组来访问磁盘,而不提供读/写磁盘操作。映射文件到内存的系统调用返回包含文件副本的一个虚拟内存地址。只在需要访问内存映像时,才由虚拟存储器实际调页。内存映射文件的访问如同内存读写一样简单,极大地方便了程序员。
(3))网络设备接口
现代操作系统都提供面向网络的功能,因此还需要提供相应的网络软件和网络通信接口,使计算机能够通过网络与网络上的其他计算机进行通信或上网浏览。许多操作系统提供的网络I/O接口为网络套接字接口,套接字接口的系统调用使应用程序创建的本地套接字连接到远程应用程序创建的套接字,通过此连接发送和接收数据

请添加图片描述
上层的用户程序需用通过系统调用请求使用底层的某一个IO设备,IO种类特性非常的多样化,所以上层很难通过一个统一的接口来操控IO设备,设备独立软件需要向上层提供若干种接口,上层的应用程序若是要访问的是字符设备,或者块设备,所调用的系统调用接口是各不相同的,这就是我们要学的东西,字符设备的接口,块设备的接口,网络设备的接口。
请添加图片描述
网络控制器(网卡)就是来收发数据包的,不同的数据包应给不同的应用程序,网络设备接口又叫做网络套接字接口,会向上层提供socket系统调用,这个系统调用作用是可以创建一个网络套接字,每一个电脑都有一个IP地址,IP地址定位到了一个主机,再加上一个端口号,这个端口号就可以映射到计算机的某一个应用程序,
请添加图片描述
每一个套接字绑定了本机的一个端口,我们通过主机的IP地址然后结合套接字绑定的端口就可以找到全世界任何一个套接字对象,两个套接字之间建立点对点的连接就是通过IP结合端口来实现的

阻塞/非阻塞IO

请添加图片描述
阻塞Io就是类似scanf的时候若是我们不输入就会一直等待我们输入,
而非阻塞IO如一个write系统调用往磁盘写数据,这个系统调用请求可以很快的被处理完,然后迅速的返回用户进程让它继续往下执行
即便磁盘忙碌也是不需要进程等待,因为进程准备的数据在用户区,而操作系统内核又在内核区,你发出write系统调用想要把这一块数据写到磁盘的时候,即便磁盘此时正在忙碌,设备独立性软件软件那一层也会迅速的响应你的这个系统调用请求,先把这一块用户区的数据复制到内核再说,只要数据复制到内核,内核把这个数据慢慢的写回磁盘便可,至于用户进程只要完成了数据的复制我就可以让你继续的往下执行了,所以这种类型的系统调用不需要等待

设备驱动程序接口

知识总览

如果每个设备驱动程序与操作系统的接口都不同,那么每次出现一个新设备时,都必须为此修改操作系统。因此,要求每个设备驱动程序与操作系统之间都有着相同或相近的接口。这样会使得添加一个新设备驱动程序变得很容易,同时也便于开发人员编制设备驱动程序。对于每种设备类型,例如磁盘,操作系统都要定义一组驱动程序必须支持的函数。对磁盘而言,这些函数自然包含读、写、格式化等。驱动程序中通常包含一张表格,这张表格具有针对这些函数指向驱动程序自身的指针。装载驱动程序时,操作系统记录这个函数指针表的地址,所以当操作系统需要调用一个函数时,它可以通过这张表格发出间接调用。这个函数指针表定义了驱动程序与操作系统其余部分之间的接口。给定类型的所有设备都必须服从这一要求。
与设备无关的软件还要负责将符号化的设备名映射到适当的驱动程序上。例如,在 UNIX中,设备名/devldisk0唯一确定了一个特殊文件的i结点,这个i结点包含了主设备号(用于定位相应的驱动程序)和次设备号(用来确定要读写的具体设备)。
在UNIX和 Windows 中,设备是作为命名对象出现在文件系统中的,因此针对文件的常规保护规则也适用于IO设备。系统管理员可以为每个设备设置适当的访间权限。

请添加图片描述
请添加图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值