libdb/docs/programmer_reference/env_region.html

150 lines
8.1 KiB
HTML
Raw Normal View History

2011-09-13 17:44:24 +00:00
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!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>Shared memory regions</title>
<link rel="stylesheet" href="gettingStarted.css" type="text/css" />
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
<link rel="start" href="index.html" title="Berkeley DB Programmer's Reference Guide" />
<link rel="up" href="env.html" title="Chapter 9.  The Berkeley DB Environment" />
<link rel="prev" href="env_naming.html" title="File naming" />
<link rel="next" href="env_security.html" title="Security" />
</head>
<body>
<div xmlns="" class="navheader">
<div class="libver">
2012-11-14 21:35:20 +00:00
<p>Library Version 11.2.5.3</p>
2011-09-13 17:44:24 +00:00
</div>
<table width="100%" summary="Navigation header">
<tr>
<th colspan="3" align="center">Shared memory regions</th>
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="env_naming.html">Prev</a> </td>
<th width="60%" align="center">Chapter 9. 
The Berkeley DB Environment
</th>
<td width="20%" align="right"> <a accesskey="n" href="env_security.html">Next</a></td>
</tr>
</table>
<hr />
</div>
<div class="sect1" lang="en" xml:lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a id="env_region"></a>Shared memory regions</h2>
</div>
</div>
</div>
<p>
Each of the Berkeley DB subsystems within an environment is described by
one or more regions, or chunks of memory. The regions contain all of
the per-process and per-thread shared information (including mutexes),
that comprise a Berkeley DB environment. These regions are created in
one of three types of memory, depending on the flags specified to the
<a href="../api_reference/C/envopen.html" class="olink">DB_ENV-&gt;open()</a> method:
</p>
<div class="orderedlist">
<ol type="1">
<li>
<p>
If the <a href="../api_reference/C/envopen.html#envopen_DB_PRIVATE" class="olink">DB_PRIVATE</a> flag is specified to the <a href="../api_reference/C/envopen.html" class="olink">DB_ENV-&gt;open()</a> method,
regions are created in per-process heap memory; that is, memory
returned by <code class="literal">malloc</code>(3).
</p>
<p>
If this flag is specified, then you cannot open more than a
single handle for the environment. For example, if
both a server application and Berkeley DB utilities (for
example, the <a href="../api_reference/C/db_archive.html" class="olink">db_archive</a> utility, the <a href="../api_reference/C/db_checkpoint.html" class="olink">db_checkpoint</a> utility or the <a href="../api_reference/C/db_stat.html" class="olink">db_stat</a> utility)
are expected to access the environment, the <a href="../api_reference/C/envopen.html#envopen_DB_PRIVATE" class="olink">DB_PRIVATE</a> flag
should not be specified because the second attempt to open
the environment will fail.
</p>
</li>
<li>
<p>
If the <a href="../api_reference/C/envopen.html#envopen_DB_SYSTEM_MEM" class="olink">DB_SYSTEM_MEM</a> flag is specified to <a href="../api_reference/C/envopen.html" class="olink">DB_ENV-&gt;open()</a>, shared
regions are created in system memory rather than files. This is
an alternative mechanism for sharing the Berkeley DB environment
among multiple processes and multiple threads within processes.
</p>
<p>
The system memory used by Berkeley DB is potentially useful past
the lifetime of any particular process. Therefore, additional
cleanup may be necessary after an application fails because
there may be no way for Berkeley DB to ensure that system
resources backing the shared memory regions are returned to the
system.
</p>
<p>
The system memory that is used is architecture-dependent. For
example, on systems supporting X/Open-style shared memory
interfaces, such as UNIX systems, the
<code class="literal">shmget</code>(2) and related System V IPC interfaces
are used. Additionally, VxWorks systems use system memory. In
these cases, an initial segment ID must be specified by the
application to ensure that applications do not overwrite each
other's database environments, so that the number of segments
created does not grow without bounds. See the <a href="../api_reference/C/envset_shm_key.html" class="olink">DB_ENV-&gt;set_shm_key()</a>
method for more information.
</p>
<p>
On Windows platforms, the use of the <a href="../api_reference/C/envopen.html#envopen_DB_SYSTEM_MEM" class="olink">DB_SYSTEM_MEM</a> flag is
problematic because the operating system uses reference counting
to clean up shared objects in the paging file automatically. In
addition, the default access permissions for shared objects are
different from files, which may cause problems when an
environment is accessed by multiple processes running as
different users. See the <a href="../installation/build_win_notes.html" class="olink">Windows Notes</a> section in the
Berkeley DB Installation and Build Guide for more information.
</p>
</li>
<li>
If no memory-related flags are specified to <a href="../api_reference/C/envopen.html" class="olink">DB_ENV-&gt;open()</a>, memory backed
by the filesystem is used to store the regions. On UNIX systems,
the Berkeley DB library will use the POSIX mmap interface. If mmap
is not available, the UNIX shmget interfaces may be used instead, if
they are available.
</li>
</ol>
</div>
<p>
Any files created in the filesystem to back the regions are created in
the environment home directory specified to the <a href="../api_reference/C/envopen.html" class="olink">DB_ENV-&gt;open()</a> call. These
files are named __db.### (for example, __db.001, __db.002 and so on).
When region files are backed by the filesystem, one file per region is
created. When region files are backed by system memory, a single file
will still be created because there must be a well-known name in the
filesystem so that multiple processes can locate the system shared
memory that is being used by the environment.</p>
<p>Statistics
about the shared memory regions in the environment can be displayed
using the <span class="bold"><strong>-e</strong></span> option to the
<a href="../api_reference/C/db_stat.html" class="olink">db_stat</a> utility.
</p>
</div>
<div class="navfooter">
<hr />
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left"><a accesskey="p" href="env_naming.html">Prev</a> </td>
<td width="20%" align="center">
<a accesskey="u" href="env.html">Up</a>
</td>
<td width="40%" align="right"> <a accesskey="n" href="env_security.html">Next</a></td>
</tr>
<tr>
<td width="40%" align="left" valign="top">File naming </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
</td>
<td width="40%" align="right" valign="top"> Security</td>
</tr>
</table>
</div>
</body>
</html>