Raw I/O はドライバーが提供するサービスの一部またはほとんどをバイパスしますか?

Raw I/O はドライバーが提供するサービスの一部またはほとんどをバイパスしますか?

オペレーティングシステムの概念(Abraham Silberschatz、2012年9月9日に作成)

生の入力/出力すべてのファイルシステムサービスのバイパス、ファイルI / O要件ページング、ファイルロック、プリパッチ、スペース割り当て、ファイル名、ディレクトリなどがあります。

...

残念ながら、オペレーティングシステムサービスなし次に、このデバイスで実行します。

Raw I/O もドライバが提供するサービスの一部またはほとんどをバイパスしますか?

Raw I/Oでは、ドライバが提供するサービスの種類をバイパスしますか?スティーブンを理解したらここそしてここ正確に言えば、ネイティブI / Oは順番にのみアドレス指定できるデバイスにドライバが提供するランダムアクセスをバイパスせず、代わりにドライバが提供するバッファ/キャッシュをバイパスします。

デバイスドライバをよりプリミティブでサービスが少ないドライバに変更しますか?

open()で生のI / Oを実行できますO_DIRECT

ありがとうございます。

答え1

私は彼がO_DIRECTのようなものを意味するとは思わない。私の考えでは、彼は/ dev / sdaのようなブロックデバイスにアクセスすることを意味します。 /dev/sdaを開くと、「ファイルロック、事前インポート、スペース割り当て、ファイル名、ディレクトリ」がバイパスされます。したがって、ファイルシステムは迂回しますが、ブロックデバイスドライバは迂回しません。

答え2

O_DIRECTキャッシュをバイパスします。ドライバーをバイパスしません。

ブロックデバイスで使用すると、カーネルO_DIRECT「バッファキャッシュ」をバイパスします。 「バッファキャッシュ」はドライバの一部ではありません。

O_DIRECT通常のファイル(デバイス特殊ファイルではないファイルなど)で使用するのは、カーネル「ページキャッシュ」をバイパスする要求です。 「ページキャッシュ」はファイルシステムの一部ではなく、ドライバの一部でもありません。

以前のオペレーティングシステムでは、ファイルIOはページキャッシュとバッファキャッシュの2つの場所にキャッシュできます。この場合、O_DIRECT両方のキャッシュをバイパスする必要があります。

Linuxや他の多くの最新のUnixファミリーシステムでは、バッファキャッシュは実際にはページキャッシュに依存する可能性があります。これは、統合バッファキャッシュを有するものとして説明される。重要な機能は、2つの異なる場所でファイルIOをキャッシュしないことです。したがって、メモリをより効率的に使用します。人々ごとに互いに矛盾する定義を使用しているようです。一部の人々はバッファキャッシュがなく、ページキャッシュのみがあると言います。

オペレーティングシステムが2つの異なる場所でファイルIOをキャッシュするのを防ぎますが、ファイルIOに使用されるキャッシュがブロックデバイスファイルにアクセスするときに使用されるキャッシュと一致することを保証できない場合があります。


(ページキャッシュとディレクトリキャッシュを囲むラッパーにすぎないため、O_DIRECTLinuxでは機能しません。より良い互換性のために成功が許可され、単に無視されることが示唆されました。したがって、これがページキャッシュのバイパスを保証するとは言えません。)tmpfstmpfstmpfsO_DIRECTO_DIRECT

関連情報