MemoryMapper interface provides 3 functions:
+ reserve() reserves address space in executor process and working
memory in the controller process
+ finalize() ensures working memory is transferred to executor process
with appropriate memory protections
+ release() deallocates memory on both side
SharedMemoryMapper implementation uses POSIX shared memory APIs to map
shared memory pages in both processes at reserve(). finalize()
only sets the memory protections and release() unmaps the memory.
Executor side is implemented with ExecutorSharedMemoryManager.