Linux基础教程(清华课件)-第5章 设 备.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux基础教程(清华课件)-第5章 设 备

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 工作,通常负责处理硬件发出的请求,解决数据传输问题,必须快速执行,尽可能保证在下一个中断产生之前完成。底半处理该设备相关的数据结构和设备状态控制信息等比较费时的工作,时间方面的要求不很高,同时也允许响应其他中断请求。 因此,Linux中断处理程序可以分为顶半和底半两个部分,中断发生之后,中断处理的顶半首先快速执行,处理完成之后就可以接受其他中断,剩下的底半部分放到一个特定的队列中,由内核提供的特殊机制负责在适当的时机统一执行。这样,既可以保证中断处理程序的完整性,又可以快速响应其他中断,保证系统具有良好的响应特性。 当一个用户进程发出I/O请求之后(比如,在用户进程中执行了一个设备读取的函数调用,这个I/O请求直接发送给文件系统),文件系统根据函数调用参数确定需要读取的设备,先进行设备访问权限的检验,如果合法则继续进行,否则就返回错误信息。文件系统为这个读取工作申请适当的缓冲区,如果发现需要的数据在缓冲区中已经存在,直接从缓冲区中读取数据,向用户进程返回I/O应答,整个读取过程完成。 如果缓冲区中没有需要的数据,文件系统根据情况进行设备分配,向下层的设备驱动程序发送具体的读取请求。驱动程序利用上层传来的数据信息,操纵设备控制器读取数据,发出读取命令后进入等待状态,设备则进行具体的数据准备工作,CPU则可以转向其他进程。外部设备数据准备完成之后,发出中断请求,转入中断处理程序完成负责中断响应和数据传输的顶半部分,中断处理的底半部分在适当的时候再由内核去完成,唤醒设备驱动程序把数据放入相应的缓冲区中,返回缓冲区状态给文件系统。然后由文件系统从缓冲区中读取数据给用户进程,返回I/O应答。 在设备读写过程中,比较慢的是设备和内存之间进行数据交换的过程,特别是设备准备数据的过程,而从缓冲区中读取数据是内存不同位置之间的数据传输,速度要快得多。对于经常访问的设备,要读取的内容已经在缓冲区中的情况占绝大多数,因此通过缓冲区的使用,外部设备读写的效率可以得到很大的提高,当然,这种效率是以系统本身的复杂性为代价的。 5.3.2 Linux设备驱动程序 设备驱动程序是设备管理的主要软件之一,它负责控制各种设备,是向文件系统提供一致性界面的关键层。每个设备都必须由特定的设备驱动程序来管理,由于设备本身种类繁多,性能各异,造成了系统中设备驱动程序也有很多种类,驱动程序代码占整个系统内核代码的大多数。但是这些针对不同设备的驱动程序都使用基本相同的接口与内核其他部分通信,设备的特殊性在这个层次中深深地隐藏起来,这给用户以及系统其他部分使用和管理设备带来了极大的方便。 在第1章学习操作系统基础知识的时候,曾经介绍过,Linux内核基本采用模块结构,不同的内核子系统按照模块来构建,作为一个整体存在于系统内存中,属于单内核(或宏内核)模式,这使得系统具有相当高的运行效率,但是系统的可扩展性及可移植性受到一定的影响。与之相对应的是微内核模式,微内核中大部分内核模块都作为独立的进程,它们之间通过消息通信,模块之间互相提供服务。 采用微内核模式的操作系统中,用户可以方便地添加新的组件,实现设备驱动等新的功能,相对来讲,单内核模式中添加新组件要困难得多。Linux 系统采用模块(modules,也称为模组)技术,来支持动态装载和卸载的模块,动态装载或卸载时甚至不需要重新启动计算机。利用模块技术,就可以方便地在单内核结构中添加新组件或卸载不再需要的内核组件。 每一个模块都是核心的一部分,都运行于系统态,和其他内核部分具有相同的权限,因此,有漏洞的模块会给系统的性能和稳定性带来不利的影响,而恶意的模块就可能成为一个逻辑炸弹或病毒的良好载体,对系统的安全造成威胁。 除了系统启动过程中所必须的设备(如键盘、磁盘设备等)之外,其他大多数设备以及伪设备(网络设备、文件系统等)的设备驱动程序,都是采用模块方式来管理的。在系统启动完成之后,系统管理员可以利用相关的命令来查看、加载、卸载各种驱动程序模块。 Linux设备驱动程序基本结构 早期,Linux系统支持的设备驱动程序大多数是业余高手们开发的,随着Linux的不断发展,越来越多设备生产厂商也开始提供驱动程序。所有驱动程序都是内核的一部分,驱动程序的结构和接口都有相当规范的定义。 给Linux写设备驱动程序是一件相当容易的事,而且很多人都在做这样的工作,这里不打算介绍具体的开发过程,这方面的资料网上很多。如果某一天,你发现你的某一个设备无法驱动,首先应该到网上去找找,说不定有人碰到和你同样的问题,而且已经写好了这样的驱动程序,实在不行,自己动手花一两天时间,应该就可以完成了。这里只简单介绍驱动程序

文档评论(0)

zw4044 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档