局部性原理

  • 上篇讲了RAM易失型存储器,只能在有电情况下存储,掉电时数据消失。并引入了SRAM、DRAM,DRAM是计算机主存的主要技术,成本较低,只需要1个晶体管+一个电容;SRAM成本高,需要6个晶体管构成单元,速度快,性能好,应用在高速缓存和空间计算机上

一种非易失性存储器:磁盘

  • 磁盘包括多个盘片,每个盘片有两个面。每个面有多个同心圆,称为磁道,每个磁道又分为多个扇区。扇区是最基本的读入读出单位。
密度定义 内容
记录密度 同心圆周长方向上,单位长度能存储的容量
磁道密度 磁盘半径方向上,单位长度能存储的容量
面密度 每个同心圆单位面积能存储的容量,等于记录密度和磁道密度的积
  • 扇区是最基本的读入读出单位,每个扇区存储容量相同。如所有磁道等分扇区,必须以最内部同心圆为单位(最小的),这样外边的就会有浪费;若每个扇区分别记录其容量,又太麻烦。因此我们提出了记录区的概念,让周长相近的同心圆位于同一记录区,记录区内的扇区等分。这是存储容量和管理灵活度上的折中(trade-off)

磁盘中扇区如何访问

局部性原理_第1张图片

  • 在平面上,读写头不挨着磁盘,但是距离磁盘很近。读写头通过沿半径方向前后滑动,来访问不同磁道;
  • 在立体上,一个读写头在一个瓷面上。从这里也能看到柱面的概念:所有读写头连到一个读写臂上,故而所有磁头在一个柱面上
扇区访问过程:磁头位于起始位置上,磁头不动,盘旋转,等扇区划过磁头,数据就被读出来。扇区的访问分为三个过程
过程 介绍
寻道 磁头沿半径方向内外移动,寻找下个扇区所在磁道。在磁头移动的同时,扇区也在旋转。但是寻道完成后,一般扇区不会到达磁头位置
旋转 等待扇区起始位置旋转到磁头位置
读取 扇区划过磁头,完成读写
  • 因此,对于扇区访问需要寻道、旋转和读取三个时间,总时间为三个时间的平均值之和。(这三个值都是不确定的,因此我们取平均值)如寻道,磁头位置和读取的扇区位置可能在同一磁道,也可能位于圆心和圆边,取平均值为半个半径。旋转扇区可能在磁头11点方向,也可能在1点方向,取平均值半圈,位于六点钟方向。传输,由于记录区的存在,不同扇区的长度可能不同,故而划过扇区花费的时间不同,取平均时间
  • 寻道时间大约为3~9ms,比较慢(与之相比,处理器的时间是ns级);旋转时间大约为4ms,(现代计算机的磁盘转数一般7200r/min);传输大约为0.02ms,一个磁道平均有400个扇区故而一圈时间/400;平均总时间为13.02ms
  • 由上可见,整个扇区访问的大量时间在寻道、旋转上,故而访问扇区的第一个比特代价是最昂贵的(找到这个扇区时间开销最大)。因此理想情况是能让磁头连续读取相邻扇区,这样就只需找到第一个扇区要花费寻道和旋转的时间
  • 由上也能看出,内存的访问时间远快于硬盘。SRAM为4ns,DRAM为60ns,磁盘则是ms级

逻辑扇区号

  • 应用程序对磁盘读写时,根据扇区号进行访问。扇区号编号有两套,分别为物理扇区号和逻辑扇区号。物理扇区号可以描述出扇区在磁盘的绝对位置。而访问扇区却根据逻辑扇区号
为何访问扇区根据逻辑扇区号
  • 每个扇区有寿命,一段时间后会坏掉;而且无法保证每个扇区生产出来都是正常的。因此磁盘生产厂商只提供一部分扇区作为磁盘容量,会留一部分作为预留区。容量里可能有一部分开始就是坏的,或者后来的使用过程中坏了。此时我们使用预留区,将损坏的i扇区号映射到预留空间。这样,从物理角度看,i扇区坏了;但是从逻辑角度,i仍然可以使用。从而延长了磁盘寿命。

