计算机原理学习(2)-- 存储器和I/O设备和总线

前言

 

前一篇文章介绍了冯诺依曼体系结构的计算机的基本工做原理,其中主要介绍了CPU的结构和工做原理。这一篇主要来介绍存储区,总线,以及IO设备等其余几大组件,来了解整个计算机是如何工做的。 这些东西都是看得见摸得着的硬件,平时咱们买电脑时最关注的就是CPU的速度,内存的大小,主板芯片等等的参数。html

 

1. 存储器

 

前面咱们以一个简单通用的计算机模型来介绍了CPU的工做方式,CPU执行指令,而存储器为CPU提供指令和数据。 在这个简单的模型中,存储器是一个线性的字节数组。CPU能够在一个常数的时间内访问每一个存储器的位置,虽然这个模型是有效的,可是并不能彻底反应现代计算机实际的工做方式。前端

 

1.1 存储器系统层次结构

在前面介绍中,咱们一直把存储器等同于了内存,可是实际上在现代计算机中,存储器系统是一个具备不一样容量,不一样访问速度的存储设备的层次结构。整个存储器系统中包括了寄存器、Cache、内部存储器、外部存储。下图展现了一个计算机存储系统的层次图。层次越高速度越快,可是价格越高,而层次越低,速度越慢,价格越低。程序员

相对于CPU来讲,存储器的速度是相对比较慢的。不管CPU如何发展,速度多块,对于计算机来讲CPU老是一个稀缺的资源,因此咱们应该最大程度的去利用CPU。其面咱们提到过CPU周期,一个CPU周期是取1条指令的最短的时间。因而可知,CPU周期在很大程度上决定了计算机的总体性能。你想一想若是当CPU去取一条指令须要2s,而执行一个指令只须要2ms,对于计算机来讲性能是多么大的损失。因此存储器的速度对于计算机的速度影响是很大的。编程

对于咱们来讲,老是但愿存储器的速度能和CPU同样或尽可能的块,这样一个CPU周期须要的时钟周期就越少。可是现实是,这样的计算机可能至关的昂贵。因此在计算机的存储系统中,采用了一种分层的结构。速度越快的存储器容量越小,这样就能作到在性能和价格之间的一个很好的平衡。数组

 

1.2 存储技术

计算机的发展离不开存储器的发展,早起的计算机没用硬盘,只有几千字节的RAM可用。而咱们如今4G,8G的内存已经随处可见,1T的大硬盘以及上百G的固态硬盘,而价格也比10年,20年前便宜的不少不少。因此我先大概了解下各类存储技术。目前存储技术大体分为SRAM存储器、DRAM存储器、ROM存储器和磁盘。浏览器

 

1.2.1 寄存器

在上一篇文章的图中咱们有看得CPU内部有不少寄存器,而上一张图也显示,寄存器在存储层次结构的顶端。它也叫触发器,它每每和CPU同时钟频率,因此速度很是快。可是一个寄存器须要20多个晶体管,因此若是大量使用,CPU的体积会很是大。因此在CPU中只有少许的寄存器。而每一个寄存器的大小都是8-64字节。缓存

 

1.2.2 RAM随机访问存储

RAM(Read-Access Memory)分为两类,静态(SRAM)和动态(DRAM)。SDRAM比DRAM要快的多,可是价格也要贵的多。网络

  • 静态RAM: SRAM将每一个位存储在一个双稳态的存储单元中,每一个存储单元是用一个六晶体管电路实现的。它的特色是能够无限期(只要有电)的保持在两个稳定状态中的一个(正好能够存放0或1),而其余任何状态都是不稳定的会立刻切换到这两个状态中的一个。
  • 动态RAM: DRAM是利用电容内储存电荷的多寡来表明一个二进制位元(bit)是1仍是0,每一bit由一个晶体管和电容组成。因为在现实中电容会有漏电的现象,致使电位差不足而使记忆消失,所以除非电容常常周期性地充电,不然没法确保记忆长存。因为这种须要定时刷新的特性,所以被称为“动态”记忆体。

