WO2002031660A2 - A data structure, memory allocator and memory management system - Google Patents
A data structure, memory allocator and memory management system Download PDFInfo
- Publication number
- WO2002031660A2 WO2002031660A2 PCT/GB2001/004506 GB0104506W WO0231660A2 WO 2002031660 A2 WO2002031660 A2 WO 2002031660A2 GB 0104506 W GB0104506 W GB 0104506W WO 0231660 A2 WO0231660 A2 WO 0231660A2
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- cell
- size
- cells
- data
- block
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
Definitions
- the present invention relates to storage of data in a data storage space supported by one or more da ta storage devices, and in particular to a data structure for storing data within the da ta storage space .
- the invention further relates to a data storage method using the data structure, to a memory freeing method using the data structure, to a data sorting method using the data structure, and to apparatus arranged to perform any of the above methods .
- the computer system may contain a bank of original stored images of varying sizes which are held in a relatively long term storage system until it is time for one of those images to be extracted for enhancement. At that time the extracted image may ' be copied (or transferred) to a second memory device, and stored there for a relatively short time scale while an enhanced version of the image is prepared.
- relevant data for example Fourier data
- relevant data for example Fourier data
- computational task will be used here to include any computing operation performed automatically or semi-automatically by a processor (which may be a single physical unit, or alternatively a distributed processor made up of a plurality of physically separate, or even spatially distant, units) .
- computational task here includes image or sound generation or processing, processing of business or other financial data, text processing (for example, word processing or translation), etc.
- data storage device includes any device that is capable of storing data, including devices which are internal or. external to the unit including the processor.
- Data storage device thus includes a magnetic storage device (e.g. a hard-disk drive or floppy disk), an optical storage device (e.g. a CD storage device, such as read/write CD disk system) , an electronic memory device (such as an internal or external RAM memory) , and even a data storage device which is a portion of an integrated circuit which also carries some or all of the processor itself.
- One or more data storage devices may together define a "da ta storage space " .
- the external RAM memory of a conventional PC is a data storage space, normally supported by one or more integrated memory , chips.
- the hard drive supports a second data storage space .
- both of these da ta storage spaces are parts of a single data storage space which is the total data storage space of the PC.
- a data i tem is used herein to include any data which is intended to be stored in the data storage space .
- a data i tem may have any length (for example use of the plural word “data” does not imply that the data i ra consists of more than one bit) and any significance.
- it may be a program (in any language) , or any data to be subjected to computer processing, or which arises during computer processing.
- da ta array is used to mean a section of a data storage space that is composed of one or more "fields " having a logical relationship to each other.
- a "field” may be of any size, corresponding to one or more data i tems .
- size limitation on a field is implied: for example, the size of a particular field may be one bit, one byte, one word, or longer.
- location of a field is implied: for example, a data array may be composed of fields that are contiguously located in the da ta storage space, or may be composed of fields that are located at discontiguous locations on different da ta storage devices in the data storage space .
- a field may be composed of data items that are contiguously located in the data storage space, or may be composed of data i tems that are located at discontiguous locations on different data storage devices in the data storage space .
- the logical relationship between the fields may be a linear one (for example each field may correspond to a respective section of a data storage space, and the order of the fields in the data array may correspond to the order of those sections within the data storage space ( e.g. the order of the addresses», but any other logical relationship is also possible.
- the logical relationship between the fields may be hierarchical (e.g. the data array may be logically equivalent to a tree-like structure of fields) .
- Data items are either pre-existent within a da ta storage space or are stored by being written to locations within the data storage space .
- selecting the locations for storage within the data storage space is one of the tasks of a unit called an "allocator" (which may be one or more dedicated components, or implemented in software, e.g. as one of several functions performed by a CPU) .
- the allocator selects locations in logical units of a "cell ": a "ceil” is a data array .
- the computational task is performed by a unit called a "mutator” (which may be one or more dedicated components, or implemented in software, e.g. as one of several functions performed by a CPU) .
- the muta tor performs its computational task, data items are continually being written into the da ta storage space, and deleted.
- the data storage space contains cells which are being used by the muta tor for storing data (such an area is known as a "live cell ”) , and cells-which are not being used by the mutator for storing data (such an area is known as a "free cell ”) .
- a live cell may also become a free cell without any deletion of the data items within that cell : this is either achieved through express communication between the mutator and the alloca tor or through a process of usage analysis by a unit called the "garbage collector", or simply the “collector” (which may be one or more dedicated components, or implemented in software, e.g. as one of several functions performed by a CPU) .
- a cell which is not live but which contains data i tems that are still useful to the allocator or to the collector is called a "zombie cell ", or simply a “zombie " .
- data storage using cells is referred to as II heap storage " .
- the total size of a data storage space which is available for heap storage will here be referred to as the quantity HEAPSIZE of that data storage space .
- the HEAPSIZE for a da ta storage space may vary during the course of the computational-tasJ through the addition or deletion of sections of memory: such sections of memory are called “chunks " and the heap storage so implemented is called a "chunked heap ".
- a cell includes zero or more fields for the data to be stored (i.e. a data item) and zero or more fields for additional data which is used for reference purposes
- each live cell may store reference data that includes the address in the da ta storage space of one of the fields of the cell .
- Further reference data may include a field indicating that the cell is in fact live, a field indicating whether neighbouring cells in the da ta storage space are free or live, and afield indicating the locations of other live cells within the da ta storage space .
- a free cell or a zombie cell may contain reference da ta even though it may not contain a data item .
- the" size " of a cell to mean the space within it which is useable for storing a data i tem .
- the" size " of a cell roughly corresponds to the amount of the data storage space occupied by the cell , but the correspondence need not be exact due to the possibility of reference data .
- Size is an integer multiple of a fundamental data unit.
- each cell will store reference da ta including the size of said cell .
- One simple strategy is for the allocator to search through the data storage space (e.g. in address order) for the first -free cell large enough to store the data item, and store it there. This is known as a" First Fit " method.
- An alternative would be to search all available free cells and see if there is one cell of exactly the right size to store the da ta i tem . If there is not, the allocator can then search for the smallest cell that is large enough to store the da ta item . This is called a "Best Fit " criterion. In the case that the free cell is larger than necessary to store the data item, the part of the free cell which is not used for storing the data item (if it is above a predetermined size) may become a new -free cell .
- a further alternative is to search all available free cells to find the largest one, and store the data i tem there. Again, in the case that this free cell is larger than necessary to store the data item, the part of the free cell which is not used for storing the data item becomes a new -free cell . This is called a" Worst Fi t " selection criterion.
- the rationale of the " Worst Fit " selection criterion is that the part of the -free cell which is not used for storing the da ta item will tend to be large, and thus” Worst Fit " will produce relatively large new free cells .
- a selection criterion should not lead to "fragmentation " (that is, the creation of a very large number of small free cells) .
- the time taken by the allocator should be “non-disruptive " (that is, it should never, even in a worst case, be unacceptably large) and should be "sca-ZaJle” (that is, it should be independent of the value of HEAPSIZE) .
- a survey of the field of allocators is given in the paper "Dynamic storage allocation: a survey and critical review" by Paul R. Wilson, Mark, S. Johnstone, Michael Neely, and David Boles (in the Proceedings of the
- Best Fit allocation is not scalable because the time taken to search for the best-fitting free cell must always be related to HEAPSIZE. In the best case, it is assumed that the use of sorted trees can reduce the searc4ing so that it scales with the logarithm of HEAPSIZE.
- FIG. 1 shows a data structure for a memory with free cells of sizes 1,1,1,1,2,2,4,4,5,5,5,5,8,9,9,10,27 ,27, 77, 77 and 102.
- Each -free ceil contains at each end a pointer (shown in grey on the figure) , pointing to another free cell of_ the same size (where one exists) or to the other end of itself (if no other free cell of the same size exists) .
- the -free cells contain enough information to define "rings" of free cells of the same size .
- the allocator also uses a data array AVAIL having six fields .
- AVAIL (1) is used to store the location of one of the four free cells of size 1
- AVAIL (2) stores the location of a -free cell of size 2.
- AVAIL (3) stores the location of AVAIL (3)
- AVAIL(4) and AVAIL(5) store the location of a free cell of size 4 and 5 respectively. Cells above size 5 are treated differently. Specifically, for each ring, a representative cell is selected, and the representative cells are sorted into an AVL tree.
- AVAIL (n) If n less than or equal to 5, and AVAIL (n) is not empty, the data item is stored in the free cell indicated by AVAIL (n). If AVAIL (n) is empty, we search for the smallest j (larger than n) for which AVAIL(j) is not empty. If j is less than or equal to 5, the free cell indicated by AVAIL(j) is split into free cells of size n and (j-n), and the data item is stored in the cell of size n.
- n is greater than or equal to 6 (or in the case in the last paragraph, if no j less than or equal to 5 can be found) we use n as a search key to search the AVL tree pointed to by AVAIL(6), and locate a ring of cells whose size s is the smallest that is also greater than or equal to n, and if s does not equal n then split it to form two free cells of size n and ( s-n) .
- the da ta item is stored in the free cell of size n thus found or created.
- the present inventor has investigated this scheme and has noticed a number of features of it.
- the time taken to identify a free cell for storing a data item rises (in the worst case) as the number of layers of the hierarchical tree. Since free cells may exist up to any arbitrary size less than HEAPSIZE, and each ring in the tree may contain a single cell , and the tree has binary division, the number of layers in the worst case is of the order of log2 (HEAPSIZE' /') .
- HEAPSIZE' /' log2
- the present inventor has devised a variation of the Fast- fit algorithm in which it is ensured all free cells have a size less than or equal to a maximum MAXFIELDS (the da a storage space may, for example, be generated with all cells less than or equal to this size, and coalescing of two cells may only be carried out in the case than a cell larger than
- MAXFIELDS is not created) .
- the time taken for a memory storage operation is in the worst case log2 (MAXFIELDS), which is more acceptable since MAXFIELDS is not related to HEAPSIZE and may be very much smaller than the square root of HEAPSIZE.
- Any alloca tor gradually uses up the free cells in the da ta storage . space, so, for memory storage to be sustainable, there must be a mechanism for generating new free cells . That is, when it is no longer required to store the data in a live cell , there should be a mechanism for converting the live cell into a free cell (i.e. for "freeing" cells) .
- garbage cells In some systems, the freeing of memory is decided by the programmer. However, it is increasingly common for programming systems to offer automatic dynamic memory management including automatic freeing of cells that are no longer being used by the mutator; such cells are called “ garbage cells " .This is referred to here as “ garbage collection " , or simply “collection " , and is performed by the collector (as previously defined) .
- garbage cells In the implementation of functional programming languages in particular, automatic detection and freeing of garbage cells is required.
- collection Preferably, collection should be scalable, and non-disruptive .
- Such collection overheads (which lead to short memory-management pauses due to allocation or collection) are vital for interactive and real-time applications.
- Baker's incremental copying technique (Henry G. Baker, "List processing in real-time on a serial computer”. Communications of the ACM, 21(4); 280-94, 1978) might be expected to form the natural basis for a collector with the required behaviour. However, the worst-case cost of Baker's read barrier is potentially very high and very unpredictable .
- reference counting i.e. counting the number of live cells which point to a particular cell - for each cell , this is called the “reference count " for that cell) .
- the reference count for each cell is normally held as part of the reference da ta for that cell .
- Last-In-First-Out (LIFO) freeing i.e. the most recent) encourages depth-first freeing of cascades and might lead to better cache performance;
- the present invention seeks to address one or more of the above problems, and to provide a novel and useful data structure.
- the present invention seeks to provide a data structure that-makes possible a memory management t system which is scalable, non-disruptive , and employs
- the present invention makes it possible to achieve a (chunked) heap of variable-sized cells to be managed such that:
- the system is scalable, i.e. has memory-management overheads (in terms of memory accesses) being independent of the numbers offree cells or live cells, and independent of the size of the heap (which, with a chunked heap, may grow at runtime) .
- Memory management is non-disruptive (for example, there are no "embarrassing pauses" whilst free cells are coalesced) , and the three operations of cell freeing, cell allocation and cell coalescing each have a small bounded overhead in terms of memory accesses.
- a data structure includes a first data array which indicates the existence of cells of a predetermined type (e.g. free cells) and of a predetermined size, and a second data array which indicates the location of such cells within the data storage space .
- a predetermined type e.g. free cells
- the invention provides a data structure comprising: • a da ta storage space;
- the first and second da ta arrays may each be sections (which may be allocated statically before the start of the computational task, or dynamically during the computational task, or comprise both statically-allocated and dynamically-allocated parts) of said data storage space, or sections of one or more additional data storage spaces . Though logically separate, the first and second data arrays may be merged to facilitate implementation.
- the "type" of cells may be free cells , or alternatively live cells . However, the term “type” is not limited in this respect.
- a "type" of cells may be cells which, irrespective of whether they are live or free, possess some additional characteristic, such as including certain data.
- the cell types are predetermined, but alternatively it would be possible for them to vary (e.g. be regularly reset) as part of an optimisation of the data structure in relation to the computa tional task in which it is employed.
- One type of cell to which the invention is applicable is cells which do not contain da ta item (s) that are useful to the mutator but do contain pointers (to other cells) which may be useful to either the collector or the allocator.
- the type of cells is free cells (i.e. portions of the da ta storage space which are not presently being used by the muta tor -for storing data)
- the first data array can be used to identify a suitable cell size for storing it (e.g.
- said predetermined cell sizes are all no more than a predetermined maximum cell size (MAXFIELDS) , which is independent of the total size of the data storage space (HEAPSIZE) .
- said predetermined cell sizes may be all cell sizes up to the predetermined maximum cell size . This means that the size of both the first and second data array may depend upon MAXFIELDS but be unrelated to HEAPSIZE.
- the first data array may be selected so that for a cell size n it is possible to determine the smallest (integer) value of p such that p>n and there exists at least one cell of the predetermined type of size p, within a time which scales with log (MAXFIELDS) .
- the first data array may be such that for a cell size n it is possible to determine the largest (integer) value of p such that p ⁇ n and there exists at least one cell of the predetermined type of size p, within a time which scales with log (MAXFIELDS) .
- the first data array may be a hierarchical da ta array, having:
- a first level which includes one or more first fields, each first field indicating for a respective size of cell the existence or otherwise of at least one cell of that size, said first fields being divided into one or more groups, each group representing a respective range of cell sizes;
- a second level which includes one or more second fields, each second field indicating for a respective said group the existence or otherwise of at least one cell in the respective range of cell > sizes.
- first layer we will refer here to the “lowermost” layer, and to the second layer as a “higher” layer.
- a particular cell size is "related" to any field of the first data array when that field either (i) contains information about the existence of cells of that size, or (ii) contains information about another field which is itself related to the particular cell size .
- That field is "occupied”.
- afield in the first data array indicates that one of the cell sizes related to it is occupied, we will say that that field is "occupied”.
- the first data array contains further layers "above" the second layer.
- each i-th layer there are one or more fields .
- the one or more fields are divided into one or more groups, each group representing a range of cell sizes , and in the (i+l)-th layer there is a field for each respective group of the i-th layer.
- any particular cell size is, in each layer, rela ted to a single respective field.
- the existence of at least one cell of that particular cell size determines information in all fields related to it, in all layers of the data array. If all groups contain two or more fields, at each level the number of fields is at most half the number of fields in the layer below.
- each field in an (i+l)-th layer represents a group of p fields in the i-th layer
- the (itl)-th layer contains p times as many fields as the i-th layer.
- the largest cell size represented by the first data array is MAXFIELDS, so the, total number of layers scales as log p (MAXFIELDS) . This has the effect that a search within it for a cell size which is occupied, takes a time which scales as log p (MAXFIELDS) .
- n we wish to find the lowest occupied cell size higher than n.
- n we wish to find the lowest occupied cell size higher than n.
- n we begin at the lowest level of the table with the field related to n.
- each layer including the lowest we determine whether, in the group including the field related to cell size n, there is at least one occupiedfield representing cells larger than n. • If so, then we select the smallest such occupiedfield, and move back down the layers, at each layer selecting the occupied field which is related to the selected field in the layer above and which represents the smallest cells .
- each group represents a number of fields in the layer below which is a multiple of eight (e.g. eight, sixteen or thirty-two). Occupancy or otherwise of a field may be represented by a binary digit. In this case, the group of fields may conveniently be represented as an integer number of bytes. In this case, for many computer systems, the operations required for searching the tree can be carried out significantly more quickly (in real time) , because the data array can be simply a bitmap.
- the predetermined cell sizes may be all cell sizes up to the value of MAXFIELDS, this is not in fact a necessary feature of the invention.
- a further option within the scope of the invention is to treat cells in different ways according to their size .
- the first da ta array only to be used for cells having a size which is at least a predetermined minimum size (here called "MINFIELDS") , and for cells smaller than MINFIELDS to be indexed differently.
- MINFIELDS a predetermined minimum size
- the very small cells might be treated in a manner similar to the Fastfit algorithm described above. That is, for cells smaller than MINFIELDS,.
- the second da ta array could contain: (i) , in the case of a cell size for which cells do exist, a pointer to such a cell , or (ii) in the case of a cell size for which cells do not exist, data indicating that fact.
- MINFIELDS is a value that is unrelated to either HEAPSIZE or MAXFIELDS (that is, it does not scale with HEAPSIZE or MAXFIELDS)
- the time scaling of the overall algorithm may be unaffected.
- MAXFIELDS is not in fact a necessary feature of the invention.
- a further option within the scope of the invention is to allow the first and second data arrays to contain fields for all cell sizes up to HEAPSIZE (which may vary) .
- This option may be further optimised within the scope of the invention to allow the first and second data arrays to contain fields for all cell sizes up to the largest cell size yet allocated at any given time during the performance of the computa tional task and for the size of the first and second da ta arrays to be modified dynamically (including extension, contraction and re-balancing as necessary) during the computational task.
- the invention has been explained above using a first data array which indicates the existence or otherwise of a ceil of an exactly predefined size .
- all of the above concepts are straightforwardly applicable to a case in which the cell sizes are in fact binned (i.e. conceptually divided into ranges) , and the first data array is in fact used to indicate the existence of a cell within a certain range.
- the first aspect of the invention may alternatively be expressed as providing a data structure comprising: • a da ta storage space;
- a first da ta array which, for each of one or more cell size ranges, stores data indicating whether or not the data storage space includes at least one cell of a certain type within the respective size range; and • .a second da ta array which, for any of said size ranges for which at least one cell of the determined type exists, indicates a location of at least one of those cells within the data storage space .
- any cell size range may be wider than one data unit (so that it includes two or more possible cell sizes) .
- the largest cell size range may be defined as all cells up to a predefined size (which corresponds to MAXFIELDS, or to HEAPSIZE in the option that MAXFIELDS is not used) .
- the cell size ranges are predetermined, but alternatively it would be possible for them to vary (e.g. be regularly reset) as part of an optimisation of the data structure in relation to the computational task in which it is employed.
- the width of a given cell size range may be a function of the lower limit of the cell size range.
- the cell size range may for example be selected to be wider for higher cell sizes, since in that case the inefficiency caused by the coarse graining of the cell sizes (i.e. the waste caused by replacing an "exact-fit", by an approximate fit) is only a small fraction of the size of the cell . This is in fact a further example of the option mentioned above, of treating cells of different sizes differently.
- the cell types are predetermined, but alternatively it would be possible for them to vary (e.g. be regularly reset) as part of an optimisation of the data structure in relation to the computational task in which it is employed.
- the data structure preferably includes a field which stores the location of at least one of: (i) a cell of the predetermined type having the greatest size (among the predetermined sizes) for which cells of the predetermined type exist (this field is herein called "MAXP"), or (ii) a ceil of the predetermined type having the smallest size (among the predetermined sizes) for which cells of the predetermined type exist (this field is herein called "MINP”) .
- MAXP is useful, for example, in the case that the predetermined cell type is a free cell , because it means that the Worst Fi t method can be used for selection of a free cell to hold a da ta i tem .
- MAXP is also useful in the case that , the predetermined cell type is a zombie cell , because in that case it is easy to find the largest zombie cell to free.
- the predetermined type of cell is a free cell , if it is determined (e.g. using the first data array) that no cell sizes equal to or less than n are occupied, then MINP points to a free cell which (among the extant free cells) is of the smallest size capable of storing a data item of size n.
- the cells of the predetermined type contain pointers to (i.e. data indicating the location of) each other.
- a pointer is a further example of reference data .
- each cell may contain at least two such pointers.
- pointers of the cells of each predetermined size are such that, starting from any cell of any predetermined cell size, any other cell of the predetermined type and the same cell size can be reached by moving successively from one cell to another according to the pointers.
- At least one cell of each predetermined size contains a pointer to one of the cells of the next higher occupied predetermined cell size .
- at least one cell of each predetermined size contains a pointer to one of the cells of the next lower occupied predetermined size. If both of these conditions are met, then it is possible to move between all cells of the predetermined type having any of the predetermined sizes using pointer information alone.
- the predetermined type of ceil is a zombie cell
- the order of the path defined by the pointers through cells of the same size may encode information about the cells of that size, for example the age of the cells (i.e. the time since they were created) .
- the cell of any given size which is indicated (pointed at) by a cell of the next higher size may be the oldest cell of the given size, and the cells along the path towards the cell which points to the next lower size may be progressively younger.
- This age order makes it easy to locate old (or young) cells of a given type and size (for example, for conversion to another type of cell) .
- the age order may be preserved by, whenever a new cell of the given size is created, changing the pointer in the youngest cell of the given size to point at the new cell , and arranging for the new cell to contain a pointer to a cell of the next lower size .
- the scheme of the preceding paragraph may be varied within the scope of the invention, to provide a data structure in which the path leads from young cells to old cells, and/or to the case that the path leads from small to large cells .
- a first cell of the predetermined type contains a pointer to a second cell of the predetermined type (of the same or different size)
- that second cell contains a pointer to the first cell .
- This has the effect that the path may be followed in either direction (i.e. towards either larger or smaller cells) .
- the second data array may store the location of any .(or all) of the cells of the predetermined size (or size range) , it is preferable that the (at least one) cell of each size (or size range) is selected according to a characteristic of the cell.
- the second data array may contain, for each cell size or cell size range, the locations of both the youngest and the oldest cells of the predetermined type and of the predetermined size.
- the second data array may contain, for each cell size range, the locations of both the biggest and the smallest cells of the predetermined type and of the predetermined size .
- a straightforward way of realising MINP is for the data structure to include at least one cell of the predetermined type (herein referred to as a" sentinel cell ”) which is of size MINSIZE or less ( ' e.g. it might be of size zero) having a predetermined location in the data storage space and containing a pointer to a cell of the predetermined type of the next higher size .
- a pointer to the sentinel cell thus constitutes the MINP field.
- a sentinel cell with size MAXFIELDS and a predetermined location could additionally, or alternatively, be provided in the data storage structure.
- a further option within the scope of the invention is for either the MAXP field or the MINP field or both fields to be contained in the second data array.
- the concept of using pointers as described above constitutes an independent second aspect of the invention.
- the invention proposes a data structure including:
- a da ta storage space the data storage space comprising one or more cells of a certain type, each said cell of said type containing at least one pointer to the location in the data storage space of another said cell of said type;
- a field which stores as one or more pointers the location within the data storage space of at least one of: (i) one of said cells of said type which is at least as large as any other of said cells and of said type, or (ii) one of said cells of said type which is at least as small as any other of said cells and of said type; • said pointers being such that, starting from a cell of which the location is indicated in said field, any other of said cells can be reached by moving successively from one cell to another according to the pointers in a path in which the size of the cells varies monotonically.
- At least one cell of each size may contain a pointer to a first one of the cells of the next higher (or lower) second cell size, and the pointers within the cells of the second size may define a path from the first cell through all the other cells of the , second size to the cell of the second size which contains a pointer to a cell of the next higher (or lower) cell size.
- the cell types are predetermined, but alternatively it would be possible for them to vary (e.g. be regularly reset) as part of an optimisation of the data structure in relation to the computa tional task in which it is employed.
- the invention is defined above in terms of data structures.
- the invention in general terms respectively proposes using a data structure according to the first aspect or second aspect of the invention in a memory management method.
- the data structure may have any of the preferable features described in detail above in relation to the first aspect or second aspect of the invention.
- the invention provides a memory management method for controlling one or more da ta storage devices which support a data storage space, the memory management method including: • deriving a first data array which, for each of one or more cell sizes, stores data indicating whether or not the data storage space includes at least one free cell of the respective size;
- the data item upon receiving an instruction to store a data item, determining using said first data array an appropriate cell size of a free cell for storing the da ta item, and using said second data array to derive the location within the da ta storage space of a location of afree cell of the determined cell size .
- the data item will be stored in the said free cell
- the said cell will be converted into a live cell
- the first and second data arrays will be updated to indicate that said cell is no longer free .
- the location of said cell will be added to the appropriate field in the second da ta array, said cell will be converted to a free cell , and the related fields of the first data array will be updated to indicate that a free cell of said size exists.
- the invention provides a memory management method for controlling one or more data storage devices which support a data storage space, the data storage space containing:
- the method including identifying a free cell of a certain size by starting from a first free cell , and moving successively from one cell to another according to the pointers until a ceil of that size is reached.
- an appropriate free cell upon receiving an instruction to store a data i tem of a certain size, an appropriate free cell will be determined using the method described in the fourth aspect and starting the search from the said field, the data item will be stored in the said free cell , the said free cell will be converted into a live cell , and the cell will be detached from the linked- list of free cells .
- said cell upon receiving an instruction to add a new free cell of a certain size, said cell will be converted to a free cell and added to the linked-list of free cells in the appropriate position such that the properties expressed in the fourth aspect are maintained (i.e. the pointers provide a path in which the size of the cells varies monotonically) .
- the first and fourth aspects of the invention will be combined so that, upon receiving an instruction to add a new free cell of a certain size, or to allocate a da ta i tem of a certain size, the appropriate position for adding the new free cell to or deleting an existing free cell from the linked-list of free cells may be determined by inspecting the first and second da ta arrays and said da ta arrays will be updated accordingly to indicate either the presence of a new free cell or that an existing free cell has been deleted. This has the effect that both adding a new free cell and allocating an existing free cell can be achieved in 0 (logp (MAXFIELDS) ) time.
- the memory management method preferably further includes a step of identifying at least one cell of a type other than a free cell (e.g. a live cell or a zombie cell) and converting it into a free cell .
- a free cell e.g. a live cell or a zombie cell
- the fields of the said cell that were used for non-reference data may be used to store the reference da ta for the free cell after conversion.
- those fields in the free cell that were used for reference data may be used for non- reference da ta .
- the memory management method preferably employs a data structure according to the first or second aspect of the invention in relation to cells of this other type.
- the invention proposes a memory management method for controlling one more data storage devices which support a data storage space containing one or more zombie cells, each zombie cell containing at least one pointer to the location in the da ta storage space of another zombie cell ;
- the method employing afield which stores the location within the; data storage space of one of said zombie cells which is at least as large (or as small) as any other of said zombie cells; • said pointers being such that, starting from a zomjie cell of which the location is indicated in said field, any other of said zombie cells can be reached by moving successively from one zombie cell to another according to the pointers in a path in which the size of the zombie cells varies monotonically;
- the method including freeing zombie cells in an order defined by starting from a first zombie cell , and moving successively from one zombie cell to another according to the pointers.
- a ' appropriate zombie cell will be determined using the method described in the fifth aspect and starting the search from the said field, the said zombie cell will be converted into a free cell , and said free cell will be detached from the linked-list of zombie cells.
- said cell upon receiving an instruction to add a new zombie cell of a certain size, said cell will be converted to a zombie cell and added to the linked-list of zombie cells in the appropriate position such that the properties expressed in the fifth aspect are maintained (i.e. the pointers provide a path in which the size of the cells varies monotonically) .
- the invention proposes that the concepts described above are generalised by replacing cell size with any integer-valued property associated with a cell.
- the invention proposes a memory management method for controlling one more data storage devices which support a data storage space containing one or more cells, each cell containing at least one pointer to the location in the data storage space of another cell , and each cell additionally associated with (e.g. containing) at least one integer quantity or property (which we call the "sort value ”) ;
- said pointers being such that, starting from a cell of which the location is indicated in said field, any other of said cells can be reached by moving successively from one cell to another according to the pointers in a path in which the sort value of the cells varies monotonically;
- an appropriate cell upon receiving an instruction to delete a cell , an appropriate cell will be determined using the method described in the sixth aspect and starting the search from the said field, and the said cell will be detached from the linked-list of cells .
- said cell upon receiving an instruction to add a new cell of a certain sort value, said cell will be added to the linked-list of cells in the appropriate position such that the properties expressed in the sixth aspect are maintained (i.e. the pointers provide a path in which the sort value of the cells varies monotonically) .
- the first and sixth aspects of the invention will be combined so that, upon receiving an instruction to add a new cell of a certain sort value, or upon receiving an instruction to delete a cell , in the former case the appropriate position for adding the new cell to the linked-list of cells may be determined by inspecting the first and second data arrays and in both cases said da ta arrays will be updated accordingly to indicate respectively either the presence of a new cell or the deletion of a cell .
- This has the effect that adding a new cell ox deleting the cell with the largest sort value can be achieved in 0 (logp (MA.XFIELDS) ) time.
- the above defined sixth aspect of the current invention thus provides a "priority queuing" mechanism for sorting data i tems of a certain type with respect to any integer quantity or property of said data items or of the cells that contain said data i tems .
- a "priority queue” is a data structure and associated methods which support the insertion of da ta items in any order and the selection (i.e. deletion) of data items in a predetermined order (for example, in order of the size of the cells that contain said data i tems, or in order of the value of the data i tem, which mayor may not be numerical) .
- it is a mechanism for sorting data items into a certain order.
- Priority queues are important for a wide range of computational tasks: for example, the scheduling of processes by an operating system, the routing of prioritised data in a communications network (for example, the Internet) , the servicing of prioritised requests by an Object Request Broker, and the processing of data from multiple sensors (such as found, for example, in aircraft, spacecraft and self-navigating missiles) .
- a communications network for example, the Internet
- Object Request Broker the processing of data from multiple sensors (such as found, for example, in aircraft, spacecraft and self-navigating missiles) .
- the time performance of the priority queue is a critical element of the successful implementation of that task.
- Priority queues typically exhibit insertion and deletion time overheads that either both scale logarithmically with the number of cells in the queue, or one scales linearly with the number of cells in the queue and the other takes constant time.
- the sixth aspect of the current invention provides a priority queuing mechanism that has deletion and insertion time overheads that scale as follows:
- MAXFIELDS and MINFIELDS limits are set, O(logp (MAXFIELDS - MINFIELDS)); • where no limit is set, and the data arrays are not dynamically re-balanced, 0 (logp (maximum cell , value) ) ;
- a further useful property of the current invention is that it allows data items of equal value (in terms of the criterion for selection) to be selected in order of age (either oldest-first or youngest-first) . Most implementations of priority queues do not provide this facility. This has the effect that stronger guarantees can be provided about the behaviour of computer software that uses the current invention as the basis for priority queuing.
- the invention provides memory management methods (fully combinable with the methods according to any of the third to sixth aspects of the invention) in which a data structure according to the first or second aspect of the invention is updated by the insertion into it of a cell of the certain type, and the first and second tables and any pointers are updated accordingly.
- this insertion preserves any information about the cells encoded by the pointers.
- the invention provides a da ta storage device which is arranged to store a data structure according to the first and/or second aspects of the invention, and/or to perform any of the methods according to the invention (including means for performing each respective step of the methods) .
- the , invention further provides a computer system for performing a computational task and including such a da ta storage device .
- the first example describes a priority queue that does not limit the sizes of the first and second data arrays (i.e. there is no MAXFIELDS limit).
- the second example describes a memory allocation system where the sizes of the first and second arrays are limited by MAXFIELDS.
- the first and second data arrays of the first aspect of the current invention are merged for ease of implementation.
- the result is a single data array that contains both those fields determining the existence of cells of a certain value and those fields determining the location of said cells if they exist.
- the da ta array comprises a hierarchy of memory "blocks". Each block consists of a bitmap (in this example, an unsigned 32-bit integer) and one or more fields held in contiguous locations (so that standard array indexing may be used to locate afield in constant time) , with each field containing a pointer (in this example each block contains 32 pointers) . At the lowest level, the pointers give the locations of cells: at all other levels the pointers hold the addresses of blocks in the next lower level. Additionally the da ta array , contains afield holding a pointer to the top layer of the hierarchy, and afield that stores the current number of layers in the hierarchy.
- the bitmaps provide the implementation of the first da ta array of the first aspect of the current invention and the pointers provide the implementation of the second data array of the first aspect of the current invention.
- Each cell contains reference data including (i) the value of said cell to be used for ordering subsequent selection, and (ii) a pointer to the "next" cell of lower or equal value (if such a cell does not exist, this field is empty) , and (iii) a pointer to the "previous" cell of higher or equal value (if such a cell does not exist, the pointer gives the location of the sentinel cell) .
- the cells are arranged as a double-linked list.
- the double- linked list is at all times maintained in monotonic order of cell value. This arrangement provides the implementation of the second aspect of the current invention.
- the pointers of the lowest level of the da ta array point to cells in this list -there is a single pointer from the data array for each different value that is currently being used for sequencing in the priority queue. For a certain value, if duplicate cells with that value exist, they are grouped next to each other in the double-linked list and the pointer from the da ta array for that value gives the location of the cell which is linked to the cell with the next highest value (or to the sentinel cell , if no higher valued cell exists) . This is illustrated in Figure 2.
- the priority queue is initialised as follows:
- the data array has one block containing 32 fields and a bitmap, each field being NULL and each bit in the bitmap being 0;
- the pointer to the top layer of the data array contains the location of the first field (that which points to the sentinel cell) ;
- This example of the invention is a memory allocation system where the sizes of the first and second arrays are limited by MAXFIELDS.
- the memory allocation system provides best-fit memory allocation with allocation delays that are independent of the size of the memory.
- the memory is divided into blocks. Each block comprises both an administrative data area and a user data area. If the block is not being used by the program (known as a "free" block) , the user data held in the user data area is irrelevant and the user data area may therefore be used to hold additional administrative data. If the block is being used by the program (known as a "live” block) then the user data area may not be used for administrative data.
- the administrative data for all blocks is the same and , comprises :
- the sizes are expressed as numbers of bytes.
- the size of the user data area for a live block may not exceed MAXFIELDS bytes.
- the size of a free block may, however, exceed MAXFIELD bytes (as described below) .
- the memory contains amongst other things a single very large free block that represents the entire memory that the program may use.
- the size of this block (to which we give the name "wilderness block”) will be bigger than MAXFIELDS.
- adjacent free blocks may be coalesced, and may thereby create a free block whose size is bigger than MAXFIELDS (we also give these the name "wilderness blocks”) .
- This example describes a memory management system where MAXFIELDS is less than 32,768 and therefore both the availability (free or live) and the size of a . block can be expressed with a 16 bit signed integer. The sign bit indicates whether the block is free (negative) or live (positive) and the magnitude indicates the size. An integer value of -32,768 indicates a free block that is bigger than 32,767 bytes and the actual size of the free block is stored in the data area of that block (see below) . .
- Each free block contains, in addition to the required administrative data of two 16-bit integers (one for size and availability of this block, and one for the size and availability of the previous block) , two pointers to other free blocks.
- the first such pointer (to which we give the name "leftp") gives the memory address of the free block that is next highest in a double-linked chain of free blocks.
- the second such pointer (to which we give the name "rightp") gives the memory address of the free block that is next lowest in the double-linked chain of free blocks.
- the memory comprises three blocks:
- the system also maintains
- the first level of bitmaps is an array (to which we give the name bitmapO) of 1024 unsigned integers. This will support up to 32768 entries in pgarray.
- the second level of bitmaps is an array (to which we give the name bitmapl) of 32 unsigned integers; this will support up to 1024 entries in bitmapO .
- the final level of bitmaps is a single unsigned integer to which we give the name bitmap2; this supports up to 32 entries in bitmapl . (iv) a linked-list of free blocks in size order, with the lowest block in this linked list being the "sentinel" block and the highest block in this linked list being the "max" block.
- this memory management system is to be used for a program that allocates only individual bytes of data, then fragmentation may be minimised by permitting the system to allocate blocks starting at any address in memory.
- the program allocates larger units of data such as integers then additional internal fragmentation will occur because the system will be required only to allocate blocks where the user data starts at a memory address that is a multiple of 4 (alternatively, 8-byte or 16-byte alignment may be required) ; to achieve this, it is necessary to ensure that (i) the initial wilderness block has a user data area that starts at a suitably aligned memory address and (ii) all subsequent requests for block allocation are rounded up to the nearest size such that the neighbouring free block (at higher address) has a user data area that is correctly aligned.
- an initialisation method ensures that:
- bitmaps then have the first bit at each of the three levels set to 1 (this is because pgarray will be initialised with pgarray [0] containing the address of the sentinel block)
- a wilderness block is created in memory immediately after the max block, occupying all of the rest of the available memory. Because it is a wilderness block, pgarray does not contain an entry for this block. However, the block must be linked into the double-linked free list.
- the "previous size and availability" data for the wilderness block are set to the appropriate values for the max block.
- the “size and availability” data for the wilderness block are set to -32,768.
- the leftp for the sentinel block and the rightp for the max block are both set to the memory address of the wilderness block
- a main method receives memory requests from the program and allocates memory appropriately. Three different requests may be received: "malloc”, "realloc” and "free”.
- the first is a request for the allocation of new memory of a given size; the main method finds the free block that is closest to the given size and splits that block into two parts - the lower part has a user data area that is the size required by the program (subject to alignment constraints as indicated above) and its memory address is returned to the program, whilst the upper part is retained as a free block for future use.
- the third request is that a live block at a given address should no longer be considered as live - it is therefore linked into the free list so that it may be available for future use.
- the second request is that a live block should be resized (either to a greater or smaller size) , with the data in the current block being retained - this may be achieved by growing or shrinking the existing live block, or by allocating a new block, copying the data, and freeing the existing block.
- the main method passes control to a subsidiary method to deal with the request.
- the three subsidiary methods are. given the names "ccmalloc", "ccrealloc" and "ccfree". These three methods are described in detail below.
- This method is provided with the size of user data area that is requested.
- the method allocates the best-fit free block, unlinks that free block from the double-linked chain of free blocks, resets the pgarray and bitmaps a necessary, updates the administrative data for the block to show that it is now a live block, and returns the memory address of the block. If the selected free block is larger than the requested size, the remainder of the block may be divided from the requested part and the remainder is then treated as a new free block and linked into the double-linked chain of free blocks and the pgarray and bitmaps are updated as appropriate.
- the allocator terminates with an error • if pgarray [size] is not empty ' then- a free block of the requested size is available; this block is changed from being a free block to a live block by passing the memory address of the identified block as an argument (together with the requested size) to a method with the name "ccdelete” (this method is described below) . The address of the block is then returned as the result of this method "ccmalloc"
- control is passed to the method "search”, with the requested size passed as an argument.
- search method is described below. It returns the index in the pgarray corresponding to the next smallest free block
- the leftp of the next smallest free block contains thd memory address of the next biggest free block. This is the block that will be used to satisfy the request.
- the "target” block • if the target block is a wilderness block then we chose a new target block which is the wilderness block whose address is held in the rightp of the max block. This switch (together with appropriate actions when free blocks are coalesced) ensures that those wilderness blocks that are created by coalescing are chosen to fulfil allocation requests in preference to the wilderness block at the end of memory - this in turn reduces the overall memory requirements of the program.
- the amount of memory to be taken from the wilderness block will be the requested size (the administrative data at the start of the wilderness block can be reused for the newly- allocated block • the ' size of the remaining block will be the current size of the target block less the requested size less the size of the administrative data for the remaining block - we give this value the name "j"
- the leftp of the block whose memory address is contained in the rightp of the target block is set to be the memory address of the remaining block and the rightp of the block whose memory address is held in the leftp of the target block is set to be the memory address of the remaining block the memory address of the newly allocated block is returned as the result of the "ccmalloc" method
- This method resizes an already-allocated (live) block. It takes two arguments: the memory address of the block to be resized, and the new size that the block should > have. It returns the address of the resultant block.
- ccrealloc simply passes control to the method ccfree (address) and then returns a memory address of zero.
- nextsize indicates that the next block is a wilderness block then the true next size is read from the user data area of the wilderness block
- the method ccfree frees a block that is not currently linked into the double-linked chain of free blocks; it does this by linking the block into the double-linked chain of free blocks and updating the pgarray and bitmaps accordingly. It takes as an argument the memory address of a block to be freed. it does not return any result.
- prevblock size to be the same as the value of thissize • if prevsize is -32768 then read the actual size of the previous block from the 4 bytes just before the administration data area of the current block (these are the top 4 bytes of the user data area of the previous block) and calculate the memory address of the previous block by subtracting this actual size (together with the size of the administration data area) from the memory address of the current block and store this value in a local variable with the name "prevblock” • if prevsize is negative but not -32,768, calculate the memory address of the previous block by adding ⁇ prevsize to the memory address of the current block and then subtracting the size of the administration data area and store this value in a local variable with the name "prevblock"
- prevsize must be positive, so calculate the memory address of the previous block by subtracting prevsize (plus the size of the administration data area) from the memory address for the current block and store this value in a local variable with the name "prevblock"
- the ccfree method next considers the possibility of merging with the previous block.
- nextblock is a valid memory address
- update the administration data area of nextblock such that "previous size and availability" is set to
- -32,768 if size is not greater than MAXFIELDS then update the administration data area of the current block such that "my size and availability" is set to the value -size; then (if nextblock is a valid memory address) update the administration data area of the next block such that "previous size and availability” is set to -size • if prevsize IS -32,768 then the previous block is a wilderness block, so execute the following instructions : • read the data held in the memory address 4 bytes before the administration data area forthe current block and store this in a local variable with the name "bigprevsize"
- nextblock is a valid memory address
- update the administration data area of nextblock such that "previous size and availability" is set
- the ccfree method has at this stage finished all coalescing and subsequently adds the current block
- the current block is inserted at the top of the double-linked chain of free blocks, pointed to directly by the max block. This is achieved by updating the leftp of the current block to contain the memory address of the max block, by updating the rightp of the current block to contain a copy of the value currently stored in the rightp of the max block, by updating the leftp of the block whose memory address is stored in the rightp of ' the max block so that it contains the memory address of the current block, and by updating the rightp of the max block so that it contains the memory address of the current block
- the method ccdelete is used internally (by ccmalloc and ccfree) - it deletes (unlinks) a specified block from the double-linked chain of free blocks and removes any reference to that block from either the pgarray or the bitmaps. It will also manage the splitting of such a deleted block if required, with the- lower sub-sblock remaining deleted and the upper sub-block being reinserted back into the double-linked list of free blocks (and pgarray and bitmaps updated accordingly) .
- the method takes three arguments (i) the memory address of a block to be deleted, which will be stored in a local variable with the name "cp" (ii) the size of the block to be deleted, which will be stored in a local variable with the name "size” (if it is less than. the actual size of the block, this indicates that a split is requested) , and (iii) a Boolean value to indicate whether it is OK to split just a very small ( ⁇ 8 bytes) block from the start of the given free block
- This method takes a single argument "size” and searches the bitmaps to find the highest set bit that is less than the bit representing the pgarray index "size”. It returns the appropriate index.
- bitindex • if bitindex is not zero then update bitindex with the result of subtracting one from the existing value of bitindex and then update bitremainder so that it contains the value 32
- This method takes a single argument "size” and updates the bitmaps so that they reflect the fact that there is ' no valid memory address in pgarray [size] . There is no return value.
- bitmapO [bitindex] is zero then : • update bitremainder to be the remainder after bitindex has been divided by 32
- This method achieves two objectives: it updates the bitmaps to indicate that pgarray [size] contains a valid memory address, and it searches for the biggest set bit that represents a pgarray index less than size. It then returns the appropriate index. • pass control to method "search”, passing the argument size; the method “search” will return an integer that is then stored in a local variable with the name "i"
- bitmapO [bitindex] with the value obtained by right-shifting the value stored in msb bitremainder times (the value held in msb should NOT be altered) • update bitmapl [bitindex / 32] with the result of calculating the bitwise OR of the existing value of bitmapl [bitindex/32] with the value obtained by right-shifting msb by the number of times that is the result of calculating the remainder after dividing bitindex by 32 (the value held in msb should NOT be altered)
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
Description
Claims
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| AU2001293984A AU2001293984A1 (en) | 2000-10-11 | 2001-10-10 | A data structure, memory allocator and memory management system |
| EP01974469A EP1327194A2 (en) | 2000-10-11 | 2001-10-10 | A data structure, memory allocator and memory management system |
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| GB0024927A GB0024927D0 (en) | 2000-10-11 | 2000-10-11 | A data structure memory allocator and memory management system |
| GB0024927.6 | 2000-10-11 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| WO2002031660A2 true WO2002031660A2 (en) | 2002-04-18 |
| WO2002031660A3 WO2002031660A3 (en) | 2002-08-01 |
Family
ID=9901094
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| PCT/GB2001/004506 WO2002031660A2 (en) | 2000-10-11 | 2001-10-10 | A data structure, memory allocator and memory management system |
Country Status (4)
| Country | Link |
|---|---|
| EP (1) | EP1327194A2 (en) |
| AU (1) | AU2001293984A1 (en) |
| GB (1) | GB0024927D0 (en) |
| WO (1) | WO2002031660A2 (en) |
Cited By (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7039785B2 (en) | 2004-02-24 | 2006-05-02 | Hitachi, Ltd. | Method and apparatus for increasing an amount of memory on demand when monitoring remote mirroring performance |
| GB2444746A (en) * | 2006-12-15 | 2008-06-18 | Symbian Software Ltd | Allocating memory sectors for a data block by finding a contiguous area which starts with a sector with unused memory at least at much as the overlap |
| EP2284710A1 (en) * | 2009-08-04 | 2011-02-16 | Giesecke & Devrient GmbH | Method for managing storage resources in a portable data carrier |
| CN103294603A (en) * | 2012-02-03 | 2013-09-11 | 特拉博斯股份有限公司 | Method and device for controlling memory allocation |
| US9128615B2 (en) | 2013-05-15 | 2015-09-08 | Sandisk Technologies Inc. | Storage systems that create snapshot queues |
| CN112416809A (en) * | 2019-08-23 | 2021-02-26 | 美光科技公司 | Allocation mode for scalable storage areas |
| GB2595265A (en) * | 2020-05-20 | 2021-11-24 | Imagination Tech Ltd | Memory for storing data blocks |
Family Cites Families (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5577243A (en) * | 1994-03-31 | 1996-11-19 | Lexmark International, Inc. | Reallocation of returned memory blocks sorted in predetermined sizes and addressed by pointer addresses in a free memory list |
| US5784699A (en) * | 1996-05-24 | 1998-07-21 | Oracle Corporation | Dynamic memory allocation in a computer using a bit map index |
-
2000
- 2000-10-11 GB GB0024927A patent/GB0024927D0/en not_active Ceased
-
2001
- 2001-10-10 EP EP01974469A patent/EP1327194A2/en not_active Withdrawn
- 2001-10-10 AU AU2001293984A patent/AU2001293984A1/en not_active Abandoned
- 2001-10-10 WO PCT/GB2001/004506 patent/WO2002031660A2/en not_active Application Discontinuation
Cited By (17)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8112599B2 (en) | 2004-02-24 | 2012-02-07 | Hitachi, Ltd. | Method and apparatus for increasing an amount of memory on demand when monitoring remote mirroring performance |
| US8392688B2 (en) | 2004-02-24 | 2013-03-05 | Hitachi, Ltd. | Method and apparatus for increasing an amount of memory on demand when monitoring remote mirroring performance |
| US7278007B2 (en) | 2004-02-24 | 2007-10-02 | Hitachi, Ltd. | Method and apparatus for increasing an amount of memory on demand when monitoring remote mirroring performance |
| US7039785B2 (en) | 2004-02-24 | 2006-05-02 | Hitachi, Ltd. | Method and apparatus for increasing an amount of memory on demand when monitoring remote mirroring performance |
| US7555622B2 (en) | 2004-02-24 | 2009-06-30 | Hitachi, Ltd. | Method and apparatus for increasing an amount of memory on demand when monitoring remote mirroring performance |
| US7725676B2 (en) | 2004-02-24 | 2010-05-25 | Hitachi, Ltd. | Method and apparatus for increasing an amount of memory on demand when monitoring remote mirroring performance |
| US7136983B2 (en) | 2004-02-24 | 2006-11-14 | Hitachi, Ltd. | Method and apparatus for increasing an amount of memory on demand when monitoring remote mirroring performance |
| US7917721B2 (en) | 2004-02-24 | 2011-03-29 | Hitachi, Ltd. | Method and apparatus for increasing an amount of memory on demand when monitoring remote mirroring performance |
| GB2444746A (en) * | 2006-12-15 | 2008-06-18 | Symbian Software Ltd | Allocating memory sectors for a data block by finding a contiguous area which starts with a sector with unused memory at least at much as the overlap |
| EP2284710A1 (en) * | 2009-08-04 | 2011-02-16 | Giesecke & Devrient GmbH | Method for managing storage resources in a portable data carrier |
| CN103294603A (en) * | 2012-02-03 | 2013-09-11 | 特拉博斯股份有限公司 | Method and device for controlling memory allocation |
| CN103294603B (en) * | 2012-02-03 | 2017-11-28 | 特拉博斯股份有限公司 | Method and apparatus for control memory distribution |
| EP2624137B1 (en) * | 2012-02-03 | 2020-05-13 | Coriant Oy | A method and a device for controlling memory allocation |
| US9128615B2 (en) | 2013-05-15 | 2015-09-08 | Sandisk Technologies Inc. | Storage systems that create snapshot queues |
| CN112416809A (en) * | 2019-08-23 | 2021-02-26 | 美光科技公司 | Allocation mode for scalable storage areas |
| US11972294B2 (en) | 2019-08-23 | 2024-04-30 | Micron Technology, Inc. | Allocation schema for a scalable memory area |
| GB2595265A (en) * | 2020-05-20 | 2021-11-24 | Imagination Tech Ltd | Memory for storing data blocks |
Also Published As
| Publication number | Publication date |
|---|---|
| GB0024927D0 (en) | 2000-11-29 |
| EP1327194A2 (en) | 2003-07-16 |
| AU2001293984A1 (en) | 2002-04-22 |
| WO2002031660A3 (en) | 2002-08-01 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| Bender et al. | Cache-oblivious B-trees | |
| Bender et al. | Cache-oblivious B-trees | |
| KR102034833B1 (en) | Apparatus for Accessing Data Using Internal Parallelism of Flash Storage based on Key-Value and Method thereof | |
| US5440734A (en) | System for MSD radix sort bin storage management | |
| EP2633413B1 (en) | Low ram space, high-throughput persistent key-value store using secondary memory | |
| KR100529995B1 (en) | A method of storing elements in a database | |
| US7805427B1 (en) | Integrated search engine devices that support multi-way search trees having multi-column nodes | |
| JP4299555B2 (en) | Cache control program | |
| US20110264870A1 (en) | Using region status array to determine write barrier actions | |
| US7603346B1 (en) | Integrated search engine devices having pipelined search and b-tree maintenance sub-engines therein | |
| CA2556083A1 (en) | Memory allocation | |
| CN111984425B (en) | Memory management method, device and equipment for operating system | |
| US7653619B1 (en) | Integrated search engine devices having pipelined search and tree maintenance sub-engines therein that support variable tree height | |
| US5829018A (en) | Apparatus and method for writing data from a cache to a storage device | |
| US7725450B1 (en) | Integrated search engine devices having pipelined search and tree maintenance sub-engines therein that maintain search coherence during multi-cycle update operations | |
| EP0844564B1 (en) | Memory manager system and method therefor | |
| KR100907477B1 (en) | Apparatus and method for managing index information of data stored in flash memory | |
| EP1564640A1 (en) | Database accelerator | |
| EP1327194A2 (en) | A data structure, memory allocator and memory management system | |
| JPH09179743A (en) | Method and device for sorting element | |
| CN101063976A (en) | Method and equipment for fast deletion of physically clustered data | |
| JP6006740B2 (en) | Index management device | |
| US7953721B1 (en) | Integrated search engine devices that support database key dumping and methods of operating same | |
| US20220269675A1 (en) | Hash-based data structure | |
| US7130857B2 (en) | Method for accessing a memory unit in which sequences of notes are stored, corresponding memory unit and corresponding program |
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 PH PL PT RO RU SD SE SG SI SK SL TJ TM TR TT TZ UA UG US UZ VN YU ZA 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 ZW AM AZ BY KG KZ MD RU TJ TM AT BE CH CY DE DK ES FI FR GB GR IE IT LU MC NL PT SE TR BF BJ CF CG CI CM GA GN GQ GW ML MR NE SN TD TG |
|
| AK | Designated states |
Kind code of ref document: A3 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 PH PL PT RO RU SD SE SG SI SK SL TJ TM TR TT TZ UA UG US UZ VN YU ZA ZW |
|
| AL | Designated countries for regional patents |
Kind code of ref document: A3 Designated state(s): GH GM KE LS MW MZ SD SL SZ TZ UG ZW AM AZ BY KG KZ MD RU TJ TM AT BE CH CY DE DK ES FI FR GB GR IE IT LU MC NL PT SE TR BF BJ CF CG CI CM GA GN GQ GW ML MR NE SN TD TG |
|
| 121 | Ep: the epo has been informed by wipo that ep was designated in this application | ||
| DFPE | Request for preliminary examination filed prior to expiration of 19th month from priority date (pct application filed before 20040101) | ||
| WWE | Wipo information: entry into national phase |
Ref document number: 2001974469 Country of ref document: EP |
|
| WWP | Wipo information: published in national office |
Ref document number: 2001974469 Country of ref document: EP |
|
| REG | Reference to national code |
Ref country code: DE Ref legal event code: 8642 |
|
| WWW | Wipo information: withdrawn in national office |
Ref document number: 2001974469 Country of ref document: EP |
|
| NENP | Non-entry into the national phase |
Ref country code: JP |