背景:最近遇到了io等待导致我整个系统挂掉的问题,当然是因为其它原因。一只对io从硬件到软件、阻塞和非阻塞这些概念一知半解,故记录一下了解到过程

1.、总线:

IO是通过共享一条总线的方式来实现的,总线也就是一条或者多条物理上的导线,每个部件都接到这些导线上,导线上的电位每个时刻都是相等的(这个地方需要注意下,之前没有考虑这个问题),这样总线上的所有部件都会受到相同的信号。也就是说,这条总线是共享的,同一个时刻只能有一个部件在接收或者发送,是全单工的工作模式。(数据只在一个方向上传输,不能实现双方通信单工、半双工和全双工的区别_布袋和尚-CSDN博客)

*PCI是Peripheral Component Interconnect(外设部件互连标准)的缩写

*南北桥结构的主板上都有两个面积比较大的芯片,靠近CPU的为北桥芯片,主要负责控制AGP显卡、内存与CPU之间的数据交换;靠近PCI槽的为南桥芯片,主要负责软驱、硬盘、键盘以及附加卡的数据交换。

2、北桥芯片:

一块电脑主板,以CPU插座为北的方法拿着,靠近CPU插槽的一个起连接作用的芯片称为“北桥芯片”,英文名:North Bridge Chipset。北桥芯片(NorthBridge)是主板芯片组中起主导作用的组成部分,也称为主桥(HostBridge)。北桥是个人电脑主板芯片组两枚大规模芯片中的一枚。北桥被用来处理高速信号,通常处理CPU(处理器),RAM(内存),AGP端口或PCI Express,和南桥芯片之间的通信。一般来说,芯片组的名称就是以北桥芯片的名称来命名的,例如英特尔 845E芯片组的北桥芯片是82845E,875P芯片组的北桥芯片是82875P等等。北桥芯片负责与CPU的联系并控制内存、AGP数据在北桥内部传输,提供对CPU的类型和主频、系统的前端总线频率、内存的类型(SDRAM,DDR SDRAM以及RDRAM等等)和最大容量、AGP插槽、ECC纠错等支持,整合型芯片组的北桥芯片还集成了显示核心。北桥芯片就是主板上离CPU最近的芯片,这主要是考虑到北桥芯片与处理器之间的通信最密切,为了提高通信性能而缩短传输距离。因为北桥芯片的数据处理量非常大,发热量也越来越大,所以现在的北桥芯片都覆盖着散热片用来加强北桥芯片的散热,有些主板的北桥芯片还会配合风扇进行散热。因为北桥芯片的主要功能是控制内存,而内存标准与处理器一样变化比较频繁,所以不同芯片组中北桥芯片是肯定不同的,当然这并不是说所采用的内存技术就完全不一样,而是不同的芯片组北桥芯片间肯定在一些地方有差别。

3、南桥芯片:

南桥芯片(SouthBridge)是主板芯片组的重要组成部分,一般位于主板上离CPU插槽较远的下方,PCI插槽的附近,这种布局是考虑到它所连接的I/O总线较多,离处理器远一点有利于布线。相对于北桥芯片来说,其数据处理量并不算大,所以南桥芯片一般都没有覆盖散热片。南桥芯片不与处理器直接相连,而是通过一定的方式(不同厂商各种芯片组有所不同,例如英特尔的英特尔Hub Architecture以及SIS的Multi-Threaded“妙渠”)与北桥芯片相连。

南桥芯片负责I/O总线之间的通信,如PCI总线、USB、LAN、ATA、SATA、音频控制器、键盘控制器、实时时钟控制器、高级电源管理等,这些技术一般相对来说比较稳定,所以不同芯片组中可能南桥芯片是一样的,不同的只是北桥芯片。所以现在主板芯片组中北桥芯片的数量要远远多于南桥芯片。例如早期英特尔不同架构的芯片组Socket 7的430TX和Slot1的440LX其南桥芯片都采用82317AB,而近两年的芯片组845E/845G/845GE/845PE等配置都采用ICH4南桥芯片,但也能搭配ICH2南桥芯片。更有甚者,有些主板厂家生产的少数产品采用的南北桥是不同芯片组公司的产品,例如以前升技的KG7-RAID主板,北桥采用了AMD760,南桥则是VIA 686B。南桥芯片的发展方向主要是集成更多的功能,例如网卡、RAID、IEEE 1394、甚至WI-FI无线网络等等

