版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux操作系统分析中国科学技术大学计算机系陈香兰(0512-87161312)xlanchen@助教:裴建国、冯晓静Autumn2008管理I/O设备中国科学技术大学计算机系陈香兰(0512-87161312)xlanchen@助教:裴建国、冯晓静Autumn2008I/O体系结构总线:PC的CPU、RAM、I/O设备之间需要某些数据通路来保证信息的流动总类:ISA、EISA、VESA、PCI以及MCA等等三种基本类型数据总线(pentium,64位)地址总线(pentium,32位)控制总线当总线用于CPU与I/O设备之间的连接时,成为I/O总线1/15/20233LinuxOSAnalysis在x86处理器中,只使用了32位地址总线中的16位对I/O设备进行寻址寻址范围?使用64位数据总线中的8、16、32位传送数据I/O设备与CPU之间的连接层次为:CPUI/O端口I/O接口设备控制器1/15/20234LinuxOSAnalysisPC的I/O体系结构1/15/20235LinuxOSAnalysisI/O端口(I/Oport)每个I/O端口8位,由于只使用16位地址总线访问,因此I/O地址空间一共提供65536个I/O端口在端口地址对齐的情况下,连续的I/O端口可以看成16位/32位端口特定的指令用来访问I/O端口:in,ins,out,outsI/O端口的另外一种访问方法直接映射到物理地址空间可以使用存储器操作指令,如mov,and,or等等1/15/20236LinuxOSAnalysisI/O端口中的寄存器命令状态输入数据输出数据1/15/20237LinuxOSAnalysisLinux中访问I/O端口的操作inb、inw、inlinb_p、inw_p、inl_poutb、outw、outloutb_p、outw_p、outl_pinsb、insw、insloutsb、outsw、outsl1/15/20238LinuxOSAnalysisI/O端口的分配不同的设备使用各自不同的端口内核使用资源信息来记录端口分配信息一个资源表示I/O端口地址的一个范围所有同种资源使用树形结构记录,ioport_resource。一个较大范围可以进一步划分为子范围,使用兄弟链表表示1/15/20239LinuxOSAnalysis相关的操作1/15/202310LinuxOSAnalysisI/O接口I/O接口是处于一组I/O端口和对应的设备控制器之间的一种硬件电路I/O端口设备:将I/O端口中的值转换成设备所需要的命令和数据设备I/O端口:检测设备状态的变化,更新端口中相应的状态寄存器连接到PIC上,代表设备发出中断请求专用I/O接口和通用I/O接口1/15/202311LinuxOSAnalysis专用I/O接口专用于一个特定的硬件设备键盘接口图形接口磁盘接口总线鼠标接口网络接口1/15/202312LinuxOSAnalysis通用I/O接口现代PC都包含连接很多外部设备的几个通用I/O接口并口:传输单位1个字节串口:逐位传送USB口PCMCIA接口SCSI接口1/15/202313LinuxOSAnalysis设备控制器复杂的设备需要一个设备控制器(devicecontroller)来驱动作用对I/O接口接收到的高级命令进行解释,并控制设备执行特定的操作对从设备接收到的电信号进行解释和转换,并修改状态寄存器典型的设备控制器,例如磁盘控制器1/15/202314LinuxOSAnalysisI/O共享存储器很多硬件设备都有自己的存储器,通常称之为I/O共享存储器(I/OSharedMemory),如显存映射I/O共享存储器的地址根据设备和总线类型的不同,可以在三个不同的物理地址范围之间进行映射对于连接到ISA总线上的大多数设备0xa0000~0xfffff对于使用VESA局部总线的一些老设备(图形卡)0xe00000~0xffffff(现在基本不生产)1/15/202315LinuxOSAnalysis对于连接到PCI总线的设备映射到RAM物理地址的顶端关于图形加速端口AGP(AcceleratedGraphicsPort)标准是高性能图形卡的PCI增强版不仅有I/O共享存储器,还能通过图形地址再映射表GART(GraphicsAddressRemappingTable)直接对主板的RAM部分进行寻址1/15/202316LinuxOSAnalysisI/O共享存储器的访问对于物理地址1M之内的I/O共享存储器访问直接访问3G以上的对应线性区间addr+3G对于高端I/O共享存储器访问没有直接映射在3G以上的线性区间需要为其创建一块非连续线性区,并将其映射到高端I/O共享存储器的物理地址上ioremap/iounmapio_mem=ioremap(某个物理起始地址,长度)访问io_mem+相对于起始地址的偏移处1/15/202317LinuxOSAnalysisDMA(直接存储器访问,DirectMemoryAccess)所有的PC都包含一个DMAC(DMA控制器)一种辅助处理器用来控制在RAM和I/O设备之间传送数据设置并激活DMACDMAC自行传送数据数据传送结束后,DMAC发出一个中断请求当CPU和DMAC并发访问同一个存储单元时,通过存储器仲裁器解决冲突使用者:慢速设备如,磁盘驱动器1/15/202318LinuxOSAnalysis设备文件Unix类操作系统都是基于文件概念的文件是以字符序列而构成的信息载体,因此一个I/O设备也可以当作文件来处理与普通文件交互的系统调用也可以直接用于I/O设备例如对/dev/lp0设备文件的write()可以将数据发往打印机1/15/202319LinuxOSAnalysis设备文件的分类根据设备驱动程序的基本特性,设备文件可以分为:字符设备块设备块设备数据可以被随机访问在用户看来,访问任何位置的数据时间大致相同典型例子:硬盘、软盘、CD-ROM、DVD播放器等1/15/202320LinuxOSAnalysis字符设备要么不可以随机访问,例如声卡如果可被随机访问(往往通过顺序访问方式实现),但随着数据的位置的不同,其访问时间会相差很大,例如磁带网络网卡不与文件相关联,使用专门的处理方式1/15/202321LinuxOSAnalysis老式的设备文件在Linux2.4中存在两种设备文件老式的设备文件Devfs设备文件老式的设备文件这是存放在文件系统中的实际文件索引节点不对磁盘上的数据块编址,而是包含硬件设备的一个标识每个设备文件包括:名字、类型(字符/块)设备号(主设备号:次设备号)同一设备驱动程序不同设备1/15/202322LinuxOSAnalysismknod()系统调用用来创建老式的设备文件设备文件名操作权限和设备类型其中设备类型指定:S_IFCHR或S_IFBLK设备号16位,主设备号:次设备号1/15/202323LinuxOSAnalysis设备文件通常包含在/dev目录中一些设备文件的例子1/15/202324LinuxOSAnalysis注意:字符设备与块设备具有独立的编号,例如,块设备(3,0)不同于字符设备(3,0)设备文件通常可以表示一个硬件设备,例如磁盘/dev/hda或硬件设备的某一物理或逻辑分区,例如磁盘分区/dev/hda2或一个虚拟的逻辑设备(不会与任何硬件设备相关联),例如/dev/null代表一个“黑洞”1/15/202325LinuxOSAnalysis对内核而言,一个设备文件的名字是无关紧要的,关键在于设备文件的类型及其主次设备号如,建立一个设备文件/tmp/disk,其类型为块设备,设备号为(3,0),那么内核认为它与/dev/hda等价1/15/202326LinuxOSAnalysisDevfs设备文件使用主次设备号标识设备存在局限性在/dev中的大多数设备是不存在的8位长的主次设备号不够用上述原因以及其他的一些因素综合起来,促使了devfs设备文件的产生Devfs虚拟文件系统允许设备驱动程序通过名字而不是主次设备号注册设备,例如所有的磁盘可以放在/dev/disks目录下/dev/hda/dev/disks/disc0/dev/hdb/dev/disks/disc11/15/202327LinuxOSAnalysis使用devfs文件系统的I/O驱动程序通过调用devfs_register()注册设备一个注册了的设备文件自动出现在devfs的虚拟目录下1/15/202328LinuxOSAnalysis设备文件的VFS处理进程访问普通文件时,通过文件系统访问磁盘分区中的数据块当进程访问设备文件时,却可以驱动硬件设备例如,进程访问计算机上的温度计对应的设备文件获得温度HOW?VFS1/15/202329LinuxOSAnalysisVFSVFS在设备文件打开时使用与设备相关的函数调用替换其缺省的文件操作这些设备相关函数调用对硬件设备进行操作1/15/202330LinuxOSAnalysis设备驱动程序这是一个软件层,使得硬件设备能够响应预定义好的编程接口,就是一组控制设备的VFS函数接口open,read,lseek,ioctl等上述函数的具体实现由设备驱动程序提供此外设备驱动程序必须首先注册并初始化自己并在进行数据传送的时候监控I/O操作1/15/202331LinuxOSAnalysis注册设备驱动程序注册一个设备驱动程序意味着把它与对应的设备文件连接起来使得对设备文件发出的系统调用可以由内核转化为相应的设备驱动程序对应的函数访问一个没有注册设备驱动程序的设备文件将会返回错误码-ENODEV1/15/202332LinuxOSAnalysis注册时机如果设备驱动程序被静态编译进内核,则注册发生在内核初始化阶段如果作为一个内核模块来编译,则在装入模块的时候注册(并在卸载模块时注销)1/15/202333LinuxOSAnalysis设备驱动程序的初始化对设备驱动程序进行注册与初始化是两件不同的事情注册应当尽早:使得用户可以使用设备文件初始化应当推迟到最后可能的时候原因:初始化就意味着需要分配系统中的稀缺资源,例如:
1,中断向量(动态分配的情况下)
2,用于DMA传送的缓冲区的页框
3,包括DMA通道本身1/15/202334LinuxOSAnalysis监控I/O操作I/O操作的持续时间通常不可预知,可能与各种因素相关,例如机械装置的状态,如对于磁盘来讲,磁头的当前位置或实际的随机事件,例如数据包何时到达网卡以及人为因素,例如人对键盘、鼠标的使用,以及发现打印机卡纸时的操作为此,设备驱动程序必须通过某种监控手段监控I/O操作终止或超时1/15/202335LinuxOSAnalysis两种可用的技术轮询模式(pollingmode)
CPU重复检查(轮询)设备的状态寄存器,直到寄存器的值表明I/O操作已经完成为止中断模式(interruptmode)
如果I/O控制器能够通过IRQ线发出I/O操作结束的信号,就可以使用中断模式1/15/202336LinuxOSAnalysis轮询模式的简单例子Why”--count”也可以使用jiffies进行超时判断若时间比较长,比如ms级,可以在每次轮询操作之后调用schedule主动放弃CPU,直到下次被调度再次轮询可以用来粗略的判断超时1/15/202337LinuxOSAnalysis中断模式的简单例子假定实现一个简单的输入字符设备的驱动程序当在对应的设备文件上发出read()系统调用时,一条输入命令被发往设备的控制寄存器在一个不可预知的长时间后,设备把一个字节的数据放在输入寄存器驱动程序然后将这个字节作为read()系统调用的结果返回1/15/202338LinuxOSAnalysis这个驱动程序包含两个函数:实现文件对象read方法的foo_read()函数处理中断的foo_interrupt()函数只要用户读设备文件,foo_read()函数就会被触发对I/O设备发出读命令等待读操作的结束,由中断处理程序唤醒将获得的数据送到用户空间中1/15/202339LinuxOSAnalysis从设备上读入数据唤醒read的剩余部分1/15/202340LinuxOSAnalysis再看foo_read的输入参数Structfile*filp,在这个数据的私有数据项中,VFS已经将其转换成设备驱动程序的私有的信息
foo_dev_t,被定义为包含如下信息:一个信号量,互斥使用intr作为标志0:没有发生/处理中断1:处理了中断一个等待队列,用来给foo_read睡眠一个数据区,长度为1,用来存放读到的数据1/15/202341LinuxOSAnalysischar*buf,用户提供的存放数据的空间Count和ppos都没有用到再看看foo_interrupt()中,这是通过foo一个全局变量获得设备的私有数据结构的,这个数据结构与foo_read()中通过filp中获得的私有数据一致foo_interrupt的输入参数没有得到使用,这是一种很普遍的情况1/15/202342LinuxOSAnalysis块设备驱动程序典型的块设备驱动程序都有很高的平均访问时间例如磁盘的每次操作都需要几个ms,主要是为了定位磁头,一旦定位后,就可以以稳定的高速率传输数据(几十MB/秒)定义:相邻的数据
指当数据以相邻的方式存放在磁表面时,一次单独操作就可以访问它们1/15/202343LinuxOSAnalysis内核对块设备处理程序的支持具有以下特点:通过VFS提供统一接口对磁盘数据进行有效的预读为数据提供磁盘高速缓存1/15/202344LinuxOSAnalysis用于块设备文件的缺省的文件操作方法1/15/202345LinuxOSAnalysis块设备请求及其优化虽然块设备驱动程序可以一次传送一个单独的数据块,但是内核并不会为每个要访问的数据块都执行一次I/O操作内核试图把几个块合并在一起,作为一个整体来处理,从而减少磁头的平均移动时间HOW?1/15/202346LinuxOSAnalysis为读写一个磁盘块的请求生成块设备请求但推迟这个请求执行的时间这是提高块设备性能的关键机制当请求发生时,内核检查是否能通过稍微扩展前一个一直处于等待状态的请求而满足新的请求,从而减少定位的时间,提高效率1/15/202347LinuxOSAnalysis每个块设备驱动程序都维护着自己的请求队列;每个物理块设备应当有一个请求队列请求可以以提高磁盘性能的方式进行排序低级的设备驱动程序一般采用如下策略:处理请求队列上的第一个请求,并设置设备控制器,以便在数据传送完成时可以产生一个中断,然后就停止当设备控制器产生中断时,中断处理程序就激活下半部分。下半部分将被处理的请求删除,并继续11/15/202348LinuxOSAnalysis驱动程序的编写有专门的书《Linux设备驱动程序》来讲如何写Linux下的驱动程序中译本有5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年房产购买合同:交易条件与付款方式明细
- 出纳柜员年终工作总结范文(3篇)
- 2024年房屋租赁带装修合同
- DB4106T 5-2019 牛屠宰厂(场)建设管理规范
- 幼儿园大班下学期工作计划(27篇)
- 2024年挖掘机产品购买合同
- 2024年新形势下的供应链管理合作协议
- 2024年第二学期小学德育工作计划(5篇)
- 2024年影视剧本联合创作合同
- 2023年农业运输机械项目评价分析报告
- 工程结构通用规范(住建部2021年颁布)
- 混凝土监理旁站记录
- 临床医学老年性痴呆-课件
- 小学经典诵读社团活动计划、安排、记录汇编
- 咯血(课件幻灯)
- 《管理统计学》课程教学大纲
- C++语言基础知识
- 全国人工智能应用技术技能大赛理论考试题库大全-上(单选题汇总)
- 机关档案管理工作培训课件
- 工程施工阶段全过程造价控制与管理工作方案 精品
- 移动室内信号覆盖系统介绍演示文稿
评论
0/150
提交评论