1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-25 15:00:45 -08:00

Mps wiki gloassary: pieces of memory: chunk, segment, tract, page

Copied from Perforce
 Change: 161346
 ServerID: perforce.ravenbrook.com
This commit is contained in:
Richard Kistruck 2006-12-29 12:35:38 +00:00
parent f7a82d63bc
commit f24dc95b89

View file

@ -86,9 +86,75 @@
memory for an allocation point.</dd>
</dl>
<h3>Pieces of memory</h3>
<h4>Pools getting raw memory from the Arena</h4>
<p>This memory will be used for client objects.
There are two interfaces:
a high-level "segment" interface,
and a simpler "arena memory" interface. </p>
<dl>
<dt> segment (internal) </dt>
<dd>
<p>= a contiguous piece of memory of arbitrary size,
with associated properties for participating in garbage
collection (see SegStruct).</p>
<p>A pool may call SegAlloc() to request a segment from the arena.
The segment is the unit of pool-to-pool and pool-to-MPM
interaction for GC.</p>
<p>Design: <a href="../../design/seg/">design/seg</a>.</p>
<p>Interface: SegAlloc() et al in <a href="../../code/mpm.h">mpm.h</a>.</p>
<p>Historical note: before 'sunset on segments' (1999-11-18, change 21000) a
segment was a VM page.</p>
</dd>
<dt> arena memory (internal) </dt>
<dd>
<p>= a contiguous piece of memory of arbitrary size,
returned by ArenaAlloc()</p>
<p>A pool may call ArenaAlloc() to request raw memory from the
arena. This is a simpler interface than segments, suitable
for simple pools that do not participate in garbage collection,
pools used internally by the MPM, etc.</p>
<p>(Note: this ArenaAlloc() interface is sometimes
called the "tract" interface).</p>
</dd>
</dl>
<h4>Pools getting memory for administrative use</h4>
<p>This memory will be used for the pool's administrative
datastructures, such as allocation
tables.</p>
<dl>
<dt> control memory (internal) </dt>
<dd>
<p>Pools use ControlAlloc() and ControlFree() to obtain
or free control memory.</p>
</dd>
</dl>
<h4>How the arena handles memory</h4>
<p>See tract.c.</p>
<dl>
<dt> chunk (internal) </dt>
<dd>
<p>= a contiguous (I think) piece of address space that has
been reserved (I think) by the arena</p>
<p>arena-&gt;primary points to the arena's first chunk</p>
</dd>
<dt> page (internal) </dt>
<dd>= unit of granularity of arena allocation; object corresponding to one operating-system VM page </dd>
<dt> tract (internal) </dt>
<dd>= a page that is allocated to a pool</dd>
</dl>
<p>Other terms:</p>
<dl>
<dt> <a id="foreign_code">Foreign code (mps.h)</a> </dt>
<dt> <a id="foreign_code">foreign code</a> (mps.h) </dt>
<dd>From the MPS client's point of view, foreign code is
external code (outside the client and MPS), which is not
aware of and does not cooperate with the MPS.
@ -104,7 +170,7 @@
designed for this.
</dd>
<dt> Format (mps.h) </dt>
<dt> format (mps.h) </dt>
<dd>A collection of client-implemented Format Methods,
which MPS uses to ask the client questions about objects.
See <a href="gc.html">GC</a>.</dd>
@ -114,7 +180,7 @@
See
<a href="../../design/type/index.html#attr">design/type/#attr</a>.
</dd>
<dt> Ring (internal) </dt>
<dd>A Parent node, linked to zero or more Child nodes.
Used throughout MPS internals. See
@ -133,6 +199,7 @@
2006-06-21 RHSK Scope of terms; client/mutator, ap/buffer.
2006-07-03 RHSK Ring.
2006-08-02 RHSK Foreign code. Format (clarify).
2006-08-14 RHSK Pieces of memory: chunk, segment, tract, page
</pre>