bbb sdk6 ll_rw_block分析

ll_rw_block是文件系统对下访问实际的块设备驱动的接口,应用程序对实际文件(非设备文件)的操作,最终都是

通过文件系统来调用ll_rw_block来操作实际的存储设备的。

当然ll_rw_block的实际作用远非一个接口那么简单,他里面对维护了一个读写请求队列,并且对队列里读写请求进

行了优化,比如,对机械硬盘来说,使用了电梯算法,对队列里的读写请求进行优化,排序,合并等操作,提高了

访问硬盘的效率。优化后,最后调用实际的块设备驱动程序来操作真正的存储设备。

下面,以bbb的TI官方linux源码(sdk6)来大概将ll_rw_block的流程写一下,以免忘记。

void ll_rw_block(int rw, int nr, struct buffer_head *bhs[])        // fs/buffer.c

{

//rw为读写标志,nr为bhs数组的长度, bhs为实际要对写数据的信息数组,源,目的,长度

        for (i = 0; i < nr; i++) {
              struct buffer_head *bh = bhs[i];
              if (rw == WRITE) {
            submit_bh(WRITE, bh);     //提交写请求
              } else {
            submit_bh(rw, bh);             //提交读请求
             }
       }

}


int submit_bh(int rw, struct buffer_head * bh)         // fs/buffer.c

{
         struct bio *bio;

        //这里省略了一系列的使用bh来构造bio的代码,最终提交bio
        bio_get(bio);
        submit_bio(rw, bio);           //提交bio
}


void submit_bio(int rw, struct bio *bio)                //block/blk-core.c
{
        generic_make_request(bio);             //使用bio来构造请求
}


void generic_make_request(struct bio *bio)        //block/blk-core.c
{
         struct request_queue *q = bdev_get_queue(bio->bi_bdev);          //获得请求队列

         q->make_request_fn(q, bio);                      //调用请求队列的make_request_fn
}


make_request_fn函数的定义如下:

void blk_queue_bio(struct request_queue *q, struct bio *bio)       //block/blk-core.c
{
        el_ret = elv_merge(q, &req, bio);            //调用电梯算法对读写操作进行优化处理
        __blk_run_queue(q);                              //看下面
}


