Message types
Architecturally, there are two categories of messages that a resource manager will receive:
- connect messages
- I/O messages
A connect message is issued by the client to perform an
operation based on a pathname (e.g., an io_open
message). This may involve performing operations such as
permission checks (does the client have the correct
permission to open this device?) and setting up a
context for that request.
An I/O message is one that relies upon this context (created
between the client and the resource manager) to perform
subsequent processing of I/O messages (e.g., io_read
).
There are good reasons for this design. It would be
inefficient to pass the full pathname for each and every
read() request, for example. The
io_open
handler can also perform tasks that we
want done only once (e.g., permission checks) rather than
with each I/O message. Also, when the read() has
read 4096 bytes from a disk file, there may be another 20
megabytes still waiting to be read. Therefore, the
read() function would need to have some context
information telling it the position within the file it's
reading from.