1、第第 8章章I/O操作的实现操作的实现 8.1 I/O8.1 I/O子系统概述子系统概述子系统概述子系统概述 8.2 8.2 用户空间用户空间用户空间用户空间I/OI/O软件软件软件软件 8.2.1 8.2.1 用户程序中的用户程序中的用户程序中的用户程序中的I/OI/O函数函数函数函数 8.2.2 8.2.2 文件的基本概念文件的基本概念文件的基本概念文件的基本概念 8.2.3 8.2.3 系统级系统级系统级系统级I/OI/O函数函数函数函数 8.2.4 C 8.2.4 C标准标准标准标准I/OI/O函数函数函数函数 8.2.5 8.2.5 用户程序中的用户程序中的用户程序中的用户程序中的I
2、/OI/O请求请求请求请求 8.3 I/O 8.3 I/O硬件与软件接口硬件与软件接口硬件与软件接口硬件与软件接口 8.3.1 I/O8.3.1 I/O设备设备设备设备 8.3.2 8.3.2 设备控制器设备控制器设备控制器设备控制器 8.3.3 I/O 8.3.3 I/O端口及其编址端口及其编址端口及其编址端口及其编址 8.3.4 I/O 8.3.4 I/O控制方式控制方式控制方式控制方式8.4 8.4 内核空间内核空间内核空间内核空间I/OI/O软件软件软件软件 8.4.1 8.4.1 与设备无关的与设备无关的与设备无关的与设备无关的I/OI/O软件软件软件软件 8.4.2 8.4.2 设
3、备驱动程序设备驱动程序设备驱动程序设备驱动程序 8.4.3 8.4.3 中断服务程序中断服务程序中断服务程序中断服务程序I/O和文件操作和文件操作主要教学目标通过揭示高级语言程序中的I/O及文件操作请求的底层实现机制,使学生深刻理解OS在输入/输出系统中的重要作用;深刻理解计算机中硬件和软件如何协调工作以完成计算机功能。主要教学内容I/O子系统的组成和层次结构用户空间I/O软件I/O硬件与软件的接口内核空间I/O软件I/O操作的实现操作的实现分以下三个部分介绍第一讲:用户空间I/O软件-I/O子系统概述-文件的基本概念-用户空间的I/O函数第二讲:I/O硬件和软件的接口-I/O设备和设备控制器
4、-I/O端口及其编址方式-I/O控制方式第三讲:内核空间I/O软件-与设备无关的I/O软件-设备驱动程序-中断服务程序一个典型程序的转换处理过程一个典型程序的转换处理过程#include int main()printf(hello,worldn);经典的“hello.c”源程序#i n c l u d e n n i n t m a i n ()n 104 62 10 10 105 110 116 32 109 97 105 110 40 41 10 123n p r i n t f(h e l10 32 32 32 32 112 114 105 110 116 102 40 34 104
5、101 108l o ,w o r l d n );n 108 111 44 32 119 111 114 108 100 92 110 34 41 59 10 125hello.c的的ASCII文本表示文本表示I/O子系统概述子系统概述所有高级语言的运行时(runtime)都提供了执行I/O功能的机制 例如,C语言中提供了包含像printf()和scanf()等这样的标准I/O库函数,C+语言中提供了如(输出)这样的重载操作符。从高级语言程序中通过I/O函数或I/O操作符提出I/O请求,到设备响应并完成I/O请求,涉及到多层次I/O软件和I/O硬件的协作。I/O子系统也采用层次结构从用户I/
6、O软件切换到内核I/O软件的唯一办法是“异常”机制:系统调用(自陷)I/O子系统概述子系统概述 各类用户的I/O请求需要通过某种方式传给OS:最终用户:键盘、鼠标通过操作界面传递给OS 用户程序:通过函数(高级语言)转换为系统调用传递给OS I/O软件被组织成从高到低的四个层次,层次越低,则越接近设备而越远离用户程序。这四个层次依次为:(1)用户层I/O软件(I/O函数调用系统调用)(2)与设备无关的操作系统I/O软件(3)设备驱动程序(4)I/O中断处理程序 大部分I/O软件都属于操作系统内核态程序,最初的I/O请求在用 户程序中提出。OS在I/O系统中极其重要!OS用户用户I/O软件软件用
7、户软件可用以下两种方式提出I/O请求:(1)使用高级语言提供的标准I/O库函数。例如,在C语言程序中可以直接使用像fopen、fread、fwrite和fclose等文件操作函数,或printf、putc、scanf和getc等控制台I/O函数。程序移植性很好!但是,使用标准I/O库函数有以下几个方面的不足:(a)标准I/O库函数不能保证文件的安全性(无加/解锁机制)(b)所有I/O都是同步的,程序必须等待I/O操作完成后才能继续执行 (c)有时不适合甚至无法使用标准I/O库函数实现I/O功能,如,不提供读取文件元数据的函数(元数据包括文件大小和文件创建时间等)(d)用它进行网络编程会造成易于
8、出现缓冲区溢出等风险(2)使用OS提供的API函数或系统调用。例如,在Windows中直接使用像CreateFile、ReadFile、WriteFile、CloseHandle等文件操作API函数,或ReadConsole、WriteConsole等控制台I/O的API函数。对于Unix或Linux用户程序,则直接使用像open、read、write、close等系统调用封装函数。用户用户I/O软件软件用户进程请求读磁盘文件操作用户进程使用标准C库函数fread,或Windows API函数 ReadFile,或Unix/Linux的系统调用函数read等要求读一个磁盘文件块。用户程序中涉及
9、I/O操作的函数最终会被转换为一组与具体机器架构相关的指令序列,这里我们将其称为I/O请求指令序列。例如,若用户程序在IA-32架构上执行,则I/O函数被转换为IA-32的指令序列。每个指令系统中一定有一类陷阱指令(有些机器也称为软中断指令或系统调用指令),主要功能是为操作系统提供灵活的系统调用机制。在I/O请求指令序列中,具体I/O请求被转换为一条陷阱指令,在陷阱指令前面则是相应的系统调用参数的设置指令。系统系统I/O软件软件OS在I/O子系统中的重要性由I/O系统以下三个特性决定:(1)共享性。I/O系统被多个程序共享,须由OS对I/O资源统一调度管理,以保证用户程序只能访问自己有权访问的
10、那部分I/O设备,并使系统的吞吐率达到最佳。(2)复杂性。I/O设备控制细节复杂,需OS提供专门的驱动程序进行控制,这样可对用户程序屏蔽设备控制的细节。(3)异步性。不同设备之间速度相差较大,因而,I/O设备与主机之间的信息交换使用异步的中断I/O方式,中断导致从用户态向内核态转移,因此必须由OS提供中断服务程序来处理。那么,如何从用户程序对应的用户进程进入到操作系统内核执行呢?系统调用!系统调用和系统调用和APIOS提供一组系统调用为用户进程的I/O请求进行具体的I/O操作。应用编程接口(API)与系统调用两者在概念上不完全相同,它们都是系统提供给用户程序使用的编程接口,但前者指的是功能更广
11、泛、抽象程度更高的函数,后者仅指通过软中断(自陷)指令向内核态发出特定服务请求的函数。系统调用封装函数是 API 函数中的一种。API 函数最终通过调用系统调用实现 I/O。一个API 可能调用多个系统调用,不同 API 可能会调用同一个系统调用。但是,并不是所有 API 都需要调用系统调用。从编程者来看,API 和 系统调用之间没有什么差别。从内核设计者来看,API 和 系统调用差别很大。API 在用户态执行,系统调用封装函数也在用户态执行,但具体服务例程在内核态执行。用户程序、用户程序、C函数和内核函数和内核用户程序总是通过某种I/O函数或I/O操作符请求I/O操作。例如,读一个磁盘文件记
12、录时,可调用C标准I/O库函数fread(),也可直接调用系统调用封装函数read()来提出I/O请求。不管是C库函数、API函数还是系统调用封装函数,最终都通过操作系统内核提供的系统调用来实现I/O。printf()函数的调用过程如下:Linux系统中系统中printf()函数的执行过程函数的执行过程某函数调用了printf(),执行到调用printf()语句时,便会转到C语言I/O标准库函数printf()去执行;printf()通过一系列函数调用,最终会调用函数write();调用write()时,便会通过一系列步骤在内核空间中找到write对应的系统调用服务例程sys_write来执行
13、。main()printf();用户程序 printf()xxxx();system_call()xxxx();系统调用封装函数系统调用处理程序用户空间、运行在用户态 内核空间、运行在内核态 write()int$0 x80 I/O标准库函数sys_write()系统调用服务例程在system_call中如何知道要转到sys_write执行呢?根据系统调用号!I/O操作的实现操作的实现分以下三个部分介绍第一讲:用户空间I/O软件-I/O子系统概述-文件的基本概念-用户空间的I/O函数第二讲:I/O硬件和软件的接口-I/O设备和设备控制器-I/O端口及其编址方式-I/O控制方式第三讲:内核空间I
14、/O软件-与设备无关的I/O软件-设备驱动程序-中断服务程序I/O硬件的组成硬件的组成I/O硬件建立了外设与主机之间的“通路”:主机-I/O总线(桥)-设备控制器-电缆-外设如何把用户I/O请求转换为对设备的控制命令并完成设备I/O任务,需要I/O软件与I/O硬件之间的协调工作如:printf(hello,worldn);主机-I/O总线(桥)-设备控制器(带连接器)-电缆-外设连接外部设备的连接器连接外部设备的连接器主机-I/O总线(桥)-设备控制器(带连接器)-电缆-外设外部设备的通用模型外部设备的通用模型通过电缆与设备控制器(I/O接口)进行数据、状态和控制信息的传送控制逻辑根据控制信息
15、控制设备的操作,并检测设备状态缓冲器用于保存交换的数据信息变换器用于在电信号形式(内部数据)和其他形式的设备数据之间进行转换控制逻辑缓冲器变换器控制状态数据设备控制器(连接器)电缆设备数据环境所有设备都可抽象成该通用模型!设备所用电缆中有三种信号线:控制信号、状态信号、数据信号设备控制器的结构设备控制器的结构设备控制器的一般结构:设备控制器的一般结构:不同不同I/O模块在复杂性和控制外设的数量上相差很大模块在复杂性和控制外设的数量上相差很大通过发送命令字到I/O控制寄存器来向设备发送命令通过从状态寄存器读取状态字来获取外设或I/O控制器的状态信息通过向I/O控制器发送或读取数据来和外设进行数据
16、交换将I/O控制器中CPU能够访问的各类寄存器称为I/O端口对外设的访问通过向I/O端口发命令、读状态、读/写数据来进行设备控制器又称 I/O控制器简称 I/O模块 或 I/O接口 I/O端口的寻址方式端口的寻址方式 (1)统一编址方式(内存映射方式)与主存空间统一编址,主存单元和I/O端口在同一个地址空间中。(将I/O端口映射到某个主存区域,故也称“存储器映射方式”)例如,RISC机器、Motorola公司的处理器等采用该方案 VRAM(显示存储器)通常也和主存统一编址(2)独立编址方式(特殊I/O指令方式)单独编号,不和主存单元一起编,使成为一个独立的I/O地址空间 (因为需专门I/O指令
17、,故也称为“特殊I/O指令方式”)例如,Intel公司和Zilog公司的处理器就是独立编址方式l 对I/O端口读写就是向I/O设备送出命令或从设备读状态或读/写数据l 一个I/O控制器可能会占有多个端口地址l I/O端口必须编号后,CPU才能访问它l I/O设备的寻址方式就是I/O端口的编号方式教室和办公室可以连号(统一编址),也可单独编号(独立编址)驱动程序与驱动程序与I/O指令指令控制外设进行输入/输出的底层I/O软件是驱动程序驱动程序设计者应了解设备控制器及设备的工作原理,包括:设备控制器中有哪些用户可访问的寄存器、控制/状态寄存器中每一位的含义、设备控制器与外设之间的通信协议等,而关于
18、外设的机械特性,程序员则无需了解。驱动程序通过访问I/O端口控制外设进行I/O:将控制命令送到控制寄存器来启动外设工作;读取状态寄存器了解外设和设备控制器的状态;访问数据缓冲寄存器进行数据的输入和输出。对I/O端口的访问操作由I/O指令完成,它们是一种特权指令IA-32中的I/O指令:in、ins、out和outsin和ins用于将I/O端口的内容取到CPU内的通用寄存器中;out和outs用于将通用寄存器内容输出到I/O端口。如 IN AL,DX:DX中存放I/O端口地址,将I/O端口中的内容取到AL中三种基本三种基本I/O方式方式程序直接控制方式(最简单的I/O方式)无条件传送:对简单外设
19、定时(同步)进行数据传送条件传送:CPU主动查询,也称程序查询或轮询(Polling)方式I/O Interrupt(中断I/O方式):几乎所有系统都支持中断I/O方式若一个I/O设备需要CPU干预,它就通过中断请求通知CPUCPU中止当前程序的执行,调出OS(中断处理程序)来执行处理结束后,再返回到被中止的程序继续执行Direct Memory Access(DMA方式):磁盘等高速外设所用的方式磁盘等高速外设成批地直接和主存进行数据交换需要专门的DMA控制器控制总线,完成数据传送数据传送过程无需CPU参与程序查询(程序查询(Polling)方式)方式I/O设备(包括设备控制器)将自己的状态
20、放到状态寄存器中 打印缺纸、打印机忙、未就绪等都是状态OS阶段性地查询状态寄存器中的特定状态,以决定下一步动作如:未“就绪”时,则一直“等待”例如:sys_write进行字符串打印的程序段大致过程如下:copy_string_to_kernel(strbuf,kernelbuf,n);/将字符串复制到内核缓冲区for(i=0;i 2#1#1#对 2#开放(不屏蔽)2#对 3#开放(不屏蔽)DMA方式的基本要点方式的基本要点DMA方式的基本思想在高速外设和主存间直接传送数据由专门硬件(即:DMA控制器)控制总线进行传输DMA方式适用场合高速设备(如:磁盘、光盘等)成批数据交换,且数据间间隔时间短
21、,一旦启动,数据连续读写采用“请求-响应”方式每当高速设备准备好数据就进行一次“DMA请求”,DMA控制器接受到DMA请求后,申请总线使用权DMA控制器的总线使用优先级比CPU高,为什么?与中断控制方式结合使用在DMA控制器控制总线进行数据传送时,CPU执行其他程序DMA传送结束时,要通过“DMA结束中断”告知CPU读一个磁盘扇区读一个磁盘扇区 -第一步第一步MainmemoryALURegister fileCPU chipDisk controllerGraphicsadapterUSBcontrollermousekeyboardMonitorDiskI/O busBus interfa
22、ceCPU对DMA控制器初始化:将传送方向(读)、传送数据个数、磁盘逻辑块号、主存起始地址等参数送到DMA控制器发送”启动DMA传送“命令DMA控制器传送数据个数被送到计数器中读一个磁盘扇区读一个磁盘扇区第二步第二步MainmemoryALURegister fileCPU chipDisk controllerGraphicsadapterUSBcontrollerMouse KeyboardMonitorDiskI/O busBus interface磁盘控制器读相应的扇区,并由DMA控制器控制总线把数据从磁盘控制器送主存,此时,CPU执行其他进程DMA控制器每传送一个数据,则计数器减1读
23、一个磁盘扇区读一个磁盘扇区第三步第三步MainmemoryALURegister fileCPU chipDisk controllerGraphicsadapterUSBcontrollerMouse KeyboardMonitorDiskI/O busBus interface当DMA传送结束(计数为0),DMA控制器向CPU发出“DMA结束中断请求”,要求CPU进行相应的后处理。DMA控制器例:中断、例:中断、DMA方式下方式下CPU的开销的开销 设处理器按500MHz的速度执行,硬盘控制器中有一个16B的数据缓存器,磁盘传输速率为4MB/Sec,在磁盘传输数据过程中,要求没有任何数据被
24、错过,并假定CPU访存和DMA访存没有冲突。(1)若用中断方式,每次传送的开销(包括用于中断响应和处理的时间)是500个时钟周期。如果硬盘仅用5%的时间进行传送,那么处理器用在硬盘I/O操作上所花的时间百分比(主机占用率)为多少?(2)若用DMA方式,处理器用1000个时钟进行DMA传送初始化,在DMA完成后的中断处理需要500个时钟。如果每次DMA传送8000B的数据块,那么当硬盘进行传送的时间占100%(即:硬盘一直进行读写,并传输数据)时,处理器用在硬盘I/O操作上的时间百分比(主机占用率)为多少?想象一下:假定大仓库门口有一个箱子,可放16个零件。要将大仓库中的一批零件运到小仓库中,可
25、以有几种方法?中断方式:每装满一个箱子就喊车床上的技工来运到车间,再从车间运到小仓库 DMA方式:车床技工停下来告诉搬运工说,一次要8000个零件放到小仓库固定的地方,然后回到车床工作;搬运工开始分两组工作,一组从大仓库搬货到箱子中,另一组将箱子直接运到小仓库指定地方,搬完8000个后,搬运工告知技工已完成任务,技工进行相应处理。上述两种方式中,哪种方式的生产效率更高呢?I/O操作的实现操作的实现分以下三个部分介绍第一讲:用户空间I/O软件-I/O子系统概述-文件的基本概念-用户空间的I/O函数第二讲:I/O硬件和软件的接口-I/O设备和设备控制器-I/O端口及其编址方式-I/O控制方式第三讲
26、:内核空间I/O软件-与设备无关的I/O软件-设备驱动程序-中断服务程序中断服务程序中断服务程序中断控制和DMA控制两种方式下都需进行中断处理中断控制方式:中断服务程序主要进行从数缓器取数或写数据到数缓器,然后启动外设工作DMA控制方式:中断服务程序进行数据校验等后处理工作在内核I/O软件中用到的I/O指令、“开中断”和“关中断”等指令都是特权指令,只能在操作系统内核程序中使用 本章小结本章小结用户程序通常通过调用编程语言提供的库函数或操作系统提供的API函数来实现I/O操作I/O库函数最终可能会调用系统调用的封装函数,通过封装函数中的陷阱指令使用户进程从用户态转到内核态执行在内核态中执行的内核空间I/O软件主要包含三个层次:与设备无关的操作系统软件设备驱动程序中断服务程序具体I/O操作通过设备驱动程序和中断服务程序控制I/O硬件来实现设备驱动程序的实现主要取决于具体的I/O控制方式:程序查询方式、中断方式、DMA方式
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922