1. block_read_full_page(struct page *page, get_block_t *get_block)
其中page是读操作的数据存放的位置, 即OS从硬盘上读取数据将会存放到page中.
2. 为这个page分配buffer_head, head = alloc_page_buffers(page); 每个bh对应文件系统的block.
3. 调用submit_bh(READ, bh); 此时的动作为:
分配BIO. 即:
    if (buffer_page(bh))
        bio->bi_io_vec[0].bv_buffer = bh_page_data(bh);
    else
        bio->bi_io_vec[0].bv_buffer = bh_data(bh);
    bio->bi_io_vec[0].bv_len = bh->b_size;

bio->bi_vcnt = 1;
    bio->bi_idx = 0;
    bio->bi_size = bh->b_size;
即数据流为page -> buffer_head -> bio
4. submit_bio(int rw, struct bio *bio) -> generic_make_request -> __make_request -> add_request(q, req);
此时的动作是将此BIO作为一个request的member插入到request_queue中
5. 在将来某个时候, SCSI命令将会执行时, 调用scsi_prep_fn(q,ret)
scsi_init_io SCSI初始化IO操作, 它调用blk_rq_map_sg(req->q, req, cmd->request_buffer) ;此时cmd->request_buffer是数据是
1) 是scatter-gather list
2) 就简单的buffer.
因此, 此时的数据流为page -> buffer_head -> bio -> request -> scsi_cmnd的request_buffer.
6. usb_stor_Bulk_transport -> usb_stor_bulk_transfer_sg -> usb_stor_bulk_transfer_sglist or usb_stor_bulk_transfer_buf ->
对于usb_stor_bulk_transfer_buf,
 usb_fill_bulk_urb/usb_stor_msg_common -> usb_submit_urb
在usb_fill_bulk_urb中, urb-> transfer_buffer被设置为srb->request_buffer (注: SRB即前面的CMD)
6. 然后在usb_submit_urb()时, 它调用HCD的usb_hcd_submit_urb(). 后者的动作将会将URB的数据转换成HC的硬件数据, 并将其加入到OHCI/UHCI/EHCI的Queue中, status = hcd->driver->urb_enqueue (hcd, ep, urb, mem_flags);
对于OHCI, 它的函数为ohci_urb_enqueue -> td_submit_urb (ohci, urb);
对于bulk传输, 将调用td_fill()根据urb->transfer_dma来设置硬件的TD的buffer pointer, 最终写IO寄存器ohci_writel (ohci, OHCI_BLF, &ohci->regs->cmdstatus);
因此, VFS的读操作的数据流为page -> buffer_head -> bio -> request -> scsi_cmnd的request_buffer -> urb的transfer_buffer/transfer_dma -> 硬件TD.

转载于:https://www.cnblogs.com/codestub/archive/2011/12/14/2287767.html

OSK VFS read数据流分析相关推荐

  1. LLVM数据流分析的理论

    LLVM数据流分析的理论 标量优化(scalar目录): 死代码消除(BDCE.cpp[code],ADCE.cpp[code],DCE.cpp[code]), 全局值编号(GVN.cpp[code] ...

  2. 国内android应用商城中程序隐私泄露分析,基于数据流分析的Android应用隐私泄露检测研究...

    摘要: 随着技术的进步,智能手机给人们的生活带来了极大的便利.据统计,搭载Android智能系统的手机现如今已经占据了 81%的手机市场份额,这也正让安卓系统成为了攻击者窃取用户隐私数据的一个重要目标 ...

  3. 虚拟文件系统(VFS)

    原文链接:http://www.orlion.ga/1008/ linux在不同的文件系统之上做了一个抽象层,使得文件.目录.读写访问等概念都成为抽象层概念,这个抽象层被称为虚拟文件系统(VFS). ...

  4. linux 内核 虚拟文件系统VFS 路径查找 path_lookup

    路径查找是VFS的一个主要操作:给定一个文件名,获取该文件名的inode.路径查找是VFS中相当繁琐的一部分,主要是符号链接,文件系统装载点,以及. ..和//等奇怪路径 引入了复杂性. nameid ...

  5. linux VFS 虚拟文件系统 简介 super_block inode dentry file

    1.简介 1.Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等.通过使用同一套文件 I/O 系统 调用即可对 Linux 中的任意文件进行操作而无需考虑其所在的具体文 ...

  6. Linux2.6内核--VFS层中和进程相关的数据结构

          系统中的每一个进程都有自己的一组打开的文件,像根文件系统,当前工作目录,安装点等.有三个数据结构将 VFS 层和系统的进程紧密的联系在一起,它们分别是: file_struct,fs_st ...

  7. VFS文件系统结构分析 与socket

    本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载.但转载请保持文档的完整性,并注明原作者及原链接.内容可任意使用,但对因使用该内容引起的后果不做任何保证. 作者:fireaxe_hq@ho ...

  8. socket 与 vfs

    首先来看整个与socket相关的操作提供了一个统一的接口sys_socketcall. 下面就是它的代码片段: Java代码   asmlinkage long sys_socketcall(int  ...

  9. 【Linux入门到精通系列讲解】VFS分区动态绑定和CentOS7分区类型

    文章目录 1 VFS分区动态绑定 2 CentOS7分区类型 1 VFS分区动态绑定 VFS和ext2文件系统都使用超级块和索引节点来描述和管理系统中的文件,每个安装的文件系统都有一个VFS超级块. ...

最新文章

  1. 团队项目第一阶段冲刺站立会议1(4月18日)
  2. 逻辑回归实例--乳腺癌肿瘤预测
  3. jvm性能调优实战 -54Jetty NIO机制导致堆外内存溢出Direct buffer memory OOM
  4. application.properties amp;amp;amp; application.yml 配置文件详解(转)
  5. roboware studio_关于安装Roboware的教程
  6. 堡垒之夜服务器维修,堡垒之夜常见问题解决方法
  7. Java笔记(四)各类容器,set,map,队列实现
  8. MinGW 编译libwebsockets
  9. OpenSSL的Heartbleed漏洞原理及简单模拟
  10. sql 查询一个月的数据按天显示_数据分析-sql复杂查询
  11. ASP.NET配置FCKeditor文本编辑器
  12. LeetCode ---8. String to Integer (atoi)
  13. C# decimal保留指定的小数位数,不四舍五入
  14. jQuery mobile ——制作表单
  15. 苹果html向上滑动不流畅,苹果手机Safari浏览器下滑动卡顿的问题
  16. o.s.s.s.TaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task
  17. 俄罗斯“扎克伯格”:创建区块链版“微信” 27岁身价已达2.5亿美元
  18. 祝福考研的兄弟姐妹们!
  19. sqlyog修改背景颜色成护眼色
  20. 计算机专业技能及专长,大学生个人简历技能专长

热门文章

  1. WLS2Linux 子系统(二)
  2. Linux下安装Mysql5.7,超详细完整教程,以及云mysql连接
  3. 塔式计算机sata3内部硬盘,巧用固态硬盘 解决PC用户3大疑难杂症
  4. 上海期货计算机公司排名,双创实践行 ——记2017级计算机与金融工程实验班同学参观上海期货交易所...
  5. 医学四视图-003-解决图像反转(失败)
  6. 水调歌头·重上井冈山
  7. 管理驾驶舱,如何帮企业实现精细化运营
  8. 正在解析主机,路由器打不开个别网页,已解决
  9. 天线巴伦制作和原理_【火腿DIY】巴伦知识图集|手把手教您制作1:1短波巴伦
  10. 用pyecharts的map模块实现齐齐哈尔各个区县人口分布图2021/4/20