1、块设备
块设备将数据存储在固定大小的块中,每块的大小通常在521字节到32768字节之间。磁盘、SD卡都是常见的块设备。
2、块设备与字符设备的区别
(1)读写数据的单元不同:块设备以块为读写单元,而字符设备以字符为读写单元
(2)块设备可以随机访问,而字符设备只能顺序访问
3、linux块设备体系结构
![linux块设备基础知识(来源于国嵌) - 小白 - 小白的博客](http://img4.ph.126.net/59PToTXkrD5PDa-DfdqSsw==/1014435816082765664.jpg)
Disk Cache:当用户发起文件访问请求时,首先会到Disk Cache中寻找文件是否被缓存了,如果在cache中,则直接从cache中读取。如果数据不在缓存中,就必须要到具体的文件系统中去读取数据了。
Mapping Layer:它有两个功能,一是:确定文件系统的block size,然后计算所请求的数据包含多少个block。二是:调用具体文件系统的函数来访问文件的inode,确定所请求的数据在磁盘上的逻辑块地址。
Generic Block Layer:linux内核为块设备抽象了统一的接口,把块设备看作是由若干个扇区组成的数据空间。上层的读写请求在本层被构造成一个或多个bio结构
I/O Scheduler Layer:I/O调度层负责将I/O操作进行排序,采用某种算法(如:电梯调度算法)来高效地处理操作
电梯调度算法的基本原则:如果电梯现在朝上运动,如果当前楼层的上方和下方都有请求,则先响应所有上方的请求,然后才向下响应下方的请求:如果电梯向下运动,则先响应所有下方的请求,然后在来响应上方的请求。
Block Device Driver:块设备驱动程序通过发送命令给磁盘控制器实现真正的数据传输。