SRAM相比DRAM速度更快功耗更低,而因为结构相对复杂占用面积较大,因此通常少许在CPU内部用做Cache,而不适合大规模的集成使用,如内存。而DRAM主要用来做为计算机的内部主存。架构

  • Cache: 目前咱们CPU中通常集成了2到3级的Cache,容量从128K到4M。对于CPU总的Cache来讲,它们的也是和CPU同频率的,因此理论上执行速度和寄存器应该是相同的,可是Cache每每用来存储一些指令和数据,这样就存在一个命中的问题。当没有命中的时候,须要向下一集的存储器获取新的数据,这时Cache会被lock,因此致使实际的执行速度要比寄存器慢。一样对于L1,L2,L3来讲,速度也是愈来愈慢的。
  • 主存: 也就是咱们说的内存,使用DRAM来实现。可是咱们目前听的内存通常叫DDR SDRAM,还有早期的SDRAM。这是一种同步的DRAM技术,咱们不须要了解他的详情,只须要知道它能有效的提升DRAM的传输带宽。而DDR表示双倍的速率,而如今又有了DDR2,DDR3,DDR4,他们的带宽也是愈来愈大。

 

1.2.3 ROM只读存储

前面的RAM在断电后都会丢失数据,因此他们是易失的。另外一方面非易失的存储器即使在断点后也能保存数据。通常咱们称之为ROM(Read-Only Memory)。虽然这么说,可是ROM在特殊的状况下仍是能够写入数据的,不然就不能叫存储器了。异步

  • PROM: 可编程ROM,只能被编程一次,PROM包含一种熔丝,每一个存储单元只能用高电流烧断一次。
  • EPROM:可擦写可编程ROM,有一个透明的石英窗口,紫外线经过窗口照射到存储单元就被清除为0,而对它编程是使用一种特殊的设备来写入1。写入次数1K次。
  • EEPROM:: 电子可擦除可编程ROM,不须要特殊设备而能够直接在印制的电路板上编程。写入次数10万次。
  • Flash Memory: 这是咱们见到最多的闪存,有NOR Flash、NAND Flash、V-NAND Flash、SLC、MLC、TLC。虽然是基于EEPROM,可是速度上却要快不少。其中NOR 、NANA Flash大量的使用在U盘,SD卡、手机存储上。

ROM在计算机中应用也比较多,好比咱们的BIOS芯片,最开始采用PROM,后来使用EPROM,若是损坏计算机就没法启动了。而目前手机中也采用ROM来烧入系统,而RAM做为内存,使用Flash Memory做为机身存储。

 

1.2.4 磁盘存储

也就是咱们最多见的硬盘。目前硬盘主流已是500G,1T。转速也在7200转左右。相对于8G的内存,一个500G的硬盘能够说是至关的便宜。可是问题在于他的速度很是的慢,从磁盘读取数据须要几个毫秒,而CPU时钟周期是以纳秒计算。磁盘读取操做要比DRAM慢10万倍,比SRAM慢百万倍。

相对于CPU,内部存储的电子结构,磁盘存储是一种机械结构。数据都经过电磁流来改变极性的方式被电磁流写到磁盘上,而经过相反的方式读回。一个硬盘由多个盘片组成,每一个盘片被划分为磁道,扇区和最小的单位簇。而每一个盘面都有一个磁头用来读取和写入数据。而硬盘的马达装置则控制了磁头的运动。

 

1.2.5 虚拟硬盘(VHD)和固态硬盘(SSD)

随着计算机的发展,缓慢的磁盘速度已经成为计算机速度的障碍了。大多数状况下,你的CPU够快,内存够大,但是打开一个程序或游戏时,加载的速度总仍是很慢。(关于程序加载的过程后面的文章会讲到)。缘由就是磁盘读写速度太慢,因此一度出现了虚拟硬盘。就是把一部份内存虚拟成硬盘,这样一些缓存文件直接放到内存中,这样就加快了程序访问这些数据的速度。可是他的问题是易失的。固然你能够保存到磁盘,可是加载和回写的速度会随着数据量加大而加大。因此这个适用于一些临时数据的状况,好比浏览器缓存文件。

