PATENT DOCUMENT

Publication Number: US-8856475-B1
Application Number: US-201113171467-A
Country: US
Kind Code: B1

Title: Efficient selection of memory blocks for compaction

Abstract:
A method for storing data in a memory that includes multiple memory blocks, includes running a compaction process that selects one or more memory blocks containing both valid data and invalid data, copies the valid data from the selected memory blocks to other storage locations, and then erases the selected memory blocks. At least one memory block, which meets a criterion predictive of imminent invalidation of at least some of the data in the block, is identified. Selection of the identified memory block in the compaction process is inhibited.

Claims:
The invention claimed is: 
     
       1. A method for storing data in a memory that includes multiple memory blocks, the method comprising:
 selecting one or more memory blocks for compaction, wherein each one of the one or more memory blocks includes both valid data and invalid data; 
 determining a number of accesses of each logical address for each memory block of the one or more memory blocks; 
 determining one or more frequently-accessed logical addresses of each memory block of the one or more memory blocks dependent upon the number of accesses of each logical address; 
 identifying at least one of the one or more memory blocks responsive to a determination that a ratio of a number of the one or more frequently-accessed logical addresses of the at least one of one or more memory blocks and a total number of valid logical addresses in the at least one of the one or more memory blocks is greater than a predetermined threshold; and 
 compacting the selected one or more memory blocks excluding the identified at least one of the one or more memory blocks. 
 
     
     
       2. The method according to  claim 1 , wherein the at least one memory block comprises data currently being invalidated. 
     
     
       3. The method according to  claim 1 , wherein the at least one of the one or more memory blocks comprises data wherein invalidation occurred more recently than a predefined time out period. 
     
     
       4. The method according to  claim 1 , wherein the at least one of the one or more memory blocks comprises multiple addresses that have been invalidated sequentially. 
     
     
       5. The method according to  claim 1 , wherein the at least one of the one or more memory blocks comprises an amount of frequently-accessed data greater than a predefined amount. 
     
     
       6. A data storage apparatus, comprising:
 an interface for communicating with a memory that includes multiple memory blocks; and 
 a processor, which is configured to:
 select one or more memory blocks for compaction, wherein each one of the one or more memory blocks includes both valid data and invalid data; 
 determine a number of accesses of each logical address for each memory block of the one or more memory blocks; 
 determine one or more frequently-accessed logical addresses of each memory block of the one or more memory blocks dependent upon the number of accesses of each logical address; 
 identify at least one of the one or more memory blocks responsive to a determination that a ratio of a number of the one or more frequently-accessed logical addresses of the at least one of the one or more memory blocks and a total number of valid logical addresses in the at least one of the one or more memory blocks is greater than a predetermined threshold; and 
 compact the selected one or more memory blocks excluding the identified at least one of the one or more memory blocks. 
 
 
     
     
       7. The apparatus according to  claim 6 , wherein the at least one of the one or more memory blocks includes data which is currently being invalidated. 
     
     
       8. The apparatus according to  claim 6 , wherein the at least one of the one or more memory blocks includes data wherein invalidation occurred more recently than a predefined time out period. 
     
     
       9. The apparatus according to  claim 6 , wherein the at least one of the one or more memory blocks includes multiple addresses that have been invalidated sequentially. 
     
     
       10. The apparatus according to  claim 6 , wherein the at least one of the one or more memory blocks includes an amount of frequently-accessed data greater than a predefined amount. 
     
     
       11. A data storage apparatus, comprising:
 a memory comprising multiple memory blocks; and 
 a processor, which is configured to: 
 select one or more memory blocks for compaction, wherein each one of the one or more memory blocks includes both valid data and invalid data; 
 determine a number of accesses of each logical address for each memory block of the one or more memory blocks; 
 determine one or more frequently-accessed logical addresses of each memory block of the one or more memory blocks dependent upon the number of accesses of each logical address; 
 identify at least one of the one or more memory blocks responsive to a determination that a ratio of a number of the one or more frequently-accessed logical addresses of the at least one of the one or more memory blocks and a total number of valid logical addresses in the at least one block of the one or more memory blocks is greater than a predetermined threshold; and 
 compact each memory block of the selected one or more memory blocks excluding the identified at least one of the one or more memory blocks.

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     This application claims the benefit of U.S. Provisional Patent Application 61/369,719, filed Aug. 1, 2010, whose disclosure is incorporated herein by reference. 
    
    
     FIELD OF THE INVENTION 
     The present invention relates generally to memory devices, and particularly to techniques for selecting memory blocks for compaction in non-volatile memory devices. 
     BACKGROUND OF THE INVENTION 
     Some non-volatile memory devices, such as Flash devices, are divided into memory blocks that are erased en-bloc. Some memory systems carry out compaction processes, which compact valid data and free memory blocks for erasure and subsequent programming. Compaction is also sometimes referred to as “garbage collection.” 
     SUMMARY OF THE INVENTION 
     An embodiment of the present invention that is described herein provides a method for storing data in a memory that includes multiple memory blocks. The method includes running a compaction process that selects one or more memory blocks containing both valid data and invalid data, copies the valid data from the selected memory blocks to other storage locations, and then erases the selected memory blocks. At least one memory block, which meets a criterion predictive of imminent invalidation of at least some of the data in the block, is identified. Selection of the identified memory block in the compaction process is inhibited. 
     In some embodiments, identifying the at least one memory block includes detecting a memory block in which data invalidation currently occurs. In an embodiment, identifying the at least one memory block includes detecting N memory blocks, N≧1, in which data invalidation occurred most recently among the multiple memory blocks. In a disclosed embodiment, identifying the at least one memory block includes detecting a memory block in which data invalidation occurred more recently than a predefined time out period. 
     In another embodiment, identifying the at least one memory block includes detecting a memory block in which multiple addresses have been invalidated sequentially. In yet another embodiment, identifying the at least one memory block includes detecting a memory block that contains more than a predefined amount of frequently-accessed data. 
     There is additionally provided, in accordance with an embodiment of the present invention, a data storage apparatus including an interface and a processor. The interface is configured for communicating with a memory that includes multiple memory blocks. The processor is configured to run a compaction process that selects one or more memory blocks containing both valid data and invalid data, copies the valid data from the selected memory blocks to other storage locations, and then erases the selected memory blocks, to identify at least one memory block that meets a criterion predictive of imminent invalidation of at least some of the data in the block, and to inhibit selection of the identified memory block in the compaction process. 
     There is also provided, in accordance with an embodiment of the present invention, a data storage apparatus including a memory and a processor. The memory includes multiple memory blocks. The processor is configured to run a compaction process that selects one or more memory blocks containing both valid data and invalid data, copies the valid data from the selected memory blocks to other storage locations, and then erases the selected memory blocks, to identify at least one memory block that meets a criterion predictive of imminent invalidation of at least some of the data in the block, and to inhibit selection of the identified memory block in the compaction process. 
     There is further provided, in accordance with an embodiment of the present invention, a method for storing data in a memory that includes multiple memory blocks. The method includes running a compaction process that selects one or more source memory blocks containing both valid data and invalid data, copies the valid data from the source memory blocks to one or more destination memory blocks, and then erases the source memory blocks. Input data is accepted from a host for storage in the memory. A memory block that does not contain any data that was copied into the memory block by the compaction process is identified. The input data is stored in the identified memory block. 
     In some embodiments, running the compaction process includes fully populating the destination memory blocks with the valid data that was copied from the source memory blocks, so as to prevent storage of the input data accepted from the host in the destination memory blocks. 
     There is additionally provided, in accordance with an embodiment of the present invention, a data storage apparatus including an interface and a processor. The interface is configured for communicating with a memory that includes multiple memory blocks. The processor is configured to run a compaction process that selects one or more source memory blocks containing both valid data and invalid data, copies the valid data from the source memory blocks to one or more destination memory blocks, and then erases the source memory blocks, to accept from a host input data for storage in the memory, to identify a memory block that does not contain any data that was copied into the memory block by the compaction process, and to store the input data in the identified memory block. 
     There is also provided, in accordance with an embodiment of the present invention, a data storage apparatus including a memory and a processor. The memory includes multiple memory blocks. The processor is configured to run a compaction process that selects one or more source memory blocks containing both valid data and invalid data, copies the valid data from the source memory blocks to one or more destination memory blocks, and then erases the source memory blocks, to accept from a host input data for storage in the memory, to identify a memory block that does not contain any data that was copied into the memory block by the compaction process, and to store the input data in the identified memory block. 
     The present invention will be more fully understood from the following detailed description of the embodiments thereof, taken together with the drawings in which: 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is a block diagram that schematically illustrates a memory system, in accordance with an embodiment of the present invention; 
         FIG. 2  is a flow chart that schematically illustrates a method for compaction, in accordance with an embodiment of the present invention; and 
         FIG. 3  is a flow chart that schematically illustrates a method for data storage, in accordance with an alternative embodiment of the present invention. 
     
    
    
     DETAILED DESCRIPTION OF EMBODIMENTS 
     Overview 
     Embodiments of the present invention that are described herein provide improved methods and systems for memory block compaction in non-volatile memory devices, such as Flash devices. In some embodiments, a memory controller stores data that is received from a host in a memory device. The memory device comprises multiple memory blocks, and each memory block stores multiple data pages. Typically, data is written to the memory device in page units, but erasure is applied to entire memory blocks. Data is written only to erased pages, and it is therefore not possible to update data in-place. Updating data involves writing the updated data to another physical storage location, marking the previous version of the data as invalid, and dynamically mapping logical addresses to physical storage locations. 
     Because of the above characteristics, the memory blocks of the memory device gradually accumulate invalid data pages, whose updated versions have been stored in other physical storage locations. In order to reduce the number of invalid pages, the memory controller carries out a compaction, or “garbage collection” process. This process selects one or more memory blocks for compaction, copies the valid data from the selected memory blocks to other storage locations, and then erases the selected memory blocks. The erased blocks are then ready for subsequent programming. 
     The efficiency of a given compaction process can be quantified by measuring the number of copy operations performed by the memory controller. This efficiently depends, among other factors, on the criteria used for selecting memory blocks for compaction. The methods and systems described herein select memory blocks for compaction in a manner that eliminates many unnecessary copy operations, and therefore improves compacting efficiency. 
     In some embodiments, the memory controller identifies one or more memory blocks in which data pages are likely to be invalidated imminently, and prevents these blocks from being selected for compaction. A memory block containing data that is about to be invalidated is typically not a good candidate for compaction, because some of the valid data that is to be copied from this block will soon be invalidated, thereby wasting copy operations. Therefore, it is desirable to refrain from selecting this block for compaction even though a large portion of the block may contain invalid data. 
     The memory controller typically uses a predefined criterion, which predicts whether data invalidation is imminent in a given memory block. Upon identifying one or more memory blocks that meet this criterion, the memory controller inhibits the identified memory blocks from being selected for compaction. Several example criteria are described herein. For example, when performing sequential programming, a memory block in which certain data addresses are currently being invalidated (e.g., updated in other physical storage locations) is likely to undergo additional data invalidation at other addresses in the near future, and is therefore not a good candidate for compaction. 
     In alternative embodiments, the memory controller stores input data received from the host in memory blocks that do not contain data that was copied into the blocks by the compaction process. In other words, the memory controller separates fresh host data from data that was produced by compaction. This technique helps to separate frequently-accessed (“hot”) data from rarely-accessed or static (“cold”) data. With this sort of separation, the data that requires compaction is concentrated in fewer memory blocks, and the compaction process is therefore improved. 
     The methods and systems described herein reduce the number of copy operations performed by the memory controller. Therefore, these techniques increase the efficiency of the compaction process and reduce the wear and stress on the memory device. 
     System Description 
       FIG. 1  is a block diagram that schematically illustrates a memory system  20 , in accordance with an embodiment of the present invention. System  20  can be used in various host systems and devices, such as in computing devices, cellular phones or other communication terminals, removable memory modules (sometimes referred to as “USB Flash Drives”), Solid State Disks (SSD), digital cameras, music and other media players and/or any other system or device in which data is stored and retrieved. 
     System  20  comprises a memory device  24 , which stores data in a memory cell array  28 . The memory array comprises multiple memory blocks  34 . Each memory block  34  comprises multiple analog memory cells  32 . In the context of the present patent application and in the claims, the term “analog memory cell” is used to describe any memory cell that holds a continuous, analog value of a physical parameter, such as an electrical voltage or charge. Array  28  may comprise analog memory cells of any kind, such as, for example, NAND, NOR and Charge Trap Flash (CTF) Flash cells, phase change RAM (PRAM, also referred to as Phase Change Memory—PCM), Nitride Read Only Memory (NROM), Ferroelectric RAM (FRAM), magnetic RAM (MRAM) and/or Dynamic RAM (DRAM) cells. 
     The charge levels stored in the cells and/or the analog voltages or currents written into and read out of the cells are referred to herein collectively as analog values, analog storage values or storage values. The storage values may comprise, for example, threshold voltages or any other suitable kind of storage values. System  20  stores data in the analog memory cells by programming the cells to assume respective programming states, which are also referred to as programming levels. The programming states are selected from a finite set of possible states, and each programming state corresponds to a certain nominal storage value. For example, a 3 bit/cell MLC can be programmed to assume one of eight possible programming states by writing one of eight possible nominal storage values into the cell. 
     Memory device  24  comprises a reading/writing (R/W) unit  36 , which converts data for storage in the memory device to analog storage values and writes them into memory cells  32 . In alternative embodiments, the R/W unit does not perform the conversion, but is provided with voltage samples, i.e., with the storage values for storage in the cells. When reading data out of array  28 , R/W unit  36  converts the storage values of memory cells into digital samples having a resolution of one or more bits. Data is typically written to and read from the memory cells in groups that are referred to as pages. In some embodiments, the R/W unit can erase a group of cells  32  by applying one or more negative erasure pulses to the cells. Erasure is typically performed in entire memory blocks. 
     The storage and retrieval of data in and out of memory device  24  is performed by a memory controller  40 . The memory controller comprises an interface  44  for communicating with memory device  24 , and a processor  48  that carries out the various memory management functions. In particular, processor  48  carries out an efficient memory block compaction process that is described herein. 
     Memory controller  40  communicates with a host  52 , for accepting data for storage in the memory device and for outputting data retrieved from the memory device. Memory controller  40 , and in particular processor  48 , may be implemented in hardware. Alternatively, the memory controller may comprise a microprocessor that runs suitable software, or a combination of hardware and software elements. 
     The configuration of  FIG. 1  is an exemplary system configuration, which is shown purely for the sake of conceptual clarity. Any other suitable memory system configuration can also be used. Elements that are not necessary for understanding the principles of the present invention, such as various interfaces, addressing circuits, timing and sequencing circuits and debugging circuits, have been omitted from the figure for clarity. 
     Although the example of  FIG. 1  shows a single memory device  24 , system  20  may comprise multiple memory devices that are controlled by memory controller  40 . In the exemplary system configuration shown in  FIG. 1 , memory device  24  and memory controller  40  are implemented as two separate Integrated Circuits (ICs). In alternative embodiments, however, the memory device and the memory controller may be integrated on separate semiconductor dies in a single Multi-Chip Package (MCP) or System on Chip (SoC), and may be interconnected by an internal bus. Further alternatively, some or all of the memory controller circuitry may reside on the same die on which the memory array is disposed. Further alternatively, some or all of the functionality of memory controller  40  can be implemented in software and carried out by a processor or other element of the host system. In some embodiments, host  44  and memory controller  40  may be fabricated on the same die, or on separate dies in the same device package. 
     In some embodiments, memory controller  40  comprises a general-purpose processor, which is programmed in software to carry out the functions described herein. The software may be downloaded to the processor in electronic form, over a network, for example, or it may, alternatively or additionally, be provided and/or stored on non-transitory tangible media, such as magnetic, optical, or electronic memory. 
     In an example configuration of array  28 , memory cells  32  are arranged in multiple rows and columns, and each memory cell comprises a floating-gate transistor. The gates of the transistors in each row are connected by word lines, and the sources of the transistors in each column are connected by bit lines. The memory array is typically divided into multiple pages, i.e., groups of memory cells that are programmed and read simultaneously. Pages are sometimes sub-divided into sectors. In some embodiments, each page comprises an entire row of the array. In alternative embodiments, each row (word line) can be divided into two or more pages. For example, in some devices each row is divided into two pages, one comprising the odd-order cells and the other comprising the even-order cells. 
     Typically, memory controller  40  programs data in page units, but erases entire memory blocks  34 . Typically although not necessarily, a memory block is on the order of 10 6  memory cells, whereas a page is on the order of 10 3 -10 4  memory cells. 
     Memory Block Compaction 
     As explained above, data can only be written to erased memory cells in memory device  24 , and it is not possible to update data in-place. Therefore, system  20  uses logical-to-physical address mapping to manage the data storage locations in memory device  24 . Typically, memory controller  40  receives from host  52  memory commands (e.g., read and write commands) that are specified using logical addresses. The memory controller maps the logical addresses to respective physical storage locations in memory device  24 . When requested by the host to update the data in a certain logical address, the memory controller writes the updated data in an available (erased) physical storage location, updates the logical-to-physical address mapping to indicate the new physical storage location of the data, and marks the previous physical storage location of the data as invalid. 
     When using the above-described storage scheme, memory blocks  34  in device  24  gradually accumulate invalid pages, whose data has been updated in other pages in the memory device. Such invalid pages, sometimes referred to as “holes,” may be distributed in any way across the block and degrade the performance and capacity of system  20 . In some embodiments, memory controller  40  carries out a compaction or “garbage collection” process, which eliminates invalid pages and clears memory blocks for erasure and subsequent programming. 
     In a typical compaction process, memory controller  40  selects one or more blocks to be compacted (sometimes referred to as “source blocks”). The selected memory blocks typically comprise both valid pages and invalid pages. The memory controller copies the valid pages from the selected memory blocks to other physical storage locations, typically to sequential erased pages in one or more other memory blocks (sometimes referred to as “destination blocks”). After copying the valid data, the memory controller updates the logical-to-physical address mapping to reflect the new physical storage locations of the data, and erases the selected memory blocks. As a result, the valid data from the selected blocks is written compactly in another location, and the selected blocks are erased and ready for new programming. 
     The compaction process performed by memory controller  40  involves copy operations of the valid data. The efficiency of the compaction process depends on the number of copy operations. It is desirable to reduce the number of copy operations, in order to reduce the computational and communication load of the memory controller and its interfaces, as well as reduce the wearing and endurance stress of memory cells  32 . 
     Preventing Compaction of Memory Blocks in which Imminent Data Invalidation is Expected 
     The efficiency of the compaction process depends, among other factors, on the criteria used for selecting memory blocks for compaction. For example, it is possible in principle to select for compaction the blocks having the largest portion of invalid data. This criterion, however, does not guarantee high efficiency. 
     Consider, for example, a scenario in which the host operating system writes a body of data to a range of sequential logical addresses that have been used for sequential storage before. This sort of scenario occurs, for example, when a file (e.g., MP3, MP4 or JPEG file) has been deleted and a new file (e.g., MP3, MP4 or JPEG file) is now stored. In such a case, the host operating system sometimes does not notify the memory controller that the old memory area is not used. During such a process, the memory controller programs sequential pages in one memory block (with the data of the new file), while invalidating sequential pages in another memory block (the data of the old file). 
     At a certain point in time, the memory block in which sequential pages are currently being invalidated may contain a very high portion of invalid data. Nevertheless, this memory block is not a good candidate for compaction: Data that is presently valid in this block will soon be invalidated, and it is inefficient to waste copy operations for copying this data to another location. 
     The above scenario is described purely by way of example, in order to demonstrate that: 
     (i) selecting for compaction the memory block having the largest portion of invalid data is sometimes sub-optimal; and 
     (ii) it is usually inefficient to select for compaction a memory block in which data invalidation is expected to occur in the near future. 
     In some embodiments, memory controller  40  identifies one or more memory blocks in which data invalidation is predicted to occur imminently. The memory controller inhibits such memory blocks from being selected for compaction, even if they contain a high portion of invalid data. Instead, the memory controller reverts to select other memory blocks in which data invalidation is not imminent. 
     Memory controller  40  may use any suitable criterion for predicting whether data invalidation is likely to be imminent in a given memory block. In sequential programming, as described above, a memory block that currently undergoes data invalidation is considered likely to undergo additional data invalidation in the near future. Thus, in one embodiment, the memory controller prevents a memory block that currently undergoes data invalidation from being selected for compaction. 
     In another embodiment, the memory controller identifies the N memory blocks that most recently underwent data invalidation (N≧1), and prevents these N blocks from being selected for compaction. For example, the memory controller may manage a First-In-First-Out (FIFO) list that holds the indices of the N memory blocks in which data was most recently invalidated. The memory blocks on this list are prevented from being selected for compaction. Such a criterion may be useful, for example, for host operating systems or memory controller configurations that carry out N concurrent storage tasks. The value of N may be selected based on the known characteristics of the host operating system or memory controller configuration. 
     In yet another embodiment, the memory controller may define a certain time-out period after which the memory block may be selected for compaction. In other words, the memory controller permits a memory block to be selected for compaction only if the block did not undergo data invalidation during the last T seconds. In another embodiment, the memory controller may regard a block that contains “hot” data, i.e., frequently-accessed data, as a block that is likely to undergo imminent data invalidation. For example, the memory controller may regard a block as likely to undergo invalidation if the ratio between the number of frequently-accessed logical addresses (LBAs) and the total number of valid logical addresses in the block exceeds a certain threshold. Further alternatively, memory controller  40  may use any other suitable criterion for predicting which memory blocks are likely to undergo imminent data invalidation. 
       FIG. 2  is a flow chart that schematically illustrates a method for compaction, in accordance with an embodiment of the present invention. The method begins with memory controller  40  identifying one or more memory blocks in which data invalidation is likely to be imminent, at an identification step  60 . The memory controller marks the identified memory blocks as “not allowed for compaction,” at a marking step  64 . The memory controller selects one or more memory blocks as candidates for compaction, at a selection step  68 . For example, the memory controller may select the blocks containing the largest portion of invalid data. 
     The memory controller then checks whether any of the selected memory blocks is marked as not allowed for compaction, at a checking step  72 . If all the selected memory blocks are permitted for compaction, the memory controller compacts these memory blocks at a compaction step  76 . The method then loops back to step  60  above. Otherwise, i.e., if one or more of the selected memory blocks are marked as not allowed for compaction, the method loops back to step  68  above in which the memory controller replaces the marked block with alternative candidates. 
     The flow chart of  FIG. 2  shows an example flow that demonstrates the use of the disclosed technique. In alternative embodiments, any other suitable flow can be used. For example, the memory controller may first select one or more memory blocks for compaction, then check whether data invalidation is likely to occur in any of the selected blocks, and re-select the candidates if necessary. 
     Separating Fresh Host Input Data from Data that was Produced by Compaction 
     In some embodiments, memory controller  40  stores fresh input data that is accepted from host  52  in memory blocks that do not contain any data that was produced by the compaction process. In other words, the memory controller separates fresh input data from data that was produced by compaction. 
     The rationale behind this technique is that the data received from the host is regarded as “hot” or frequently-accessed data, whereas data that was produced by compaction may comprise both frequently-accessed (“hot”) and rarely-accessed or static (“cold”) data. It is generally desirable to store frequently-accessed and rarely-accessed data in separate memory blocks, in order to concentrate the data that is likely to undergo compaction in a relatively small number of memory blocks. Separating the fresh input data from the data produced by compaction helps to separate “hot” data from “cold” data, thereby improving the compaction process. 
       FIG. 3  is a flow chart that schematically illustrates a method for data storage, in accordance with an embodiment of the present invention. The method begins with memory controller  40  identifying or assigning memory blocks that do not contain any data that was copied into the blocks by the compaction process, at a fresh block definition step  80 . The memory controller accepts input data for storage from host  52 , at an input step  84 . The memory controller selects an address for storing the input data in one of the memory blocks that were assigned or identified at step  80  above, at an address selection step  88 . The memory controller then stores the input data in the selected address, at a storage step  92 . 
     In various embodiments, memory controller  40  may use various techniques for causing fresh host data to be stored in blocks that do not contain data produced by compaction. For example, the memory controller may fully-populate the destination blocks during the compaction process, without leaving any empty pages that are available for storage. Since the destination blocks are fully-populated with data that was copied by the compaction process, fresh host data cannot be stored in these blocks. 
     Although the embodiments described herein mainly address compaction processes that are performed at page granularity, the methods and systems described herein can also be used with any other suitable kind of compaction processes, such as in processes that copy and invalidate data items that occupy only parts of a page. 
     It will thus be appreciated that the embodiments described above are cited by way of example, and that the present invention is not limited to what has been particularly shown and described hereinabove. Rather, the scope of the present invention includes both combinations and sub-combinations of the various features described hereinabove, as well as variations and modifications thereof which would occur to persons skilled in the art upon reading the foregoing description and which are not disclosed in the prior art. Documents incorporated by reference in the present patent application are to be considered an integral part of the application except that to the extent any terms are defined in these incorporated documents in a manner that conflicts with the definitions made explicitly or implicitly in the present specification, only the definitions in the present specification should be considered.

Metadata:
Filing Date: 20110629
Publication Date: 20141007
Grant Date: 20141007
Priority Date: 20100801
Inventors: MEIR AVRAHAM
SHACHAR MICHAEL
Assignee: APPLE INC
CPC Classifications: [{"code": "G06F12/0246", "inventive": true, "first": true, "tree": "[]"}, {"code": "G06F12/0253", "inventive": true, "first": true, "tree": "[]"}, {"code": "G06F12/0261", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F12/0246", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F12/0261", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F12/0253", "inventive": true, "first": true, "tree": "[]"}]
Family ID: 51627102