カーネルは使用するバッファをどのように決定しますか?

カーネルは使用するバッファをどのように決定しますか?

カーネルがディスクブロックにアクセスすると、デバイスブロック番号の適切な組み合わせでバッファを検索します。

この文章は「The Design of the Unix Operating System」という本からのものです。したがって、私の質問は、カーネルがどのバッファで動作するかを決定し、そのバッファのデバイスブロック番号をどこで取得するかです。

ベストアンサー1

あなたの質問は、データがすでにバッファにある場合、または新しいバッファを割り当てる必要がある場合です。

デバイスブロック番号は、ファイルシステムをマウントするために使用されるデバイスファイル(たとえば、Linuxの/dev/sda1またはBSDの/dev/hd0a)から来ます。バッファを使用するかどうかにかかわらず、デバイス番号が必要です。バッファは、同じデータを再読み込みする時間を節約するキャッシュです。デバイス内のブロック番号は、ファイルシステムのレイアウトによって決まります。ファイルシステムの形式の詳細については、本のこのセクションを参照してください。ディレクトリ、inode、直接および間接ブロックなどの説明があります。

したがって、カーネルが必要なブロックを決定したら、メモリ内のバッファをチェックして必要なブロックを見つけます。存在する場合、読み取り操作は必要なく、データはすぐに返されます。

ブロックの内容がメモリにない場合、カーネルはブロックの内容が近い将来使用されないことを望むバッファを選択します。これは通常最も最近使用されたバッファです。

おすすめ記事