40 lines
1.1 KiB
Plaintext
40 lines
1.1 KiB
Plaintext
.SH
|
|
The read-ahead processes
|
|
.PP
|
|
There are a set of file system processes,
|
|
.CW rah ,
|
|
that wait for messages consisting of a device and block
|
|
address.
|
|
When a message comes in,
|
|
the process reads the specified block from the device.
|
|
This is done by calling
|
|
.CW getbuf
|
|
and
|
|
.CW putbuf .
|
|
The purpose of this is the hope that these blocks
|
|
will be used later and that they will reside in the
|
|
buffer cache long enough not to be discarded before
|
|
they are used.
|
|
.PP
|
|
The messages to the read-ahead processes are
|
|
generated by the server processes.
|
|
The server processes maintain a relative block mark in every
|
|
open file.
|
|
Whenever an open file reads that relative block,
|
|
the next 110 block addresses of the file are sent
|
|
to the read-ahead processes and
|
|
the relative block mark is advanced by 100.
|
|
The initial relative block is set to 1.
|
|
If the file is opened and
|
|
only a few bytes are read,
|
|
then no anticipating reads are performed
|
|
since the relative block mark is set to 1
|
|
and only block offset 0 is read.
|
|
This is to prevent some
|
|
fairly common action such as
|
|
.Ex
|
|
file *
|
|
.Ee
|
|
from swamping the file system with read-ahead
|
|
requests that will never be used.
|