メモリ階層 - になりますあなたを知っている必要があります

私たちは、このような使用される、基礎となるストレージ・デバイスと異なっているそのうちの一つのMySQL、MongoDBは、Redisの、MQ、これらのストレージサービスのパフォーマンスは非常に大きな違いがあり、などのストレージ技術のさまざまな使用している必要があります信じています。プログラマとして、あなたはそう心の中で明確なプログラムのパフォーマンスの違いとして、メモリの階層構造を理解する必要があります。今日は、コンピュータ・システム・メモリの階層の下を見つけるためにあなたを取ります。

ストレージ・テクノロジー

最初にメモリシステムが何であるかを理解できますか?

それは本質的に異なる容量、アクセス時間およびコストを有する記憶装置の階層構造です。スローへの高速の順序から:CPUレジスタ、キャッシュ、メインメモリ、ディスク、

ここでは、明確な理解のを持っているように、データのセットをご紹介します

データがCPUのレジスタに格納されている場合、クロックサイクル0ニーズがアクセスできるようにするには、ストアは、キャッシュ内の4〜75クロック・サイクルを必要とします。メインメモリに保存されている数百サイクルを必要とし、場合には、サイクル数千万程度、ディスクに保存されている場合は! - CSAppというから

コンピュータシステムにおいて、複数のストレージ・デバイスへの洞察力を持つ次に、関与しました:

ランダム・アクセス・メモリ

ランダム・アクセス・メモリ(RAM)は、スタティックRAM(SRAM)やダイナミックRAM(DRAM)に分割されています。SRAMは、通常は、より一般的にTELLキャッシュメモリに使用数メガバイト、より速くありませんが、また、はるかに高価。DRAMは、私たちは、多くの場合、メインメモリと言うものです。

アクセスメインメモリ

データストリームはに往復オペレーティングシステム共有バス電子回路を介してプロセッサとDRAMとの間です。CPUとメインメモリとの間の各データ転送は、バストランザクションになるステップの複雑な一連によって達成されます。メインメモリは、トランザクションがCPUにデータを転送することですお読みください。書き込みトランザクションは、メインメモリにCPUからのデータを転送します。

バスは、アドレス、データ及び制御信号を運ぶことができ、平行線のセットです。CPUチップは、メインメモリに接続されている方法を次の図が示すDRAMです。

CPUとメインメモリバス構造を接続します

私たちは、データとストアデータをロードするときに、最終的にはCPUとメインメモリは、それを達成するために相互作用する方法ですか?

基本的な命令メモリのデータを初めて目にはCPUレジスタにロードされます。

movq A,%rax

アドレスAの内容をレジスタ%RAXにロードされ、このコマンドは、特に3つのステップに、バスインタフェース回路(バス・インタフェース)と呼ばれるオンチップCPUが開始をバス上のリードトランザクションを引き起こします。

  1. システム・バス、I / OブリッジへのCPUアドレスは、メモリバスへ信号を送信します。詳細については、図を見てください。
  2. メモリ・バス上のメインメモリアドレス信号を感じ、DRAMから採取されたデータ・ワードは、メモリバスに書き込まれるメモリ・バスからアドレスを読み取ります。システム・メモリ・バス信号はCPUバスインターフェースにシステムバスに沿って伝達される信号を変換するI / Oバスブリッジ。図ケースB
  3. バスからデータを読み取るために、CPUのデータバスシステム上で気軽に、レジスタ%RAXにデータをコピーします。Cの下の図

メモリアドレスバスAの上にa.CPU

B。Aメインメモリバスリードから、ワードxを削除し、バス上に配置され

言葉はc.CPUは、Xバスから読み出し、および%RAXにコピーします

ランダム・アクセス・メモリは、停電、DRAMとSRAMはとても揮発性メモリとして、自分の情報を失うという欠点があります。

ディスクストレージ

ディスクが使用するデータを保存するために広く大容量記憶装置であり、我々は今、自宅のコンピュータは、しばしば1Tのもあります。RAMベースのメモリのギガバイトと比較するか、読み取りと書き込みが、パフォーマンスに大きな差が、わずか数百。時間はDRAMが100倍遅くSRAMよりも、読み込みよりも10倍遅く、ミリ秒です。

