In order for libos's to communicate with each other and share state (such as fd's across forks and the mount table), shared memory is used. Currently, sysv shared-mem interfaces are used to provide this. Due to limitations in our sysv implementation the first process booting must allocate the segments that are going to be used and then other processes may attach them as needed.
Shared memory is being used less and less since it does not give the fault isolation that is typically desired. However, it is interesting to note that while developing ExOS we never ran into an occasion of a buggy libos crashing the system by scribbling bogus data into a shared memory region. The problem we did run into, though, was version control. Every time we changed the structure of the shared memory region every application had to be updated to understand the new layout.