而固态硬盘是最近几年出来的,并且随着技术的发展,价格也愈来愈便宜,愈来愈多的人采用SSD+HHD的方式来搭建系统,提升系统的速度。其实SSD在上世纪80年代就有基于DRAM的产品,可是由于易失性和价格而没法推广开来。而如今的SSD则是使用Flash Memory。目前市面上最多见的是SLC,MLC,TLC存储介质的固态硬盘。咱们知道Flash都是与写入次数限制的。而SLC>MLC>TLC。目前主流的SSD都是使用MLC,好比Intel 520,三星830系列。固然目前三星也退出了基于TLC的固态硬盘,价格相对要便宜一些。

 

1.2.6 远程存储

简单能够理解为是将数据指令存储在其余机器上,好比分布式系统,WebService Server,HTTP Server以及如今炒的火热的云端存储。计算机经过网络相互链接。比较起磁盘,远程存储的速度是以秒来计算。

 

1.3 局部性

经过上面介绍咱们对计算机存储器有了一个了解,而且知道了存储器层次越高速度越快。那么为何咱们要对存储器分层呢? 分红是为了弥补CPU和存储器直接速度的差距。这种方式之全部有效,是由于应用程序的一个特性:局部性。

咱们知道计算机的体系是存储程序,顺序执行。因此在执行一个程序的指令时,它后面的指令有很大的可能在下一个指令周期被执行。而一个存储区被访问后,也可能在接下来的操做中再次被访问。这就是局部性的两种形式:

  • 时间局部性
  • 空间局部性

对于现代计算机来讲,不管是应用程序,操做系统,硬件的各个层次咱们都是用了局部性。

  1. 硬件:经过引入Cache存储器来保存最近访问的指令数据来提升对主存的访问速度。
  2. 操做系统: 容许是用主存做为虚拟地址空间被引用块的高速缓存以及从盘文件的块的高速缓存。
  3. 应用程序:将一些远程服务好比HTTP Server的HTML页面缓存在本度的磁盘中。

CODE1:

int sumarraycols(int a[m][n])
{
  int i, j , sum = 0;
  for(j = 0; j < n; j++)
    for(i = 0; i < m; i++)
      sum += a[i][j];
    return sum;
}

CODE2:

int sumarraycols(int a[m][n])
{
  int i, j , sum = 0;
  for(i = 0; i < m; i++)
    for(j = 0; j < n; j++)
      sum += a[i][j];
    return sum;
}

以上2段代码差异只有for循环的顺序,可是局部性却相差了不少。咱们知道数组在内存中是按照行的顺序来存储的。可是CODE1确实按列去访问,这可能就致使缓存不命中(须要的数据并不在Cache中,由于Cache存储的是连续的内存数据,而CODE1访问的是不联系的),也就下降了程序运行的速度。

 

2 存储器访问和总线

 

前面介绍了存储器的存储技术和分层,也一直提到CPU从存储器中获取数据和指令,这一节就介绍一下CPU和存储器之间是如何通讯的。

 

2.1 总线

所谓总线是各类功能部件之间传送信息的公共通讯干线,它是由导线组成的传输线束。咱们知道计算机有运算器,控制器,存储器,输入输出设备这五大组件,因此总线就是用来链接这些组件的导线。

按照计算机所传输的信息种类,计算机的总线能够划分为

  • 数据总线: 数据总线DB是双向三态形式的总线,即它既能够把CPU的数据传送到存储器或输入输出接口等其它部件,也能够将其它部件的数据传送到CPU。数据总线的位数是微型计算机的一个重要指标,一般与微处理的字长相一致。咱们说的32位,64位计算机指的就是数据总线。
  • 地址总线: 地址总线AB是专门用来传送地址的,因为地址只能从CPU传向外部存储器或I/O端口,因此地址总线老是单向三态的,这与数据总线不一样。地址总线的位数决定了CPU可直接寻址的内存空间大小。
  • 控制总线:控制总线主要用来传送控制信号和时序信号。控制总线的传送方向由具体控制信号而定,通常是双向的,控制总线的位数要根据系统的实际控制须要而定。其实数据总线和控制总线能够共用。

总线也能够按照CPU内外来分类:

  • 内部总线:在CPU内部,寄存器之间和算术逻辑部件ALU与控制部件之间传输数据所用的总线称为片内部总线。
  • 外部总线:一般所说的总线指片外部总线,是CPU与内存RAM、ROM和输入/输出设备接口之间进行通信的通路,也称系统总线。

 

