我对总线的理解和总结
浏览:3153次 出处信息
身为一名软件工程师,我一直认为,虽然我的工作是编写软件,但是如能对硬件基础有些了解的话,可以帮助我写出更好的程序,而且还可以帮助我加深对系统的整体理解。
最几天在琢磨总线,今天就做一个简单的总结。(因为我不是搞硬件的,而计算机组成原理等已经很久没有碰过了,所以本文应该会有错误。大家小心哦~ 欢迎大家指正)
首先需要明确什么是总线,其用途是什么?根据wiki的解释,总线是用于连接计算机各部件的子系统,用于各部件间的数据传输。为什么叫做bus呢?大家可以想英文中bus的意思是公共汽车。在这里也有近似的意思,是一个公共传输线路,大家的信号都可以在上面传输。(关于公共汽车的这个说法,非本人原创,我忘记在哪里看到的,觉得很形象。)
那么在计算机系统中,总线一般怎么使用呢?下图为我根据自己的理解和查阅一些资料画的x86架构的总线结构图:
1. System Bus系统总线是一个总称。其包括数据总线,控制总线和地址总线;
2. 对于快速设备来说,要通过北桥芯片连接到System Bus中;在老的系统中,北桥和南桥都是独立的芯片。现代的CPU已将北桥和南桥集成到CPU中。
3. 连接到北桥的部件包括:CPU,RAM,PCIE,AGP等快速数据设备。
4. 连接到南桥的部件包括:IDE,PCI,USB,和其它的一些IO设备,串口设备等。
5. 为什么需要南桥北桥?我的理解是,各部件有其自己的电气特性,由此需要一个芯片控制器作为一个中间设备,保证它们之间可以通过系统总线进行通信。
6. 计算机各部件的通信都需要经过System Bus。那么在同一时刻,只有一个部件可以占用系统总线。x86的锁的实现,一般要利用锁总线的指令来完成对内存的串行访问。
7. 因为各个部件都是通过系统总线来交换数据,那么自然它们也是共享一条地址总线。所以很自然的各部件也是共享同一个地址空间。这里的地址空间指的是物理地址。整个儿的物理地址空间大部分是留给物理内存的,但是剩下的部分就是留给这些各部件的。这里需要进一步说明的是,对于CPU来说,其使用的是物理地址,而外设设备使用的是总线地址。不过在x86平台上,物理地址和总线地址是一致的。其它平台可能需要将物理地址转换为总线地址。
8. 在高速设备中,总线已经成为了性能的一个瓶颈。试想,当网卡收到数据包的时候,就算使用DMA来讲数据包直接存到内存中,避免占用CPU计算资源。可是DMA的传输无论如何都要经过总线,这是第一次。CPU需要处理数据包,自然需要从内存中读取数据包,又是一次总线传输。这里就有了两次总线传输。不仅这样,由于总线的独占性。即使DMA解放了CPU,但是当DMA的传输过程中,CPU也需要读取内存时。这时,不可避免的影响了CPU的处理。而总线速度要小于CPU的处理速度,所以在这种情况下,总线速度就决定了设备的性能。那么为了解决这个问题:1)尽量让数据包不经过系统总线;某些数据包可以通过ASIC或者FPGA直接从网卡中读取,进行简单处理后发送;2)在某些情况下,数据包不得不由CPU处理(如复杂的逻辑处理)。那么我们尽量让CPU在处理数据的过程中,不要频繁使用系统总线。从上图可以看出,L2或者L3 cache是在总线前端的。那么我们在写代码的过程中,一定要尽量保证数据和代码的cache命中率。
嗯~~,今天一时半会,暂时只想起这几条关于总线的理解。以后想起,随时补充。欢迎大家指正!
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:Nginx+KV db进行AB灰度测试
后一篇:Gecko架构浅析之编码检测和转换 >>
文章信息
- 作者:gfree.wind@gmail.com 来源: kernelchina blogs
- 标签: 总线
- 发布时间:2012-07-19 12:21:56
近3天十大热文
- [67] Go Reflect 性能
- [67] Oracle MTS模式下 进程地址与会话信
- [67] 如何拿下简短的域名
- [61] IOS安全–浅谈关于IOS加固的几种方法
- [60] 图书馆的世界纪录
- [59] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [47] 界面设计速成