图解计算机内部的高速公路 —— 总线系统

news2025/7/11 5:40:26

本文已收录到  GitHub · AndroidFamily,有 Android 进阶知识体系,欢迎 Star。技术和职场问题,请关注公众号 [彭旭锐] 进 Android 面试交流群。

前言

大家好,我是小彭。

在之前的文章中,我们聊到了计算机的冯·诺依曼计算机架构,计算机由五大部件组成。那么,计算机的五大部件是如何连接成一个整体的呢?这就需要依赖总线系统。


学习路线图:


1. 认识计算机总线系统

1.1 什么是总线?

在冯·诺依曼计算机架构中,计算机由控制器、运算器、存储器、输入设备和输出设备五个部分组成,而这五个部分必须进行 “连接” 起来相互通信才能形成一个完整的整体。 总线就是连接多个计算机部件的数据通信规范。

PC 计算机主板

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4XlaPasr-1668514945912)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/dc84fb986fae46378888c1c9540e82ad~tplv-k3u1fbpfcp-watermark.image?)]

—— 图片引用自 Wikipedia

1.2 为什么要使用总线结构?

先解释一下为什么现代的计算机系统要采用总线结构:

  • 原因 1 - 降低复杂性: 这个设计思路跟软件开发中的中介者模式是相同的。总线结构将 N-N 网型拓扑结构简化为 N-1-N 总线型结构或星型+总线型拓扑结构,不仅整体的系统结构清晰许多,可以提高系统稳定性。而且需要使用的布线数目也减少了,制造成本也更低;
  • 原因 2 - 促进标准化: 总线结构提供了一个标准化的数据交换方式,各个硬件按照总线的标准实现接口,而无需考虑对方接口或总线的工作原理,有利于各个部件模块化设计。

网状拓扑和总线拓扑对比


2. 总线的内部结构

总线本身的电路功能,又可以拆分成 3 部分:

  • 1、地址总线(Address Bus,AB): 地址总线传输的是地址信号。地址总线是单向的,地址信息只能从主设备发往从设备。地址总线宽度也决定了一个 CPU 的寻址能力,即多大可以访问多少数据空间。举个例子,32 位地址总线可以寻址 4GB 的数据空间;
  • 2、控制总线(Control Bus,CB): 控制总线传输控制或状态信号。控制总线是双向的,信号可以从主模块发往从模块,也可以从从模块发往主模块(例如 CPU 对存储器的读写控制信号,例如 I/O 设备对 CPU 中断请求信号);
  • 3、数据总线(Data Bus,DB): 数据总线传输的是实际的数据信息。数据总线是双向的,数据可以从主模块发往从模块(例如 CPU 向内存的写入操作),也可以从从模块发往主模块(例如 CPU 向内存的读取操作)。

举个例子,当 CPU 要从存储器读取数据时,三类总线的工作过程概要如下:

  • 1、CPU 通过地址总线发送要访问的存储单元的地址信息;
  • 2、CPU 通过控制总线发送读控制信号;
  • 3、存储器通过数据总线发送指定存储单元上的数据,从 CPU 的视角就是读取。

总线内部结构


3. 总线系统的架构

理解了总线的概念后,我们先来看总线系统的整体架构,现代计算机中的总线大多采用分层次多总线架构。

3.1 单总线架构和多总线架构

在早期计算机中,会使用单一总线来连接计算机的各个部件,这种结构叫单总线架构。这种结构实现简单,但缺点有 2 个:

  • 缺点 1: 计算机不同组件之间的速度差较大,例如 CPU 与内存或 I/O 设备的速度差非常大,当传输数据量很大时,CPU 经常需要等待;
  • 缺点 2: 所有的信号都要经过同一个共享的总线,不允许两个以上的部件同时传输信号。

单总线架构

因此,单总线系统很容易形成系统的性能瓶颈,就算是增大总线的带宽也无法从根本上解决系统性缺陷。目前,单总线结构只出现在微型计算机中。大多数现代计算机都采用了分层次多总线结构,所有的设计思路都是围绕单总线架构存在的 2 个缺点展开的:

  • 应对缺点 1: 将高速部件和低速部件分为不同层级,不同层级之间使用独立的总线,减少高速部件对低速部件的等待;
  • 应对缺点 2: 增加多条总线,使得数据可以同时在多个部件之间传输。

