您好,欢迎访问三七文档
I/O进程控制(1)I/O控制的引入(2)I/O控制的功能(3)I/O控制的实现(4)设备驱动程序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请求处理模块对用户的I/O请求进行处理(1)首先将I/O请求中的逻辑设备名转换为对应的物理设备名;(2)检查I/O请求命令中是否有参数错误;(3)在I/O请求命令参数正确时,它把该命令插入指向相应DCT的I/O请求队列;(4)启动设备分配程序。(5)在有通道的系统中,按I/O请求命令的要求编制出通道程序。在设备分配程序为I/O请求分配了相应的设备、控制器和通道之后,I/O控制模块还将启动缓冲管理模块为此次I/O传送申请必要的缓冲区,以保证I/O传送的顺利完成。缓冲区的申请也可在设备分配之前进行。例如UNIX系统首先请求缓冲区,然后把I/O请求命令写到缓冲区中并将该缓冲区挂到设备的I/O请求队列上。I/O请求处理在数据传送结束后,外设发出中断请求,I/O控制过程将调用中断处理程序和做出中断响应。对于不同的中断,其善后处理不同。例如处理结束中断时,要释放相应的设备、控制器和通道,并唤醒正在等待该操作完成的进程。另外,还要检查是否还有等待该设备的I/O请求命令。如有,则要通知I/O控制过程进行下一个I/O传送。中断请求处理I/O控制的实现可以按三种方式实现:(1)作为请求I/O操作的进程的一部分实现。(2)作为当前进程的一部分实现。(3)由专门的系统进程——I/O进程完成。(1)作为请求I/O操作的进程的一部分实现请求I/O操作的进程应具有良好的实时性,且系统应能根据在中断信号的内容准确地调度到请求所对应I/O操作的进程占据处理机。因为在大多数情况下,当一个进程发出I/O请求命令之后,都被阻塞睡眠。(2)作为当前进程的一部分实现不要求系统具有高的实时性。但由于当前进程与完成的I/O操作无关,所以当前进程不能接受I/O请求命令的启动I/O操作。当前进程可以在接收到中断信号后,将中断信号转交给I/O控制模块处理。让请求I/O操作的进程调用I/O操作控制部分(I/O请求处理、设备分配、缓冲区分配等),而让当前进程负责调用中断处理部分。(3)由专门的系统进程——I/O进程完成在用户进程发出I/O请求命令之后,系统调度I/O进程执行,控制I/O操作。在外设发出中断请求之后,I/O进程也被调度执行以响应中断。I/O请求处理模块设备分配模块缓冲区管理模块中断原因分析、中断处理模块设备驱动程序模块I/O进程三种实现方式每类(个)设备设一专门的I/O进程,且该进程只能在系统态下执行。每类(个)设备设一个专门的I/O进程,但该进程既可在用户态也可在系统态下执行。整个系统设一I/O进程,全面负责系统的数据传送工作。又可把I/O进程分为输入进程和输出进程。(1)I/O请求的进入用户程序:调用send将I/O请求发送给I/O进程;调用block将自己阻塞,直到I/O任务完成后被唤醒系统:利用wakeup唤醒I/O进程,完成用户所要求的I/O处理(2)I/O中断的进入当I/O中断发生时,内核中的中断处理程序发一条消息给I/O进程,由I/O进程负责判断并处理中断(3)I/O进程是系统进程,一般赋予最高优先级。一旦被唤醒,它可以很快抢占处理机投入运行I/O进程开始运行后,首先关闭中断,然后用receive去接收消息。两种情形:没有消息,则开中断,将自己阻塞;有消息,则判断消息(I/O请求或I/O中断);I/O请求I/O中断为了控制I/O传输,系统为每类设备编制设备驱动程序。任务:(1)接收和分析从设备分配转来的信息(与设备无关的上层软件的抽象请求);(2)根据设备分配的结果,结合具体物理设备特性完成具体工作。设备驱动程序是驱动物理设备和DMA控制器或I/O控制器等直接进行I/O操作的子程序的集合。每一个控制器都设有一个或多个设备寄存器,用来存放向设备发送的命令和参数。设备驱动程序负责解释这些命令,并监督它们正确执行。(1)设置相应设备有关寄存器的值;(2)启动设备进行I/O操作;(3)指定操作的类型和数据流向等。设备驱动程序在设备驱动程序的进程释放一条或多条命令后,系统有两种处理方式:多数情况下,执行设备驱动程序的进程必须等待命令完成,这样,在命令开始执行后,它阻塞自已,直到中断处理时将它解除阻塞为止;少数情况下,命令执行不必延迟就很快完成。设备驱动程序为了对驱动程序进行管理,系统中设置有设备开关表。设备开关表中给出相应设备的各种操作子程序的入口地址,例如打开、关闭、读、写和启动设备子程序的入口地址。设备开关表DST一般设备开关表是二维结构,其中的行和列分别表示设备类型和驱动程序类型。设备开关表也是I/O进程的一个数据结构。I/O控制过程为进程分配设备和缓冲区之后,可以使用设备开关表调用所需的驱动程序进行I/O操作。设备开关表DSTopenclosereadwriteioctl字符设备开关表openmountcloseunmountreadwrite块设备开关表高速缓冲调用openclosereadwriteioctl驱动程序设备中断处理程序openclosestrategy驱动程序设备中断处理程序中断向量中断向量设备中断文件子系统块设备开关表函数表项openclosestrategy01gdopengtopengdclosegtclosegdstrategygtstrategy…………字符设备开关表函数表项openclosereadwriteIoctl0ConopenConcloseConrdadConwriteConioctl1DzbopenDzbcloseDzbreadDzbwriteDzbioctl2Syopennulldevsyreadsywritesyioctl用户空间的I/O软件尽管大部分I/O软件都包含在操作系统中,但仍有一小部分是由与用户程序连接在一起的库过程,甚至完全由运行于核外的程序构成。系统调用,包括I/O系统调用,通常由库过程实现这些过程所做的工作只是将系统调用时所用的参数放在合适的位置,由其它的I/O过程实际实现真正的操作(1)用户进程层执行输入输出系统调用,对I/O数据进行格式化,为假脱机输入/输出作准备(2)独立于设备的软件实现设备的命名、设备的保护、成块处理、缓冲技术和设备分配(3)设备驱动程序设置设备寄存器、检查设备的执行状态(4)中断处理程序负责I/O完成时,唤醒设备驱动程序进程,进行中断处理(5)硬件层实现物理I/O的操作
本文标题:IO进程控制
链接地址:https://www.777doc.com/doc-3385053 .html