Linux 内核源码分析---I/O 体系结构与访问设备

news2024/9/22 1:10:34

I/O 体系结构

与外设的通信通常称之为输入输出,一般都缩写为I/O。
在实现外设的I/O时,内核必须处理3个可能出现的问题:
(1)必须根据具体的设备类型和模型,使用各种方法对硬件寻址
(2)内核必须向用户应用程序和系统工具提供访问各种设备的方法。但凡有可能,都应当采用统一的方案,确保程序设计的工作量不会过多,同时保证应用程序能够在不考虑特定硬件方法的情况下进行互操作;
(3)用户空间需要知道内核中有哪些设备可用

硬件设备可能以多种方式连接到系统,主板上的扩展槽或外部连接器最常见的方法,当然,扩展硬件也可以直接集成到主板上。

在这里插入图片描述

1.系统总线

尽管外设的范围可能看上去是无限的,它们并不直接连接到CPU,而是通过总线连接起来。
总线负责设备与CPU之间及各个设备之间的通信。
在这里插入图片描述

如下为代表性的总线:
a.PCI(Peripheral Component Interconnect):定义了 32 位数据总线,且可扩展为 64 位。PCI 总线主板插槽的体积比原 ISA 总线插槽还小,其功能比 VESA、ISA 有极大的改善,支持突发读写操作,最大传输速率可达 132MB/s,可同时支持多组外围设备。PCI局部总线不能兼容现有的 ISA、EISA、MCA(microchannelarchitecture)总线,但它不受制于处理器,是基于奔腾等新一代微处理器而发展的总线。
b.ISA(Industrial Standard Architecture):总线标准是 IBM 公司 1984 年为推出 PC/AT 机而建立的系统总线标准,所以也叫AT总线。它是对XT总线的扩展,以 适应 8/16 位数据总线要求。它在 80286 至 80486 时代应用非常广泛,以至于现在奔腾机中还保留有ISA总线插槽。ISA总线有98只引脚。
c.SBus:全称Serial Bus,即串行通信总线。本质上是一种串口通信协议,采用100K的波特率,8位数据位,2位停止位,偶效验,即8E2的串口通信。
d.IEEE1394
e.SCSI(Small Computer System Interface)
f.USB(Universal Serial Bus):通用串行总线USB是由Intel、Compaq、Digital、IBM、Microsoft、NEC、NorthernTelecom等7家世界著名的计算机和通信公司共同推出的一种新型接口标准。它基于通用连接技术,实现外设的简单快速连接,达到方便用户、降低成本、扩展PC连接外设范围的目的。它可以为外设提供电源,而不像普通的使用串、并口的设备需要单独的供电系统。
g.并口与串口(Parallel and Serial Interface)

总线的分类和区别

2.与外设交互

与外设通信的方法,有几种方法可以与连接到系统的硬件通信
a.I/O端口
使用 IA-32 和很多其他体系结构上都有 I/O 端口,在这种情况下,内核发送数据给 I/O 控制器。数据的目标设备通过唯一的端口号标识,数据被传输到设备进行处理。处理器管理一个独立的虚拟地址空间,可以用于管理所有 I/O 地址。I/O 地址空间不关联到普通的系统内核。因为端口也可以映射到内存中,这样会引起混淆。
在IA-32体系结构上,端口地址空间由 2 的 16 次方(大约 64000 )个不同的8位地址组成,通过0x00xFFFF之间的数字唯一标识。

1、每个连接到I\O总线上的设备都有自己的I\O地址集,通常称为I\O端口。
2、一共提供了65536个8位的端口,可以把两个连续的8位端口看成一个16位端口,但是这必须从偶数地址开始。
3、可以讲2个8位的看作一个16位的(必须从偶数开始),2个16位的看作一个32位的端口(必须从4倍数开始)
4、对端口对读写命令 in、ins、out、outs
5、为了提高性能提供控制寄存器、状态寄存器、输入寄存器、输出寄存器

深入理解Linux内核-I/O体系结构和设备驱动程序

b.I/O内存映射
程序员必须寻址很多设备,与内存的处理方式类似。因此现在处理器提供对 I/O 端口进行内存映射,将特殊外设的端口地址映射到普通内存中。

