Up to 96 bits can be address. Right now they're only using 64.
The latest versions of the Power processor allow hardware enforcement of
capability to be switched off. By the hardware. That's how you run both
AIX and iOS on the same hardware.
If I want to move a memory location, I don't have to stop all the
threads, I only have to block the threads that might access that
location. And I only have to block them when they are actually
referencing that location. I can do that with a spin lock that protects
that location. Remember that java objects do not hold pointers to memory
allocations. They hold references to the memory allocation table. With
capabilities, I can put a spin lock in the memory allocation table. The
memory allocation table also holds the count of object references.
Compacting the memory allocation table is another sack of snakes.
Thankfully that needn't be done often. Entries in the allocation table
are fixed length and can be reused.
-----Original Message-----
From: java400-l-bounces@xxxxxxxxxxxx
[mailto:java400-l-bounces@xxxxxxxxxxxx] On Behalf Of Walden H. Leverich
Sent: Friday, March 06, 2009 11:21 AM
To: Java Programming on and around the iSeries / AS400
Subject: RE: starting collection, reason stop the world collection
With this feature, a garbage collector doesn't need to stop all the
other threads running in the common address space just to do an
inventory of unreferenced memory. GC can run all the time if needed.
Um, why not? It's still a pointer. Just because it can be passed between
processes (and even stored on disk, BTW, look at the SEPT) doesn't mean
it can be changed w/out effecting it.
Looking for unused references isn't even the hard part, it the heap
compaction. Say I've got memory laid out as:
1 2 3
123456789012345678901234567890123456789
xxxx xxxxxxxxxxxxx xxx xxxxxxxx
Where the x's represent different allocations. I've got 4 pointers to
those allocations, one points at memory-location 1, one at location 10,
one at location 26 and one at location 32. Yes, in the single-level
store model these aren't integer offsets from the beginning of a
process-space, rather they are universal offsets from the beginning of
memory (ok, actually segment and offset, but that doesn't matter) the
same principle applies, a pointer holds a reference to a place in
memory.
Given my example, I've got 11 bytes of "available" memory (the spots
w/out the 'x') but I couldn't allocate a 7-byte block as none of the
holes are 7-bytes long. I need to compact the heap. If I want to compact
the heap so all the allocations are together and I have an 11-byte hole
I need to move those allocations around. To move them around I need to
change the pointers that point to them, and to do that I need to
guarantee that the pointer is not going to be dereferenced as I'm moving
the data. To do that I need to pause all the threads. I don't see how
single level store or capability based addressing helps that.
-Walden
BTW, I believe only 64 of the bits are the memory address (was 48 on
CISC) and I have a recollection that it was admitted several releases
ago that the high-order bits aren't actually enforced in hardware
anymore, but what you describe is indeed the fortress Rochester model of
the i.
--
Walden H Leverich III
Tech Software
(516) 627-3800 x3051
WaldenL@xxxxxxxxxxxxxxx
http://www.TechSoftInc.com
Quiquid latine dictum sit altum viditur.
(Whatever is said in Latin seems profound.)
-----Original Message-----
From: java400-l-bounces@xxxxxxxxxxxx
[mailto:java400-l-bounces@xxxxxxxxxxxx] On Behalf Of Dan Kimmel
Sent: Friday, March 06, 2009 10:09 AM
To: Java Programming on and around the iSeries / AS400
Subject: RE: starting collection, reason stop the world collection
Ever wonder why a pointer on i is 16 bytes long? And if you write
something other than a pointer into the space occupied by a pointer the
pointer is voided? Only 96 bits of the 128 bits are an actual memory
address, the rest is a capability which tells the hardware what you can
do with that pointer. The hardware enforces the policy, not the
operating system. And the hardware voids the pointer if the hardware
doesn't create the pointer. This is all necessary to support
single-level storage where all processes work in a single address space.
Other architectures assign a process its own address space that is an
offset of a hardware base address register that is maintained by the
operating system. So a pointer in C on Unix is just an integer (perhaps
a long integer ) offset that the program can directly maintain.
Single level store and capability based addressing allow one program to
pass a reference to a memory address to another program as all memory is
common to all processes but protected by capability. A capability
pointer can be passed from one process to another. This allows user
programs (like a GC) to build and enforce their own mutex, spin-lock,
and other parallel processing artifacts. With this feature, a garbage
collector doesn't need to stop all the other threads running in the
common address space just to do an inventory of unreferenced memory. GC
can run all the time if needed.
Of course, if you're only running one processor this is kind of moot.
That's one of the reasons the 32bit JVM runs better on 4 processor or
fewer machines. More than 4 processors, the classic JVM is running
faster.
-----Original Message-----
From: java400-l-bounces@xxxxxxxxxxxx
[mailto:java400-l-bounces@xxxxxxxxxxxx] On Behalf Of Walden H. Leverich
Sent: Thursday, March 05, 2009 10:18 AM
To: Java Programming on and around the iSeries / AS400
Subject: RE: starting collection, reason stop the world collection
OK, this time I'll preface it with a statement that this is not targeted
at the poster. :-)
Capability based addressing on the i allows interprocess communication
methods that are impossible on any other architecture.
Wow, talk about kool-aid speak! How does it do it? Really, assume I know
a thing or two about memory architectures, technically and specifically
how does the GC do this magical thing on i?
-Walden
--
Walden H Leverich III
Tech Software
(516) 627-3800 x3051
WaldenL@xxxxxxxxxxxxxxx
http://www.TechSoftInc.com
Quiquid latine dictum sit altum viditur.
(Whatever is said in Latin seems profound.)
--
This is the Java Programming on and around the iSeries / AS400
(JAVA400-L) mailing list To post a message email: JAVA400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit:
http://lists.midrange.com/mailman/listinfo/java400-l
or email: JAVA400-L-request@xxxxxxxxxxxx Before posting, please take a
moment to review the archives at
http://archive.midrange.com/java400-l.
--
This is the Java Programming on and around the iSeries / AS400
(JAVA400-L) mailing list
To post a message email: JAVA400-L@xxxxxxxxxxxx To subscribe,
unsubscribe, or change list options,
visit:
http://lists.midrange.com/mailman/listinfo/java400-l
or email: JAVA400-L-request@xxxxxxxxxxxx Before posting, please take a
moment to review the archives at
http://archive.midrange.com/java400-l.
--
This is the Java Programming on and around the iSeries / AS400
(JAVA400-L) mailing list To post a message email: JAVA400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit:
http://lists.midrange.com/mailman/listinfo/java400-l
or email: JAVA400-L-request@xxxxxxxxxxxx Before posting, please take a
moment to review the archives at
http://archive.midrange.com/java400-l.
As an Amazon Associate we earn from qualifying purchases.