10-4Linux操作系统 - 设备管理.pptVIP

  • 1
  • 0
  • 约4.07千字
  • 约 17页
  • 2019-04-28 发布于福建
  • 举报
10-4Linux操作系统 - 设备管理

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;

文档评论(0)

1亿VIP精品文档

相关文档