新的i3、i5、i7处理器也都将将存储控制器整新的i3合到CPU中,并且为处理器提供了更快的管道和系统部件的通信能力。同时新的移动处理器还“革命”性的将图形处理核心(GPU)整合到了处理器中。这种将两种制程工艺制造的处理器整合到一起的产品堪称业界首创,32nm的处理器核心+45nm图形处理核心、内存控制器共同构成了代号为Arrandale的新款移动处理器,而与以往的分离式设计相比,这种将图形处理核心集成在处理器内部的做法直接提高了系统整体的兼容性和稳定性。被Intel称为“高清显卡”的图形处理器支持2通道的高清全硬件解码,令高清电影的播放更为流畅,画面更清晰逼真,令用户的视觉体验加倍升级。 全新的酷睿i3/i5/i7是把北桥芯片组也集成到CPU上,其内部仍是采用QPI总线来通讯,而外部与主板芯片组通讯,其实就是以往主板上南桥与北桥通讯,采用的正是DMI总线。酷睿i3/i5/i7并没有精简QPI总线,只是集成度更高而已。QPI总线可以用于CPU内部通讯,也可以用于CPU与主板北桥芯片组通讯,而Bloomfield Core i7正是利用QPI作为CPU内部通信以及CPU与北桥通信的通道。QPI总线的传输速率是FSB 1600MHz的4倍多,虽然前者数据位宽较窄,但传输带宽仍然是后者的2倍。通过QPI总线,可以有效地降低了处理器和各个硬件之间数据传输的延迟,能有效地提高系统性能。

关于总线的描述可以参考这部分代码:总线概述及常见总线_fivedoumi的专栏-CSDN博客_dmi总线

4、IO案例分析:

下面我们按照“连找发” 三元素理论,去分析一个CPU向磁盘要数据的例子:

连——总线

找——首先要有分区,才能有所谓“找”,这个分区体现在主机总线中就是设备地址映射。每个IO设备在启动时都要向内存中映射一个或者多个地址,这个地址有8位长,又被称作IO端口。针对这个地址的数据,统统被北桥芯片重定向到总线上实际的设备上。假如,IDE磁盘控制器地址被映射到了地址0xA0,也就是十六进制A0,CPU根据程序机器代码,向这个地址发出多条指令来完成一个读操作,这就是找。

发——首先CPU将这个IO地址放到系统总线上,北桥接收到之后,会等待CPU发送第一个针对这个外设的指令。然后CPU发送如下3条指令。

第一条:指令中包含了表示当前指令时读还是写的位,而且还包含了其他选项,比如操作完成时是否用中断来通知CPU处理,是否启用磁盘缓存等。

第二条:指明应该读取的硬盘逻辑块号(LBA)。这个逻辑块在我们讲磁盘结构时会讲到,总之逻辑块就是对磁盘上存储区域的一种抽象。

第三条:给出读取出来的内容应该放到内存中哪个地址中。

这3条指令被北桥依次发送给IO 总线上的磁盘控制器来执行。磁盘控制器收到第一条指令之后,知道这是读指令,而且知道这个操作的一些选项,比如完成是否发中断,是否启用磁盘缓存等,然后磁盘控制器会继续等待下一条指令,即逻辑块地址。磁盘空间器收到指令后,会进行磁盘实际扇区和逻辑块的对应查找,可能一个逻辑块会对应多个扇区,查找完成之后,控制器驱动磁头寻道,等盘体旋转到那个扇区后,磁头开始读出数据。在读取数据的同时,磁盘控制器会接收都第三条指令,也就是CPU给出的数据应该存放在内存中的地址。有了这个地址,数据独处之后直接通过DMA(DMA是Direct Memory Access的缩写。其意思是“存储器直接访问”。它是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,即不通过CPU,也不需要CPU干预。整个数据传输操作在一个称为“DMA控制器”的控制下进行的。CPU除了在数据传输开始和结束时作一点处理外,在传输过程中CPU可以进行其它的工作。这样,在大部分时间里,CPU和输入输出都处在并行操作。因此,使整个计算机系统的效率大大提高)技术,也就是磁盘控制器可以直接对内存寻址并执行写操作,而不必先转到CPU,然后再从CPU存到内存中。

磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。

