PCIe具体解释分析
参考文章
PCIe总线详解_STATEABC-GitCode 开源社区
https://zhuanlan.zhihu.com/p/652808759
PCI总线学习(一):PCI总线结构-CSDN博客
PCI——第1章——PCI总线的基本知识-CSDN博客
计算机中register、cache、memory的区别 - Line's Blog
什么是内存管理单元(MMU)
LSPCI具体解释分析 - yxwkaifa - 博客园
上面这个文章,写的很有力度,所以作如下笔记,
一、PCI简单介绍
PCI是一种外设总线规范。我们先来看一下什么是总线:总线是一种传输信号的路径或信道。典型情况是,总线是连接于一个或多个导体的电气连线,总 线上连接的全部设备可在同一时间收到全部的传输内容。总线由电气接口和编程接口组成。本文讨论Linux 下的设备驱动,所以,重点关注编程接口。
PCI是Peripheral Component Interconnect(外围设备互联)的简称,是普遍使用在桌面及更大型的计算机上的外 设总线。PCI架构被设计为ISA标准的替代品,它有三个主要目标:获得在计算机和外设之间数据传输时更好的性能;尽可能的平台无关;简化往系统中加入和 删除外设的工作。
二、PCI寻址
从如今開始,我想尽可能通过一些实际的样例来说明问题,而降低理论方面的问题的描写叙述,由于,相关的理论的东西,能够在其他地方找到。
我们先来看一个样例,我的电脑装有1G的RAM,1G以后的物理内存地址空间都是外部设备IO在系统内存地址空间上的映射。
此处的RAM代表,
1 SRAM--静态随机存储器。
位于CPU内部的cache(缓存)一般使用SRAM。
2 DRAM--动态随即存储器。
外置的memory(内存),一般使用的DRAM。缓存,内存,CPU关系如下,
/proc/iomem描写叙述了系统中全部的设备I/O在内存地址空间上的映射。
我们来看地址从1G開始的第一个设备在/proc/iomem中是怎样描写叙述 的:
40000000-400003ff : 0000:00:1f.1
这是一个PCI设备,40000000-400003ff是它所映射的内存地址空间,占领了内存地址空间的1024 bytes的位置,而 0000:00:1f.1则是一个PCI外设的地址,它以冒号和逗号分隔为4个部分,第一个16位(指的是0000)表示域(上面的一串数字其实是十六进制数字,每个十六进制数字占4位二进制数位,原文说“第一个16位”),第二个8位(00 :这两个十六进制数字,占8位二进制数数位)表示一个总线编号,第三个5位(指的是1f。5位二进制数字,最大能表示31这个十进制数字)表示一 个设备号,最后是3位(指的是1),表示功能号。
由于PCI规范同意单个系统拥有高达256个总线,所以总线编号是8位(在上面那串数字中0000:00:0f.1 ,00这两个十六进制位数字,即8个二进制位)。但对于大型系统而言,这是不够的,所以,引入了域的概念,每一个 PCI域能够拥有最多256个总线(在上面那串数字中0000:00:0f.1 ,0000这四个十六进制位数字,即共16个二进制位,十六个二进制位代表十进制255),每一个总线上可支持32个设备,所以设备号是5位,而每一个设备上最多可有8种功能,所以功能号是3位。由此,我们能够得 出上述的PCI设备的地址是0号域0号总线上的31号设备上的1号功能。
那上述的这个PCI设备究竟是什么呢?以下是我的电脑上的lspci命令的输出:00:00.0 Host bridge: Intel Corporation 82845 845 (Brookdale) Chipset Host Bridge (rev 04)00:01.0 PCI bridge: Intel Corporation 82845 845 (Brookdale) Chipset AGP Bridge(rev 04)00:1d.0 USB Controller: Intel Corporation 82801CA/CAM USB (Hub #1) (rev 02)00:1d.1 USB Controller: Intel Corporation 82801CA/CAM USB (Hub #2) (rev 02)00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 42)00:1f.0 ISA bridge: Intel Corporation 82801CAM ISA Bridge (LPC) (rev 02)00:1f.1 IDE interface: Intel Corporation 82801CAM IDE U100 (rev 02)00:1f.3 SMBus: Intel Corporation 82801CA/CAM SMBus Controller (rev 02)00:1f.5 Multimedia audio controller:Intel Corporation 82801CA/CAM AC'97 Audio Controller (rev 02)00:1f.6 Modem: Intel Corporation 82801CA/CAM AC'97 Modem Controller (rev 02)01:00.0 VGA compatible controller: nVidia Corporation NV17 [GeForce4 420 Go](rev a3)02:00.0 FireWire (IEEE 1394): VIA Technologies, Inc. IEEE 1394 Host Controller(rev 46)02:01.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+(rev 10)02:04.0 CardBus bridge: O2 Micro, Inc. OZ6933 Cardbus Controller (rev 01)02:04.1 CardBus bridge: O2 Micro, Inc. OZ6933 Cardbus Controller (rev 01)
lspci没有标明域,但对于一台PC而言,一般仅仅有一个域,即0号域。通过这个输出我们能够看到它是一个IDE interface。由上述的 输出能够看到,我的电脑上共同拥有3个PCI总线(0号,1号,2号)。在单个系统上,插入多个总线是通过桥(bridge)来完毕的,桥是一种用来连接总线 的特殊PCI外设。
所以,PCI系统的总体布局组织为树型,我们能够通过上面的lspci输出,来画出我的电脑上的PCI系统的树型结构:
|---00:01.0(PCI桥)---01:00:0(nVidia显卡)
|
| |--00:1d:0(USB1号控制器)
|---00:1d(USB控制器)--- |
| |--00:1d:1(USB2号控制器)
|
| |--02:00.0(IEEE1394)
| |
00:00.0 --- | ---00:1e:0(PCI桥)---|--02:01.0(8139网卡)
(主桥) | |
| | |--02:04.0(桥1)
| |--02:04(CardBus桥) |
| |--02:04.1(桥2)
|
|
| |--00:1f:0(ISA桥)
| |
| |--00:1f:1(IDE接口)
| |
|---00:1f(多功能板卡)--|--00:1f:3(SMBus)
|
|--00:1f:5(多媒体声音控制器)
|
|--00:1f:6(调制解调器)
由上图能够得出,我的电脑上共同拥有8个PCI设备,当中0号总线上(主桥)上连有4个,1号总线上连有1个,2号总线上连有3个。00:1f是一个连有5个功能的多功能板卡。
之所以是上面的树型结构,是因为,PCI桥设备下,一定有所连接的另一个PCI总线(称为“次总线”,即主总线的子总线)。见下面两个图,每个PCI桥下都有次总线,次总线下面又连接着 Endpoint(Endpoint是PCIe总线上的终端设备).
而且,根据数据结构与算法,树这一数据结构,可推断出PCI桥下所连接的各个次总线的编号。
相关文章:

PCIe具体解释分析
参考文章 PCIe总线详解_STATEABC-GitCode 开源社区 https://zhuanlan.zhihu.com/p/652808759 PCI总线学习(一):PCI总线结构-CSDN博客 PCI——第1章——PCI总线的基本知识-CSDN博客 计算机中register、cache、memory的区别 - Lines Blog 什么是内存管理单元ÿ…...
【阿里云大模型高级工程师ACP习题集】2.5 优化RAG应用提升问答准确度(⭐️⭐️⭐️ 重点章节!!!)
习题集 【单选题】在RAG应用的文档解析与切片阶段,若遇到文档类型不统一,部分格式的文档不支持解析的问题,以下哪种解决方式不可行?( ) A. 开发对应格式的解析器 B. 转换文档格式 C. 直接忽略该类型文档 D. 改进现有解析器以支持更多格式 【多选题】在选择向量数据库时,…...

Golang | 迭代器模式
迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种顺序访问聚合对象(如列表、树等集合结构)中元素的方法,而无需暴露其底层实现细节。通过将遍历逻辑与集合本身解耦,迭代器模式使…...

使用命令行加密混淆C#程序
C#作为托管语言编译生成的IL中间代码极易被反编译工具还原源码。据统计,超过83%的商业软件曾遭遇过代码逆向风险,导致核心算法泄露、授权被跳过. 因此对于C#语言开发的程序来说, 在发布前进行混淆和加密非常有必要. 本文主要介绍如何使用恒盾C#混淆加密…...
MYSQL 常用数值函数 和 条件函数 详解
一、数值函数 1、ROUND(num, decimals) 四舍五入到指定小数位。 SELECT ROUND(3.1415, 2); -- 输出 3.142、ABS(num) 取绝对值 SELECT ABS(-10); -- 输出 103、CEIL(num) / FLOOR(num) 向上/向下取整 SELECT CEIL(3.2), FLOOR(3.7); -- 输出 4 和 34、MOD(num1, num2) 取…...

当智驾成标配,车企暗战升级|2025上海车展
文|刘俊宏 编|王一粟 智能化无处不在的2025年上海车展,回归了卖车的初衷。 光锥智能在展会暴走两天,最大的感触是今年的车展少了争奇斗艳,多了些许务实。 回顾智能汽车时代的三场重要车展。2023年的上海车展充满了…...
QuecPython+GNSS:实现快速定位
概述 QuecPython 结合 GNSS(全球导航卫星系统)模块为物联网设备提供开箱即用的定位能力解决方案。该方案支持 GPS/北斗/GLONASS/Galileo 多系统联合定位,为物联网开发者提供从硬件接入到云端服务的全栈式定位解决方案。 优势特点 多体系定…...
[java八股文][Java基础面试篇]设计模式
volatile和sychronized如何实现单例模式 public class SingleTon {// volatile 关键字修饰变量 防止指令重排序private static volatile SingleTon instance null;private SingleTon(){}public static SingleTon getInstance(){if(instance null){//同步代码块 只有在第一次…...

在网上找的资料怎样打印出来?
在数字化时代,我们经常需要从互联网上获取各种资料,无论是学术论文、工作文档还是学习资料。然而,如何高效地将这些网上的资料打印出来,却是一个值得探讨的问题。本文将为您提供一个全面的解决方案,帮助您轻松完成网上…...

算法训练营 Day1
努力追上那个曾经被寄予厚望的自己 —— 25.4.25 一、LeetCode_26 删除有序数组中的重复项 给你⼀个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现⼀次 ,返回删除后数组的 新⻓度。元素的 相对顺序 应该保持 ⼀致 …...

【linux】Chrony服务器
简介 1.1 时间的重要性 由于 IT 系统中,准确的计时非常重要,有很多种原因需要准确计时: 在网络传输中,数据包括和日志需要准确的时间戳 各种应用程序中,如订单信息,交易信息等 都需要准确的时间戳 1.2 时区…...

技术视界 | 数据的金字塔:从仿真到现实,机器人学习的破局之道
在人工智能的世界里,有一个共识正逐渐达成——谁掌握了数据,谁就掌握了未来。 尤其是在机器人技术迅速演进的今天,“如何让机器人理解世界、学习操作”这一问题的根源,越来越回归到数据本身。正如一座金字塔般,不同层…...

wsl联通外网
在C:\Users<你的用户名>下,新建.wslconfig文件添加如下配置(具体配置参考官方文档): # Settings apply across all Linux distros running on WSL 2 [wsl2]# Limits VM memory to use no more than 4 GB, this can be set …...

shadcn/radix-ui的tooltip高度定制arrow位置
尝试了半天,后来发现,不支持。。。。。就是不支持 那箭头只能居中 改side和align都没用,下面有在线实例 https://codesandbox.io/p/sandbox/radix-ui-slider-forked-zgn7hj?file%2Fsrc%2FApp.tsx%3A69%2C21 但是呢, 第一如果…...

【专题刷题】二分查找(二)
📝前言说明: 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码;ÿ…...

C++_数据结构_详解红黑树
✨✨ 欢迎大家来到小伞的大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 小伞的主页:xiaosan_blog 制作不易!点个赞吧!!谢谢喵!&…...

数据结构手撕--【二叉树】
目录 定义结构体: 初始化: 手动创建一个二叉树: 前序遍历: 中序遍历: 后序遍历 二叉树节点个数: 叶子节点个数: 二叉树第k层节点个数: 二叉树的高度: 查找值为x…...
【刷题Day26】Linux命令、分段分页和中断(浅)
说下你常用的 Linux 命令? 文件与目录操作: ls:列出当前目录的文件和子目录,常用参数如-l(详细信息)、-a(包括隐藏文件)cd:切换目录,用于在文件系统中导航m…...
星火燎原:大数据时代的Spark技术革命在数字化浪潮席卷全球的今天,海量数据如同奔涌不息的洪流,传统的数据处理方式已难以满足实时、高效的需求。
星火燎原:大数据时代的Spark技术革命 在数字化浪潮席卷全球的今天,海量数据如同奔涌不息的洪流,传统的数据处理方式已难以满足实时、高效的需求。Apache Spark作为大数据领域的璀璨明星,凭借其卓越的性能和强大的功能,…...

.NET MAUI 发展历程:从 Xamarin 到现代跨平台应用开发框架
文章目录 引言Xamarin 起源:MAUI 的前身Xamarin 的创立(2011年)Xamarin Studio 与 Visual Studio 集成(2013年)Xamarin.Forms 的诞生(2014年)微软收购Xamarin(2016年) .N…...

多模态大语言模型arxiv论文略读(四十)
The Wolf Within: Covert Injection of Malice into MLLM Societies via an MLLM Operative ➡️ 论文标题:The Wolf Within: Covert Injection of Malice into MLLM Societies via an MLLM Operative ➡️ 论文作者:Zhen Tan, Chengshuai Zhao, Raha M…...

【蓝桥杯选拔赛真题104】Scratch回文数 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析
目录 scratch回文数 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 四、程序编写 五、考点分析 六、推荐资料 1、scratch资料 2、python资料 3、C++资料 scratch回文数 第十五届青少年蓝桥杯scratch编…...

OpenWrt 与 Docker:打造轻量级容器化应用平台技术分享
文章目录 前言一、OpenWrt 与 Docker 的集成前提1.1 硬件与内核要求1.2 软件依赖 二、Docker 环境部署与验证2.1 基础服务配置2.2 存储驱动适配 三、容器化应用部署实践3.1 资源限制策略3.2 Docker Compose 适配 四、性能优化与监控4.1 容器资源监控4.2 镜像精简策略 五、典型问…...
tkinter的文件对话框:filedialog
诸神缄默不语-个人技术博文与视频目录 文章目录 一、前言二、tkinter.filedialog模块详解2.1 模块导入方式2.2 通用参数说明 三、五大核心函数实战3.1 选择单个文件 - askopenfilename()3.2 多文件选择 - askopenfilenames()3.3 保存文件对话框 - asksaveasfilename()3.4 选择目…...

C++初阶----模板初阶
引言 什么是模板 模板是泛型编程的基础,泛型编程是以一种独立于任何特定类型的方式编写代码。 模板也是创建泛型类或者函数的蓝图。 如:库容器,迭代器和算法,都是泛型编程的例子 1. 泛型编程 首先,我们应该了解什么是…...

网络流量分析 | 流量分析基础
流量分析是网络安全领域的一个子领域,其主要重点是调查网络数据,以发现问题和异常情况。本文将涵盖网络安全和流量分析的基础知识。 网络安全与网络中的数据 网络安全的两个最关键概念就是:认证(Authentication)和授…...
幻读是什么项目中是怎么保证不会出现幻读
幻读(Phantom Read)是数据库并发控制中的一种现象,指的是在事务处理中,一个事务在读取某个数据范围时,另一个事务插入、删除或者修改了该数据范围,导致第一个事务再次读取数据时,看到的数据发生…...
C语言实现对哈希表的操作:创建哈希表与扩容哈希表
一. 简介 前面文章简单了解了哈希表 这种数据结构,文章如下: 什么是哈希表-CSDN博客 本文来学习一下哈希表,具体学习一下C语言实现对哈希表的简单实现。 二. C语言实现对哈希表的操作 1. 哈希表 哈希表(Hash Tableÿ…...
MYSQL 常用字符串函数 和 时间函数详解
一、字符串函数 1、CONCAT(str1, str2, …) 拼接多个字符串。 SELECT CONCAT(Hello, , World); -- 输出 Hello World2、SUBSTRING(str, start, length) 或 SUBSTR() 截取字符串。 SELECT SUBSTRING(MySQL, 3, 2); -- 输出 SQ3、LENGTH(str) 与 CHAR_LENGTH…...
通过API接口在自己的独立站系统上架商品信息。(实战案例)
以下是一个通过API接口在独立站系统上架商品信息的实战案例,以某跨境电商独立站集成亚马逊产品数据为例,详细说明技术实现流程和关键代码逻辑: 案例背景 某跨境电商独立站需要从亚马逊平台同步商品数据(标题、价格、库存、图片、…...