Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

PsnSecondarySharedMemoryManager Class Reference

Classe de gestion de mémoire partagée de second niveua, c'est à dire obtenant sa mémoire d'un PsnSharedMemoryManager. More...

#include <PsnSecondarySharedMemoryManager.h>

Inheritance diagram for PsnSecondarySharedMemoryManager:

Inheritance graph
[legend]
Collaboration diagram for PsnSecondarySharedMemoryManager:

Collaboration graph
[legend]
List of all members.

Public Methods

 PsnSecondarySharedMemoryManager (size_t sizeDsm, size_t pageSize, size_t alignedSize, PsnRelaxedMemoryManager &memoryManager)
 Constructeur.

virtual ~PsnSecondarySharedMemoryManager ()
 Desctructeur.

 PsnSecondarySharedMemoryManager (PsnRelaxedMemoryManager &memoryManager, void *startDsm, size_t sizeDsm, size_t pageSize, size_t alignedSize)
 Constructeur.

virtual ~PsnSecondarySharedMemoryManager ()
 Desctructeur.


Protected Methods

virtual void lock ()
 effective lock

virtual void unlock ()
 effective unlock

virtual bool lockNeeded ()
 Is a lock needed ? before access to this Framed memoryManager.

virtual void synchronizeAfterLock (void *, long int)
 synchronize the memory block after a block (empty)

virtual void sync ()=0
 Synchronise the memory managed by the PsnSharedFreeStoreMemoryManager :.

virtual void * getFromThisFree (PsnMemoryElementDescriptor **startFreeList, size_t size)
virtual void addInThisFree (PsnMemoryElementDescriptor **startFreeList, unsigned int base, size_t size)

Protected Attributes

PsnRelaxedMemoryManager_myMemoryManager
unsigned int _firstPageOffset
 offset in number of page of the fisrt page of this memory manager in the realxed memory manager

PsnRelaxedMemoryManager_myMemoryManager

Detailed Description

Classe de gestion de mémoire partagée de second niveua, c'est à dire obtenant sa mémoire d'un PsnSharedMemoryManager.

Author:
David Margery
Version:
1.0 (revision ())

Definition at line 32 of file PsnSecondarySharedMemoryManager.h.


Constructor & Destructor Documentation

PsnSecondarySharedMemoryManager::PsnSecondarySharedMemoryManager size_t    sizeDsm,
size_t    pageSize,
size_t    alignedSize,
PsnRelaxedMemoryManager   memoryManager
 

Constructeur.

Definition at line 23 of file PsnSecondarySharedMemoryManager.cxx.

References _firstPageOffset, _myMemoryManager, PsnSharedMemoryManager::_pageSize, PsnSharedMemoryManager::_startDsm, PsnSharedMemoryManager::globalAddressToLocal(), and PsnSharedMemoryManager::pageSize().

00023                                                                                                                                                              : 
00024    PsnSharedMemoryManager(memoryManager.mmalloc(sizeDsm / pageSize),
00025                           sizeDsm,
00026                           pageSize,
00027                           alignedSize),
00028    _myMemoryManager(memoryManager)
00029 {
00030 #ifdef _DEBUGALLOCATIONMOME
00031    cerr<<sizeDsm<<" "<<pageSize<<endl;
00032 #endif
00033    assert(sizeDsm % pageSize == 0) ;
00034 
00035    _firstPageOffset = _myMemoryManager.globalAddressToLocal((void *)_startDsm) / _pageSize ;
00036 }

PsnSecondarySharedMemoryManager::~PsnSecondarySharedMemoryManager   [virtual]
 

Desctructeur.

Definition at line 38 of file PsnSecondarySharedMemoryManager.cxx.

00038                                                                   {
00039 
00040 }

PsnSecondarySharedMemoryManager::PsnSecondarySharedMemoryManager PsnRelaxedMemoryManager   memoryManager,
void *    startDsm,
size_t    sizeDsm,
size_t    pageSize,
size_t    alignedSize
 

Constructeur.

virtual PsnSecondarySharedMemoryManager::~PsnSecondarySharedMemoryManager   [virtual]
 

Desctructeur.


Member Function Documentation

