mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-18 00:50:44 -08:00
546 lines
No EOL
40 KiB
HTML
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 — 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> »</li>
|
|
<li><a href="index.html" accesskey="U">Memory Management Glossary</a> »</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’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 “data” 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 & 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 “tri-color invariant” 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 “the tri-color invariant” 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">“Tri-color marking” 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&view=status%3dopen&display=Job:Priority:Title&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> »</li>
|
|
<li><a href="index.html" >Memory Management Glossary</a> »</li>
|
|
</ul>
|
|
</div>
|
|
<div class="footer">
|
|
© <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> |