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.