Design

Some aspects of the design are apparent from the Filesystems appendix; I'll just note the ones
that are different.

The design of the RAM-disk filesystem was done in conjunction with the development,
so I'll describe the design in terms of the development path, and then summarize the
major architectural features.

The development of the RAM disk started out innocently enough.
I implemented the io_read() and io_write() functions to read from a
fixed (internal) file, and the writes went to the bit bucket.
The nice thing about the resource manager library is that the worker
functions (like io_read() and io_write()) can be written
independently of things like the connect functions (especially c_open()).
That's because the worker functions base all of their operations on the OCB and the
attributes structure, regardless of where these actually come from.

The next functionality I implemented was the internal in-memory directory structure.
This let me create files with different names, and test those against the
already-existing io_read() and io_write() functions.
Of course, once I had an in-memory directory structure, it wasn't too long before
I added the ability to read the directory structure (as a directory) from within
io_read().
Afterward, I added functionality like a block allocator and filled in the code for
the io_write() function.

Once that was done, I worked on functions like the c_open() in order to
get it to search properly through multiple levels of directories, handle things like
the O_EXCL and O_TRUNC flags, and so on.
Finally, the rest of the functions fell into place.