ユーザー モード プロセスは、仮想アドレスに対応する物理アドレスをどのように取得するのでしょうか?

ユーザー モード プロセスは、仮想アドレスに対応する物理アドレスをどのように取得するのでしょうか?

[[345236]]

一般的に、ユーザー プロセスは物理アドレスをまったく気にしないため、プロセス仮想アドレスに対応する物理アドレスをユーザー状態から取得する必要はありません。

ユーザーは、DMA がユーザー モードで実行されるシナリオ (DPDK など) など、いくつかのアプリケーション シナリオについて懸念する場合があります。各ページのメモリ使用量やスワップアウトの有無などをデバッグして分析するシナリオもあります。

ユーザー モードから仮想アドレスに対応する物理アドレスを取得するには、プロセスのページ テーブルを調べることはできず、権限もありません。幸いなことに、カーネルはページマップと呼ばれるインターフェースを提供しており、このインターフェースはハードウェア アーキテクチャとは何の関係もありません。 /proc/pid/ の下に pagemap というファイルがあります。各ページに対して 64 ビットの記述子を生成し、物理ページ フレーム番号または仮想アドレス ページに対応する SWAP 内のスペースを記述します。詳細については、次のドキュメントを参照してください。

linux/ドキュメント/管理者ガイド/mm/ページマップ.rst

この 64 ビットの説明は次のとおりです。

アーキテクチャが異なれば MMU やページ テーブル形式も異なりますが、ページマップ インターフェイスは特定のページ テーブル形式とは何の関係もなく、抽象化されていると言えます。

次に、スワップの影響を無視し (スワップがオフになっているか、ページが常にピン状態にあると仮定)、仮想アドレスを物理アドレスに変換する DPDK のコード セクションをコピーします。

  1. # phys_addr_t uint64_t を定義します
  2. #PFN_MASK_SIZE 8 を定義します
  3.  
  4. 物理アドレス
  5. rte_mem_virt2phy(定数 void *virtaddr)
  6. {
  7. int fd、戻り値;
  8. uint64_t ページ、物理アドレス;
  9. 符号なしロング virt_pfn;
  10. ページサイズ
  11. off_t オフセット;
  12.  
  13. /* 標準ページサイズ*/
  14. page_size = getpagesize();
  15.  
  16. fd = open ( "/proc/self/pagemap" 、 O_RDONLY);
  17. (fd < 0)の場合{
  18. ...
  19. }
  20.  
  21. virt_pfn = (符号なしlong)virtaddr / ページサイズ;
  22. オフセット = sizeof(uint64_t) * virt_pfn;
  23. (lseek(fd, offset, SEEK_SET) == (off_t) -1) の場合 {
  24. ...
  25. -1 を返します
  26. }
  27.  
  28. retval =読み取り(fd、&page、PFN_MASK_SIZE);
  29. 閉じる(fd);
  30. ...
  31.  
  32. /*
  33. * pfn(ページフレーム番号)はビット0~54です(
  34. * Linux ドキュメントpagemap.txt)
  35. */
  36. ((ページ & 0x7fffffffffffffULL) == 0)の場合
  37. -1 を返します
  38.  
  39. 物理アドレス = ((ページ & 0x7ffffffffffffffULL) * ページサイズ)
  40. + ((unsigned long)virtaddr % ページサイズ);
  41.  
  42. 物理アドレスを返します
  43. }

最後のステップは、キー計算プロセスです。

  1. 物理アドレス = ((ページ & 0x7ffffffffffffffULL) * ページサイズ)
  2. + ((unsigned long)virtaddr % ページサイズ);

page & 0x7ffffffffffffffULL はページ フレーム番号 (PFN) を取得し、それをページ サイズで乗算してこのページの開始の物理アドレスを取得し、次に virtaddr % page_size のページ オフセットを追加して最終的な物理アドレスを取得します。

実際に上記の関数を呼び出してアドレス変換を完了してみましょう。

  1. int main( int argc, char *argv[])
  2. {
  3. uint8_t *p = malloc(1024 * 1024);
  4.  
  5. *(p + 4096) = 10;
  6. printf( "virt:%p phys:%p\n" , p + 4096, rte_mem_virt2phy(p + 4096));
  7.  
  8. *(p + 2 * 4096) = 10;
  9. printf( "virt:%p phys:%p\n" , p + 2 * 4096, rte_mem_virt2phy(p + 2 * 4096));
  10. }

