博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux中块设备和字符设备的区别
阅读量:4112 次
发布时间:2019-05-25

本文共 1515 字,大约阅读时间需要 5 分钟。

 

1、字符设备结构体描述:cdev

  struct cdev{

    struct kobject kobj;/*内嵌的kobject对象*/

    strcut module *owner;/*所属模块*/

    struct file_operations *ops;/*文件操作结构体*/

    struct list_head list;

    dev_t dev;/*设备号,dev_t实质是一个32位整,12位为主设备号,20位为次设备号,

            提取主次设备号的方法:MAJOR(dev_t dev),MINOR(dev_t dev),生成dev_t的方法:MKDEV(int major,int minor)*/

    unsigned int count;

  };

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

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

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

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

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

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

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

 

本文来自CSDN博客,转载请标明出处:

你可能感兴趣的文章
mysql中重复数据的处理及sql注入
查看>>
几个比较好用的Androidstudio插件
查看>>
Android Binder机制浅析
查看>>
Android内核解读-应用的安装过程
查看>>
构造器的真正调用顺序
查看>>
Android开发能够帮你更好开发的19个开发工具
查看>>
Android开发编程规范
查看>>
image图像算法
查看>>
Android常用组件,太全了
查看>>
最流行的Android组件、工具、框架大全
查看>>
Java基础知识的回顾
查看>>
Android各版本之间的差异
查看>>
Android开发中最基础的清单文件中各种不同的标签什么意思有什么作用和androidz中常用的显示单位及单位的换算
查看>>
Android开发中,那些让您觉得相见恨晚的方法、类或接口
查看>>
数据结构及算法
查看>>
Android Studio 调试技巧
查看>>
android开发中的小知识(一)
查看>>
Androidstudio插件管理
查看>>
内存泄漏的八种可能
查看>>
网络编程中Get与Post方式的区别
查看>>