计算机IO系列「零」计算机IO【硬件部分】相关推荐

  1. 计算机IO系列「一」零拷贝技术

    深入剖析Linux IO原理和几种零拷贝机制的实现 转载自:深入剖析Linux IO原理和几种零拷贝机制的实现 - 知乎 前言 零拷贝(Zero-copy)技术指在计算机执行操作时,CPU 不需要先将 ...

  2. Elasticsearch系列「零」架构解析与最佳实践

    推荐阅读文章: elastic.guide. 分片内部原理 Quintessence Anx. Elasticsearch Performance Tuning 进击的辣条. Elasticsearc ...

  3. 「MoreThanJava」计算机发展史—从织布机到IBM

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  4. 「File」计算机常见文件数据格式

    目录 文本格式(Text) 图片格式(Image) 音频格式(Audio) 视频格式(Video) 数据库格式(Database) 电子表格格式(Spreadsheet) 二进制格式(Binary) ...

  5. 计算机组成原理「一」计算机系统概述

    本文为学习计组时所写笔记,将陆续更新.参考:王道计算机考研 计算机组成原理 :<计算机组成原理>唐朔飞 编著 文章目录 一.计算机的发展 二.计算机硬件的基本组成 1. 早期冯诺依曼机的结 ...

  6. 计算机弹画,「推荐」最简单粗暴的绘画上色神器!超适合摸鱼偷懒的你!

    原标题:「推荐」最简单粗暴的绘画上色神器!超适合摸鱼偷懒的你! 最简单粗暴的绘画上色神器!,初学者上色技巧!初学者绘画如何上色?SAI上色的方法?怎样才能学好绘画?想必这些都是绘画初学者们经常在想的问 ...

  7. IO系列(一):IO

    最基础的 IO 系统级I/O架构 I/O控制和访问 I/O流 I/O系列是一个大系列,或者说是大系列的一部分,I/O是一部分,还会有线程系列和并发系列.笔者认为这三部分都是息息相关的.所以,会从最基础 ...

  8. 中间件系列「三」netty之NIO基础

    Java NIO系统的核心在于:通道(Channel)和缓冲区(Buffer).通道表示打开到 IO 设备(例如:文件.套接字)的连接.若需要使用 NIO 系统,需要获取用于连接 IO 设备的通道以及 ...

  9. 【计算机基础系列文章(一)】计算机简介

    什么是计算机 计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能.是能够按照程序运行,自动.高速处理海量数据的现代化智能 ...

最新文章

  1. hashcode值一样对象一定相同吗_HashMap实现原理分析(面试问题:两个hashcode相同 的对象怎么存入hashmap的)...
  2. Android Studio 常见插件收藏
  3. 【虚拟化实战】存储设计之七Block Size
  4. [ICPC 北京 2017 J题]HihoCoder 1636 Pangu and Stones
  5. transport request 实现原理
  6. Win11蓝屏100%不重启解决方法
  7. 通过示例学 Golang 2020 中文版【翻译完成】
  8. 快讯丨阿里云洛神云网络论文再次入选全球顶会SIGCOMM
  9. 算法:Reverse Words in a String(翻转字符串里的单词)
  10. Java 基本数据类型总结
  11. DroidCam通过数据线调用手机摄像头的方法二
  12. DDos-Attack攻击器教程(kali linux)
  13. NOIP2011(提高组)DAY2---观光公交(vijosP1741)
  14. 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
  15. 随笔(面试相关)(杂)
  16. 【遥感图像应用实例】利用多波段(光谱)数据区分真实草地和人造草地
  17. nb移动udp_【一点资讯】华为L3 | 集采补考真题及答案 www.yidianzixun.com
  18. 19款奥迪a5支持Android,19款奥迪a5有敝篷版吗?
  19. 针对安卓app的爬虫路程
  20. Page Life Expectancy判断服务器运行SQLSERVER时内存是否充足

热门文章

  1. 【web】Good ad ~
  2. php中显示不出图像,php – 无法显示图像,因为它包含错误
  3. python里pai_关于python如何调用win32pai操作cmd的方法
  4. python怎么做q检验_统计学_Cochran’s Q Test(python代码实现)
  5. delphi cxgrid读取本地image_技术讨论 | PHP本地文件包含漏洞GetShell
  6. linux系统死亡之平台,又一个Linux发行版宣告死亡
  7. jtree+mysql_Swing: JTree显示 图标 + 文字 | 学步园
  8. jsbridge实现及原理_如何实现一个优雅的jsBridge
  9. tf initializer
  10. 化工原理 蒸馏(上)