Linuxカーネル内でファイルにアクセスするより基本的な方法ですかopen()
?mmap()
「基本」とは、「最終的に別の関数を呼び出すのか、それとも別の関数の単純なヘルパー関数なのか」を意味します。
スタックネットワークには、これら2つの機能のパフォーマンスに関する質問がたくさんあります。この質問の目的は、まずLinuxカーネル内で何が起こっているのかを理解することです。open()
呼び出しmmap()
または本質的に実装されたヘルパー機能はありますかmmap()
?それとも、デフォルトで実装されているいくつかのヘルパー関数をmmap()
呼び出すか呼び出しますか?open()
open()
質問のポイントは、これら2つのシステムコールが有効かどうかです。オリジナル他のものか一方が別のものの「利便性」かどうか。
答え1
参考にしてくださいマッピング(2)しばしば一つが欲しいファイル記述子一般的に構成オープン(2);この意味でopen
より根本的です。また参考にしてください仮想アドレス空間一部プロセス合格できるだけでなくmmap
、、munmap
保護(2)しかし、他人を通してシステムコール(含む実行(2);あなたはまた見ることができますshm_概要(7))
しかし、Linuxカーネルはそうではありません。使用 mmap
またはopen
これを提供して実装します(アプリケーションレベルの場合)。ユーザースペースプログラム)。
しかし、Linuxカーネル管理するページキャッシュこれはより基本的で関連性が高いです。両方 システムコール。また、見ることができますLinuxAteMyRamそして考慮おそらく使用クレイジーウェス(2)、posix_fadvise(2)、先読み(2)ページ・キャッシュ・サブシステムにメッセージを表示します。
これら2つのシステムコールは基本的に異なりますか?
すべてのシステムコール(リスト:システムコール(2)...) 違う。
また読んでください高度なLinuxプログラミングそしてオペレーティングシステム:3つの簡単な部分(どちらも無料でダウンロードできます)。
答え2
関数名を指定しているので、呼び出しmmap()
ファイルにfdが必要であることをすでに知っているとします。 fdは通常(常にではありませんが)使用されますopen()
。
read()
O_DIRECTを使用しない限り、「統合バッファキャッシュ」がwrite()
ありますmmap()
。しかし、これは各アプローチのパフォーマンスの長所と短所を無視するので、それほど有用な答えではないようです。
本を入手することに加えて、Googleは次のことを見つけました。mmapと一般的なIOとページキャッシングの簡単な説明。パフォーマンス言及なしコストmmap()
~によるとリヌス・トバルズの言葉を引用するあなたはそれを見たでしょう。