Linux的字符设备和块设备

系统中能够随机(不需要按顺序)访问固定大小数据片(chunks)的设备被称作块设备,这些数据片就称作块。最常见的块设备是硬盘,除此以外,还有软盘驱动器、CD-ROM驱动器和闪存等等许多其他块设备。注意,它们都是以安装文件系统的方式使用的——这也是块设备的一般访问方式。

另一种基本的设备类型是字符设备。字符设备按照字符流的方式被有序访问,像串口和键盘就都属于字符设备。如果一个硬件设备是以字符流的方式被访问的话,那就应该将它归于字符设备;反过来,如果一个设备是随机(无序的)访问的,那么它就属于块设备。

这两种类型的设备的根本区别在于它们是否可以被随机访问——换句话说就是,能否在访问设备时随意地从一个位置跳转到另一个位置。 举个例子,键盘这种设备提供的就是一个数据流,当你敲入“fox” 这个字符串时,键盘驱动程序会按照和输入完全相同的顺序返回这个由三个字符组成的数据流。如果让键盘驱动程序打乱顺序来读字符串,或读取其他字符,都是没有意义的。所以键盘就是一种典型的字符设备,它提供的就是用户从键盘输入的字符流。对键盘进行读操作会得到一个字符流,首先是“f”,然后是“o”,最后是“x”,最终是文件的结束(EOF)。当没人敲键盘时,字符流就是空的。硬盘设备的情况就不大一样了。硬盘设备的驱动可能要求读取磁盘上任意块的内容,然后又转去读取别的块的内容,而被读取的块在磁盘上位置不一定要连续,所以说硬盘可以被随机访问,而不是以流的方式被访问,显然它是一个块设备。

内核管理块设备要比管理字符设备细致得多,需要考虑的问题和完成的工作相比字符设备来说要复杂许多。这是因为字符设备仅仅需要控制一个位置—当前位置—而块设备访问的位置必须能够在介质的不同区间前后移动。所以事实上内核不必提供一个专门的子系统来管理字符设备,但是对块设备的管理却必须要有一个专门的提供服务的子系统。不仅仅是因为块设备的复杂性远远高于字符设备,更重要的原因是块设备对执行性能的要求很高;对硬盘每多一分利用都会对整个系统的性能带来提升,其效果要远远比键盘吞吐速度成倍的提高大得多。另外,我们将会看到,块设备的复杂性会为这种优化留下很大的施展空间。

简单来讲,块设备可以随机存取,而字符设备不能随机存取,那裸设备又该如何解释呢?

难道裸设备,如磁盘裸设备也不能随机读取吗?那在数据库中用裸设备建一个2g的数据文件,为了存取最后一个数据块,难道Oracle还要把前面的所有数据块都读一遍,显然不符合事实,如果这样解释呢,操作系统不能随机读取,并不意味着数据库也不能随机读取。

块设备通过系统缓存进行读取,不是直接和物理磁盘读取。字符设备可以直接物理磁盘读取,不经过系统缓存。(如键盘,直接相应中断)

原文
Linux字符设备和块设备的区别