c.轮询和中断
轮询(polling)策略比较简单,只需要重复询问设备数据是否可用,如果可用,则处理器取回数据。
中断策略比较好。每个CPU都提供中断线,可由各个系统设备共享,每个中断通过一个唯一号码标识,内核对使用的每个中断提供一个服务例程。

3.通过总线控制设备

并非所有设备都是直接通过I/O语句寻址,也有通过总线系统访问的。具体的方式与所使用的总线和设备相关。并非所有设备类别都可以连接到所有总线系统(比如:将硬盘和CD记录机连接到SCSI接口,但图形卡就行)。

访问设备

设备特殊文件(设备文件)用于访问扩展设备。这些文件并不关联到硬盘或任何其他的存储介质上的数据段,而是建立了与某个设备驱动程序的连接,以支持与扩展设备的通信。
就应用程序而言,普通文件和设备文件的处理有一定差别。二者都是可以通过同样的库函数处理。

字符设备、块设备和其他设备

根据外设与系统之间交换数据的方法,可以将设备分为几种类别。有些设备非常适合于面向字符的数据交换,因为数据传输量很低。其他的设备则更适合于处理包含固定数目字节的数据块。内核会区分字符设备和块设备。

1、/dev目录下一些成员,特别在访问权限上面,访问之前的字母是 b 或 c,分别代表块设备和字符设备;设备文件没有文件长度,而增加另外两个值,分别是主设备号和从设备号。
2、/dev/hda/dev/hdb/dev/sdadev/sdb:hda(一般指IDE接口的硬盘,sda-般指sata接口硬盘)

标识设备文件:
在这里插入图片描述

查询/dev目录中与sda硬盘有关的其他设备文件:
在这里插入图片描述

3、热插拔消息:新设备
每当内核检测到一个设备时,都会创建一个内核对象 kobject。该对象借助于 sysfs 文件系统导出到用户层,内核还向用户空间发送一个热插拔消息。
在这里插入图片描述

sysfs文件系统是一种特殊的文件系统,被安装于/sys目录下的/proc文件系统相似。
/proc文件系统是首次被设计成允许用户态应用程序访问内核内部数据结构的一种文件系统。
/sysfs文件系统本质上与/proc有相同的目的,但是它还提供关于内核数据结构的附加信息;此外,/sysfs的组织结构比/proc更有条理。或许,在不远的将来,/proc和/sysfs将会继续共存。

sysfs文件系统的目标是要展现设备驱动程序模型组件间的层次关系。该文件系统的相应高层目录是:
block:块设备,它们独立于所连接的总线。
devices:所有被内核识别的硬件设备,依照连接它们的总线对其进行组织。
bus:系统中用于连接设备的总线。
drivers:在内核中注册的设备驱动程序。
class:系统中设备的类型;同一类可能包含由不同总线连接的设备,于是由不同的驱动程序驱动。
power:处理一些硬件设备电源状态的文件。
firmware:处理一些硬件设备的固件的文件。

4、网卡及其它设备
字符设备和块设备不是内核管理的全部设备类别
网卡在内核中具有特殊地位,它无法融入到分类方案当中,事实很明显:网卡没有设备文件。相反,用户程序必须使用套接字与网卡通信。套接字就是一个抽象层,对所有网卡提供一个抽象视图。标准库的网络相关函数调用socketcall系统调用与内核通信交互。进而访问网卡。

5、字符设备与块设备
字符设备:提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取,相反,此类设备支持按字节字符读取。比如:调度解调器是典型的字符设备。
块设备:应用可以随机访问设备数据,程序可自行确定读取数据的位置。比如:硬盘是块设备,应用程序可以寻址磁盘上的任何位置,并由此读取数据。

动态创建设备文件
/dev 中的设备结点一般是在基于磁盘的文件系统中静态创建的。随着支持设备越来越多,必须安置和管理越来越多的项,典型发布版大约包含 20000 项。几乎所有的发布版都将 /dev 内容的管理工作切换到 udevd,这是一个守护进程,允许从用户层动态创建设备文件。
udevd 基本思想,即使从用户层管理设备文件,内核的支持也是绝对必须的,否则就无法判断系统上有哪些设备可用。

字符设备

在这里插入图片描述

a.设备号
主设备号是用来标识与设备文件相连的驱动程序,主设备号用来反映设备类型;次设备号被驱动程序用来辨别操作的是哪个设备,并区分同类型的设备。

