若bio中存在数据处于高端内存时,外设无法在此高端内存上执行DMA,这里需要创建反弹缓冲区,将处于高端内存的缓存区和反弹缓冲区之间进行数据的复制。此过程称为bounce过程。但对于大部分驱动来説,并不需要考虑。

过程如下所示:

流程如下:

  1. 对bio中每个segment,检查数据所对应的内存是否在高端内存区,若不存在,直接返回,不需要作bounce过程;
  2. 若bio存在数据在高端内存区,且存在segment数目过多时,将原bio进行切分,将切分后的第二部分通过submit_bio()再次下发;
  3. 分配新的bio,将原bio的第一部分相关信息拷贝到新的bio中;
  4. 遍历新的bio每个segment,若segment对应的页为高端内存,分配新的页,让新的bio指向此页;若操作为写时,将原来在高端内存区的数据拷贝到新的页中;
  5. 设置bio->bi_end_io,对于操作为读时,将反弹缓冲区的数据拷贝到高端内存区。

如下图所示,origin bio存在3个bio_vec,其中bvec 0处于高端内存区,此时bounce过程会生成新的new bio,在低端内存区分配新的内存区0'(反弹缓存区),在读写时,会将数据在原内存区和bounce缓冲区进行拷贝。

BLOCK层代码分析(5)IO下发之BIO bounce过程相关推荐

  1. BLOCK层代码分析(10)IO下发之IO下发函数总结

    BLOCK层IO下发涉及直接下发,调度器,没有设置调度类型以及plug/unplug等,因此下发函数纷繁复杂,这里做介绍几个主要的函数. 前面介绍了函数blk_mq_try_issue_directl ...

  2. BLOCK层代码分析(9)IO下发之IO下发

    看着题目是不是很奇怪,想不出好的名字,就这样将就吧. 前面bio bounce过程,bio的切分和合并,request的获取是为IO请求下发做准备工作.当这些准备工作完成后,才进入到真正的IO下发过程 ...

  3. BLOCK层代码分析(8)IO下发之plug/unplug机制

    前面bio bounce过程,bio的切分和合并,request的获取是为IO请求下发做准备工作.当这些准备工作完成后,才进入到真正的IO下发过程.之前在前面章节中介绍过,IO下发基本上有三条路径:经 ...

  4. BLOCK层代码分析(1)数据的组织BIO

    对于BLOCK层,表示一个IO的数据结构为BIO和request.对于request在后续的章节中做介绍,这里只介绍与BIO相关的结构体. 1. bio/bio_vec结构体 bio结构体用于表示数据 ...

  5. BLOCK层代码分析(6)IO下发之SGL聚散列表

    原本计划本节介绍request的分配,发现会涉及到数据组织从bio到sgl的映射,因此本节介绍数据的SGL组织方式. 在BLOCK层数据的组织形式为bio和request,通过这两个结构体就可以找到数 ...

  6. 三:Sensor SLPI层代码分析---

    三:Sensor SLPI层代码分析 在学习SLPI侧代码前我们先了解下SEE的registry&config. registry 放在/persist/sensors/registry/re ...

  7. perf-perf stat用户层代码分析

    perf_event 源码分析 前言 简单来说,perf是一种性能监测工具,它首先对通用处理器提供的performance counter进行编程,设定计数器阈值和事件,然后性能计数器就会在设定事件发 ...

  8. 四--RIL层代码分析--整个电话来访过程

    最近公司开发一个几百万的项目,要求重写系统RIL层,看了几个招聘信息,只要你会RIL层开发的,工资上w每个月不是梦,这是几天研究的成果,希望对大家有所帮助,兄弟们加油吧! 先来一个总的流程图: 拨出电 ...

  9. RIL层代码分析--拨号整个流程

    拨出电话流程: 1 在系统源码这个路径下/packages/apps/Phone/src/com/android/phone/DialtactsActivity.java contacts的andro ...

最新文章

  1. ssh连接虚拟机中mysql_用SSH连接Vmware redhat虚拟机
  2. 一个用于分页的page类
  3. html5 弹性布局
  4. mysql load character_mysql load data Invalid utf8mb4 character string: ”
  5. vue 组件属性监听_详解vuex 中的 state 在组件中如何监听
  6. Python中的回文详解
  7. Bootstrap+Angularjs自制弹框
  8. 我的微博,三层嵌套,
  9. html5swf小游戏源码,亲测可用120个H5小游戏实例源码
  10. 数字频率系数测试软件,基于单片机简易数字频率计设计方案汇总
  11. java如何美化按钮_css美化button按钮
  12. P7369 [COCI2018-2019#4] Elder 题解
  13. 计算机为什么获取mac地址,电脑获取mac地址失败怎么办
  14. 配置Web.config文件显示错误信息
  15. 一键设置电脑锁屏后程序仍然运行
  16. 四、Solr数据源配置(JNDI、DIH)及定时重做索引
  17. 超实用的新加坡两日游攻略来啦
  18. 电影《满城尽带黄金甲》周杰伦接受了新浪娱乐独家对话
  19. android go 联发科 p10,联发科P10和高通骁龙435哪个性能强?联发科P10对比高通骁龙435评测...
  20. Torch 训练的一些注意点:优化器params参数 与 lr 调度器篇 [1]

热门文章

  1. Ubuntu16.04(笔记本摄像头测试)orb-slam2
  2. 全国计算机等级考试网怎么注册
  3. 2020年宇通大量裁人论坛_2020年借壳上市第一单来袭,宇通重工拟借壳ST宏盛
  4. eclipse添加约束文件 dubbo配置报错 dubbo.sxd
  5. CnOpenData与国家高端智库——综合开发研究院(中国·深圳)达成战略合作伙伴关系
  6. 【闲聊杂谈】深入剖析Java8新特性
  7. 如何解决github安装失败
  8. 魔岩三杰94红堪演唱会
  9. 分书问题(book)-C++
  10. 万里学院ACM宣传片