Linux字符设备和块设备的区别相关推荐

  1. linux 读写设备文件,linux-中块设备文件及字符设备文件的本质区别

    原标题:linux-中块设备文件及字符设备文件的本质区别 在LINUX系统文件类型分类的文章中我们提到了 块设备 和 字符设备文件,那么什么是块设备 字符设备文件呢?他们之间有什么本质上的区别呢? 设 ...

  2. Linux字符设备与块设备的区别与比较

    Linux中I/O设备分为两类:块设备和字符设备.两种设备本身没有严格限制,但是,基于不同的功能进行了分类. (1) 字符设备:提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取.相反,此类设 ...

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

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

  4. linux字符设备和块设备的区别 以及网络设备

    一.字符设备 1.字符设备以字节为单位.大多数设备是字符设备,因为他们不需要缓冲而且不以固定块大小进行操作. 2.字符设备无需缓冲直接读写. 3.字符设备只能被顺序读写. 二.块设备 1.块设备只能以 ...

  5. linux中I/O设备分为两类:字符设备和块设备。

    Linux中I/O设备分为两类:字符设备和块设备.两种设备本身没有严格限制,但是,基于不同的功能进行了分类. (1)字符设备:提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取.相反,此类设备 ...

  6. 字符设备和块设备的区别

    设备文件分为Block Device Driver和Character Device Drive两类.Character Device Drive又被称为字符设备或裸设备raw devices; Bl ...

  7. 字符设备和块设备区别

    字符设备和块设备区别 Linux中I/O设备分为两类:字符设备和块设备.两种设备本身没有严格限制,但是,基于不同的功能进行了分类来. (1)字符设备:提供连续的数据流,应用程序可以顺序读取,通常不支持 ...

  8. linux三大驱动类型:字符设备、块设备、网络设备

    1. 字符设备 字符设备指能够像字节流串行顺序依次进行访问的设备,对它的读写是以字节为单位.字符设备的上层没有磁盘文件系统,所以字符设备的file_operations成员函数就直接由字符设备驱动提供 ...

  9. Linux驱动笔记-字符设备,块设备,网络设备

      在Linux设备驱动开发中,粗略的将设备分为三种类型:字符设备,块设备和网络设备. 1.字符设备:指能够像字节流串行顺序依次进行访问的设备,对它的读写是以字节为单位.字符设备的上层没有磁盘文件系统 ...

  10. 字符设备、块设备、网络设备

    字符设备.块设备.网络设备 设备模型 设备驱动的代码量占内核程序的50% 设备模型的意义: 为了降低设备多样性带来的Linux驱动开发的复杂度,以及设备热拔插处理.电源管理等,Linux内核提出了设备 ...

最新文章

  1. 两个字符串,s,t;把t字符串插入到s字符串中,s字符串有足够的空间存放t字符串
  2. 算法踩坑6-二叉搜索树排序
  3. java学习(六)数据类型分类
  4. crmeb单商户java版安装_前端配置说明 · CRMEB 单商户Java版 帮助文档 · 看云
  5. 关于WebView 控件,你了解多少?
  6. 51Talk音视频技术实践和独特挑战
  7. Firefox开发者工具里查看HTML元素的Box模型
  8. C#程序开机启动与获取程序启动路径
  9. Pyotrch —— 优化器Optimizer(一)
  10. 解决自动更新时 系统提示“某些设置由你的系统管理员管理”的方法
  11. 时间序列分析导论书摘:预测的一般知识
  12. JAVA获取各种日期时间
  13. css背景图不失真_CSS如何实现这种背景效果?
  14. matlab两矩阵相似性,两个矩阵同时相似对角化MATLAB程序.docx
  15. vb6集成ad登录共享文件_肇庆学院校园网WiFi认证自动登录指南
  16. 游戏App上架iOS被拒各种奇葩问题
  17. Hyperledger Fabric之Explorer区块链浏览器
  18. Google-admob广告变现
  19. 《云计算与大数据》课程报告
  20. 罗技k380连接双系统(win10和ubuntu18)

热门文章

  1. 新手指南: 手把手教你安装 Ubuntu 和 Fedora
  2. QT正则表达式截取字符串末尾数字
  3. 【Java与智能设备】ch0501 Intent的使用
  4. python 小数乘法_《包装》——小数乘法
  5. sm缩写代表什么意思_PE给水管常见的字母缩写都代表什么?
  6. bootstrap css div布局,从css源码理解bootstrap布局容器和栅格系统
  7. c# html正则,c# 使用正则解析html
  8. php两个数组删除相同数据,php – 如何从两个数组中删除重复对?
  9. python 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址_[LeetCode] 468. 验证IP地址
  10. html文件怎么兼容浏览器,如何扫描HTML和跨浏览器兼容的JavaScript文件?