进一步理解Linux操作系统的块设备
在前文《理解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操作系统的块设备相关推荐
- 深入理解 Linux 内核---块设备驱动程序
块设备的处理 一个进程在某个磁盘文件上发出一个 read() 系统调用,内核对进程请求回应的一般步骤: read() 调用一个适当的 VFS 函数,将文件描述符和文件内的偏移量传递给它. 虚拟文件系统 ...
- 如何提高Linux下块设备IO的整体性能?
编辑手记:本文主要讲解Linux IO调度层的三种模式:cfp.deadline和noop,并给出各自的优化和适用场景建议. 作者简介: 邹立巍 Linux系统技术专家.目前在腾讯SNG社交网络运营部 ...
- 一文彻底搞清Linux中块设备驱动的深层次原理和编写方法
[摘要]本文主要讲述了在Linux环境下的块设备驱动的常见数据结构和内核接口,并以一个实际例子讲述了块设备驱动的编写方法. 1.前提知识 一个块驱动提供对块存储设备(比如 SD 卡.EMMC.NAND ...
- 基于块的linux驱动程序,基于块的Linux驱动程序 块设备驱动 centos内核编译过程 操作系统课程设计...
操作系统的课程设计,本人也是一头雾水地做完了课程设计,在这里贴下操作过程,放下当时参考的一篇CSDN文章链接:https://blog.csdn.net/cxy_chen/article/detail ...
- linux mtd 块设备,Linux系统中/dev/mtd与/dev/mtdblock的区别,即MTD字符设备和块设备的区别...
转:http://www.crifan.com/linux_system_in__dev__mtd_and__dev__mtdblock_distinction_character_devices_a ...
- linux的安装nmom命令,Linux下块设备查看命令lsblk详解
简介 在Linux系统下面,块设备使用很常见,尤其是一些传统商用数据库,例如Oracle,DB2就经常使用块设备,lsblk命令可以非常方便的让你获取所有的块设备信息. lsblk安装 如果你的Lin ...
- linux 内核块设备驱动,你了解Linux 块设备驱动?
1 什么是Ramdisk Ramdisk是一种模拟磁盘,其数据实际上是存储在RAM中,它使用一部分内存空间来模拟出一个磁盘设备,并以块设备的方式来组织和访问这片内存.对于用户来说可以把Ramdisk与 ...
- 【笔试/面试】—— Linux(块设备与字符设备/cron 和 crontab)
块设备与字符设备 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来(先)存放暂时的数据,待条件成熟后,从缓存一次性写入设备或从设备中一次性读出放入到缓冲区,如磁盘和文件系 ...
- Linux内核块设备总结(一)
前言 在分析块设备驱动之前,整体规划如下: 1. 介绍qemu使Linux内核挂载块设备.2. 介绍块设备驱动挂载过程.3. 介绍块设备驱动运行过程. 本章先重点介绍使用qemu使Linux内核和根文 ...
最新文章
- 用 Qt 给嵌入式Linux加个桌面
- 我们是如何陷入贫穷与忙碌的?
- CodeForce 237C Primes on Interval(二分+ 素数筛法)
- 33. Search in Rotated Sorted Array
- JSF 源代码赏析之Lifecycle
- 思科网络基础课件_网络自动化认证,你选对了吗?
- 使用extundelete恢复测试liunx的删除文件
- 关于jmeter 加载jar文件的疑问
- flex mx:TabNavigator进行选项卡切换,需要进行交互时。发生Error #1009错误
- 使用内存映射提高BufferedRandoAccessFile性能(测试可用)
- WebService
- Codeforces914D Bash and a Tough Math Puzzle (思维 线段树)
- wifi发射功率各国标准_智能插座背后的两种无线协议——WiFi与ZigBee
- yolov5检测图片用detect.py
- 如何开通电子邮箱的SMTP功能
- AI玩Flappy Bird│基于DQN的机器学习实例【完结】
- 加拿大标准CAN/ULC-S102与美国标准ASTM E84 一样吗?
- EtherCAT运动控制器在数控加工手轮随动中的应用之C++
- 袁腾飞老师的幽默历史课
- java win10窗口启动假死_win10桌面假死如何解决