[gclist] Re: gclist-digest V3 #117

marc.shapiro@acm.org marc.shapiro@acm.org
Thu, 19 Oct 2000 15:58:49 +0100 (BST)

 || Date: Wed, 18 Oct 2000 18:36:40 +0200
 || From: Stephane Letz <letz@grame.fr>
 || Subject: [gclist] Reference counter management in two different memory spaces 
 || data is allocated in a shared memory area in
 || user space. A reference counting mechanism is used.  [...] A
 || some point we need to copy the data structures when we are in a
 || context where the reference counter can not be accessed (more
 || precisely in kernel space). Later on, pointer to data structures
 || will be given back to user space processes. 

You should look at algorithms for garbage collection in the presence of
replication.  I can point you to my own work:

    author =       {Paulo Ferreira and Marc Shapiro},
    title =        {Modelling a Distributed Cached Store for Garbage Collection},
    booktitle =    {12th Euro.\ Conf.\ on Object-Oriented Prog.\ (ECOOP)},
    year =         1998,
    address =      {Brussels (Belgium)},
    month =        jul,
    note =         {\url{http://www-sor.inria.fr/publi/MDCSGC_ecoop98.html}}

You can also look at Xavier Blondel's thesis "Gestion mémoire dans
PerDiS, un environnement persistant à grande échelle".  It isn't
published yet but you can e-mail him at
<mailto:xavier.blondel@inria.fr>.  There is also Yu and Cox's algorithm:

    author = 	 {Weimin Yu and Alan Cox},
    title = 	 {Conservative Garbage Collection on Distributed Shared Memory
    booktitle = 	 icdcs,
    year = 	 1996,
    organization = {IEEE Computer Society},
    address =	 {Hong Kong},
    month =	 may,
    pages =	 {402--410}

But that's probably more information than you need.  From what you
describe, the following simple expedient should suffice: add one to the
reference count while the data structure is copied out to kernel space,
and subtract one after the kernel deallocates its copy.