3.2 双独立总线:片内 & 片外

现代 CPU 中通常会使用高速缓存,由于 “CPU-高速缓存” 和 “CPU - 内存” 的速度差非常大,计算机系统选择在 CPU 芯片内和 CPU 芯片外使用 双独立总线(Dual Independent Bus,DIB):

  • 前端总线(Front Side Bus,FSB): CPU 与外部连接的总线(即 CPU 连接北桥芯片的总线);
  • 后端总线(Back Side Bus,BSB): 也叫本地总线(Local Bus)或片内总线(On-chip Bus),是 CPU 芯片内部独立使用的总线。CPU 芯片内部一个或多个核心、Cache 之间的通信将不需要占用芯片外的系统总线。

提示: 前端总线和系统总线的概念容易混淆,不同资料的说法不一。我的理解是:前端总线是 “特指” 某些 Intel CPU 架构中,CPU 芯片与外部连接的这条总线,而系统总线 “泛指” 连接计算机各个部件的所有总线。小彭在后续专栏内容都会按照此理解讨论。

前端总线和后端总线

3.3 南北桥架构

南北桥架构是 Intel 提出的总线架构,也叫 Hub 架构 。它将计算机部件分为高速部件和低速部件两类,分为北桥芯片组合和南桥芯片组,中间用两颗桥芯片连接。使用南北桥设计有 2 个优点:

  • 1、缓冲功能: 南北桥芯片实现了两类总线信号速度缓冲;
  • 2、桥接功能: 南北桥芯片实现了两类总线信号的转换,有利于系统升级换代。例如在升级 CPU 时,只需要改动 CPU 和北桥芯片,其它南桥部分不需要改动。

南北桥架构

  • 北桥芯片(Northbridge): 北桥处理高速信号。北桥芯片连接的设备都是高速传输设备,包含 CPU、GPU、存储器与南桥的通信。北桥芯片也是 CPU 与外部连接的纽带;
  • 南桥芯片(Southbridge): 南桥处理低速信号。南桥芯片连接的大多是 I/O 设备,例如 PCI 总线、USB 适配器、显卡适配器、硬盘控制器;
  • 内存控制器(Memory Controller): 管理 CPU 和内存之间的总线数据传输,控制着存储器的读取和写入信号,并且定时刷新 DRAM 内的数据(DRAM 的存储单元包含电容,会自动漏电);
  • 内存总线(Memory Bus): 连接北桥芯片与存储器的总线;
  • DMI 总线(Direct Media Interface): 连接北桥芯片和南桥芯片的专用总线;
  • I/O 总线: 连接南桥芯片与 I/O 设备的总线;
    • PCI 局部总线: 连接高速 I/O 设备的标准;
    • ISA 局部总线: 连接低速 I/O 设备的标准。

3.4 前端总线瓶颈

前端总线是 CPU 连接外界的唯一通道,因此前端总线的数据传输能力对于计算机系统的整体性能影响非常大。 近年来随着 CPU 主频不断提升,前端总线频率却一直跟不上后端总线频率,从而出现性能瓶颈。

为了解决这个问题,传统的南北桥架构被重新设计,北桥芯片的功能几乎都移动到 CPU 内部变成 “片上北桥”。前端总线被淘汰,CPU / 片上北桥继续使用 DMI 连接南桥或 PCH 等外部设备。


4. 总线仲裁

总线既有共享性又有独占性,听起来有点矛盾,其实是表现的时机不一样:

  • 共享性: 总线的共享性是指总线对所有连接的设备共享,主从模块能通过总线传输数据。
  • 独占性: 总线的独占性是指同一时刻,只允许一个部件占有总线的控制权,这个部件就是主模块,主模块可以与一个或多个从模块通信,但同一时刻只有一个主模块。

总线的独占性天然地将事务串行化: 如果多个部件同时向总线发出总线事务,总线仲裁(Bus Arbitration)单元会对竞争做出总裁,未获胜的事务只能等待获胜的事务处理完成后才能执行。当其中一个总线事务在执行时,其他总线事务都会被禁止。


