第三章 多層ストレージ#
本章の内容は多く、主にさまざまなストレージとストレージ方式について扱います。特にストレージの基本概念、DRAM、SRAM、キャッシュ、ヒット率と平均アクセス時間、主記憶とキャッシュのマッピング方式、仮想記憶などに重点を置いています。
3.1 ストレージの概要#
3.1.1 ストレージの分類#
ストレージはコンピュータシステムの記憶装置であり、プログラムやデータを保存するために使用されます。
ストレージメディア :現在主に半導体デバイス と磁性材料 が使用されています。
ストレージビット :1 つの双安定半導体回路、CMOS トランジスタ、または磁性材料のストレージ素子は、1 ビットの二進数コードを保存できます。この二進数コードビットはストレージ内の最小のストレージ単位であり、ストレージビット と呼ばれます。
ストレージユニット :複数のストレージビットで構成されるストレージユニット。多くのストレージユニットがストレージを構成します。
ストレージ材料の特性と使用方法の違いに基づいて、ストレージにはさまざまな分類方法があります。
(1)ストレージメディア に基づく分類:磁気表面 /半導体 ストレージ
(2)アクセス方式 に基づく分類:ランダム /シーケンシャル アクセス(テープ)
(3)読み書き機能 に基づく分類:読み取り専用ストレージ(ROM )とランダム読み書きストレージ(RAM )
(4)情報の揮発性 に基づく分類:揮発性 と不揮発性
(5)ストレージシステム内の役割 に基づく分類:主 / 副 / バッファ / 制御
3.1.2 ストレージの階層#
現在のストレージの特徴:
高速ストレージは高価で、容量が小さい;
価格が低いストレージは速度が遅く、容量が大きい。
コンピュータのストレージアーキテクチャを設計する際、ストレージの容量が大きく、速度が速く、価格が低いことを望みます。そのため、ストレージシステムの設計では、ストレージの容量、速度、価格 の要因を考慮し、多層ストレージアーキテクチャ を構築しました。以下の図に示します。
高速バッファストレージはキャッシュ と略され、コンピュータシステム内の高速小容量半導体ストレージ です。
主ストレージは主記憶 と略され、コンピュータシステムの主要ストレージ であり、コンピュータの実行中に大量のプログラムとデータを保存するために使用されます。
外部ストレージは外部記憶 と略され、大容量補助ストレージ です。
3.1.3 主ストレージの技術指標#
ワードストレージユニット :1 つの機械ワードを保存するストレージユニットで、対応するユニットアドレスをワードアドレスと呼びます。
バイトストレージユニット :1 バイトを保存するユニットで、対応するアドレスをバイトアドレスと呼びます。
ストレージ容量 :ストレージ内に収容できるストレージユニットの総数を指します。ストレージ容量が大きいほど、保存できる情報が多くなります。
アクセス時間 (ストレージアクセス時間とも呼ばれる):1 回の読み取り操作コマンドが発信されてから、その操作が完了し、データがデータバスに読み出されるまでの時間を指します。通常、書き込み操作時間は読み取り操作時間と等しいため、ストレージアクセス時間と呼ばれます。
ストレージサイクル :連続して 2 回の読み取り操作を開始するのに必要な最小時間の間隔を指します。通常、ストレージサイクルはアクセス時間よりわずかに大きく、その時間単位は ns です。
ストレージ帯域幅 :単位時間あたりにストレージがアクセスする情報量で、通常はビット / 秒またはバイト / 秒で測定されます。
3.2 SRAM ストレージ(静的読み書きストレージ)#
現在広く使用されている主ストレージ(内部ストレージ)は半導体ストレージです。情報の保存メカニズムの違いに基づいて、2 つのタイプに分けられます。
静的読み書きストレージ(SRAM):アクセス速度が速い が、ストレージ容量は DRAM ほど大きくありません。
動的読み書きストレージ(DRAM):アクセス速度がやや遅い が、ストレージ容量は SRAM より大きいです。
3.2.1 基本的な静的ストレージ素子アレイ#
ストレージビット :1 つのラッチ(フリップフロップ)。直流電源がこのメモリ回路に供給され続ける限り、無期限に 1 または 0 の状態を保持します。電源が切れると、保存されたデータ(1 または 0)は失われます 。
3 組の信号線(重点) :アドレス線 、データ線 (行線、列線)、制御線
アドレス線 :6 本の場合、ストレージの容量は 2^6^ = 64 個のストレージユニット を指定します。
データ線 :4 本の場合、ストレージのワード長 は 4 ビットであるため、ストレージビットの総数は 64×4 = 256 です。
制御線 :R/~W 制御線は、ストレージに対して読み取りまたは書き込みを指定します。
アドレスデコーダの出力には 64 本の選択線があり、これを行線と呼び、各ストレージビットの入力と非ゲートを開く役割を果たします。
3.2.2 基本的な SRAM 論理構造#
SRAM チップの大部分は二重デコーディング 方式を採用し、より大きなストレージ容量を組織するために使用されます。
二次デコーディングを採用し、アドレスを x 方向と y 方向の 2 つの部分に分けます。
ストレージ体(256 行 ×128 列 ×8 ビット)ストレージアレイ
アドレスデコーダ
二重デコーディング方式を採用(選択線の数を減らす)。
A0〜A7 は行アドレスデコーディング線
A8〜A14 は列アドレスデコーディング線
双方向データ線は 8 本です。
3.2.3 読み取り / 書き込みサイクル波形図#
例 1: 図は SRAM の書き込みタイミング図です。R/W は読み書きコマンド制御線で、R/W 線が低電平のとき、ストレージは指定されたアドレスにデータ線上のデータを書き込みます。図中の書き込みタイミングの誤りを指摘し、正しい書き込みタイミング図を描いてください。
解:ストレージへの書き込みタイミング信号は同期する必要があります。通常、R/W 線に負のパルスが加えられると、アドレス線とデータ線のレベルは安定している必要があります。R/W 線が低電平に達したとき、データはすぐに保存されます。したがって、R/W 線が低電平のとき、データ線が値を変更した場合、ストレージは新しいデータを保存します⑤。同様に、R/W 線が低電平のとき、アドレス線が変化した場合、データは新しいアドレス②または③に保存されます。
正しい書き込みタイミング図は図 (b) に示されています。
3.3 DRAM ストレージ(動的読み書きストレージ)#
SRAM ストレージのストレージ素子はフリップフロップであり、2 つの安定した状態を持っています。
DRAM ストレージのストレージ素子は1 つの MOS トランジスタとコンデンサ で構成されるメモリ回路です。
MOS トランジスタはスイッチとして使用され、保存された情報は 1 または 0 であり、コンデンサ上の電荷量 によって表されます。
コンデンサが充電されている とき、1 を保存している ことを示します;
コンデンサが放電されて電荷がない とき、0 を保存している ことを示します。
DRAM は SRAM とは異なり、
行アドレスラッチ と列アドレスラッチ を追加しました。DRAM ストレージの容量が非常に大きいため、アドレス線の幅を増やす必要があります。これを避けるために、時間分割でアドレスコードを送信 する方法が採用されます。アドレスバスの幅が 10 ビットの場合、最初にアドレスコード A0〜A9 を送信し、行選択信号 RAS を使用して行アドレスラッチに入力します。次に、アドレスコード A10〜A19 を送信し、列選択信号 CAS を使用して列アドレスラッチに入力します。チップ内部の 2 つの部分を合わせると、アドレス線の幅は 20 ビットになり、ストレージ容量は 1M×4 ビットになります。
リフレッシュカウンタ と対応する制御回路 を追加しました。DRAM は読み出した後にリフレッシュする必要があります が、未読書きのストレージ素子も定期的にリフレッシュする必要があり、行ごとにリフレッシュ する必要があります。そのため、リフレッシュカウンタの長さは行アドレスラッチと等しい です。リフレッシュ操作は読み書き操作と交互に行われるため、2 対 1 の多路スイッチを使用してリフレッシュ行アドレスまたは通常の読み書きの行アドレスを提供します。
3.3.3 読み取り / 書き込みサイクル、リフレッシュサイクル(重点)#
読み取り / 書き込みサイクル#
読み取りサイクルと書き込みサイクルの定義は、行選択信号 RAS の立ち下がりエッジから始まり、次の RAS 信号の立ち下がりエッジまでの時間、つまり連続する 2 つの読み取りサイクルの時間間隔です。通常、制御の便宜上、読み取りサイクルと書き込みサイクルの時間は等しいです。
リフレッシュサイクル#
DRAM ストレージビットはコンデンサ上の電荷量に基づいて保存され、この電荷量は時間と温度とともに減少するため、定期的にリフレッシュ する必要があります。リフレッシュ操作には 2 つの方法があります:集中リフレッシュと分散リフレッシュ。
集中リフレッシュ#
DRAM のすべての行は各リフレッシュサイクルでリフレッシュされます 。たとえば、リフレッシュサイクルが 8ms のメモリの場合、すべての行の集中リフレッシュは 8ms ごとに 1 回行う必要があります。そのため、8ms の時間を 2 つの部分に分けます:前半は通常の読み書き操作を行い、後半(8ms から通常の読み書きサイクルの時間まで)は集中リフレッシュ操作の時間とします。
分散リフレッシュ#
各行のリフレッシュは通常の読み書きサイクルの中に挿入されます 。たとえば、p70 の図 3.7 に示されている DRAM には 1024 行があり、リフレッシュサイクルが 8ms の場合、各行は 8ms÷1024=7.8us ごとに 1 回リフレッシュする必要があります。分散リフレッシュには死時間がありません!
3.4 読み取り専用ストレージ(ROM)とフラッシュストレージ(FLASH)#
1、マスク ROM(MROM)#
保存内容が固定された ROM で、製造業者が製品を提供します。 ROM チップが作成されると、その中の保存内容を変更することはできません。広く使用される標準機能を持つプログラムやデータ、またはユーザーが特別な機能を持つプログラムやデータを保存するために使用されます(これらのプログラムやデータはすべて二進数コードを使用します)。
利点:信頼性と集積度が高く、価格が安い
欠点:書き換えができない
2、プログラム可能 ROM#
ユーザーがその保存内容を変更できます。
プログラミング操作の違いに基づいて、プログラム可能 ROM は次のように分けられます。
一度プログラム可能(PROM)
特徴:ユーザーが製品内の特定のストレージ素子を変更でき、ユーザーは一度だけプログラム可能 です。
利点:ユーザーのニーズに応じてプログラムできます。
欠点:一度だけ書き換え可能です。
光消去可能プログラム可能(EPROM)
保存内容は必要に応じて書き込むことができ、更新が必要な場合は元の保存内容を消去し、新しい内容を書き込みます。
電気消去可能プログラム可能(EEPROM)
3、フラッシュストレージ#
フラッシュストレージはフラッシュメモリ とも呼ばれ、高密度の不揮発性 の読み書きストレージです。
高密度は、巨大なビット数のストレージ容量を持つことを意味します。
不揮発性は、電源がない状態でも保存されたデータを長期間保持できることを意味します。
RAM の利点と ROM の利点を兼ね備え、ストレージ技術の画期的な進展といえます。
フラッシュストレージの基本操作には、プログラミング操作、読み取り操作、消去操作があります。
3.5 並列ストレージ(重点)#
CPU と主ストレージ間の速度が不一致であるため、この状況は高速コンピュータ設計の主要な問題となります。
CPU と主ストレージ間のデータ転送率を向上させるために 、主ストレージがより高速な技術を採用して読み出し時間を短縮するだけでなく、並列技術のストレージ を採用することもできます。
デュアルポートストレージ ——空間並列 技術
マルチモジュール交差ストレージ ——時間並列 技術
3.5.1 デュアルポートストレージ#
1、デュアルポートストレージの論理構造#
デュアルポートストレージは同じストレージが 2 組の相互独立の読み書き制御回路を持つ ため、この名前が付けられました。
並列の独立した操作を行うため、高速で動作するストレージであり、研究や工学で非常に役立ちます。
例として、デュアルポートストレージ IDT7133 の論理ブロック図を示します。以下のページの図。
2、競合のない読み書き制御#
2 つのポートのアドレスが異なる 場合、2 つのポートで読み書き操作を行っても、競合は発生しません 。
任意のポートが選択されて駆動されると、ストレージ全体にアクセスでき、各ポートには独自のチップ選択制御(CE)と出力駆動制御(OE)があります。
読み取り操作時、ポートの OE(低電平有効)が出力ドライバを開き、ストレージマトリックスから読み取られたデータが I/O ラインに現れます。
3、競合のある読み書き制御#
2 つのポートが同時にストレージの同じストレージユニットにアクセス すると、読み書き競合が発生します。
この問題を解決するために、BUSY フラグが設定されています。この場合、チップ上の判断ロジック がどのポートに優先的に読み書き操作を行うかを決定し、もう一方の 遅延されたポートに BUSY フラグ(BUSY が低電平に変わる)を設定し、一時的に このポートを閉じます。
3.5.2 マルチモジュール交差ストレージ#
1、ストレージのモジュール化組織#
複数のモジュールで構成される主ストレージは線形アドレス指定されています。これらのアドレスが各モジュール内でどのように配置されるかには 2 つの方法があります:順序方式 と交差方式
[例] M0-M3 の 4 つのモジュールがあり、各モジュールには 8 つのワードがあります。
順序方式 : M0:0-7
M1:8-15
M2:16-23
M3:24-31
5 ビットのアドレス組織は次のようになります: X X X X X
高位がモジュールを選択し、低位がブロック内のアドレスを選択します
特徴:特定のモジュールがアクセスされると、他のモジュールは動作しません。
利点:特定のモジュールに障害が発生した場合、他のモジュールは通常通り動作し、モジュールを追加することでストレージ容量を拡張するのが比較的容易です。
欠点:各モジュールが直列に動作するため、ストレージの帯域幅が制限されます。
[例] M0-M3 の 4 つのモジュールがあり、各モジュールには 8 つのワードがあります。
交差方式 : M0:0,4,……4 で割った余りが 0
M1:1,5,……4 で割った余りが 1
M2:2,6,……4 で割った余りが 2
M3:3,7,……4 で割った余りが 3
5 ビットのアドレス組織は次のようになります: X X X X X
高位がブロック内のアドレスを選択し、低位がモジュールを選択します
特徴:連続したアドレスが隣接する異なるモジュールに分散しており、同じモジュール内のアドレスはすべて不連続です 。
利点:連続したワードのブロック転送が可能で、マルチモジュールのパイプライン並列アクセスを実現し、ストレージの帯域幅を大幅に向上させます。使用場面はバッチデータの読み取りです。
2、マルチモジュール交差ストレージの基本構造#
下図は 4 モジュール交差ストレージの構造ブロック図です。主ストレージは 4 つの相互独立で同じ容量のモジュール M0、M1、M2、M3 に分割され、各モジュールには独自の読み書き制御回路、アドレスレジスタ、データレジスタがあり、それぞれ同等の方法で CPU と情報を伝送します。理想的な状況では、プログラムセグメントやデータブロックが主ストレージ内で連続してアクセスされる場合、主ストレージのアクセス速度が大幅に向上します。
3.6 キャッシュストレージ(重点)#
3.6.1 キャッシュの基本原理#
1、キャッシュの機能#
CPU と主ストレージ間の速度不一致 の問題を解決するために採用された重要な技術です。
CPU と主ストレージの間にある小容量高速 バッファストレージです。
プログラムアクセスの局所性原理 に基づいています。
高速で CPU に命令とデータを提供し、プログラムの実行速度を向上させます。
高速を追求するため、管理を含むすべての機能がハードウェアで実現されています 。
プログラムアクセスの局所性原理#
短い時間間隔内で、プログラムが局所的な範囲のストレージアドレスに頻繁にアクセスし、局所的な範囲外のアドレスへのアクセスが非常に少ない現象を、プログラムの局所性と呼びます。
一般にキャッシュは高速の SRAM で製作され、その価格は主ストレージより高いですが、容量が主ストレージよりはるかに小さいため、速度と価格の矛盾をうまく解決できます。
2、キャッシュの基本原理#
キャッシュの設計原則 :CPU が今回アクセスしたデータは、次回も近くのデータにアクセスする可能性が非常に高いです。(プログラムアクセスの局所性 )
CPU とキャッシュ間のデータ交換はワード単位 で行われます。
主ストレージとキャッシュ間のデータ交換はブロック単位 で行われます。
CPU がメモリ内の 1 ワードを読み取ると、そのワードのメモリアドレスをキャッシュと主ストレージに送信します。このとき、キャッシュ制御ロジックはアドレスに基づいて このワードが現在キャッシュ内にあるかどうかを判断します。もしあれば、このワードはすぐに CPU に送信されます;もしなければ、主ストレージの読み取りサイクルを使用してこのワードを主ストレージから読み出し、CPU に送信します。同時に、このワードを含む全データブロックを主ストレージからキャッシュに読み出します。
下図では、キャッシュは 4 行に分かれ、各行には 4 つのワードがあります。キャッシュに割り当てられたアドレスは連想メモリ CAM に存在し、内容アドレス指定メモリです。CPU がメモリアクセス命令を実行すると、アクセスするワードのアドレスを CAM と主ストレージに送信します。CAM に送信されたアドレスは内容に基づいて比較され、もしそのワードがキャッシュにない場合、主ストレージからそのワードを見つけ出し、CPU に送信します。同時に、そのワードの前後の 4 つのワードの 1 行データをキャッシュに送信します 。
3、キャッシュの構造#
キャッシュのデータブロックは行と呼ばれ、L~i~ で表され、i=0, 1, … , m-1 です。
主ストレージのデータブロックはブロックと呼ばれ、B~j~ で表され、j=0, 1, … , n-1 です。
行とブロックは同じ長さであり、各行(ブロック)には k 個の主ストレージワードが含まれます。
キャッシュはデータストレージとタグストレージで構成されています。
データストレージ:主ストレージの 1 つのデータブロックのデータを保存します。
タグストレージ:データが存在する主ストレージのアドレス情報 を保存します。
4、ヒットとミス#
ヒット :
主ストレージブロックがキャッシュにロードされる 。
主ストレージブロックとキャッシュブロックが対応関係を確立する 。
タグを記録 して、どのキャッシュブロックが対応関係を確立した主ストレージブロック番号を持つかを示します。
ミス :
主ストレージブロックがキャッシュにロードされていない 。
主ストレージブロックとキャッシュブロックが対応関係を確立していない 。
ヒット率 :
CPU から見ると、キャッシュを追加する目的は、性能上主ストレージの平均読み出し時間をできるだけキャッシュの読み出し時間に近づける ことです。
この目的を達成するために、すべてのストレージアクセスの中でキャッシュが CPU のニーズを満たす部分が非常に高い割合を占めるべきであり、すなわちキャッシュのヒット率は 1 に近いべきです。
プログラム実行中に、Nc はキャッシュが完了したアクセスの総回数 、Nm は主ストレージが完了したアクセスの総回数 とし、h をヒット率 と定義すると、次のようになります: h = Nc /( Nc + Nm)
Tc をヒット時のキャッシュアクセス時間 、Tm をミス時の主ストレージアクセス時間 、1-h をミス率 とすると、キャッシュ / 主ストレージシステムの平均アクセス時間 Ta は次のようになります: T a = h ∗ T c + ( 1 − h ) ∗ T m T_a = h * T_c +(1-h) * T_m T a = h ∗ T c + ( 1 − h ) ∗ T m
我々が追求する目標は、できるだけ少ないハードウェアコストでキャッシュ / 主ストレージシステムの平均アクセス時間 T~a~ を T~c~ に近づけることです。
r を主ストレージがキャッシュより遅い倍率とし、r = T m T c r = \frac{T_m}{T_c} r = T c T m
e をアクセス効率 とすると、次のようになります:
Copy = \frac{T_c} {h*T_c +(1-h)*T_m }\\
= \frac{1} {h+(1-h)*r}\\
= \frac{1} {r+(1-r)*h}$$
すなわち$$e = \frac{1} {r+(1-r)*h}$$
- この式から、アクセス効率を向上させるためには、**ヒット率hが1に近いほど良い**ことがわかります。r値は5〜10が望ましく、あまり大きくない方が良いです。
- ヒット率hはプログラムの動作、キャッシュの容量、組織方式、ブロックのサイズに関連しています。
例6:CPUがあるプログラムを実行しているとき、キャッシュが完了したアクセスの回数は1900回、主ストレージが完了したアクセスの回数は100回、キャッシュアクセス周期が50ns、主ストレージアクセス周期が250nsであるとき、キャッシュ/主ストレージシステムの効率と平均アクセス時間を求めてください。
解: h= Nc /( Nc + Nm) =1900/(1900+100)=0.95
r= tm / tc =250ns/50ns=5
e=1/(r+(1-r)h)=1/(5+(1-5)×0.95=83.3%
e= tc /ta
ta= tc /e=50ns/0.833=60ns
### 3.6.2 主ストレージとキャッシュのアドレスマッピング
- 主ストレージと比較して、**キャッシュの容量は非常に小さく、保存される内容は主ストレージ内容のサブセットに過ぎません**。また、キャッシュと主ストレージのデータ交換はブロック単位で行われます。
- 主ストレージブロックをキャッシュに配置するためには、主ストレージアドレスをキャッシュに位置付けるための方法を適用する必要があり、これを**アドレスマッピング**と呼びます。
- どのマッピング方式を選択しても、主ストレージとキャッシュを同じサイズの「ブロック」に分割する必要があります。
- どのマッピング方式を選択するかは、次の点を考慮する必要があります:
- ハードウェアの実装が容易かどうか
- アドレス変換の速度が速いかどうか
- 主ストレージスペースの利用率が高いかどうか
- 主ストレージにブロックをロードする際、競合が発生する確率
- 以下に3つのマッピング方法を紹介します。
- **全相関マッピング、直接マッピング、グループ相関マッピング**
#### 全相関マッピング方式
主ストレージの1つのブロックのアドレス(ブロック番号)とブロックの内容(ワード)がキャッシュの行に一緒に保存され、ブロックアドレスはキャッシュ行のタグ部分に保存され、主ストレージの各ブロックはキャッシュの任意の行にマッピングできます。
![ここに画像の説明を挿入](https://img-blog.csdnimg.cn/20210615202323953.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1ODkwNTMz,size_16,color_FFFFFF,t_70)
- CPUのメモリアクセス命令は、メモリアドレス(ブロック番号とワードで構成される)を指定します。
- 高速検索のために、主ストレージアドレスのブロック番号とキャッシュ内のすべての行のタグを同時に比較器で比較します。相同であればブロック番号がヒットし、ワードアドレスに基づいてキャッシュから1ワードを読み取ります;ブロック番号がヒットしない場合は、メモリアドレスに基づいて主ストレージからこのワードを読み取り、対応するブロックをキャッシュに書き込みます。
- 変換式
- 主ストレージアドレス長=(s+w)ビット
- アドレス単位数=2^w^ワードまたはバイト
- ブロックサイズ=行サイズ=2^w^ワードまたはバイト
- 主ストレージのブロック数=2^s^
- タグサイズ=sビット
- キャッシュの行数=アドレス形式によって決定されません
- 利点:主ストレージの1つのブロックをキャッシュの任意の行に直接コピーでき、**非常に柔軟**で、キャッシュスペースの**利用率が高く**、キャッシュの**ブロック競合確率が低い**です。
- 欠点:**比較器の実装が難しく**、非常に高速でコストの高い連想メモリが必要であり、**小容量キャッシュ**にのみ適しています。
#### 直接マッピング方式
- **多対一**のマッピング関係です。
- **1つの主ストレージブロックはキャッシュの特定の行位置にのみコピーできます**。
- キャッシュの行番号iと主ストレージのブロック番号jの関係は次のようになります。
- i= j mod m (mはキャッシュの総行数)
- 主ストレージのjブロックの内容はキャッシュのi行にコピーされます。
![ここに画像の説明を挿入](https://img-blog.csdnimg.cn/20210615202913451.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1ODkwNTMz,size_16,color_FFFFFF,t_70)
##### 直接マッピング方式の検索プロセス
- 行番号を使用して対応する行を選択します;
- 行タグをCPUアクセスアドレスと比較します。相同であればヒットし、キャッシュにアクセスします;ヒットしない場合は主ストレージにアクセスし、対応するブロックをキャッシュに書き込みます。
![ここに画像の説明を挿入](https://img-blog.csdnimg.cn/20210616090434170.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1ODkwNTMz,size_16,color_FFFFFF,t_70)
**変換式**
- 主ストレージアドレス長 = (s+w)ビット
- アドレス単位数 = 2^s+w^ワードまたはバイト
- ブロックサイズ = 行サイズ = 2^w^ワードまたはバイト
- 主ストレージのブロック数=2^s^
- キャッシュの行数 = m =2^r^
- タグサイズ=(s-r)ビット
利点:比較回路が少なく、m倍の回路が必要なため、**ハードウェア実装が簡単**で、キャッシュアドレスは主ストレージアドレスの低い数ビットであり、変換は不要です。
欠点:**競合確率が高い**です。
適用場面:**大容量キャッシュ**に適しています。
#### グループ相関マッピング方式
全相関マッピングと直接相関マッピングの2つの方式の利点と欠点は正反対であり、配置の柔軟性とヒット率の観点から前者が優れていますが、比較器回路が簡単でハードウェア投資の観点から後者が優れています。
- キャッシュをuグループに分け、各グループにはv行があります。
- 主ストレージブロックとキャッシュグループ間は直接マッピング方式を採用し、**主ストレージブロックがどのグループに保存されるかは固定されています**;各グループ内部の行間は全相関のマッピング方式を採用し、**主ストレージブロックはキャッシュ固定グループの任意の行にマッピングできます**。
- キャッシュグループ番号qと主ストレージブロック番号jの関係は次のようになります。
- q= j mod u (uはキャッシュの総グループ数)
- 主ストレージのjブロックの内容はキャッシュのqグループのある行にコピーされます。
- アドレス変換
- 主ストレージアドレスxを設定し、キャッシュ内にあるかどうかを確認し、最初にy= x mod uを計算し、次にyグループ内で1回検索します。
全相関よりも実装が容易で、競合が少ないです。
もしv=1であれば、直接相関マッピング方式になります。
もしu=1であれば、全相関マッピング方式になります。
vの値は一般に小さく、通常は2の冪(典型的な値は2、4、8、16)であり、これをv路グループ相関キャッシュと呼びます。![ここに画像の説明を挿入](https://img-blog.csdnimg.cn/20210616091621259.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1ODkwNTMz,size_16,color_FFFFFF,t_70)
**変換式**
- 主ストレージアドレス長=(s+w)ビット
- アドレス単位数=2^s+w^ワードまたはバイト
- ブロックサイズ=行サイズ=2^w^ワードまたはバイト
- 主ストレージのブロック数=2^s^
- 各グループの行数=v
- グループ数u=2^d^
- キャッシュの行数=uv
- タグサイズ=(s-d)ビット
p96例6:1グループ相関キャッシュは64行で構成され、各グループは4行、主ストレージは4Kブロックを含み、各ブロックは128ワードです。メモリアドレスの形式を示してください。
解:ブロックサイズ = 行サイズ = 2^w^ワード = 128 = 2^7^ したがってw = 7
各グループの行数 = v = 4
キャッシュの行数 = uv = 64、したがってグループ数u = 16
u = 2^d^ = 16 = 2^4^、したがってd = 4
主ストレージのブロック数 = 2^s^ = 4K = 2^2^ * 2^10^ = 2^12^、したがってs = 12
アドレス形式は次のようになります:
| タグs-d | グループ番号d | ワード番号w|
|--|--|--|
| 8ビット | 4 ビット| 7ビット|
### 3.6.3 置換戦略
- キャッシュの動作原理は、できるだけ最新のデータを保存することを要求します。
- 新しいメモリブロックをキャッシュにコピーする必要がある場合、保存可能な行位置が他の主ストレージブロックで占有されている場合、置換が必要です。
- 直接マッピング方式:**直接置換**
- 全相関およびグループ相関方式:新しい主ストレージブロックを保存できる特定の行の中から1行を選択して置換します。
- よく使用される3つのアルゴリズム:
- 最も使用頻度の低い(LFU)アルゴリズム
- 最近最も使用頻度の低い(LRU)アルゴリズム
- ランダム置換
#### 最も使用頻度の低い(LFU)アルゴリズム
- **一定期間内にアクセス回数が最も少ない行のデータを置換します**。
- **各行にカウンタを設定します**。新しい行が作成されると0からカウントが始まり、アクセスされるたびに訪問行のカウンタが1増加します。置換が必要な場合、カウント値が最小の行を置換し、これらの行のカウンタをすべてリセットします。
- このアルゴリズムは、特定の行の2回の置換間の間隔内でカウント周期が制限されているため、**最近のキャッシュのアクセス状況を反映できません**。
#### 最近最も使用頻度の低い(LRU)アルゴリズム
- **最近長期間アクセスされていない行を置換します**。
- 各行にもカウンタが設定され、キャッシュがヒットするたびに、ヒット行のカウンタがリセットされ、他の各行のカウンタが1増加します。置換が必要な場合、カウント値が最大の行を置換します。
- このアルゴリズムは、キャッシュにコピーされたばかりの新しいデータ行を保護し、**比較的高いヒット率を持ちます**。
#### ランダム置換
- 特定の行位置から**ランダムに1行を選択して置換します**。
- この戦略は**ハードウェア上で容易に実装でき**、**速度も前の2つの戦略より速い**です。
- 欠点は、ランダムに置換されたデータがすぐに再使用される可能性が高く、**ヒット率とキャッシュの動作効率を低下させる**ことです。しかし、この欠点はキャッシュ容量が増加するにつれて減少します。
-
## 3.7 仮想ストレージ(重点)
### 3.7.1 仮想ストレージの基本概念
#### 1、実アドレスと仮想アドレス
- ユーザーが**プログラムを作成**する際に使用するアドレスは**仮想アドレスまたは論理アドレス**と呼ばれ、その対応するストレージ空間は**仮想メモリ空間または論理アドレス空間**と呼ばれます。
- コンピュータの**物理メモリ**へのアクセスアドレスは**実アドレスまたは物理アドレス**と呼ばれ、その対応するストレージ空間は**物理ストレージ空間または主メモリ空間**と呼ばれます。
- **プログラムが仮想アドレスから実アドレスに変換するプロセスは、プログラムの再配置**と呼ばれます。
#### 2、仮想メモリのアクセスプロセス
- 仮想メモリ空間のユーザープログラムは仮想アドレスでプログラミングされ、**補助記憶装置**に保存されます。プログラムが実行されると、**アドレス変換機構**がそのプログラムに割り当てられた実アドレス空間に基づいて、プログラムの一部を**実メモリにロードします**。
- 各メモリアクセス時に、最初にその仮想アドレスに対応する部分が実メモリにあるかどうかを判断します:
- もしあれば、アドレス変換を行い、実アドレスで主メモリにアクセスします;
- そうでなければ、あるアルゴリズムに従って補助記憶装置から部分プログラムを実メモリにロードし、同様の方法で主メモリにアクセスします。
- これにより、各プログラムの仮想アドレス空間は実アドレス空間よりもはるかに大きくなることができ、またははるかに小さくなることができます。
- 前者は**ストレージ容量の向上**を目的とし、後者は**アドレス変換**を目的とします。
- 後者は通常、マルチユーザーまたはマルチタスクシステムで発生します:実メモリ空間は大きいが、単一のタスクはそれほど大きなアドレス空間を必要とせず、比較的小さな仮想メモリ空間は**命令アドレスフィールドの長さを短縮**できます。
- 各プログラムは仮想ストレージを持つことができ、**補助記憶装置の容量**と**主メモリに近いアクセス速度**を持ちます。しかし、この仮想メモリは主メモリと補助記憶装置、および補助記憶装置管理部品から構成される概念モデルであり、実際の物理ストレージではありません。仮想メモリは主メモリと補助記憶装置の外に追加されたハードウェアとソフトウェアによって実現されます。
#### 3、キャッシュと仮想メモリの異同
- 仮想メモリの概念からわかるように、主メモリ-補助メモリのアクセスメカニズムはキャッシュ-主メモリのアクセスメカニズムに類似しています。これはキャッシュストレージ、主メモリ、補助メモリから構成される三層ストレージシステムの中の2つのレベルです。
- キャッシュと主メモリの間、主メモリと補助メモリの間には、それぞれアドレス変換と管理を担当する補助ハードウェアと補助ソフトハードウェアがあります。これにより、各レベルのストレージが有機的な三層ストレージシステムを構成できるようになります。
- **キャッシュと主メモリはシステムのメモリを構成し、主メモリと補助メモリは補助ソフトハードウェアのサポートによって仮想ストレージを構成します。**
三層ストレージシステムにおいて、キャッシュ-主メモリと主メモリ-補助メモリの2つのストレージレベルには多くの共通点があります。
- **出発点が同じ**:両者は**ストレージシステムの性能価格比を向上させるために構築された階層ストレージシステムであり、ストレージシステムの性能を高速ストレージに近づけ、価格と容量を低速ストレージに近づけることを目指しています**。
- **原理が同じ**:両者は**プログラム実行時の局所性原理を利用して、最近よく使用される情報ブロックを相対的に低速で大容量のストレージから相対的に高速で小容量のストレージにロードします**。
しかし、キャッシュ-主メモリと主メモリ-補助メモリの2つのストレージレベルには多くの相違点もあります:
- **側重点が異なる**:**キャッシュは主メモリとCPUの速度差の問題を主に解決します**;性能価格比の向上に関しては、**仮想メモリは主にストレージ容量の問題を解決します**。さらに、ストレージ管理、主メモリの割り当て、ストレージ保護などの側面も含まれます。
- **データパスが異なる**:**CPUとキャッシュ、主メモリの間には直接アクセスパスがあります**。キャッシュがヒットしない場合、主メモリに直接アクセスできます;一方、**仮想メモリが依存する補助メモリとCPUの間には直接データパスが存在しません**。主メモリがヒットしない場合、ページ交換を通じてのみ解決でき、CPUは最終的に主メモリにアクセスする必要があります。
- **透明性が異なる**:**キャッシュの管理は完全にハードウェアによって行われ、システムプログラマとアプリケーションプログラマには透明です**;一方、仮想メモリの管理はソフトウェア(オペレーティングシステム)とハードウェアによって共同で行われ、ソフトウェアが介入するため、**仮想メモリは**ストレージ管理を実現する**システムプログラマには不透明であり、アプリケーションプログラマには透明です**(セグメント方式とページ方式の管理はアプリケーションプログラマに「半透明」です)。
- **ミス時の損失が異なる**:主メモリのアクセス時間はキャッシュのアクセス時間の5〜10倍であり、**主メモリのアクセス速度は通常、補助メモリのアクセス速度よりも千倍速い**ため、**主メモリがヒットしない場合のシステムの性能損失は、キャッシュがヒットしない場合の損失よりもはるかに大きい**です。
#### 4、仮想メモリメカニズムが解決すべき重要な問題
- **スケジューリング問題**——どのプログラムとデータを主メモリにロードすべきかを決定します。
- **アドレスマッピング問題**——主メモリにアクセスする際に仮想アドレスを主メモリの物理アドレスに変換する(このプロセスは**内部アドレス変換**と呼ばれます)、補助メモリにアクセスする際に仮想アドレスを補助メモリの物理アドレスに変換する(このプロセスは**外部アドレス変換**と呼ばれます)ため、ページ交換を行います。さらに、主メモリの割り当て、ストレージ保護、プログラムの再配置などの問題も解決する必要があります。
- **置換問題**——どのプログラムとデータを主メモリから排出すべきかを決定します。
- **更新問題**——**主メモリと補助メモリの整合性を確保します**。オペレーティングシステムの制御の下で、ハードウェアとシステムソフトウェアがユーザーにこれらの問題を解決し、アプリケーションプログラムのプログラミングを大幅に簡素化します。
### 3.7.2 ページ方式仮想ストレージ
#### 1、ページ方式仮想メモリのアドレスマッピング
- ページ方式仮想ストレージシステムでは、仮想アドレス空間が等長のページに分割され、これを**論理ページ**と呼びます;
- 主メモリ空間も同じサイズのページに分割され、これを**物理ページ**と呼びます。
- 仮想アドレスは2つのフィールドに分かれます:**高フィールドは論理ページ番号、低フィールドはページ内アドレス(オフセット)**です;
- 実メモリアドレスも2つのフィールドに分かれます:**高フィールドは物理ページ番号、低フィールドはページ内アドレス**です。
- **ページテーブル**を通じて、仮想アドレス(論理アドレス)を物理アドレスに変換できます。ページ方式仮想ストレージのアドレスマッピングプロセスは以下の図に示されています。![ここに画像の説明を挿入](https://img-blog.csdnimg.cn/20210617193837358.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1ODkwNTMz,size_16,color_FFFFFF,t_70)
- 大多数のシステムでは、各プロセスに対応するページテーブルがあります。ページテーブル内の各論理ページに対して1つのテーブルエントリがあり、テーブルエントリの内容にはその論理ページが存在する主メモリページのアドレス(物理ページ番号)と、その論理ページが主メモリにロードされているかどうかを示す有効ビットが含まれています。
- アドレス変換時に、**論理ページ番号をページテーブル内のオフセットアドレスとしてインデックスし、ページテーブル(論理ページ番号をページテーブル配列のインデックスとして扱う)を見つけて対応する物理ページ番号を取得し、物理ページ番号を実メモリアドレスの高フィールドとして使用し、仮想アドレスのページ内オフセットと結合**して完全な物理アドレスを構成します。
- 各プロセスが必要とするページ数は固定されていないため、ページテーブルの長さは可変であり、通常の実装方法はページテーブルの基準アドレスをレジスタに保存し、ページテーブル自体は主メモリに保存されます。仮想メモリアドレス空間は非常に大きいため、各プロセスのページテーブルは非常に長くなる可能性があります。ページテーブル自体が主メモリを占有するスペースを節約するために、一部のシステムではページテーブルを仮想メモリに保存し、ページテーブル自体もページングを行う必要があります。
- プロセスが実行されると、そのページテーブルの一部は主メモリにあり、別の部分は補助メモリに保存されます。
- 他のシステムでは**二次ページテーブル**構造が採用されています。各プロセスにはページディレクトリテーブルがあり、その各テーブルエントリはページテーブルを指します。したがって、**ページディレクトリテーブルの長さ(エントリ数)がmで、各ページテーブルの最大長さ(エントリ数)がnである場合、1つのプロセスは最大でm×nページを持つことができます。**
- ページテーブルの長さが大きいシステムでは、物理ページ番号から論理ページ番号への逆マッピングを実現するために逆ページテーブルを採用することもできます。
#### 2、変換後援バッファ(TLB)
- ページテーブルは通常主メモリにあるため、論理ページが主メモリに存在しても、物理ストレージにアクセスするためには少なくとも2回主メモリにアクセスする必要があり、これにより仮想メモリのアクセス時間が倍増します。
- 主メモリへのアクセス回数の増加を避けるために、ページテーブル自体に二次キャッシュを実施し、ページテーブルの最も活発な部分を高速ストレージに保存し、**キャッシュテーブル**を構成します。
- ページテーブルの完全なものは**スローテーブル**と呼ばれます。
- TLB(キャッシュテーブル)のアドレスマッピングプロセスは次の図に示されています。
- ![ここに画像の説明を挿入](https://img-blog.csdnimg.cn/20210617194507114.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1ODkwNTMz,size_16,color_FFFFFF,t_70)
#### 3、内部ページテーブルと外部ページテーブル
- ページテーブルは**仮想アドレスから主メモリ**の物理アドレスへの変換テーブルであり、通常は内部ページテーブルと呼ばれます。
- 外部ページテーブル:**仮想アドレスと補助メモリ**のアドレス間の変換に使用されます。
- 主メモリがページミスした場合、ページ交換操作は最初に補助メモリを特定する必要があり、外部ページテーブルの構造は補助メモリのアドレス指定メカニズムと密接に関連しています。
- たとえば、ディスクの場合、補助メモリアドレスにはディスクドライブ番号、ヘッド番号、トラック番号、セクタ番号などが含まれます。
ページ方式ストレージの主な利点:
- 主ストレージの利用率が比較的高い
- ページテーブルが比較的簡単
- アドレス変換の速度が比較的速い
- ディスク管理が比較的容易
主な欠点:
- プログラムのモジュール化性能が悪い
- ページテーブルが非常に長く、非常に大きなストレージスペースを占有する必要がある
### 3.7.3 セグメント方式仮想ストレージとセグメントページ方式仮想ストレージ
#### 1、セグメント方式仮想ストレージ
- **セグメントはプログラムの自然な境界に従って分割された、長さが動的に変化する領域です。**
- プログラマはサブルーチン、オペランド、定数などの異なるタイプのデータを異なるセグメントに分割し、各プログラムは同じタイプのセグメントを複数持つことができます。
- セグメント方式仮想ストレージシステムでは、**仮想アドレスはセグメント番号とセグメント内アドレス(オフセット)で構成されます**。仮想アドレスから実主メモリアドレスへの変換は**セグメントテーブル**によって実現されます。
- 各プログラムにはセグメントテーブルが設定され、セグメントテーブルの各テーブルエントリは1つのセグメントに対応します。各テーブルエントリには少なくとも次の3つのフィールドが含まれます:
- **有効ビット**:そのセグメントが実メモリにロードされているかどうかを示します。
- **セグメント起始アドレス**:そのセグメントが実メモリにロードされている場合、そのセグメントの実メモリ内の先頭アドレスを示します。
- **セグメント長**:そのセグメントの実際の長さを記録します。セグメント長フィールドを設定する目的は、特定のセグメントのアドレス空間にアクセスする際に、セグメント内アドレスがそのセグメントの長さを超えて他のセグメントを破壊することを防ぐためです。セグメントテーブル自体も1つのセグメントであり、補助記憶装置に存在することができますが、一般には主メモリに常駐します。
セグメント方式仮想アドレスから実メモリアドレスへの変換プロセス
![ここに画像の説明を挿入](https://img-blog.csdnimg.cn/20210617195345818.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1ODkwNTMz,size_16,color_FFFFFF,t_70)
セグメント方式仮想ストレージには多くの利点があります:
- ①セグメントの**論理独立性**により、コンパイル、管理、修正、保護が容易であり、**マルチプログラムの共有も容易です**。
- ②**セグメント長は必要に応じて動的に変更でき**、自由にスケジューリングできるため、主メモリ空間を効率的に利用できます。
欠点:
- ①セグメントの長さが不固定であるため、**主メモリ空間の割り当てが比較的面倒です**。
- ②セグメント間に多くの**外部フラグメンテーション**が残り、ストレージスペースの利用率が低下します。
- ③セグメント長が必ずしも2の整数次幂でないため、仮想アドレスと実アドレスの最低ビットを単純にセグメント内オフセットとして使用し、セグメント番号と直接結合することができず、加算操作を使用してセグメント起始アドレスとセグメント内オフセットの合計を求めて物理アドレスを求める必要があります。したがって、セグメント方式のストレージ管理はページ方式のストレージ管理方式よりも**多くのハードウェアサポートが必要です**。
#### 2、セグメントページ方式仮想ストレージ
- セグメントページ方式仮想ストレージは、セグメント方式仮想ストレージとページ方式仮想ストレージの組み合わせです。**実メモリは等分にページに分割され、各プログラムは論理構造に従ってセグメント分割され、各セグメントは実メモリのページサイズに従ってページ分割されます**。プログラムはページ単位でロードおよびアンロード操作を行いますが、セグメント単位でプログラミング、保護、共有ができます。
[例1] 3つのプログラムがあり、基数はA、B、Cで表され、その基準レジスタの内容はそれぞれS~A~、S~B~、S~C~です。プログラムAは4つのセグメントで構成され、プログラムCは3つのセグメントで構成されています。セグメントページ方式仮想ストレージシステムの論理アドレスから物理アドレスへの変換プロセスは図に示されています。主メモリには各プログラムのセグメントテーブルがあり、Aプログラムには4つのセグメント、Cプログラムには3つのセグメントがあり、各セグメントにはページテーブルが必要で、セグメントテーブルの各行は対応するページテーブルの開始位置を示し、ページテーブル内の各