1

Mac OS X で実行する Fortran 90 プログラム (gfortran を使用してコンパイル) を作成しています。13 個のデータ配列があり、それぞれ約 0.6 GB のデータで構成されています。一度にメモリ内の 13 個のアレイすべてを使用するため、基本的に 8 GB をすべて使用しようとしていますが、他のシステムの要求を考慮すると、これは不可能であることがわかっています。したがって、配列がスワッピングの対象になることはわかっています。私が知らないのは、これがオペレーティングシステムによってどのように管理されているかです。特に、

OS は、他のデータ構造のためのスペースを確保する必要がある場合、データ構造全体 (配列など) をスワップアウトしますか? それとも、ページごとにスワップアウトしますか? つまり、配列のどの部分が最後にアクセスされたかに基づいて、部分的な配列をスワップアウトしますか?

その答えによって、配列をどのように編成するかが決まるかもしれません。部分的な配列を交換できる場合は、すべてを 1 つの巨大な配列に格納し (必要な 13 のサブ配列から選択するためのインデックスを使用)、OS がすべてを効率的に管理することを信頼できます。それ以外の場合は、使用可能な物理メモリ内にそれぞれが快適に収まるように、個別の個別の配列を保持する可能性があります。

4

2 に答える 2

3

オペレーティングシステムは通常、ユーザーメモリ内の構造(配列など)を認識しません。Mac OS Xを含め、私が知っているほとんどのオペレーティングシステムは、ページごとにメモリを交換します。

于 2012-12-11T22:24:10.910 に答える
0

このプロセスはしばしば誤って swapping と呼ばれますが x86 および多くの最新のアーキテクチャでは、OS がページングを実行します。まだスワップデバイスと呼ばれるものに (主に歴史的な理由による)。各プロセスの仮想メモリ空​​間はページに分割され、プロセス ページ テーブルと呼ばれる特別なテーブルが、仮想メモリ内のページと物理メモリ内のフレーム間のマッピングを保持します。各ページは、マップすることもマップしないこともできます。さらにマップされたページが存在する場合と存在しない場合があります。マップされていないページにアクセスすると、セグメンテーション違反が発生します。存在しないページにアクセスするとページ フォールトが発生し、OS によってさらに処理されます。スワップ デバイスからページが取得され、物理メモリ内のフレームにインストールされます (利用可能な場合)。標準のページ サイズは、x86 および最近普及しているほとんどすべてのアーキテクチャで 4 KiB です。また、最新の MMU (メモリ管理ユニット、多くの場合、CPU の不可欠な部分) はヒュージ ページをサポートします (例:

そのため、ページングは​​データ構造と比較して非常に細かく設定されており、多くの場合、OS がそれを行う方法をまったく制御できないか、まったく制御できません。<sys/mman.h>それでも、ほとんどの Unices では、ヘッダー ファイルで利用可能な C API を使用して、メモリ マネージャーに指示とヒントを与えることができます。メモリの特定の部分をロックして、OS がその部分をディスクにページアウトしないようにする機能があります。ページを出し入れする方法を最適化できるように、特定のメモリ アクセス パターンが予想されることを OS に通知できる関数があります。これらを明確に開発されたデータ構造と組み合わせて、ページングをある程度制御し、特定の OS の最高のパフォーマンスを得ることができます。

于 2012-12-12T11:27:48.373 に答える