User Directory Systems
In the Monads systems there is no single directory structure which is predefined by an operating system. Instead each user can define his own directory structure as he chooses. (There are of course standard type manager modules which can but need not be used for this purpose.)
This is possible because all data and program "files" are held as information hiding modules in the persistent virtual memory. The right to access a module is determined by the ability to present a module capability, which consists of the (unique) address space number of the virtual address space in which the module is held, together with a bit list of access rights, indicating which entry points of the module's type manager can be invoked.
Module capabilities are stored in the data part of user segments, but because of the access rights set in segment capabilities which address such segments they can only be accessed via special kernel instructions. These allowed the capabilities to be moved and copied in defined ways and to be used as operands for protected inter module calls.
In such a system a directory is in principle a user module with appropriate code routines which map symbolic names onto module capabilities and provides entry points for storing and retrieving capabilities by symbolic name. The following diagram illustrates how a directory module might be defined.
Because there is nothing special about such modules, a user can in effect design his own directory system by defining appropriate type manager code. And since a directory is merely a file like any other, it is accessed by presenting a module capability as an operand for an inter module call. If module capabilities for directories are stored in other directories an entire directory system can be built up at the user level, as a tree structure, a directed graph, etc.
When a new persistent process is created it receives as a parameter a single module capability, passed to it from the creating process. In a discretionary system this is typically a capability for a directory which contains further module capabilities (e.g. for a directory which contains module capabilities for standard software and modules which can be used by all users). The user can then build up his own private directory structure.
In order to distribute capabilities for private modules on an individual basis, the system (or a group of users within the system) can build up a simple mail system which allows module capabilities to be entered into directories of other users. For a description of this click here.