mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-03-26 08:41:47 -07:00
Design.mps.bootstrap
Copied from Perforce Change: 188195 ServerID: perforce.ravenbrook.com
This commit is contained in:
parent
3772a04825
commit
79e038ea60
3 changed files with 130 additions and 0 deletions
127
mps/design/bootstrap.txt
Normal file
127
mps/design/bootstrap.txt
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
.. mode: -*- rst -*-
|
||||
|
||||
Bootstrapping
|
||||
=============
|
||||
|
||||
:Tag: design.mps.bootstrap
|
||||
:Author: Gareth Rees
|
||||
:Date: 2015-09-01
|
||||
:Status: incomplete design
|
||||
:Revision: $Id$
|
||||
:Copyright: See section `Copyright and License`_.
|
||||
:Index terms: pair: bootsrap; design
|
||||
|
||||
|
||||
Introduction
|
||||
------------
|
||||
|
||||
_`.intro`: This explains how the MPS gets started.
|
||||
|
||||
_`.readership`: Any MPS developer.
|
||||
|
||||
_`.overview`: The job of the MPS is to allocate memory to a program.
|
||||
Before it can allocate memory, the MPS needs to create data structures
|
||||
to represent its internal state. But before it can create those data
|
||||
structures, it needs to allocate memory to store them in. This
|
||||
bootstrapping problem affects the MPS at several points, which are
|
||||
listed here, together with their solutions.
|
||||
|
||||
|
||||
Bootstrapping problems
|
||||
----------------------
|
||||
|
||||
Virtual memory descriptor
|
||||
.........................
|
||||
|
||||
_`.vm`: Before address space can be mapped into main memory, the
|
||||
virtual memory descriptor must be initialized. But before the virtual
|
||||
memory descriptor can be initialized, some address space must be
|
||||
mapped into main memory in order to store it. See
|
||||
`design.vm.req.bootstrap`_.
|
||||
|
||||
_`.vm.sol`: The virtual memory descriptor is allocated initially on
|
||||
the stack, and then copied into its place in the chunk after the
|
||||
memory for it has been mapped. See `design.vm.sol.bootstrap`_.
|
||||
|
||||
.. _design.vm.req.bootstrap: vm#req.bootstrap
|
||||
.. _design.vm.sol.bootstrap: vm#sol.bootstrap
|
||||
|
||||
|
||||
Arena descriptor
|
||||
................
|
||||
|
||||
_`.arena`: Before chunks of address space can be reserved and mapped,
|
||||
the virtual memory arena descriptor must be initialized (so that the
|
||||
chunks can be added to the arena's chunk tree). But before a virtual
|
||||
memory arena descriptor can be initialized, address space must be
|
||||
reserved and mapped in order to store it.
|
||||
|
||||
_`.arena.sol`: A small amount of address space is reserved and mapped
|
||||
directly via ``VMInit()`` and ``VMMap()`` (not via the chunk system)
|
||||
in order to provide enough memory for the arena descriptor.
|
||||
|
||||
|
||||
Arena's free land
|
||||
.................
|
||||
|
||||
_`.land`: Before the arena can allocate memory, a range of addresses
|
||||
must be inserted into the arena's free land (so that the free land can
|
||||
hand out memory from this range). But before addresses can be inserted
|
||||
into the arena's free land, the arena must be able to allocate memory
|
||||
(to store the nodes in the tree representing those addresses).
|
||||
|
||||
_`.land.sol`: The arena has two "back door" mechanisms and uses them
|
||||
in combination. First, there is a mechanism for allocating a block of
|
||||
memory directly from a chunk, bypassing the free land; second, the MFS
|
||||
pool class has a mechanism for extending it with a block of memory.
|
||||
|
||||
|
||||
Document History
|
||||
----------------
|
||||
|
||||
- 2015-09-01 GDR_ Initial draft.
|
||||
|
||||
.. _GDR: http://www.ravenbrook.com/consultants/gdr/
|
||||
|
||||
|
||||
Copyright and License
|
||||
---------------------
|
||||
|
||||
Copyright © 2015 Ravenbrook Limited. All rights reserved.
|
||||
<http://www.ravenbrook.com/>. This is an open source license. Contact
|
||||
Ravenbrook for commercial licensing options.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
#. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
#. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
#. Redistributions in any form must be accompanied by information on how
|
||||
to obtain complete source code for this software and any
|
||||
accompanying software that uses this software. The source code must
|
||||
either be included in the distribution or be available for no more than
|
||||
the cost of distribution plus a nominal fee, and must be freely
|
||||
redistributable under reasonable conditions. For an executable file,
|
||||
complete source code means the source code for all modules it contains.
|
||||
It does not include source code for modules or files that typically
|
||||
accompany the major components of the operating system on which the
|
||||
executable file runs.
|
||||
|
||||
**This software is provided by the copyright holders and contributors
|
||||
"as is" and any express or implied warranties, including, but not
|
||||
limited to, the implied warranties of merchantability, fitness for a
|
||||
particular purpose, or non-infringement, are disclaimed. In no event
|
||||
shall the copyright holders and contributors be liable for any direct,
|
||||
indirect, incidental, special, exemplary, or consequential damages
|
||||
(including, but not limited to, procurement of substitute goods or
|
||||
services; loss of use, data, or profits; or business interruption)
|
||||
however caused and on any theory of liability, whether in contract,
|
||||
strict liability, or tort (including negligence or otherwise) arising in
|
||||
any way out of the use of this software, even if advised of the
|
||||
possibility of such damage.**
|
||||
|
|
@ -44,6 +44,7 @@ alloc-frame_ Allocation frame protocol
|
|||
an_ Generic modules
|
||||
arena_ Arena
|
||||
arenavm_ Virtual memory arena
|
||||
bootstrap_ Bootstrapping
|
||||
bt_ Bit tables
|
||||
buffer_ Allocation buffers and allocation points
|
||||
cbs_ Coalescing block structures
|
||||
|
|
@ -122,6 +123,7 @@ writef_ The WriteF function
|
|||
.. _an: an
|
||||
.. _arena: arena
|
||||
.. _arenavm: arenavm
|
||||
.. _bootstrap: bootstrap
|
||||
.. _bt: bt
|
||||
.. _buffer: buffer
|
||||
.. _cbs: cbs
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ Design
|
|||
|
||||
abq
|
||||
an
|
||||
bootstrap
|
||||
cbs
|
||||
config
|
||||
critical-path
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue