DConf 2013 Day 1 Talk 6: Concurrent Garbage Collection for D by Leandro Lucarella

Diggory diggsey at googlemail.com
Tue May 21 17:04:49 PDT 2013


On Tuesday, 21 May 2013 at 20:08:16 UTC, Leandro Lucarella wrote:
>
> I'm interested in what you're describing, but I don't know how 
> can you
> achieve this without fork()ing (or clone()ing in Linux). What 
> does
> "remap shared memory using COW" in a context where fork() 
> doesn't
> happen? Why do you even need shared memory if fork() doesn't 
> happen? If
> "remap shared memory using COW" means get a different address 
> for the
> same block of memory until a write happens in that block, then 
> you can't
> scan the roots anymore.
>
> I'm *very* interested in your suggestion.

I do mean mapping the same physical block of memory into two 
virtual memory blocks, such that a write will cause the OS to 
make a copy and sever the link.

Given that we're dealing with significantly large blocks of 
memory all in multiples of the page size, it should be a simple 
matter to map from one copy of the memory to the other and back 
again using basic pointer arithmetic, so scanning the roots 
should not be a problem.

You need shared memory because a file handle is needed when 
calling "mmap" to enable the COW functionality, and shared memory 
lets you get a file handle to a block of memory.


More information about the Digitalmars-d-announce mailing list