第七章linux编程初步.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七章linux编程初步

Linux之所以能支持多种文件系统,其实是由于提供了一个虚拟文件系统VFS,VFS作为实际文件系统的上层软件,掩盖了实际文件系统底层的具体结构差异,为系统访问位于不同文件系统的文件提供了一个统一的接口 Linux 根目录 6.2 Linux设备管理 许多物理设备都有自己的控制器。而每个硬件控制器都有各自的控制和状态寄存器。在Linux中管理硬件设备控制器的代码并没有放置在每个应用程序中而是由内核统一管理。处理和管理硬件控制器的软件就是设备驱动。Linux设备管理的主要任务就是控制设备完成输入输出操作,所以又称为输入/输出(I/O)子系统。设备管理就是把各种设备硬件物理特性的细节屏蔽起来,提供一个对各种不同设备进行统一操作的接口 在Linux操作系统中有三种类型的设备:字符设备、块设备和网络设备。字符设备无需缓冲区,发出读写请求时,实际的硬件I/O一般就紧接着发生了;块设备利用一快系统内存作为缓冲区,以免耗费过多的CPU等待时间,主要针对磁盘等慢速设备;网络设备在linux中作单独处理,linux的网络系统主要是基于BSD Unix的Socket机制。 设备文件 Linux将所有外部设备看成是一种特殊的文件,称为“设备文件”,设备驱动程序是linux内核与设备之间的接口。设备驱动程序屏蔽了硬件在实现上的细节,使得应用程序可以像操纵普通文件一样来操纵设备。Linux中每一种硬件设备都和一个特殊的设备文件来表示,这些设备文件放在根目录下的dev目录中 例如/dev/hda1是第一个IDE普通硬盘的第一个分区 /dev/sda表示第一个SCSI硬盘,/dev/sdb表示USB存贮器 对设备文件的识别使用设备类型,主设备号和次设备号。 设备类型:字符设备或者块设备 主设备号:按照设备使用的驱动程序不同而赋予设备不同的主设备号。主设备号与驱动程序一一对应。 次设备号:用于区分使用同一驱动程序的不同设备。 驱动程序开发 设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象普通文件一样对硬件设备进行操作。同时设备驱动程序作为内核的一部分,完成以下功能:对设备初始化和释放;把数据从内核传送到硬件和从硬件读取数据;读取应用程序发送给设备文件的数据和回送应用程序请求的数据;检测和处理设备出现的错误。Linux输入/输出系统中各层次的结构和功能如下图所示 Linux设备驱动程序包含中断处理程序和设备服务子程序。设备服务子程序包含了所有与设备操作相关的处理代码,它从面向用户进程的设备文件系统中接受用户命令并对设备控制器进行操作。这样设备驱动程序屏蔽了设备的特殊性,使用户可以象对待文件一样操作设备。设备控制器获得系统服务的方式有两种:查询和中断。因为linux下的设备驱动程序是内核的一部分,在设备查询期间不能运行其他代码,查询方式的工作效率低,所以只有少数设备如软盘驱动程序采取这种方式,大多数设备采用中断方式向设备驱动程序发出输入/输出请求 设备驱动程序的file_operations结构 在linux系统中使用file_operatin结构将设备驱动程序和文件系统相 关联,在这个结构中存放了设备各种操作的入口函数。设备驱动程序可以使用linux系统的标准内核服务,如内存分配、中断发送和请求队列,从而完成初始化。启闭与数据传输等驱动功能。 一个设备驱动程序包括两个基本任务:执行系统调用和负责处理中断。而file_operations结构的每一个成员的名称都对应一个系统调用。用户程序利用系统调用,比如在对设备文件进行read操作时,该设备驱动程序就会执行相关的ssize_t (* read)(structfile *, char *, size_t, lloft *)函数。在操作系统内部,外部设备的存取通过一组固定的入口点进行的,这些入口点由每个外设的驱动程序提供,由file_operations结构向系统进行说明,因此,编写设备驱动程序的主要工作就是编写子函数,并填充file_operations的各个域。File_operations结构在kernel/inclue/linux/fs.h中可以找到,具体结构如下 struct file_operations { struct module owner;//拥有该模块的指针;一般为THIS_MODULE loff_t(*llseek)* (struct file *, lofft, int)//用来修改文件当前的读写位置 ssize_t (* read) (struct file *, char *, size_t, loff_t*

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档