ディスク構造

ディスクは、製ディスクです。各プラッタは2つの側面があります。表面は、磁気記録材料で覆われています。中央ディスクは、ディスクの回転は、典型的には、密閉容器内のディスクプラッタを複数備え、固定速度で毎分、典型的には5400〜15,000回転であってもよいように、回転可能なスピンドル(主軸)です。

ディスク構造

上記のように、我々は、表面がトラックと呼ばれる多くの同心円に分割されていることがわかります。トラックは複数のセクタに分割され、同一のデータ・ビット(典型的には512バイト)を有する各セクタ。離間セクタ、セクタを識別するためのビット記憶形式との間のギャップがあります。

我々は通常、ハードディスクを使用している容器に一緒に包装される複数のディスク、磁気ディスク装置と呼びます。

ディスク容量

容量が十分に理解され、それは、全ディスクがデータビットを記憶することが可能です。ディスクの構成によれば、我々は次の要因によって決定されたディスク容量になってきました。

  • 記録密度(記録密度、ビット/インチ):ビット数が1インチに配置することができるトラック。
  • トラック密度(トラック密度、トラック/インチ):スピンドルの中心から半径外方向に、1インチは、多数のトラックを有することができます。
  • 面密度(面密度、ビット/インチ):記録密度とトラック密度の積。

上記の理解を通して、実際には、増加のディスク容量は、近年の面記録密度を高めることである密度が数年ごとに倍増する面積。ここでは、計算されたディスク容量を見ることができます。

ディスクセクタの容量=バイト/セクタの数が*平均数/トラック数表面面/ディスクの* / *数*ディスク/ディスクの数を追跡

我々の理解の利便性の組み合わせの例:

假如我们有一个磁盘,有5个盘片,每个扇区512字节,没个面20000条磁道,每条磁道 300 个扇区,那么容量计算为:

磁盘容量 = 512 * 300 * 20000 * 2 * 5 = 30720000000字节=30.72G

磁盘操作

磁盘读写操作靠的是读写头来读写存储在磁性表面的位,它在传动臂的一端,通过这个传动臂沿着半径前后移动,从而读取不同的磁盘上数据,这个过程就成为寻道(seek)

ディスクの動特性

通过上图可以清晰的了解到,在读取数据的时候,首先通过传动臂沿着半径将读写头移动到对应表面的磁道上,而表面一直在以固定的速率旋转,读取指定扇区的数据(磁盘是以扇区大小来读写数据)。因为对于数据访问来说,消耗时间主要集中在:寻道时间、旋转时间和传送时间。

  • 寻道时间:即移动传动臂到包含目标扇区的磁道上所需的时间;
  • 旋转时间:即寻道完成后,等待目标扇区的第一个位旋转到读写头下的时间;
  • 传送时间:即扇区第一个位开始位于读写头下,到最后一个位所需的时间;

这里给出一个书上写的结论,访问一个磁盘扇区中512字节的时间主要是寻道时间和旋转延迟。也就是访问扇区中第一个字节花费很长时间,剩下的几乎不用时间。

这里大家可能有疑问,CPU是如何读取磁盘的数据到主存的,这就需要了解I/O总线。他们通过多种适配器连接到总线,而I/O总线连接了内存和CPU。如下图所示:

バス構成例

也就是I/O总线连接各种I/O设备、主存等。

固态硬盘

固态硬盘也就是俗称的SSD(Solid State Disk),是一种基于闪存的存储技术,目前常用的日常PC都用它来代替了磁盘,获取更快的速度。

SSD是内部由闪存构成,一个闪存由B个块的序列组成,每个块由P页组成。通常页的大小是512字节~4KB,块由32~128页组成,块的大小为16KB~512KB。

ソリッドステートドライブSSD

