linux块设备驱动(一)——块设备概念介绍
本文来源于:
1. http://blog.csdn.net/jianchi88/article/details/7212370
2. http://blog.chinaunix.net/uid-27664726-id-3349507.html
一: 块设备概念:
一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。可以随机访问,块设备的访问位置必须能够在介质的不同区间前后移动。
二: 块设备相关属性:
扇区(Sectors):任何块设备硬件对数据处理的基本单位。通常,1个扇区的大小为512byte。(对设备而言)
块 (Blocks):由Linux制定对内核或文件系统等数据处理的基本单位。通常,1个块由1个或多个扇区组成。(对Linux操作系统而言)
段(Segments):由若干个相邻的块组成。是Linux内存管理机制中一个内存页或者内存页的一部分。
三: 块设备被访问的分层实现:
1. 首先块设备驱动是以何种方式对块设备进行访问的。在Linux中,驱动对块设备的输入或输出(I/O)操作,都会向块设备发出一个请求,在驱动中用request结构体描述。但对于一些磁盘设备而言请求的速度很慢,这时候内核就提供一种队列的机制把这些I/O请求添加到队列中(即:请求队列),在驱动中用request_queue结构体描述。在向块设备提交这些请求前内核会先执行请求的合并和排序预操作,以提高访问的效率,然后再由内核中的I/O调度程序子系统(即:上图中的I/O调度层)来负责提交I/O请求,I/O调度程序将磁盘资源分配给系统中所有挂起的块I/O请求,其工作是管理块设备的请求队列,决定队列中的请求的排列顺序以及什么时候派发请求到设备,关于更多详细的I/O调度知识这里就不深加研究了。
2. 块设备驱动又是怎样维持一个I/O请求在上层文件系统与底层物理磁盘之间的关系呢?这就是上图中通用块层(Generic Block Layer)要做的事情了。在通用块层中,通常用一个bio结构体来对应一个I/O请求,它代表了正在活动的以段(Segment)链表形式组织的块IO操作,对于它所需要的所有段又用bio_vec结构体表示。
3,块设备驱动又是怎样对底层物理磁盘进行反问的呢?上面讲的都是对上层的访问对上层的关系。Linux提供了一个gendisk数据结构体,用他来表示一个独立的磁盘设备或分区。在gendisk中有一个类似字符设备中file_operations的硬件操作结构指针,他就是block_device_operations结构体,他的作用相信大家已经很清楚了。
最新文章
- MES系统学习
- javascript学习笔记1-document.write
- BC#86 1003NanoApe Loves Sequence Ⅱ[two-pointer]
- 一个简单的MDI示范程序(Delphi)
- iOS开发——高级技术&;二维码功能的实现
- C++ 数组作为函数参数时,传递数组大小的方法
- java程序的10个调试技巧
- 杭电oj 1009 FatMouse' Trade
- Android Studio ADB响应失败解决方法(2CTo.com)
- ACL权限控制列表
- I/O多路复用之select、poll、epoll
- Python环境——安装扩展库
- 更改了react-redux 官方网站的todolist结构
- 使用Angular2的Http发送AJAX请求
- C++ 日期时间使用
- Java中设置方法执行的超时时间java.util.concurrent.Future
- 两台openwrt 间的免登陆ssh
- Pycharm配置autopep8:自动调整代码为PEP8风格
- numpy计算路线距离
- 转载 Linux top命令详解