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

一、字符设备
1、字符设备以字节为单位。大多数设备是字符设备,因为他们不需要缓冲而且不以固定块大小进行操作。
2、字符设备无需缓冲直接读写。
3、字符设备只能被顺序读写。
二、块设备
1、块设备只能以块为单位接受输入和输出。
2、块设备对I/0请求有对应的缓冲区,因此他们可以选择以什么样的顺序进行响应。对于存储设备而言,调整读写的顺序作用巨大,因为读写连续的扇区的读写速度比分离的扇区更快。
3、块设备可以随机访问。
4、块设备工作于VFS(虚拟文件系统)之下。
总结:
快设备的I/O操作方式与字符设备存在较大的不同,因而引入了request_queue、request、bio等一系列数据结构。在整个块涉笔的I/O操作中,贯穿始终的就是“请求”,字符设备的I/O操作则是直接进行不绕弯,块设备的I/O 操作会排队和整合。
驱动的任务是处理请求,对请求的排列和整合由I/O调度算法解决,因此块设备的核心就是处理请求处理函数或“制造请求”函数。
尽管在块设备驱动中仍然存在block_device_operations结构体及其成员函数,但不再包括读写类的成员函数,而只是包含打开、释放及IO控制等与具体读写无关的函数。
块设备驱动的结构相对复杂,但幸运的是,块设备不像字符设备那样包罗万象,它通常就是存储设备,而且驱动的主体已经有linux内核提供,针对一个稳定的硬件系统,驱动工程师所涉及的工作只是编写极其少量的与硬件平台相关的代码。

在这里插入图片描述

三、网络设备
网络设备是完成用户数据包在网络媒介上发送和接受的设备,它将上层协议传递下来的数据包以特定的媒介访问控制方式进行发送,并将接受到的数据包传递给上层协议。
与字符设备和块设备不同,网络设备并不对应于/dev目录下的文件,应用程序最终使用套接字完成与网络设备的接口。因而在网络设备身上并不能体现出“一切都是文件”的思想。
Linux对网络设备驱动定义了4个层次,这4个层次为网络协议接口层、网络设备接口层、提供实际功能的设备驱动功能层和网络设备与媒介层。
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值