5. 总结

  • 1、总线就是连接多个计算机部件的数据通信规范;

  • 2、总线的电路结构由地址总线、控制总线和数据总线组成。举个例子,当 CPU 要从存储器读取数据时,三类总线的工作过程概要如下:

    • CPU 通过地址总线发送要访问的存储单元的地址信息;
    • CPU 通过控制总线发送读控制信号;
    • 存储器通过数据总线发送指定存储单元上的数据,从 CPU 的视角就是读取。
  • 3、现代计算机中的总线大多采用分层次多总线架构,由片内+片外双独立总线平衡高速缓存和内存的速度差,由南北桥架构平衡高速部件和低速部件的速度差;

  • 4、由于前端总线瓶颈和芯片集成度提高,南北桥架构逐渐被片上系统替代;

  • 5、总线具有共享性和独占性,当多个部件同时向总线发出总线事务,总线天然地将事务串行化;


参考资料

  • 深入浅出计算机组成原理(第 42 讲) —— 徐文浩 著,极客时间 出品
  • 计算机组成原理教程(第 3 章) —— 尹艳辉 王海文 邢军 著
  • 10分钟速成课 计算机科学 —— Carrie Anne 著
  • System Bus —— Wikipedia
  • Northbridge (computing) —— Wikipedia
  • Southbridge (computing) —— Wikipedia
  • HyperTransport —— Wikipedia
  • Intel QuickPath Interconnect —— Wikipedia
  • Arbiter (electronics) —— Wikipedia

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TNT8Uv1o-1668514945933)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7db0e43b744943f685ad1e3627f1ceb1~tplv-k3u1fbpfcp-watermark.image?)]

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

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

相关文章

2022-09-17青少年软件编程(C语言)等级考试试卷(五级)解析

​​​​​​T1. 城堡问题 【题目描述】 图1是一个城堡的地形图。请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。城堡被分割成mn(m≤50,n≤50)个方块,每个方块可以有0~4面墙。 【输入】 程序从标准输入设备读入数据。第1、2行每行1个整数,分别是南北向、东西…

MySQL数据库基础

文章目录一. 数据库的操作二. 数据库中常用的数据类型三.表的操作四. 总结一. 数据库的操作 1. 创建数据库 创建语法1 crate database [这里填入表名称]; 说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8&#xf…

(十二)Jmeter测试dubbo接口

一、概览 先去https://github.com/thubbo/jmeter-plugins-for-apache-dubbo下载扩展jar包将下载的jar包复制到 jmeter/lib/ext/下重启Jmeter创建Dubbo取样器 二、实操 添加dubbo取样器 输入请求详情 参数类型可以在 https://github.com/thubbo/jmeter-plugins-for-apache-…

如何在Retail Link网站上与Walmart进行EDI连接测试?

本文主要介绍通过沃尔玛Walmart供应商平台Retail Link与沃尔玛Walmart建立EDI连接的流程。沃尔玛Walmart作为零售行业中最先使用AS2协议传输EDI数据的企业之一,其AS2经过多年的使用检验,具有安全连接、灵活数据传输等优点,使其经久不衰&#…

Qt Xml文件的创建和解析[xml和dom方式]

Qt Xml文件的创建和解析[xml和dom方式] 【1】Qt XML使用说明【2】Qt XML未来可期【3】Qt XML文件格式【4】Qt 读取XML文档的方法【5】Qt XML解析方式比较【6】QXmlStreamReader类说明【7】QXmlStreamWriter类说明【8】DOM说明【9】XML常用函数【10】DOM常用函数【11】XML和DOM源…

摊牌了,请各位做好一年内随时失业的准备

前两天跟一个HR朋友聊天,她表示刚在boss上发布了一个普通测试岗位,不到一小时竟然收到了几百份简历。而且简历质量极高,这是往年不敢想象的。岗位少,竞争激烈,这是今年软件测试就业的真实写照,也是所有岗位…

Python开发环境及常用Web框架

