组成计算机的三大件:CPU,内存和IO。

1 总线

总线就是一条或者多条物理上的导线,每个部件都接到这些导线上,同一时刻只能有一个部件在接收或者发送。

仲裁总线:所有部件按照另一条总线,也就是仲裁总线或者中断总线上给出的信号来判断这个时刻总线可以由哪个部件来使用。产生仲裁总线或者中断电位的可以是CPU,也可以是总线上的其他设备。

如上图所示,主板上的每个部件都是通过总线连接起来的。

PCI总线:目前台式机与服务器所普遍使用的一种南桥与外设连接的总线技术。

北桥芯片:IO总线和以太网HUB模型的区别在于多了一个北桥芯片。因为CPU和内存足够快,他们之间单独用一个总线连接,这个总线和慢速IO总线之间通过一个桥接芯片连接,也就是主板上的北桥芯片。这个芯片连接了CPU、内存和IO总线。

前端总线:CPU与北桥连接的总线叫做系统总线,也叫作前端总线。

内存总线:内存与北桥连接的总线叫做内存总线。

由于北桥速度太快,而IO总线速度相对北桥显得太慢,所以北桥和IO总线之间,往往要增加一个网桥,叫做南桥,在南桥上一般集成了众多外设的控制器,比如磁盘控制器、USD控制器等。

总线位数:系统总线的条数,比如64条或者128条,叫做总线的位数。

CPU位数:寄存器和运算单元之间总线的条数。

IO总线分成数据总线、地址总线和控制总线。寻址用地址总线,发数据用数据总线,发中断信号用控制总线。IO总线是并行而不是串行的。

2 CPU、内存和磁盘之间通过网络来通信

因为主板上的总线很短、很稳定,所以CPU和存储设备之间组成的一个“网络”不需要运输层,而只需要物理层、网络层和上三层的网络。

设备映射:每个IO设备在启动时都要向内存中映射一个或者多个地址,这个地址有8位长,又被称做IO端口。针对这个地址的数据,统统被被北桥芯片重定向到总线上实际的设备上。

CPU在对磁盘发送指令的时候,这些指令其实是发给了主板南桥上集成的控制器,比如ATA控制器或者SCSI控制器。让磁盘读取或者写入某个磁道、某个扇区等,CPU不需要知道这些,CPU只需要知道逻辑块地址是读还是写就可以了,让CPU产生这些信息的是磁盘控制器驱动程序。

 

3 小结

CPU、内存和磁盘之间组成的网络可以用下面图抽象:

 

参考资料

《大话存储2-存储系统架构与底层原理极限剖析》 

大话存储 1 - 走进计算机IO世界的更多相关文章

  1. 走进JavaWeb技术世界3:JDBC的进化与连接池技术

    走进JavaWeb技术世界3:JDBC的进化与连接池技术 转载公众号[码农翻身] 网络访问 随着 Oracle, Sybase, SQL Server ,DB2,  Mysql 等人陆陆续续住进数据库 ...

  2. 走进缓存的世界(三) - Memcache

    系列文章 走进缓存的世界(一) - 开篇 走进缓存的世界(二) - 缓存设计 走进缓存的世界(三) - Memcache 简介 Memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用 ...

  3. 走进JavaWeb技术世界14:Mybatis入门

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  4. [C#] 走进 LINQ 的世界

    走进 LINQ 的世界 序 在此之前曾发表过三篇关于 LINQ 的随笔: 进阶:<LINQ 标准查询操作概述>(强烈推荐) 技巧:<Linq To Objects - 如何操作字符串 ...

  5. 小丁带你走进git的世界二-工作区暂存区分支

    小丁带你走进git的世界二-工作区暂存区分支 一.Git基本工作流程 1.初始化一个仓库 git  init git  clone git仓库分为两种情况: 第一种是在现有项目或目录下导入所有文件到 ...

  6. Atitti 大话存储读后感 attilax总结

    Atitti 大话存储读后感 attilax总结 1.1. 大话存储中心思想(主要讲了磁盘文件等存储)1 1.2. 最耐久的存储,莫过于石头了,要想几千万年的存储信息,使用石头是最好的方式了1 1.3 ...

  7. 带你走进rsync的世界

    导读 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录.rsync共有3种使用方 ...

  8. SQL SERVER大话存储结构(3)_数据行的行结构

            一行数据是如何来存储的呢?     变长列与定长列,NULL与NOT NULL,实际是如何整理存放到 8k的数据页上呢?     对表格进行增减列,修改长度,添加默认值等DDL SQL ...

  9. SQL SERVER大话存储结构(4)_复合索引与包含索引

              索引这块从存储结构来分,有2大类,聚集索引和非聚集索引,而非聚集索引在堆表或者在聚集索引表都会对其 键值有所影响,这块可以详细查看本系列第二篇文章:SQL SERVER大话存储结构 ...

随机推荐

  1. nodejs遇到的问题

    1.express-session deprecated undefined resave option; provide resave option app.js:49:9 express-sess ...

  2. 【译】如何更好的使用javascript数组

    赶紧阅读读此文,我保证,在过去的几个月里我,我确定我在数组问题上犯过4次错误.于是我写下这篇文章,阅读这篇文章可以让你更准确的使用javascript数组的一些方法 使用Array.includes替 ...

  3. @Html.Raw() 与Newtonsoft.Json.JsonConvert.SerializeObject()

    一.后台 ViewBag.TypeList = typeList; 二.前台C# @{     var typeListFirst = ViewBag.TypeList;} 三.前台js中 var t ...

  4. ubuntu下安装 Sublime Text 3 及 PlantUML 绘图插件

    ubuntu下只想做C++的程序代码编写,最开始选择了codeblock,主要目的是安装简单,集成度高,还可以调试,但是用的时候老是无故退出,改了半天的代码就这样丢失,挺苦恼的,可能跟自己装的系统比较 ...

  5. HDU1024(DP)

    Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  6. wagon-maven-plugin实现自动打包部署到服务器

    1.在maven中添加依赖 <!-- https://mvnrepository.com/artifact/org.codehaus.mojo/wagon-maven-plugin --> ...

  7. CSS画0.5px的线

    今天遇到一个需求,画0.5px的线,查了以下资料,主要以scale方法为主.代码如下: /*0.5px上边框*/ .half_top_border_before:before{ content: &q ...

  8. Dynamics CRM2016 如何删除Word/Excel Templates

    创建模板的方式有两种,一种是创建个人级别的模板,如下面这种创建一个excel的模板 一种是在设置-模板中创建,但这需要管理员权限,从下图中可以看出个人级的模板在设置中是看不到的 那就涉及到一个问题了, ...

  9. Django. No changes detected when "makemigrations"

    在修改了models.py后,有些用户会喜欢用python manage.py makemigrations生成对应的py代码. 但有时执行python manage.py makemigration ...

  10. npm 安装指定模块版本

    npm list  查看具体模块 如: npm list @antv/g6 如需要安装指定的模块和版本 保存时      - --save-dev 是你开发时候依赖的东西,--save 是你发布之后还 ...