Methods of allocating, writing, reading, de-allocating, re-allocating, and
reclaiming space within a nonvolatile memory having a bifurcated storage
architecture are described. A method of reliably re-allocating a first
object includes the step of storing a location of a first object in a
first data structure. A location of the first data structure is stored in
a second data structure. A duplicate of the first object is formed by
initiating a copy of the first object. An erase of the first object is
initiated. A write of a second object to the location of the first object
is then initiated. The duplicate object is invalidated. The status of
copying, erasing, and writing is tracked. The copy status, erase status,
write status, and a restoration status are used to determine a recovery
state upon initialization of the nonvolatile memory. The duplicate object
is invalidated, if the writing status indicates that the writing of the
second object has been completed. The first object is erased, if a
restoration status indicates copying of the duplicate object was
initiated but not completed. The erasing of the first object is
completed, if the erase status indicates that erasure of the first object
is not completed. A restoration of the duplicate object to the location
of the first object is initiated, if the copying status indicates that
copying of the first object was completed. The copying of the duplicate
object is tracked as a restoration status.