void __blk_run_queue(struct request_queue *q)           //block/blk-core.c
{
         q->request_fn(q);                                                  //这里最终调用请求队列的request_fn函数进行真正的磁盘操作
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wifi 小米pro 驱动 黑苹果_搞定小米黑苹果自带WIF,又可省一个USB接口了

首先声明我的是小米笔记本PRO版本的&#xff0c;其他版本的没有经过测试&#xff0c;但理论都是没有问题的&#xff0c;其他版本的朋友&#xff0c;喜欢折腾的话&#xff0c;可以试试&#xff01;自用版本关于小米笔记本安装黑苹果&#xff0c;网上一直都有很多链接&#xff0c…

教师资格证计算机考察知识点,教师资格证考试信息技术常考知识点同步练习题.docx...

教师资格证考试信息技术常考知识点同步练习题一、信息的定义及特征( 一) 信息定义信息是通过文字、数字、图像、图形、声音、视频等方式进行传播的内容。说明&#xff1a;信息定义考查的方式有两类&#xff1a;一类是选出四个选项中是信息的 ; 另一类是判断选择题&#xff0c;选…

machine learning for hacker记录(4) 智能邮箱(排序学习推荐系统)

本章是上一章邮件过滤技术的延伸&#xff0c;上一章的内容主要是过滤掉垃圾邮件&#xff0c;而这里要讲的是对那些正常的邮件是否可以加入个性化元素&#xff0c;由于每个用户关心的主题并非一样&#xff08;有人喜欢技术类型的邮件或者购物促销方便的内容邮件等&#xff09;。…

代理模式 委派模式 策略模式_策略模式

在策略模式(Strategy Pattern)中&#xff0c;一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中&#xff0c;我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。介绍意…

云南计算机专业知识真题,2014年云南省事业单位考试专计算机专业知识模拟真题.doc...

2014年云南省事业单位考试专计算机专业知识模拟真题1 在Word中替换的快捷键是____。A、CTRLFB、CTRLHC、CTRLSD、CTRLP2 在Word中打印的快捷键是____。A、CTRLFB、CTRLHC、CTRLOD、CTRLP3 在Word中打开新文档的快捷键是____。A、CTRLFB、CTRLHC、CTRLOD、CTRLP4 在Word中&#…

bbb mmc_blk_probe 分析

bbb 的 emmc驱动在drivers\mmc\card\block.c&#xff0c;其mmc_dirver结构体如下&#xff0c; 根据以往平台总线驱动模型的经验来看的话&#xff0c;内核里应该有mmc_devices结构体&#xff0c;并且 其name也为"mmcblk"&#xff0c;这样其probe函数将被调用&#x…

培智学校计算机课教案,培智数学教案

教学内容&#xff1a;11—20以内数的认识 写数 教学目的&#xff1a;1、使学生能初步地数、读、写(本节课重点看图写20以内的数。) 2、初步会写小棒图、数位表上的数&#xff0c;掌握20以内数的顺序。3、初步简单掌握20以内数的组成。 教学重点&#xff1a;学生看图会数数量并会…

例2-1

#include<stdio.h> int main(void) {printf("Hello World!\n");return 0; } 转载于:https://www.cnblogs.com/520zy/p/3348951.html

java第七章jdbc课后简答题_Java周测题08.13

1.关于Mybatis的描述正确的是&#xff1a;Mybatis是持久层框架&#xff0c;Mybatis封装了JDBC&#xff0c;Mybatis简化了代码的编辑和使用&#xff0c;Mybatis是一个半ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;Mybatis采用了OCP(对象关系映射)的方式封装了数据…

linux中probe函数中传递的参数来源(上)

linux中probe函数传递参数的寻找&#xff08;上&#xff09; 上一篇中&#xff0c;我们追踪了probe函数在何时调用&#xff0c;知道了满足什么条件会调用probe函数&#xff0c;但probe函数中传递的参数我们并不知道在何时定义&#xff0c;到底是谁定义的&#xff0c;反正不是我…

2018高职计算机474分排名,2018年高职分类考试招生录取分数线出炉

原标题&#xff1a;2018年高职分类考试招生录取分数线出炉记者 李洁昨天&#xff0c;实况新闻—重庆时报记者从市教育考试院获悉&#xff0c;2018年我市高等职业教育分类考试招生录取最低控制分数线已划定。一、普高类(一)普通文理类1.专本贯通分段培养项目批文史类&#xff1a…

linux中probe函数传递参数的寻找(下)

linux中probe函数传递参数的寻找&#xff08;下&#xff09; 通过追寻driver的脚步&#xff0c;我们有了努力的方向&#xff1a;只有找到spi_bus_type的填充device即可&#xff0c;下面该从device去打通&#xff0c;当两个连通之日&#xff0c;也是任督二脉打通之时。先从设备定…

服务器部署 配置jetty运行参数_Zookeeper+websocket实现对分布式服务器的实时监控...

Zookeeper简介Zookeeper是Hadoop的一个子项目&#xff0c;它是分布式系统中的协调系统。简单来说就是一个Zookeeper注册同步中心&#xff0c;内部结构为一个树形目录&#xff0c;每个节点上可以存放一定量(默认的数据量上限是1M&#xff0c;但是可以通过调整参数修改)的数据&am…

Python Interview Question and Answers

引文&#xff1a;http://ilian.i-n-i.org/python-interview-question-and-answers/ For the last few weeks I have been interviewing several people for Python/Django developers so I thought that it might be helpful to show the questions I am asking together with …

2018年海南计算机职称考试,海南省2018年全国计算机等级考试报名时间

关于延长2018年3月全国计算机等级考试报名时间的公告2018年3月全国计算机等级考试报名时间原定为2017年12月11日-26日&#xff0c;为了满足广大考生报考的需要&#xff0c;现决定将报名时间延长至2017年12月29日17&#xff1a;00。请符合报考条件的考生及时上网填报报名信息和缴…

linux中 probe函数的何时调用的?

linux中 probe函数何时调用的 所以的驱动教程上都说&#xff1a;只有设备和驱动的名字匹配&#xff0c;BUS就会调用驱动的probe函数&#xff0c;但是有时我们要看看probe函数里面到底做了什么&#xff0c;还有传递给probe函数的参数我们就不知道在哪定义&#xff08;反正不是我…

软件工程项目总结_复旦大学软件工程实验室来ASE实验室交流

2020年12月11日下午&#xff0c;复旦大学彭鑫教授一行与我院多智能体软件工程实验室开展科研工作交流。本次交流会议旨在为双方建立沟通桥梁&#xff0c;探讨研究问题&#xff0c;谋划后续合作&#xff0c;促使双方增进了解、加强互动、互相学习、共同进步。学院党委书记、多智…

windows无法发现任何计算机或设备,Win10系统提示windows无法与设备或资源通信如何解决...

最近有win10系统用户发现电脑无法打开网页&#xff0c;然后进行网络诊断的时候&#xff0c;提示“Windows无法与设备或资源(主DNS) 通信”&#xff0c;该怎么解决这样的问题呢&#xff1f;接下来给大家带来Win10系统提示windows无法与设备或资源通信的具体解决步骤。一、更改DN…

bbb u-boot mmc总线初始化分析

1. arch/arm/lib/ctr0.s .global _main _main: bl board_init_f 2. arch/arm/lib/spl.c void __weak board_init_f(ulong dummy) { board_init_r(NULL, 0); } 前两布应该还没有初始化串口&#xff0c;所以看不到打印 3. arch/arm/lib/board.c //从这个函…

scrapy 中不同页面的拼接_scrapy使用技巧总结

1. scrapy运行过程概述scrapy是一个基于python的网络爬虫框架&#xff0c;它读取对指定域名的网页request请求&#xff0c;截取对应域名的返回体&#xff0c;开发者可以编写解析函数&#xff0c;从返回体中抓取自己需要的数据&#xff0c;并对数据进行清洗处理或存入数据库。sc…