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

news2024/11/23 8:57:56

一、字符设备
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个层次为网络协议接口层、网络设备接口层、提供实际功能的设备驱动功能层和网络设备与媒介层。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/404414.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

建立自己的博客

环境安装: w10系统安装 第一步:安装git Git 官网: https://git-scm.com/ 第二步:安装Node.js Node.js官网:https://nodejs.org/zh-cn/ 使用cmd检测: node -v 第三步:安装Hexo Hexo官网:htt…

PyInstaller 将DLL文件打包进exe

PyInstaller 将DLL文件打包进exe方法1:通过--add-data命令方法2:通过修改 .spec扩展:博主热门文章推荐:方法1:通过–add-data命令 注意:这里 dll末尾添加的.为当前目录,则该dll要放到main.py同一…

【零基础入门学习Python---Python的五大数据类型之字符串类型】

一.Python的五大数据类型之字符串类型 在Python中,变量用于存储数据。变量名可以是任何字母、数字和下划线的组合。Python支持多种数据类型,包括数字、字符串、列表、元组和字典。这篇文章我们就来学习一下五大数据类型中的字符串类型。 1.1 什么是字符串? 字符串是Pyth…

[acwing周赛复盘] 第 94 场周赛20230311

[acwing周赛复盘] 第 94 场周赛20230311 一、本周周赛总结二、 4870. 装物品1. 题目描述2. 思路分析3. 代码实现三、4871. 最早时刻1. 题目描述2. 思路分析3. 代码实现四、4872. 最短路之和1. 题目描述2. 思路分析3. 代码实现六、参考链接一、本周周赛总结 又是笨比的一周&…

保姆级图文教程 - VirtualBox安装配置Kali Linux

文章目录下载Kali Linux虚拟机包安装Kali用户配置网络配置静态ipDHCP分配IP换deb源下载Kali Linux虚拟机包 官网地址:https://www.kali.org/get-kali/#kali-virtual-machines 我们选择virtualbox版的,就是最中间的那个。 安装Kali 将压缩包解压&…

计算机网络:传输层概述

传输层 只有主机才有的层次 传输层的功能: 1.传输层提供进程与进程之间的逻辑通信。 2.复用:应用层的所有进程可以都使用一同传输层协议。 3.分用:传输层从网络层收到数据后,交付给指明的应用进程。 4.传输层对收到的报文进行差错…

二十一、Django-restframework之序列化器补充

一、常用序列化器字段 序列化器字段处理基元值和内部数据类型之间的转换。它们还处理输入值的验证,以及从它们的父对象检索和设置值。 (1)核心参数 每个序列化器字段类构造函数至少接受这些参数。一些字段类还接受额外的,字段特…

STM8S系列基于IAR标准外设printf输出demo

STM8S系列基于IAR标准外设printf输出demo📌STM8S/A标准外设库(库版本V2.3.1)📍官网标准外设库:https://www.st.com/zh/embedded-software/stsw-stm8069.html ⛳注意事项 🚩在内存空间比较有限的情况下&am…

.vue 组件打包成 .js

.vue 组件打包成 .js *** 所有的内容 cli 官网都有 *** *** https://cli.vuejs.org/zh/guide/build-targets.html *** 所有的内容 cli 官网都有: https://cli.vuejs.org/zh/guide/build-targets.html 准备 几个 .vue 组件文件 import Main from ./components/Ma…

MySQL InnoDB存储引擎锁与事务实现原理解析(未完成)

InnoDB MySQL存储引擎是基于表的,也就是说每张表可以选择不同的存储引擎。 InnoDB存储引擎的表是索引组织的,也就是数据即索引。 存储引擎文件 InnoDB引擎会包含RedoLog重做日志文件和TableSpace表空间文件。 表空间文件 默认表空间文件&#xff08…

Win32 ListBox控件

Win32 ListBox控件 创建ListBox控件 创建窗口函数 HWND CrateWindowEx(DWORD dwExStyle , // 窗口的扩展风格,基本没用LPCTSTR lpClassName, // 已经注册的窗口类名称LPCTSTR lpWindowName, // 窗口标题栏的名字DWORD dwStyle, // 窗口的基本风格int x, // 左上角水平坐标int …

HashMap ConcurrentHashMap介绍

目录 HashMap 数据结构 重要成员变量 Jdk7-扩容死锁分析 单线程扩容 多线程扩容 Jdk8-扩容 ConcurrentHashMap 数据结构 并发安全控制 源码原理分析 重要成员变量 协助扩容helpTransfer 扩容transfer 总结 CopyOnWrite机制 源码原理 HashMap 数据结构 数组…

【题解】百度2020校招Web前端工程师笔试卷(第一批):单选题、多选题

题目来源 若有错误请指正! 单选 1 分页存储管理将进程的逻辑地址空间分成若干个页,并为各页加以编号,从0开始,若某一计算机主存按字节编址,逻辑地址和物理地址都是32位,页表项大小为4字节,若…

01.Java的安装

1.JDK&JREJDK : Java SE Development Kit--Java开发工具JRE : Java Runtime Environment--Java运行环境Java编程,需要安装JDK;如果仅仅是运行一款Java程序则只需要运行JREJava的安装包分为两类:一类是JRE--是一个独立的Java运行环境; 一类…

卷积神经网络中的padding理解

前言 在进行卷积神经网络中,经常用到padding,padding在卷积神经网络中起到什么样的作用呢,又是如何发挥作用的呢?本文就此谈下自己看法。 代码中的显示 model.add(Conv2D(filters 32,kernel_size [3,3],strides [1,1],padd…

基于SpringCloud的微服务架构学习笔记(2)注册中心Eureka和负载均衡Ribbon

1. 7 Eureka注册中心 1.7.1 远程调用的问题 地址信息获取:服务消费者如何获取服务提供者的地址信息(不能每次都写死): URL:http://localhost:8081/user/"order.getUserId()多选一:如果有多个服务提供…

HBase存储结构、基本架构和shell操作

文章目录一、HBase简介1.1、HBase定义1.2、HBase的存储结构1.3、HBase基本架构二、HBase Shell操作2.1、基本操作2.2、namespace2.3、DDL2.4、DML一、HBase简介 1.1、HBase定义 HBase是一个开源的分布式NoSQL数据库,它是Apache Hadoop项目的一部分,使用…

代码随想录算法训练营 day56 | 动态规划 647. 回文子串 516.最长回文子序列

day56647 回文子串1.确定dp数组(dp table)以及下标的含义2.确定递推公式3,dp数组如何初始化4.确定遍历顺序5.举例推导dp数组516 最长回文子序列1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化…

【H2实践】之 SpringBoot 整合

目标 本文紧接上篇【H2实践】之认识 H2,上篇简单介绍了 H2 及其使用,本文继上篇,探索 H2 与 SpringBoot 的整合。 主要实现目标: 1、SpringBoot 连接 H2 内存数据库,并对数据库进行管理。 2、访问 H2 Console 客户端…

Pytest 自动化测试框架

Pytest和Unittest测试框架的区别? 如何区分这两者,很简单unittest作为官方的测试框架,在测试方面更加基础,并且可以再次基础上进行二次开发,同时在用法上格式会更加复杂;而pytest框架作为第三方框架&#x…