Python Python是一门易于学习、功能强大的编程语言。它提供了高效的高级数据结构,还能简单有效地面向对象编程。Python 优雅的语法和动态类型以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的理想语言。 吉多范罗苏姆(Guido…

基于Postmate实现的跨域通信

1、Postmate 介绍 是一款基于 postMessage 来处理父子页面通信的库,轻量且好用。一个强大的、简单的、基于 promise 的 postMessage iFrame 通信库。 postmate 官方地址 https://github.com/dollarshaveclub/postmate 2、Postmate 特性 基于 promise 的 API&…

如何将数字改为千分符且保留两位小数显示?toLocaleString()和toFixed(2)踩坑

前言 基于现代Web前端框架的应用,其原理是通过浏览器向服务器发送网络请求,获取必要的index.html和打包好的JS、CSS等资源,在浏览器内执行JS,动态获取数据并渲染页面,从而将结果呈现给用户。在这个过程中,…

【java学习】 static

文章目录成员变量static 工具类static 代码块设计模式继承重写成员变量 1.成员变量的分类和访问分别是什么样的? 静态成员变量(有static修饰,属于类、加载一次,可以被共享访问),访问格式 类名.静态成员变量(推荐) 对…

R语言七天入门教程六:文件相关操作

R语言七天入门教程六:文件相关操作 一、文件的读写 R 语言作为统计学编程语言,常常需要处理大量数据,而这些数据通常会从文件中进行读取,因此文件读写在R语言中是非常重要的操作。在R语言中,用到最多的文件格式是csv…

Carla安装记录

Carla安装记录 最近打算在做一些自动驾驶相关的东西,所以安装了一下Carla。在这里记录一些自己的安装过程中遇到的一些问题和解决的方法。 Carla release版本下载 想要安装Carla,可以选择release版本或者源码安装。在这里我主要介绍release版本的安装…

Vue3、vite项目页面自适应配置(postcss-plugin-px2rem、amfe-flexible)

文章目录前言:vite 如何处理 csspostcss项目配置下载相关包配置方案一方案二(备选方案)相关资料链接前言:vite 如何处理 css vite 天生就支持对css文件的直接处理 关于预处理器 ☀️目前,在工程化开发中,使…

AcWing-C/C++语法基础【合集2】

5.字符串 每个常用字符都对应一个-128~127的数字 ,二者之间可以相互转化: (int)97 , (char)a 常用ASCII值:’A’-‘Z’ 是65~90,’a’-‘z’是97-122,’0’-‘9’是 48-57 字符可以参与运算,运算时会将其当…

2022年11月编程排行榜

2022年11月Tiobe编程排行榜已更新,研一的生涯也快结束,来看一下本月各大编程语言有何新进展: 目录:11月编程排行榜一、榜单情况二、榜单简单的分析一、榜单情况 这里只展示排名靠前的前15名: TOP 10编程语言TIOBE指数…

播放视频出现错误代码0xc00d36c4如何修复?

相信很多用户都遇到过视频无法播放的问题。比如将重要视频从旧电脑拷到U盘上,使用另一台电脑播放时,提示视频播放错误代码0xc00d36c4,不支持该视频播放。 其实,视频无法播放的问题是很常见的,不少用户将相机或者手机上…

机器学习的初学术语掌握

机器学习:让一个模型能够通过数据调优自己,后续的数据可以通过模型获得更贴近真实的结论数据集:也叫样本,可以简单理解为一个个对象构建成的集合训练样本:构建的数据集中的一部分被拿来训练模型的子集标记:…

计算机网络面试题

1. TCP建⽴连接的过程。 三次握⼿: 1. 第⼀次握⼿(客户端发送syn包到服务器端):客户端发送syn包到服务器端,进⼊syn_send状态,等待服务器端的确认; 2. 第⼆次握⼿(服务器返回synack包给客户端):服务器端…

Js逆向教程-08跟值技巧

Js逆向教程-08跟值技巧 一、加密函数最有可能出现在哪里? 一般不会出现在jquery成熟的第3仓库里面。 jquery是封装好的成熟的第3仓库,一般不会去修改它。 因为如果jquery版本提升了,还要去改jquery。 一般会出现在自己写的js代码中&#x…

LabVIEW性能和内存管理 3

LabVIEW性能和内存管理 3 本文介绍LabVIEW性能和内存管理的几个建议3。 显示缓冲区分配。 “显示缓冲区分配”工具位于工具>配置文件>显示缓冲区分配 In Place优化例程。对波形数组的每个元素进行操作 下面是如何使用ShowBuffer allocation工具提高性能的示例。从层次…