US20020029327A1 - Linked list memory and method therefor - Google Patents
Linked list memory and method therefor Download PDFInfo
- Publication number
- US20020029327A1 US20020029327A1 US09/138,909 US13890998A US2002029327A1 US 20020029327 A1 US20020029327 A1 US 20020029327A1 US 13890998 A US13890998 A US 13890998A US 2002029327 A1 US2002029327 A1 US 2002029327A1
- Authority
- US
- United States
- Prior art keywords
- memory
- list
- address
- counter
- data memory
- Prior art date
- Legal status (The legal status 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 status listed.)
- Granted
Links
- 230000015654 memory Effects 0.000 title claims abstract description 303
- 238000000034 method Methods 0.000 title claims abstract description 25
- 230000000977 initiatory effect Effects 0.000 claims description 4
- 238000012546 transfer Methods 0.000 claims description 2
- 238000012545 processing Methods 0.000 abstract description 34
- 229910003460 diamond Inorganic materials 0.000 description 16
- 239000010432 diamond Substances 0.000 description 16
- 238000013479 data entry Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 4
- 239000004020 conductor Substances 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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 memory systems in general, and specifically to memory systems incorporating linked lists.
- the list pointers are compiled into a table, which may be maintained in software or in hardware.
- a list is typically designated as having a starting address, known as the “head” of the list, and an ending address, known as the “tail” of the list.
- the addresses between the head and tail are not necessarily sequential, and are typically spread throughout data memory.
- the list pointer then keeps track of all of the addresses that are contained within the list.
- control logic is used to update the list pointer, and to interface with the memory.
- this control logic will be some type of an application specific integrated circuit (ASIC) device which is specially designed and separate from the memory integrated circuit.
- ASIC solutions do not typically optimize access speed, and are expensive.
- FIG. 1 illustrates, in block diagram form, a memory system 5 according to one embodiment of the present invention
- FIGS. 2 and 3 illustrate, in flow diagram form, the operation of memory system 5 of FIG. 1;
- FIG. 4 illustrates an example of the operation of memory system 5 of FIGS. 1 - 3 .
- the present invention provides a method of forming a linked list in memory using an address selection unit, or address generator.
- the address generator assigns addresses to each of multiple lists, where each list corresponds to a device which uses the memory.
- the address generator assigns each of the address locations in the memory only once, and after all addresses have been assigned once, a free list is used to track unused addresses, i.e. unused memory cells. The free list is not used until all addresses have been assigned once.
- the address generator is implemented using a counter 22 , which is initialized on power-on of the memory system.
- the counter 22 is incremented each time an address is assigned.
- the value of counter 22 is used to assign the address for each write operation.
- the counter value is output into a register 26 , referred to as the “current address register.” Addresses are assigned on each request for a write to memory.
- the counter is not effected by requests to read from memory.
- the free list is not used until the counter 22 has been used to assign all addresses in the memory 10 .
- the free list also includes a counter which is initialized to a maximum value at power on of the memory system. The maximum value corresponds to the size of the memory, and indicates that all memory addresses are available for use.
- the free list counter is then incremented on each subsequent read operation, as after a read the address of the read is no longer in use. Note that on a read, if the list is empty the counter is not incremented as this address is already free.
- the free list counter indicates the number of available memory locations in memory 10 . Similar to the read, the free list counter is decremented on each write operation, as to add data to memory 10 requires the use of a previously unused memory location.
- FIG. 1 illustrates a data processing system 1 , having a processor 6 , a communication bus 2 , and a memory system 5 .
- Memory system 5 includes a memory 10 and list memory 8 .
- List memory 8 communicates with other devices which use memory 10 by way of multiple conductors coupled to control logic 20 .
- Control logic 20 is coupled to the other units within list memory 8 , including list pointer memory 12 , registers for lists 17 , and address selection unit 19 .
- List pointer memory 12 contains an entry corresponding to each location in memory 10 . Unlike memory 10 , list pointer memory 12 is used to store next addresses corresponding to each list.
- Address selection unit 19 includes a current address register 26 , a multiplexer 24 , and an initial counter 22 .
- the address selection unit 19 provides the value stored in current address register 26 to memory 10 and to list pointer memory 12 .
- Memory 10 is used to store data associated with each list. Memory 10 receives data in through a bus which is coupled to a communication bus 2 within data processing system 1 . Memory 10 provides data out via another bus, similarly coupled to communication bus 2 . Alternate embodiments may employ a single bus for data communication into and out of memory 10 .
- List memory 8 provides the addresses to be used in data transactions with memory 10 .
- Control logic 20 controls address generation and list maintenance within list memory 8 .
- Control logic 20 provides control information to registers 17 by way of a bidirectional bus.
- Control logic 20 receives various signals from external to list memory 8 , including a clock signal, a chip select signal, an add/remove signal, and a select list signal, and provides an error signal. These signals into control logic 20 are provided by processor 6 .
- Control logic 20 provides a control signal to multiplexer (MUX) 15 .
- MUX 15 multiplexer
- One input of MUX 15 is coupled to the current address register 26 and a second input is coupled to registers 17 .
- the output of MUX 15 is coupled to list pointer memory 12 .
- MUX 15 In response to control from processor 6 , MUX 15 provides address information to list pointer memory 12 from either current address register 26 or one of the list registers in registers 17 .
- Control logic 20 also provides control signal to MUX 13 .
- One input of MUX 13 is coupled to the current address register 26 and a second input is coupled to registers 17 .
- the output of MUX 13 is coupled to list pointer memory 12 .
- MUX 13 provides pointer information to list pointer memory 12 from either current address register 26 or one of the list registers in registers 17 . Note that a single control signal from control logic 20 controls both MUX 13 and MUX 15 , however, the polarity of MUX 15 is opposite to that of MUX 13 .
- MUX 15 selects the current address register 26 to input into list pointer memory 12
- MUX 13 selects registers 17 for input to list pointer memory 12 .
- Data from list pointer memory 12 is provided by way of multiple conductors directly to register 17 .
- Address selection unit 19 includes current address register 26 , multiplexer 24 and initial counter 22 .
- Initial counter 22 provides its count value as an input to MUX 24 and also provides a control signal to control logic 20 to indicate when initial counter 22 is expired. Counter 22 may count up or count down, where expiration means that counter 22 has incremented or decremented through the entire count of the counter 22 .
- the output of MUX 24 is provided as the input to current address register 26 by way of multiple conductors.
- Mux 24 also has an input which is coupled to register 17 by way of multiple conductors. In this way, MUX 24 is used to select the current address from either initial counter 22 or one of registers 17 .
- FIGS. 2 and 3 illustrate the operation of memory system 5 of FIG. 1.
- decision diamond 30 it is determined if the power supply to the memory system 5 is stable. This is indicated by decision diamond 30 . If the supply voltage is stabilized and processing is ready to continue, process flow proceeds to decision diamond 34 . If the power is not yet stable, processing continues to block 32 to reset the initial counter and then to block 33 to load the memory size into free list counter. Processing flow then returns to decision diamond 30 to wait until power has stabilized.
- a selected list is determined from a select list signal provided to control logic 20 by processor 6 . Concurrently, all of the input signals to control logic 20 are sampled. The add/remove signal indicates a request to write or read to memory 10 , respectively. The logical level of the signal indicates the direction of the data transaction with memory 10 . At this point it is then determined if the next operation is to add or remove data. If an add is indicated, processing flow continues to decision diamond 35 to determine if the free list counter is equal to zero. The free list counter is the counter associated with the free list within registers 17 . If the free list counter is equal to zero, an error is detected and control logic 20 provides an error signal as an output at block 36 . The error is generated as the zero in the free list counter indicates that there are no available memory locations in memory 10 , and therefore, no locations available for the add, i.e. write.
- processing flow returns to decision diamond 34 . If the free list counter does not equal zero, processing flow continues to decision diamond 37 to determine if the initial counter 22 has expired. If the initial counter 22 has not expired, processing flow continues to block 38 to load the value of the initial counter 22 into the current address register 26 . Processing flow then proceeds to block 41 where the initial counter 22 is incremented. Processing flow then continues to block 42 , where the free list counter is decremented.
- processing flow continues to block 39 .
- the value in the head portion of the register corresponding to the free list is copied into the current address register 26 . Since the initial counter 22 has expired, all addresses have been assigned at least once, and therefore an available memory location is determined from the free list.
- the head of the free list indicates the first available memory location in memory 10 . This value is therefore placed into the current address register 26 to allow the pending add operation.
- Processing flow then continues to block 40 where the pointer from the list pointer memory 12 is copied into free list head.
- the head of the free list is changed, as the previous head value is now going to be used to perform the add operation.
- the next available memory location in the free list is the address in list pointer memory 12 at the location of the current address register, and therefore becomes the head of the free list.
- Processing flow then continues to block 42 , where the free list counter is decremented.
- processing flow continues to decision diamond 43 to determine if the counter of the selected list is equal to zero. A zero counter indicates that the selected list has no entries. If the counter of the selected list is equal to zero, processing flow proceeds to block 45 , and the current address is copied from the current address register 26 into the head portion of the register corresponding to the selected list. The current address is only copied into the head of the selected list when there are no entries in the list. Once an entry is made into a list, the head is unchanged on adds to the list. The head is always altered on remove operations. If the counter of the selected list does not equal zero, then the list has at least one entry and processing flow continues to block 44 .
- the current address is copied from the current address register 26 into the list pointer memory 12 at the location specified by the tail portion of the register corresponding to the selected list.
- the selected list tail indicates the last entry in the list.
- processing flow continues to block 46 , where the current address is copied from the current address register 26 into the selected list tail of the selected list.
- the selected list tail is updated on each add operation, and is unchanged on a remove, as only adds increase the size of the selected list.
- Processing flow then continues to block 47 where the selected list counter is incremented. Note that for an add operation, where the initial counter has not expired, the initial counter is used to select addresses for list allocations. Once the initial counter has expired, address selection is performed using the free list. In this way the initial counter is used to ensure that all address locations within memory 10 are each allocated once. After each address has been allocated once, the free list is used to keep track of addresses which have been removed.
- processing flow continues to decision diamond 48 .
- decision diamond 48 if the selected list counter is equal to zero, processing flow continues to block 57 where an error is detected and the error signal is provided by control logic 20 . The error is generated as the selected list is empty, i.e. counter equals zero, and the request is to remove data from an empty list. Processing flow then returns to decision diamond 34 . If the selected list counter is not equal to zero, processing flow continues to block 49 , where the head of the selected list is copied into the current address register 26 . In this way, the address indicated by the head will be the first location from which data is removed.
- the head is altered to reflect the removal of data from the list.
- the value of the pointer in the list pointer memory 12 is the next address which contains valid data for the selected list. Processing flow proceeds to block 51 where the counter of the selected list is decremented.
- Processing flow then continues to decision diamond 52 to determine if the free list is empty. If the free list is empty then the current address is copied from the current address register 26 into the head of the free list at block 53 and processing flow continues to block 55 . If the free list is not empty the current address is copied into the list pointer memory at a location specified by the tail of the free list at block 54 . Processing flow again continues to block 55 . At block 55 the current address is copied from the current address register 26 into the tail of the free list and processing flow continues to block 56 . At block 56 the counter of the free list is incremented and processing flow then returns to decision diamond 34 .
- the present invention allows a method of providing, within a single integrated circuit, a standard memory core, where the memory core has registers and control logic which function as a linked list controller.
- data is stored in memory 10
- linked list pointers are stored in list pointer memory 12 .
- List pointer memory 12 has an equivalent memory space as memory 10 , where each address in list pointer memory 12 corresponds to the same address space in memory 10 .
- Memory 10 may be a burst memory, where list pointer memory 12 is a subset of locations in memory 10 , and represents the base address to memory 10 . The difference is that list pointer memory 12 stores information about the next address of data located within a list. Memory 10 stores the data associated with that address. Also within list memory 8 are multiple registers 17 .
- Each register 14 , through 16 , and 18 within registers 17 is made up of three portions. Each portion may be a single register or each of the registers may include bit fields which designate each region. For example, within register 14 are included a count portion, a head portion and a tail portion. Register 14 corresponds to a linked list within memory system 5 . Register 14 includes a count portion which corresponds to the number of entries in that list. The number of entries indicates the number of addresses that have valid data for this list. Register 14 also includes a head portion which indicates the starting address of the list. The starting address of the linked list is the same in the list pointer memory 12 as in memory 10 .
- Registers 17 also includes a register corresponding to a free list.
- the free list is used to track those addresses which are not being used in memory 10 . Entries in the free list are available for an add operation. Entries are placed in the free list when data is removed from those addresses in memory 10 , and entries are removed from the free list as data is added into memory 10 .
- list memory 8 is a standard memory core having address decoding logic, data registers, read/write control logic, and multiple of bit cells.
- Control logic 20 includes circuits needed to interpret external signals and execute the appropriate functions. The functioning of control logic 20 is based on chip inputs, including the clock, chip select, add/remove, and list select as defined by FIGS. 2 and 3.
- the list registers 17 contain three registers for each list.
- List registers 17 also includes the free list.
- the free list is a linked list of all available memory locations in linked list memory, and therefore in memory 10 .
- Each memory location within memory 10 and within memory list pointer memory 12 can only be contained in one linked list. This includes the free list, which is an indication that it is not in any of the other lists.
- the head stores the address of the next location to be accessed for a given list. On receiving a request to remove an entry from memory 10 , i.e. a read from memory 10 , the value in the head for the selected list indicates what is the next address from which data is to be removed from memory 10 .
- the tail stores the address where the last written data resides for a selected list.
- each list has a series of associated addresses which are to be addressed sequentially.
- the head contains the starting address in that series while the tail contains the ending address.
- Each list also has a counter which is used to keep track of how many entries are in each list and to determine if the list is empty. An error is generated when a request is received to remove data from an empty list.
- the free list also has a counter which indicates the number of memory locations which are not being used. When the free list counter is equal to zero all memory locations within memory 10 are in use and no more information can be stored without losing some data.
- the flow chart illustrates the operation of one embodiment of the present invention.
- This flow chart is implemented by the control logic of list memory 8 .
- the clock signal initiates a sampling of the input signals to control logic 20 . Actions are then taken based on these signals.
- a select list signal indicates the list upon which the next operation is to be performed.
- the select list signal is decoded and the corresponding list registers are accessed.
- the list registers associated with the selected list include the count, the head and the tail. Note that these may all be contained within one register, or may be three distinct individual registers. Additional information may also be provided in other registers associated with each list.
- the add/remove signal is provided to control logic 20 , which then decodes the signal to determine the next operation of list memory 8 .
- a write to memory 10 will require provision of an address in which to store the data. This corresponds to an add function.
- a read from memory 10 will require provision of an address from which to recover the data. This corresponds to a remove function.
- the counter associated with the free list is checked to determine if it is equal to zero. This is necessary as discussed above when the free list counter is equal to zero, no more data may be stored in memory 10 , without the loss of data, as all memory locations are being utilized. (Note that alternate embodiments may choose to keep the new data and remove the oldest piece of data, or any other piece of data.) If the memory is not full, the free list counter is not equal to zero, therefore new data may be written to memory 10 . Note that if memory 10 is full, and the free list counter is equal to zero, control logic 20 will output an error signal. In operation, on power-up the free list counter is set to maximum value, i.e. the size of the memory indicating all locations are available.
- FIGS. 1 and 2 On power-up the embodiment illustrated in FIGS. 1 and 2 provides a means of ensuring that every location within memory 10 is utilized at least once.
- current address register 26 is provided with an address from initial counter 22 .
- Initial counter 22 is reset to zero and incremented on every add operation requested. Alternate embodiments may use any other scheme for incrementing or decrementing counter 22 .
- the initial counter 22 allows lists to be built deterministically and avoids the unknown state of memory on power-up. The use of initial counter 22 ensures that all addresses are assigned into one of the lists.
- the current address register receives the initial value stored in initial counter 22 . Addresses then are sequentially assigned through all addresses to ensure that the complete range of address is assigned into at least one of the lists. This allows maximization of memory 10 . Note that addresses are only as signed on add operations. Similarly initial counter 22 is only incremented on add operations.
- the current address register is copied with the value stored in the head of the free list and the free list head is loaded with the contents of the linked list memory at the current address.
- the address which is indicated in the head of the free list becomes the first address, i.e. head, of the list upon which an operation is to be performed.
- the pointer is then copied from list pointer memory into the head of the free list. This allows the free list to be updated as the address that was in the pointer is now being used for data stored in memory 10 . In this way the head of the free list is copied with the contents of the linked list.
- the free list counter is decremented and the current number of available locations is continually updated. In this way the current address refers to the address which is the object of the operation currently being performed within memory system 5 .
- Adding an entry to a list is done to first determine if the list is empty prior to performing the add. This is done by checking the counter associated with the list and determining if the counter does not equal zero. Referring to the discussion above, when the list counter equals zero this indicates that the list is empty. In this case the head of the selected list will be assigned the same value as the current address register of this cycle.
- the list is not empty, i.e. the list counter does not equal zero
- the current address is added to the list by writing to list pointer memory 12 at the location specified in the specified list tail. The current address is written into this location.
- the list is updated by changing the contents of the list tail to the value in the current address register and incrementing the list counter.
- FIG. 4 illustrates one example of the operation of memory system 5 of FIG. 1.
- list pointer memory 12 and memory 10 each contain 16 memory locations, illustrated as memory locations M 1 through M 16 .
- the table provided illustrates the registers associated with a first list, labeled LIST 1 , a second list, labeled LIST 2 , and the free list, labeled FREE LIST.
- memory 10 contains data associated with each list, while list pointer memory 12 includes information about the next memory location within each list.
- LIST 1 has a head value of M 1 . This indicates that within memory 10 , memory location M 1 contains the first data entry in LIST 1 . Similarly, within list pointer memory 12 , memory location M 1 contains the address of the next data entry of LIST 1 , which in this example is the address of memory location M 6 . Continuing with memory 10 , the first data entry of LIST 1 is in memory location M 1 , and is labeled 20 as L 1 D 1 . The second data entry of LIST 1 is in memory location M 6 , and is labeled L 1 D 2 . Returning to list pointer memory 12 , memory location M 6 contains the address of the next data entry of LIST 1 , which in this example is M 5 .
- memory location M 5 contains data L 1 D 3 .
- the list is then located throughout memory 10 and may be found by starting at the head value of M 1 and continuing to the tail value of M 10 .
- Memory location M 10 contains the last data entry in LIST 1 .
- the counter having a value of 5 indicates that there will be five data entries located within memory 10 associated with LIST 1 . In this way, memory 10 stores all of the data necessary for LIST 1 , but does not necessarily store them in consecutive memory cells.
- LIST 1 The data associated with LIST 1 is found by following the list pointers indicated in list pointer memory 12 , starting with the value in the head of LIST 1 .
- the list pointers point to the path from the head to the tail of each list.
- LIST 2 has six memory cells containing data within memory 10 .
- the head, or start, of data for LIST 1 is at memory location M 2 , which contains data L 2 D 1 .
- the tail for LIST 2 is at memory location M 14 , which contains data L 2 D 6 .
- the FREE LIST in this example contains five entries in memory 10 which are available for data storage as they are not in use.
- the head of the FREE LIST is located at memory location M 13 and the tail is at memory location M 12 .
- the free list proceeds from memory location M 13 to memory location M 15 , which is indicated by looking at the list pointer memory 12 , starting at memory location M 13 .
- memory location M 13 in memory 10 does not contain valid data, as this memory location is on the FREE LIST and is not in use. There will probably be data stored in memory location M 13 , but this data is not valid for this cycle.
- the next memory location within the FREE LIST is located at memory location M 15 and, referring to list pointer memory 12 , memory location M 15 directs us to the next memory address which is memory location M 11 in the FREE LIST.
- the FREE LIST also includes memory location M 16 and has a tail at memory location M 12 .
- the FREE LIST currently has a head indicated by memory location M 13 . If the next operation requested is an add operation, it will be necessary to use one of the memory locations that is on the FREE LIST, since the initial counter has expired in this example. In this case it will be the memory location indicated by the head, i.e. memory location M 13 . Once memory location M 13 is assigned to one of the other lists, it must be removed from the free list and therefore the head of the free list will change from memory location M 13 to memory location M 15 , which is the next free location within memory 10 , as indicated by list pointer memory 12 .
- the present invention provides a way to maximize the use of the entire memory 10 .
- the free list will then begin to track available addresses within memory 10 .
- Memory locations are added to the free list on remove operations and are removed from the free list on add operations.
- the list memory 8 is implemented in hardware, where the list pointer memory 12 includes a plurality of memory locations corresponding to the memory locations in memory 10 .
- registers 17 comprises physical registers 14 , through 16 and 18 .
- control logic 20 is resident within memory system 5 but external to list memory 8 .
- Control logic 20 may be configured within list memory 8 , or may be an ASIC external to list memory 8 .
- the initial counter 22 is implemented as a binary counter, but may be implemented using any means for selecting every address within memory 10 once and only once. Note that once every address within memory 10 has been assigned to a list, the initial counter 22 is no longer used. After this initial period all of the addresses provided to current address register 26 are provided from register 17 . Note that during the initialization period, i.e. before all addresses within memory 10 have been assigned to a list, the free list is not used. At initialization the free list counter is initialized to the maximum memory size. This is to indicate that all memory locations are available.
- a method of implementing a linked list in a memory system includes initiating address assignment, and enabling a counter to count each request for a write to data memory, the counter having a counter value.
- a data memory address is assigned to each memory location of the list pointer, wherein the data memory address is provided by the counter value. After all memory locations have been assigned at least once by the counter value, the counter is disabled.
- a method of implementing a linked list in a memory system involves initiating selection of addresses in the data memory, enabling a counter, wherein the counter has a counter value and wherein the counter is incremented on each request to write data to the data memory.
- the method continues by selecting a first address corresponding to a first memory location of the data memory, wherein the first address is indicated by the counter value, and providing the first address to a first linked list.
- the first linked list includes a first tail register, and the first address is stored in the first tail register.
- the first address is then provided to a list pointer memory, wherein the first address is stored at a memory location of the list pointer memory corresponding to the first tail register. after all memory locations of the data memory have been selected exactly once by the counter value, the counter is disabled.
- an integrated circuit includes a list pointer memory, a plurality of linked lists coupled to the list pointer memory, and an address selection unit adapted to provide addresses to the list pointer memory and to the plurality of linked lists, the address selection unit comprising a counter, wherein the counter has a counter value which indicates a selected address, and the counter indicates each and every address only once.
- the integrated circuit also includes a data memory coupled to the address selection unit, a control unit coupled to the plurality of lists, and a processor coupled to the control unit.
- the processor is adapted to provide an add/remove signal to the control unit.
- the processor is adapted to provide a select list signal to the control unit.
- the list pointer memory and the data memory have an equal number of memory locations.
- the control unit provides control information to the list pointer memory and to the address selection unit.
- the head may be located in a separate register.
- the tail may be located in a separate register, or the head and tail may be portions of a single register.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
Description
- The present invention relates to memory systems in general, and specifically to memory systems incorporating linked lists.
- Often within a data processing system multiple processors and devices will access a common memory space. In such a case, it is necessary to coordinate the use and allocation of addresses within the common memory space so that each device addresses unique locations and avoids interference. For example, in a telecommunication switching system, such as an asynchronous transfer mode application (ATM), where multiple data ports share a the common memory space. One method of coordinating addresses involves the use of a linked list. The linked list is a copy of the common memory space, having a pointer associated with each memory address. Each device in the system has a list containing data to be stored in the data memory. The pointers indicate where the contents of the list are located in data memory.
- The list pointers are compiled into a table, which may be maintained in software or in hardware. A list is typically designated as having a starting address, known as the “head” of the list, and an ending address, known as the “tail” of the list. The addresses between the head and tail are not necessarily sequential, and are typically spread throughout data memory. The list pointer then keeps track of all of the addresses that are contained within the list.
- When the lists are implemented in hardware, control logic is used to update the list pointer, and to interface with the memory. Often this control logic will be some type of an application specific integrated circuit (ASIC) device which is specially designed and separate from the memory integrated circuit. ASIC solutions do not typically optimize access speed, and are expensive.
- When designating addresses within a memory space it is desirable to use the entire memory space. Software implementations increase memory processing time, creating a problem in many faster memories. While it is desirable to implement these memory systems in hardware so as to increase the speed of memory access needed in fast memories, the linked list method may not always utilize all of the addresses within the memory.
- There is a need for a linked list memory which provides the speed of a hardware implementation, while ensuring that all addresses within the main memory have been used.
- FIG. 1 illustrates, in block diagram form, a
memory system 5 according to one embodiment of the present invention; - FIGS. 2 and 3 illustrate, in flow diagram form, the operation of
memory system 5 of FIG. 1; and - FIG. 4 illustrates an example of the operation of
memory system 5 of FIGS. 1-3. - The present invention provides a method of forming a linked list in memory using an address selection unit, or address generator. The address generator assigns addresses to each of multiple lists, where each list corresponds to a device which uses the memory. The address generator assigns each of the address locations in the memory only once, and after all addresses have been assigned once, a free list is used to track unused addresses, i.e. unused memory cells. The free list is not used until all addresses have been assigned once.
- According to one embodiment illustrated in FIG. 1, the address generator is implemented using a
counter 22, which is initialized on power-on of the memory system. Thecounter 22 is incremented each time an address is assigned. The value ofcounter 22 is used to assign the address for each write operation. The counter value is output into aregister 26, referred to as the “current address register.” Addresses are assigned on each request for a write to memory. The counter is not effected by requests to read from memory. The free list is not used until thecounter 22 has been used to assign all addresses in thememory 10. The free list also includes a counter which is initialized to a maximum value at power on of the memory system. The maximum value corresponds to the size of the memory, and indicates that all memory addresses are available for use. The free list counter is then incremented on each subsequent read operation, as after a read the address of the read is no longer in use. Note that on a read, if the list is empty the counter is not incremented as this address is already free. The free list counter indicates the number of available memory locations inmemory 10. Similar to the read, the free list counter is decremented on each write operation, as to add data tomemory 10 requires the use of a previously unused memory location. - FIG. 1 illustrates a
data processing system 1, having aprocessor 6, acommunication bus 2, and amemory system 5.Memory system 5 includes amemory 10 andlist memory 8.List memory 8 communicates with other devices which usememory 10 by way of multiple conductors coupled tocontrol logic 20.Control logic 20 is coupled to the other units withinlist memory 8, includinglist pointer memory 12, registers forlists 17, andaddress selection unit 19.List pointer memory 12 contains an entry corresponding to each location inmemory 10. Unlikememory 10,list pointer memory 12 is used to store next addresses corresponding to each list. -
Address selection unit 19 includes acurrent address register 26, amultiplexer 24, and aninitial counter 22. Theaddress selection unit 19 provides the value stored incurrent address register 26 tomemory 10 and to listpointer memory 12.Memory 10 is used to store data associated with each list.Memory 10 receives data in through a bus which is coupled to acommunication bus 2 withindata processing system 1.Memory 10 provides data out via another bus, similarly coupled tocommunication bus 2. Alternate embodiments may employ a single bus for data communication into and out ofmemory 10.List memory 8 provides the addresses to be used in data transactions withmemory 10. -
Control logic 20 controls address generation and list maintenance withinlist memory 8.Control logic 20 provides control information to registers 17 by way of a bidirectional bus.Control logic 20 receives various signals from external to listmemory 8, including a clock signal, a chip select signal, an add/remove signal, and a select list signal, and provides an error signal. These signals intocontrol logic 20 are provided byprocessor 6.Control logic 20 provides a control signal to multiplexer (MUX) 15. One input ofMUX 15 is coupled to thecurrent address register 26 and a second input is coupled to registers 17. The output ofMUX 15 is coupled tolist pointer memory 12. In response to control fromprocessor 6, MUX 15 provides address information tolist pointer memory 12 from eithercurrent address register 26 or one of the list registers inregisters 17.Control logic 20 also provides control signal to MUX 13. One input ofMUX 13 is coupled to thecurrent address register 26 and a second input is coupled to registers 17. The output ofMUX 13 is coupled to listpointer memory 12. In response to control fromprocessor 6,MUX 13 provides pointer information to listpointer memory 12 from eithercurrent address register 26 or one of the list registers in registers 17. Note that a single control signal fromcontrol logic 20 controls bothMUX 13 andMUX 15, however, the polarity ofMUX 15 is opposite to that ofMUX 13. For example, whenMUX 15 selects thecurrent address register 26 to input intolist pointer memory 12,MUX 13 selectsregisters 17 for input to listpointer memory 12. Data fromlist pointer memory 12 is provided by way of multiple conductors directly to register 17. -
Address selection unit 19 includescurrent address register 26,multiplexer 24 andinitial counter 22.Initial counter 22 provides its count value as an input to MUX 24 and also provides a control signal to controllogic 20 to indicate wheninitial counter 22 is expired.Counter 22 may count up or count down, where expiration means thatcounter 22 has incremented or decremented through the entire count of thecounter 22. The output ofMUX 24 is provided as the input tocurrent address register 26 by way of multiple conductors.Mux 24 also has an input which is coupled to register 17 by way of multiple conductors. In this way,MUX 24 is used to select the current address from eitherinitial counter 22 or one of registers 17. - FIGS. 2 and 3 illustrate the operation of
memory system 5 of FIG. 1. At the start of processing, it is determined if the power supply to thememory system 5 is stable. This is indicated bydecision diamond 30. If the supply voltage is stabilized and processing is ready to continue, process flow proceeds todecision diamond 34. If the power is not yet stable, processing continues to block 32 to reset the initial counter and then to block 33 to load the memory size into free list counter. Processing flow then returns todecision diamond 30 to wait until power has stabilized. - At decision diamond34 a selected list is determined from a select list signal provided to control
logic 20 byprocessor 6. Concurrently, all of the input signals to controllogic 20 are sampled. The add/remove signal indicates a request to write or read tomemory 10, respectively. The logical level of the signal indicates the direction of the data transaction withmemory 10. At this point it is then determined if the next operation is to add or remove data. If an add is indicated, processing flow continues todecision diamond 35 to determine if the free list counter is equal to zero. The free list counter is the counter associated with the free list within registers 17. If the free list counter is equal to zero, an error is detected and controllogic 20 provides an error signal as an output atblock 36. The error is generated as the zero in the free list counter indicates that there are no available memory locations inmemory 10, and therefore, no locations available for the add, i.e. write. - From
diamond 36, processing flow returns todecision diamond 34. If the free list counter does not equal zero, processing flow continues todecision diamond 37 to determine if theinitial counter 22 has expired. If theinitial counter 22 has not expired, processing flow continues to block 38 to load the value of theinitial counter 22 into thecurrent address register 26. Processing flow then proceeds to block 41 where theinitial counter 22 is incremented. Processing flow then continues to block 42, where the free list counter is decremented. - Returning to
decision diamond 37, if theinitial counter 22 has expired, processing flow continues to block 39. Here the value in the head portion of the register corresponding to the free list is copied into thecurrent address register 26. Since theinitial counter 22 has expired, all addresses have been assigned at least once, and therefore an available memory location is determined from the free list. The head of the free list indicates the first available memory location inmemory 10. This value is therefore placed into thecurrent address register 26 to allow the pending add operation. Processing flow then continues to block 40 where the pointer from thelist pointer memory 12 is copied into free list head. The head of the free list is changed, as the previous head value is now going to be used to perform the add operation. The next available memory location in the free list is the address inlist pointer memory 12 at the location of the current address register, and therefore becomes the head of the free list. Processing flow then continues to block 42, where the free list counter is decremented. - From
block 42, processing flow continues todecision diamond 43 to determine if the counter of the selected list is equal to zero. A zero counter indicates that the selected list has no entries. If the counter of the selected list is equal to zero, processing flow proceeds to block 45, and the current address is copied from thecurrent address register 26 into the head portion of the register corresponding to the selected list. The current address is only copied into the head of the selected list when there are no entries in the list. Once an entry is made into a list, the head is unchanged on adds to the list. The head is always altered on remove operations. If the counter of the selected list does not equal zero, then the list has at least one entry and processing flow continues to block 44. Atblock 44 the current address is copied from thecurrent address register 26 into thelist pointer memory 12 at the location specified by the tail portion of the register corresponding to the selected list. The selected list tail indicates the last entry in the list. Fromblock 44 and fromblock 45 processing flow continues to block 46, where the current address is copied from thecurrent address register 26 into the selected list tail of the selected list. The selected list tail is updated on each add operation, and is unchanged on a remove, as only adds increase the size of the selected list. Processing flow then continues to block 47 where the selected list counter is incremented. Note that for an add operation, where the initial counter has not expired, the initial counter is used to select addresses for list allocations. Once the initial counter has expired, address selection is performed using the free list. In this way the initial counter is used to ensure that all address locations withinmemory 10 are each allocated once. After each address has been allocated once, the free list is used to keep track of addresses which have been removed. - Returning again to
decision diamond 34, if the next operation indicated is to remove data frommemory 10, processing flow continues todecision diamond 48. Atdecision diamond 48 if the selected list counter is equal to zero, processing flow continues to block 57 where an error is detected and the error signal is provided bycontrol logic 20. The error is generated as the selected list is empty, i.e. counter equals zero, and the request is to remove data from an empty list. Processing flow then returns todecision diamond 34. If the selected list counter is not equal to zero, processing flow continues to block 49, where the head of the selected list is copied into thecurrent address register 26. In this way, the address indicated by the head will be the first location from which data is removed. Processing flow continues to block 50 where the pointer is copied from thelist pointer memory 12 into the head of the selected list. The head is altered to reflect the removal of data from the list. The value of the pointer in thelist pointer memory 12 is the next address which contains valid data for the selected list. Processing flow proceeds to block 51 where the counter of the selected list is decremented. - Processing flow then continues to
decision diamond 52 to determine if the free list is empty. If the free list is empty then the current address is copied from thecurrent address register 26 into the head of the free list atblock 53 and processing flow continues to block 55. If the free list is not empty the current address is copied into the list pointer memory at a location specified by the tail of the free list atblock 54. Processing flow again continues to block 55. Atblock 55 the current address is copied from thecurrent address register 26 into the tail of the free list and processing flow continues to block 56. Atblock 56 the counter of the free list is incremented and processing flow then returns todecision diamond 34. - According to one embodiment the present invention allows a method of providing, within a single integrated circuit, a standard memory core, where the memory core has registers and control logic which function as a linked list controller. Referring to FIG. 1, data is stored in
memory 10, and linked list pointers are stored inlist pointer memory 12.List pointer memory 12 has an equivalent memory space asmemory 10, where each address inlist pointer memory 12 corresponds to the same address space inmemory 10.Memory 10 may be a burst memory, wherelist pointer memory 12 is a subset of locations inmemory 10, and represents the base address tomemory 10. The difference is thatlist pointer memory 12 stores information about the next address of data located within a list.Memory 10 stores the data associated with that address. Also withinlist memory 8 aremultiple registers 17. - Each
register 14, through 16, and 18 withinregisters 17 is made up of three portions. Each portion may be a single register or each of the registers may include bit fields which designate each region. For example, withinregister 14 are included a count portion, a head portion and a tail portion.Register 14 corresponds to a linked list withinmemory system 5.Register 14 includes a count portion which corresponds to the number of entries in that list. The number of entries indicates the number of addresses that have valid data for this list.Register 14 also includes a head portion which indicates the starting address of the list. The starting address of the linked list is the same in thelist pointer memory 12 as inmemory 10. At the address designated in the head portion ofregister 14, main memory will contain data whilelist pointer memory 12 will contain the next address in the list.Registers 17 also includes a register corresponding to a free list. The free list is used to track those addresses which are not being used inmemory 10. Entries in the free list are available for an add operation. Entries are placed in the free list when data is removed from those addresses inmemory 10, and entries are removed from the free list as data is added intomemory 10. - Referring again to FIG. 1,
list memory 8 is a standard memory core having address decoding logic, data registers, read/write control logic, and multiple of bit cells.Control logic 20 includes circuits needed to interpret external signals and execute the appropriate functions. The functioning ofcontrol logic 20 is based on chip inputs, including the clock, chip select, add/remove, and list select as defined by FIGS. 2 and 3. - The list registers17 contain three registers for each list. List registers 17 also includes the free list. The free list is a linked list of all available memory locations in linked list memory, and therefore in
memory 10. Each memory location withinmemory 10 and within memorylist pointer memory 12 can only be contained in one linked list. This includes the free list, which is an indication that it is not in any of the other lists. Note that in each of the list registers 17 the head stores the address of the next location to be accessed for a given list. On receiving a request to remove an entry frommemory 10, i.e. a read frommemory 10, the value in the head for the selected list indicates what is the next address from which data is to be removed frommemory 10. The tail stores the address where the last written data resides for a selected list. In effect each list has a series of associated addresses which are to be addressed sequentially. In order to form a sequential data series, the head contains the starting address in that series while the tail contains the ending address. Each list also has a counter which is used to keep track of how many entries are in each list and to determine if the list is empty. An error is generated when a request is received to remove data from an empty list. The free list also has a counter which indicates the number of memory locations which are not being used. When the free list counter is equal to zero all memory locations withinmemory 10 are in use and no more information can be stored without losing some data. - Referring again to FIG. 2, the flow chart illustrates the operation of one embodiment of the present invention. This flow chart is implemented by the control logic of
list memory 8. Here the clock signal initiates a sampling of the input signals to controllogic 20. Actions are then taken based on these signals. A select list signal indicates the list upon which the next operation is to be performed. The select list signal is decoded and the corresponding list registers are accessed. The list registers associated with the selected list include the count, the head and the tail. Note that these may all be contained within one register, or may be three distinct individual registers. Additional information may also be provided in other registers associated with each list. The add/remove signal is provided to controllogic 20, which then decodes the signal to determine the next operation oflist memory 8. A write tomemory 10 will require provision of an address in which to store the data. This corresponds to an add function. A read frommemory 10 will require provision of an address from which to recover the data. This corresponds to a remove function. - When an add request is received, and the list is selected, the counter associated with the free list is checked to determine if it is equal to zero. This is necessary as discussed above when the free list counter is equal to zero, no more data may be stored in
memory 10, without the loss of data, as all memory locations are being utilized. (Note that alternate embodiments may choose to keep the new data and remove the oldest piece of data, or any other piece of data.) If the memory is not full, the free list counter is not equal to zero, therefore new data may be written tomemory 10. Note that ifmemory 10 is full, and the free list counter is equal to zero,control logic 20 will output an error signal. In operation, on power-up the free list counter is set to maximum value, i.e. the size of the memory indicating all locations are available. - On power-up the embodiment illustrated in FIGS. 1 and 2 provides a means of ensuring that every location within
memory 10 is utilized at least once. During the initialization periodcurrent address register 26 is provided with an address frominitial counter 22.Initial counter 22 is reset to zero and incremented on every add operation requested. Alternate embodiments may use any other scheme for incrementing or decrementingcounter 22. Theinitial counter 22 allows lists to be built deterministically and avoids the unknown state of memory on power-up. The use ofinitial counter 22 ensures that all addresses are assigned into one of the lists. During an initial add request the current address register receives the initial value stored ininitial counter 22. Addresses then are sequentially assigned through all addresses to ensure that the complete range of address is assigned into at least one of the lists. This allows maximization ofmemory 10. Note that addresses are only as signed on add operations. Similarlyinitial counter 22 is only incremented on add operations. - When a remove occurs from one of the lists, the removed location is added to the free list. In this way a free list is built which provides all available memory locations within
memory 10. The free list is used to get the next available unused memory location during an add cycle after the initial counter has expired. The initial counter is only used until each address withinmemory 10 has been assigned once. After this as adds and removes are performed inmemory 10, the corresponding addresses are added to the free list or removed from the free list. - When adding from the free list the current address register is copied with the value stored in the head of the free list and the free list head is loaded with the contents of the linked list memory at the current address. In this way the address which is indicated in the head of the free list becomes the first address, i.e. head, of the list upon which an operation is to be performed. The pointer is then copied from list pointer memory into the head of the free list. This allows the free list to be updated as the address that was in the pointer is now being used for data stored in
memory 10. In this way the head of the free list is copied with the contents of the linked list. Note that for an add which uses an address in the free list, the free list counter is decremented and the current number of available locations is continually updated. In this way the current address refers to the address which is the object of the operation currently being performed withinmemory system 5. - Adding an entry to a list is done to first determine if the list is empty prior to performing the add. This is done by checking the counter associated with the list and determining if the counter does not equal zero. Referring to the discussion above, when the list counter equals zero this indicates that the list is empty. In this case the head of the selected list will be assigned the same value as the current address register of this cycle. When the list is not empty, i.e. the list counter does not equal zero, the current address is added to the list by writing to list
pointer memory 12 at the location specified in the specified list tail. The current address is written into this location. The list is updated by changing the contents of the list tail to the value in the current address register and incrementing the list counter. - For a remove, first check the selected list counter to ensure that data exists in the list that is to be accessed. When the list counter is equal to zero, indicating an empty list, an error flag is output by
control logic 20. - When the list counter is not equal to zero the value in the selected head is provided to the current address register.
- FIG. 4 illustrates one example of the operation of
memory system 5 of FIG. 1. Herelist pointer memory 12 andmemory 10 each contain 16 memory locations, illustrated as memory locations M1 through M16. The table provided illustrates the registers associated with a first list, labeledLIST 1, a second list, labeledLIST 2, and the free list, labeled FREE LIST. - As discussed herein above,
memory 10 contains data associated with each list, whilelist pointer memory 12 includes information about the next memory location within each list. - For example,
LIST 1 has a head value of M1. This indicates that withinmemory 10, memory location M1 contains the first data entry inLIST 1. Similarly, withinlist pointer memory 12, memory location M1 contains the address of the next data entry ofLIST 1, which in this example is the address of memory location M6. Continuing withmemory 10, the first data entry ofLIST 1 is in memory location M1, and is labeled 20 as L1D1. The second data entry ofLIST 1 is in memory location M6, and is labeled L1D2. Returning to listpointer memory 12, memory location M6 contains the address of the next data entry ofLIST 1, which in this example is M5. Returning again tomemory 10, memory location M5 contains data L1D3. The list is then located throughoutmemory 10 and may be found by starting at the head value of M1 and continuing to the tail value of M10. Memory location M10 contains the last data entry inLIST 1. The counter having a value of 5 indicates that there will be five data entries located withinmemory 10 associated withLIST 1. In this way,memory 10 stores all of the data necessary forLIST 1, but does not necessarily store them in consecutive memory cells. - The data associated with
LIST 1 is found by following the list pointers indicated inlist pointer memory 12, starting with the value in the head ofLIST 1. The list pointers point to the path from the head to the tail of each list. Similarly,LIST 2 has six memory cells containing data withinmemory 10. The head, or start, of data forLIST 1 is at memory location M2, which contains data L2D1. The tail forLIST 2 is at memory location M14, which contains data L2D6. The FREE LIST in this example contains five entries inmemory 10 which are available for data storage as they are not in use. The head of the FREE LIST is located at memory location M13 and the tail is at memory location M12. In this particular example, the free list proceeds from memory location M13 to memory location M15, which is indicated by looking at thelist pointer memory 12, starting at memory location M13. Note that memory location M13 inmemory 10 does not contain valid data, as this memory location is on the FREE LIST and is not in use. There will probably be data stored in memory location M13, but this data is not valid for this cycle. The next memory location within the FREE LIST is located at memory location M15 and, referring to listpointer memory 12, memory location M15 directs us to the next memory address which is memory location M11 in the FREE LIST. Continuing, the FREE LIST also includes memory location M16 and has a tail at memory location M12. - As illustrated in the example of FIG. 4, the FREE LIST currently has a head indicated by memory location M13. If the next operation requested is an add operation, it will be necessary to use one of the memory locations that is on the FREE LIST, since the initial counter has expired in this example. In this case it will be the memory location indicated by the head, i.e. memory location M13. Once memory location M13 is assigned to one of the other lists, it must be removed from the free list and therefore the head of the free list will change from memory location M13 to memory location M15, which is the next free location within
memory 10, as indicated bylist pointer memory 12. - By using the initial counter to ensure that all memory locations within
memory 10 have been utilized, the present invention provides a way to maximize the use of theentire memory 10. Here, once each address has been assigned to a list, the free list will then begin to track available addresses withinmemory 10. Memory locations are added to the free list on remove operations and are removed from the free list on add operations. According to one embodiment of the present invention, thelist memory 8 is implemented in hardware, where thelist pointer memory 12 includes a plurality of memory locations corresponding to the memory locations inmemory 10. According to this embodiment, registers 17 comprisesphysical registers 14, through 16 and 18. According to an alternate embodiment of the presentinvention control logic 20 is resident withinmemory system 5 but external to listmemory 8.Control logic 20 may be configured withinlist memory 8, or may be an ASIC external to listmemory 8. - According to one embodiment of the present invention, the
initial counter 22 is implemented as a binary counter, but may be implemented using any means for selecting every address withinmemory 10 once and only once. Note that once every address withinmemory 10 has been assigned to a list, theinitial counter 22 is no longer used. After this initial period all of the addresses provided tocurrent address register 26 are provided fromregister 17. Note that during the initialization period, i.e. before all addresses withinmemory 10 have been assigned to a list, the free list is not used. At initialization the free list counter is initialized to the maximum memory size. This is to indicate that all memory locations are available. - According to one aspect of the present invention, a method of implementing a linked list in a memory system includes initiating address assignment, and enabling a counter to count each request for a write to data memory, the counter having a counter value. A data memory address is assigned to each memory location of the list pointer, wherein the data memory address is provided by the counter value. After all memory locations have been assigned at least once by the counter value, the counter is disabled.
- According to another aspect of the present invention, a method of implementing a linked list in a memory system involves initiating selection of addresses in the data memory, enabling a counter, wherein the counter has a counter value and wherein the counter is incremented on each request to write data to the data memory. The method continues by selecting a first address corresponding to a first memory location of the data memory, wherein the first address is indicated by the counter value, and providing the first address to a first linked list. Here the first linked list includes a first tail register, and the first address is stored in the first tail register. The first address is then provided to a list pointer memory, wherein the first address is stored at a memory location of the list pointer memory corresponding to the first tail register. after all memory locations of the data memory have been selected exactly once by the counter value, the counter is disabled.
- According to another aspect of the present invention, an integrated circuit includes a list pointer memory, a plurality of linked lists coupled to the list pointer memory, and an address selection unit adapted to provide addresses to the list pointer memory and to the plurality of linked lists, the address selection unit comprising a counter, wherein the counter has a counter value which indicates a selected address, and the counter indicates each and every address only once. In one embodiment, the integrated circuit also includes a data memory coupled to the address selection unit, a control unit coupled to the plurality of lists, and a processor coupled to the control unit. The processor is adapted to provide an add/remove signal to the control unit. The processor is adapted to provide a select list signal to the control unit. The list pointer memory and the data memory have an equal number of memory locations. The control unit provides control information to the list pointer memory and to the address selection unit.
- Those skilled in the art will recognize that modifications and variations can be made without departing from the spirit of the invention. For example, in one embodiment of the present invention, the head may be located in a separate register. Similarly, the tail may be located in a separate register, or the head and tail may be portions of a single register.
- It is intended that this invention encompass all variations and modifications as fall within the scope of the appended claims.
Claims (20)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/138,909 US6430666B1 (en) | 1998-08-24 | 1998-08-24 | Linked list memory and method therefor |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/138,909 US6430666B1 (en) | 1998-08-24 | 1998-08-24 | Linked list memory and method therefor |
Publications (2)
Publication Number | Publication Date |
---|---|
US20020029327A1 true US20020029327A1 (en) | 2002-03-07 |
US6430666B1 US6430666B1 (en) | 2002-08-06 |
Family
ID=22484218
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US09/138,909 Expired - Lifetime US6430666B1 (en) | 1998-08-24 | 1998-08-24 | Linked list memory and method therefor |
Country Status (1)
Country | Link |
---|---|
US (1) | US6430666B1 (en) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020087896A1 (en) * | 2000-12-29 | 2002-07-04 | Cline Leslie E. | Processor performance state control |
US20020141410A1 (en) * | 2000-03-29 | 2002-10-03 | Infineon Technologies Ag | Date transmission memory |
US7035988B1 (en) * | 2003-03-17 | 2006-04-25 | Network Equipment Technologies, Inc. | Hardware implementation of an N-way dynamic linked list |
US20070250659A1 (en) * | 2006-04-19 | 2007-10-25 | Lexmark International Inc. | Addressing, command protocol, and electrical interface for non-volatile memories utilized in recording usage counts |
US20140189451A1 (en) * | 2005-06-16 | 2014-07-03 | Lexmark International, Inc. | Addressing, Command Protocol, and Electrical Interface for Non-volatile Memories Utilized in Recording Usage Counts |
US8856435B1 (en) * | 2007-10-25 | 2014-10-07 | Oracle America, Inc. | External, self-initializing content addressable memory free index storage device |
US20140348101A1 (en) * | 2011-12-14 | 2014-11-27 | Optis Cellular Technology, Llc | Buffer resource management method and telecommunication equipment |
US20170177341A1 (en) * | 2015-12-22 | 2017-06-22 | Intel Corporation | Apparatus and method for retrieving elements from a linked structure |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6988177B2 (en) * | 2000-10-03 | 2006-01-17 | Broadcom Corporation | Switch memory management using a linked list structure |
US7318146B2 (en) * | 2001-06-19 | 2008-01-08 | Micron Technology, Inc. | Peripheral device with hardware linked list |
US6728857B1 (en) * | 2001-06-20 | 2004-04-27 | Cisco Technology, Inc. | Method and system for storing and retrieving data using linked lists |
US6854033B2 (en) * | 2001-06-29 | 2005-02-08 | Intel Corporation | Using linked list for caches with variable length data |
US7111289B2 (en) * | 2001-12-21 | 2006-09-19 | Agere Systems, Inc. | Method for implementing dual link list structure to enable fast link-list pointer updates |
US7529913B2 (en) * | 2003-12-23 | 2009-05-05 | Intel Corporation | Late allocation of registers |
US20060117160A1 (en) * | 2004-12-01 | 2006-06-01 | Intel Corporation | Method to consolidate memory usage to reduce power consumption |
US8024541B2 (en) * | 2005-03-25 | 2011-09-20 | Elliptic Technologies Inc. | Packet memory processing system having memory buffers with different architectures and method therefor |
US7970743B1 (en) * | 2005-09-15 | 2011-06-28 | Emc Corporation | Retention and disposition of stored content associated with multiple stored objects |
US7814063B1 (en) | 2006-03-07 | 2010-10-12 | Emc Corporation | Retention and disposition of components of a complex stored object |
US7818300B1 (en) | 2006-03-07 | 2010-10-19 | Emc Corporation | Consistent retention and disposition of managed content and associated metadata |
US7594082B1 (en) | 2006-03-07 | 2009-09-22 | Emc Corporation | Resolving retention policy conflicts |
US7801862B1 (en) | 2006-09-29 | 2010-09-21 | Emc Corporation | Retention of complex objects |
JP4798055B2 (en) * | 2007-04-25 | 2011-10-19 | ソニー株式会社 | Image processing apparatus and camera system |
US8120989B2 (en) * | 2007-06-25 | 2012-02-21 | Qualcomm Incorporated | Concurrent multiple-dimension word-addressable memory architecture |
US9262554B1 (en) | 2010-02-16 | 2016-02-16 | Pmc-Sierra Us, Inc. | Management of linked lists within a dynamic queue system |
US9916251B2 (en) | 2014-12-01 | 2018-03-13 | Samsung Electronics Co., Ltd. | Display driving apparatus and cache managing method thereof |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4173783A (en) * | 1975-06-30 | 1979-11-06 | Honeywell Information Systems, Inc. | Method of accessing paged memory by an input-output unit |
US4949301A (en) * | 1986-03-06 | 1990-08-14 | Advanced Micro Devices, Inc. | Improved pointer FIFO controller for converting a standard RAM into a simulated dual FIFO by controlling the RAM's address inputs |
US5101485B1 (en) * | 1989-06-29 | 1996-12-10 | Frank L Perazzoli Jr | Virtual memory page table paging apparatus and method |
US5125086A (en) * | 1989-06-29 | 1992-06-23 | Digital Equipment Corporation | Virtual memory paging apparatus with variable size in-page clusters |
JP2618149B2 (en) * | 1991-04-22 | 1997-06-11 | インターナショナル・ビジネス・マシーンズ・コーポレイション | Method of managing data storage space in cache and apparatus for page replacement in cache |
FR2718555B1 (en) * | 1994-04-07 | 1996-06-28 | Ses Inc | Display matrix with light fibers oscillatable by multi-sector discs. |
US5493652A (en) * | 1994-04-29 | 1996-02-20 | International Business Machines Corporation | Management system for a buffer memory having buffers of uniform size in which the buffers are divided into a portion of contiguous unused buffers and a portion of contiguous buffers in which at least some are used |
US5555399A (en) * | 1994-07-07 | 1996-09-10 | International Business Machines Corporation | Dynamic idle list size processing in a virtual memory management operating system |
US5809560A (en) * | 1995-10-13 | 1998-09-15 | Compaq Computer Corporation | Adaptive read-ahead disk cache |
-
1998
- 1998-08-24 US US09/138,909 patent/US6430666B1/en not_active Expired - Lifetime
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020141410A1 (en) * | 2000-03-29 | 2002-10-03 | Infineon Technologies Ag | Date transmission memory |
US7116659B2 (en) * | 2000-03-29 | 2006-10-03 | Infineon Technologies Ag | Data transmission memory |
US20020087896A1 (en) * | 2000-12-29 | 2002-07-04 | Cline Leslie E. | Processor performance state control |
US6988211B2 (en) * | 2000-12-29 | 2006-01-17 | Intel Corporation | System and method for selecting a frequency and voltage combination from a table using a selection field and a read-only limit field |
US7035988B1 (en) * | 2003-03-17 | 2006-04-25 | Network Equipment Technologies, Inc. | Hardware implementation of an N-way dynamic linked list |
US20110264850A1 (en) * | 2005-06-16 | 2011-10-27 | James Ronald Booth | Addressing, Command Protocol, and Electrical Interface for Non-Volatile Memories Utilized in Recording Usage Counts |
US9245591B2 (en) * | 2005-06-16 | 2016-01-26 | Lexmark International, Inc. | Addressing, command protocol, and electrical interface for non-volatile memories utilized in recording usage counts |
US9837136B2 (en) * | 2005-06-16 | 2017-12-05 | Lexmark International, Inc. | Addressing, command protocol, and electrical interface for non-volatile memories utilized in recording usage counts |
US20140146626A1 (en) * | 2005-06-16 | 2014-05-29 | Lexmark International, Inc. | Addressing, Command Protocol, and Electrical Interface for Non-Volatile Memories Utilized in Recording Usage Counts |
US20140189451A1 (en) * | 2005-06-16 | 2014-07-03 | Lexmark International, Inc. | Addressing, Command Protocol, and Electrical Interface for Non-volatile Memories Utilized in Recording Usage Counts |
US9400764B2 (en) * | 2005-06-16 | 2016-07-26 | Lexmark International, Inc. | Addressing, command protocol, and electrical interface for non-volatile memories utilized in recording usage counts |
US20160111137A1 (en) * | 2005-06-16 | 2016-04-21 | Lexmark International, Inc. | Addressing, Command Protocol, and Electrical Interface for Non-volatile Memories Utilized in Recording Usage Counts |
US8966193B2 (en) * | 2005-06-16 | 2015-02-24 | Lexmark International, Inc. | Addressing, command protocol, and electrical interface for non-volatile memories utilized in recording usage counts sensor |
US20070250659A1 (en) * | 2006-04-19 | 2007-10-25 | Lexmark International Inc. | Addressing, command protocol, and electrical interface for non-volatile memories utilized in recording usage counts |
US8521970B2 (en) * | 2006-04-19 | 2013-08-27 | Lexmark International, Inc. | Addressing, command protocol, and electrical interface for non-volatile memories utilized in recording usage counts |
US8856435B1 (en) * | 2007-10-25 | 2014-10-07 | Oracle America, Inc. | External, self-initializing content addressable memory free index storage device |
US20140348101A1 (en) * | 2011-12-14 | 2014-11-27 | Optis Cellular Technology, Llc | Buffer resource management method and telecommunication equipment |
US20170177341A1 (en) * | 2015-12-22 | 2017-06-22 | Intel Corporation | Apparatus and method for retrieving elements from a linked structure |
WO2017112489A1 (en) * | 2015-12-22 | 2017-06-29 | Intel Corporation | Apparatus and method for retrieving elements from a linked structure |
CN108292226A (en) * | 2015-12-22 | 2018-07-17 | 英特尔公司 | For the device and method from chain structure retrieval elements |
US10095517B2 (en) * | 2015-12-22 | 2018-10-09 | Intel Corporation | Apparatus and method for retrieving elements from a linked structure |
TWI737650B (en) * | 2015-12-22 | 2021-09-01 | 美商英特爾股份有限公司 | Processor, system and method for retrieving elements from a linked structure |
Also Published As
Publication number | Publication date |
---|---|
US6430666B1 (en) | 2002-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6430666B1 (en) | Linked list memory and method therefor | |
JP4212167B2 (en) | MEMORY ACCESS METHOD AND MEMORY ACCESS CIRCUIT USED FOR RANDOM ACCESS MEMORY, SYNCHRONOUS DYNAMIC RANDOM ACCESS MEMORY DEVICE, AND SEMICONDUCTOR MEMORY DEVICE | |
US5014195A (en) | Configurable set associative cache with decoded data element enable lines | |
US6505287B2 (en) | Virtual channel memory access controlling circuit | |
US6125424A (en) | Method of writing, erasing, and controlling memory and memory device having erasing and moving components | |
US4511964A (en) | Dynamic physical memory mapping and management of independent programming environments | |
US4158227A (en) | Paged memory mapping with elimination of recurrent decoding | |
JP2000148444A (en) | Multi-logical fifo system | |
US7949844B2 (en) | Pipelined burst memory access | |
JPH04233643A (en) | Control apparatus for buffer memory | |
US4138720A (en) | Time-shared, multi-phase memory accessing system | |
WO2000075793A1 (en) | A programmable sram and dram cache interface | |
WO2001042926A1 (en) | Interface for a memory unit | |
JPH0812635B2 (en) | Dynamically relocated memory bank queue | |
EP0649095A2 (en) | Nonvolatile storage with high speed data access | |
US4559612A (en) | Sorting device for data words | |
JP2005512192A (en) | How to synchronize cache memory with main memory | |
US5946707A (en) | Interleaved burst XOR using a single memory pointer | |
US10997087B2 (en) | Direct memory access | |
US7075546B2 (en) | Intelligent wait methodology | |
EP0437712A2 (en) | Tandem cache memory | |
GB2037466A (en) | Computer with cache memory | |
CN115952326B (en) | Linked list type data structure, data processing method thereof, storage medium and electronic equipment | |
US11593289B2 (en) | Direct memory access | |
US8443145B2 (en) | Distributed memory usage for a system having multiple integrated circuits each including processors |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: MOTOROLA, INC., ILLINOIS Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:ROTH, ALAN SCOTT;REEL/FRAME:009418/0025 Effective date: 19980817 |
|
STCF | Information on status: patent grant |
Free format text: PATENTED CASE |
|
AS | Assignment |
Owner name: FREESCALE SEMICONDUCTOR, INC., TEXAS Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:MOTOROLA, INC.;REEL/FRAME:015698/0657 Effective date: 20040404 Owner name: FREESCALE SEMICONDUCTOR, INC.,TEXAS Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:MOTOROLA, INC.;REEL/FRAME:015698/0657 Effective date: 20040404 |
|
FPAY | Fee payment |
Year of fee payment: 4 |
|
AS | Assignment |
Owner name: CITIBANK, N.A. AS COLLATERAL AGENT, NEW YORK Free format text: SECURITY AGREEMENT;ASSIGNORS:FREESCALE SEMICONDUCTOR, INC.;FREESCALE ACQUISITION CORPORATION;FREESCALE ACQUISITION HOLDINGS CORP.;AND OTHERS;REEL/FRAME:018855/0129 Effective date: 20061201 Owner name: CITIBANK, N.A. AS COLLATERAL AGENT, NEW YORK Free format text: SECURITY AGREEMENT;ASSIGNORS:FREESCALE SEMICONDUCTOR, INC.;FREESCALE ACQUISITION CORPORATION;FREESCALE ACQUISITION HOLDINGS CORP.;AND OTHERS;REEL/FRAME:018855/0129D Effective date: 20061201 Owner name: CITIBANK, N.A. AS COLLATERAL AGENT,NEW YORK Free format text: SECURITY AGREEMENT;ASSIGNORS:FREESCALE SEMICONDUCTOR, INC.;FREESCALE ACQUISITION CORPORATION;FREESCALE ACQUISITION HOLDINGS CORP.;AND OTHERS;REEL/FRAME:018855/0129 Effective date: 20061201 |
|
FPAY | Fee payment |
Year of fee payment: 8 |
|
AS | Assignment |
Owner name: CITIBANK, N.A., AS COLLATERAL AGENT,NEW YORK Free format text: SECURITY AGREEMENT;ASSIGNOR:FREESCALE SEMICONDUCTOR, INC.;REEL/FRAME:024397/0001 Effective date: 20100413 Owner name: CITIBANK, N.A., AS COLLATERAL AGENT, NEW YORK Free format text: SECURITY AGREEMENT;ASSIGNOR:FREESCALE SEMICONDUCTOR, INC.;REEL/FRAME:024397/0001 Effective date: 20100413 |
|
AS | Assignment |
Owner name: CITIBANK, N.A., AS NOTES COLLATERAL AGENT, NEW YOR Free format text: SECURITY AGREEMENT;ASSIGNOR:FREESCALE SEMICONDUCTOR, INC.;REEL/FRAME:030633/0424 Effective date: 20130521 |
|
AS | Assignment |
Owner name: CITIBANK, N.A., AS NOTES COLLATERAL AGENT, NEW YOR Free format text: SECURITY AGREEMENT;ASSIGNOR:FREESCALE SEMICONDUCTOR, INC.;REEL/FRAME:031591/0266 Effective date: 20131101 |
|
FPAY | Fee payment |
Year of fee payment: 12 |
|
AS | Assignment |
Owner name: FREESCALE SEMICONDUCTOR, INC., TEXAS Free format text: PATENT RELEASE;ASSIGNOR:CITIBANK, N.A., AS COLLATERAL AGENT;REEL/FRAME:037354/0225 Effective date: 20151207 Owner name: FREESCALE SEMICONDUCTOR, INC., TEXAS Free format text: PATENT RELEASE;ASSIGNOR:CITIBANK, N.A., AS COLLATERAL AGENT;REEL/FRAME:037356/0553 Effective date: 20151207 Owner name: FREESCALE SEMICONDUCTOR, INC., TEXAS Free format text: PATENT RELEASE;ASSIGNOR:CITIBANK, N.A., AS COLLATERAL AGENT;REEL/FRAME:037356/0143 Effective date: 20151207 |
|
AS | Assignment |
Owner name: MORGAN STANLEY SENIOR FUNDING, INC., MARYLAND Free format text: ASSIGNMENT AND ASSUMPTION OF SECURITY INTEREST IN PATENTS;ASSIGNOR:CITIBANK, N.A.;REEL/FRAME:037486/0517 Effective date: 20151207 |
|
AS | Assignment |
Owner name: MORGAN STANLEY SENIOR FUNDING, INC., MARYLAND Free format text: ASSIGNMENT AND ASSUMPTION OF SECURITY INTEREST IN PATENTS;ASSIGNOR:CITIBANK, N.A.;REEL/FRAME:037518/0292 Effective date: 20151207 |
|
AS | Assignment |
Owner name: MORGAN STANLEY SENIOR FUNDING, INC., MARYLAND Free format text: SUPPLEMENT TO THE SECURITY AGREEMENT;ASSIGNOR:FREESCALE SEMICONDUCTOR, INC.;REEL/FRAME:039138/0001 Effective date: 20160525 |
|
AS | Assignment |
Owner name: NXP, B.V., F/K/A FREESCALE SEMICONDUCTOR, INC., NETHERLANDS Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:MORGAN STANLEY SENIOR FUNDING, INC.;REEL/FRAME:040925/0001 Effective date: 20160912 Owner name: NXP, B.V., F/K/A FREESCALE SEMICONDUCTOR, INC., NE Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:MORGAN STANLEY SENIOR FUNDING, INC.;REEL/FRAME:040925/0001 Effective date: 20160912 |
|
AS | Assignment |
Owner name: NXP B.V., NETHERLANDS Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:MORGAN STANLEY SENIOR FUNDING, INC.;REEL/FRAME:040928/0001 Effective date: 20160622 |
|
AS | Assignment |
Owner name: NXP USA, INC., TEXAS Free format text: CHANGE OF NAME;ASSIGNOR:FREESCALE SEMICONDUCTOR INC.;REEL/FRAME:040652/0180 Effective date: 20161107 |
|
AS | Assignment |
Owner name: NXP USA, INC., TEXAS Free format text: CORRECTIVE ASSIGNMENT TO CORRECT THE NATURE OF CONVEYANCE LISTED CHANGE OF NAME SHOULD BE MERGER AND CHANGE PREVIOUSLY RECORDED AT REEL: 040652 FRAME: 0180. ASSIGNOR(S) HEREBY CONFIRMS THE MERGER AND CHANGE OF NAME;ASSIGNOR:FREESCALE SEMICONDUCTOR INC.;REEL/FRAME:041354/0148 Effective date: 20161107 |
|
AS | Assignment |
Owner name: MORGAN STANLEY SENIOR FUNDING, INC., MARYLAND Free format text: CORRECTIVE ASSIGNMENT TO CORRECT THE REMOVE PATENTS 8108266 AND 8062324 AND REPLACE THEM WITH 6108266 AND 8060324 PREVIOUSLY RECORDED ON REEL 037518 FRAME 0292. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT AND ASSUMPTION OF SECURITY INTEREST IN PATENTS;ASSIGNOR:CITIBANK, N.A.;REEL/FRAME:041703/0536 Effective date: 20151207 |
|
AS | Assignment |
Owner name: SHENZHEN XINGUODU TECHNOLOGY CO., LTD., CHINA Free format text: CORRECTIVE ASSIGNMENT TO CORRECT THE TO CORRECT THE APPLICATION NO. FROM 13,883,290 TO 13,833,290 PREVIOUSLY RECORDED ON REEL 041703 FRAME 0536. ASSIGNOR(S) HEREBY CONFIRMS THE THE ASSIGNMENT AND ASSUMPTION OF SECURITYINTEREST IN PATENTS.;ASSIGNOR:MORGAN STANLEY SENIOR FUNDING, INC.;REEL/FRAME:048734/0001 Effective date: 20190217 |
|
AS | Assignment |
Owner name: NXP B.V., NETHERLANDS Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:MORGAN STANLEY SENIOR FUNDING, INC.;REEL/FRAME:050744/0097 Effective date: 20190903 |
|
AS | Assignment |
Owner name: MORGAN STANLEY SENIOR FUNDING, INC., MARYLAND Free format text: CORRECTIVE ASSIGNMENT TO CORRECT THE REMOVE APPLICATION11759915 AND REPLACE IT WITH APPLICATION 11759935 PREVIOUSLY RECORDED ON REEL 037486 FRAME 0517. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT AND ASSUMPTION OF SECURITYINTEREST IN PATENTS;ASSIGNOR:CITIBANK, N.A.;REEL/FRAME:053547/0421 Effective date: 20151207 |
|
AS | Assignment |
Owner name: NXP B.V., NETHERLANDS Free format text: CORRECTIVE ASSIGNMENT TO CORRECT THE REMOVEAPPLICATION 11759915 AND REPLACE IT WITH APPLICATION11759935 PREVIOUSLY RECORDED ON REEL 040928 FRAME 0001. ASSIGNOR(S) HEREBY CONFIRMS THE RELEASE OF SECURITYINTEREST;ASSIGNOR:MORGAN STANLEY SENIOR FUNDING, INC.;REEL/FRAME:052915/0001 Effective date: 20160622 |
|
AS | Assignment |
Owner name: NXP, B.V. F/K/A FREESCALE SEMICONDUCTOR, INC., NETHERLANDS Free format text: CORRECTIVE ASSIGNMENT TO CORRECT THE REMOVEAPPLICATION 11759915 AND REPLACE IT WITH APPLICATION11759935 PREVIOUSLY RECORDED ON REEL 040925 FRAME 0001. ASSIGNOR(S) HEREBY CONFIRMS THE RELEASE OF SECURITYINTEREST;ASSIGNOR:MORGAN STANLEY SENIOR FUNDING, INC.;REEL/FRAME:052917/0001 Effective date: 20160912 |