2.2 控制芯片

前面我面介绍了总线的分类,在咱们的简单模型中。CPU经过总线和存储器之间直接进行通讯。实际上在现代的计算机中,存在一个控制芯片的模块。CPU须要和存储器,I/O设备等进行交互,会有多种不一样功能的控制芯片,咱们称之为控制芯片组(Chipset)。

对于目前的计算机结构来讲,控制芯片集成在主板上,典型的有南北桥结构和单芯片结构。与芯片相链接的总线能够分为前端总线(FSB)、存储总线、IQ总线,扩展总线等。

  • 南北桥芯片结构:
    • 北桥芯片,它控制着CPU的类型,主板的总线频率,内存控制器,显示核心等。它直接与CPU、内存、显卡、南桥相连,因此它数据量很是大。
      • 前端总线:是将CPU链接到北桥芯片的总线。FSB的频率是指CPU和北桥之间的数据交换速度。速度越快,数据带宽越高,计算机性能越好。
      • 内存总线:是将内存链接到北桥芯片的总线。用于和北桥之间的通讯。
      • 显卡总线:是将显卡链接到北桥芯片的总新。目前有AGP,PCI-E等接口。其实并无显卡总线一说,通常认为属于I/O总线。
    • 南桥芯片,它主要负责外部接口和内部CPU的联系
      • I/O总线:链接外部I/O设备链接到南桥的总线, 好比USB设备,ATA,SATA设备,以及一些扩展接口。
      • 扩展总线:主要是主板上提供的一些PCI,ISA等插槽。
  • 单芯片结构: 单芯片组主要是是取消了北桥,由于如今CPU中内置了内存控制器,不须要再经过北桥来控制,这样就能提升内存控制器的频率,减小延迟。而如今一些CPU还集成了显示单元。也使得显示芯片的频率更高,延迟更低。

2.3 运行频率

 

数据带宽 = (总线频率*数据位宽)/ 8

 

2.3.1 外频

外频是创建在数字脉冲信号震动速度基础上的。它是CPU与系统总线以及其余外部设备共同运行的速度。咱们知道计算机中有一个时序发生器来保证各个部件协同工做,而这里说的外频率就是这个时序发生器的频率。外频也是系统总线的工做频率。

 

2.3.2 频率和控制芯片

  • 在计算机刚开始的时候,CPU和内存还有I/O设置是直接经过总线链接的而没有控制芯片。全部设备都同步的工做在同一个总线频率下。
  • 可是随着CPU的发展,CPU速度愈来愈块。但受限于I/O设备。因而就出现了芯片。他使得I/O总线不在直接和CPU的系统总线相连。这样就有了2个不一样频率的总线,这个芯片实际起到了一个降频的做用,也就相对于系统总线的分频技术。
  • 但CPU速度发展至关快,CPU的速度已经高于内存运行的速度,因而引入了倍频的概念。CPU在不改变外频和系统总线频率的状况下运行在更高的频率。
  • 发展到后来,就出现了北桥芯片,而CPU和北桥以前的总线称为了FSB总线,而内存与北桥以前称为内存总线。

 

2.3.2 分频和倍频

  • 分频:使得I/O设备能够和较高的外频协同工做。好比AGP,PCI总线,运行频率在66MHZ和33MHZ,因此对于一个100MHZ的外频来讲,采用2/3或1/3分频的方式就能使得CPU和外设同步的工做了。不然设备可能没法正常工做。
  • 倍频: 为了提升CPU频率又正常的和内存进行工做,因此产生了倍频。因此对于CPU来讲他实际的频率是外频*倍频。

 

2.3.3 FSB频率

前面咱们如今已经知道CPU和北桥芯片链接是经过FSB。而FSB频率表示CPU和北桥芯片之间的工做速度。可是从前面咱们就知道FSB的实际频率是和外频同样的。可是随着技术的发展,Intel的QDR技术和AMD的HT技术,使得CPU在一个时钟周期能够传送4次数据,因此对于FSB涞说虽然工做早外频的频率下,可是等效的频率是外频的4倍。因此咱们说的FSB频率是等效频率,而不是实际的工做频率。随着技术的发展,Intel芯片的FSB有800MHz,1600HMz等等。但随着北桥芯片的消失,FSB的几率也慢慢远去。

 

