欢迎来到天天文库
浏览记录
ID:38567476
大小:236.00 KB
页数:17页
时间:2019-06-15
《Linux操作系统 - 设备管理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、10.4设备管理内容设备文件设备管理相关数据结构块设备文件的open()、read()操作10.4.1设备文件的概念传统的Unix系统均把设备当成文件来处理,因而可以用read()/write()对设备进行操作。设备文件一般在/dev目录下。Linux下的设备大体分为三类:(1)块设备:一次I/O操作以固定大小的数据块为单位,且可随机存取。(2)字符设备:一次I/O操作存取数据量不固定,只能顺序存取。(3)网卡:网卡是特殊处理的,它没有对应的设备文件。设备文件的属性文件名:如hda1类型:是字符设备还是块设备主设备号:主设备号相同的设备被同一设备驱动程序处
2、理。从设备号:用来指明具体的设备mknod()创建设备文件,它的参数是上面提到的四个属性。Linux安装完成之后已经在/dev目录下生成了绝大多数可能要用到的设备文件10.4.2相关数据结构VFS与设备驱动程序接口:namefopsblkdevs[](块设备)driver操作表chrdevs[](字符设备)driver操作表namefopsdentryFiles_operationsinodeInode_operationsfd_arrayfilefiles_structtask_struct一、字符设备管理字符设备管理的主要数据结构如下:structde
3、vice_struct{constchar*name;structfile_operations*fops;};staticstructdevice_structchrdevs[MAX_CHRDEV];全局数组chrdevs[]记录了所有字符设备驱动程序的名称name及其对应的设备操作函数接口fops。数组的下标,则对应于设备的主设备号。加载设备驱动时,设备在系统中的注册是通过函数register_chrdev(),其原型如下:intregister_chrdev(unsignedintmajor,constchar*name,structfile_ope
4、rations*fops);不同的字符设备驱动程序要提供不同的file_operations实现。当设备不再使用时,可以通过unregister_chrdev()函数注销。二、块设备管理主要数据结构有blkdevs[]和blk_dev[]:staticstruct{constchar*name;structblock_device_operations*bdops;/*特定于设备的操作集*/}blkdevs[MAX_BLKDEV];structblk_dev_struct{request_queue_trequest_queue;/*请求队列*/queue
5、_proc*queue;void*data;};structblk_dev_structblk_dev[MAX_BLKDEV];数组的下标对应设备驱动程序的主设备号,blkdevs[]记录设备文件名及相应的操作集合,blk_dev[]记录各个设备的请求队列。Request_fn……BufferheadBufferheadBufferhead相关数据结构blk_dev[]blk_dev_structrequestrequest内存外存三、buffercache块设备的操作是以块为基本单位,一般情况块的大小不会超过页面的大小。buffercache是对物理磁盘
6、块的缓冲,一个buffer的大小等同于一个块的大小buffercache目的:提高性能。每个buffer由buffer_head结构描述,内核根据buffer_head的状态信息操作bufferstructbuffer_head{structbuffer_head*b_next;/*用来链接hash值相同的buffer_head*/unsignedlongb_blocknr;/*块号*/unsignedshortb_size;/*块的大小*/kdev_tb_dev;kdev_tb_rdev;/*设备号*/structbuffer_head*b_this_p
7、age;/*同属一个页面的buffer链表*/structbuffer_head*b_reqnext;/*同一个操作请求的buffer_head链表*/structbuffer_head**b_pprev;/*用来链接hash值相同的buffer_head*/char*b_data;/*buffer所在的位置*/structpage*b_page;/*buffer所属的页面*/wait_queue_head_tb_wait;/*进程等待队列*/structinode*b_inode;/*该buffer所属的inode结构*/......};每个buffer
8、由设备号和块号唯一确定,并以两者为hash关键字在bufferca
此文档下载收益归作者所有