wear-leading:负载均衡

  • 对磁盘中某些频繁读写的热点,由于频繁读写,寿命会降低。而预留区是有限的,当预留区用完后,再有扇区损坏,就没法再正常工作(没有空闲区域替换)。但此时这个磁盘只有20%频繁使用的损坏,其余80%基本不用,仍然没坏。
  • 所以我们引入了负载均衡概念,向i写入数据时,不一定真的写入i或者对应的预留区。而是再进一步扩展,不是向i,而是向寿命最高的写入。这样在逻辑上对一个频繁写入,而实际上却是对多个物理扇区写入,将使用率平均化。
  • 负载均衡算法,确保写入时均衡分配到各个扇区上
dma协处理器
  • 桥分为低速和高速,磁盘就是低速设备。当CPU通知磁盘访问那个扇区,将此扇区内容传输到内存某个对应位置时。尽管CPU是冯诺依曼体系结构的核心,理论上所有操作都要经过CPU,但是磁盘数据到内存没有经过CPU。这是由于dma直接内存访问机制的存在,对于简单的数据搬运操作,不经过CPU而由dma协处理器完成,从而给CPU留出更多时间去做复杂运算。但是dma协处理器做数据搬运时会占据总线,因此此时如果涉及内存访问,CPU也会停下来(此时总线被dma占用)。因此CPU此时不是所有操作都能做,但是现代高速缓存的引入有效解决了这个问题

固态硬盘:SSD

局部性原理_第2张图片

  • 采用闪存技术实现,以flash为基本储存单位。在内部以块和叶为单位存储。一个块含有32~128页,一页大约是4~512KB。
  • 块是擦除的基本单位,页是读写的基本单位。因此若修改一个页,必须修改整个块,先将所有页复制,然后修改要修改的页,最后还原不需修改的页。故而SSD的读非常快,写却很慢。
  • SSD以半导体形式存储,寿命低于磁盘,大约读写一万次,因此也要考虑负载均衡
SSD和磁盘区别

SSD物理上更加坚固结实,不怕震荡;半导体构成,耗电少;但是读写寿命不如磁盘,价格也要更高

几种存储技术的发展趋势

| 类型 | 内容 |
| --- | --- |
| SRAM | 单位存储容量成本减为320分之一,访问时间提高200倍,容量64k到800mb,提升高|
| DRAM |单位容量成本130000分之一,访问时间(性能)提高9倍|
| 磁盘 | 成本下降160万倍,性能提高29倍 |

  • 随着计算机技术发展,存储成本下降,性能提高。但是CPU在同期性能提高了一万倍,处理器性能提升速度远远高于储存器提升速度,存储器和处理器速度差距越拉越大。所以导致现代计算机体系结构的重要问题,不是处理器能否快速处理指令,而是存储器不能及时提供指令和数据。存储瓶颈是现代计算机体系结构的最重要问题

局部性原理

  • 我们采用局部性原理来解决存储瓶颈问题:对于应用程序来讲,有这样一种趋势,程序总是趋向于访问最近已经使用过的指令或数据,或者附近的指令或数据。
  • 从两个纬度分析,时间局部性原理:这个指令或数据刚刚被用过,在不远的时间内可能被再次用到;空间局部性原理:刚刚访问的指令数据,其附近的指令数据在不远的时间内被访问到
例子

局部性原理_第3张图片

  • 在上边for循环中,数组访问这一操作具有空间局部性,对于数组数据而言则有空间局部性;对于sum数据的访问具有时间局部性,从指令角度,指令的顺序执行本身就有空间局部性
  • 存储器越快,容量越小(容量变大的话,成本高,功耗大,散热大,芯片可能破坏)

存储器层次结构

  • 快速设备做不了太大,而CPU、主存的速率差距越拉越大,因此在CPU与主存间做一个存储设备。由于程序有良好局部性特征,尽管内存占用大,但是频繁使用的存储热区实际上是非常小的存储空间,我们将这部分热区放到最快的存储设备。
  • 存储器层次结构是金字塔形状,这种层次结构可以设计并优化性能是基于缓存的基本思想
缓存思想

一个更小更快的设备把大而慢的设备的一个子集存储起来,这个子集必须为是使用频率最高的子集,从而提升存储器速度。值得注意的是,顶层设备不是存储新的数据,而是存储下一层设备中存储的,但是是最常用的。

在上边,我们从存储器发展趋势看出存储器和处理器的性能差距越拉越大,导致系统中的存储瓶颈现象,为了解决瓶颈现象,我们提出了存储器层次结构这一解决方法,存储器层次结构能解决存储瓶颈的理论支持是局部性原理,工作机制是缓存这一工作机制。

你可能感兴趣的:(c,计算机基础)