mirror of
https://github.com/berkeleydb/libdb.git
synced 2024-11-16 09:06:25 +00:00
149 lines
8.1 KiB
HTML
149 lines
8.1 KiB
HTML
<?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">
|
||
<p>Library Version 11.2.5.3</p>
|
||
</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->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->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->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->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->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->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>
|