2.3.4 内存频率

对于内存频率咱们能够看到,通常包括了核心频率,总线频率和传输频率:

  • 核心频率和外频相似,是创建在脉冲震荡信号上的。
  • 总线频率就是指内存总线的工做频率。也就是内存和北桥芯片之间的工做频率。
  • 而传输频率相似FSB,是指实际传输数据的频率。

对于SDR来讲,它的3个频率是一致的。而DDR在一个时钟周期能够传送2次数据,因此它的传输频率是核心和总线频率的2倍。DDR2在DDR的基础上,采用了4bit预读,因此总线频率是核心频率的2倍,而DDR3采用了8bit预读,总线频率是核心频率的4倍。

 

DDR SDRAM
Standard
Bus clock
(MHz)
Internal rate
(MHz)
Prefetch
(min burst)
Transfer Rate
(MT/s)
Voltage DIMM
pins
SO-DIMM
pins
MicroDIMM
pins
DDR 100–200 100–200 2n 200–400 2.5/2.6 184 200 172
DDR2 200–533 100–266 4n 400–1066 1.8 240 200 214
DDR3 400–1066 100–266 8n 800–2133 1.5 240 204 214

 

从下表咱们就能看出。因此咱们常说的DDR3 1600,DDR2 800指的是内存的传输频率。相同的技术还有显卡的AGP4X,8X,PCIE-8X,16X等技术。

而随着FSB速度不断加快,内存的总线频率组建成为了瓶颈,因而出现了DDR双通道,双通道是指芯片拥有2个内存控制器,因此可使得传输速率翻倍。

 

2.3.5 内存总线工做方式

由于内存总线频率不一样,因此内存和CPU之间存在同步和异步两种工做方式。

  • 同步方式:内存总线频率和CPU外频相同。好比之前的PC133和P3处理器,他们以同步的方式工做在133MHZ下。而当你超频时就须要拥有更高总线频率的内存。固然也须要北桥芯片的支持。
  • 异步方式:内存总线频率和CPU外频不一样。睡着CPU外频的提升,内存也必须更新,因此出现了异步的方式。好比P4 CPU外频为200MHz,而内存却可使用DDR333来运行。同时异步方式也在超频时常用。通常来讲会有一个内存异步比率。在BIOS中会有相应的选项。

从性能上来说,同步方式的延迟要好于异步方式,这也是为何之前会说P4 200外频的CPU要使用DDR400才能发挥最大功效。但这也不是绝对的。好比个人I5处理器CPU外频工做在100MHz,而我使用的DDR3-1600的总线频率在200MHz,虽然不一样步,可是拥有更高的传输速率。因此不能一律而论。

 

2.3.6 QPI和HT总线技术

从前面咱们知道了FSB对整个系统的性能影响很大,1600MHZ的FSB能提供的数据带宽也只有12.8GB/s,因此随着技术的发展,如今最新的计算机基本都采用了单芯片设计,北桥的功能被集成到了CPU内部。因而咱们前面说的FSB也就不存在了。对于Intel和AMD这2大芯片厂商,分别有本身的技术来提升CPU和存储器以及其余设备之间的传输速率,知足更高的计算要求。

  • QPI: Intel的QuickPath Interconnect技术缩写为QPI,译为快速通道互联。用来实现芯片之间的直接互联,而不是在经过FSB链接到北桥。早期20位宽的QPI链接其带宽可达惊人的每秒25.6GB,远非FSB可比。而随着技术发展,在高端安腾处理中峰值能够达到96GB/s。
  • HT:HyperTransport本质是一种为主板上的集成电路互连而设计的端到端总线技术,目的是加快芯片间的数据传输速度。HyperTransport技术在AMD平台上使用后,是指AMD CPU到主板芯片之间的链接总线(若是主板芯片组是南北桥架构,则指CPU到北桥)即HT总线。HT3.1理论上能够达到51.2GB/s。

除此以外,但芯片中的QPI和HT传输不须要通过北桥新片,在CPU内存除了集成内存控制器意外还能够集成PCI-E2.0的图形核心,使得集成显卡的核心频率和数据吞吐量大幅提升。

 

