字符设备(裸设备)和块设备的区别

来源:互联网 发布:php 发送udp消息 编辑:程序博客网 时间:2024/04/30 14:29

        在类UNIX操作系统中,常见的设备文件两类:Block Device Drive和Character Device Drive。Character Device Drive被称作字符设备或者裸设备raw devices,Block Device Drive通常称为块设备/dev/disk对应的为块设备,文件系统操作用到它,如mount ,/dev/rdisk对应的为字符设备(裸设备,rdisk的r即为raw)。
Block Device Driver是以固定的大小长度来传送转移资料,Character Device Driver是以不定长度的字元传送资料。Block Device大致是可以随机存储(Random Access)资料的设备,如硬盘,光盘等,而Character Device则刚好相反,遵循先后顺序来存储资料的设备,例如终端机、键盘等。


关于字符设备和块设备的几点总结:

(1)字符设备还是块设备的定义属于操作系统的设备访问层,与实际物理设备的特性无必然联系。

(2)两种类型的守则的根本区别在于他们是否可以被随机访问,也就是说,能否在访问设备时随意的从一个位置跳转到另外一个位置。字符设备必须连续访问,例如终端机和键盘。而块设备可以随机访问,例如随即存储的设备硬盘和光盘。

(3)可以直接对字符设备进行操作,而对块设备必须利用一块系统内存作为缓冲区,先将读写内容存入缓冲区,最后将缓冲区的内容一起写入块设备。

(4)字符设备只能以字节为最小单位进行访问,而块设备以块为单位访问,如512字节,1024字节不等

(5)字符和块没有访问量大小的限制,块也可以以字节为单位来访问

      字符设备和块设备的主要区别是:在对字符设备发出读写请求时,实际的硬件I/O一般紧接着就响应了,而块设备则不然,它需要利用一块系统内存作为缓冲区,当用户进程对设备请求满足用户要求时,就返回请求的数据,如果不能满足用户的需求就调用请求函数来进行实际的I/O操作。因此,块设备主要是针对硬盘慢速设备设计的,以免消耗过多的CPU时间来等待。

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

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


原创粉丝点击