1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-18 00:50:44 -08:00
emacs/mps/manual/html/glossary/t.html
Gareth Rees 06057a4d52 Bring html up to date.
Copied from Perforce
 Change: 181168
 ServerID: perforce.ravenbrook.com
2013-03-18 15:13:54 +00:00

546 lines
No EOL
40 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Memory Management Glossary: T &mdash; Memory Pool System 1.111.0 documentation</title>
<link rel="stylesheet" href="../_static/mps.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: '1.111.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<link rel="copyright" title="Copyright" href="../copyright.html" />
<link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" />
<link rel="up" title="Memory Management Glossary" href="index.html" />
<link rel="next" title="Memory Management Glossary: U" href="u.html" />
<link rel="prev" title="Memory Management Glossary: S" href="s.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="u.html" title="Memory Management Glossary: U"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="s.html" title="Memory Management Glossary: S"
accesskey="P">previous</a> |</li>
<li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> &raquo;</li>
<li><a href="index.html" accesskey="U">Memory Management Glossary</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="memory-management-glossary-t">
<span id="glossary-t"></span><h1>Memory Management Glossary: T<a class="headerlink" href="#memory-management-glossary-t" title="Permalink to this headline"></a></h1>
<p class="glossary-alphabet"><a class="reference internal" href="a.html#glossary-a"><em>A</em></a>
| <a class="reference internal" href="b.html#glossary-b"><em>B</em></a>
| <a class="reference internal" href="c.html#glossary-c"><em>C</em></a>
| <a class="reference internal" href="d.html#glossary-d"><em>D</em></a>
| <a class="reference internal" href="e.html#glossary-e"><em>E</em></a>
| <a class="reference internal" href="f.html#glossary-f"><em>F</em></a>
| <a class="reference internal" href="g.html#glossary-g"><em>G</em></a>
| <a class="reference internal" href="h.html#glossary-h"><em>H</em></a>
| <a class="reference internal" href="i.html#glossary-i"><em>I</em></a>
| J
| <a class="reference internal" href="k.html#glossary-k"><em>K</em></a>
| <a class="reference internal" href="l.html#glossary-l"><em>L</em></a>
| <a class="reference internal" href="m.html#glossary-m"><em>M</em></a>
| <a class="reference internal" href="n.html#glossary-n"><em>N</em></a>
| <a class="reference internal" href="o.html#glossary-o"><em>O</em></a>
| <a class="reference internal" href="p.html#glossary-p"><em>P</em></a>
| <a class="reference internal" href="q.html#glossary-q"><em>Q</em></a>
| <a class="reference internal" href="r.html#glossary-r"><em>R</em></a>
| <a class="reference internal" href="s.html#glossary-s"><em>S</em></a>
| <a class="reference internal" href="#glossary-t"><em>T</em></a>
| <a class="reference internal" href="u.html#glossary-u"><em>U</em></a>
| <a class="reference internal" href="v.html#glossary-v"><em>V</em></a>
| <a class="reference internal" href="w.html#glossary-w"><em>W</em></a>
| X
| Y
| <a class="reference internal" href="z.html#glossary-z"><em>Z</em></a></p>
<dl class="glossary docutils">
<dt id="term-tabling">tabling</dt>
<dd><div class="admonition-see first last admonition">
<p class="first admonition-title">See</p>
<p class="last"><a class="reference internal" href="c.html#term-caching-3"><em class="xref std std-term">caching<sup>(3)</sup></em></a>.</p>
</div>
</dd>
<dt id="term-tag">tag</dt>
<dd><p class="first">A tag is a piece of information associated with an
<a class="reference internal" href="o.html#term-object"><em class="xref std std-term">object</em></a> or <a class="reference internal" href="r.html#term-reference"><em class="xref std std-term">reference</em></a> that allows the
representation of the object to be determined.</p>
<p>Tags are often used to represent types in the implementation
of a dynamically-typed language. In statically-typed
languages, types are usually implicit and not permitted to
change at run-time, so tagging is rarely required.</p>
<p>One of the simplest forms of tag is a <a class="reference internal" href="w.html#term-word"><em class="xref std std-term">word</em></a> at the
beginning of the object that points to a block of information
about the object&#8217;s <a class="reference internal" href="f.html#term-format"><em class="xref std std-term">format</em></a>.</p>
<div class="figure align-center">
<img alt="Diagram: Example of a tag-word at the start of an object." src="../_images/tag-word.svg" /><p class="caption">Example of a tag-word at the start of an object.</p>
</div>
<p>Another common form of tagging is to <a class="reference internal" href="a.html#term-alignment"><em class="xref std std-term">align</em></a>
objects and keep information in the least significant bits of
the reference.</p>
<div class="figure align-center">
<img alt="Diagram: Example of reference tagging, using the least significant bits." src="../_images/tag-ref.svg" /><p class="caption">Example of reference tagging, with objects aligned to
addresses that are multiples of four, and the tag stored
in the least significant two bits of the reference.</p>
</div>
<p>In <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a>, when a structure contains a union, it is common
to add a field to the structure to indicate which union member
is currently being used. This field is known as a
<em>discriminator</em>, and is a form of tag. Analogues occur in
other languages, sometimes with compiler or run-time support.</p>
<div class="admonition-see-also admonition seealso">
<p class="first admonition-title">See also</p>
<p class="last"><a class="reference internal" href="#term-tagged-architecture"><em class="xref std std-term">tagged architecture</em></a>, <a class="reference internal" href="i.html#term-in-band-header"><em class="xref std std-term">in-band header</em></a>.</p>
</div>
<div class="admonition-related-publication admonition">
<p class="first admonition-title">Related publication</p>
<p class="last"><a class="reference internal" href="../mmref/bib.html#gudeman93"><em>Gudeman (1993)</em></a>.</p>
</div>
<div class="admonition-in-the-mps last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">See <a class="reference internal" href="../topic/scanning.html#topic-scanning-tag"><em>Tagged references</em></a>.</p>
</div>
</dd>
<dt id="term-tagged-architecture">tagged architecture</dt>
<dd><p class="first">A tagged architecture is a hardware architecture where each
memory <a class="reference internal" href="w.html#term-word"><em class="xref std std-term">word</em></a> is divided into a &#8220;data&#8221; and a <a class="reference internal" href="#term-tag"><em class="xref std std-term">tag</em></a>
section. The data section is sufficiently large to contain a
memory <a class="reference internal" href="a.html#term-address"><em class="xref std std-term">address</em></a> and the tag section is used to describe
how the data section is to be interpreted (that is, it encodes
the type of the data).</p>
<div class="admonition-relevance-to-memory-management admonition">
<p class="first admonition-title">Relevance to memory management</p>
<p class="last">Tagged architectures greatly simplify the implementation
of a memory manager because each word of memory is
self-describing.</p>
</div>
<div class="admonition-historical-note last admonition">
<p class="first admonition-title">Historical note</p>
<p class="last">The <a class="reference internal" href="../mmref/lang.html#term-lisp-machine"><em class="xref std std-term">Lisp Machine</em></a> was an example of a tagged
architecture.</p>
</div>
</dd>
<dt id="term-tagged-reference">tagged reference</dt>
<dd><p class="first">A <a class="reference internal" href="r.html#term-reference"><em class="xref std std-term">reference</em></a> containing a <a class="reference internal" href="#term-tag"><em class="xref std std-term">tag</em></a> in part of its
address, for example by <a class="reference internal" href="a.html#term-alignment"><em class="xref std std-term">aligning</em></a> objects
and keeping the tag in the least significant bits of the
address.</p>
<div class="admonition-in-the-mps last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">See <a class="reference internal" href="../topic/scanning.html#topic-scanning-tag"><em>Tagged references</em></a>.</p>
</div>
</dd>
<dt id="term-tb-1">TB<sup>(1)</sup></dt>
<dd><div class="admonition-see first last admonition">
<p class="first admonition-title">See</p>
<p class="last"><a class="reference internal" href="#term-terabyte"><em class="xref std std-term">terabyte</em></a>.</p>
</div>
</dd>
<dt id="term-tb-2">TB<sup>(2)</sup></dt>
<dd><div class="admonition-see first last admonition">
<p class="first admonition-title">See</p>
<p class="last"><a class="reference internal" href="#term-translation-lookaside-buffer"><em class="xref std std-term">translation lookaside buffer</em></a>.</p>
</div>
</dd>
<dt id="term-telemetry-filter">telemetry filter</dt>
<dd><div class="admonition-in-the-mps first last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">A <a class="reference internal" href="b.html#term-bitmap"><em class="xref std std-term">bitmap</em></a> indicating which events the MPS should
include in the <a class="reference internal" href="#term-telemetry-stream"><em class="xref std std-term">telemetry stream</em></a>. It can be read or
changed by calling <a class="reference internal" href="../topic/telemetry.html#mps_telemetry_control" title="mps_telemetry_control"><tt class="xref c c-func docutils literal"><span class="pre">mps_telemetry_control()</span></tt></a>.</p>
</div>
</dd>
<dt id="term-telemetry-label">telemetry label</dt>
<dd><div class="admonition-in-the-mps first last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">An indentifier representing a string, returned from
<a class="reference internal" href="../topic/telemetry.html#mps_telemetry_intern" title="mps_telemetry_intern"><tt class="xref c c-func docutils literal"><span class="pre">mps_telemetry_intern()</span></tt></a>, that can be associated
with certain <a class="reference internal" href="a.html#term-address"><em class="xref std std-term">addresses</em></a>, and so appear in
the <a class="reference internal" href="#term-telemetry-stream"><em class="xref std std-term">telemetry stream</em></a> attached to events concerning
those addresses. See <a class="reference internal" href="../topic/telemetry.html#topic-telemetry"><em>Telemetry</em></a>.</p>
</div>
</dd>
<dt id="term-telemetry-stream">telemetry stream</dt>
<dd><div class="admonition-in-the-mps first last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">A sequence of events reported by the MPS to assist with
debugging and profiling. The events that appear in the
stream can be configured by setting the <a class="reference internal" href="#term-telemetry-filter"><em class="xref std std-term">telemetry
filter</em></a>. See <a class="reference internal" href="../topic/telemetry.html#topic-telemetry"><em>Telemetry</em></a>.</p>
</div>
</dd>
<dt id="term-tenuring">tenuring</dt>
<dd><div class="admonition-see first last admonition">
<p class="first admonition-title">See</p>
<p class="last"><a class="reference internal" href="p.html#term-promotion"><em class="xref std std-term">promotion</em></a>.</p>
</div>
</dd>
<dt id="term-terabyte">terabyte</dt>
<dd><div class="admonition-also-known-as first admonition">
<p class="first admonition-title">Also known as</p>
<p class="last"><em>TB</em>.</p>
</div>
<p>A terabyte is 1024 <a class="reference internal" href="g.html#term-gigabyte"><em class="xref std std-term">gigabytes</em></a>, or
1099511627776 <a class="reference internal" href="b.html#term-byte-1"><em class="xref std std-term">bytes<sup>(1)</sup></em></a>.</p>
<p class="last">See <a class="reference internal" href="b.html#term-byte-1"><em class="xref std std-term">byte<sup>(1)</sup></em></a> for general information on this and
related quantities.</p>
</dd>
<dt id="term-termination">termination</dt>
<dd><div class="admonition-see first last admonition">
<p class="first admonition-title">See</p>
<p class="last"><a class="reference internal" href="f.html#term-finalization"><em class="xref std std-term">finalization</em></a>.</p>
</div>
</dd>
<dt id="term-thrash">thrash</dt>
<dd><p class="first">A <a class="reference internal" href="c.html#term-cache-2"><em class="xref std std-term">cache<sup>(2)</sup></em></a> is said to <a class="reference internal" href="#term-thrash"><em class="xref std std-term">thrash</em></a> when its
<a class="reference internal" href="m.html#term-miss-rate"><em class="xref std std-term">miss rate</em></a> is too high, and it spends most of its time
servicing <a class="reference internal" href="m.html#term-miss"><em class="xref std std-term">misses</em></a>. Thrashing is bad for
performance, particularly <a class="reference internal" href="v.html#term-virtual-memory"><em class="xref std std-term">virtual memory</em></a>
thrashing, because the relative cost of a miss is so high: it
may slow a machine down by a factor of a hundred or more.</p>
<p>Thrashing is typically caused by a process or system having a
<a class="reference internal" href="w.html#term-working-set"><em class="xref std std-term">working set</em></a> which is larger than its <a class="reference internal" href="c.html#term-cache-1"><em class="xref std std-term">cache<sup>(1)</sup></em></a>
or <a class="reference internal" href="m.html#term-main-memory"><em class="xref std std-term">main memory</em></a>. It may also be caused by a failure of
<a class="reference internal" href="c.html#term-cache-policy"><em class="xref std std-term">cache policy</em></a>. A system with an inflexible cache policy
may thrash even when the working set is quite small.</p>
<p>For instance, a virtual memory system which has four megabytes
of <a class="reference internal" href="p.html#term-physical-memory-1"><em class="xref std std-term">physical memory<sup>(1)</sup></em></a> but which has a working set of
ten megabytes will <a class="reference internal" href="#term-thrash"><em class="xref std std-term">thrash</em></a> badly.</p>
<div class="admonition-related-publication last admonition">
<p class="first admonition-title">Related publications</p>
<p class="last"><a class="reference internal" href="../mmref/bib.html#denning68"><em>Denning (1968)</em></a>, <a class="reference internal" href="../mmref/bib.html#denning70"><em>Denning (1970)</em></a>, <a class="reference internal" href="../mmref/bib.html#ds72"><em>Denning &amp; Schwartz (1972)</em></a>.</p>
</div>
</dd>
<dt id="term-thread">thread</dt>
<dd><p class="first">A thread of execution is a sequence of instructions that take
place sequentially. In a multi-threaded program, multiple
threads of execution operate in parallel, and are generally
asynchronous with respect to each other.</p>
<div class="admonition-relevance-to-memory-management admonition">
<p class="first admonition-title">Relevance to memory management</p>
<p class="last">Access to shared resources such as memory management
interface must be thread-safe. Each thread has its own
<a class="reference internal" href="c.html#term-control-stack"><em class="xref std std-term">control stack</em></a> which may contain <a class="reference internal" href="r.html#term-reference"><em class="xref std std-term">references</em></a>
to blocks on the heap.</p>
</div>
<div class="admonition-in-the-mps last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">Threads are represented by values of type
<a class="reference internal" href="../topic/thread.html#mps_thr_t" title="mps_thr_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_thr_t</span></tt></a>, created by calling
<a class="reference internal" href="../topic/thread.html#mps_thread_reg" title="mps_thread_reg"><tt class="xref c c-func docutils literal"><span class="pre">mps_thread_reg()</span></tt></a>. In order for the MPS to find
references on the control of the thread, the thread must
be also be registered as a root by calling
<a class="reference internal" href="../topic/root.html#mps_root_create_reg" title="mps_root_create_reg"><tt class="xref c c-func docutils literal"><span class="pre">mps_root_create_reg()</span></tt></a>. See <a class="reference internal" href="../topic/thread.html#topic-thread"><em>Threads</em></a>.</p>
</div>
</dd>
<dt id="term-threatened-set">threatened set</dt>
<dd><div class="admonition-see first last admonition">
<p class="first admonition-title">See</p>
<p class="last"><a class="reference internal" href="c.html#term-condemned-set"><em class="xref std std-term">condemned set</em></a>.</p>
</div>
</dd>
<dt id="term-tlb">TLB</dt>
<dd><div class="admonition-see first last admonition">
<p class="first admonition-title">See</p>
<p class="last"><a class="reference internal" href="#term-translation-lookaside-buffer"><em class="xref std std-term">translation lookaside buffer</em></a>.</p>
</div>
</dd>
<dt id="term-to-space"><span id="term-tospace"></span>to space<br />tospace</dt>
<dd><div class="admonition-also-known-as first admonition">
<p class="first admonition-title">Also known as</p>
<p class="last"><em>new space</em>, <em>newspace</em>.</p>
</div>
<p>In <a class="reference internal" href="c.html#term-copying-garbage-collection"><em class="xref std std-term">copying garbage collection</em></a>, the space to which
<a class="reference internal" href="l.html#term-live"><em class="xref std std-term">live</em></a> object are copied.</p>
<div class="admonition-opposite-term last admonition">
<p class="first admonition-title">Opposite term</p>
<p class="last"><a class="reference internal" href="f.html#term-fromspace"><em class="xref std std-term">fromspace</em></a>.</p>
</div>
</dd>
<dt id="term-trace">trace</dt>
<dd><p class="first">In <a class="reference internal" href="#term-tracing-garbage-collection"><em class="xref std std-term">tracing garbage collection</em></a>, tracing is the process
of following the <a class="reference internal" href="g.html#term-graph"><em class="xref std std-term">graph</em></a> from all <a class="reference internal" href="r.html#term-root"><em class="xref std std-term">roots</em></a>
to all <a class="reference internal" href="r.html#term-reachable"><em class="xref std std-term">reachable</em></a> data.</p>
<div class="admonition-similar-term last admonition">
<p class="first admonition-title">Similar term</p>
<p class="last"><a class="reference internal" href="s.html#term-scan"><em class="xref std std-term">scan</em></a>.</p>
</div>
</dd>
<dt id="term-tracing-garbage-collection">tracing garbage collection</dt>
<dd><p class="first">Tracing garbage collection is <a class="reference internal" href="g.html#term-garbage-collection"><em class="xref std std-term">garbage collection</em></a> based
on <a class="reference internal" href="r.html#term-reachable"><em class="xref std std-term">reachability</em></a>.</p>
<p class="last">Tracing garbage collection relies on the fact that if an
<a class="reference internal" href="o.html#term-object"><em class="xref std std-term">object</em></a> is not <a class="reference internal" href="r.html#term-reachable"><em class="xref std std-term">reachable</em></a>, there is no way the
<a class="reference internal" href="m.html#term-mutator"><em class="xref std std-term">mutator</em></a> could ever access it, and therefore it cannot
be <a class="reference internal" href="l.html#term-live"><em class="xref std std-term">live</em></a>. In each <a class="reference internal" href="c.html#term-collection-cycle"><em class="xref std std-term">collection cycle</em></a>, some or all
of the objects are <a class="reference internal" href="c.html#term-condemned-set"><em class="xref std std-term">condemned</em></a> and the
<a class="reference internal" href="g.html#term-graph"><em class="xref std std-term">graph</em></a> is <a class="reference internal" href="#term-trace"><em class="xref std std-term">traced</em></a> to find which of the condemned
objects are reachable. Those that were not reachable may be
<a class="reference internal" href="r.html#term-reclaim"><em class="xref std std-term">reclaimed</em></a>.</p>
</dd>
<dt id="term-translation-buffer"><span id="term-translation-lookaside-buffer"></span>translation buffer<br />translation lookaside buffer</dt>
<dd><div class="admonition-also-known-as first admonition">
<p class="first admonition-title">Also known as</p>
<p class="last">, <em>address translation cache</em>, <em>ATC</em>, <em>TB</em>.</p>
</div>
<p>The <em>translation lookaside buffer</em> or <em>address translation
cache</em> is small piece of associative <a class="reference internal" href="m.html#term-memory-1"><em class="xref std std-term">memory<sup>(1)</sup></em></a> within
a processor which caches part of the translation from
<a class="reference internal" href="v.html#term-virtual-address"><em class="xref std std-term">virtual addresses</em></a> to <a class="reference internal" href="p.html#term-physical-address"><em class="xref std std-term">physical addresses</em></a>.</p>
<p class="last">In a <a class="reference internal" href="v.html#term-virtual-memory"><em class="xref std std-term">virtual memory</em></a> system there is a translation from
<a class="reference internal" href="v.html#term-virtual-address"><em class="xref std std-term">virtual addresses</em></a> to <a class="reference internal" href="p.html#term-physical-address"><em class="xref std std-term">physical addresses</em></a>. This
translation can often be very large and complex and the data
structures that implement the translation (often a <a class="reference internal" href="p.html#term-page-table"><em class="xref std std-term">page
table</em></a>) can be too large to store efficiently on the
processor. Instead, a few elements of the translation are
stored in the TLB; the processor can access the TLB extremely
quickly. If a required translation for a particular virtual
address is not present in the TLB then <em>a TLB miss</em> is taken
and the address is resolved using the more general mechanism.</p>
</dd>
<dt id="term-transparent-alias"><span id="term-transparent-type"></span>transparent alias<br />transparent type</dt>
<dd><div class="admonition-in-the-mps first admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">In the MPS interface, a <em>transparent type</em> is an alias
defined using <tt class="docutils literal"><span class="pre">typedef</span></tt>, and this is documented so that
the <a class="reference internal" href="c.html#term-client-program"><em class="xref std std-term">client program</em></a> can rely on that fact. For
example, <a class="reference internal" href="../topic/interface.html#mps_addr_t" title="mps_addr_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_addr_t</span></tt></a> is a transparent alias for
<tt class="docutils literal"><span class="pre">void</span> <span class="pre">*</span></tt>. See <a class="reference internal" href="../topic/interface.html#topic-interface"><em>Interface conventions</em></a>.</p>
</div>
<div class="admonition-opposite-term last admonition">
<p class="first admonition-title">Opposite terms</p>
<p class="last"><a class="reference internal" href="d.html#term-derived-type"><em class="xref std std-term">derived type</em></a>, <a class="reference internal" href="o.html#term-opaque-type"><em class="xref std std-term">opaque type</em></a>.</p>
</div>
</dd>
<dt id="term-transport">transport</dt>
<dd><p class="first">In a <a class="reference internal" href="c.html#term-copying-garbage-collection"><em class="xref std std-term">copying collector</em></a>,
transporting is preventing an <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">object</em></a> in the
<a class="reference internal" href="c.html#term-condemned-set"><em class="xref std std-term">condemned set</em></a> from being collected by copying it and
adjusting the <a class="reference internal" href="r.html#term-reference"><em class="xref std std-term">reference</em></a> by which it was discovered to
point to the new copy.</p>
<div class="admonition-see-also last admonition seealso">
<p class="first admonition-title">See also</p>
<p class="last"><a class="reference internal" href="c.html#term-copying-garbage-collection"><em class="xref std std-term">scavenging</em></a>, <a class="reference internal" href="s.html#term-snap-out"><em class="xref std std-term">snap-out</em></a>.</p>
</div>
</dd>
<dt id="term-transport-snap-out">transport snap-out</dt>
<dd><div class="admonition-see first last admonition">
<p class="first admonition-title">See</p>
<p class="last"><a class="reference internal" href="s.html#term-snap-out"><em class="xref std std-term">snap-out</em></a>.</p>
</div>
</dd>
<dt id="term-treadmill">treadmill</dt>
<dd><p class="first">Henry Baker devised an <a class="reference internal" href="i.html#term-incremental-garbage-collection"><em class="xref std std-term">incremental</em></a> non-<a class="reference internal" href="m.html#term-moving-garbage-collector"><em class="xref std std-term">moving</em></a>
<a class="reference internal" href="g.html#term-garbage-collector"><em class="xref std std-term">garbage collector</em></a> that uses a circular doubly-linked
list, called the <em>treadmill</em>, to implement <a class="reference internal" href="#term-tri-color-marking"><em class="xref std std-term">tri-color
marking</em></a>.</p>
<p>Every <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">object</em></a> is on the list. The list has four
sections corresponding to <a class="reference internal" href="c.html#term-color"><em class="xref std std-term">colors</em></a>. The
<a class="reference internal" href="b.html#term-black"><em class="xref std std-term">black</em></a>, <a class="reference internal" href="g.html#term-gray"><em class="xref std std-term">gray</em></a> and <a class="reference internal" href="w.html#term-white"><em class="xref std std-term">white</em></a> sections are
used for tri-color marking, and an additional
<a class="reference internal" href="o.html#term-off-white"><em class="xref std std-term">off-white</em></a> section is used for <a class="reference internal" href="f.html#term-free-3"><em class="xref std std-term">free<sup>(3)</sup></em></a>
objects. The color of an object is changed by unlinking it
from the list and relinking it to a different part of the
list.</p>
<div class="figure align-center">
<img alt="Diagram: A treadmill." src="../_images/treadmill.svg" /><p class="caption">A treadmill. (Based on <a class="reference internal" href="../mmref/bib.html#jones12"><em>Jones (2012)</em></a>.)</p>
</div>
<div class="admonition-related-publication last admonition">
<p class="first admonition-title">Related publication</p>
<p class="last"><a class="reference internal" href="../mmref/bib.html#baker92c"><em>Baker (1992c)</em></a>.</p>
</div>
</dd>
<dt id="term-tri-color-invariant"><span id="term-tri-colour-invariant"></span><span id="term-tricolor-invariant"></span><span id="term-tricolour-invariant"></span>tri-color invariant<br />tri-colour invariant<br />tricolor invariant<br />tricolour invariant</dt>
<dd><p class="first">The term &#8220;tri-color invariant&#8221; is used to refer to any of a
number of properties of a <a class="reference internal" href="r.html#term-reference"><em class="xref std std-term">reference</em></a> <a class="reference internal" href="g.html#term-graph"><em class="xref std std-term">graph</em></a> that
are preserved throughout a <a class="reference internal" href="#term-tri-color-marking"><em class="xref std std-term">tri-color marking</em></a> algorithm
to ensure the correctness.</p>
<p>There are two important ones: the <a class="reference internal" href="s.html#term-strong-tri-color-invariant"><em class="xref std std-term">strong tri-color
invariant</em></a> and the <a class="reference internal" href="w.html#term-weak-tri-color-invariant"><em class="xref std std-term">weak tri-color invariant</em></a>. When
people say &#8220;the tri-color invariant&#8221; they probably mean the
strong one.</p>
<div class="admonition-related-publication last admonition">
<p class="first admonition-title">Related publications</p>
<p class="last"><a class="reference internal" href="../mmref/bib.html#johnstone97"><em>Johnstone (1997)</em></a>, <a class="reference internal" href="../mmref/bib.html#pirinen98"><em>Pirinen (1998)</em></a>.</p>
</div>
</dd>
<dt id="term-tri-color-marking"><span id="term-tri-colour-marking"></span><span id="term-tricolor-marking"></span><span id="term-tricolour-marking"></span>tri-color marking<br />tri-colour marking<br />tricolor marking<br />tricolour marking</dt>
<dd><p class="first">Tri-color marking is a <a class="reference internal" href="#term-tracing-garbage-collection"><em class="xref std std-term">tracing garbage collection</em></a>
algorithm that assigns a <a class="reference internal" href="c.html#term-color"><em class="xref std std-term">color</em></a> (<a class="reference internal" href="b.html#term-black"><em class="xref std std-term">black</em></a>,
<a class="reference internal" href="w.html#term-white"><em class="xref std std-term">white</em></a>, or <a class="reference internal" href="g.html#term-gray"><em class="xref std std-term">gray</em></a>) to each <a class="reference internal" href="n.html#term-node"><em class="xref std std-term">node</em></a> in the
<a class="reference internal" href="g.html#term-graph"><em class="xref std std-term">graph</em></a>. It is basic to <a class="reference internal" href="i.html#term-incremental-garbage-collection"><em class="xref std std-term">incremental garbage
collection</em></a>.</p>
<p>Initially all nodes are colored white. The distinguished
<a class="reference internal" href="r.html#term-root-set"><em class="xref std std-term">root set</em></a> is colored gray. The <a class="reference internal" href="c.html#term-collector-2"><em class="xref std std-term">collector<sup>(2)</sup></em></a>
proceeds to discover the <a class="reference internal" href="r.html#term-reachable"><em class="xref std std-term">reachable</em></a> nodes by finding an
<a class="reference internal" href="e.html#term-edge"><em class="xref std std-term">edge</em></a> from a gray node to a white node and coloring the
white node gray. Hence each tracing step involves choosing a
gray node and graying its white children.</p>
<p>When all the edges from a gray node lead only to other gray
(or black) nodes, the node is colored black. When no gray
nodes remain, the reachable part of the graph has been
discovered and any nodes that are still white may be
<a class="reference internal" href="r.html#term-recycle"><em class="xref std std-term">recycled</em></a>.</p>
<p>The <a class="reference internal" href="m.html#term-mutator"><em class="xref std std-term">mutator</em></a> is free to access any part of the graph
and allocate new nodes while the <a class="reference internal" href="c.html#term-collector-2"><em class="xref std std-term">collector<sup>(2)</sup></em></a> is
determining the reachable nodes, provided the <a class="reference internal" href="#term-tri-color-invariant"><em class="xref std std-term">tri-color
invariant</em></a> is maintained, by changing the colors of the nodes
affected, if necessary.</p>
<div class="admonition-historical-note admonition">
<p class="first admonition-title">Historical note</p>
<p class="last">&#8220;Tri-color marking&#8221; is the term used to describe an
algorithm developed in 1975 by E. W. Dijkstra and others,
as an exercise in proving cooperating programs correct.
They chose as their problem a <a class="reference internal" href="p.html#term-parallel-garbage-collection"><em class="xref std std-term">parallel garbage
collector</em></a>, with the intent
of illustrating cooperating sequential processes with a
large shared data space but minimal exclusion and
synchronization constraints.</p>
</div>
<p>Although the algorithm developed in the paper is not
necessarily the most efficient algorithm for a
<a class="reference internal" href="c.html#term-collector-1"><em class="xref std std-term">collector<sup>(1)</sup></em></a>, it has been generally accepted to be
correct: an important feature that not all garbage collectors
can claim. A number of other garbage collection algorithms
have been shown to be isomorphic to the tri-color marking
algorithm and thus are also believed to be correct.</p>
<div class="admonition-see-also admonition seealso">
<p class="first admonition-title">See also</p>
<p class="last"><a class="reference internal" href="b.html#term-barrier-1"><em class="xref std std-term">barrier<sup>(1)</sup></em></a>.</p>
</div>
<div class="admonition-related-publication last admonition">
<p class="first admonition-title">Related publication</p>
<p class="last"><a class="reference internal" href="../mmref/bib.html#dlmss76"><em>Dijkstra et al. (1976)</em></a>.</p>
</div>
</dd>
<dt id="term-two-space-collector"><span id="term-36"></span>two-space collector<br />two space collector</dt>
<dd><div class="admonition-also-known-as first admonition">
<p class="first admonition-title">Also known as</p>
<p class="last"><em>semi-space collector</em>.</p>
</div>
<p>A two-space <a class="reference internal" href="c.html#term-collector-1"><em class="xref std std-term">collector<sup>(1)</sup></em></a> is a simple form of a
<a class="reference internal" href="c.html#term-copying-garbage-collection"><em class="xref std std-term">copying garbage collector</em></a>. The available <a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a> is divided into
two halves, called <a class="reference internal" href="s.html#term-semi-space"><em class="xref std std-term">semi-spaces</em></a>. <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">Objects</em></a> are
allocated in one semi-space until it is full. The
<a class="reference internal" href="r.html#term-reachable"><em class="xref std std-term">reachable</em></a> objects are then copied into the other
semi-space (usually using a <a class="reference internal" href="c.html#term-cheney-scan"><em class="xref std std-term">Cheney scan</em></a>) and the old
semi-space is <a class="reference internal" href="r.html#term-reclaim"><em class="xref std std-term">reclaimed</em></a>. <a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">Allocation</em></a>
continues in the new semi-space until it is full, at which
point the process is repeated in reverse.</p>
<p>The main disadvantage of a two-space collector is that it only
makes use of half of the available memory. This can be
tolerable in a <a class="reference internal" href="v.html#term-virtual-memory"><em class="xref std std-term">virtual memory</em></a> system if the
<a class="reference internal" href="g.html#term-garbage-collector"><em class="xref std std-term">garbage collector</em></a> is written carefully to preserve
<a class="reference internal" href="l.html#term-locality-of-reference"><em class="xref std std-term">locality of reference</em></a>. Other forms of copying garbage
collector, such as <a class="reference internal" href="g.html#term-generational-garbage-collection"><em class="xref std std-term">generational garbage collectors</em></a>, have much lower overheads.</p>
<div class="figure align-center">
<img alt="Diagram: Two-space collector." src="../_images/two-space.svg" /><p class="caption">Two-space collector.</p>
</div>
<div class="admonition-see-also last admonition seealso">
<p class="first admonition-title">See also</p>
<p class="last"><a class="reference internal" href="f.html#term-flip"><em class="xref std std-term">flip</em></a>.</p>
</div>
</dd>
<dt id="term-type-accurate-garbage-collection">type-accurate garbage collection</dt>
<dd><div class="admonition-see first last admonition">
<p class="first admonition-title">See</p>
<p class="last"><a class="reference internal" href="e.html#term-exact-garbage-collection"><em class="xref std std-term">exact garbage collection</em></a>.</p>
</div>
</dd>
<dt id="term-type-punning">type punning</dt>
<dd><p class="first">Interpreting a value of one type as if it were a value of
another (for example, via a type cast in <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a>),
especially if such interpretation is not defined by the
language standard. For example, interpreting a value of type
<tt class="docutils literal"><span class="pre">T**</span></tt> (pointer to pointer to <tt class="docutils literal"><span class="pre">T</span></tt>) as <tt class="docutils literal"><span class="pre">U**</span></tt> is undefined.</p>
<div class="admonition-in-the-mps last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">See <a class="reference internal" href="../topic/interface.html#topic-interface"><em>Interface conventions</em></a>.</p>
</div>
</dd>
</dl>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/logo.png" alt="Logo"/>
</a></p>
<h4>Previous topic</h4>
<p class="topless"><a href="s.html"
title="previous chapter">Memory Management Glossary: S</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="u.html"
title="next chapter">Memory Management Glossary: U</a></p><h4>Downloads</h4>
<p class="topless">
<a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br>
<a href="http://www.ravenbrook.com/project/mps/release/">All MPS Kit releases</a>
</p>
<h4>Issues</h4>
<p class="topless">
<a href="http://www.ravenbrook.com/project/mps/issue/?action=list&amp;view=status%3dopen&amp;display=Job:Priority:Title&amp;sort=Priority">Known issues</a><br>
<a href="http://www.ravenbrook.com/project/mps/issue/?action=fixed&release_fixed=1.111.0">Issues fixed in release 1.111.0</a>
</p><h4>Contact us</h4>
<p class="topless"><a href="mailto:mps-questions@ravenbrook.com">mps-questions@ravenbrook.com</a></p>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="u.html" title="Memory Management Glossary: U"
>next</a> |</li>
<li class="right" >
<a href="s.html" title="Memory Management Glossary: S"
>previous</a> |</li>
<li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> &raquo;</li>
<li><a href="index.html" >Memory Management Glossary</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; <a href="../copyright.html">Copyright</a> 2013, Ravenbrook Limited.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
</div>
</body>
</html>