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

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

[[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%下落、今年中国で開始されたばかり

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

推薦する

SEO 外部リンク - ソフトウェア外部リンクと手動外部リンク

ウェブサイトを構築する友人は皆、外部リンクの重要性を知っているので、ウェブサイトの最初から外部リンク...

友好的なリンク交換を利用してウェブサイトの関連性を高める方法

ウェブサイトの関連性は、ウェブサイトで注目すべき領域であり、ユーザーエクスペリエンスの焦点でもありま...

ウェブマスターネットワークからの毎日のレポート:出会い系サイトの生死状況 Alibaba Cloud Searchがリリースされました

1. 春節期間中、宅配便会社は荷物が多すぎるため、通常に戻るまで1週間ほどかかる「大晦日にネットで服...

アメリカの配車サービスであるUberは、どのようにして4年間で時価総額を180億ドルにまで成長させたのでしょうか?

海外メディアの報道によると、アメリカの配車サービス「ウーバー」の評価額はわずか4年でゼロから驚異の1...

Weitaoは本日、パブリックベータ版として正式にリリースされました。Taobao IDで登録できます。

新浪科技は11月1日午後、アリババのワイヤレスビジネスグループがWeitaoプラットフォームの公開テ...

情報フロー広告チャネルは数多くありますが、自分に合ったプラットフォームをどのように選べばいいのでしょうか?

フィード広告は、ソーシャル ネットワークやオンライン メディア上でユーザーが読みたい情報の中に散りば...

【オープンコンピューティングマスタークラス】オープンコンピューティングにおける「オープン」とは何か

中国では新たなインフラ政策が積極的に推進されており、データセンター、クラウドコンピューティング、ビッ...

中小企業にとって、適切なクラウドを利用することが重要である。

中小企業がクラウドコンピューティングを採用する理由は何でしょうか?中小企業にとってクラウドサービスで...

企業向けショッピングモールシステム構築の3つのポイントを簡単に説明します。

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています以前は、シ...

百度、外部リンクツールを拒否「味気ないし役に立たない」

恋をしている人は、愛する人に全身全霊で感動します。私が言いたいのは、SEO 担当者は Baidu に...

概要: VPS チュートリアル、VPS 指導、初心者が VPS を使用して Web サイトを構築する方法をすぐに学習

Linux VPS の入り口に立っていて、まだ入っていない初心者に宛てたメッセージ: 初心者が Li...

この記事を読んだ後でも、あなたのお母さんはあなたが Docker を使い始められないのではないかと心配し続けるでしょうか?

[51CTO.com からのオリジナル記事] 先週、ガールフレンドが突然ペットを飼いたいと言いました...

ウェブページの信号対雑音比の改善: コードとコンテンツの最適化とノイズ除去

ウェブページの信号対雑音比とは、ウェブページ内のテキストコンテンツと、これらのテキストを生成すること...

cloudcone - 5.8% 割引コード/MC コンピュータ ルーム/KVM/時間制支払い/Alipay

cloudcone、5 月のプロモーション: MC データセンター ロサンゼルス データセンターの ...

エッジコンピューティングとクラウドコンピューティングを併用する 4 つのメリット

長年の開発と進歩を経て、今日ではコンピューティング戦略は大きく変化しました。より多くの企業が AI ...