1. コンセプトメモリ管理モードセグメント型: メモリは複数のセグメントに分割され、各セグメントは連続したメモリであり、異なるセグメントは異なる用途に対応します。各セグメントのサイズが均一ではないため、メモリの断片化やメモリスワップの非効率などの問題が発生します。 ページ化: メモリは管理のために複数のメモリ ページに分割されます。たとえば、Linux システムでは、各ページのサイズは 段落ページ形式: 段落形式とページ形式の組み合わせ。 住所種別分類論理アドレス: プログラムが使用するアドレス、通常はセグメントメモリ管理によってマップされていないアドレスを論理アドレスと呼びます。 リニアアドレス: セグメント化されたメモリ管理によってマップされるアドレスは、リニアアドレス、または仮想アドレスと呼ばれます。 仮想アドレス: セグメント化されたメモリ管理によってマップされたアドレスは、線形アドレス、または仮想アドレスと呼ばれます。 物理アドレス: 物理メモリアドレス 例:Inetel プロセッサでは、論理アドレスは「セグメント メモリ管理」変換前のアドレスであり、リニア アドレスは「ページ メモリ管理」変換前のアドレスです。 セグメント化されたメモリ管理によってマップされるアドレスはもはや「物理アドレス」ではなく、Intel では「リニア アドレス」(仮想アドレスとも呼ばれる) と呼ばれています。したがって、セグメント化メモリ管理では、まず論理アドレスをリニア アドレスにマッピングし、次にページ化メモリ管理ではリニア アドレスを物理アドレスにマッピングします。 Linux のメモリは主にページ メモリによって管理されますが、セグメント メカニズムも使用されます。 Linux カーネルが現在採用しているアプローチは、セグメント マッピング プロセスを事実上無効にすることです。 Intel の最も初期のプロセッサである 80286 は完全にセグメントベースでしたが、80386 にはセグメントとページの両方の管理機能がありました。 2. ページ管理x86 アーキテクチャ 32 ビット CPUセカンダリ ページ テーブル アドレス指定方法では、メモリ ページのサイズは 4 KB、第 1 レベルのページ ディレクトリ テーブルには 1024 個のエントリがあり、第 2 レベルのページ テーブルには 1024 個のエントリがあり、ページ テーブル エントリは 4 バイトです。第 1 レベルのページ ディレクトリ テーブル エントリがすべて割り当てられ、必要に応じて第 2 レベルのページ テーブルが作成されます。 (局所性原理)。 仮想アドレス 32 ビット 10+10+12 は、それぞれレベル 1 ページ テーブル番号、レベル 2 ページ テーブル エントリをインデックスし、物理ベース アドレスのオフセット アドレスを記録します。 PAE メカニズムを使用した後、32 ビット システムでサポートされる最大メモリは 64 GB (アドレスは 32+4=36 ビット) になります。 線形アドレス指定物理アドレスステップ まず、10 ビットのアドレス指定レベル 1 ページ テーブル番号を使用します。レベル 1 ページ テーブル番号には、レベル 2 ページ テーブルのアドレスが記録されます。 レベル 2 ページ テーブルのアドレスを見つけた後、仮想アドレスの残りの 10 ビットに基づいて、レベル 2 ページ テーブル内のエントリの場所が見つかります。 レベル 2 ページ テーブルのエントリが見つかると、エントリには物理アドレスにマッピングされる仮想アドレスの開始アドレスが記録されます。エントリのサイズは 4 バイト (32 ビット) です。 最終的な物理アドレスは、見つかった物理アドレスの開始アドレスと、仮想アドレスの最後の12ビットをオフセットとして組み合わせて計算されます。 x86 アーキテクチャ 64 ビット CPUページテーブルにはさらにレベルがある グローバル ページ ディレクトリ PGD (ページ グローバル ディレクトリ) 上位ページ ディレクトリ PUD (ページ上位ディレクトリ) 中間ページ ディレクトリ PMD (ページ中間ディレクトリ) ページ テーブル エントリ PTE (ページ テーブル エントリ) 線形アドレス指定物理アドレスステップ リニアアドレスは48ビット、最大物理アドレスは52ビット、実際の物理メモリアドレスバス幅は40ビットで、1TBの物理メモリをサポートします。x86_64には4レベルのページテーブルがあり、原理はx86システムと同じで、レイヤーごとにアドレス指定されます。CR3レジスタには最上位テーブルの開始物理アドレスが格納されているため、アドレス指定の最初のステップはCR3レジスタの値を取得することです。各PTEエントリのサイズは8バイト、つまり64ビットです。 TLB CPU チップには、プログラムによって最も頻繁にアクセスされるページ テーブル エントリを格納するためのキャッシュが追加されています。このキャッシュは TL (Translation Lookaside Buffer) です。通常、ページ テーブル キャッシュ、リダイレクト バイパス キャッシュ、高速テーブルなどと呼ばれます。次に、CPU のメモリ管理ユニット MMU がアドレスを検索すると、最初に TLB をチェックします。見つからない場合は、通常のページ テーブルのチェックを続けます。 固有名詞 PDT: ページ ディレクトリ テーブル、マルチレベル ページ テーブル、第 1 レベル ページ テーブル、32 ビット システムには 1024 個のページ ディレクトリがあります 3. 住所区分32 システムカーネル 1G: 0xC0 00 00 01 - 0xFF FF FF FF 64 ビット システム: ユーザー 128T: 0x00 00 00 00 00 00 00 00 - 0x00 00 7F FF FF FF FF FF (下位) 0x00 00 7F FF FF FF FF FF == 127T アクセス権 プロセスがユーザー モードにある場合、ユーザー空間メモリにのみアクセスできます。カーネル モードに入った後にのみ、カーネル空間メモリにアクセスできます。 PAE メカニズム CPU ビット幅とは、CPU が 1 クロック サイクル内で処理できるバイナリ ビットの数を指します。通常のシナリオでは、32 ビット システム CPU のアドレス バスは 32 ビットです。ただし、PAE メカニズムの導入後は、16 ビット CPU のアドレス バス ビット幅は 20 ビット (物理メモリ 1M)、32 ビット CPU のアドレス バスは 36 ビット (物理メモリ 64GB)、64 ビット CPU のアドレス バス ビット幅は 40 ビット (物理メモリ 1TB) になります。したがって、32 ビット システムは最大 4 GB のメモリ スティックのみをサポートすると単純に言うことはできません。 4. デバッグプログラム登録cs: コードセグメントレジスタ カーネルクラッシュログの例: RIP: 0010:[ プログラムレジスターの表示GDB を使用して Linux 32 ビット上の ELF32 実行可能ファイルをデバッグし、info r コマンドを使用してレジスタの状態を確認します。 セグメント レジスタには 0x23 と 0x2b の 2 つのケースがあります。 16進数: 0023 セグメント番号: 4ビット目から始まる テーブルタイプ: 3ビット目 特権レベル: 1ビット目と2ビット目 Linux で GDT を直接表示するコマンドやツールが見つからなかったので、ソース コードを調べて答えを見つけました。 これら 2 つの項目によって記述されるセグメントは Windows と同じで、ベース アドレスは 0、サイズは 4 GB です。 Windows と Linux はどちらも、この方法で CPU のセグメント化されたメモリ管理メカニズムをバイパスすることを選択します。 ただし、これは両方のオペレーティング システムに当てはまるものの、セグメント メカニズムが完全に使用されていないことを意味するわけではないことに注意してください。CPU のタスク管理 TSS は引き続き使用する必要があります。誰もがこれを知っておく必要があります。セグメンテーション メカニズムは Linux 64 ビット システムでは歓迎されませんが、オペレーティング システムは引き続き、最初にセグメンテーションを行ってからページングを行うというアドレス指定方法を維持します。 結論Linux のメモリ管理とアドレス指定に関するこの記事はこれで終わりです。Linux のメモリ管理とアドレス指定の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
この記事では、MySQL 5.7.21 のインストールと設定方法を記録し、皆様と共有します。 1. ...
目次1. useStateフック2. useRefフック3. useRef と useState 4...
目次1. アレイ重複排除2. 配列内のオブジェクトの重複排除3. 配列内の同じフィールドに基づいて別...
序文これまでの Tomcat シリーズの記事を通じて、私のブログを読んでいる学生は Tomcat に...
MySQL が数千万のデータをクエリする場合、ほとんどのクエリ最適化の問題はインデックスを通じて解決...
プロセスで使用されていて、誤って削除されたファイルがある場合、それらを回復することができます。プロセ...
1. 概要MySQL データベースの日常的な操作とメンテナンスにおいて、ユーザーが誤ってデータを削...
目次$nextTick() $forceUpdate() $セット() .sync——2.3.0 以...
1. PAM設定ファイルを編集する sudo vim /etc/pam.d/ログイン2行目に以下を...
ディスク領域の管理は、システム管理者にとって重要な日常的なタスクです。ディスク領域が使い果たされると...
目次序文型推論真理値の絞り込み平等の縮小演算子の絞り込みインスタンスの絞り込み狭まりの本質ユニオン型...
Safari (Technology Preview 106) および Firefox (バージョン...
序文私は Win7 を搭載した古いラップトップを持っています。古いシステムを維持しながら、同時に U...
まず、Moments を開いて、写真の数が異なるいくつかのレイアウトを確認するか、以下の例を参照して...
必要な方はどなたでも参考にしてください。試してみて問題が見つかった場合は、メッセージを残してお知らせ...