首页 理论教育 操作系统原理中的I/O子系统:设备驱动与接口

操作系统原理中的I/O子系统:设备驱动与接口

时间:2023-10-17 理论教育 版权反馈
【摘要】:具体的差别被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子系统来实施。图8-4说明了内核中与I/O相关部分的软件构造层次。

图8-4 内核I/O结构

设备驱动程序层的作用是为内核I/O子系统隐藏设备控制器之间的差异,这就与I/O系统调用的通用类型包装了设备行为,为应用程序隐藏了硬件差异类似。将I/O子系统与硬件分离简化了操作系统开发人员的任务,也有利于设备的设计与制造。

1.各类设备的接口

(1)块设备接口

块设备接口规定了访问磁盘驱动器和其他基于块设备所需的各个方面。一般而言,设备应提供read和write命令,若是随机访问设备还应提供seek命令,以便说明下次传输哪个磁盘块。应用程序通常通过文件系统接口访问设备。read、write和seek命令描述了块存储设备的基本特点,应用程序就不必关注这些设备的低层细节和差别。

对于系统本身和特殊应用程序(如数据库管理系统),一般进行的是原始I/O,即将块设备当作一个简单的线性数组来访问。

(2)主存映射接口

主存映射文件访问是建立在块设备驱动程序之上的。主存映射接口不提供read和write操作,而是通过主存中的字节数组来访问磁盘存储信息。将文件映射到主存的系统调用返回的是一个字符数组的虚拟主存地址,该字符数组包含了文件的一个拷贝。实际数据传输在需要时才执行,以满足主存映射的访问。由于传输采用了与虚拟主存访问相同的机制,所以主存映射I/O十分高效。主存映射为程序员提供了方便的手段,访问主存映射文件如同主存读写一样简单。

(3)字符流设备接口

键盘是一种可以通过字符流接口访问的设备,这类设备的基本系统调用使应用程序可以get或put字符。在此接口上,可以构造库以提供具有缓冲和编辑能力的按行访问(例如,当用户键入了一个退格键,之前的一个字符可以从字符流中删除)。这种访问方式对有些输入很方便,如键盘、鼠标、调制解调器,这些设备自发地提供输入数据,而应用程序无法预计这些输入。这种访问方式也适合于像打印机、声卡之类的输出设备。(www.xing528.com)

(4)网络套接字接口

由于网络I/O与磁盘I/O的性能及其访问特点存在很大的差异,绝大多数操作系统提供的网络I/O接口也与磁盘的read-write-seek接口不同,许多操作系统(如UNIX和windows NT)提供的接口是网络套接字接口。

基于套接字接口的系统调用可以让应用程序创建一个套接字,连接本地套接字和远程地址(将本地应用程序与由远程应用程序创建的套接字相连),监听要与本地套接字相连的远程应用程序。通过连接后可发送和接收数据。为了支持服务器的实现,套接字接口还提供了select函数,用来管理一组套接字。调用select函数可以知道哪个套接字已有接收数据需要处理,哪个套接字已有空间可以接收数据以便发送。使用select系统调用可以不再使用轮询和忙等待来处理网络I/O。套接字接口提供的函数封装了基本的网络功能,大大方便了用户的使用和提高了网络设备和协议的使用效率

2.I/O子系统功能

I/O子系统使进程能与外部设备(如终端、打印机等)及网络进行通信,即实施I/O控制功能。I/O控制的功能主要有以下三个方面。

①解释用户的I/O系统调用;②设备驱动;③中断处理。

设备驱动程序与设备类型是一一对应的,即系统中的设备可以根据设备使用特性不同分为几大类,对于每一类设备可以包含有几个不同的个体。例如,打印机是一类设备,系统可以有多个打印机,它们属于同类设备。在进行I/O时,应考虑设备处理的一致性,即对于某一类设备,操作系统具有相同的设备驱动程序。又如,系统可以只含有一个磁盘驱动程序以控制所有的磁盘,用一个终端驱动程序控制所有的终端。一个设备驱动程序可以控制一种给定类别的许多物理设备。而在驱动程序中,需要对它所控制的这些设备加以区分。也就是说,想送往某一终端的输出决不会送往另一个终端。

3.调用I/O核心模块的方式

控制设备I/O工作的核心模块通常称为设备驱动程序。该核心模块有以下两种实现方式。

(1)第一种方式。I/O控制模块有一个接口程序,它负责解释进程的I/O系统调用,即将其转换成I/O控制模块认识的命令形式。而对每类设备的处理则设置一个设备处理进程,其相应的程序就是该类设备的驱动程序。当接口程序接收并解释了一个I/O系统调用后,就通知相应的设备处理进程有I/O工作要做,该设备处理进程就进行设备驱动工作。在该类设备驱动程序中,依具体的物理设备号再去启动物理的I/O操作。物理设备工作完成后会引起相应的中断处理。如果无工作可做,设备处理进程处于等待状态,等有工作后被唤醒。

(2)第二种方式。将设备和文件一样看待,这是UNIX系统采用的方法。使用文件系统的系统调用进行设备的读、写操作等。设备作为特殊文件也有相应的文件目录表项(在UNIX系统中称为索引节点),根据文件类型(设备是特殊文件)可以查找该文件的索引节点,从而进入该类设备的驱动程序。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