void PsnSecondarySharedMemoryManager::addInThisFree PsnMemoryElementDescriptor **    startFreeList,
unsigned int    base,
size_t    size
[protected, virtual]
 

Definition at line 112 of file PsnSecondarySharedMemoryManager.cxx.

References PsnMemoryElementDescriptor::base, PsnMemoryElementDescriptor::next, and PsnMemoryElementDescriptor::size.

Referenced by PsnSharedFreeStoreMemoryManager::mfree(), and PsnSharedArrayMemoryManager::mfree().

00112                                                                                                                                  {
00113 
00114    //cerr<<"PsnSecondarySharedMemoryManager::addInThisFree "<<startFreeList<<endl;
00115    PsnMemoryElementDescriptor *l, *iNew, *tmp ;
00116 
00117    iNew= new PsnMemoryElementDescriptor();
00118    iNew->base = base ;
00119    iNew->size = size;
00120    
00121    if ( * startFreeList == NULL) { /* Empty list */
00122       iNew->next = (unsigned int) NULL ;
00123       *startFreeList = iNew ;
00124    }    
00125    else {
00126       l = *startFreeList ;
00127       if ( l->base > iNew->base ) {  /* iNew is the lowest interval */
00128          iNew->next = (unsigned int) * startFreeList ;
00129          *startFreeList = iNew ;
00130          //reorder so that l->next == iNew for merge test
00131          l = iNew ;
00132          iNew = (PsnMemoryElementDescriptor *) l->next ;
00133       }    
00134       else { /* Search the immediate lower interval */
00135          tmp = (PsnMemoryElementDescriptor * ) l -> next ;
00136          bool onBoucle = tmp != NULL ;
00137          if (onBoucle ) onBoucle = ( iNew->base > tmp->base ) ; 
00138          while ( onBoucle ) {
00139             l = tmp ;
00140             tmp = (PsnMemoryElementDescriptor * ) l->next ;
00141             if (tmp != NULL) {
00142                onBoucle = iNew->base > tmp->base ;
00143             }   
00144             else onBoucle = false ;
00145          }
00146          iNew->next = (unsigned int) tmp ;
00147          l->next = (unsigned int) iNew ;
00148          if ( tmp != NULL ) {
00149             if (iNew->base + iNew->size == tmp -> base) {
00150                iNew->size += tmp->size ;
00151                iNew->next = tmp->next ;
00152                delete tmp ;
00153             }
00154          }
00155       }
00156       if ( l->base + l->size == iNew->base ) {
00157          l->size += iNew->size ;
00158          l->next = iNew->next ;
00159          if (*startFreeList == iNew) *startFreeList = l;
00160          delete iNew ;
00161       }     
00162    }
00163 }

void * PsnSecondarySharedMemoryManager::getFromThisFree PsnMemoryElementDescriptor **    startFreeList,
size_t    size
[protected, virtual]
 

Definition at line 47 of file PsnSecondarySharedMemoryManager.cxx.

References PsnMemoryElementDescriptor::base, PsnSharedMemoryManager::getAnInvalidOffset(), PsnSharedMemoryManager::invalidOffset(), PsnSharedMemoryManager::localAddressToGlobal(), PsnMemoryElementDescriptor::next, and PsnMemoryElementDescriptor::size.

Referenced by PsnSharedFreeStoreMemoryManager::mmalloc(), and PsnSharedArrayMemoryManager::mmalloc().

