1.I/O设备
1.1 块设备
信息交换以数据块为单位,它属于有结构设备。
块设备传输速率较高,可寻址,且可对该设备随机地的读写。
栗子🌰:磁盘。
1.2 字符设备
信息交换以字符为单位,属于无结构类型。
字符设备传输速率低,不可寻址,并且时长采用中断I/O方式。
栗子🌰:打印机。
分类
低速设备
:传输速率仅为几B ~ 几百B
。如键盘、鼠标等。中速设备
:传输速率为几KB ~ 几MB
。如激光打印机等。高速设
备:传输速率为数百MB ~ 数十GB
。如磁盘机、光盘机等。
字符设备属于独占设备,访问属于互斥访问。
2.I/O接口(设备控制器)
2.1 概述
I/O接口位于CPU与设备之间,它既要与CPU通信,又要与设备进行通信,具有按CPU发来的命令去控制设备工作的功能。
2.2 结构
- 设备控制器与CPU的接口
- 三类信号线:数据线、地址线、信号线。
- 两个寄存器
- 数据寄存器:存放从设备送来的输入数据或从CPU送来的输出数据。
- 控制/状态寄存器:存放从CPU送来的控制信息或设备送来的状态信息。
- I/O逻辑
- 功能:用于实现对设备的控制。
- 通过一组控制线对CPU送来的I/O命令进行译码,通过一组地址线对CPU送来的地址进行译码,然后相应地对所选设备进行控制。
- 设备控制器与设备的接口
- 由于一个设备控制器可能会与多个设备相连,因此一个设备控制器中可能有多个设备接口。
- 每个设备接口中存在数据、状态、控制三种类型的信号。
为了便于上层软件的编制,设备控制器通常需要提供控制寄存器、状态寄存器和控制命令。
2.3 功能
- 接收和识别CPU送来的命令,如磁盘控制器能接收到读、写、控制等信号。
- 数据交换,实现
主存 - 设备控制器 - 设备
之间的数据传输。 - 标识和报告设备的状态,以供CPU处理。
- 地址识别。
- 数据缓冲。
- 差错控制。
3.I/O端口
3.1 概述
I/O端口是指设备控制器中可被CPU直接访问的寄存器。
3.2 分类
数据寄存器
:实现CPU和外设之间的数据缓冲。状态寄存器
:获取执行结果和设备的状态信息,以告知CPU外设是否准备好了。控制寄存器
:由CPU写入,以便启动命令或更改设备模式。
3.3 与CPU通信的方式
独立编址
:为每个端口分配一个I/O端口号,所有I/O端口形成一个I/O端口空间。普通用户不能对其进行访问,只有OS的特殊的I/O指令才能访问端口。统一编址
:每个端口被分配唯一的内存地址,且不会有内存被分配这一地址,通常分配给端口的地址靠近地址空间的顶端。
4.I/O控制方式
4.1 程序直接控制方式
4.1.1 概述
计算机从外设读取的每个字,C{I都需要对外设状态进行循环检查,知到确定该字已经在I/O控制器的数据寄存器中。
4.1.2 优点
简单,易于实现。
4.1.3 缺点
在该方式中,由于CPU的高速性和I/O设备的低速性,导致CPU的绝大部分时间都在处于等待I/O设备完成数据I/O的循环测试中,造成了CPU资源的极大浪费,导致CPU的利用率极低。
4.2 中断驱动方式
4.2.1 概述
该方式的思想是允许I/O设备主动打断CPU的运行并请求服务,从而“解放”CPU。
4.2.2 工作过程
CPU向I/O控制器发出一个读命令,保存当前运行环境的上下文,然后就可以干其他事情去了,它将在每条指令的执行默认检查有无中断产生,I/O控制器这边在接收到CPU的指令后,便开始启动I/O工作,从外部读取数据到I/O控制器的数据寄存器中,待数据准备好后,便向CPU发出一个I/O中断,告知其本次数据已经准备好了,CPU执行到当条指令的执行末尾时,开始检查有无中断,发现有个I/O中断,于是CPU便保存当前执行环境的上下文,然后去执行中断处理程序,处理该I/O中断,将数据从I/O控制器那里读到CPU这边的寄存器中,然后继续向I/O控制器发出下一次的读写请求,然后继续忙其他事情去了,如此反复。
4.2.3 评估
该方式比程序直接控制方式有效,但由于每个字的传输还需要经过CPU,这就导致该方式仍要消耗较多的CPU时间。
4.3 DMA方式
4.3.1 概述
该方式的思想是直接在内存
与外设
之间开辟一条直接的数据通路,彻底“解放”CPU!!!
这条数据通路只是逻辑上的,实际并未建立一条真正的物理通路,而通常是通过总线进行数据传送的。
4.3.2 特点
- 基本的传送单位是块。
- 所传送的数据是直接从外设送入内存,或者相反。
- 仅在传送一个或多个数据的开始和结束阶段,才需CPU干预,整块数据的传送是在DMA控制器的控制下完成的。
4.3.3 DMA控制器(DMAC)的组成
命令/状态寄存器(CR)
:接收CPU送来的I/O命令、有关控制信息以及设备的状态信息。内存地址寄存器(MAR)
:在输入时,它存放数据从设备传送到内存的起始目标地址,在输出时,它存放从内存到设备的内存源地址。数据寄存器(DR)
:存放从设备到内存或从内存到设备的数据。数据计数器(DC)
:存放本次要传送的字(节)数。
4.3.4 工作过程
CPU接收到I/O设备的DMA请求时,它给DMAC发出一条命令并设备MAR和DC的值后,启动DMAC,然后忙其他事情去了,后面的数据传送及其控制将交由DMAC全权处理,待这一批数据传送完成后,DMAC将发送一个中断信号给CPU,告知其本次数据传送完成,CPU则根据该中断执行中断处理逻辑,执行一些本次数据传送的善后工作,收个尾。
系统将数据从磁盘读到内存的过程:
4.3.5 评估
DMA方式在一批数据全部传送完成后才中断CPU,而中断方式需要每传送一个数据就中断一次CPU;DMA方式的数据传送是在DMA控制器的控制下完成的,而中断方式则是在中断处理时由CPU完成。
4.4 通道控制方式
4.4.1 概述
I/O通道是指专门负责I/O的处理机,他可以进一步减少CPU的干预,将对一个数据读写为单位的干预转为对一批数据读写为单位的干预。同时,它可以实现CPU、通道、I/O设备三者的并行工作,从而整体上进一步提升系统的资源利用率。
通道又称I/O处理机,它用于实现
内存
与外设
之间的数据传送。
通道是一种特殊的处理器(不是软件),因此通道技术是一种硬件机制。
编制好的通道程序存放在内存
中。
来自通道的中断将由设备管理负责处理。
通道控制设备控制器,设备控制器控制设备工作。三者是层层递进的关系。
4.4.2 工作过程
当CPU要完成一批数据的读写操作时,向I/O通道发出一条I/O指令,以给出要执行的I/O通道程序的首地址和要访问的I/O设备,然后通道接收到该命令后将执行通道程序以完成CPU分配的任务,数据传送完成后将向CPU发出中断请求。
4.4.3 评估
- I/O通道的指令类型单一,没有自己的内存,通道所执行的程序是放在自己内存中的,与CPU共享内存。
- 通道控制方式下,传输的数据块的大小、内存位置将由通道自己控制,此外,一个通道可以控制多条设备与内存进行数据交换,而DMAC只能对应一台设备与内存进行数据交换。
字节多路通道含有很多非分配型的子通道,其数量可达几十甚至数百个,每个通道可连接一个设备并控制该设备的I/O操作,这些子通道按照时间片轮转的方式使用主通道,各个通道每完成其I/O设备的一个字节的交换,便让出主通道的使用权,因此,字节多路通道适合于低速或中速I/O设备。
5.I/O软件的层次结构
5.1 用户层I/O软件
5.1.1 概述
实现与用户交互的接口,用户可直接调用在用户层提供的、与I/O操作有关的库函数,对设备进行操作。
一般而言,大部分的I/O软件都在OS内部,只有小部分处在用户层。
用户层软件必须通过一组系统调用来获取OS服务。
5.2 设备独立性软件
5.2.1 概述
用于实现用户程序与设备驱动器的统一接口、设备命令、设备的保护以及设备的分配与释放等,同时为设备管理和数据传送提供必要的存储空间。
设备独立性又称设备无关性,即使得应用程序独立于具体使用的物理设备。在应用程序中,使用逻辑设备来请求使用某类设备,而在系统实际执行时,需要将逻辑设备通过设备映射表(DMT)映射成物理设备名使用。
使用逻辑设备名的优势:
- 增加设备分配的灵活性。
- 易于实现I/O的重定向,指用于I/O操作的设备可以更换而不必更换应用程序。
5.2.2 功能
- 执行所有设备的公用操作。比如:对设备的分配与回收、将逻辑设备名映射为物理设备名、对设备进行保护、缓冲管理、差错控制、屏蔽设备之间信息交换单位大小和传输速率的差异等。
- 向用户层或文件层提供统一接口。无论何种设备,它们向用户提供的接口是相同的。比如,在对各种设备的读/写操作,在应用程序中都统一使用
read
/write
命令。
5.3 设备驱动程序
5.3.1 概述
与硬件直接相关,负责具体实现OS对设备发出的操作命令,驱动I/O设备工作的驱动程序。
它是I/O进程与设备控制器之间的通信程序,通常以进程的形式存在。
设备驱动程序向上层用户程序提供一组标准接口以屏蔽不同设备之间的差异,同时这还用于接收上层软件发来的抽象I/O要求,然后将抽象要求转换为具体命令发送给设备控制器。控制I/O设备工作。当然,它也接收设备控制器发过来的信号,然后将其传递给上层软件。
一个设备驱动程序对应同一类型的设备(一类设备),而不对应特定类型的特定设备。
5.4 中断处理程序
5.4.1 概述
用于保存被中断进程的CPU环境,然后转入相应的中断处理程序进行处理,处理完毕后再恢复原来的CPU现场,然后返回到被中断进程。
5.4.2 功能
进行进程的上下文切换,对处理中断信号源进行测试,读取设备状态和修改进程状态等。
由于中断处理与硬件密切相关,因此置于OS的底层。
6.应用程序I/O接口
6.1 字符设备接口
get
:从缓冲区(由于字符设备不可寻址,只能顺序读取,因此通常为字符设备健康一个字符缓冲区)中获取一个字符。
put
:往缓冲区输入一个字符。
in-control
:包含了许多参数,每个参数表示一个与具体设备相关的特定功能。(由于字符设备种类繁多,因而设立该命令来处理这种情况)
互斥共享:由于字符设备属于独占设备,因此还需要提供加锁与解锁指令,以实现互斥访问。
6.2 块设备接口
隐藏磁盘的二维结构:将每个扇区的地址用磁道号和扇区号表示。
计算柱面号、磁道号、扇区号的工作是由设备驱动程序负责完成的。
抽象命令映射为低级命令:将上层发来的对文件或设备的打开、读、写等相关抽象命令转换为设备能够识别的较低层的具体操作。
内存映射接口通过内存的字节数来访问磁盘,而不提供读/写磁盘的操作。映射文件到内存的系统调用将返回一个包含文件副本的虚拟内存地址,只需要在访问内存映像时,才由虚拟存储器调页。
6.3 网络设备接口
许多OS提供的网络设备接口上网络套接字接口,套接字接口的系统调用使应用程序能够创建本地的套接字连接到远程的应用程序创建的套接字,从而借此发送和接收数据。
OS中的I/O接口还分为:阻塞与非阻塞I/O接口。
阻塞I/O:进程进行I/O操作时,将被阻塞,需要等待I/O操作完成。(大多数OS提供的I/O接口)
非阻塞I/O:进程进行I/O操作时,不被阻塞,进程需要通过轮询的方式来查询I/O操作是否完成。