メモリ階層:
メモリの多層構造:
メモリは、CPU レジスタ、メイン メモリ、補助メモリの少なくとも 3 つのレベルに分割されます。
ただし、一般的には、レジスタ、キャッシュ、メイン メモリ、ディスク キャッシュ、固定ディスク、リムーバブル ストレージ メディアの 6 つの層に分かれています。
これらの部品の速度は低下しますが、記憶容量は増加します。
固定ディスクやリムーバブル記憶媒体に保存された情報のみが長期保存され、電源を切っても保存された情報は消えません。レジスタ、キャッシュ、メインメモリ、ディスクキャッシュの情報は電源を切ると保存されません。レジスタとキャッシュは実行可能メモリとも呼ばれます。
メインメモリとレジスタ
- メインメモリ。
主記憶はメモリまたはメインメモリと呼ばれます。メインメモリのアクセス速度はCPUの命令実行速度に比べてはるかに遅いため、この矛盾を軽減するためにコンピュータシステムにレジスタとキャッシュが導入されました。 - 登録する。
レジスタの速度はプロセッサと同じです。速いですが高価なので容量は少ないです。主にプロセッサの実行中にデータを保存するために使用されます。たとえば、レジスタはオペランドを格納するために使用されたり、アドレス変換を高速化するためのアドレス レジスタとして使用されたりします。
キャッシュとディスクキャッシュ
1. キャッシュ
キャッシュはレジスタとメモリの間にあるメモリで、主にメイン メモリ内のより頻繁に使用されるデータをバックアップするために使用されます。その容量はレジスタよりもはるかに大きいですが、メモリよりは約 2 ~ 3 桁小さいです。
プログラム実行の局所性の原則 (つまり、プログラムは実行時に局所性ルールを示し、プログラムの実行は短期間の特定の部分のみに限定されます) に従って、メインで頻繁にアクセスされる一部の情報は、メモリはインキャッシュに保存されます。CPU が特定の情報セットにアクセスするとき、まずその情報がキャッシュにあるかどうかを確認し、それから直接使用するために取り出します。そうでない場合は、メイン メモリから読み取ります。
2. ディスクキャッシュ
現在のディスクの I/O 速度はメイン メモリへのアクセス速度よりもはるかに遅いため、両者の速度不一致の矛盾を軽減するためです。したがって、頻繁に使用するディスク データや情報の一部をディスク キャッシュに一時的に保存することで、ディスク アクセスの回数を減らすことができます。ただし、ディスク キャッシュはキャッシュとは異なり、実際の記憶媒体そのものではなく、メイン メモリの記憶領域の一部を使用して、ディスクから読み取った(または書き込んだ)情報を一時的に保存します。
プログラムのロードとリンク:
システムでユーザー プログラムを実行するには、まずメモリにロードしてから、実行可能プログラムに変換する必要があります。これには通常、次の手順が必要です: 1) コンパイル: コンパイラは、ユーザー ソース コードをいくつかのターゲット モジュールにコンパイルします
。
2) リンク リンカは、コンパイルされたオブジェクト モジュールのセットと、それらが必要とするライブラリ関数をリンクして、完全なロード モジュールを形成します。
3) ロード中、ロードプログラムはロードモジュールをメモリにロードします。
プログラムのロード:
1.絶対荷重方式:
この方法は、単一のプログラムしか実行できない場合に使用できます。ロード モジュールがメモリにロードされた後、プログラム内の論理アドレスは実際のメモリ アドレスとまったく同じになります。
2. リロケータブルローディング方式
リロケータブルロード方式を使用すると、メモリの現在の状況に応じてロードモジュールがメモリ内の適切な場所にロードされます。リロケータブルローダーを使用してロードモジュールがメモリにロードされる場合、ロードモジュール内のすべての論理アドレスは、実際にメモリにロードされる物理アドレスとは異なることに注意してください。通常、ロード中にターゲット プログラム内の命令とデータ アドレスを変更するプロセスは、再配置と呼ばれます。また、アドレス変換は通常、ロード中に一度完了し、その後は変更されないため、静的再配置と呼ばれます。
3. 動的ランタイムの読み込み方法
ダイナミック ランタイム ローダーは、ロード モジュールをメモリにロードした後、ロード モジュール内の相対アドレスを絶対アドレスにすぐに変換せず、プログラムが実際に実行されるまでこのアドレス変換を延期します。したがって、メモリにロードされた後のすべてのアドレスは相対アドレスのままです。アドレス変換が命令の実行速度に影響を与えないように、この方法では再配置レジスタのサポートが必要です。
プログラムリンク:
1. 静的リンク
プログラムが実行される前に、各ターゲット モジュールとそれに必要なライブラリ関数が完全なアセンブリ モジュールにリンクされ、将来的に逆アセンブルされることはありません。これらのターゲットモジュールをロードモジュールにアセンブルする場合、次の 2 つの問題を解決する必要があります。
1) 相対アドレスを変更する。これは、コンパイラによって生成されるすべてのターゲット モジュールで相対アドレスが使用され、その開始アドレスが 0 であるためです。各モジュールのアドレスは、開始アドレスを基準にして計算されます。
2) 外部呼び出し記号を変更します。各モジュールで使用する外部呼び出しシンボルも相対アドレスに変換されます。
この最初のリンクによって形成される完全なロード モジュールは、実行可能ファイルとも呼ばれます。
2. ロード中の動的リンク
ユーザソースプログラムをコンパイルした後に得られるオブジェクトモジュールを指し、メモリにロードする際にロードとリンクを同時に行うリンク方式を使用します。これにより、ロード前の変更と更新、およびターゲット モジュールの共有が容易になります。
3. 実行時の動的リンク
特定のモジュールのリンクは、プログラムが実行されるまで延期されます。つまり、実行プロセス中に、呼び出されたモジュールがメモリにロードされていないことが判明すると、OS は即座にモジュールを見つけてメモリにロードします。それを呼び出し側モジュールにリンクします。実行中に使用されないターゲット モジュールはメモリに転送されず、ロード モジュールにリンクされないため、プログラムのロード プロセスが高速化されるだけでなく、メモリ スペースも大幅に節約されます。