2016-03-23 16 views
2

基本的にUNIXに、read()write()機能は、非バッファI/O、バッファリングされていないread()/ write()操作でバッファキャッシュが使用されるのはなぜですか?

であり、I/Oバッファリングされている標準I/Oがあります。

しかし、read()write()機能は、実際のI/O(実デバイスへのI/O)を行う前に、カーネル内にあり、実際のI/Oがバッファキャッシュを使用して起こるバッファキャッシュを使用しています。それはバッファを使用しています。

I/Oがバッファされていないと聞きましたが、char-by-charで実際のデバイスにI/Oが発生したことを意味します。

はその後、なぜread()write()機能は、それがバッファキャッシュを使用しているにもかかわらず、非バッファI/Oがありますか?

+1

SUSv4では、 'read'と' write'がバッファリングされていなければならないと指定していません。[read](http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html)、[write] //pubs.opengroup.org/onlinepubs/9699919799/functions/write.html) –

+1

'read()'と 'write()'はバッファリングされていないという考えをどこから得ましたか? –

+0

さらに、 'sync'呼び出し([sync](http://pubs.opengroup.org/onlinepubs/9699919799/functions/sync.html))が存在します。 –

答えて

3

基本的に「バッファリング」という用語は、「カーネルに出入りするときにデータが格納される場所」を意味します。つまり、各I/Oコールに対して1つのシステムコールを行わないようにします。

データでカーネルが何をするのかは、標準ライブラリが大いにできることではありません。

1行うことが可能であろう:標準ライブラリのレベルでの読み取り/書き込み呼び出しの1のマッピングを(すなわちfread()や友人)基本となるファイルディスクリプタのread()/write()呼び出しに。バッファリングという用語は、ではなく、であることを示しています。

1

マニュアルで「バッファリングされていない」とは、ユーザー空間のバッファリングを指します。カーネル空間のバッファリングは実装によって異なりますが、通常、ハードウェアポート(GPIO)を除くほとんどのデバイスはバッファリングされています(ディスク、ソケット、USBなど)。

関連する問題