メモリ管理用語の混乱(Linux)

メモリ管理用語の混乱(Linux)

私は私の記事の読者が何かを誤解するのを避け、毎回長いフレーズを使用するのを避けるために、「モノの命名」(Linuxのメモリ管理に関して)のより良い方法を知りたいと思います。

  • ファイルのバックアップをリサイクルする場合は、その内容をディスクから再度検索できるため、廃棄できるページのことです。ただし、「file-backed = ページのリサイクル時に破棄される可能性がある」という意味に焦点を当てると、ページのリサイクル時にページを廃棄できる特別なケースがあるかどうかはわかりませんが、それでもファイルのサポートはできません。尊敬される。特別なゼロページを考えてみてください。リサイクルはできませんが、内容は「一定」です。仮想ページがゼロページにマッピングされている場合は、情報を失うことなく「再マッピング」できるため、安全に「マッピング解除」できます。 「ページリサイクル時に破棄される可能性がある」という主張がファイルバックアップページの概念とうまく一致しない場合がありますか?それとも実際にこれら2つの概念の間にifとonly ifがありますか?
  • アドレス可能範囲全体の仮想メモリと現在存在する仮想ページの仮想メモリを区別します。
  • 「マッピング」について:ページをマッピングするとは、新しい仮想ページを作成してアドレス指定可能なフルスコープのどこかに配置することを意味しますか、または「ページマッピング」が「ページの後ろに仮想ページページをRAMに配置すること」を意味します。しますか?」関連ページエラー"? ページがスワップアウトされ、再びRAMに移動する2番目のケースを指すために"ページマッピング"と言うのは正しいですか?ポイントします。
  • 物理ページ:具体的にはRAMのページを参照しますか、それとも物理的にどこか(RAMまたはディスク)に存在しますか?
  • 私はどこかのページに「マッピング」された仮想ページとどこかのページ自体を区別したいと思います。私は誰もマッピングしていない仮想ページを意味するために「未使用のページ」を使用するのが好きなので、ここで説明する状況は逆です。ところで、「使用されたページ」といえば、「最近の引用」とかそういう意味で理解できるのかもしれません。たとえば、ページ0にマップされた仮想ページは実際のページではなく、ページ0は実際のページですが、これら2つの概念の名前を正しく指定する方法がわかりません。
  • ページを区別したい共有するように設計実際の共有ページで。たとえば、.textバイナリ自体の一部にマップされるページです。このページは共有するように設計または潜在的な共有(つまり、個人的な意味ではありません。)しかし、実際に共有されるかどうかは、同じバイナリを実行する複数のプロセスがあるかどうかによって異なります。 「プライベート」と同じ:ページはプライベートまたは共有できますが、プライベートを意味します。たとえば、CoW仮想ページ(0ページにマップされた仮想ページ、またはa以降の親プロセスから継承された仮想ページ)は両方とも共有されますが、forkプライベートです。名前を使って2つのケースを区別する方法を知りたいです。
  • 匿名ページとファイルベースのページ:混乱のもう一つの原因です。次の状況を考えてみましょう。動的リンクライブラリは、実行時にプロセスに仮想的にマッピングされます。 RAMページはまだ割り当てられていません。ファイルには、いくつかのグローバル変数を含む.so8kBセクションがあります。.data一部のグローバル変数にアクセスした後、両方のページにRAMが割り当てられました。これは実際のファイルベースのページです(ページリサイクルの場合は、スワップに移動するのではなく破棄することができます)。一部の変数が変更され、2つのページがファイルから分離されて匿名になります(削除できなくなりました)。ただし、cat smapsファイルを参照する対応するアドレス範囲が表示されると(inodeは0とは異なり、ファイルパスが表示されます.so)、両方のページは匿名です(Anonymous出力フィールドsmapsは同じです8 kB)。ここで、「アドレス範囲」はファイルを参照しますが、そのページは現在のファイルにバックアップされません。 「ファイルを参照」するページまたは範囲、「ファイル内」であるページまたは範囲を区別する方法はありますか?それとも、過去の特定の時点で「ファイルベース」であったページが現在ファイルバックアップされている場合を区別する方法はありますか?

答え1

  • ファイルサポートこのページがファイルのページにマップされたことを示します。ファイルサポートページは、mmap()ファイル記述子を呼び出して生成されます。これはexec、プロセスがロードされると自動的に実行され(テキストセグメントは実行可能ファイルによってサポートされます)、共有ライブラリをリンクするときに動的リンカーによって実行されます。

  • ページのリサイクル時に廃棄できるかどうかを示す用語は次のとおりです。そしてきれい。ディスクの最後のページ以降、ダーティページが変更されたため、ディスクに書き直す必要があります。きれいなページは簡単に廃棄できます。これは、ファイルがサポートされているかどうかには関係ありません。スワップサポートページも汚れたり、きれいになることがあります。ファイルがサポートするページがダーティになる可能性があります。これは、メモリマッピングを使用してファイルが更新される方法です。

  • 仮想メモリさまざまな方法で使用できます。デフォルト定義は、プロセスが物理RAMよりも多くのデータにアクセスできるようにする自動メモリ管理システムです。これは違う交換、結合されたメモリがRAMよりも大きい複数のプロセスがあるかもしれませんが、単一のプロセスは依然として物理RAMに制限されています。最近は一般的ではありませんが、プロセスを切り替えるたびに、プロセスのアドレス空間全体がディスクとRAMの間にコピーされます。ラム。

  • 仮想メモリ実装された物理RAMではなく、プロセスの仮想アドレス空間を参照するためにも使用されます。ユーザーモードプロセスは通常、仮想メモリにのみアクセスできます。物理メモリは、オペレーティングシステムとCPUのメモリ管理コンポーネントによって処理されます。

  • そして仮想メモリ時には、仮想メモリサブシステムが管理するすべてのメモリを参照するために使用されます。ディスクスペースが今ほど安くなかった時代には「仮想メモリが枯渇した」状況がよく発生しました。スワップパーティションは、ファイルがサポートされていないすべてのメモリを収容するのに十分な大きさではありませんでした。

  • マッピング仮想メモリページをディスクページに関連付けることを意味します。ファイルサポートページの場合、ファイルの対応するページにマップされます。匿名ページはページ交換にマップされます。後者は通常透明であるため、ファイルでサポートされているページを指すために主に用語を使用しますmmap()

  • 実際のページ通常、RAMページと区別するためにRAMページを表します。仮想ページ

  • 「どこかにあるページに「マッピング」された仮想ページとどこかにあるページ自体を区別したいのですが、それに適した用語があるかどうかはわかりません。

  • 「共有したいページと実際に共有しているページを区別したい」共有可能。もともと共有されたページの場合、fork()これより良いものはないと思います。プライベート。もともと共有された場合、これはCOWを意味します。

  • 「匿名性とファイルサポートページ」。この.dataセクションはマッピングに使用できますMAP_PRIVATE。前述のように、これはCOWを意味します。したがって、最初はファイルのバックアップですが、汚れた場合は匿名ページにスワップするようにマップされます。

関連情報