summaryrefslogtreecommitdiff
path: root/static/freebsd/man9/vm_map_entry_resize_free.9 3.html
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 19:59:05 -0400
committerJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 19:59:05 -0400
commit1f19f33e45791ea59aed048796fc68672c6723a5 (patch)
tree54625fba89e91d1c2177801ec635e8528bba937f /static/freebsd/man9/vm_map_entry_resize_free.9 3.html
parentac5e55f5f2af5b92794c2aded46c6bae85b5f5ed (diff)
docs: Removed Precompiled HTML
Diffstat (limited to 'static/freebsd/man9/vm_map_entry_resize_free.9 3.html')
-rw-r--r--static/freebsd/man9/vm_map_entry_resize_free.9 3.html176
1 files changed, 0 insertions, 176 deletions
diff --git a/static/freebsd/man9/vm_map_entry_resize_free.9 3.html b/static/freebsd/man9/vm_map_entry_resize_free.9 3.html
deleted file mode 100644
index 11a88d84..00000000
--- a/static/freebsd/man9/vm_map_entry_resize_free.9 3.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VM_MAP_ENTRY_RESIZE_FREE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VM_MAP_ENTRY_RESIZE_FREE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vm_map_entry_resize_free</code> &#x2014;
- <span class="Nd">vm map free space algorithm</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">vm/vm_map.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">vm_map_entry_resize_free</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t
- map</var>, <var class="Fa" style="white-space: nowrap;">vm_map_entry_t
- entry</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">This manual page describes the <var class="Vt">vm_map_entry</var>
- fields used in the VM map free space algorithm, how to maintain consistency
- of these variables, and the
- <a class="permalink" href="#vm_map_entry_resize_free"><code class="Fn" id="vm_map_entry_resize_free">vm_map_entry_resize_free</code></a>()
- function.</p>
-<p class="Pp">VM map entries are organized as both a doubly-linked list
- (<var class="Va">prev</var> and <var class="Va">next</var> pointers) and as
- a binary search tree (<var class="Va">left</var> and
- <var class="Va">right</var> pointers). The search tree is organized as a
- Sleator and Tarjan splay tree, also known as a &#x201C;self-adjusting
- tree&#x201D;.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct vm_map_entry {
- struct vm_map_entry *prev;
- struct vm_map_entry *next;
- struct vm_map_entry *left;
- struct vm_map_entry *right;
- vm_offset_t start;
- vm_offset_t end;
- vm_offset_t avail_ssize;
- vm_size_t adj_free;
- vm_size_t max_free;
- ...
-};</pre>
-</div>
-<p class="Pp">The free space algorithm adds two fields to <var class="Vt">struct
- vm_map_entry</var>: <var class="Va">adj_free</var> and
- <var class="Va">max_free</var>. The <var class="Va">adj_free</var> field is
- the amount of free address space adjacent to and immediately following
- (higher address) the map entry. This field is unused in the map header. Note
- that <var class="Va">adj_free</var> depends on the linked list, not the
- splay tree and that <var class="Va">adj_free</var> can be computed as:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>entry-&gt;adj_free = (entry-&gt;next == &amp;map-&gt;header ?
- map-&gt;max_offset : entry-&gt;next-&gt;start) - entry-&gt;end;</pre>
-</div>
-<p class="Pp">The <var class="Va">max_free</var> field is the maximum amount of
- contiguous free space in the entry's subtree. Note that
- <var class="Va">max_free</var> depends on the splay tree, not the linked
- list and that <var class="Va">max_free</var> is computed by taking the
- maximum of its own <var class="Va">adj_free</var> and the
- <var class="Va">max_free</var> of its left and right subtrees. Again,
- <var class="Va">max_free</var> is unused in the map header.</p>
-<p class="Pp" id="O">These fields allow for an
- <a class="permalink" href="#O"><code class="Fn">O</code></a>(<var class="Fa">log
- n</var>) implementation of
- <a class="permalink" href="#vm_map_findspace"><code class="Fn" id="vm_map_findspace">vm_map_findspace</code></a>().
- Using <var class="Va">max_free</var>, we can immediately test for a
- sufficiently large free region in an entire subtree. This makes it possible
- to find a first-fit free region of a given size in one pass down the tree,
- so <code class="Fn">O</code>(<var class="Fa">log n</var>) amortized using
- splay trees.</p>
-<p class="Pp" id="vm_map_entry_link">When a free region changes size, we must
- update <var class="Va">adj_free</var> and <var class="Va">max_free</var> in
- the preceding map entry and propagate <var class="Va">max_free</var> up the
- tree. This is handled in
- <a class="permalink" href="#vm_map_entry_link"><code class="Fn">vm_map_entry_link</code></a>()
- and
- <a class="permalink" href="#vm_map_entry_unlink"><code class="Fn" id="vm_map_entry_unlink">vm_map_entry_unlink</code></a>()
- for the cases of inserting and deleting an entry. Note that
- <code class="Fn">vm_map_entry_link</code>() updates both the new entry and
- the previous entry, and that <code class="Fn">vm_map_entry_unlink</code>()
- updates the previous entry. Also note that <var class="Va">max_free</var> is
- not actually propagated up the tree. Instead, that entry is first splayed to
- the root and then the change is made there. This is a common technique in
- splay trees and is also how map entries are linked and unlinked into the
- tree.</p>
-<p class="Pp" id="vm_map_entry_resize_free~2">The
- <a class="permalink" href="#vm_map_entry_resize_free~2"><code class="Fn">vm_map_entry_resize_free</code></a>()
- function updates the free space variables in the given
- <var class="Fa">entry</var> and propagates those values up the tree. This
- function should be called whenever a map entry is resized in-place, that is,
- by modifying its <var class="Va">start</var> or <var class="Va">end</var>
- values. Note that if you change <var class="Va">end</var>, then you should
- resize that entry, but if you change <var class="Va">start</var>, then you
- should resize the previous entry. The map must be locked before calling this
- function, and again, propagating <var class="Va">max_free</var> is performed
- by splaying that entry to the root.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">Consider adding a map entry with
- <code class="Fn">vm_map_insert</code>().</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>ret = vm_map_insert(map, object, offset, start, end, prot,
- max_prot, cow);</pre>
-</div>
-<p class="Pp">In this case, no further action is required to maintain
- consistency of the free space variables. The
- <code class="Fn">vm_map_insert</code>() function calls
- <code class="Fn">vm_map_entry_link</code>() which updates both the new entry
- and the previous entry. The same would be true for
- <code class="Fn">vm_map_delete</code>() and for calling
- <code class="Fn">vm_map_entry_link</code>() or
- <code class="Fn">vm_map_entry_unlink</code>() directly.</p>
-<p class="Pp">Now consider resizing an entry in-place without a call to
- <code class="Fn">vm_map_entry_link</code>() or
- <code class="Fn">vm_map_entry_unlink</code>().</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>entry-&gt;start = new_start;
-if (entry-&gt;prev != &amp;map-&gt;header)
- vm_map_entry_resize_free(map, entry-&gt;prev);</pre>
-</div>
-<p class="Pp">In this case, resetting <var class="Va">start</var> changes the
- amount of free space following the previous entry, so we use
- <code class="Fn">vm_map_entry_resize_free</code>() to update the previous
- entry.</p>
-<p class="Pp">Finally, suppose we change an entry's <var class="Va">end</var>
- address.</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>entry-&gt;end = new_end;
-vm_map_entry_resize_free(map, entry);</pre>
-</div>
-<p class="Pp">Here, we call <code class="Fn">vm_map_entry_resize_free</code>()
- on the entry itself.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">vm_map(9)</a>,
- <a class="Xr">vm_map_findspace(9)</a></p>
-<p class="Pp"><cite class="Rs"><span class="RsA">Daniel D. Sleator</span> and
- <span class="RsA">Robert E. Tarjan</span>, <span class="RsT">Self-Adjusting
- Binary Search Trees</span>, <i class="RsJ">JACM</i>, <span class="RsV">vol.
- 32(3)</span>, <span class="RsP">pp. 652-686</span>, <span class="RsD">July
- 1985</span>.</cite></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">Splay trees were added to the VM map in <span class="Ux">FreeBSD
- 5.0</span>, and the <code class="Fn">O</code>(<var class="Fa">log n</var>)
- tree-based free space algorithm was added in <span class="Ux">FreeBSD
- 5.3</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The tree-based free space algorithm and this manual page were
- written by <span class="An">Mark W. Krentel</span>
- &lt;<a class="Mt" href="mailto:krentel@dreamscape.com">krentel@dreamscape.com</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">August 17, 2004</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>