首页 > 系统服务 > 详细

linux的块设备层

时间:2019-12-25 00:08:09      阅读:92      评论:0      收藏:0      [点我收藏+]

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-块设备驱动之框架详细分析(详解) 

linux的块设备层

原文:https://www.cnblogs.com/xiang-yin/p/12093898.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!