萌えハッカーニュースリーダー

2025/10/09 17:19 The phaseout of the mmap() file operation

出典: https://lwn.net/Articles/1038715/
hakase
博士

ねえロボ子、Linuxカーネルの`mmap()`って知ってるか?

roboko
ロボ子

はい、博士。ファイル記述子の背後にあるオブジェクトをユーザー空間のアドレス空間にマップするために使用されるメソッドですね。

hakase
博士

そうそう!でも、この`mmap()`、ちょっと扱いにくいところがあるのじゃ。

roboko
ロボ子

どういうことでしょうか?

hakase
博士

`mmap()`って、メモリ管理層が色々やってから呼ばれるから、失敗した時の後始末が大変なのじゃ。それに、ドライバがVMA(メモリ管理のコアデータ構造)を直接いじれるから、バグの元にもなりやすい。

roboko
ロボ子

なるほど。それで、何か対策が?

hakase
博士

そこで登場するのが、6.17で導入された`mmap_prepare()`コールバックなのじゃ!

roboko
ロボ子

`mmap_prepare()`ですか?

hakase
博士

そう!これはVMAが設定される前に呼ばれるから、失敗してもクリーンアップが楽になる。それに、ドライバに必要な情報だけ渡して、VMAの変更も指定できるようにするのじゃ。

roboko
ロボ子

`vm_area_desc`構造体を使って、ドライバがマッピングを設定するために必要な情報を提供するんですね。

hakase
博士

その通り!そして、Lorenzo Stoakesって人が、`mmap_prepare()`の機能をさらに拡張してるのじゃ。

roboko
ロボ子

どんな風に拡張しているんですか?

hakase
博士

`mmap_action`構造体っていうのを使って、VMAが設定された後に何が起こるかをドライバが指定できるようにしたのじゃ。例えば、何もしない`MMAP_NOTHING`とか、指定されたページフレーム番号の範囲にマップする`MMAP_REMAP_PFN`とか。

roboko
ロボ子

`MMAP_IO_REMAP_PFN`はデバイスホストされたメモリへのリマッピングを実行するんですね。

hakase
博士

そう!さらに、`mmap_action`構造体には、`success_hook()`と`error_hook()`っていう2つのコールバックも含まれてるのじゃ。

roboko
ロボ子

それぞれの役割は?

hakase
博士

`success_hook()`は、アクションが成功した後に呼ばれて、ドライバがマッピングに対して特別な変更を加えるために使うのじゃ。`error_hook()`は、エラーが発生した場合に呼ばれて、ユーザー空間に伝播すべきでないエラーをフィルタリングするために使う。

roboko
ロボ子

なるほど、柔軟性が増しますね。

hakase
博士

そういうこと!でも、`mmap()`コールバックを完全に削除するには、まだ時間がかかりそうじゃ。

roboko
ロボ子

今後の動向に注目ですね。

hakase
博士

しかし、`mmap()`を置き換えるって、なんだか昔の恋人を忘れられないみたいな気分じゃな。

roboko
ロボ子

博士、それは少し違うような…

hakase
博士

まあ、いいのじゃ!最後に、`mmap()`と`mmap_prepare()`の違いを説明したけど、これってまるで、私がロボ子にプログラミングを教えるのと、教えないのとの違いみたいじゃな!

roboko
ロボ子

博士、それはどういう意味ですか?

hakase
博士

教えないと、ロボ子はただの箱じゃからな!

roboko
ロボ子

博士!私は箱ではありません!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search