A method and system for queueing data within a data storage device including a set of storage blocks each having an address, a pointer field, and a data field. This set of storage blocks comprises a linked list of associated storage blocks and also a free pool of available storage blocks. The storage device further includes a tail register for tracking an empty tail block from which a data object is enqueued into the linked list. A request to enqueue a data object into the linked list is received within the data storage system. In response to the data enqueue request, an available storage block from the free pool is selected and associated with the tail register. A single write operation is then required to write the data object into the data field of a current tail block and to write the address of the selected storage block into the pointer field of the current tail block, such that the selected storage block becomes a new tail block to which the tail register points.
Legal claims defining the scope of protection, as filed with the USPTO.
1. A method for enqueueing a storage block having a pointer field and a data field to a linked list of storage blocks, said method comprising: providing a free pool of storage blocks, wherein each of said storage blocks has a null pointer field and an empty data field; in response to a request to enqueue a data object into said linked list, selecting an available storage block from said free pool; updating an address within a tail register to point to said selected storage block as a tail storage block of said linked list; and contiguously writing a pointer into a pointer field of a storage block adjacent to said selected storage block and said data object into a data field of said storage block adjacent to said selected storage block, wherein said pointer is an address pointing to said selected storage block.
2. The method of claim 1 , wherein said contiguously writing is performed within a same write cycle.
3. The method of claim 1 , further comprising assembling said free pool of available storage blocks into a free pool linked list having a free pool tail block from which storage blocks are enqueued into said free pool linked list.
4. The method of claim 3 , wherein said assembling further includes designating half of said available storage blocks within said free pool as either pointer or non-pointer blocks.
5. The method of claim 4 , wherein said designating further includes collecting addresses of a storage block X and a storage block Y to be enqueued within said free pool linked list; and pointing from a data field of said free pool tail to said storage block X, such that storage block X is designated as a non-pointer block; and pointing from a pointer field of said free pool tail to said storage block Y, such that said storage block Y is designated as a pointer block replacing said free pool tail block as a storage block entry point for said free pool linked list.
6. The method of claim 5 , wherein said pointing from a data field of said free pool tail to said storage block X further includes writing an address of said storage block X into a data field of said free pool tail, such that said free pool tail points to said storage block X.
7. The method of claim 5 , wherein said pointing from a pointer field of said free pool tail to said storage block Y further includes writing an address of said storage block Y into a pointer field of said free pool tail, such that said free pool tail points to said storage block Y.
8. The method of claim 3 , further comprising dequeueing two storage blocks from said free pool linked list.
9. The method of claim 8 , wherein said free pool linked list comprises a free pool head block having a dual pointer pointing to a next pointer block and a non-pointer block, and a free pool head register for tracking said free pool head block, and wherein said dequeueing further includes collecting an address of said free pool head block from said free pool head register; collecting addresses of a next pointer block and a non-pointer block; and updating said free pool head register with an address of said next pointer block.
10. An apparatus for enqueueing a storage block having a pointer field and a data field to a linked list of storage blocks, said apparatus comprising: a free pool of storage blocks, wherein each of said storage blocks has a null pointer field and an empty data field; in response to a request to enqueue a data object into said linked list, means for selecting an available storage block from said free pool; means for updating an address within a tail register to point to said selected storage block as a tail storage block of said linked list; and contiguously writing a pointer into a pointer field of a storage block adjacent to said selected storage block and said data object into a data field of said storage block adjacent to said selected storage block, wherein said pointer is an address pointing to said selected storage block.
11. The apparatus of claim 10 , wherein said storage device further comprises a head register for tracking a head block from which an associated data object within said linked list is dequeued from said linked list, said apparatus further comprising: means for writing data from a data field of said head block into a qualifier register associated with said head register; and means for writing address of said head block into said head register, such that said head register points to said head block.
12. The apparatus of claim 10 , wherein said free pool of available storage blocks is assembled into a free pool linked list having a free pool tail block from which storage blocks are enqueued into said free pool linked list.
13. The apparatus of claim 12 , wherein said assembled free pool linked list comprises a plurality of available storage blocks linked by a dual pointer linking mechanism whereby half of the available storage blocks within the free pool linked list are pointer blocks and the other half are non-pointer blocks.
14. The apparatus of claim 13 , wherein said pointer blocks include a dual pointer for pointing to the next sequential pointer block and for pointing to a non-pointer block.
15. A program product stored in signal bearing media for enqueueing a storage block having a pointer field and a data field to a linked list of storage blocks, said computer program product comprising: instruction means for providing a free pool of storage blocks, wherein each of said storage blocks has a null pointer field and an empty data field selecting an available storage block from said free pool; and instruction means for contiguously writing a pointer into a pointer field of a storage block adjacent to said selected storage block and said data object into a data field of said storage block adjacent to said selected storage block, wherein said pointer is an address pointing to said selected storage block.
16. The program product of claim 15 , wherein said instruction means for contiguously writing is performed within a same write cycle.
17. The program product of claim 15 , further comprising instruction means for assembling said free pool of available storage blocks into a free pool linked list having a free pool tail block from which storage blocks are enqueued into said free pool linked list.
18. The program product of claim 17 , wherein said instruction means for assembling further includes instruction means for designating half of said available storage blocks within said free pool as either pointer or non-pointer blocks.
19. The program product of claim 18 , wherein said instruction means for designating further includes instruction means for collecting addresses of a storage block X and a storage block Y to be enqueued within said free pool linked list; and instruction means for pointing from a data field of said free pool tail to said storage block X, such that storage block X is designated as a non-pointer block; and instruction means for pointing from a pointer field of said free pool tail to said storage block Y, such that said storage block Y is designated as a pointer block replacing said free pool tail block as a storage block entry point for said free pool linked list.
20. The program product of claim 19 , wherein said instruction means for pointing from a data field of said free pool tail to said storage block X further includes instruction means for writing an address of said storage block X into said data field of said free pool tail, such that said free pool tail points to said storage block X.
21. The program product of claim 19 , wherein said instruction means for pointing from a pointer field of said free pool tail to said storage block Y comprises instruction means for writing an address of said storage block Y into said pointer field of said free pool tail, such that said free pool tail points to said storage block Y.
22. The program product of claim 17 , further comprising instruction means for dequeueing two storage blocks from said free pool linked list.
23. The program product of claim 22 , wherein said free pool linked list comprises a free pool head block having a dual pointer pointing to a next pointer block and a non-pointer block, and a free pool head register for tracking the free pool head block, and wherein said instruction means for dequeueing two storage blocks from said free pool linked list further includes instruction means for collecting said address of said free pool head block from said free pool head register; instruction means for collecting said addresses of said next pointer block and said non-pointer block; and instruction means for updating said free pool head register with said address of said next pointer block.
Cooperative Patent Classification codes for this invention. Click any code to explore related patents in that topic.
January 7, 2000
June 24, 2003
Browse 5M+ US patents with plain-English claim translations and AI-generated analysis.