背景
- 处理器是冯诺依曼体系结构的核心,而存储器则是另一个重要部件。下边主要讲述存储器的发展趋势、程序的局部性原理、缓存思想在程序中的应用
存储器技术及其发展趋势
- 从程序员角度,存储器是一片连续区域,从0地址开始,基本不考虑是否有用完的情况。如创建对象(* p=new A)时会在内存中分配空间,若内存耗尽,会生成空指针p,但此时不会报错,只有对p进行操作时才报错。这说明尽管内存存在上限,但使用时基本不考虑
- 上边对内存的处理称为鸵鸟算法,即遇到危险把头埋在地下,装作什么也看不到。在计算机遇到内存耗尽等罕见的错误时,不会考虑这个问题,而是直接让程序崩溃,奔溃就奔溃了
- 但是操作系统不行,如崩溃,则运行于其上的所有程序都会崩溃了。因此操作系统要考虑内存用尽的情况
操作系统如何保证进程使用的内存空间不发生冲突?
- program程序是一个静态概念,指以文件方式存储的二进制指令流;而process进程是动态的,就是一个正在运行的程序的实例(程序类似类,进程类似对象)。现代操作系统均为多进程系统,可以同时运行多个程序,若每个程序都可以访问内存,操作系统如何保证进程使用的内存空间不发生冲突的呢?为了解决这一问题,我们将每个进程分配一个私有空间,这就提供了一种假象,好像每个进程都在独占整个内部,这种机制叫做虚拟内存。
做内存访问时,内存和CPU间如何交互的?
- 主存就是内存
- 桥芯片:在冯诺依曼体系结构中,存储器和外部设备的工作速率是不同的。储存器比较快,而键盘、打印机、鼠标则比较慢,如果挂在一条桥上,通讯速率由慢的决定,快的也快不了。因此我们使用桥芯片,将CPU中出来的系统总线做分流,一条为高速总线,连接主存、最新的显卡、高速网络(千兆级以太网、USB3.0协议的设备),一条低速总线,连接键盘、usb2.0协议以下的设备,保证系统在较高效率下工作
CPU与内存交互实例
- 处理器首先通过系统总线把地址发送给主存,系统总线包括三部分:地址总线(送到哪)、数据总线(哪些信息)、控制总线(传递方向,由CPU传向内存)。如在mov指令中,CPU发送控制信号,即读信号到主存中,描述数据流动方向。值得一提的是,读写以CPU作为第一人称。如读信号表示CPU读取数据,数据流入CPU
- 然后主存将数据从A地址读出,送到数据总线上,发送给eax寄存器,完成读的过程
主存的内部实现(更为底层)
- 主存本质上叫做RAM随机访问存储器,即在访问时,地址可以任意变化。相对随机访问的是连续访问,即只能从指定地址开始连续访问,一个个往下读。
- RAM的早期存储器的基本存储单元分为静态SRAM和动态DRAM,一个基本单元只能存储1比特数据
SRAM静态存储器
- SRAM的一个存储单元中,至少需要4~6个晶体管构成。如上图含有两个独立静态管和一个电路模块(一个电路模块由两个晶体管构成),构成双稳态电路。
- 稳态电路是相对于瞬态电路而言的,开关刚闭合时是瞬态,之后进入稳定状态,称为稳态。双稳态电路则有两种稳定状态。一种稳定状态存储逻辑0,另一种存储逻辑1,利用这种机制存储0和1
- 在SRAM中,字线决定是否访问电路,位线负责写入数据。SRAM储存数据非常稳定,由半导体储存,抗干扰(电磁干扰,宇宙射线干扰)能力强。即SRAM可靠性高,工作速率快,但成本高。因为宇宙射线会对存储发生干扰,发生位翻转(0->1),因此空间计算机(在火箭、飞船中使用的计算机)非常考虑存储的可靠性,常用SRAM存储
DRAM动态储存器
- DRAM存储单元的实现比SRAM简单得多,用一个电容加一个晶体管即可实现。晶体管看做受控制开关,当电容两极板间电压差大于某个值时为1,否则为0。由于电容充放电需要时间,因此工作速度很慢。而且可能因漏电而使电压下降,进而使数据被破坏,因此要在降低到某个值前充电。DRAM可靠性差,速率慢,但是实现单元简单,成本低,用于民用
DRAM的发展历程
- DRAM自1966年提出后,在1970年由Intel公司实现并且商业化,之后此结构就从未发生过改变。而现在存储器越做越快,主要是由于半导体工艺的不断提高,而并非存储器结构进步。
- 但是现在半导体工艺几乎已经到达峰顶,例如中兴国际当前最多加工14nm的芯片,美国的台电机能做到7nm,并正在做4nm的。半导体越好,工作效率越快。
- 当下这种由于工艺带来的性能的提升,而不需设计者考虑问题的红利不会吃太久了,未来摩尔定律也会走到尽头
新的DRAM实现方式
- 同步DRAM:每个上升沿传输一个数据。双倍数据速率的同步DRAM:一般DRAM只能在上升沿或者下降沿发送数据,而双倍DRAM都可以发送数据,即一个时钟周期能发送2个数据,称为DDR
非易失存储器
- RAM存储器均为易失型存储器,掉电时会失去存储的数据。而另外一种存储器非易失存储器,即使掉电数据也不会丢失。光驱、磁盘、DVD都是非易失存储器,成本低,容量很大,但是速度太慢
非易失存储器 | 介绍 |
---|---|
ROM | 内部存储的数据只能被CPU读取,不能修改。即在设计芯片时数据就已经生成,用户无法修改 |
PROM | 可编程ROM,生产时相当于生产了一张白纸,只能进行一次编写,之后就不能修改了 |
EPROM | 可擦除ROM,可以改,但是擦除条件比较苛刻:紫外光、UV、X-RAY |
EEPROM | 可以用电信号擦除,这样计算机就可较为简单的更新数据,主要用于存储计算机的自显程序,在主板上(超市里计算机展示时的程序就是自显程序) |
flash | 可读写储存器,是当下主流产品,又称为闪存,固态硬盘内部就是以flash为基本单元 |
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。