摘要: 和提交请求相反,完成请求的过程是从低层驱动开始的。请求处理完成分为两个部分:上半部和下半部。开始时,请求处理完成总是处在中断上下文,在这里的主要任务是将已完成的请求放到某个队列中,然后引发软终端让中断“下半部”来处理,这是通常的做法。而“下半部”则依次处理队列中的每一个已完成的请求。 在讲派发SCS 阅读全文
posted @ 2018-07-05 06:57 陆小呆 阅读(1707) 评论(0) 推荐(0) 编辑
摘要: 在SCSI策略例程中最后调用scsi_dispatch_cmd将SCSI命令描述符派发给低层驱动进行处理 阅读全文
posted @ 2018-07-05 06:51 陆小呆 阅读(1855) 评论(0) 推荐(0) 编辑
摘要: SCSI数据缓冲区组织成聚散列表的形式。Linux内核中表示聚散列表的基本数据结构是scatterlist,虽然名字中有list,但它只对应一个内存缓冲区,聚散列表就是多个scatterlist的组合。这种组合是链表+数组的结合。这是因为他使用的内存以页面为基本单位分配,每个页面相当于一个scatt 阅读全文
posted @ 2018-07-05 06:50 陆小呆 阅读(1561) 评论(0) 推荐(0) 编辑
摘要: 首先来看scsi_prep_fn scsi_prep_fn只能处理来自SCSI公共层的命令,在scsi_setup_blk_pc_cmnd函数返回后,根据返回值调用scsi_prep_return进行相应的处理 sd_prep_fn函数从request结构中的信息构造SCSI(读或写)命令,将结果保 阅读全文
posted @ 2018-07-05 06:38 陆小呆 阅读(1644) 评论(0) 推荐(0) 编辑
摘要: 很长时间以来,Linux块设备使用了一种称为“蓄流/泄流”(plugging/unplugging)的技术来改进吞吐率。简单而言,这种工作方式类似浴盆排水系统的塞子。当IO被提交时,它被储存在一个队列,稍后的某个时间,我们才允许IO从队列派发出去。之所以这么做是为IO尽可能做合并和排序。 blk_p 阅读全文
posted @ 2018-07-05 06:31 陆小呆 阅读(1172) 评论(0) 推荐(0) 编辑