操作系统OperatingSystems谌卫军清华大学软件学院进程管理21.I/O硬件2.I/O控制方式3.I/O软件4.磁盘第四章I/O设备管理进程管理3在现代计算机系统中,有大量的输入输出设备,其种类繁多,差异大。而且随着技术的发展,新设备也不断地出现。因此,如何管理好这些设备,使资源得以合理的利用,是操作系统的一个主要功能。I/O(Input/Output)设备进程管理44.1I/O硬件对于I/O硬件,操作系统所关心的并不是硬件自身的设计、制造和维护,而是如何来对它进行编程,即该设备给软件提供的接口是什么,包括它所接受的控制命令、所完成的功能,以及所返回的出错报告。进程管理5按交互方向分类:-输入设备:键盘、鼠标、扫描仪;-输出设备:显示器、打印机;-输入/输出:磁盘、网卡。4.1.1I/O设备的类型进程管理6按数据组织分类:-块设备:以数据块作为信息的存储和传输单位,每个数据块都有一个地址,数据块之间的读写操作是相互独立的,如磁盘;-字符设备:以字符作为信息存储和传输单位,数据即字符流,无定位无寻址,如鼠标;进程管理7有了I/O设备,是否就能完成I/O功能呢?进程管理84.1.2设备控制器机械部分电子部分一个I/O单元由两部分组成:机械部分和电子部分(设备控制器或适配器)。进程管理9机械部分即为I/O设备本身;电子部分称为:设备控制器(devicecontroller)或适配器(adapter)。–适配器的形式通常是印刷电路卡,可以插入到主板的扩充槽中;控制器的形式是一组芯片;–完成设备与主机间的连接和通讯。进程管理104.1.3I/O地址每个设备控制器都有一些寄存器用来与CPU通信。通过往这些寄存器中写入不同的值,OS能命令该设备去执行发送数据、接收数据、打开、关闭等操作;OS也能通过读取这些寄存器的值来了解设备的当前状态。此外,许多控制器还有一个数据缓冲区供OS读写。CPU外部设备控制逻辑电路控制寄存器状态寄存器数据寄存器如何让I/O设备工作?进程管理11问题:CPU如何与设备控制器进行通信?这不是普通的内存访问!方法有三种:I/O独立编址;内存映像编址;混合编址。进程管理121.I/O独立编址基本思路:给控制器中的每一个寄存器分配一个唯一的I/O端口(I/Oport)编号,称为I/O端口地址,然后用专门的I/O指令对端口进行操作;这些端口地址所构成的地址空间是完全独立的,与内存的地址空间没有关系。例如:INR0[4]表示读入I/O端口地址为4的内容;MOVR0[4]表示读入内存地址为4的内容;进程管理13Linux0.11/boot/setup.smoval,#0x11!initializationsequenceout#0x20,al!senditto8259A-1moval,#0x20!startofhardwareint's(0x20)out#0x21,almoval,#0x28!startofhardwareint's(0x28)out#0xA1,al……inal,#0x64!8042statusport!键盘控制器状态寄存器testal,#2jnzempty_8042!isinputbufferfull?进程管理142.内存映像编址基本思路:把所有控制器当中的每一个寄存器都映射为一个内存地址,专门用于I/O操作(功能上),对这些单元的读写操作即为普通的内存访问操作。端口地址空间与内存的地址空间统一编址,前者是后者的一部分,一般位于后者的顶端部分。进程管理15编程方便,无需专门的I/O指令(Cvs.汇编);不能对控制寄存器的内容进行Cache,须关闭;每一次都要判断访问的是内存还是I/O。进程管理163.混合编址基本思路:对于设备控制器中的寄存器,采用独立编址的方法;而对于设备的数据缓冲区,采用内存映像编址的方法。进程管理17PC机上的部分I/O端口地址(本图摘自Silberschatz,GalvinandGagne:“OperatingSystemConcepts”)进程管理18到目前为止,已经介绍了I/O设备的类型、设备的控制器、I/O的端口地址。现在的问题是:根据已有的这些知识,现在能否开始编程使用这些I/O设备,完成相应的输入输出功能呢?进程管理194.2I/O控制方式程序循环检测方式(ProgrammedI/O)中断驱动方式(Interrupt-drivenI/O)直接内存访问方式(DMA,DirectMemoryAccess)进程管理204.2.1程序循环检测方式小宝宝在家吃饭☺如果宝宝的嘴巴没空(如上一口饭菜尚未吃完),循环等待☺装一勺饭菜,喂到宝宝嘴里☺重复上述步骤进程管理21基本思路:在程序(设备驱动程序)中通过不断地检测I/O设备的当前状态,来控制I/O操作的完成。具体来说,在进行I/O操作之前,要循环地检测设备是否就绪;在I/O操作进行之中,要循环地检测设备是否已完成。从硬件来说,控制I/O的所有工作均由CPU来完成。也称为繁忙等待方式(busywaiting)或轮询方式(polling)。1.I/O控制与I/O操作2.缺点...进程管理22一个例子已知I/O地址采用内存映像编址的方式,现需要在打印机上打印一个字符串“ABCDEFGH”。基本思路:把这8个字符逐个送到打印机设备的I/O端口地址(内存地址)。…ABCDEFGH内存pprinter_status_regprinter_data_register进程管理23for(i=0;icount;i++){while(*printer_status_reg!=READY);*printer_data_register=p[i];}while(饭未吃完){while(宝宝的嘴巴没空)等待;装一勺饭菜,喂到宝宝嘴里;}程序循环检测方式若是I/O独立编址方式,如何编程?进程管理244.2.2中断驱动方式循环检测的控制方法占用了太多的CPU时间,可能会造成CPU时间的浪费。例如:假设打印机的打印速度为100字符/秒,在循环检测方式下,当一个字符被写入到打印机的数据寄存器中后,CPU需要等待10毫秒才能写入下一个字符。一种解决的办法:中断驱动的控制方式。进程管理25宝宝在幼儿园吃饭☺老师从食堂取来饭菜☺若宝宝尚未准备好吃饭,循环等待☺将饭菜装入每个宝宝的小碗☺宝宝开始吃饭,老师去做别的事情☺在吃饭时,宝宝通过各种信号打断老师进程管理26老师被打断☺如果宝宝举手,给他/她添饭☺如果宝宝举拳头,给他/她添汤☺如果宝宝吃完了,收拾碗和勺子☺......☺回到刚才的状态进程管理27在硬件一级,当一个I/O设备完成任务时,它的控制器会通过总线向中断控制器发出一个信号,如果中断控制器接受了该信号,就把标明该设备的一个编号放在地址线上,并向CPU发出一个中断信号。CPU就中断当前工作,并以该编号为索引去访问中断向量表,取出中断处理程序的起始地址,并在该程序运行后向中断控制器发出确认信号。关中断…进程管理28用户进程strcpy(buffer,“ABCDEFGH”);print(buffer,strlen(buffer));中断驱动方式进程管理29系统调用函数printcopy_from_user(buffer,p,count);//p:内核缓冲区enable_interrupts();while(*printer_status_reg!=READY);*printer_data_register=p[0];scheduler();☺老师从食堂取来饭菜☺若宝宝尚未准备好吃饭,循环等待☺将饭菜装入每个宝宝的小碗☺宝宝开始吃饭,老师去做别的事情☺在吃饭时,宝宝通过各种信号打断老师进程管理30中断处理程序if(count==0){unblock_user();}else{*printer_data_register=p[++i];count--;}acknowledge_intereupt();return_from_interrupt();执行过程进程管理31中断驱动方式的基本思路是:用户进程通过系统调用函数来发起I/O操作,并在发起后阻塞该进程,调度其他的进程使用CPU。在I/O操作完成时,设备向CPU发出中断,然后在中断处理程序中做进一步的处理。在中断驱动方式下,数据的每次读写还是通过CPU来完成,但是当I/O设备在进行数据处理时,CPU不必等待,可以继续执行其他的进程。进程管理324.2.3直接内存访问方式I/O读操作的典型过程:CPU向设备控制器发出命令,启动读操作;设备控制器控制I/O设备完成此次读操作,并将数据保存在设备控制器内部的寄存器或缓冲区中,然后中断CPU;CPU把数据读入内存。进程管理33进程管理34直接内存访问(DirectMemoryAccess,DMA)方式:在硬件上需要一个DMA控制器。DMA控制器可以直接去访问系统总线,它能代替CPU去指挥I/O设备与内存之间的数据传送。DMA控制器包含了一些寄存器,可被CPU来读或写。包括:一个内存地址寄存器、一个字节计数器,以及一个或多个控制寄存器(指明了I/O设备的端口地址、数据传送方向、传送单位,以及每一次传送的字节数)。进程管理35(本图摘自AndrewS.Tanenbaum:“ModernOperatingSystems”)5.DMA工作原理是否所有设备都要用DMA?进程管理36如果使用DMA,过程如下:1.CPU对DMA控制器进行编程,告诉它应把什么数据传送到内存的什么地方。并向磁盘控制器发出命令,让它去磁盘驱动器中读入所需的数据块,保存到内部缓冲区中,并验证数据的正确性;2.DMA控制器通过总线向磁盘控制器发出一个读操作的信号,并把将写入的内存地址打在总线上;3.磁盘控制器取出一个字节,按该地址写入内存;4.磁盘控制器向DMA发一个确认信号,DMA把内存地址加1,把字节计数器减1。若计数器的值大于0转第2步;5.DMA控制器向CPU发出一个中断,告诉它数据传输已完成。进程管理374.3I/O软件4.3.1I/O软件的接口头脑风暴(BrainStorm)为了管理I/O设备,需要哪一些相关的软件?这些软件各自完成何种功能,相互的关系、组织结构又如何?进程管理38应用程序开发人员程序/OS的接口操作系统程序员希望OS提供什么样的接口,有何特点?键盘、鼠标、显示器、打印机、磁盘、磁带、光驱…进程管理39设备独立性:使得用户在编写程序、访问各种I/O设备时,无需事先指定特定的设备类型,各种类型的设备之间的差异由OS来处理,对用户是透明的。统一命名:即用简单的字符串或整数的方式来命名一个文件或设备。例如在Unix当中,所有的文件和设备都采用相同的命名规则:路径名。阻塞与非阻塞I/O:当进程启动一个系统调用后,是立即返回还是被阻塞起来,直到I/O操作完成。进程管理40Windows中的CreateFile()函数创建或打开以下的某种对象:控制台、通信资源(如串口)、目录、磁盘设备(分区)、文件(软盘、硬盘、光盘)等;lpFileName,//filenamedwDesiredAccess,//访问模式,读/写/执行等dwShareMode,//共享模式,lpSecurityAttributes,//安全属性dwCreationDisposition,//howtocreatedwFlagsAndAttributes,//fileattributes设备独立性。统一命名:“A:\\1.txt”、“C:\\2.txt”、“F:\\3.txt”、“COM1”、“\\.\A:”、“\\.\C:”、“CON”。进程管理41阻塞与非阻塞I/O阻塞:进程被阻塞起来,直到I/O操作完成易于使用和理解有些情形下不能满足要求非阻塞:I/O调用很快返回异步性:当I/O操作进行时进程继续执行,当I/O操作完成时,I/O子系统给进程发信号调用者具有主动权不易使用,多线程进程管理42HANDLEhCom;hCom=Creat