Chinaunix首页 | 论坛 | 博客
  • 博客访问: 188644
  • 博文数量: 40
  • 博客积分: 1031
  • 博客等级: 少尉
  • 技术积分: 321
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-18 11:35
文章分类
文章存档

2022年(1)

2020年(1)

2017年(1)

2016年(5)

2015年(1)

2013年(1)

2011年(13)

2010年(16)

2009年(1)

我的朋友

分类: LINUX

2011-01-26 00:25:51

读写块设备

    用户程序读写块设备与读写字符设备一样,是通过前面打开块设备文件的struct file结构中的文件操作函数来实现的。用户进程分别通过read()和write()系统调用来读写块设备中的数据,read()和write()系统调用的内核实现函数分别是sys_read()和sys_write()函数。sys_read()和sys_write()函数分别调用vfs_read()和vfs_write()函数,而vfs_read()和vfs_write()函数调用打开设备文件的struct file结构中的f_op->read()和f_op->write()函数来读写块设备数据,而所有打开块设备文件的struct file结构中的f_op字段始终一直指向def_blk_fops结构,所以vfs_read()和vfs_write()函数将分别调用generic_file_read()和blkdev_file_write()函数来对块设备进行读写操作,其中blkdev_file_write()函数调用generic_file_write_nolock()函数,ganeric_file_write_nolock()函数调用generic_file_aio_write_nolock()函数,generic_file_aio_write_nolock()函数调用__generic_file_aio_write_nolock()。generic_file_read()和__generic_file_aio_write_nolock()函数见20.7节“访问文件操作”。generic_file_read()和__generic_file_aio_write_nolock()函数又将分别调用到块设备文件索引节点的地址空间操作函数组def_blk_aops中的blkdev_readpage()和blkdev_writepage()操作函数,这两个函数最终都将把对块设备的读写操作封装成由struct bio描述的I/O操作,并将I/O操作插入块设备的请求队列中,然后向块设备提交I/O操作请求。
阅读(2479) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~