设备号,就是系统分配一个编号,设备号是一个无符号的 32 位整型,包括主设备号+次设备号,主设备号为高12位,次设备号为低20位

设备文件需要设备号才能够创建,设备驱动也需要设备号才载装载,设备文件正是通过主设备号找到它的驱动;设备驱动正是利用次设备号才知道他要操作的具体是哪一个设备。

b.字符设备管理框架
在这里插入图片描述
在这里插入图片描述

c.字符设备数据结构
在这里插入图片描述

d.管理设备驱动程序函数的数据结构
在这里插入图片描述

I/O体系结构和设备驱动程序

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

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

相关文章

java面试题Spring部分(四)

一、什么事spring的三级缓存 典型回答 在Spring的BeanFactory体系中,BeanFactory是Spring IOC容器的基础接口,其DefaultSingletonBeanRegistry类实现了BeanFactory接口,并维护了三级缓存: public class DefaultSingletonBeanRe…

如何在OpenHarmony 4.1R上设置系统默认不锁屏(修改系统锁屏应用)

本文介绍如何修改系统锁屏应用,从而实现在OpenHarmony 4.1R上设置系统默认不锁屏。 环境配置 1.DevEco Studio 4.1 Release,下载链接地址 API10 Full SDK,安装教程 步骤 1.首先下载4.1r分支的系统锁屏应用applications_screenlock 2.修改系统锁屏应…

【Plotly-驯化】一文画出漂亮的流量漏斗图:plotly.funnel函数使用技巧

【Plotly-驯化】一文画出漂亮的流量漏斗图:plotly.funnel函数使用技巧 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免费获…

HTML+CSS練習---空隙產生記錄

1.第一層和第二層之間的間隙&#xff1a;以為導航欄超過高度朝下擠下來了 2.第2層兩個div中的空隙 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style>font-face {f…

ATTCK实战系列-红队评估 (一)Vulnstack三层网络域渗透

目录 一、搭建环境 1.靶场下载地址&#xff1a; 2、网络拓扑 3、环境配置 Win7&#xff08;外网服务器 &#xff09; Win2008&#xff08;域控&#xff09; Win2003&#xff08;域成员&#xff09; 4、启动环境 二、信息收集 1、端口扫描 2、目录扫描 三、漏洞利用…

IM即时通讯客服聊天系统源码(某站售8千)

即时通讯客服聊天系统已经成为企业提供卓越客户服务的不可或缺的工具。为了帮助您快速搭建强大的客服聊天系统&#xff0c;提供了一款全面的源码模板&#xff0c;基于Java和Spring Boot微服务架构构建&#xff0c;支持多种功能模块&#xff0c;以及消息加密、红包、消息撤回等功…

基于JSP的学生综合考评管理系统

你好&#xff0c;我是专注于教育信息化的开发者&#xff0c;很高兴为您介绍本系统。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSPJava 工具&#xff1a;Eclipse、MySQL数据库管理工具 系统展示 首页 管理员功能 教师功能 学生功能 摘要 本文…

笔记本怎么手动设置ip地址:一步步教你操作

在使用笔记本电脑连接网络时&#xff0c;有时候我们需要手动设置IP地址以满足特定的网络需求或解决网络问题。手动设置IP地址可以帮助我们更好地控制网络连接&#xff0c;确保设备在网络中的稳定性和安全性。然而&#xff0c;对于不熟悉网络设置的用户来说&#xff0c;手动设置…

EPLAN EDZ 文件太大导入很慢如何解决?

目前各个品牌都在提供 EPLAN EDZ部件库文件,但是一般都是一个总的EDZ文件,导入过程中,因为电脑配置和其他问题,导致导入过程中EPLAN会崩溃或者长时间不动。 我们分析下EDZ文件的构成,这是个压缩文件,换了个壳而已。用压缩软件把edz打开,这里不是解压,直接右键,用解压…

[CP_AUTOSAR]_系统服务_DEM模块(二)功能规范介绍

目录 1、DEM 功能规范描述1.1、Startup behavior1.2、Monitor re-initialization 在前面 《[CP_AUTOSAR]_系统服务_DEM模块&#xff08;一&#xff09;》文中&#xff0c;简要介绍了 DEM 模块的功能、与其它模块之间的功能交互&#xff0c;本文将接着介绍 DEM 模块的功能规范。…