結果は次のとおりです。

  1. ~$ sudo ./a.out   
  2. 仮想:0x7f81e402a010 物理:0x2b601010
  3. 仮想:0x7f81e402b010 物理:0x3ceec010

カーネル モードでページマップ proc インターフェイスを実装するためのコードは、次の場所にあります。

  1. fs/proc/task_mmu.c

コア機能は、PTE を pagemap_entry に変換するプロセスです。興味のある方は、ぜひ読んでみてください:

ページマップ内のフラグがどのように設定されているかを知るには、赤い線の位置に特に注意してください。

この記事はWeChatの公開アカウント「Linux Reading Field」から転載したものです。以下のQRコードからフォローできます。この記事を転載する場合は、Linux Reading Field 公式アカウントまでご連絡ください。

<<:  AWSの機械学習クラウドサービスのインスタンスコストが18%下落、今年中国で開始されたばかり

>>:  プログラマーの精神修養への道 - 分散システムにおける最も重要なハブとなるかもしれない

推薦する

なぜあなたのウェブサイトの記事は掲載されていないのですか?王奇は100%明確な分析を持っています

1. 概要現在、多くのウェブマスターのウェブサイトは適切にインクルードされていないか、ウェブサイトの...

新人として、私はこのようなウェブサイトを作りました

私は沿岸の三級都市に住む小さなウェブマスターです。ウェブサイトの構築を始めたのは 2009 年です。...

Jumei は次の Vipshop または Dangdang でしょうか?

Jumeiは週末、米国での上場目論見書を提出し、財務データを公開した。美容業界の垂直型電子商取引企業...

企業ウェブサイトの重要性とは?次の点に気を付けることが答えです

関連性はウェブサイト計画の最優先事項になっていると思います。多くの場合、私たちは常に外部リンクを使用...

羅永浩のマーケティングハイライト:ユニークなハンマーになる

昨日、Hammerスマートフォン発表会に登場した羅永浩は、相変わらずの髪型、相変わらずの魅力的な声、...

クックはジョブズ時代のスタイルを変えた:アップルの幹部は頻繁に露出している

はじめに:海外メディアは金曜日、スティーブ・ジョブズ氏がアップルの責任者だった頃、アップルの幹部がイ...

Alibaba Cloud のコンピューティング能力がさらに飛躍しました: Stream Compute 2.0 が 1 秒あたり 1,000 万 QPS のピークに到達

10月12日、アリババグループの周景仁副社長は雲旗カンファレンスで、アリババクラウドのビッグデータコ...

ホスティングレビュー 2018年10月プレビュー

皆様日頃の応援ありがとうございます。3年前はまだ負け犬でしたが今月1日に結婚しました!だから、独身の...

Pinduoduoゲーム+電子商取引トラフィック転換戦略!

この記事では、 Pinduoduoのゲーミフィケーションセクションを例に、Pinduoduoのユーザ...

信頼できるオランダのVPSの推奨事項とオランダのサーバーの推奨事項

オランダはヨーロッパのデータセンターの中心地に位置しており、ヨーロッパ全体と非常に友好的な関係を築い...

2021年、中国の基礎クラウドサービス産業の市場規模は2,256億元に達した

今年、国内クラウドサービス市場規模は2,256億元と過去最高を記録した。感染症の流行によりオフライン...

ウェブマスターの経験:製品を作るには、力を蓄えてから開発することを学ぶ必要があります

インターネット製品の競争はますます激しくなっています。たとえあなたが今日業界の絶対的な王者であったと...

Google ストリートビューが「タイムマシン」機能を開始

ウォール・ストリート・ジャーナルによると、Google ストリートビューは世界中で新しい機能「タイム...

草の根ウェブマスターの戦場でロングテールキーワードをうまく活用する方法

クリックしてウェブマスターの統計情報を表示すると、ロングテール キーワードは、私たちが提案するメイン...