如图,Core I7处理器外频只有133MHz, 使用QPI技术后总线频率达到2.4GMhz,而使用DDR3-1600的内存,内存总线频率在800MHz。

 

2.3.7 小结

这一结介绍了计算机总线系统以及CPU和各个设备之间的交互。咱们能够看到除了CPU自身的速度以外,总线的速度也影响这计算机的总体性能。从发展的过程来看,总线也是一个分分合合的过程。从最初的一条总线,到后来的单独出来的I/O总线,内存总线,就是为了提升CPU的效率。而当CPU和内存速度都发展到必定阶段后,又出现了DDR,双通道等技术,在不提升核心频率的状况下提升了传输率。因而又出现了CPU和内存间直接总线通讯下降延迟的状况。 (从2000年开始接触电脑DIY,一直到07年毕业,都对DIY颇有兴趣,可是随着电脑愈来愈快,目前以及弄不太清楚了,复习这些知识也费了我好多时间。)

 

 

3. I/O设备

 

 前面主要介绍了系统总线和CPU与内存之间的通讯,最后一部分简单介绍一下CPU和I/O设备是如何通讯的。对于计算机来讲输入输出设备也是五大组件。咱们知道相对于CPU,I/O设备的工做频率要慢的不少。好比早期的PCI接口工做频率只有33MHz,硬盘的IDE-ATA6的传输速率也只有133MB/s。而如今的 SATA3接口速率能达到600MB/s。

 

3.1 I/O设备原理

对于硬件工程师来讲,I/O设备是电子芯片、导线、电源、电子控制设备、电机等组成的物理设备。而对于程序员来讲,关注的只是I/O设备的编程接口。

 

3.1.1 I/O设备分类

  • 块设备: 块设备把信息存放在固定大小的块中,每一个块都有本身的地址,独立于其余块,可寻址。例如磁盘,USB闪存,CD-ROM等。
  • 符号设备:字符设备以字符为单位接收或发送一个字符流,字符设备不能够寻址。列入打印机、网卡、鼠标键盘等。

3.1.2 设备控制器

I/O设备通常由机械部件和电子部件两部分组成。电子设备通常称为设备控制器,在计算机上通常以芯片的形式出现,好比咱们前面介绍的南桥芯片。不一样的控制器能够控制不一样的设备。因此南桥芯片中包含了多种设备的控制器,好比硬盘控制器,USB控制器,网卡、声卡控制器等等。而经过总线以及卡槽提供和设备自己的链接。好比PCI,PCI-E,SATA,USB等。

 

3.1.3 驱动程序

对于不一样的设备控制器,进行的操做控制也是不一样的。因此须要专门的软件对他进行控制。这个软件的做用就是用来专门和设别控制器对话,这种软件称为驱动程序。通常来讲驱动程序由硬件设别厂商提供。因此咱们有时会碰到一些设备由于没有安装驱动程序而没法使用的状况。 而目前的OS总都包含了大量的通用驱动程序,使得咱们在安装完系统后不须要在额外的安装驱动。可是通用的驱动只能使用设备的基本功能。

驱动程序由于是非操做系统厂商开发,而且须要被安装到操做系统并调用,因此须要有一个统一的模型来开发驱动程序。不然操做系统是没法操做各式各样的设备的。前面咱们知道设备非为两大类,因此通常操做系统都定义了这两类设备的标准接口。

 

3.1.4 内存映射I/O

每一个控制器都有几个寄存器和CPU进行通讯。经过写入这些寄存器,能够命令设备发送或接受数据,开启或关闭。而经过读这些寄存器就能知道设备的状态。由于寄存器数量和大小是有限的,因此设备通常会有一个RAM的缓冲区,来存放一些数据。好比硬盘的读写缓存,显卡的显存等。一方面提供数据存放,一方面也是提升I/O操做的速度。

