ll_rw_block()是块设备驱动层,向上提供按block读写块设备到某个内存地址的(是以page为目标单位)方法.

bread()是块设备缓冲层,磁盘上的block用页缓存.先从这个缓存里找,找不到再调用ll_rw_block()读进来.

各个文件系统,要向vfs层提供read_inode()这样的接口,而read_inode()的内部,就会用到bread()这样的函数.

void ll_rw_block(int rw, int nr, struct buffer_head *bhs[]);
//rw:读写标志位, nr:bhs[]长度, bhs[]:要读写的数据数组 struct buffer_head {
unsigned long b_state;          //缓冲区状态标志
struct buffer_head *b_this_page;    //页面中的缓冲区
struct page *b_page;           //存储缓冲区位于哪个页面
sector_t b_blocknr;           //逻辑块号
size_t b_size;              //块的大小
char *b_data;               //页面中的缓冲区 struct block_device *b_bdev;     //块设备,来表示一个独立的磁盘设备 bh_end_io_t *b_end_io;         //I/O完成方法 void *b_private;             //完成方法数据 struct list_head b_assoc_buffers;   //相关映射链表 /* mapping this buffer is associated with */
struct address_space *b_assoc_map;
atomic_t b_count;             //缓冲区使用计数
};

摘自(这篇写的特别好): 22.Linux-块设备驱动之框架详细分析(详解) 

22.Linux-块设备驱动之框架详细分析(详解)

linux的块设备层的更多相关文章

  1. 如何提高Linux下块设备IO的整体性能?

    编辑手记:本文主要讲解Linux IO调度层的三种模式:cfp.deadline和noop,并给出各自的优化和适用场景建议. 作者简介: 邹立巍 Linux系统技术专家.目前在腾讯SNG社交网络运营部 ...

  2. Linux平台块设备到字符设备(裸设备)的三种映射方式(转载)

    在Linux平台oracle rac的组建过程中,如果使用ASM+RAW的存储方式的话,由于asm不支持块设备,支持持字符访问设备,所以需要配置将Block Device Drive转变成Charac ...

  3. Linux中块设备驱动程序分析

    基于<Linux设备驱动程序>书中的sbull程序以对Linux块设备驱动总结分析. 開始之前先来了解这个块设备中的核心数据结构: struct sbull_dev {         i ...

  4. Linux两块4TB的数据磁盘创建8TB的Raid0

    分区表MBR与GPT的说明: MBR:主引导记录,是传统的分区机制,应用于绝大多数使用BIOS的PC设备,MBR+BIOS,MBR支持32位和64位系统,支持的分区数量有限,MBR只支持不超过2T的硬 ...

  5. LINUX中块设备文件和字符设备文件的本质区别

    在LINUX系统文件类型分类的文章中我们提到了 块设备 和 字符设备文件,那么什么是块设备 字符设备文件呢?他们之间有什么本质上的区别呢? 设备文件分为 Block(块) Device Driver ...

  6. linux超级块和inode 详解 和 df 、du 命令详解与环境变量

    一.inode块,Unix文件的核心. 首先需要明白的是,在Unix操作系统中的任何资源都被当作文件来管理.如目录.光驱.终端设备等等,都被当作是一种文件.从这方面来说,Unix操作系统中的所有的目录 ...

  7. linux vi 块操作、多窗口

    vim 块选择v:字符选择或者行选择[ctrl]+v: 块选择y:将反白的地方复制d:将反白的地方删除 多窗口:sp {filename} 打开一个新的窗口[ctrl]+w+j或者[ctrl]+w+向 ...

  8. Linux 内核块 urb

    块 urb 被初始化非常象中断 urb. 做这个的函数是 usb_fill_bulk_urb, 它看来如此: void usb_fill_bulk_urb(struct urb *urb, struc ...

  9. linux系统分析工具之Blktrace

    Blktrace简介: blktrace是一个针对Linux内核中块设备I/O层的跟踪工具,用来收集磁盘IO信息中当IO进行到块设备层(block层,所以叫blk trace)时的详细信息(如IO请求 ...

随机推荐

  1. ECSHOP2.7源码分析

    目录结构

  2. html5 figure和figcaption

    figure标签和figcaption标签是html5新增的语义化标签. figure标签,html5语义化标签. 用于规定独立的流内容(图像.图表.照片.代码等等). figcaption标签,ht ...

  3. Python 测评工具

    开源--Python测评工具 Github仓库 本次实验作业的测评工具仅使用Python语言编写. 程序思路是基于文本的快速匹配. 编译test.py运行 1.GUI界面 GUI界面使用了PyQt5完 ...

  4. HDU6719 Strassen(__int128)

    HDU6719 Strassen 直接照题目模拟,数据范围最大不会超过__int128. 时间复杂度为 \(O(\log n)\) . #include<bits/stdc++.h> us ...

  5. 代理池抓取基础版-(python协程)--抓取网站(西刺-后期会持续更新)

    # coding = utf- __autor__ = 'litao' import urllib.request import urllib.request import urllib.error ...

  6. ruby在类中访问@,类外访问调用方法

    class Box def initialize(w,h) @width,@height=w,h end def printWidth puts @width end def printHeight ...

  7. 将python文件打包成exe可执行文件

    操作系统:win8-64位 python版本:3.5 pyInstaller版本:3.2(下载地址:http://www.pyinstaller.org/) pywin32版本:pywin32-219 ...

  8. Openstack_SQLAlchemy 修改数据库的表结构

    目录 目录 前言 更改数据库的方法 为数据库添加一张或多张新表 删除一张或多张表 为旧表添加一个字段 为旧表更新一个字段 为旧表初始化一条新的记录 最后 前言 SQLAlchemy 的使用方法和相关基 ...

  9. Node.js实战4:标准IO及console对像。

    IO即输入输出. console用于Nodejs程序信息输出. Nodejs的IO操作,通过process.stdout.process.stdin来操作. 下面的例子,将简单展示这两个函数的用法.程 ...

  10. python装饰器(基础中的重点)

    一.简单的装饰器 1.为什么要使用装饰器呢? 装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展 装饰器的本质:就是一个闭包函数 那么我们先来看一个简单的装饰器:实现计算每个函数的执 ...