私はいくつかの実験を通じて Linux カーネルを学んできました。最近、一方のプロセスのページをもう一方のプロセスの vma 構造に挿入することで、2 つのユーザー空間プロセス間でページを共有できるかどうか疑問に思っています。 addr を netlink 経由でカーネルに送り返します。挿入はドライバ モジュールで行われます。このテストの理由は、2 つのプロセスが互いに直接通信していない可能性があり、読み取り専用メモリの重複ページが原因である可能性があるためです。効率と冗長性を考慮すると、悪い選択です。
そして、いくつかの調査の後、vm_insert_page 関数と従来の remap_pfn_range を見つけました。ただし、lxr には次のように書かれています。
/** 2020 * vm_insert_page - ユーザー vma に単一ページを挿入
2021 * @vma: マップ先のユーザー vma
2022 * @addr: このページの対象ユーザーアドレス
2023 * @page: ソースカーネルページ
2024年 *
2025 * これにより、ドライバーは割り当てられた個々のページを挿入できるようになります
2026 * ユーザー vma に。
2027年 *
2028 *ページは、きれいな個別のカーネル割り当てでなければなりません。"
これは、既存のページを別の vma に挿入することはできないということですか?この関数は、新しく作成されたページでのみ呼び出すことができますか?ページは参照カウント番号で共有できるといつも思っていました。