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

Posted haiross

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机原理学习-- 存储器和I/O设备和总线相关的知识,希望对你有一定的参考价值。

前言

 


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



 

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:

[cpp]  view plain  copy

以上是关于计算机原理学习-- 存储器和I/O设备和总线的主要内容,如果未能解决你的问题,请参考以下文章

计算机组成原理

计算机硬件和基本的原理

管道及I/O重定向

2016-2-4 linux 基础学习10

SCSI 总线和协议

linux驱动---用I/O命令访问PCI总线设备配置空间