00047                                                                                                                     {
00048   PsnMemoryElementDescriptor *i , *pred ;
00049 
00050   unsigned int addr ;
00051 
00052 #ifdef _DEBUGALLOCATIONMOME
00053   if (*startFreeList != NULL ) {
00054      cerr<<"PsnSecondarySharedMemoryManager::getFromThisFree "<<startFreeList<<" "
00055          <<(*startFreeList)->base<<" "
00056          <<(*startFreeList)->next<<" "
00057          <<(*startFreeList)->size<<endl;
00058   }
00059 #endif
00060 
00061   i = * startFreeList ;
00062 
00063   pred = NULL ;
00064 
00065   addr = getAnInvalidOffset() ;
00066 
00067   while ( i != NULL )
00068     {
00069        if ( i->size >= size )   /* First fit strategy */
00070           {
00071              addr = i->base ;
00072              if ( i->size == size )
00073                 {
00074                    if ( pred == NULL ) {
00075                       PsnMemoryElementDescriptor * newStartFreeList = (PsnMemoryElementDescriptor *) i -> next ;
00076                       delete *startFreeList ;
00077                       *startFreeList = newStartFreeList ; 
00078                       //cerr<<*startFreeList<<endl;
00079                    }
00080                    else {
00081                       pred->next = i->next ;
00082                       delete ( i ) ;
00083                    }
00084                 }
00085              else
00086                 {
00087                    i->base = i->base + size ;
00088                    i->size = i->size - size ;
00089                 }
00090              i = NULL ;
00091           }
00092        else
00093           {
00094              pred = i ;
00095              i = (PsnMemoryElementDescriptor *) i->next ;
00096           }
00097     }
00098   if (invalidOffset(addr) )
00099      {
00100         return NULL ;
00101         //cerr<<"PsnSecondarySharedMemoryManager::getFromThisFree : returning NULL"<<endl
00102      }
00103   else {
00104      
00105      return localAddressToGlobal(addr) ;
00106   }
00107 
00108 }

void PsnSecondarySharedMemoryManager::lock   [protected, virtual]
 

effective lock

Implements PsnSharedMemoryManager.

Definition at line 166 of file PsnSecondarySharedMemoryManager.cxx.

00166                                            {
00167    // nothing to do because lockIfNeeded protects local access (thread access) if lockNeeded returns true
00168 #ifdef _DEBUGLOCK
00169    cerr<<"-";
00170 #endif
00171 }

bool PsnSecondarySharedMemoryManager::lockNeeded   [protected, virtual]
 

Is a lock needed ? before access to this Framed memoryManager.

Implements PsnSharedMemoryManager.

Definition at line 179 of file PsnSecondarySharedMemoryManager.cxx.

00179                                                  {
00180    return true ;
00181 }

void PsnSecondarySharedMemoryManager::sync   [protected, pure virtual]
 

Synchronise the memory managed by the PsnSharedFreeStoreMemoryManager :.

Implements PsnSharedMemoryManager.

Implemented in PsnFramedMemoryManager, PsnLatencySyncedSharedMemoryManager, and PsnOnceSyncedSharedMemoryManager.

Definition at line 43 of file PsnSecondarySharedMemoryManager.cxx.

00043                                            {
00044    //cerr<<"PsnSecondarySharedMemoryManager::sync"<<endl;
00045 }

void PsnSecondarySharedMemoryManager::synchronizeAfterLock void *   ,
long    int
[protected, virtual]
 

synchronize the memory block after a block (empty)

Implements PsnSharedMemoryManager.

Definition at line 183 of file PsnSecondarySharedMemoryManager.cxx.

00183                                                                            {
00184    //nothing to do.
00185 }

void PsnSecondarySharedMemoryManager::unlock   [protected, virtual]
 

effective unlock

Implements PsnSharedMemoryManager.

Definition at line 173 of file PsnSecondarySharedMemoryManager.cxx.

00173                                              {
00174 #ifdef _DEBUGLOCK
00175    cerr<<"-";
00176 #endif
00177 }


Member Data Documentation

unsigned int PsnSecondarySharedMemoryManager::_firstPageOffset [protected]
 

offset in number of page of the fisrt page of this memory manager in the realxed memory manager

Definition at line 66 of file PsnSecondarySharedMemoryManager.h.

Referenced by PsnSecondarySharedMemoryManager(), and PsnFramedMemoryManager::sync().

PsnRelaxedMemoryManager& PsnSecondarySharedMemoryManager::_myMemoryManager [protected]
 

Definition at line 42 of file PsnSeconderySharedMemoryManager.h.

PsnRelaxedMemoryManager& PsnSecondarySharedMemoryManager::_myMemoryManager [protected]
 

Definition at line 63 of file PsnSecondarySharedMemoryManager.h.

Referenced by PsnSecondarySharedMemoryManager(), and PsnFramedMemoryManager::sync().


The documentation for this class was generated from the following files:
logo OpenMask

Documentation generated on Mon Nov 25 15:26:25 2002

Generated with doxygen 1.2.12 by Dimitri van Heesch ,   1997-2001