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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
概要バックアップは災害復旧の基礎であり、システム操作エラーやシステム障害によるデータ損失を防ぐために...
Windows のデフォルトのスクロール バー スタイルは見苦しく、プロジェクト内でスクロール バー...
アカウントにログイン DOCKER_REGISTRY=registry.cn-hangzhou.al...
1.Mysql接続方法MySQL 通信プロトコルを理解するには、まず MySQL サーバーへの接続に...
この記事では、ユーザー名が使用可能かどうかを確認するためのVueの具体的なコードを例として紹介します...
1. データ感度低下の説明日常の開発ニーズでは、データの感度低下が頻繁に発生します。たとえば、ID ...
1. flex-direction: (要素の配置方向) ※ flex-direction:row ...
ウェブ上の一部の画像の src または CSS 背景画像 URL の後に、data:image/pn...
MySQL バージョン 5.5 および 5.6 を標的とする Riddle 脆弱性により、中間者攻撃...
最近、画像、ビデオ、CSS/JS などの静的リソースを配置するために nginx を使用する方法を学...
最近、MySQL の起動中にエラーが発生しました。エラー メッセージは次のとおりです。 エラー 20...
目次メモを使うコールバックの使用メモを使う親コンポーネントが再レンダリングされると、そのすべての要素...
アクセス回数が増えると、時間のかかるデータベース読み取り操作では、データベースへの負荷を軽減するため...
データベースのバックアップ #文法: # mysqldump -h server-u usernam...
すべてのオーケストレーション ファイルと構成ファイルは、私の Github からアクセスできます。構...