WO2003005203A2 - System and method of object-oriented persistence - Google Patents

System and method of object-oriented persistence Download PDF

Info

Publication number
WO2003005203A2
WO2003005203A2 PCT/CA2002/001008 CA0201008W WO03005203A2 WO 2003005203 A2 WO2003005203 A2 WO 2003005203A2 CA 0201008 W CA0201008 W CA 0201008W WO 03005203 A2 WO03005203 A2 WO 03005203A2
Authority
WO
WIPO (PCT)
Prior art keywords
persisted
objects
address
reference table
storage device
Prior art date
Application number
PCT/CA2002/001008
Other languages
French (fr)
Other versions
WO2003005203A3 (en
Inventor
John F. A. Dahms
David P. Yach
Original Assignee
Research In Motion Limited
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Research In Motion Limited filed Critical Research In Motion Limited
Priority to CA002452534A priority Critical patent/CA2452534A1/en
Priority to US10/482,756 priority patent/US8019789B2/en
Priority to EP02745001A priority patent/EP1402356A2/en
Priority to AU2002317099A priority patent/AU2002317099A1/en
Publication of WO2003005203A2 publication Critical patent/WO2003005203A2/en
Publication of WO2003005203A3 publication Critical patent/WO2003005203A3/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/4493Object persistence

Definitions

  • This invention relates to the field of information storage. Particularly, this invention relates to storing object-oriented information within an object-oriented environment.
  • the present invention overcomes such disadvantages as well as others.
  • a system and method are disclosed that handle an application's access of persisted objects for use within a mobile communications device.
  • the device includes a non-volatile storage device that has at least a portion of its storage locations addressable by the application.
  • a reference table contains the addresses of persisted objects contained in the storage device. Via the reference table, an application can locate persisted objects stored in the storage device.
  • FIG. 1 is a block diagram illustrating software and computer components used in persisting and unpersisting objects
  • FIG. 2 is a data structure diagram illustrating a reference table
  • FIGS. 3 and 4 are block diagrams illustrating an example of a format occupied by objects in RAM and that may be accessed via a reference table
  • FIGS. 5 and 6 are block diagrams illustrating an example of a format occupied by persisted objects and that may be accessed via a reference table
  • FIGS. 7 and 8 are block diagrams illustrating cooperation of objects in RAM and non-volatile storage
  • FIGS. 9 and 10 are block diagrams illustrating un-grouped persistable objects
  • FIG. 11 is a block diagram illustrating groupings of object references
  • FIG. 12 is a data structure diagram illustrating a reference table for use in groupings of object references
  • FIGS. 13 and 14 are block diagrams illustrating grouped persisted objects
  • FIG. 15 is a flowchart illustrating an example of persisting objects
  • FIG. 16 is a flowchart illustrating an example of object grouping
  • FIG. 17 is a flowchart illustrating an example of un-persisting objects
  • FIG. 18 is a flowchart illustrating an example of object un- grouping.
  • FIG. 19 is a flowchart illustrating an example of re-population of a reference table with persisted object references.
  • FIG. 1 depicts a system 2 to handle an application's 4 access of objects (e.g., 10A and 70B) within the environment of a mobile communications device 6.
  • objects e.g., 10A and 70B
  • the application 4 accesses desired objects 10A and 70B without special regard to whether the objects 10A and 70B are stored in random access memory (RAM) 20 or a non-volatile storage device 12, respectively.
  • RAM 20 and the storage device 12 have addresses that are within an addressable space.
  • Some storage devices can be addressed like conventional RAM, such as flash memory for instance.
  • a persisted object can be read directly from storage. In this way, both reading and writing of persisted objects can be accomplished while an object is persisted.
  • the addressable space for RAM 20 and the storage device 12 may comprise the same addressable space, or substantially the same addressable space. In a different embodiment, the addressable space may be different.
  • a persisted object is an object that has achieved object-oriented persistence and is located in the storage device 12.
  • an object that has the potential to be persisted (such as object 10A in RAM 20) is defined as a persistable object.
  • Persisting an object is defined as the process of providing a persisted object from a persistable object.
  • Unpersisting an object is defined as the converse, the process of providing a persistable object from a persisted object.
  • Persisted objects are stored in the storage device 12 whose contents are unaffected if power 14 is removed (whereas the contents of volatile memory 20 are lost when power 14 is no longer supplied to it).
  • object-oriented persistence may include the format being occupied by an object in storage 12 being substantially similar to the format a corresponding object occupies in RAM 20.
  • object-oriented persistence may include the format being occupied by an object in storage 12 being substantially similar to the format a corresponding object occupies in RAM 20.
  • a useable persisted object may continue to be referenced by other objects residing in either RAM or storage, as well as reference other objects.
  • a mobile communications device such as a PDA, cellular telephone, or data communications device can selectively move objects to and from storage without consuming significant resources.
  • an object Once an object is persisted, it can continue to be used in substantially the same way as an object in RAM. This is a significant advantage over an unusable serialized object, which has to be loaded to be used, and may typically take up to three orders of magnitude more time to become useable. It is noted that file access times may be measured in milliseconds whereas memory access may be measured in nanoseconds.
  • an Address object might have a Name attribute and a Telephone attribute. Since most address-book entries do not change very often and are used regularly, it may be desirable to persist address-book entries so that they can be both stored and read in the future. Address objects benefit by being persistable, and benefit from being useable persisted objects.
  • Name and Telephone attributes being integral to an Address object
  • an object-oriented runtime is able to read useable persisted Address objects directly while they reside in storage 12 without need to retrieve Address objects from storage 12. This is . a significant savings that may allow a persisted object to take several orders of magnitude less time to become useable in comparison to a serialized object.
  • persisted objects are less likely to become obsolete.
  • the system 2 includes a reference table 30 that locates objects 10A and 70B whether they are in RAM 20 or the storage device 12. For example where an application 4 wishes to access persistable object A 10A, the reference table 30 provides the memory address of the persistable object A 10A which is located in RAM 20. If the application 4 also has need to access persisted object B 70B, then the reference table 30 provides the memory address of the persisted object B 70B, which is located in the storage device 12. It should be understood that the system 2 may store objects for direct access by the application 4 in both the storage device 12 and RAM 20, or solely in the storage device 12, or solely in RAM 20. The system 2 is configured with the combination that best suits the application at hand.
  • one or more applications may utilize the system 2 to access the objects referenced in the reference table 30.
  • the system 2 may include persistence of module objects to provide useable persisted modules. Modules may be used, for instance, to hold target-linked object classes. If the module is not useable from storage, virtually no operations are required to render it useable once unpersisted. However, by useably persisting modules, it is possible to execute code for an object-oriented runtime directly from storage 12.
  • FIG. 2 depicts a data structure of the reference table 30.
  • Indexed storage elements 32 within the reference table 30 contain addresses 34 to the objects stored in the storage device or in RAM. Given a desired object's index 36 to a storage element 32, the desired object's address 38 is obtained from the reference table 30. An object's address 34 in a storage element 32 reflects whether the object is in a storage device or RAM.
  • the reference table 30 obviates an application having to specially recognize where the object is stored.
  • FIGS. 3 and 4 depict an example of a format occupied by objects in RAM and that may be accessed via the reference table:
  • Two objects 10A and 10B are shown as they might appear somewhere in RAM 20.
  • the reference table 30 is also situated in RAM 20.
  • the reference table 30 has several storage elements 35A and 35B of a fixed size "w" 37 to simplify the indexed access to storage elements.
  • Each used storage element 35A and 35B corresponds to an object 10A and 10B which is somewhere in an addressable space. For instance object A 10A finds correspondence with storage element index "a" 35A whereas object B 10B finds correspondence with storage element index "b" 35B.
  • the address 40A and 40B of corresponding objects 10A and 10B is stored in a storage element 35A and 35B, so that knowing the index of an object in the reference table 30 it is possible to obtain the address 40A and 40B of an object. This is done by first obtaining the address @ R 50 of the reference table 30. Then, given an object's reference, such as "a" 55A for object A 10A, the address of the storage element @(R+a*w) 60A can be obtained by multiplying the index 55A "a" by the size "w" 37 of each storage element and adding to the resulting value the address @R 50 of the reference table 30.
  • the address of the storage element @(R+b * w) 60B corresponding to object B 10B can be obtained using the same technique by using index "b" in lieu of "a". Since the "a" storage element 35A holds the address of the corresponding object A 10A, resolving the contents of the storage element 35A provides the address @A 40A of object A 10A. Also shown is how each object 10A and 10B contains within its format its own reference 55A and 55B related to the reference table 30. Also shown is how, for example, object A 10A contains within its format a reference "b" 65B to object B 10B. This allows a runtime context within the scope of object A 10A to be able to access object B 10B.
  • object A 10A may be an instance of class "A" whereas object B 10B may be an instance of class "B".
  • object A might be an instance of an Address class
  • object B might be an instance of a Name class.
  • Address class and Name class situated somewhere in the addressable space, such as in RAM.
  • object A 10A and object B 10B could both be instances of the same class.
  • Objects A and B are used by way of example only with the understanding that in practice there may be many objects which are instances of many classes.
  • FIGS. 5 and 6 depict an example of the format occupied by persisted objects and that may be accessed via a reference table.
  • Two useable persisted objects 70A and 70B are illustrated as they might appear somewhere in storage, such as flash 80.
  • the address of persisted objects 70A and 70B are stored in reference table 30 storage elements 35A and 35B, so that by knowing the index of a persisted object in the reference table 30 it is possible to obtain the address 90A, 90B of the persisted objects.
  • the address of the storage element @(R+b*w) 60B can be obtained by multiplying the index 55B "b" by the size "w" 37 of each storage element and adding the resulting value to the address @ R 50 of the reference table 30. Since the "b" storage element 35B holds the address of the corresponding persisted object B 70B, resolving the contents of the storage element 35B provides the address @B 90B of persisted object B 70B. The same technique can be used to provide the address 90A of persisted object 70A from the address of storage element @(R+a*w) 60A.
  • each persisted object 70A and 70B contains within its format its own reference 55A and 55B related to the reference table 30. Also shown is how, for example, persisted object A 70A contains within its format a reference "b" 65B to persisted object B 70B. This allows a runtime context within the scope of persisted object A 70A to be able to access persisted object B 70B.
  • Persisted objects A 70A and B 70B are situated in flash 80.
  • the format in flash 80 of persisted objects 70A, 70B of FIG. 5 is substantially similar to corresponding objects 10A and 10B in RAM 20 of FIG. 3. Since flash 80 is addressable and can be read substantially in the same way as RAM 20, and since the persisted objects 70A, 70B are substantially in the same format as corresponding un-persisted objects 10A and 10B of FIG. 3, persisted objects 70A, 70B can be referenced by the runtime context "as if" they were in RAM 20, thereby making them useable persisted objects.
  • persisted objects A 70A and B 70B When power is shut off, persisted objects A 70A and B 70B will remain stored in flash 80. However, reference table 30 will be lost making persisted objects A 70A and B 70B temporarily unusable. When power is restored, reference table 30 can be systematically re-populated by reading flash 80 since every persisted object 70A, 70B has within its format its own reference, thereby restoring useable persisted objects A 70A and B 70B. Re- population will be described in greater detail in reference to FIG. 19.
  • FIGS. 7 and 8 a block diagram illustrating the cooperation of objects in RAM and persisted objects is described.
  • An object 10A and a useable persisted object B 70B are illustrated, as they might appear somewhere in RAM 20 and flash 80 respectively.
  • a persisted object such as object B 70B
  • a runtime context within the scope of persisted object B 70B such as an instance method context, may receive an object reference to object A 10A as a parameter.
  • FIGS. 9 and 10 block diagrams illustrating un- grouped persistable objects are described.
  • Two objects 10A and 10B are illustrated as they might appear somewhere in RAM 20.
  • reference table 30 may have a maximum of n storage elements. This might be the case, for instance, in a device with limited RAM 20. By imposing an upper limit n, the reference table 30 can be maintained within a reasonable size.
  • Each used storage element corresponds to objects 10A and 10B which are somewhere in an addressable space, which makes un-grouped objects 10A and 10B compatible with other objects thus far described.
  • object A 10A finds correspondence with storage element "a" 35A whereas object B 10B finds correspondence with storage element "b" 35B.
  • the address of corresponding objects 10A and 10B are stored in storage element 35A, 35B, so that knowing the index of an object in the reference table 30 it is possible to obtain the address 40A, 40B of an object. This is done by first obtaining the address @ R 50 of the reference table 30. Then, given an objects reference 55A, such as "0
  • the address of storage element @(R+b*w) 60B can be obtained given an objects reference 55B, such as "0
  • the address of the object @A 40A is contained in the corresponding storage element 35A.
  • the address of the object @B 40B is contained in the corresponding storage element 35B.
  • a" for object A 10A and "this ref 0
  • flash 80 might comprise several blocks 120, of which only 2 are illustrated for brevity. This is meant to illustrate how some flash 80 may be addressed to be read in a manner substantially similar to RAM 20, but may be only written to in blocks 120.
  • the block technique may also use object grouping.
  • Grouping conserves reference table's RAM 20 usage.
  • FIG. 11 shows groupings 102 of object references so that objects integral to a "root" object are located in addressable space in substantially close proximity to the "root” object. In this way, RAM 20 can be used more efficiently since it only uses a single object reference element 04 in the reference table 30 for each "root" object in a group.
  • Grouped object references 102 are updated so that they are offset relative to the "root” object.
  • Object reference grouping is defined as relating object addresses in a group of objects by an offset to a "root” object reference that integrates the group.
  • FIG. 12 depicts a reference table data structure for use in groupings of object references.
  • Indexed storage elements 32 within the reference table 30 contain addresses 104 to the "root" objects stored in the storage device or in RAM. Given a desired object's root object's index 106, the root object's address is obtained from the reference table 30. A root object's address in a storage element 32 reflects whether the object is in a storage device or RAM.
  • the "root" object 108 contains object references to its integral grouped objects, such as the desired object.
  • the desired object is referenced in the format of the "root” object.
  • the address 110 of the desired object is related to the address of the "root” object by an "offset" as discussed in greater detail in reference to FIGS. 13 and 14.
  • FIGS. 13 and 14 block diagrams illustrating grouped persisted objects are described.
  • Two persisted objects 70A, 70B are illustrated as they might appear in block 120 of flash 80.
  • the reference table 30 has several storage elements 35 of a fixed size "w" 37 for the indexed access to storage elements.
  • Each used storage element, such as "a" 35A corresponds to an object 70A which is somewhere in an addressable space.
  • object A 70A finds correspondence with storage element index "a" 35A.
  • object B 70B does not find immediate correspondence with storage element index "b" - this is because object B 70B has been grouped with object A 70A in order to conserve reference table 30 RAM 20 usage.
  • object A 70A is still referenced in the reference table 30, and that its reference 55A "0
  • Object A 70A is therefore a "root” object, harboring object references to its integral grouped objects, such as object B 70B.
  • Object B 70B is referenced in the format of the "root” object 70A, the address @B 90B of object B 70B is related to the address @A 90A of "roof object A 70A by an "offset”.
  • the "offset” 130 is the difference between the flash address @A 90A of object A and the flash address @B 90B of object B. Note that all objects in the group 70A, 70B are in the same block 120 of flash 80.
  • the range of offset 130 is related to the size of block 120.
  • the offset can be represented using 16 bits.
  • the address of "root" object 70A is stored in storage element 35A so that by knowing the index of a "root” object 70A in the reference table 30 it is possible to obtain the address @A 90A of a "root” object. Resolving the address @B 90B of object B 70B can still be related to the reference table 30 via "root" object A 70A.
  • @ R 50 index "a" 35A (multiplied by the width 37) provides the address of the storage element @(R+a*w) 60A (which contains the address @A 90A of the "root” object A 70 A).
  • each object 70A, 70B contains within its format its own reference 55A, 55B ultimately still accessible via reference table 30 for "root” objects, and via "root” objects for grouped objects.
  • the number of reference table Elements "n”, and the size of each reference table 30 storage element "w" 37 can be adapted to suit particular needs. For example, if w is 32 bits, then a 32-bit addressable space may be used. If a flash block size of 64K is used, then 16 bits of object references 55A, 55B 65B may be used for the offset and the remaining bits may be used as an index into the reference table 30, as illustrated with the "offset
  • the maximum number of elements "n” depends on the number of object references desired, and therefore imposes the range of the lower order bits representing the index "i" in object references. Of interest is using 16 bits for the index thereby providing a 32-bit object reference, comparable in size to the addressable space address size.
  • grouped objects may further conserve RAM 20 usage by being persisted to storage, such as flash 80. Further still, by making the "root" persisted objects usable directly from flash 80, Addresses and Emails can be read and used directly from flash without consuming substantial RAM 20. If flash 80 is block-writable, then when Addresses and Emails are grouped and persisted, they can be considered "read-only". In order to modify a "readonly" object, the object is un-persisted and optionally un-grouped, modified, and optionally grouped and persisted anew.
  • object grouping provides the additional indication that grouped persistent object can be considered "read-only".
  • a flowchart illustrating persisting objects is described.
  • a persistable object's 10 format is read from memory 20.
  • a substantially similar persisted object 70 format is written to storage 80:
  • the reference table 30 is updated to reflect the change of address from memory address @Ar 40 to storage address @Af 90. This makes the persisted object 70 useable in substantially the same way as the persistable object 10, thereby allowing the persistable object 10 to be destroyed and the persisted object 70 to transparently take its place.
  • the objects referenced in the format of the persisted object 70 are persisted in substantially close proximity to the persisted object, as is illustrated in further detail next in reference to FIG. 16.
  • a flowchart illustrating object grouping 300 is described.
  • a persistable object 10B referenced in a root object 70A is persisted, for instance according to the steps described in FIG. 15.
  • the persisted object 70B is located substantially proximate to the root object 70A, and offset 130 from it so as to facilitate grouping.
  • the root object 70A reference is updated to point to the persisted object of step 200, by using a reference which is offset from the root object "offset
  • the reference of the persisted object 70B within its format is also updated to "offset
  • the reference in reference table 30 to the grouped object 70B is removed. The grouped object 70B is still useable via root object 70A.
  • a flowchart illustrating un-persisting objects 400 is described.
  • a persisted object's 70 format is read from storage.
  • a substantially similar persistable object 10 format is written to memory 20.
  • the reference table 30 is updated to reflect the change of address from storage address @Af 90 to memory address @Ar 40.
  • the objects referenced by offset i.e. grouped in the format of the persistable object 10 are ungrouped, as is illustrated in further detail next in reference to FIG. 18.
  • a flowchart illustrating object un- grouping 500 will be described presently.
  • a grouped object 70B referenced from a root object 70A is unpersisted, for instance according to the steps of FIG. 17.
  • the grouped object 70B continues to exist contemporaneously with the ungrouped 10B counterpart, as is illustrated by the presence of the @Af 90A reference in reference table 30.
  • Ungrouping may create new copies of all objects in the group, relocate all the references between those objects, and return a new root object. Since reference to grouped objects may still be in use when an object is ungrouped, grouped references continue to resolve properly to grouped objects for as long as the references exist.
  • the grouped objects can be garbage collected thereby recovering the resources used. This is illustrated by the absence of reference @Af 90A in reference table 30.
  • garbage collection has taken place, only the grouped object 70B is destroyed whereas ungrouped object 10B may still exist.
  • Garbage collection for root object 90A and grouped object 90B can be triggered, for instance by explicitly setting all grouped object references to null, and setting all root object references to null.
  • FIG. 19 a flowchart illustrating the re-population of a reference table with persisted object references in one embodiment is described.
  • a reference table 30 is created in memory 20.
  • a system for handling an application's access of objects for use within a mobile communications device comprising: random access memory (RAM) having storage locations addressable within an addressable space, said RAM containing a persistable first object having an address within the addressable space; a non-volatile storage device having storage locations addressable within an addressable space, said storage device containing a persisted second object having an address within the storage device's addressable space; a reference table that contains the address of the persistable first object contained in the RAM and the address of the persisted second object contained in the storage device, wherein the addresses of the persistable first object and the persisted second object are obtained from the reference table so that the persistable first object and persisted second object may be used by the application.
  • RAM random access memory
  • access time associated with access of the persisted second object by the application via the reference table is at least an order of magnitude less than access of an object having been persisted through serialization. 5. The system of claim 1 wherein reading and writing of the persisted second object occurs while the second persisted object is persisted.
  • the reference table contains storage elements having a width, wherein the addresses of the persistable first object and persisted second object are obtained via the reference table based upon the objects' respective indexes and upon the width of the storage elements.
  • module objects are persisted in the storage device and whose addresses are stored in the reference table, wherein the addresses of the persisted module objects are obtained from the reference table so that the persisted module objects may be used by the application.
  • module objects hold target-linked object classes.
  • code for an object-oriented runtime is executable directly from the storage device via the reference table.
  • the storage device comprises divisions of blocks, wherein range of the offset is based upon size of the blocks.
  • a method for handling an application's access of objects for use within a mobile communications device comprising the steps of: reading a first persistable object from random access memory
  • RAM random access memory
  • the method of claim 36 further comprising the steps of: unpersisting the first persisted object into RAM at a second address so as to create the first persistable object; and updating the reference table to reflect that the first persistable object is located at the second address, wherein format of the first persisted object and format of the first unpersisted object are substantially similar.
  • the method of claim 37 further comprising the step of: obtaining the second address from the reference table so that the first persistable object may be retrieved from the RAM and used by the application.
  • the method of claim 38 further comprising the step of: obtaining a third address from the reference table so that a second persisted object may be retrieved from the storage device and used by the application, said second persisted object being in a usable state by the application directly from the storage device.
  • access time associated with access of the first persisted object by the application via the reference table is at least an order of magnitude less than access of an object persisted through serialization means.
  • address space associated with the RAM overlaps at least a portion of address space associated with the storage device.
  • the reference table contains address storage elements having a width, wherein the address of the first persisted object is obtained via the reference table based upon the first persisted objects' index and upon the width of at least one of the storage elements.

Abstract

A system and method for handling an application's access of persisted objects for use within a mobile communications device. The device includes a non-volatile storage device that has at least a portion of its storage locations addressable by the application. A reference table contains the addresses of persisted objects contained in the storage device. Via the reference table, an application can locate persisted objects stored in the storage device.

Description

Title
System and Method of Object-Oriented Persistence
Related Application
This application claims priority to U.S. provisional application
Serial No. 60/302,872 entitled "System and Method of Object-Oriented Persistence" filed July 3, 2001. By this reference, the full disclosure, including the drawings, of U.S. provisional application Serial No. 60/302,872 is incorporated herein.
Background
Field of the Invention
This invention relates to the field of information storage. Particularly, this invention relates to storing object-oriented information within an object-oriented environment.
Discussion of the Related Art
Presently known techniques for storing objects, such as the serializable interface of the java.io package in Sun Microsystems Java™ 2 SE (v1.3), may impose undue limitations such as assuming that the storage involves an underlying file on a file system. For instance, known techniques for storing objects may require that the object be first retrieved from storage, then restored to a useable state, in order to be used.
Summary
The present invention overcomes such disadvantages as well as others. In accordance with the teaching of the present invention, a system and method are disclosed that handle an application's access of persisted objects for use within a mobile communications device. The device includes a non-volatile storage device that has at least a portion of its storage locations addressable by the application. A reference table contains the addresses of persisted objects contained in the storage device. Via the reference table, an application can locate persisted objects stored in the storage device. Further features of the invention will be described or will become apparent in the course of the following detailed description.
Brief Description of the Drawings
In order that the invention be more clearly understood, embodiments thereof will now be described in detail by way of example only, with reference to the accompanying drawings, in which:
FIG. 1 is a block diagram illustrating software and computer components used in persisting and unpersisting objects;
FIG. 2 is a data structure diagram illustrating a reference table; FIGS. 3 and 4 are block diagrams illustrating an example of a format occupied by objects in RAM and that may be accessed via a reference table;
FIGS. 5 and 6 are block diagrams illustrating an example of a format occupied by persisted objects and that may be accessed via a reference table;
FIGS. 7 and 8 are block diagrams illustrating cooperation of objects in RAM and non-volatile storage;
FIGS. 9 and 10 are block diagrams illustrating un-grouped persistable objects; FIG. 11 is a block diagram illustrating groupings of object references;
FIG. 12 is a data structure diagram illustrating a reference table for use in groupings of object references;
FIGS. 13 and 14 are block diagrams illustrating grouped persisted objects;
FIG. 15 is a flowchart illustrating an example of persisting objects; FIG. 16 is a flowchart illustrating an example of object grouping;
FIG. 17 is a flowchart illustrating an example of un-persisting objects;
FIG. 18 is a flowchart illustrating an example of object un- grouping; and
FIG. 19 is a flowchart illustrating an example of re-population of a reference table with persisted object references.
The same reference numerals are used in different figures to refer to similar elements.
Detailed Description of the Preferred Embodiment
FIG. 1 depicts a system 2 to handle an application's 4 access of objects (e.g., 10A and 70B) within the environment of a mobile communications device 6. Through use of a reference table 30, the application 4 accesses desired objects 10A and 70B without special regard to whether the objects 10A and 70B are stored in random access memory (RAM) 20 or a non-volatile storage device 12, respectively. RAM 20 and the storage device 12 have addresses that are within an addressable space.
Some storage devices can be addressed like conventional RAM, such as flash memory for instance. In the case where storage is addressed like conventional RAM, a persisted object can be read directly from storage. In this way, both reading and writing of persisted objects can be accomplished while an object is persisted. The addressable space for RAM 20 and the storage device 12 may comprise the same addressable space, or substantially the same addressable space. In a different embodiment, the addressable space may be different.
A persisted object (e.g., object 70B) is an object that has achieved object-oriented persistence and is located in the storage device 12. Similarly, an object that has the potential to be persisted (such as object 10A in RAM 20) is defined as a persistable object. Persisting an object is defined as the process of providing a persisted object from a persistable object. Unpersisting an object is defined as the converse, the process of providing a persistable object from a persisted object. Persisted objects are stored in the storage device 12 whose contents are unaffected if power 14 is removed (whereas the contents of volatile memory 20 are lost when power 14 is no longer supplied to it). As used in this description and in the appended claims, object-oriented persistence may include the format being occupied by an object in storage 12 being substantially similar to the format a corresponding object occupies in RAM 20. By using the same format in storage 12 as in RAM 20, only systematic operations are required to restore persisted objects to a useable state. Since virtually no operations are required in the system 2 to restore a persisted object to a useable state, a persisted object can be used directly from the storage device. A useable persisted object may continue to be referenced by other objects residing in either RAM or storage, as well as reference other objects. As a consequence, a mobile communications device such as a PDA, cellular telephone, or data communications device can selectively move objects to and from storage without consuming significant resources. Once an object is persisted, it can continue to be used in substantially the same way as an object in RAM. This is a significant advantage over an unusable serialized object, which has to be loaded to be used, and may typically take up to three orders of magnitude more time to become useable. It is noted that file access times may be measured in milliseconds whereas memory access may be measured in nanoseconds. For example, in a mobile device address-book application, an Address object might have a Name attribute and a Telephone attribute. Since most address-book entries do not change very often and are used regularly, it may be desirable to persist address-book entries so that they can be both stored and read in the future. Address objects benefit by being persistable, and benefit from being useable persisted objects. Since the Name and Telephone attributes (being integral to an Address object) may also be useable persisted objects, an object-oriented runtime is able to read useable persisted Address objects directly while they reside in storage 12 without need to retrieve Address objects from storage 12. This is. a significant savings that may allow a persisted object to take several orders of magnitude less time to become useable in comparison to a serialized object. Furthermore, by using substantially the same format in RAM 20 and in storage 12, persisted objects are less likely to become obsolete.
The system 2 includes a reference table 30 that locates objects 10A and 70B whether they are in RAM 20 or the storage device 12. For example where an application 4 wishes to access persistable object A 10A, the reference table 30 provides the memory address of the persistable object A 10A which is located in RAM 20. If the application 4 also has need to access persisted object B 70B, then the reference table 30 provides the memory address of the persisted object B 70B, which is located in the storage device 12. It should be understood that the system 2 may store objects for direct access by the application 4 in both the storage device 12 and RAM 20, or solely in the storage device 12, or solely in RAM 20. The system 2 is configured with the combination that best suits the application at hand. It should also be understood that one or more applications may utilize the system 2 to access the objects referenced in the reference table 30. Further it should be understood that the system 2 may include persistence of module objects to provide useable persisted modules. Modules may be used, for instance, to hold target-linked object classes. If the module is not useable from storage, virtually no operations are required to render it useable once unpersisted. However, by useably persisting modules, it is possible to execute code for an object-oriented runtime directly from storage 12.
FIG. 2 depicts a data structure of the reference table 30. Indexed storage elements 32 within the reference table 30 contain addresses 34 to the objects stored in the storage device or in RAM. Given a desired object's index 36 to a storage element 32, the desired object's address 38 is obtained from the reference table 30. An object's address 34 in a storage element 32 reflects whether the object is in a storage device or RAM. The reference table 30 obviates an application having to specially recognize where the object is stored.
FIGS. 3 and 4 depict an example of a format occupied by objects in RAM and that may be accessed via the reference table: Two objects 10A and 10B are shown as they might appear somewhere in RAM 20. The reference table 30 is also situated in RAM 20. The reference table 30 has several storage elements 35A and 35B of a fixed size "w" 37 to simplify the indexed access to storage elements. Each used storage element 35A and 35B corresponds to an object 10A and 10B which is somewhere in an addressable space. For instance object A 10A finds correspondence with storage element index "a" 35A whereas object B 10B finds correspondence with storage element index "b" 35B. The address 40A and 40B of corresponding objects 10A and 10B is stored in a storage element 35A and 35B, so that knowing the index of an object in the reference table 30 it is possible to obtain the address 40A and 40B of an object. This is done by first obtaining the address @ R 50 of the reference table 30. Then, given an object's reference, such as "a" 55A for object A 10A, the address of the storage element @(R+a*w) 60A can be obtained by multiplying the index 55A "a" by the size "w" 37 of each storage element and adding to the resulting value the address @R 50 of the reference table 30. The address of the storage element @(R+b*w) 60B corresponding to object B 10B can be obtained using the same technique by using index "b" in lieu of "a". Since the "a" storage element 35A holds the address of the corresponding object A 10A, resolving the contents of the storage element 35A provides the address @A 40A of object A 10A. Also shown is how each object 10A and 10B contains within its format its own reference 55A and 55B related to the reference table 30. Also shown is how, for example, object A 10A contains within its format a reference "b" 65B to object B 10B. This allows a runtime context within the scope of object A 10A to be able to access object B 10B. Although not expressly shown in the drawings, other attributes such as references to other objects, or atomic data types, may be present within the formats of objects. Although not expressly shown in the drawings, many instances of objects may exist in an addressable space. In the example of FIG. 3, two instances 10A and 10B of classes have been illustrated. It should be understood that each instance may be of a different class, or alternatively that each instance may be of the same class. In the first case, the object A 10A may be an instance of class "A" whereas object B 10B may be an instance of class "B". For example, object A might be an instance of an Address class and object B might be an instance of a Name class. There may be several instances of the Address class and Name class situated somewhere in the addressable space, such as in RAM. For the sake of brevity and clarity, only one instance of class "A" and "B" were discussed. Alternatively in the second case, object A 10A and object B 10B could both be instances of the same class. Objects A and B are used by way of example only with the understanding that in practice there may be many objects which are instances of many classes.
FIGS. 5 and 6 depict an example of the format occupied by persisted objects and that may be accessed via a reference table. Two useable persisted objects 70A and 70B are illustrated as they might appear somewhere in storage, such as flash 80. The address of persisted objects 70A and 70B are stored in reference table 30 storage elements 35A and 35B, so that by knowing the index of a persisted object in the reference table 30 it is possible to obtain the address 90A, 90B of the persisted objects. By obtaining the address @R 50 of the reference table 30, given a persisted object's reference, such as "b" 55B for the example B persisted object 70B, the address of the storage element @(R+b*w) 60B can be obtained by multiplying the index 55B "b" by the size "w" 37 of each storage element and adding the resulting value to the address @ R 50 of the reference table 30. Since the "b" storage element 35B holds the address of the corresponding persisted object B 70B, resolving the contents of the storage element 35B provides the address @B 90B of persisted object B 70B. The same technique can be used to provide the address 90A of persisted object 70A from the address of storage element @(R+a*w) 60A. Also shown is how each persisted object 70A and 70B contains within its format its own reference 55A and 55B related to the reference table 30. Also shown is how, for example, persisted object A 70A contains within its format a reference "b" 65B to persisted object B 70B. This allows a runtime context within the scope of persisted object A 70A to be able to access persisted object B 70B.
Persisted objects A 70A and B 70B are situated in flash 80. The format in flash 80 of persisted objects 70A, 70B of FIG. 5 is substantially similar to corresponding objects 10A and 10B in RAM 20 of FIG. 3. Since flash 80 is addressable and can be read substantially in the same way as RAM 20, and since the persisted objects 70A, 70B are substantially in the same format as corresponding un-persisted objects 10A and 10B of FIG. 3, persisted objects 70A, 70B can be referenced by the runtime context "as if" they were in RAM 20, thereby making them useable persisted objects.
When power is shut off, persisted objects A 70A and B 70B will remain stored in flash 80. However, reference table 30 will be lost making persisted objects A 70A and B 70B temporarily unusable. When power is restored, reference table 30 can be systematically re-populated by reading flash 80 since every persisted object 70A, 70B has within its format its own reference, thereby restoring useable persisted objects A 70A and B 70B. Re- population will be described in greater detail in reference to FIG. 19.
In reference to FIGS. 7 and 8, a block diagram illustrating the cooperation of objects in RAM and persisted objects is described. An object 10A and a useable persisted object B 70B are illustrated, as they might appear somewhere in RAM 20 and flash 80 respectively. Also illustrated is a reference table 30, situated somewhere in RAM 20. This allows a runtime context within the scope of object A 10A to be able to access usable persisted object B 70B, regardless of the fact that object B 70B is in flash 80 and object A 70A is in RAM 20.
A persisted object, such as object B 70B, may contain a reference (not shown) to a non-persisted object, such as object A 10A. This allows a runtime context within the scope of persisted object B 70B to be able to access object A 10A, regardless of the fact that object B 70B is in flash 80 and object A 70A is in RAM 20. Furthermore, a runtime context within the scope of persisted object B 70B, such as an instance method context, may receive an object reference to object A 10A as a parameter.
In reference to FIGS. 9 and 10, block diagrams illustrating un- grouped persistable objects are described. Two objects 10A and 10B are illustrated as they might appear somewhere in RAM 20. Also illustrated is a reference table 30, situated somewhere in RAM 20. In situations where it is desired to impose an upper limit on the amount of RAM 20 dedicated to storing object references, reference table 30 may have a maximum of n storage elements. This might be the case, for instance, in a device with limited RAM 20. By imposing an upper limit n, the reference table 30 can be maintained within a reasonable size. Each used storage element corresponds to objects 10A and 10B which are somewhere in an addressable space, which makes un-grouped objects 10A and 10B compatible with other objects thus far described. For instance object A 10A finds correspondence with storage element "a" 35A whereas object B 10B finds correspondence with storage element "b" 35B. The address of corresponding objects 10A and 10B are stored in storage element 35A, 35B, so that knowing the index of an object in the reference table 30 it is possible to obtain the address 40A, 40B of an object. This is done by first obtaining the address @ R 50 of the reference table 30. Then, given an objects reference 55A, such as "0 | a" for the example A object 10A, the address of the storage element @(R+a*w) 60A can be obtained by multiplying the index 55A "a" by the size "w" 37 of each storage element and adding to the result the address @ R 50 of the reference table 30. Similarly, the address of storage element @(R+b*w) 60B can be obtained given an objects reference 55B, such as "0|b" for the example B object B 10B. The address of the object @A 40A is contained in the corresponding storage element 35A. Similarly, the address of the object @B 40B is contained in the corresponding storage element 35B. The purpose of the "offset" is described further in FIG. 11 in reference to grouped persisted objects. Since both objects A 10A and B 10B are un-grouped, the "offset" value is 0 for each, as is illustrated by the corresponding "this ref= 0|a" for object A 10A and "this ref=0|b" for object B 10B. Also shown is how flash 80 might comprise several blocks 120, of which only 2 are illustrated for brevity. This is meant to illustrate how some flash 80 may be addressed to be read in a manner substantially similar to RAM 20, but may be only written to in blocks 120.
The block technique may also use object grouping. Grouping conserves reference table's RAM 20 usage. FIG. 11 shows groupings 102 of object references so that objects integral to a "root" object are located in addressable space in substantially close proximity to the "root" object. In this way, RAM 20 can be used more efficiently since it only uses a single object reference element 04 in the reference table 30 for each "root" object in a group. Grouped object references 102 are updated so that they are offset relative to the "root" object. Object reference grouping is defined as relating object addresses in a group of objects by an offset to a "root" object reference that integrates the group.
FIG. 12 depicts a reference table data structure for use in groupings of object references. Indexed storage elements 32 within the reference table 30 contain addresses 104 to the "root" objects stored in the storage device or in RAM. Given a desired object's root object's index 106, the root object's address is obtained from the reference table 30. A root object's address in a storage element 32 reflects whether the object is in a storage device or RAM. The "root" object 108 contains object references to its integral grouped objects, such as the desired object. The desired object is referenced in the format of the "root" object. The address 110 of the desired object is related to the address of the "root" object by an "offset" as discussed in greater detail in reference to FIGS. 13 and 14.
In reference to FIGS. 13 and 14, block diagrams illustrating grouped persisted objects are described. Two persisted objects 70A, 70B are illustrated as they might appear in block 120 of flash 80. Also illustrated is a reference table 30, situated somewhere in RAM 20. The reference table 30 has several storage elements 35 of a fixed size "w" 37 for the indexed access to storage elements. Each used storage element, such as "a" 35A, corresponds to an object 70A which is somewhere in an addressable space. For instance object A 70A finds correspondence with storage element index "a" 35A. However, object B 70B does not find immediate correspondence with storage element index "b" - this is because object B 70B has been grouped with object A 70A in order to conserve reference table 30 RAM 20 usage. Note how object A 70A is still referenced in the reference table 30, and that its reference 55A "0 | a" has an "offset" of 0. Object A 70A is therefore a "root" object, harboring object references to its integral grouped objects, such as object B 70B. Object B 70B is referenced in the format of the "root" object 70A, the address @B 90B of object B 70B is related to the address @A 90A of "roof object A 70A by an "offset". The "offset" 130 is the difference between the flash address @A 90A of object A and the flash address @B 90B of object B. Note that all objects in the group 70A, 70B are in the same block 120 of flash 80. The range of offset 130 is related to the size of block 120. For instance, if flash 80 uses a block 120 of size 64K, then the offset can be represented using 16 bits. The address of "root" object 70A is stored in storage element 35A so that by knowing the index of a "root" object 70A in the reference table 30 it is possible to obtain the address @A 90A of a "root" object. Resolving the address @B 90B of object B 70B can still be related to the reference table 30 via "root" object A 70A. By adding to the address of reference table 30, @ R 50 index "a" 35A (multiplied by the width 37) provides the address of the storage element @(R+a*w) 60A (which contains the address @A 90A of the "root" object A 70 A). From the "root" address @A 90A, by adding the "offset" 130 of object B's 70B reference "offset | a" 65B in the format of object A 70A, the resulting address @(A+ offset) 60B provides address @B 90B of the grouped object B 90B. Also shown is how each object 70A, 70B contains within its format its own reference 55A, 55B ultimately still accessible via reference table 30 for "root" objects, and via "root" objects for grouped objects.
With respect to the size of block 120 of flash 80, the number of reference table Elements "n", and the size of each reference table 30 storage element "w" 37 can be adapted to suit particular needs. For example, if w is 32 bits, then a 32-bit addressable space may be used. If a flash block size of 64K is used, then 16 bits of object references 55A, 55B 65B may be used for the offset and the remaining bits may be used as an index into the reference table 30, as illustrated with the "offset | i" notation. The maximum number of elements "n" depends on the number of object references desired, and therefore imposes the range of the lower order bits representing the index "i" in object references. Of interest is using 16 bits for the index thereby providing a 32-bit object reference, comparable in size to the addressable space address size.
An example of potential RAM 20 savings is given next assuming the values in the above paragraph. The example will illustrate the positive combination of several of the techniques taught thus far. Consider an embodiment within a mobile e-mail device. Assume that an Address object instance might have 9 object references, whereas an Email object instance might have 24 object references. To reference 5000 Address objects and 2000 Email objects simultaneously, without using grouped objects, then 100,000=(5000x10+2000x25) object references are needed. A minimum of -400K of RAM would be required for a reference table. However, consider the situation where each of the 5000 Address objects and each of the 2000 Email objects are "root" objects, and each of the 9 object references for each Address object and each of the 24 object references for each Email object are grouped and "offset" from each group's "root" Address or Email object. In this grouped form only 7000=(5000+2000) object references for the "root" objects need to be stored in the reference table. A minimum of ~ 28K of RAM would be required for a reference table - this represents a significant 93% saving as compared to the un-grouped case. If only 400K of RAM is actually available, non-grouped 5000 Address objects and 2000 Email objects would quickly cause a shortage of object references, whereas the scenario using grouped objects leaves ample room to continue allocating new object references. Furthermore, grouped objects may further conserve RAM 20 usage by being persisted to storage, such as flash 80. Further still, by making the "root" persisted objects usable directly from flash 80, Addresses and Emails can be read and used directly from flash without consuming substantial RAM 20. If flash 80 is block-writable, then when Addresses and Emails are grouped and persisted, they can be considered "read-only". In order to modify a "readonly" object, the object is un-persisted and optionally un-grouped, modified, and optionally grouped and persisted anew.
In situations where flash cannot be written to as easily as it is read, then object grouping provides the additional indication that grouped persistent object can be considered "read-only".
It is within the scope of this invention that "root" objects reside in RAM. The use of a "block" illustrates that the addresses within a "block" are substantially proximate, regardless of whether the "block" is in RAM 20 or storage 80. Removing the limitation of "block" writing-only flash 80 still allows for the use of object grouping and un-grouping, and therefore the use of grouping for all manner of objects is within the scope of this invention, whether a grouped object is persisted, or is in RAM. An object need not be persistable to be groupable, nor need be groupable to be persistable.
In reference to FIG. 15, a flowchart illustrating persisting objects is described. At step 210, a persistable object's 10 format is read from memory 20. At step 220, a substantially similar persisted object 70 format is written to storage 80:
Optionally, at step 230 the reference table 30 is updated to reflect the change of address from memory address @Ar 40 to storage address @Af 90. This makes the persisted object 70 useable in substantially the same way as the persistable object 10, thereby allowing the persistable object 10 to be destroyed and the persisted object 70 to transparently take its place.
Optionally, at step 300 the objects referenced in the format of the persisted object 70 are persisted in substantially close proximity to the persisted object, as is illustrated in further detail next in reference to FIG. 16. In reference to FIG. 16, a flowchart illustrating object grouping 300 is described. At step 200, a persistable object 10B referenced in a root object 70A is persisted, for instance according to the steps described in FIG. 15. The persisted object 70B is located substantially proximate to the root object 70A, and offset 130 from it so as to facilitate grouping.
At step 310, the root object 70A reference is updated to point to the persisted object of step 200, by using a reference which is offset from the root object "offset | a". Optionally, the reference of the persisted object 70B within its format is also updated to "offset | a". Optionally, at step 320 the reference in reference table 30 to the grouped object 70B is removed. The grouped object 70B is still useable via root object 70A.
In reference to FIG. 17, a flowchart illustrating un-persisting objects 400 is described. At step 410, a persisted object's 70 format is read from storage. At step 420, a substantially similar persistable object 10 format is written to memory 20.
Optionally, at step 430 the reference table 30 is updated to reflect the change of address from storage address @Af 90 to memory address @Ar 40. This makes the persistable object 10 useable in substantially the same way as the persisted object 70, thereby allowing the persisted object 70 to be destroyed and the persistable object 70 to transparently take its place. Optionally, at step 500 the objects referenced by offset, i.e. grouped in the format of the persistable object 10 are ungrouped, as is illustrated in further detail next in reference to FIG. 18.
In reference to FIG. 18, a flowchart illustrating object un- grouping 500 will be described presently. At step 400, a grouped object 70B referenced from a root object 70A is unpersisted, for instance according to the steps of FIG. 17. After step 400, the grouped object 70B continues to exist contemporaneously with the ungrouped 10B counterpart, as is illustrated by the presence of the @Af 90A reference in reference table 30. Ungrouping may create new copies of all objects in the group, relocate all the references between those objects, and return a new root object. Since reference to grouped objects may still be in use when an object is ungrouped, grouped references continue to resolve properly to grouped objects for as long as the references exist.
Optionally, at step 510, when it is ascertained that grouped references are no longer in use, the grouped objects can be garbage collected thereby recovering the resources used. This is illustrated by the absence of reference @Af 90A in reference table 30. When garbage collection has taken place, only the grouped object 70B is destroyed whereas ungrouped object 10B may still exist. Garbage collection for root object 90A and grouped object 90B can be triggered, for instance by explicitly setting all grouped object references to null, and setting all root object references to null. In reference to FIG. 19, a flowchart illustrating the re-population of a reference table with persisted object references in one embodiment is described. At step 610, a reference table 30 is created in memory 20. At step 620, at least one persisted object 70 reference is added to the reference table 30. Since each persisted object's format contains its own reference, it is possible to retrieve the reference directly from storage without having an entry in the reference table. It will be appreciated that the above description relates to the invention by way of example only. Many variations on the invention will be obvious to those knowledgeable in the field, and such obvious variations are within the scope of the invention as described and claimed, whether or not expressly described.
It is claimed:
1. A system for handling an application's access of objects for use within a mobile communications device, comprising: random access memory (RAM) having storage locations addressable within an addressable space, said RAM containing a persistable first object having an address within the addressable space; a non-volatile storage device having storage locations addressable within an addressable space, said storage device containing a persisted second object having an address within the storage device's addressable space; a reference table that contains the address of the persistable first object contained in the RAM and the address of the persisted second object contained in the storage device, wherein the addresses of the persistable first object and the persisted second object are obtained from the reference table so that the persistable first object and persisted second object may be used by the application.
2. The system of claim 1 wherein the persisted second object is unpersisted into RAM, wherein format of the persisted second object and format of the unpersisted second object are substantially similar.
3. The system of claim 1 wherein the persisted second object is in a usable state by the application directly from the storage device.
4. The system of claim 3 wherein access time associated with access of the persisted second object by the application via the reference table is at least an order of magnitude less than access of an object having been persisted through serialization. 5. The system of claim 1 wherein reading and writing of the persisted second object occurs while the second persisted object is persisted.
6. The system of claim 1 wherein the address space associated with the RAM overlaps at least a portion of the address space associated with the storage device.
7. The system of claim 1 wherein the address of the persisted second object is obtained via the reference table based upon an index associated with the persisted second object.
8. The system of claim 7 wherein the address of the persistable first object is obtained via the reference table based upon an index associated with the persistable first object.
9. The system of claim 8 wherein the reference table contains storage elements having a width, wherein the addresses of the persistable first object and persisted second object are obtained via the reference table based upon the objects' respective indexes and upon the width of the storage elements.
10. The system of claim 1 wherein the persisted second object contains within its object format a reference to itself.
11. The system of claim 10 wherein the persisted second object contains within its object format a reference to a persisted third object.
12. The system of claim 11 wherein the persisted third object contains within its object format a reference to the persisted second object.
13. The system of claim 10 wherein the persisted second object contains within its object format a reference to the persistable first object. 14. The system of claim 13 wherein the persistable first object contains within its object format a reference to the persisted second object.
15. The system of claim 10 wherein the reference contained within the persisted second object is used to repopulate address data within the reference table.
16. The system of claim 1 wherein module objects are persisted in the storage device and whose addresses are stored in the reference table, wherein the addresses of the persisted module objects are obtained from the reference table so that the persisted module objects may be used by the application.
17. The system of claim 16 wherein the module objects hold target-linked object classes.
18. The system of claim 17 wherein code for an object-oriented runtime is executable directly from the storage device via the reference table.
19. The system of claim 1 wherein the application comprises an e-mail address-book application.
20. The system of claim 1 wherein the mobile communications device is a personal digital assistant.
21. The system of claim 1 wherein the mobile communications device is a cellular telephone.
22. The system of claim 1 wherein the mobile communications device is a data communications device.
23. The system of claim 1 wherein the storage device is flash memory. 24. The system of claim 23 wherein writing to the flash memory is performed in blocks, wherein a persisted object is unpersisted prior to modification, and then the unpersisted object is persisted back to the flash memory.
25. The system of claim 1 wherein data stored in the storage device remains when electrical power is removed from the storage device.
26. The system of claim 1 wherein the reference table contains a root object reference to a root object contained in the storage device.
27. The system of claim 26 wherein at least one object is stored in the storage device whose address is determined based upon an offset and the address of the root object.
28. The system of claim 26 wherein a group of objects is stored in the storage device whose addresses are determined based upon an offset and the address of the root object.
29. The system of claim 28 wherein the reference table contains a reference to objects in the group only with a reference to the root object of the group.
30. The system of claim 28 wherein the storage device comprises divisions of blocks, wherein range of the offset is based upon size of the blocks.
31. The system of claim 28 wherein the storage device is block-writable, wherein modification to the persisted second object is performed via a persistable second object that had been generated based upon the persisted second object.
32. The system of claim 31 wherein the persistable second object is ungrouped prior to the modification.
33. The system of claim 28 wherein the root object resides in RAM. 34. The system of claim 28 further comprising: grouping means for grouping objects contained in RAM.
35. The system of claim 28 wherein the grouping means groups objects contained in RAM.
36. A method for handling an application's access of objects for use within a mobile communications device, comprising the steps of: reading a first persistable object from random access memory
(RAM); writing the first persistable object into a non-volatile storage device at an address so as to create a first persisted object; storing the address in a reference table; and obtaining the address from the reference table so that the first persisted object may be retrieved from the storage device and used by the application, said first persisted object being in a usable state by the application directly from the storage device.
37. The method of claim 36 further comprising the steps of: unpersisting the first persisted object into RAM at a second address so as to create the first persistable object; and updating the reference table to reflect that the first persistable object is located at the second address, wherein format of the first persisted object and format of the first unpersisted object are substantially similar.
38. The method of claim 37 further comprising the step of: obtaining the second address from the reference table so that the first persistable object may be retrieved from the RAM and used by the application.
39. The method of claim 38 further comprising the step of: obtaining a third address from the reference table so that a second persisted object may be retrieved from the storage device and used by the application, said second persisted object being in a usable state by the application directly from the storage device.
40. The method of claim 38 wherein access time associated with access of the first persisted object by the application via the reference table is at least an order of magnitude less than access of an object persisted through serialization means.
41. The method of claim 36 wherein address space associated with the RAM overlaps at least a portion of address space associated with the storage device.
42. The method of claim 36 wherein the address of the first persisted object is obtained via the reference table based upon an index associated with the persisted object.
43. The method of claim 36 wherein the reference table contains address storage elements having a width, wherein the address of the first persisted object is obtained via the reference table based upon the first persisted objects' index and upon the width of at least one of the storage elements.
44. The method of claim 36 wherein the first persisted object contains within its object format a reference to itself.
45. The method of claim 44 wherein the first persisted object contains within its object format a reference to a second persisted object.
46. The method of claim 44 wherein the reference contained within the first persisted object is used to repopulate address data within the reference table.

Claims

47. The method of claim 36 further comprising the step of: persisting module objects in the storage device, said module objects having addresses stored in the reference table, wherein the addresses of the persisted module objects are obtained from the reference table so that the persisted module objects may be used by the application.
48. The method of claim 47 wherein the module objects hold target-linked object classes.
49. The method of claim 36 wherein the mobile communications device is a personal digital assistant.
50. The method of claim 36 wherein the mobile communications device is a cellular telephone.
51. The method of claim 36 wherein the mobile communications device is a data communications device.
52. The method of claim 36 wherein the storage device is flash memory.
53. The method of claim 52 wherein writing to the flash memory is performed in blocks, wherein a persisted object is unpersisted prior to modification, and then the unpersisted object is persisted back to the flash memory.
54. The method of claim 36 wherein data stored in the storage device remains when electrical power is removed from the storage device.
55. The method of claim 36 wherein the reference table contains a root object reference to a root object contained in the storage device.
56. The method of claim 55 wherein at least one object is stored in the storage device whose address is determined based upon an offset and the address of the root object.
57. The method of claim 55 wherein a group of objects is persisted in the storage device and whose addresses are determined based upon an offset and the address of the root object.
58. The method of claim 57 wherein the reference table contains a reference to objects in a group only with a reference to the root object of the group.
59. The method of claim 57 wherein the storage device comprises divisions of blocks, wherein range of the offset is based upon size of the blocks.
60. The method of claim 57 wherein the root object resides in RAM.
61. The method of claim 57 further comprising the steps of: unpersisting the group of objects; and performing garbage collection upon at least one of the unpersisted object.
62. A system for handling an application's access of objects for use within a mobile communications device, comprising: a non-volatile storage device having storage locations addressable within an addressable space, said storage device containing a persisted object having an address within the addressable space; a reference table that contains the address of the persisted object contained in the storage device, wherein the address of the persisted object is obtained from the reference table so that the persisted object may be used by the application, said persisted object being in a usable state by the application directly from the storage device.
63. A system for handling an application's access of objects, comprising: storage means having storage locations addressable within an addressable space, said storage means containing an object having an address within the addressable space; a reference table that contains the address of the object contained in the storage means, wherein the address of the object is obtained from the reference table so that the object may be used by the application, said object being in a usable state by the application directly from the storage means.
64. The system of claim 63 wherein the storage means comprises nonvolatile storage means.
65. The system of claim 64 wherein the storage means comprises volatile storage means.
66. The system of claim 63 wherein the storage means comprises volatile storage means.
PCT/CA2002/001008 2001-07-03 2002-07-02 System and method of object-oriented persistence WO2003005203A2 (en)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CA002452534A CA2452534A1 (en) 2001-07-03 2002-07-02 System and method of object-oriented persistence
US10/482,756 US8019789B2 (en) 2001-07-03 2002-07-02 System and method of object-oriented persistence
EP02745001A EP1402356A2 (en) 2001-07-03 2002-07-02 System and method of object-oriented persistence
AU2002317099A AU2002317099A1 (en) 2001-07-03 2002-07-02 System and method of object-oriented persistence

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US30287201P 2001-07-03 2001-07-03
US60/302,872 2001-07-03

Publications (2)

Publication Number Publication Date
WO2003005203A2 true WO2003005203A2 (en) 2003-01-16
WO2003005203A3 WO2003005203A3 (en) 2003-10-09

Family

ID=23169566

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/CA2002/001008 WO2003005203A2 (en) 2001-07-03 2002-07-02 System and method of object-oriented persistence

Country Status (5)

Country Link
US (1) US8019789B2 (en)
EP (1) EP1402356A2 (en)
AU (1) AU2002317099A1 (en)
CA (1) CA2452534A1 (en)
WO (1) WO2003005203A2 (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1703378A1 (en) * 2005-03-15 2006-09-20 Sun Microsystems, Inc. Iterator for accessing an object collection

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040010498A1 (en) * 2002-07-10 2004-01-15 Lin Tser Yeng Object persistence to relational database within run-time environment supporting attributes and reflection
US20100287216A1 (en) * 2009-05-07 2010-11-11 Tatu Ylonen Oy Ltd Grouped space allocation for copied objects
US8943498B2 (en) * 2009-05-31 2015-01-27 Red Hat Israel, Ltd. Method and apparatus for swapping virtual machine memory
US8527466B2 (en) * 2009-05-31 2013-09-03 Red Hat Israel, Ltd. Handling temporary files of a virtual machine
US8365020B2 (en) 2010-03-18 2013-01-29 Red Hat Israel, Ltd. Mechanism for saving crash dump files of a virtual machine on a designated disk
US9424007B2 (en) * 2011-06-02 2016-08-23 Open Invention Network, Llc System and method for pervasive software platform-based model driven architecture transaction aware application generator
US8812456B2 (en) 2012-03-30 2014-08-19 Netapp Inc. Systems, methods, and computer program products for scheduling processing to achieve space savings
WO2014175880A1 (en) * 2013-04-24 2014-10-30 Empire Technology Development Llc Computing devices with multi-layer file systems

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4853842A (en) * 1985-09-11 1989-08-01 Texas Instruments Incorporated Computer memory system having persistent objects

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69402955T2 (en) * 1994-02-08 1997-08-14 Belle Gate Invest Bv Data exchange system with portable data processing units
US6009266A (en) * 1995-03-22 1999-12-28 Sun Microsystems, Inc. Methods, apparatus and data structures for managing objects
US5829013A (en) * 1995-12-26 1998-10-27 Intel Corporation Memory manager to allow non-volatile memory to be used to supplement main memory
JPH10154101A (en) * 1996-11-26 1998-06-09 Toshiba Corp Data storage system and cache controlling method applying to the system
US6195709B1 (en) * 1997-07-24 2001-02-27 International Business Machines Corporation Method of providing persistency for transient objects in object oriented technology
US6076090A (en) * 1997-11-26 2000-06-13 International Business Machines Corporation Default schema mapping
US6330709B1 (en) * 1998-03-30 2001-12-11 International Business Machines Corporation Virtual machine implementation for shared persistent objects
US6128623A (en) * 1998-04-15 2000-10-03 Inktomi Corporation High performance object cache
US6223344B1 (en) * 1998-06-11 2001-04-24 Internationl Business Machines Corporation Apparatus and method for versioning persistent objects
US6484247B1 (en) * 1998-06-25 2002-11-19 Intellution, Inc. System and method for storing and retrieving objects
US6792606B2 (en) * 1998-07-17 2004-09-14 International Business Machines Corporation Method and apparatus for object persistence
WO2000077640A1 (en) * 1999-06-10 2000-12-21 Belle Gate Investment B.V. Arrangements storing different versions of a set of data in separate memory areas and method for updating a set of data in a memory
US6502108B1 (en) * 1999-10-25 2002-12-31 International Business Machines Corporation Cache-failure-tolerant data storage system storing data objects with version code equipped metadata tokens
US6411954B1 (en) * 1999-11-19 2002-06-25 Unisys Corporation Method and apparatus for persisting object oriented data
US7024656B1 (en) * 1999-11-29 2006-04-04 Oracle International Corporation Persistent agents
US6963875B2 (en) * 2000-03-23 2005-11-08 General Atomics Persistent archives
US6571252B1 (en) * 2000-04-12 2003-05-27 International Business Machines Corporation System and method for managing persistent objects using a database system
US6901481B2 (en) * 2000-04-14 2005-05-31 Stratus Technologies Bermuda Ltd. Method and apparatus for storing transactional information in persistent memory
US6854115B1 (en) * 2000-06-02 2005-02-08 Sun Microsystems, Inc. Process persistence in a virtual machine
US6981070B1 (en) * 2000-07-12 2005-12-27 Shun Hang Luk Network storage device having solid-state non-volatile memory
US6785767B2 (en) * 2000-12-26 2004-08-31 Intel Corporation Hybrid mass storage system and method with two different types of storage medium
US6763424B2 (en) * 2001-01-19 2004-07-13 Sandisk Corporation Partial block data programming and reading operations in a non-volatile memory
US6766413B2 (en) * 2001-03-01 2004-07-20 Stratus Technologies Bermuda Ltd. Systems and methods for caching with file-level granularity
US6912520B2 (en) * 2001-08-29 2005-06-28 Sun Microsystems, Inc. System and method for providing a persistent object framework for managing persistent objects
US6912633B2 (en) * 2002-03-18 2005-06-28 Sun Microsystems, Inc. Enhanced memory management for portable devices
US7139864B2 (en) * 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4853842A (en) * 1985-09-11 1989-08-01 Texas Instruments Incorporated Computer memory system having persistent objects

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
FU M-M ET AL: "A concurrent programming environment for memory-mapped persistent object systems" PROCEEDINGS OF THE ANNUAL INTERNATIONAL COMPUTER SOFTWARE AND APPLICATIONS CONFERENCE. PHOENIX, NOV. 1 - 5, 1993, LOS ALAMITOS, IEEE COMP. SOC. PRESS, US, vol. CONF. 17, 1 November 1993 (1993-11-01), pages 291-297, XP010140176 ISBN: 0-8186-4440-0 *
SUN JIANLING ET AL: "Transparent access to persistent objects in object-oriented databases" TECHNOLOGY OF OBJECT-ORIENTED LANGUAGES, 1997. TOOLS 24. PROCEEDINGS BEIJING, CHINA SEPT. 1997, LOS ALAMITOS, CA, USA,IEEE COMPUT. SOC, US, 1998, pages 38-42, XP010303018 ISBN: 0-8186-8551-4 *
WU M ET AL: "eNVy: a NonVolatile main memory storage system" WORKSTATION OPERATING SYSTEMS, 1993. PROCEEDINGS., FOURTH WORKSHOP ON NAPA, CA, USA 14-15 OCT. 1993, LOS ALAMITOS, CA, USA,IEEE COMPUT. SOC, 14 October 1993 (1993-10-14), pages 116-118, XP010096049 ISBN: 0-8186-4000-6 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1703378A1 (en) * 2005-03-15 2006-09-20 Sun Microsystems, Inc. Iterator for accessing an object collection

Also Published As

Publication number Publication date
AU2002317099A1 (en) 2003-01-21
EP1402356A2 (en) 2004-03-31
US8019789B2 (en) 2011-09-13
CA2452534A1 (en) 2003-01-16
WO2003005203A3 (en) 2003-10-09
US20040172420A1 (en) 2004-09-02

Similar Documents

Publication Publication Date Title
TW574647B (en) Data processing method in high-capacity flash EEPROM card system
US6928460B2 (en) Method and apparatus for performing generational garbage collection in a segmented heap
US7249235B2 (en) Architecture for a scalable and user-extensible heap dump analysis tool
US20050086422A1 (en) Multiple segment data object management
JP2003177974A (en) File system, file system control method and program for controlling file system
US6766432B2 (en) Memory management system supporting object deletion in non-volatile memory
US9141539B2 (en) System and method for object deletion in persistent memory using bitmap windows
CN103902589B (en) Management method and device for downloaded files
CN107391030B (en) Data storage method, data storage device, computer-readable storage medium and computer equipment
US20130138703A1 (en) Optimized memory management for class metadata
US8019789B2 (en) System and method of object-oriented persistence
US6938140B2 (en) System and method for linear object reallocation in place
KR20030036133A (en) A method and apparatus for reducing ram size while maintaining fast data access
CN1614561A (en) Context of use differentiation in a pocket computer
CN112395215B (en) DRAM-less solid state disk mapping table management method and device, computer equipment and storage medium
US6738873B2 (en) Memory management system supporting deletion of transient objects
US7237085B2 (en) Architecture for a scalable heap analysis tool
CN113641630A (en) FLASH memory
US20060265448A1 (en) Container-level transaction management system and method therefor
WO2008083187A2 (en) Dynamically updateable and moveable memory zones
US7178139B2 (en) Executable file system for an embedded computer
EP0117906B1 (en) Key-accessed file organization
TWI251140B (en) Memory control method, storage apparatus, control program, and readable storage medium
US6272504B1 (en) Flexibly deleting objects in a resource constrained environment
CN110096223A (en) Tracking information related with the free space of container

Legal Events

Date Code Title Description
AK Designated states

Kind code of ref document: A2

Designated state(s): AE AG AL AM AT AU AZ BA BB BG BR BY BZ CA CH CN CO CR CU CZ DE DK DM DZ EC EE ES FI GB GD GE GH GM HR HU ID IL IN IS JP KE KG KP KR KZ LC LK LR LS LT LU LV MA MD MG MK MN MW MX MZ NO NZ OM PH PL PT RO RU SD SE SG SI SK SL TJ TM TN TR TT TZ UA UG US UZ VN YU ZA ZM ZW

AL Designated countries for regional patents

Kind code of ref document: A2

Designated state(s): GH GM KE LS MW MZ SD SL SZ TZ UG ZM ZW AM AZ BY KG KZ MD RU TJ TM AT BE BG CH CY CZ DE DK EE ES FI FR GB GR IE IT LU MC NL PT SE SK TR BF BJ CF CG CI CM GA GN GQ GW ML MR NE SN TD TG

DFPE Request for preliminary examination filed prior to expiration of 19th month from priority date (pct application filed before 20040101)
121 Ep: the epo has been informed by wipo that ep was designated in this application
WWE Wipo information: entry into national phase

Ref document number: 10482756

Country of ref document: US

WWE Wipo information: entry into national phase

Ref document number: 2452534

Country of ref document: CA

WWE Wipo information: entry into national phase

Ref document number: 2002745001

Country of ref document: EP

WWP Wipo information: published in national office

Ref document number: 2002745001

Country of ref document: EP

REG Reference to national code

Ref country code: DE

Ref legal event code: 8642

NENP Non-entry into the national phase

Ref country code: JP

WWW Wipo information: withdrawn in national office

Country of ref document: JP