Web前端:Vue开发环境搭建

一、搭建开发环境&#xff1a; 1.nodejs安装&#xff1a; 下载地址&#xff1a; https://nodejs.org/dist/v20.13.1/node-v20.13.1-x64.msi 查看版本号&#xff1a; node -v 2.安装nrm(用于指定国内镜像源&#xff0c;加速依赖包下载速度)&#xff1a; 安装nrm&#xff…

程序员的魔法石!

本文由 ChatMoney团队出品 AI自己写代码&#xff0c;这只是传说&#xff1f;还是摸鱼新指南&#xff1f; AI出现之前&#xff0c;从来都是老板或产品经理提需求&#xff0c;程序员熬夜加班吭哧吭哧写代码或者是从Github&#xff0c;Stackoverflow上controlc&#xff0c;control…

为面试准备的一些内容

开发中使用了什么技术&#xff1f; mvvm、compose、livedata、单例模式、工厂模式、弱引用、线程池、Handler。 对于项目一开始我们打算使用aosp原生的管控方式&#xff0c;如UsageStatManager获取每个app的使用时长&#xff0c;和使用PackageManager的setPackagesSuspended方…

【数据结构入门 】栈

目录 前言 一、栈的概念及结构 二、栈的实现 1. 栈的声明 2.初始化栈 3. 栈的销毁 4.判断是否为空栈 5.入栈&#xff08;只能插入栈顶元素&#xff09; 6. 出栈&#xff08;只能从栈顶删除&#xff09; 7.栈的大小 8.获取栈顶元素 总结 前言 在计算机科学中&#xf…

黑马Java零基础视频教程精华部分_10_面向对象进阶(2)

系列文章目录 文章目录 系列文章目录一、多态1、什么是多态&#xff1f;2、多态的表现形式3、多态的前提4、多态的好处5、多态调用成员的特点6、多态的优势和弊端7、引用数据类型的类型转换 二、包1、什么是包&#xff1f;2、包名的规则3、使用其他类的规则 三、final 最终的&a…

文件包含漏洞Tomato靶机渗透_详解

一、导入靶机 将下载好的靶机拖入到VMware中&#xff0c;填写靶机机名称(随便起一个)和路径 虚拟机设置里修改网络状态为NAT模式 二、信息收集 1、主机发现 用御剑扫描工具扫描虚拟机的NAT网段&#xff0c;发现靶机的IP是192.168.204.141 2、端口扫描 用御剑端口扫描扫描全…

完全免费的 TTS 文字转语音来了!

作者&#xff1a;老余捞鱼 原创不易&#xff0c;转载请标明出处及原作者。 完全免费的 TTS 文字转语音来了&#xff01; 再也不用被国内外各种语音合成割韭菜了。 试了下&#xff0c;确实是不限次数&#xff0c;不限语种&#xff0c;完全免费.输出视频如下&#xff1a; 效果就…

springboot干部考核系统-计算机毕业设计源码74229

摘要 随着我国社会经济的快速发展&#xff0c;对干部队伍的素质要求越来越高&#xff0c;如何科学、公正、准确地评价干部的工作绩效&#xff0c;激励干部发挥出更大的工作潜能&#xff0c;成为了当务之急。近年来&#xff0c;计算机技术和网络技术的飞速发展&#xff0c;为干部…

Minetest大师:1.0.21版本发布

下载Minetest大师v1.0.21 1、简介 Minetest大师&#xff0c;一款致力于Minetest的游戏盒子 可加Q群-&#xff1a;123117246&#xff0c;了解或获取最新版本 2、增加了大量的基础功能 资源中心与ContentDB同步&#xff0c;增加资源搜索、安装功能 增加在线服务器列表&#…

Python 爬虫入门(五):使用 lxml 解析网页

Python 爬虫入门&#xff08;五&#xff09;&#xff1a;使用 lxml 解析网页 前言1. lxml 简介1.1 什么是 lxml&#xff1f;1.2 为什么选择 lxml&#xff1f;1.3 安装 lxml 2. lxml 基础2.1 解析 HTML/XML2.2 XPath 表达式2.3 使用 XPath 提取数据 3. 深入解析3.1 处理命名空间…