#include <PsnSecondarySharedMemoryManager.h>
Inheritance diagram for PsnSecondarySharedMemoryManager:


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 |
Definition at line 32 of file PsnSecondarySharedMemoryManager.h.
|
||||||||||||||||||||
|
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 } |
|
|
Desctructeur.
Definition at line 38 of file PsnSecondarySharedMemoryManager.cxx.
00038 {
00039
00040 }
|
|
||||||||||||||||||||||||
|
Constructeur.
|
|
|
Desctructeur.
|
|
||||||||||||||||
|
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 }
|
|
||||||||||||
|
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 }
|
|
|
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 }
|
|
|
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 }
|
|
|
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 }
|
|
||||||||||||
|
synchronize the memory block after a block (empty)
Implements PsnSharedMemoryManager. Definition at line 183 of file PsnSecondarySharedMemoryManager.cxx.
00183 {
00184 //nothing to do.
00185 }
|
|
|
effective unlock
Implements PsnSharedMemoryManager. Definition at line 173 of file PsnSecondarySharedMemoryManager.cxx.
00173 {
00174 #ifdef _DEBUGLOCK
00175 cerr<<"-";
00176 #endif
00177 }
|
|
|
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(). |
|
|
Definition at line 42 of file PsnSeconderySharedMemoryManager.h. |
|
|
Definition at line 63 of file PsnSecondarySharedMemoryManager.h. Referenced by PsnSecondarySharedMemoryManager(), and PsnFramedMemoryManager::sync(). |
| Documentation generated on Mon Nov 25 15:26:25 2002 |
Generated with doxygen 1.2.12 by Dimitri van Heesch , 1997-2001 |