如今的问题是CPU如何和这些设备的寄存器或数据缓冲区进行通讯呢?存在两个可选方案:

  1. 为每一个控制器分配一个I/O端口号,全部的控制器能够造成一个I/O端口空间。存放在内存中。通常程序不能访问,而OS经过特殊的指令和端口号来从设备读取或是写入数据。早期计算机基本都是这种方式。
  2. 将全部控制器的寄存器映射到内存空间,因而每一个设备的寄存器都有一个惟一的地址。这种称为内存映射I/O。

另外一种方式是两种的结合,寄存器拥有I/O端口,而数据缓冲区则映射到内存空间。Pentinum就是使用这种方式,因此在IBM-PC兼容机中,内存的0-640K是I/O端口地址,640K-1M的地址是保留给设备数据缓冲区的。(关于内存分布后面文章会介绍)

 

对于咱们程序员来讲这两种方案有所不一样

  1. 对于第一种方式须要使用汇编语言来操做,而第2种方式则可使用C语言来编程,由于他不须要特殊的指令控制,对待I/O设备和其余普通数据访问方式是相同的。
  2. 对于I/O映射方式,不须要特殊的保护机制来组织对I/O的访问,由于OS已经完成了这部分工做,不会把这一段内存地址分配给其余程序。
  3. 对于内存可用的指令,也能使用在设备的寄存器上。

任何技术有有点就会有缺点,I/O内存映射也同样:

  1. 前面提到过Cache能够对内存进行缓存,可是若是对I/O映射的地址空间进行缓存就会有问题。因此必须有机制来禁用I/O映射空间缓存,这就增大了OS的复杂性。
  2. 另外一个问题是,由于发送指令后须要判断是内存仍是I/O操做,因此它们须要可以检查所有的内存空间。之前CPU,内存和I/O设备在同一个总线上,因此检查很方便。可是后来为了提升CPU和内存效率,CPU和内存之间有一条高速的总线(好比QPI)。这样I/O设备就没法查看内存地址,由于内存地址总线旁落到了内存和CPU的高速总线上,因此须要一个额外的芯片来处理(北桥芯片,内存控制器的做用),增大了系统的复杂度。

 

3.2 CPU和I/O设备数据交换方式

前面已经知道CPU经过内存映射的方式和I/O设备交换数据,可是对于CPU来讲,不管是从内存仍是I/O设备读取数据,都须要把地址放到地址总线上,而后在向控制总线传递一个READ信号,还要用一条信号线来表示是从内存仍是I/O读取数据。由于I/O映射的内存区域是特定的,因此不存在没法区分是内存仍是I/O操做。目前一共有3种方式进行操做:

  1. 程序控制I/O: CPU在向I/O设备发出指令后,经过程序查询方式检查I/O设备是否完成工做,若是完成就读取数据,这种方式缺点是CPU在I/O设备工做时被占用。
  2. 中断驱动I/O: CPU是稀缺资源,因此为了提升利用率,减小I/O等待。在I/O设备工做时CPU再也不等待,而是进行其余的操做,当I/O设备完成后,经过一个硬件中断信号通知CPU。CPU在来处理接下来的工做,好比读取数据存放到内存。可是每次只能请求一个字节,效率很低。
  3. DMA: Direct Memory Access利用一种特性的芯片存在于CPU和I/O设备之间。CPU须要操做I/O设备时只须要发送消息给DMA芯片,后面的事情所有内又DMA来完成,当把所须要数据放入内存后在通知CPU进行操做,整个过程DMA直接和内存总线打交道,而CPU也只须要和DMA芯片和内存交互,大大提升了速度。

 

总结

 

这一篇文章介绍了计算机组件中的存储器的分类和工做原理,以及I/O设别的工做方式。经过总线将各个部件链接起来。咱们能够看到计算机的发展不光是CPU,存储器以及I/O设备的发展,总线也是起了很是关键的做用。经过前2章的介绍,应该对计算机硬件的工做原理有了大概的了解。后面开始将主要偏向计算机操做系统软件的工做方式。固然这些也是和一些硬件的特性分不开的。

 

 

 

参考

《深刻理解计算机系统》

 

《现代操做系统(原书第3版)》

 

动态随机存取存储器

 

动态随机存取存储器:

 

寄存器的速度为什么比内存更快?

 

PC架构系列:CPU/RAM/IO总线的发展历史!

 

内存核心频率、工做频率、预读技术详解

相关文章
相关标签/搜索