Mill Computing, Inc. › Forums › The Mill › Architecture › fork() › Reply To: fork()
global_address = local_address xor shift(turf_id) sounds like a kind of lightweight segmentation. Shades of the old 8086 segmentation if it had a virtual memory mapper. Though with global address space mapping 1:1 to every local space. And every local space mapping to every other, though a use for that isn’t obvious. An obvious implication is that when allocating global space to a turf some strategy must be used to avoid a collision with a forked child turf. In regard to David’s question, local space to a turf need not be contiguous, though it must not be allocated mindlessly.
I’m thinking that if you had code like
mystruct * foo = malloc(…);
malloc() would return a local pointer, which the process would convert to global when needed. Is this handled by the memory IO operations?
On the other hand, a service returning a pointer might return a global pointer, such as for a file structure open for both parent and child.