In some situations it is desirable to have a file system that is not backed by actual disk storage, but only by anonymous memory, i.e. lives in the RAM (and possibly swap space).
A simplistic way to implement such a memory filesystem is literally creating a ramdisk, i.e. simply allocating a big chunk of RAM (called a memory store in Hurd terminology), and create a normal filesystem like ext2 on that. However, this is not very efficient, and not very convenient either (the filesystem needs to be recreated each time the ramdisk is invoked). A nicer solution is having a real tmpfs, which creates all filesystem structures directly in RAM, allocating memory on demand.
The Hurd has had such a tmpfs for a long time. However, the existing implementation doesn't work anymore -- it got broken by changes in other parts of the Hurd design.
There are several issues. The most serious known problem seems to be that for technical reasons it receives RPCs from two different sources on one port, and gets mixed up with them. Fixing this is non-trivial, and requires a good understanding of the involved mechanisms.
The goal of this project is to get a fully working, full featured tmpfs implementation. It requires digging into some parts of the Hurd, including the pager interface and translator programming. This task probably doesn't require any design work, only good debugging skills.
Possible mentors: Carl Fredrik Hammar (cfhammar)
Exercise: Take a look at tmpfs and try to fix one of the existing issues. Some of them are probably not too tricky; or you might discover something else you could improve while working on it. If you don't find anything obvious, contact us about a different exercise task.