いくつかのファイル記述子fdでmmapを使用すると、read()への一般的な呼び出しはファイルのメモリマップがあることを「認識」し、メモリから直接読み込みますか?
mmap()の後にmlock()を使用するとどうなりますか?ファイルの後続の読み取り()操作では、ディスクにアクセスする必要はないと言うのは正しいですか?
答え1
私はそれが「認識」が何を意味するかに依存していると思います。
read()
■システムコールが現在の場所から始まるファイルの内容をプログラムによって指定されたメモリバッファにコピーするように求めるカーネルに対する要求である限り、これread()
は通常のファイルによってかどうかにかかわらず同じ方法で行われます。メモリは同時にファイルにマップされます。 「認識」はありません。
これで、ファイルがmmap()
edであればread()
パフォーマンスの最適化が達成される可能性が高くなります。たとえば、ファイルがread()
最初の場合、読み取ったファイルの一部がすでにページキャッシュにある可能性があるため、メモリマップへの後続のアクセスはディスクから再度アクセスする必要はありません。あるいは、逆にページングされたメモリマップが存在する場合、後続のメモリマップはread()
ディスクに再度アクセスする必要はありません。したがって、ある意味では、お互いを考慮してmmap()
「認識」することもできます。read()