读书笔记:写一个块设备驱动(2)

上一节给出了一个块驱动程序的框架。其中

static struct request_queue *simp_blkdev_queue;

这个结构很重要,我们将它的处理函数设置为:

simp_blkdev_queue = blk_init_queue(simp_blkdev_do_request,NULL);

但是内核却为我们做了很多我们不知道的事情,首先当一个bio请求过来时,内核调用

void generic_make_request(struct bio *bio)

函数来处理,然后如果驱动程序没有对request_queue结构中的成员

make_request_fn

赋值,则内核调用自己默认的或者设置好的I/O调度器,对bio进行合并和筛选最后再调用

simp_blkdev_do_request

进行工作。

现在我们对simp_blkdev_queue中的make_request_fn成员进行设置,即去除I/O调度器,又我们自己进行调度和选择。

simp_blkdev_queue = blk_alloc_queue(GFP_KERNEL);

blk_queue_make_request(simp_blkdev_queue,simp_blkdev_make_request);

simp_blkdev_make_request就是接下来调度和处理的函数。

2016.04.10

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这个是对CU上OstrichFly的“写一个块设备驱动“文章的读书笔记。 首先建立一个”常规”的块驱动程序: ...
    rlkbk阅读 4,318评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,281评论 19 139
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 6,502评论 0 7
  • 『早安心语』 经营一份事业,不仅仅是为了赚钱,透过这份事业还能够帮助到更多需要帮助的人,让更多的人受益,通过做事,...
    胜者为王王臣森阅读 3,401评论 0 0
  • Apache Thrift是一个跨语言的服务部署框架,通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口...
    zshanjun阅读 12,432评论 0 5

友情链接更多精彩内容