RAM-disk Filesystem
This resource manager is something I've been wanting to do for a long time.
Since I wrote the first book on QNX Neutrino, I've noticed that a lot of people still ask
questions in the various newsgroups about resource managers, such as
How, exactly, do I support symbolic links?
or How does the
io_rename() callout work?
I've been following the newsgroups, and asking questions of my own, and the result of this is the following RAM-disk filesystem manager.
The code isn't necessarily the best in terms of data organization
for a RAM-disk filesystem — I'm sure there are various optimizations that can be
done to improve speed, cut down on memory, and so on.
My goal with this chapter is to answer the detailed implementation questions
that have been asked over the last few years.
So, consider this a reference design
for a filesystem resource
manager, but don't consider this the best possible design for a RAM disk.
In the next chapter, I'll present a variation on this theme — a TAR filesystem manager. This lets you cd into a .tar (or, through the magic of the zlib compression library, a .tar.gz) file, and perform ls, cp, and other commands, as if you had gone through the trouble of (optionally uncompressing and) unpacking the .tar file into a temporary directory.
In the Filesystems appendix, I present background information about filesystem implementation within the resource manager framework. Feel free to read that before, during, or after you read this chapter.
