- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
10.4 设备管理 内容 设备文件 设备管理相关数据结构 块设备文件的open()、read()操作 10.4.1 设备文件的概念 传统的Unix系统均把设备当成文件来处理,因而可以用read()/write()对设备进行操作。设备文件一般在/dev目录下。 Linux下的设备大体分为三类: (1)块设备: 一次I/O操作以固定大小的数据块为单位,且可随机存取。 (2)字符设备:一次I/O操作存取数据量不固定,只能顺序存取。 (3)网卡:网卡是特殊处理的,它没有对应的设备文件。 设备文件的属性 文件名:如 hda1 类型:是字符设备还是块设备 主设备号:主设备号相同的设备被同一设备驱动程序处理。 从设备号:用来指明具体的设备 mknod()创建设备文件,它的参数是上面提到的四个属性。 Linux安装完成之后已经在/dev目录下生成了绝大多数可能要用到的设备文件 10.4.2 相关数据结构 VFS与设备驱动程序接口: name fops blkdevs[](块设备)driver操作表 chrdevs[](字符设备)driver操作表 ? name fops dentry Files_ operations inode Inode_ operations fd_array file files_struct task_struct 一、 字符设备管理 字符设备管理的主要数据结构如下: struct device_struct { const char * name; struct file_operations * fops; }; static struct device_struct chrdevs[MAX_CHRDEV]; 全局数组chrdevs[]记录了所有字符设备驱动程序的名称name及其对应的设备操作函数接口fops。数组的下标,则对应于设备的主设备号。 加载设备驱动时,设备在系统中的注册是通过函数register_chrdev( ),其原型如下: int register_chrdev(unsigned int major, const char * name, struct file_operations *fops); 不同的字符设备驱动程序要提供不同的file_operations实现。 当设备不再使用时,可以通过unregister_chrdev()函数注销。 二、 块设备管理 主要数据结构有blkdevs[]和blk_dev[]: static struct { const char *name; struct block_device_operations *bdops;/* 特定于设 备的操作集*/ } blkdevs[MAX_BLKDEV]; struct blk_dev_struct { request_queue_t request_queue;/*请求队列*/ queue_proc *queue; void *data; }; struct blk_dev_struct blk_dev[MAX_BLKDEV]; 数组的下标对应设备驱动程序的主设备号, blkdevs[ ]记录设备文件名及相应的操作集合, blk_dev[ ]记录各个设备的请求队列。 Request_fn …… Buffer head Buffer head ? Buffer head ? 相关数据结构 blk_dev[] blk_dev_struct request request 内存 外存 三 、 buffer cache 块设备的操作是以块为基本单位,一般情 况块的大小不会超过页面的大小。 buffer cache 是对物理磁盘块的缓冲, 一个buffer的大小等同于一个块的大小 buffer cache目的:提高性能。 每个buffer由buffer_head结构描述,内核根据buffer_head的状态信息操作buffer struct buffer_head { struct buffer_head *b_next; /* 用来链接hash值相同 的buffer_head */ unsigned long b_blocknr; /* 块号 */ unsigned short b_size;
您可能关注的文档
- JAVA程序设计第9章.ppt
- JAVA程序设计第10章.ppt
- JAVA程序设计第11章.ppt
- JAVA程序设计第12章.ppt
- 武汉大学计算机学院linux复习题.doc
- Linux原理及应用——专题0:Shell实例 .ppt
- Linux原理与应用——专题2:Makefile.ppt
- 第17章 Oracle闪回技术.ppt
- 第11章 文件操作.ppt
- 第4章 活动目录.ppt
- 市科技局副局长在理论学习中心组学习2025年全国两会精神研讨发言材料.docx
- 在深入贯彻中央八项规定精神学习教育读书班开班式上的讲话1.docx
- 关于开展深入贯彻中央八项规定精神学习教育的工作方案.docx
- 市国资委党委书记学习2025年全国两会精神专题研讨发言材料.docx
- 在2025年作风建设专题“读书班”上的研讨发言材料(八项规定).docx
- 在县政府全体会议暨廉政工作会议上的讲话4.docx
- 关于我市农村电商发展情况的调研报告.docx
- 在某某区安全生产重点工作安排部署会上的讲话.docx
- 市发改局党组书记在理论学习中心组会上学习2025年全国两会精神的研讨发言材料1.docx
- 商务局委员会(商务局)基层党组织“分类指导、争先进位”工作方案.docx
文档评论(0)