
プログラムの実行中に、CPU が仮想アドレスとも呼ばれる論理アドレスを生成することは知られています。次に、それらの仮想アドレスは、メモリ管理ユニット (MMU) によって物理アドレスに変換されます。仮想メモリを使用すると、ページ ファイル (スワップ スペース) と呼ばれるディスクの一部をメモリとしても使用できるようになります。つまり、仮想アドレスは、メモリ (RAM) + ページ ファイル (スワップ スペース) 内のスペースを指します。ただし、CPU が仮想アドレスを生成し、その仮想アドレスが常にメモリ (RAM) + ページ ファイル (スワップ スペース) 内のアドレスを指すため、メモリにもページ ファイルにも存在しないディスクからプログラムがロードされる方法です。そのアドレスは何と呼ばれますか。当初、私は論理アドレス/仮想アドレスは、ハード ディスクの物理メモリの場所を指すアドレスであると思っていました。
かなり混乱しています。助けていただきありがとうございます。
答え1
メモリ内に存在しないページは無効としてタグ付けされ、アクセスするとオペレーティング システムでページ フォールトがトリガーされ、ページをロードできる場所 (ページ ファイル、マップされたファイルなど) が検索され、ページがロードされ、ページ ポインターが更新され、一時停止されたプロセスが再スケジュールされます。
FreeBSD には、各セグメント (連続したページのセット) の物理アドレスと、そのページャー属性 (ページャー オブジェクト、インデックス、ファイル記述子など) を含むテーブルがあります。Windows にも同様のシステムがあると思います。
答え2
次に、それらの仮想アドレスはメモリ管理ユニット (MMU) によって物理アドレスに変換されます。
仮想アドレスは、プロセスのメモリ内容が常駐またはマップされている場合にのみ、物理メモリ アドレスに変換できます。
そうでない場合は (ページ) フォールトが発生し、新しいマッピングが作成されるか、そのプロセスのメモリ内容 (必要なページなど) がバッキング ストア (ページ ファイルなど) から取得される必要があります。この内容の取得は、ストレージ デバイス (HDD または SSD など) のデバイス ドライバーを使用してカーネルによって実行されます。その間、プロセス スケジューラは現在のプロセスを一時停止し、実行可能なプロセスが CPU を使用できるようにします (試みます)。
仮想メモリを使用すると、ページ ファイル (スワップ スペース) と呼ばれるディスクの一部をメモリとしても使用できることがわかっています。したがって、仮想アドレスはメモリ (RAM) とページ ファイル (スワップ スペース) 内の一部のスペースを指します。
不正解です。
仮想アドレス (それ自体) には、バッキング ストアへのコンポーネントや参照はありません。
バッキング ストアの構成 (ページ ファイルなど) は、オペレーティング システムのカーネル (つまりソフトウェア) によって制御されます。
また、仮想メモリのメモリ内容は、ページ ファイルやスワップ領域に保持されない場合もあります。
変更されないプログラム コードはスワップ アウトする必要がなく、プログラム ファイルから再度取得できます。
メモリ マップ ファイルには、ページ ファイルやスワップ領域に重複して保存されることなく、直接アクセスされます。
したがって、仮想アドレスだけでは、物理メモリ マッピングを識別するには不十分な情報であり、バッキング ストア情報はさらに不十分です。
しかし、CPU は仮想アドレスを生成し、その仮想アドレスは常にメモリ (RAM) + ページ ファイル (スワップ スペース) 内のアドレスを指しているため、メモリにもページ ファイルにも存在しないディスクからプログラムがどのようにロードされるのでしょうか。
プログラム (または任意のファイル) は、ファイルシステム インターフェイスと基礎となるブロック デバイス インターフェイスを使用して、ファイル名でアクセスされます。
周辺デバイスからのデータは、(メイン) メモリ アクセスではなく、入出力命令/操作を使用して転送されます。I
/O 操作の概念は、メモリ マップ I/O の実装によって不明瞭になります。メモリ マップ I/O では、デバイス レジスタは、I/O (またはポート) 空間のアドレスではなく、メモリ空間の特別なアドレスを使用してアクセスされます。
デバイス ドライバーは、カーネル内の低レベル ソフトウェアであり、読み取りおよび書き込み操作でこのようなデバイスの複雑な処理を行います。
これらは、単純な Q&A 形式での簡潔な説明には適さない、基本的なデジタル コンピュータ アーキテクチャの概念です。
そのアドレスの名前。
大容量ストレージ デバイス (HDD や SSD など) (別名ブロック デバイス) は、LBA (論理ブロック アドレス) (別名セクター番号) を使用してデバイス レベルでアクセスされます。各 LBA は、通常 512 バイトの固定サイズ データの論理ブロックを参照します。
当初、私は論理アドレス/仮想アドレスはハードディスク内の物理メモリ位置を指すアドレスであると考えていました。
不正解です。
大容量ストレージ デバイス (HDD や SSD など) は、LBA (論理ブロック アドレス) を使用してデバイス レベルでアクセスされます。
より上位レベルでは、ファイル システムはファイル システム割り当て単位のアドレス (クラスター番号など) を使用してファイルの内容を参照します。ファイル システムは、ファイル名とディレクトリでファイルを参照することで整理を提供します。
さらに上位レベルでは、ボリュームまたはドライブ管理によって、どのパーティションとファイル システムがアクセス可能かが処理されます。
LBA と仮想メモリ アドレスの間には、固定された関係や接続はありません。
バッキング ストアの内容 (ページ ファイルなど) と仮想メモリの関係は、プロセス情報やページ テーブルなどの情報を使用してカーネルによって制御されます。
最新の仮想メモリの実装のほとんどは固定サイズのページを使用しますが、他の方式も可能であることに注意してください。