Skip to content

Commit

Permalink
Adding minimal size to the permanent space
Browse files Browse the repository at this point in the history
  • Loading branch information
tesonep committed Apr 4, 2022
1 parent e4941b4 commit 606736a
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 26 deletions.
2 changes: 1 addition & 1 deletion smalltalksrc/VMMaker/AbstractImageAccess.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ AbstractImageAccess >> interpreter: anObject [
{ #category : #reading }
AbstractImageAccess >> loadHeaderToMemory: header [

objectMemory createMemoryMap.
objectMemory ensureMemoryMap.

objectMemory specialObjectsOop: header initialSpecialObjectsOop.
objectMemory lastHash: header hdrLastHash.
Expand Down
50 changes: 35 additions & 15 deletions smalltalksrc/VMMaker/SpurMemoryManager.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -4217,18 +4217,6 @@ SpurMemoryManager >> countNumClassPagesPreSwizzle: bytesToShift [
]
{ #category : #initialization }
SpurMemoryManager >> createMemoryMap [
self
cCode: [ memoryMap := self cCoerce: (self malloc: (self sizeof: VMMemoryMap)) to: #'VMMemoryMap *']
inSmalltalk: [
memoryMap := VMMemoryMap new.
memoryMap memoryManager: memoryManager ].
memoryMap initializeMemoryMap.
]
{ #category : #'allocation accounting' }
SpurMemoryManager >> currentAllocatedBytes [
"Compute the current allocated bytes since last set.
Expand Down Expand Up @@ -4543,6 +4531,20 @@ SpurMemoryManager >> ensureHasOverflowHeader: arrayArg forwardIfCloned: forwardI
clonedArray]
]
{ #category : #initialization }
SpurMemoryManager >> ensureMemoryMap [
memoryMap ifNotNil: [ ^ self ].
self
cCode: [ memoryMap := self cCoerce: (self malloc: (self sizeof: VMMemoryMap)) to: #'VMMemoryMap *']
inSmalltalk: [
memoryMap := VMMemoryMap new.
memoryMap memoryManager: memoryManager ].
memoryMap initializeMemoryMap.
]
{ #category : #'image segment in/out' }
SpurMemoryManager >> ensureNoNewObjectsIn: outPointerArray [
"This is part of loadImageSegmentFrom:outPointers:.
Expand Down Expand Up @@ -8644,16 +8646,22 @@ SpurMemoryManager >> moveToPermSpace: objOop [
fmt := self formatOf: objOop.
(self isPointersFormat: fmt)
ifTrue: [ ^ nil ].
ifTrue: [
self primitiveFailFor: PrimErrBadReceiver.
^ nil ].
fmt >= self firstCompiledMethodFormat ifTrue: [ ^ nil ].
fmt >= self firstCompiledMethodFormat ifTrue: [
self primitiveFailFor: PrimErrBadReceiver.
^ nil ].
newObj := self allocateSlotsInPermSpace: numSlots
bytes: (self objectBytesForSlots: numSlots)
format: fmt
classIndex: (self classIndexOf: objOop).
newObj ifNil: [^nil].
newObj ifNil: [
self primitiveFailFor: PrimErrNoMemory.
^ nil].
0 to: numSlots - 1 do:
[:i|
Expand Down Expand Up @@ -11079,6 +11087,18 @@ SpurMemoryManager >> setMaxOldSpaceSize: limit [
^0
]
{ #category : #accessing }
SpurMemoryManager >> setMinimalPermSpaceSize: min [
<api>
<var: #limit type: #usqInt>
self ensureMemoryMap.
self getMemoryMap minPermSpaceSize: min.
]
{ #category : #'free space' }
SpurMemoryManager >> setNextFreeChunkOf: freeChunk withValue: nextFreeChunk chunkBytes: chunkBytes [
self
Expand Down
7 changes: 2 additions & 5 deletions smalltalksrc/VMMaker/StackInterpreterPrimitives.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -2579,11 +2579,8 @@ StackInterpreterPrimitives >> primitiveMoveToPermSpace [
| rcvr permObject |
rcvr := self stackTop.

(objectMemory isPointers: rcvr)
ifTrue: [ ^ self primitiveFailFor: PrimErrBadReceiver ].

permObject := objectMemory moveToPermSpace: rcvr.
permObject ifNil: [ ^ self primitiveFailFor: PrimErrBadReceiver ].
permObject := objectMemory moveToPermSpace: rcvr.
self successful ifFalse: [ ^ self ].

self pop: argumentCount + 1 thenPush: permObject.
]
Expand Down
25 changes: 21 additions & 4 deletions smalltalksrc/VMMaker/VMMemoryMap.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ Class {
'codeZoneEnd',
'stackPagesStart',
'stackPagesEnd',
'initialPermSpaceSize'
'initialPermSpaceSize',
'minPermSpaceSize'
],
#category : #'VMMaker-Memory'
}
Expand Down Expand Up @@ -132,15 +133,18 @@ VMMemoryMap >> allocateOldObjectsSpace [
{ #category : #private }
VMMemoryMap >> allocatePermObjectsSpace [

initialPermSpaceSize = 0 ifTrue: [ ^ self ].
| minSize |
minSize := minPermSpaceSize max: initialPermSpaceSize.

minSize = 0 ifTrue: [ ^ self ].

self permSpaceStart: (self
allocateMemory: initialPermSpaceSize
allocateMemory: minSize
BaseAddress: memoryMapConfiguration permSpaceInitialAddress).

self permSpaceStart ifNil: [ self insufficientMemoryAvailableError ].

self permSpaceEnd: self permSpaceStart + initialPermSpaceSize
self permSpaceEnd: self permSpaceStart + minSize
]

{ #category : #allocating }
Expand Down Expand Up @@ -270,6 +274,7 @@ VMMemoryMap >> initializeMemoryMap [

initialCodeZoneSize := 0.
initialPermSpaceSize := 0.
minPermSpaceSize := 0.
permSpaceStart := 0.
permSpaceEnd := 0.

Expand Down Expand Up @@ -334,6 +339,18 @@ VMMemoryMap >> memset: startAddress _: value _: size [

]

{ #category : #accessing }
VMMemoryMap >> minPermSpaceSize [

^ minPermSpaceSize
]

{ #category : #accessing }
VMMemoryMap >> minPermSpaceSize: anObject [

minPermSpaceSize := anObject
]

{ #category : #accessing }
VMMemoryMap >> newSpaceEnd [

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ VMSimulatedEnvironmentBuilder >> doBuild [

interpreter memoryManager: memoryManager.
objectMemory memoryManager: memoryManager.
objectMemory createMemoryMap.
objectMemory ensureMemoryMap.

objectMemory coInterpreter: interpreter.

Expand Down

0 comments on commit 606736a

Please sign in to comment.