在前文《理解Linux操作系统的块设备》中我们从比较高层面(Hight Level)介绍了块设备的原理和块设备的特性。但是关于Linux操作系统块设备的实现原理可能还一知半解。本文将进一步深入的分析Linux的块设备,期望能让大家更加深入的理解块设备的实现细节。

其实在Linux操作系统中可以非常方便的实现一个块设备,或者说是块设备驱动。在Linux中我们熟知的RAID、多路径和Ceph的RBD等都是这样一种块设备。其特征就是在操作系统的/dev目录下面会创建一个文件。如图1显示的不同类型的块设备,包含普通的SCSI块设备和LVM逻辑卷块设备,本质上都是块设备,差异在于在不同的业务逻辑和名称。

图1 不同类型的块设备

块设备的实现原理

在Linux操作系统中,块设备的实现其实十分简单,但也十分复杂。简单的是我们可以只用2个函数就可以创建一个块设备驱动程序;复杂的地方是块设备的总线和底层设备驱动的关系错综复杂,且块设备驱动种类繁多。

我们先看一下如何创建一个块设备,创建的方法很简单,主要是调用Linux内核的2个函数,分别是alloc_disk和add_disk。alloc_disk用于分配一个gendisk结构体的实例,而后者则是将该结构体实例注册到系统中。经过上述2步的操作,我们就可以在/dev目录下看到一个块设备。另外一个比较重要的地方是初始化gendisk结构

进一步理解Linux操作系统的块设备相关推荐

  1. 深入理解 Linux 内核---块设备驱动程序

    块设备的处理 一个进程在某个磁盘文件上发出一个 read() 系统调用,内核对进程请求回应的一般步骤: read() 调用一个适当的 VFS 函数,将文件描述符和文件内的偏移量传递给它. 虚拟文件系统 ...

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

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

  3. 一文彻底搞清Linux中块设备驱动的深层次原理和编写方法

    [摘要]本文主要讲述了在Linux环境下的块设备驱动的常见数据结构和内核接口,并以一个实际例子讲述了块设备驱动的编写方法. 1.前提知识 一个块驱动提供对块存储设备(比如 SD 卡.EMMC.NAND ...

  4. 基于块的linux驱动程序,基于块的Linux驱动程序 块设备驱动 centos内核编译过程 操作系统课程设计...

    操作系统的课程设计,本人也是一头雾水地做完了课程设计,在这里贴下操作过程,放下当时参考的一篇CSDN文章链接:https://blog.csdn.net/cxy_chen/article/detail ...

  5. linux mtd 块设备,Linux系统中/dev/mtd与/dev/mtdblock的区别,即MTD字符设备和块设备的区别...

    转:http://www.crifan.com/linux_system_in__dev__mtd_and__dev__mtdblock_distinction_character_devices_a ...

  6. linux的安装nmom命令,Linux下块设备查看命令lsblk详解

    简介 在Linux系统下面,块设备使用很常见,尤其是一些传统商用数据库,例如Oracle,DB2就经常使用块设备,lsblk命令可以非常方便的让你获取所有的块设备信息. lsblk安装 如果你的Lin ...

  7. linux 内核块设备驱动,你了解Linux 块设备驱动?

    1 什么是Ramdisk Ramdisk是一种模拟磁盘,其数据实际上是存储在RAM中,它使用一部分内存空间来模拟出一个磁盘设备,并以块设备的方式来组织和访问这片内存.对于用户来说可以把Ramdisk与 ...

  8. 【笔试/面试】—— Linux(块设备与字符设备/cron 和 crontab)

    块设备与字符设备 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来(先)存放暂时的数据,待条件成熟后,从缓存一次性写入设备或从设备中一次性读出放入到缓冲区,如磁盘和文件系 ...

  9. Linux内核块设备总结(一)

    前言 在分析块设备驱动之前,整体规划如下: 1. 介绍qemu使Linux内核挂载块设备.2. 介绍块设备驱动挂载过程.3. 介绍块设备驱动运行过程. 本章先重点介绍使用qemu使Linux内核和根文 ...

最新文章

  1. 用 Qt 给嵌入式Linux加个桌面
  2. 我们是如何陷入贫穷与忙碌的?
  3. CodeForce 237C Primes on Interval(二分+ 素数筛法)
  4. 33. Search in Rotated Sorted Array
  5. JSF 源代码赏析之Lifecycle
  6. 思科网络基础课件_网络自动化认证,你选对了吗?
  7. 使用extundelete恢复测试liunx的删除文件
  8. 关于jmeter 加载jar文件的疑问
  9. flex mx:TabNavigator进行选项卡切换,需要进行交互时。发生Error #1009错误
  10. 使用内存映射提高BufferedRandoAccessFile性能(测试可用)
  11. WebService
  12. Codeforces914D Bash and a Tough Math Puzzle (思维 线段树)
  13. wifi发射功率各国标准_智能插座背后的两种无线协议——WiFi与ZigBee
  14. yolov5检测图片用detect.py
  15. 如何开通电子邮箱的SMTP功能
  16. AI玩Flappy Bird│基于DQN的机器学习实例【完结】
  17. 加拿大标准CAN/ULC-S102与美国标准ASTM E84 一样吗?
  18. EtherCAT运动控制器在数控加工手轮随动中的应用之C++
  19. 袁腾飞老师的幽默历史课
  20. java win10窗口启动假死_win10桌面假死如何解决

热门文章

  1. “城市轨道交通 互联网”助推智慧交通发展
  2. java根据传的日期(yyyy-MM-dd)向前推X月或者向后推X月取X月最后一天日期
  3. 中国青年报:“区块链+供应链金融”为小微企业融资推开一扇窗
  4. 《小狗钱钱》--chapter1.2--你究竟想要的是什么?
  5. 基于FPGA的以太网控制器(MAC)设计(下)
  6. 标准休学申请书格式范文
  7. jenkins 连接k8s 集群
  8. 转发一个IT靓女的求助
  9. 第二十一篇 vue组件引入使用
  10. a链接点击出现黑色边框解决办法