SSD的随机读比写快很多,是因为:

  1. 在写的时候,只有一页所属的整个块被擦除之后才能写。而擦除块需要较长时间,1ms级的,比读取高一个数量级。
  2. 如果写的页P已经有数据,那么这个块中所有带数据的页都必须被复制到一个新的已经擦除过的块,然后才能对页P写操作。

在大约进行100000次重复写之后,块会被磨损,不能在使用,所以这也是网上建议保存固态磁盘不要频繁格式化,作为系统盘的原因。

局部性

现在计算机频繁的使用基于SRAM的告诉缓存,为了弥补处理器-内存之间的差距,这种方法行之有效是因为局部性这个基本属性。

程序的局部性原理是指程序在执行时呈现出局部性规律,即在一段时间内,整个程序的执行仅限于程序中的某一部分。相应地,执行所访问的存储空间也局限于某个内存区域。局部性原理又表现为:时间局部性和空间局部性。时间局部性是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。空间局部性是指一旦程序访问了某个存储单元,则不久之后。其附近的存储单元也将被访问。

上面我们介绍了内存和磁盘的读取逻辑,因此一旦某个数据被访问过,很快的时间内再次被访问,则会有缓存等手段,提高访问效率。

因此我们程序中应该尊村下列普遍方法:

  1. 重复引用相同变量的程序有良好的时间局部性;
  2. 总是顺序访问数据,跨越的步长越小,则程序的空间局部性越好。
  3. 对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。

比如一个for循环,这是平时经常使用到的场景。假设它访问一个同一个数组元素,那么这个数组就是当前阶段的访问工作集,在缓存够大的情况下,它是可以直接命中缓存的。

存储器层次结构

上面主要介绍了存储技术和计算机软件一些基本的和持久的属性:

  • 存储技术:不同的存储技术的访问时间差异很大。速度较快的技术每字节的成本要比速度慢技术高,而且容量越小。CPU和主存之间的速度差距在增大;
  • 计算机软件:一个便携良好的程序倾向于展示出良好的局部性。

今、コンピュータ・システム、ハードウェアとソフトウェア、これらの基本的な属性がグランドレベルから行く、ストレージデバイスが遅くなったことを、お互いに非常に完璧に補完し、より安く、より多くの、CPUレジスタの上部、CPUは1つのクロック・サイクルにすることができ彼らは、キャッシュSRAM、メインメモリなどに続いて、アクセスしてください。

メモリ階層

図の空想に示すように、中心的な考えである:各kについて、より速く、より小さな貯蔵層は、より遅いデバイス大きなキャッシュ上に位置する層としてk個のK + 1を配置しました。

要約すると、より遅いストレージデバイス機器より速く、より安く、効果的なキャッシュメモリ階層に基づいて、だけでなく、プログラムが局所性を示す傾向にあるため。

  • 時間的局所性の使用:アクセスパフォーマンスははるかに高速最初の時間よりもバック時にキャッシュミスの最初の使用で、後にキャッシュにコピーされた後により時間的局所性に、同じデータを複数回使用することができます。
  • 空間的局所性を利用して:ストレージ・デバイスのブロックの基礎となる概念があり、読み取りの基本単位として。空間的局所に、ブロックは他のオブジェクトの背面にアクセスするため、典型的には、データの複数のブロックを含み、すなわち、キャッシュは、第1のアクセスブロックコピーの消費を補うために打ちます。

概要

今日、この記事では、主にコンピュータのメモリの関連知識を学びます。

  1. 一般的なストレージ技術、およびコンピュータのデータは、これらのストレージデバイスがどのようです。
  2. 彼は、地域プログラム、時間的局所性と空間的局所性の原理を説明しました。より高速なプログラムを容易にするために、書きます。
  3. 最後に、コンピュータシステム全体のメモリ階層を学びます。実際には、ストレージシステムは、マルチレベル・キャッシュ・システムであり、上位の記憶装置は高価であり、小容量、価格が高価であるが、キャッシュのようなデバイスの高速、次の層。

以上、私の個人的な駅をご覧ください読む:プログラミングと恋に落ちます

おすすめ

転載: www.cnblogs.com/pekxxoo/p/csapp-6.html