Block storage apertures to persistent memory
Claim Score by NHIP
Abstract
Apparatus and methods for accessing a non-volatile memory (NVM) device in a computer system that includes at least one host processor and at least one memory bus. The NVM device is communicably coupleable to the memory bus through an NVM device controller, thereby allowing the host processor to access persistent data storable within the NVM device by issuing one or more memory load/store commands to the NVM device controller over the memory bus. Because the NVM device controller includes at least one block window or aperture that defines at least one address range for accessing the persistent data storable within the NVM device, the computer system can exploit the full capacity of the NVM device without being unduly constrained by physical addressing limits imposed by the host processor, or by limits imposed by an operating system executed by the host processor.

Term
Projected expiry 26 September 2033.
- Priority and filed
- Published
- Today
- Projected expiry
20 claims: 3 independent, 17 dependent
- 26Broadest claimClaim Score 55, average(NHIP)A method of accessing block data storable within a non-volatile memory (NVM) device in a computer system, the computer system including at least one host processor and at least one memory bus, the method comprising:receiving, at a controller over the memory bus, at least one first command from the host processor, the first command including one of a memory load command and a memory store command, the first command further including a logical address, the controller including at least one block window defining at least one address range for accessing the block data storable within the NVM device;translating, by the controller, the logical address included in the first command to a physical address within the NVM device, the logical address conforming to at least a portion of the address range defined by the block window;andaccessing, by the controller, the block data at the physical address within the NVM device.
- 40A controller for accessing block data storable within a non-volatile memory (NVM) device, the controller being communicably coupleable to at least one host processor over at least one memory bus, comprising:a least one block window defining at least one address range for accessing the block data storable within the NVM device;at least one command register, the command register being operative to receive, over the memory bus, at least one first command from the host processor, the first command including one of a memory load command and a memory store command, the first command having a logical address including a logical offset address;a plurality of control registers including at least a plurality of base address registers, the plurality of base address registers containing a plurality of logical base addresses, respectively, each of the respective logical base addresses corresponding to a predetermined portion of the address range defined by the block window;andat least one internal processor operative to execute at least one program out of at least one memory: to select one of the plurality of base address registers based at least on the logical address from the first command;to translate the logical base address contained in the selected base address register and the logical offset address to a physical address within the NVM device;andto access the block data at the physical address within the NVM device.
- 45A computer-readable storage medium including executable instructions for accessing block data storable within a non-volatile memory (NVM) device in a computer system, the computer system including at least one host processor and at least one memory bus, the computer-readable storage medium comprising executable instructions:to receive, over the memory bus, at least one first command from the host processor, the first command including one of a memory load command and a memory store command, the first command further including a logical address, at least one block window defining at least one address range for accessing the block data storable within the NVM device;to translate the logical address to a physical address within the NVM device, the logical address conforming to at least a portion of the address range defined by the block window;andto access the block data at the physical address within the NVM device.
Independent claims3
51 paragraphs in 3 sections, as filed
BACKGROUND
In a conventional computer system, a block storage device including non-volatile memory can be communicably coupled to a block storage device controller, which, in turn, can be communicably coupled to a processor by a system bus. Such a system bus is typically implemented as a Peripheral Component Interconnect express (PCIe) bus, allowing the processor to access block data storable within the block storage device by issuing one or more input/output (I/O) commands to the block storage device controller over the PCIe bus. Having received an I/O command from the processor over the PCIe bus, the block storage device controller can perform I/O processing including one or more direct memory access (DMA) operations to access the block data storable in the block storage device, and ultimately send a signal to the processor over the PCIe bus to signal completion of the I/O processing. However, such I/O processing performed by the block storage device controller in conjunction with the PCIe bus can cause latency in the processing of block write/read operations in such a conventional computer system.
BRIEF DESCRIPTION OF THE DRAWINGS
The accompanying drawings, which are incorporated in and constitute part of this specification, illustrate one or more embodiments described herein, and, together with the Detailed Description, explain these embodiments. In the drawings:
<figref idref="DRAWINGS">FIG. 1</figref> is a block diagram illustrating an exemplary apparatus for accessing, in a computer system, at least one non-volatile memory (NVM) device, which, in conjunction with an NVM device controller, can he collectively viewed by the computer system as a block storage device, in accordance with the present application;
<figref idref="DRAWINGS">FIG. 2</figref> is a block diagram illustrating the NVM device controller included in the apparatus of <figref idref="DRAWINGS">FIG. 1</figref>;
<figref idref="DRAWINGS">FIG. 3</figref> is a block diagram illustrating an exemplary block window, a plurality of exemplary control registers, an exemplary address translation component, and an exemplary media management translation table included in the NVM device controller of <figref idref="DRAWINGS">FIG. 2</figref>;
<figref idref="DRAWINGS">FIG. 4</figref> is a flow diagram illustrating an exemplary method of operating the NVM device controller of <figref idref="DRAWINGS">FIG. 1</figref>;
<figref idref="DRAWINGS">FIG. 5</figref> is a block diagram of an exemplary computer system in which the NVM device controller of <figref idref="DRAWINGS">FIG. 2</figref> may be employed;
<figref idref="DRAWINGS">FIG. 6<i>a </i></figref>is a block diagram illustrating an exemplary alternative embodiment of the NVM device controller of <figref idref="DRAWINGS">FIG. 2</figref>, including an exemplary mailbox for use by a host processor in issuing and monitoring one or more commands, such as memory load/store commands, sent by the host processor to the NVM device controller over a memory bus;
<figref idref="DRAWINGS">FIG. 6<i>b </i></figref>is a diagram illustrating an exemplary op-code format associated with a respective command, an exemplary write protect bit associated with the op-code format, and an exemplary input payload format for use b a host processor in issuing the respective command to an NVM device controller us in the mailbox of <figref idref="DRAWINGS">FIG. 6</figref><i>a; </i>
<figref idref="DRAWINGS">FIG. 6<i>c </i></figref>is a diagram illustrating an exemplary status code format associated with respective command, and an exemplary output payload format for use by a host processor in monitoring completion of the respective command using the mailbox of <figref idref="DRAWINGS">FIG. 6</figref><i>a; </i>and
<figref idref="DRAWINGS">FIGS. 7<i>a</i>-7<i>b </i></figref>depict a flow diagram illustrating an exemplary method of issuing a command to an NVM device controller over a memory bus, and monitoring a status of completion of the command by a host processor using the mailbox of <figref idref="DRAWINGS">FIG. 6</figref><i>a. </i>
DESCRIPTION OF EMBODIMENTS
Apparatus and methods are disclosed for accessing at least one non-volatile memory (NVM) device computer system that includes it least one host processor and at least one memory bus. In the disclosed apparatus and methods, the NVM device is communicably coupleable to the memory bus through an NVM device controller, thereby allowing the host processor to access persistent data storable within the NVM device by issuing one or more memory load/store commands to the NVM device controller over the memory bus. The computer system in conjunction with the host processor can implement a block storage driver, and the NVM device in conjunction with the NVM device controller can be collectively viewed by the computer system as a block storage device. Because the NVM device controller includes at least one block window (such a block window is also referred to herein as an “aperture”) that defines at least one address range for accessing one or more blocks of the persistent data storable within the NVM device, the computer system can as exploit, with reduced la envy full capacity of the NVM device without being unduly constrained by physical addressing limits imposed by the host processor, or by limits imposed by an operating system (OS) executed by the host processor.
<figref idref="DRAWINGS">FIG. 1</figref> depicts an illustrative embodiment of an exemplary apparatus <b>100</b> for accessing at least one NVM device in a computer system, in accordance with the present application. As shown in <figref idref="DRAWINGS">FIG. 1</figref>, the apparatus <b>100</b> includes a host processor <b>101</b>, and one or more NVM device controllers <b>102</b>.<b>1</b>-<b>102</b>.<i>n </i>(also referred to herein as “NVM controllers”) communicably coupled to the host, processor <b>101</b> by one or more memory buses <b>103</b>.<b>1</b>-<b>103</b>.<i>n, </i>respectively As further shown in <figref idref="DRAWINGS">FIG. 1</figref>, one or more NVM devices can be communicably coupled to each of the NVM controllers <b>102</b>.<b>1</b>-<b>102</b>.<i>n. </i>For example, one or more NVM devices <b>104</b>.<b>1</b>-<b>104</b>.<i>m </i>can be communicably coupled to the NVM controller <b>102</b>.<b>1</b>, which, in turn, is communicably coupled to the host processor <b>101</b> via the memory bus <b>103</b>.<b>1</b>. Likewise, one or more NVM devices <b>106</b>.<b>1</b>-<b>106</b>.<i>p </i>can be communicably coupled to the NVM controller <b>102</b>.<i>n, </i>which, in turn, is communicably coupled to the host processor <b>101</b> via the memory bus <b>103</b>.<i>n. </i>
In the exemplary apparatus <b>100</b> of <figref idref="DRAWINGS">FIG. 1</figref>, the host processor <b>101</b> can he implemented using one or more processors, one or more multi-core processors, and/or any other suitable processor or processors. Further, each of the NVM devices <b>104</b>.<b>1</b>-<b>104</b>.<i>m, </i><b>106</b>.<b>1</b>-<b>106</b>.<i>p </i>can include non-volatile memory (NVM) such as NAND or NOR flash memory that uses a single bit per memory cell, multi-level cell (MLC) memory, for example, NAND flash memory with two bits per cell, polymer memory, phase-change memory (PCM), nanowire-based charge-trapping memory, ferroelectric transistor random access memory (FeTRAM), 3-dimensional cross-point memory, non-volatile memory that uses memory resistor (memristor) technology, or any other suitable non-volatile memory, NVM device, or persistent data storage medium.
<figref idref="DRAWINGS">FIG. 2</figref> depicts an exemplary NVM controller <b>202</b> that can be employed in the apparatus <b>100</b> of <figref idref="DRAWINGS">FIG. 1</figref>. As shown in <figref idref="DRAWINGS">FIG. 2</figref>, the NVM controller <b>202</b> includes at least one block window (aperture) <b>208</b>, a plurality of control registers <b>212</b>, an address translation component <b>214</b>, a media management translation table <b>216</b>, an optional encryption component <b>218</b>, and an optional decryption component <b>220</b>. As further shown in <figref idref="DRAWINGS">FIG. 2</figref>, an NVM device <b>204</b> is communicably coupled to the NVM controller <b>202</b>, which, in turn, is communicably coupleable to the host processor <b>101</b> (see <figref idref="DRAWINGS">FIG. 1</figref>) via a memory bus <b>203</b>.
In the exemplary NVM controller <b>202</b> of <figref idref="DRAWINGS">FIG. 2</figref>, the aperture <b>208</b> defines an address range for accessing one or more blocks of persistent data storable within the NVM device <b>204</b>. The plurality of control registers <b>212</b> can include a plurality of command registers <b>0</b>-q, a plurality of status registers <b>0</b>-q, and a plurality of memory-mapped base address registers <b>0</b>-q containing a. plurality logical base addresses, respectively. Each of the plurality of memory-mapped base address registers <b>0</b>, <b>1</b>, . . . q corresponds to a predetermined portion of the address range defined by the aperture <b>208</b>. Further, the plurality of status registers <b>0</b>-q are associated with the plurality of command registers <b>0</b>-q, respectively, and the status register/command register pairs <b>0</b>,<b>0</b>, <b>1</b>,<b>1</b>, . . . q,q are, in turn, associated with the plurality of memory-mapped base address registers <b>0</b>-q, respectively.
The address translation component <b>214</b> is operative to translate one or more logical addresses within the address range defined by the aperture <b>208</b> to actual physical addresses within a valid address range for a block write to (or a block read front) the NVM device <b>204</b>, based at least on information provided by the host processor <b>101</b>. The NVM controller <b>202</b> can employ the media management translation table <b>216</b> for performing wear leveling operations and/or enforcing endurance limits for the NVM device <b>204</b> (e.g., an NVM device including flash memory). The NVM controller <b>202</b> can further employ the encryption component <b>218</b> for encrypting block data to be written to the NVM device <b>204</b>, as well as the decryption component <b>220</b> for decrypting block data to be read from the NVM device <b>204</b>.
In an exemplary mode of operation, the host processor <b>101</b> (see <figref idref="DRAWINGS">FIG. 1</figref>) can access persistent data storable within the NVM device <b>204</b> (see <figref idref="DRAWINGS">FIG. 2</figref>) by issuing one or more memory load/store commands to the NVM controller <b>202</b> (see <figref idref="DRAWINGS">FIG. 2</figref>) over the memory bus <b>20</b>$ (see <figref idref="DRAWINGS">FIG. 2</figref>). In this exemplary mode of operation, the host processor <b>101</b> can configure the NVM controller <b>202</b> for performing a block write (BW) to the NVM device <b>204</b> by translating a specified BW address within its address space to a logical SW address within the address range defined by the aperture <b>208</b> (see <figref idref="DRAWINGS">FIG. 2</figref>). The logical BW address can be expressed in terms of a logical BW base address and a logical SW offset address. The host processor <b>101</b> can select an available aperture within the NVM controller <b>202</b> such as the aperture <b>208</b>) by addressing the respective aperture <b>208</b> directly over the memory bus <b>203</b>.
Having configured the NVM controller <b>202</b> for performing the desired block write operation to the NVM device <b>204</b>, the host processor <b>101</b> can issue a memory store command over the memory bus <b>203</b> to the NVM controller <b>202</b>. The memory store command provides at least the logical SW base address and the logical SW offset address, which defines a relative offset from the logical SW base address. The host processor <b>101</b> writes the memory store command to a selected one of the plurality of command registers <b>0</b>-q, based at least on the logical BW base/offset address provided via the memory store command. In response to the memory store command issued. by the host processor <b>101</b>, the NVM controller <b>202</b> selects the memory-mapped base address register <b>0</b>, <b>1</b>, . . . q associated with the status register/command register pair <b>0</b>,<b>0</b>, <b>1</b>,<b>1</b>, . . . q,q that includes the selected command register <b>0</b>, <b>1</b>, . . . q. Further, the NVM controller <b>202</b> receives block data to be written to the NVM device <b>204</b> at the relative offset from the logical SW base address within the address range of the aperture <b>208</b>.
The address translation component <b>214</b> (see <figref idref="DRAWINGS">FIG. 2</figref>) within the NVM controller <b>202</b> receives the logical base address contained in the selected base address register <b>0</b>,<b>1</b>, . . . , q, receives the block data received at the relative offset from the logical <b>8</b>W base address within the address range of the aperture <b>208</b>, and translates the logical base address and the logical BW offset address to an actual physical address of a block (the block <b>204</b><i>a</i>) within the NVM device <b>204</b>. The NVM controller <b>202</b> can check the translated address to determine, whether it conforms to a valid address range for a block write to the NVM device <b>204</b>. In the event the translated address does not conform to a valid address range for a block write to the NVM device <b>204</b>, the NVM controller <b>202</b> can set an error flag in the status register <b>0</b>, <b>1</b>, . . . , q associated with the selected command register <b>0</b>, <b>1</b>, . . . , q. In the event the translated address conforms to a valid address range for a block write to the NVM device <b>204</b>, the NVM controller <b>202</b> is successfully configured for performing the desired block, write operation to the NVM device <b>204</b>.
The NVM controller <b>202</b> can employ the media management translation table <b>216</b> to perform wear-leveling operations, and to enforce endurance limits for the NVM device <b>204</b>, as desired and/or required. The NVM controller <b>202</b> can further employ the encryption component <b>218</b> to encrypt the block data to be written to the block <b>204</b><i>a </i>of the NVM device <b>204</b>, as desired and/or required. The NVM controller <b>202</b> can then write the block data to the actual physical address of the block <b>204</b><i>a. </i>At the completion of the block write to the NVM device <b>204</b>, the host processor <b>101</b> can read, over the memory bus <b>203</b>, the status register <b>0</b>, <b>1</b>, . . . , q associated with the selected command register <b>0</b>, <b>1</b>, . . . , q to check the error status of the block write Operation.
In this exemplars mode of operation, the host processor <b>101</b> (see <figref idref="DRAWINGS">FIG. 1</figref>) can further configure the NVM controller <b>202</b> (see <figref idref="DRAWINGS">FIG. 2</figref>) for performing a block read (BR) from Me NVM device <b>204</b> (see <figref idref="DRAWINGS">FIG. 2</figref>) by translating a specified BR address within its address space to a logical BR address within the address range defined by the aperture <b>208</b>. The logical BR address can be expressed in terms of a logical BR base address and a logical BR offset address. As described herein with reference to the block write operation, the host processor <b>101</b> can select an available aperture within the NVM controller <b>202</b> (such as the aperture <b>208</b>) by addressing the respective aperture <b>208</b> directly over the memory bus <b>203</b>.
Having configured the NVM controller <b>202</b> for performing the desired block read operation from the NVM device <b>204</b>, the host processor <b>101</b> can issue a memory load command over the memory bus <b>203</b> to the NVM controller <b>202</b>. The memory load command provides at least the logical BR base address and the logical BR offset address, which defines a relative offset from the logical BR base address. The host processor <b>101</b> writes the memory load command to a selected one of the plurality of command registers <b>0</b>-q, based at least on the logical BR base/offset address provided via the memory load command. In response to the memory load command issued by the host processor <b>101</b>, the NVM controller <b>202</b> selects the memory-mapped base address register <b>0</b>, <b>1</b>, . . . , q associated with the status register/command register pair <b>0</b>,<b>0</b>, <b>1</b>,<b>1</b>, . . . , q,q that includes the selected command register <b>0</b>, <b>1</b>, . . . , q.
The address translation component <b>214</b> receives the logical base address from the selected base address register <b>0</b>, <b>1</b>, . . . , q, receives the logical BR offset address provided via the memory load command, and translates the logical base address and logical BR offset address to an actual physical address of a block (e.g., the block <b>204</b><i>a</i>) within the NVM device <b>204</b>. The NVM controller <b>202</b> can check the translated address to determine whether it conforms to a valid address range for a block read from the NVM device <b>204</b>. In the event the translated address does not conform to is valid address range for a block read from the NVM device <b>204</b>, the NVM controller <b>202</b> can set an error flag in the status register <b>0</b>, <b>1</b>, . . . , q associated with the selected command register <b>0</b>, <b>1</b>, . . . , q. In the event the translated address conforms to a valid address range for a block read from the NVM device <b>204</b>, the NVM controller <b>202</b> is successfully configured for performing the desired block read operation from the NVM device <b>204</b>.
The NVM controller <b>202</b> can employ the decryption component <b>220</b> to decrypt the block data to be read from the block <b>204</b><i>a </i>of the NVM device <b>204</b>, as desired and/or required.
The NVM controller <b>202</b> can then read the block data from the actual physical address of the block <b>204</b><i>a. </i>At the completion of the block read from the NVM device <b>204</b>, the host processor <b>101</b> can read, over the memory bus <b>203</b>, the status register <b>0</b>, <b>1</b>, . . . , q associated with the selected command register <b>0</b>, <b>1</b>, . . . , q to check the error status of the block read operation.
By allowing the host processor <b>101</b> to access persistent data storable within the
NVM device <b>204</b> by issuing one or more memory load/store commands to the NVM controller <b>202</b> over the memory bus <b>203</b>, in which the NVM controller <b>202</b> includes the aperture <b>208</b> that defines an address range for accessing one or more blocks of the persistent data storable within the NVM device <b>204</b>, a computer system can advantageously exploit, with reduced latency, the full capacity of the NVM device <b>204</b> without being unduly constrained by physical addressing limits of the host processor <b>101</b>, or by limits imposed by the OS executed by the host processor <b>101</b>.
The operation of an NVM controller for translating one or more logical addresses within an address range defined by an aperture to actual physical addresses of one or more blocks within an NVM device will he further understood with reference to the following illustrative example and <figref idref="DRAWINGS">FIG. 3</figref>. As shown in <figref idref="DRAWINGS">FIG. 3</figref>, an NVM controller <b>302</b> can include a Monk window (aperture) <b>308</b>, a plurality of control registers <b>312</b> including a plurality of command registers <b>0</b>-<b>31</b>, a plurality of status registers <b>0</b>-<b>31</b>, and a plurality of memory-Mapped base address registers <b>0</b>-<b>31</b> containing a plurality logical base addresses, respectively, an address translation component <b>314</b>, and a media management translation table <b>316</b>. Each of the plurality of memory-mapped base address registers <b>0</b>, <b>1</b>, . . . , <b>31</b> corresponds to a predetermined portion of the address range defined by the aperture <b>308</b>. Further, the plurality of status registers <b>0</b>-<b>31</b> are associated with the plurality of command registers <b>0</b>-<b>31</b>, respectively, and the status register/command register pairs <b>0</b>,<b>0</b>, <b>1</b>,<b>1</b>, . . . , <b>31</b>,<b>31</b> are, in turn, associated with the plurality of memory-mapped base address registers <b>0</b>-<b>31</b>, respectively.
In this illustrative example, the aperture <b>308</b> is configured to support a block size of 256 kilobytes (KB). It is noted, however, that the aperture <b>308</b> may alternatively be configured to support a block size of 16 KB, 64 KB, 128 KB, 512 KB, 1 megabyte (MB), 2 MB, 4 MB, or any other suitable block size. Each sub-block within the block size of 256 KB is defined herein as 1/32 of the block size of 256 KB (i.e., 8 KB), or any other suitable sub-block size. Each of the plurality of memory-mapped base address registers <b>0</b>-<b>31</b> is therefore configured to correspond to 8 KB of the address range 0-256 KB) defined by the aperture <b>308</b>. Specifically, the base address register <b>0</b> is configured to contain a 0<sup>th </sup>logical base address covering 0-8 KB of the address range defined b the aperture <b>308</b>, the base address register <b>1</b> is configured to contain a logical base address covering 8-16 KB of the address range defined by the aperture <b>308</b>, the base address register <b>2</b> is configured to contain a 2<sup>nd </sup>logical base address covering 16-24 KB of the address range defined by the aperture <b>308</b>, and so on up to the base address register <b>31</b>, which is configured to contain a logical base address covering 248-256 KB of the address range defined by the aperture <b>308</b>.
With reference to this illustrative example, a memory load/store command issued by the host processor <b>101</b> (see <figref idref="DRAWINGS">FIG. 1</figref>) to the NVM controller <b>302</b> (see <figref idref="DRAWINGS">FIG. 3</figref>) over a memory bus <b>303</b> (see <figref idref="DRAWINGS">FIG. 3</figref>) can provide a logical base address and a logical offset address for use in writing block data to or reading block data from, a block within the NVM device <b>204</b> (see <figref idref="DRAWINGS">FIG. 2</figref>). Such a logical base address can be represented by the logical base address “X”, and therefore the address range defined by the aperture <b>308</b> can be expressed as ranging from the logical base address X to the logical address X+256 KB (see <figref idref="DRAWINGS">FIG. 3</figref>). Further, an exemplary relative offset from the logical base address X can be expressed as “8 KB” (plus a cache line offset, if any), or an other suitable relative offset. Such a cache line can correspond to 64 bytes (B), or any other suitable number of bytes.
For example, the host processor <b>101</b> can configure the N \TM controller <b>302</b> for performing a block write. (BW) to the NVM device <b>204</b> by issuing an exemplary command that conforms to the following format: <ul id="ul0001" list-style="none"><li id="ul0001-0001" num="0000"><ul id="ul0002" list-style="none"><li id="ul0002-0001" num="0033">Store 0x0000 1200 0008 1000 to 0x8804 1000, <br /> in which “0x0000 1200 0008 1000” corresponds to the block address that is to he accessed through the, aperture <b>308</b>, “0x8804 0000” corresponds to the base address of the command registers <b>0</b>-<b>31</b>, and “0x1000” is the offset corresponding to the command register <b>1</b>, which is associated with the base address register <b>1</b>. The host processor <b>101</b> can hen access the block address by issuing one or more memory load/store commands, specifying one or more accesses to the following: </li><li id="ul0002-0002" num="0034">0x0000 0000 4800 2000, <br /> in which “0x0000 0000 4800 0000” corresponds to the logical base address “X” of the aperture <b>308</b>, and “0x2000” corresponds to the 1<sup>st </sup>logical base a(dress contained in the base address register <b>1</b>. As noted above, in this illustrative example, the 1<sup>st </sup>logical base address, namely, 0x2000, covers 8-16 KB of the address range define by the aperture <b>308</b>. </li></ul></li></ul>
Accordingly, the memory load/store command issued by the host processor <b>101</b> to the NVM controller <b>302</b> over the memory bus <b>303</b> can provide a logical base/offset address that can be represented by the term “X+8 KB” (plus a cache line offset, if any), which conforms to the address range, “X” to “X+256 KB”, defined by the aperture <b>308</b>. The host processor <b>101</b> can write the memory load/store command to a selected one of the plurality or command registers <b>0</b>-<b>31</b>, e.g., the command register <b>1</b>, based at least on the logical base offset address, X+8 KB (plus a cache line offset if any), provided via the memory load/store command.
The address translation component <b>314</b> receives the 1<sup>st </sup>logical base address from the selected base address register <b>1</b>, receives an indication of the cache line offset, if any, from the aperture <b>308</b>, and translates the 1<sup>st </sup>logical base address and the cache line offset, if any, to the actual physical address of the block within the NVM device <b>204</b>. The NVM controller <b>302</b> can then write the block data to, or read the block data from, the actual physical address of the respective block.
An exemplary method of operating an NVM controller for writing block data to, or reading block data from, one or more blocks within NVM device is described below with reference to <figref idref="DRAWINGS">FIG. 4</figref>. As depicted in block <b>402</b>, a memory load/store command is received at the NVM controller over a memory bus, in which the memory load/store command includes a logical address conforming to at least a portion of an address range defined by a block window (aperture) included in the NVM controller. As depicted in block <b>404</b>, a representation of the logical address is translated to an actual physical address of the block within the NVM device. As depicted in block <b>406</b>, a determination is made as to whether the translated address conforms to a valid address range for accessing the block within the NVM device. In the event the translated address conforms to a valid address range for accessing the block within the NVM device, the block data is written to, or read from, the actual physical address of the block within the e NVM device, as depicted in block <b>408</b>. Otherwise, a status error flag is set, as depicted in block <b>410</b>, and the exemplary method of operating the NVM controller ends.
<figref idref="DRAWINGS">FIG. 5</figref> depicts an exemplary computer system <b>500</b> that can be configured to implement apparatus and methods of the claimed invention. As shown in <figref idref="DRAWINGS">FIG. 5</figref>, the computer system. <b>500</b> can include at least one host processor <b>502</b> communicably coupled to at least one memory <b>504</b> by a system bus <b>514</b>, and communicably coupled to an NVM device controller <b>520</b> by a memory bus <b>515</b>. The computer system <b>500</b> can further include a keyboard <b>516</b> and a display <b>518</b> communicably coupled to the system bus <b>514</b>, and at least one NVM device <b>512</b> communicably coupled to the NVM device controller <b>520</b>. The NVM device controller <b>520</b> includes at least one processor <b>520</b><i>a </i>operative to execute at least one program out of at least one non-transitory storage medium, such as a memory <b>520</b><i>b </i>or any other suitable storage medium, to access persistent data storable in one or more blocks within the NVM device <b>512</b>. The host processor <b>502</b> is operative to execute instructions stored on at least one non-transitory storage medium, such as the memory <b>504</b> or any other suitable storage medium, for performing various processes within the computer system <b>500</b>, including one or more processes for controlling operations of the NVM device controller <b>520</b> The memory <b>504</b> can include one or more Memory components such as a volatile memory <b>510</b>, which may be implemented as dynamic random access memory (DRAM) or any other suitable volatile memory. The memory <b>504</b> can also be configured to store an operating system (OS) <b>506</b> executable by the host processor <b>502</b>, as well as one or more applications <b>508</b> that may be run by the OS <b>506</b>. In response to a request generated by one of the applications <b>508</b>, the host processor <b>502</b> can execute the OS <b>506</b> to perform desired data write/read operations on the volatile memory <b>510</b>, and/or desired block write/read operations on the NVM device <b>512</b> via the NVM device controller <b>520</b>.
It is noted that <figref idref="DRAWINGS">FIG. 5</figref> illustrates an exemplary embodiment of the computer system <b>500</b>, and that other embodiments of the computer system <b>500</b> may include more apparatus components, or fewer apparatus components, than the apparatus components illustrated in <figref idref="DRAWINGS">FIG. 5</figref>. Further, the apparatus components may be arranged differently than as illustrated in <figref idref="DRAWINGS">FIG. 5</figref>. For example, in some embodiments, the NVM device <b>512</b> may be located at a remote site accessible to the computer system <b>500</b> via the Internet or any other suitable network. In addition, functions performed by various apparatus components contained in other embodiments of the computer system <b>500</b> may be distributed among the respective components differently than as described herein.
Having described the above exemplary embodiments of the disclosed apparatus and methods, other alternative embodiments or variations may be made. For example, it was described herein that an NVM device controller can include at least one block window (aperture) that defines at least one address range for accessing persistent data storable in one or more blocks within an NVM device. In an alternative embodiment, such an aperture can be implemented as a block window for reading block data from the NVM device, a block window for writing block data to the NVM device, and/or a write combining buffer for writing data to the NVM device with atomic write support.
It was also described herein that an NVM device controller can be configured to perform a block write operation to an NVM device by translating a logical block write address within an address range defined by an aperture to an actual physical address of a block within the NVM device. In an alternative embodiment, such a block write operation can be performed to copy data from volatile in such as dynamic random access memory (DRAM) to the NVM device over a memory bus with reduced latency.
It was further described herein that a host processor could access persistent data storable within an NVM device by issuing one or more memory load/store commands to an NVM device controller over a memory bus. As depicted in <figref idref="DRAWINGS">FIG. 6</figref><i>a, </i>in one embodiment, such an NVM device controller <b>620</b> can include a processor <b>609</b>, as well as at least one payload data storage <b>608</b> (also referred to herein as a/the “payload mailbox”), at least one command register <b>510</b>.<b>1</b>, and at least one status register <b>610</b>.<b>2</b>, which collectively can be employed to provide a cacheable, bidirectional, memory-mapped access path between the host processor <b>101</b> (see <figref idref="DRAWINGS">FIG. 1</figref>) and the NVM device controller <b>620</b> over a memory bus <b>603</b>. For example, the NVM device controller <b>620</b> can be incorporated in a DIMM, a double data rate (DDR) DIMM, and/or a non-volatile (NV) DIMM. In this embodiment, the host processor <b>101</b> can issue commands and access payload data and status information (e.g., the status of command execution) over the memory bus <b>603</b> via a command interface, which is implemented in the NVM device controller <b>620</b> by the command register <b>610</b>.<b>1</b> (also referred to herein as the “mailbox command register”), the status register <b>610</b>.<b>2</b> (also referred to herein as the “mailbox status register”), and at least one address range <b>607</b> (also referred to herein as the “mailbox address range”) defined by the payload mailbox <b>608</b>. The host processor <b>101</b> can issue such commands, as well as access such payload data and status information, via such a command interface using cacheable memory load/store commands issued in-band over the bidirectional access path implemented by the memory bus <b>603</b>, which is configured to support slave operations performed by the NVM device controller <b>620</b>.
<figref idref="DRAWINGS">FIG. 6<i>b </i></figref>depicts an exemplary op-code format <b>660</b> associated with a respective memory load/store command, an exemplary write protect bit <b>662</b> associated with the respective memory load/store command, and an exemplary input payload format <b>664</b> for use by the host processor <b>101</b> (see <figref idref="DRAWINGS">FIG. 1</figref>) in issuing the respective memory load/store command, using the mailbox command register <b>610</b>.<b>1</b> and the mailbox address range <b>607</b> of <figref idref="DRAWINGS">FIG. 6</figref><i>a. </i>As shown in <figref idref="DRAWINGS">FIG. 6</figref><i>b, </i>the op-code format <b>660</b> can include a command code <b>660</b>.<b>1</b> (e.g., memory load command, memory store command), a payload type <b>660</b>.<b>2</b> (e.g., small payload, large payload), and an interrupt type <b>660</b>.<b>3</b> (e.g., low priority, high priority).
<figref idref="DRAWINGS">FIG. 6<i>c </i></figref>depicts an exemplary status code format <b>670</b> associated with a respective memory load/store command, and an exemplary output payload format <b>672</b> for use by the host processor <b>101</b> (see <figref idref="DRAWINGS">FIG. 1</figref>) in monitoring completion of the execution of the respective memory load/store command, using the mailbox status register <b>610</b>.<b>2</b> and the mailbox address range <b>607</b> of <figref idref="DRAWINGS">FIG. 6</figref><i>a. </i>As shown in <figref idref="DRAWINGS">FIG. 6</figref><i>c, </i>the status code format <b>670</b> can include a status code <b>670</b>.<b>1</b> (e.g., command failure status code, command success results, error status), a command progress status <b>670</b>.<b>2</b> (e.g., command has started, command has completed, command is aborted), and a command success/failure status <b>670</b>.<b>3</b> (e.g., command was successful, command has failed, error flag).
An exemplary method of issuing a memory load/store command and monitoring completion of the memory load/store command, by a host processor using a mailbox, is described below with reference to <figref idref="DRAWINGS">FIGS. 7<i>a</i></figref>-<b>7</b><i>b, </i>as well as <figref idref="DRAWINGS">FIGS. 6<i>a</i></figref>-<b>6</b><i>c. </i>In one embodiment, this exemplary method may be initiated by a system management interrupt (SMI), and may therefore be implemented in a system management mode (SMM) as an OS independent mechanism.
As depicted in block <b>702</b> (see <figref idref="DRAWINGS">FIG. 7<i>a</i></figref>), a determination is made, by the host processor <b>101</b>, as to whether the memory load/store command to be issued by the host processor <b>101</b> requires data (e.g., block data) to be sent to the NVM device controller <b>620</b>. In the event the memory load/store command requires data to he sent to the NVM controller <b>620</b>, such data is sent, by the host processor <b>101</b> over the memory bus <b>603</b> using the input payload format <b>664</b>, to at least a portion of the mailbox address range <b>607</b> defined by the payload mailbox <b>608</b>, as depicted in block <b>704</b>. As depicted in block <b>706</b> the memory load/store command is issued, by the host processor <b>101</b> over the memory bus <b>603</b> using the op-code format <b>660</b>, to the NVM device controller <b>620</b>, by writing the memory load/store command to the mailbox command register <b>610</b>.<b>1</b>. As further depicted in block <b>706</b>, the write protect bit <b>662</b> is set, by the host processor <b>101</b>, to conform to a predetermined logic level (e.g., the write protect bit <b>662</b> may be set to a logical high level). As depicted in block <b>708</b>, in response to the write protect hit <b>662</b> being set to a logical high level by the host processor <b>101</b>, an SMI is generated by the NVM device controller <b>620</b> and subsequently handled by the SMM of the processor <b>609</b>. For example, the SMM may be embodied as one or more basic input/output system (BIOS) services of the processor <b>609</b>. It is noted that, once the write protect bit <b>662</b> is set by the host processor <b>101</b>, the NVM device controller <b>620</b> write-protects one or more registers for the input payload from being further written to by the host processor <b>101</b>.
While the NVM device controller <b>620</b> executes the memory load/store command, the input payload is copied by the NVM device controller <b>620</b> to its internal memory, the mailbox status register <b>610</b>.<b>2</b> is updated by the NVM device controller <b>620</b> using the status code format <b>670</b> to indicate that the input payload is being processed (e.g., the command progress status <b>670</b>.<b>2</b> indicates that the command has started), and the write protect bit <b>662</b> is cleared by the NVM device controller <b>620</b>, as depicted in block <b>710</b>. It is noted that, once the write protect bit <b>662</b> is cleared by the NVM device controller <b>620</b>. the input payload register(s) are no longer write-protected from being written to by the host processor <b>101</b>, thereby allowing the host processor <b>101</b> to issue another command, over the memory bus <b>603</b> to the NNW device controller <b>620</b> using the op-code format <b>660</b>, before the execution of the current command has completed.
As depicted in block <b>712</b>, the status of the execution of the memory load/store command is monitored by the host processor <b>101</b> by reading the mailbox status register <b>610</b>.<b>2</b>, using the status code format <b>670</b>. In the event the mailbox status register <b>610</b>.<b>2</b> has been updated by the NVM device controller <b>620</b> to indicate that the execution of the memory load/store command has completed (e.g., the command progress status <b>670</b>.<b>2</b> indicates that the command has completed), a determination is made, by the host processor <b>101</b> using the output payload format <b>672</b>, as to whether the memory load/store command requires data (e.g., block data) to be accessed from the NVM device <b>204</b> via the NVM device controller <b>620</b>, as depicted in block <b>714</b>. In the event the memory load/store command requires data to be accessed by the host processor <b>101</b> via the NVM device controller <b>620</b>, such data is accessed, by the host processor <b>101</b> over the memory bus <b>603</b> using the output payload format <b>672</b>, from at least a portion of the mailbox address range <b>607</b> defined by the payload mailbox <b>608</b>, as depicted in block <b>716</b>. As depicted in block <b>718</b>, a determination is made, by the host processor <b>101</b>, as to whether the execution of the memory load/store command has completed successfully (e.g., the command progress status <b>670</b>.<b>2</b> indicates that the command was successful). In the event the memory load/store command has completed successfully, the data accessed using the output payload format <b>672</b> is processed by the host processor <b>101</b>, as depicted in block <b>720</b>. As depicted in block <b>722</b>, upon completion of the processing of the data by the host processor <b>101</b>, the processor <b>609</b> within the NVM device controller <b>620</b> exits the SMM.
Although illustrative examples of various embodiments of the disclosed subject matter are described, herein, one of ordinary skill in the relevant art will appreciate that other manners of implementing the disclosed subject matter may alternatively be used. In the preceding description, various aspects of the disclosed subject matter have been described. For purposes of explanation, specific systems, apparatus, methods, and configurations were set forth in order to provide a thorough understanding of the disclosed subject matter. However, it will be apparent to one skilled in the relevant art having the benefit of this disclosure that the subject matter may he practiced without the specific details described herein. In other instances, well-known features, components, and/or modules were omitted, simplified, or combined in order not to obscure the disclosed subject matter.
It is noted that the term “operative to”, as employed herein, means that a corresponding device, system, apparatus, etc., is able to operate, or is adapted to operate, for its desired functionality when the device, system, or apparatus is in its powered-on state. Moreover, various embodiments of the disclosed subject matter may be implemented in hardware, firmware, software, or some combination thereof, and may be described by reference to, or in conjunction with, program code such as instructions, functions, procedures, data structures, logic, application programs, design representations, and/or formats for simulation, emulation, and/or fabrication of a design, which when accessed by a machine results in the machine performing tasks, defining abstract data types or low-level hardware contexts, or producing a result.
It is further noted that the techniques illustrated in the drawing figures can be implemented using code and/or data. stored and/or executed on one or more computing de ices, such as general-purpose computers or computing devices. Such computers or computing devices store and communicate code and/or data (internally and/or with other computing devices over a network) using machine-readable media such as machine readable storage media (e.g., magnetic disks, optical disks, random access memory (RAM), read only memory (ROM), flash memory devices, phase-change memory) and machine readable communication media (e.g., electrical, optical, acoustical, or other form of propagated signals such as carrier waves, infrared signals, digital signals, etc.).
No element, operation, or instruction employed herein should be construed as critical or essential to the application unless explicitly described as such. Also, as employed herein, the article “a” is intended to include one or more items. Where only one item is intended, the term “one” or similar language is employed. Further, the phrase “based on” is intended to mean “based, at least in part, on” unless explicitly stated otherwise.
It is intended that the invention not be limited to the particular embodiments disclosed herein, but that the invention will include any and all particular embodiments and equivalents falling within the scope of the following appended claims.
Contents3
11 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5 Sheet 6 Sheet 7 Sheet 8 Sheet 9 Sheet 10 Sheet 11
Every citation, both ways
| Document | Relation | Office | Cited during |
|---|---|---|---|
| US10891239B2 | Cited by | United States of America | Applicant |
| US10402112B1 | Cited by | United States of America | Applicant |
| US11042307B1 | Cited by | United States of America | Applicant |
| US10503409B2 | Cited by | United States of America | Applicant |
| US11385833B2 | Cited by | United States of America | Applicant |
| US11416365B2 | Cited by | United States of America | Applicant |
| US10564856B2 | Cited by | United States of America | Applicant |
| US11556277B2 | Cited by | United States of America | Applicant |
| US11734115B2 | Cited by | United States of America | Applicant |
| US10664181B2 | Cited by | United States of America | Applicant |
| US11494115B2 | Cited by | United States of America | Applicant |
| US10523743B2 | Cited by | United States of America | Applicant |
| US11200337B2 | Cited by | United States of America | Applicant |
| US11200114B2 | Cited by | United States of America | Applicant |
| US11422931B2 | Cited by | United States of America | Applicant |
| US11068409B2 | Cited by | United States of America | Applicant |
| US11768709B2 | Cited by | United States of America | Applicant |
| US10795586B2 | Cited by | United States of America | Applicant |
| US11816043B2 | Cited by | United States of America | Applicant |
| US10908960B2 | Cited by | United States of America | Applicant |
| US2018129437A1 | Cited by | United States of America | Search report |
| US11132291B2 | Cited by | United States of America | Applicant |
| US11036431B2 | Cited by | United States of America | Applicant |
| US10509575B2 | Cited by | United States of America | Search report |
| US11675714B2 | Cited by | United States of America | Applicant |
| US11507499B2 | Cited by | United States of America | Applicant |
| US10642757B2 | Cited by | United States of America | Applicant |
| WO2018036394A1 | Cited by | World Intellectual Property Organization (WIPO) | International search |
| US10761983B2 | Cited by | United States of America | Search report |
| US10923156B1 | Cited by | United States of America | Applicant |
| US11354200B2 | Cited by | United States of America | Applicant |
| US10698686B2 | Cited by | United States of America | Applicant |
| US10558366B2 | Cited by | United States of America | Applicant |
| US2017206030A1 | Cited by | United States of America | Search report |
| US11144250B2 | Cited by | United States of America | Applicant |
| US10552070B2 | Cited by | United States of America | Applicant |
| US10303601B2 | Cited by | United States of America | Applicant |
| US11169873B2 | Cited by | United States of America | Applicant |
| US10496548B2 | Cited by | United States of America | Applicant |
| US11061751B2 | Cited by | United States of America | Applicant |
| US11263132B2 | Cited by | United States of America | Applicant |
| US11150986B2 | Cited by | United States of America | Applicant |
| US11461262B2 | Cited by | United States of America | Applicant |
| WO2020051531A1 | Cited by | World Intellectual Property Organization (WIPO) | International search |
| US2019146918A1 | Cited by | United States of America | Search report |
| US11106490B2 | Cited by | United States of America | Applicant |
| US2019073132A1 | Cited by | United States of America | Search report |
| CN113515414A | Cited by | China | Search report |
| US10496829B2 | Cited by | United States of America | Applicant |
| US10871921B2 | Cited by | United States of America | Applicant |
| US10789011B2 | Cited by | United States of America | Applicant |
| US11061735B2 | Cited by | United States of America | Applicant |
| US11372774B2 | Cited by | United States of America | Applicant |
| US11126561B2 | Cited by | United States of America | Applicant |
| US10642522B2 | Cited by | United States of America | Applicant |
| US10921992B2 | Cited by | United States of America | Applicant |
| US11567817B2 | Cited by | United States of America | Applicant |
| CN111095223A | Cited by | China | Search report |
| US11461173B1 | Cited by | United States of America | Applicant |
| US10977122B2 | Cited by | United States of America | Applicant |
| US11099782B2 | Cited by | United States of America | Applicant |
| US11218165B2 | Cited by | United States of America | Applicant |
| US10496437B2 | Cited by | United States of America | Applicant |
| US10976931B2 | Cited by | United States of America | Applicant |
| US10761751B2 | Cited by | United States of America | Applicant |
| US11783876B2 | Cited by | United States of America | Applicant |
| US2017177496A1 | Cited by | United States of America | Pre-grant |
| US11476874B1 | Cited by | United States of America | Applicant |
| US11354233B2 | Cited by | United States of America | Applicant |
| US10996886B2 | Cited by | United States of America | Applicant |
| US10852948B2 | Cited by | United States of America | Applicant |
| US11281575B2 | Cited by | United States of America | Applicant |
| US11289137B2 | Cited by | United States of America | Search report |
| US11080210B2 | Cited by | United States of America | Applicant |
| US10423508B2 | Cited by | United States of America | Applicant |
| US10067879B2 | Cited by | United States of America | Search report |
| US11449455B2 | Cited by | United States of America | Applicant |
| WO2019050613A1 | Cited by | World Intellectual Property Organization (WIPO) | International search |
| US2019147923A1 | Cited by | United States of America | Search report |
| US11487465B2 | Cited by | United States of America | Applicant |
| US11093145B2 | Cited by | United States of America | Applicant |
| US11579806B2 | Cited by | United States of America | Applicant |
| US10872622B1 | Cited by | United States of America | Applicant |
| US11726699B2 | Cited by | United States of America | Applicant |
| US11693588B2 | Cited by | United States of America | Search report |
| US11379127B2 | Cited by | United States of America | Applicant |
| US11379155B2 | Cited by | United States of America | Applicant |
| US10359954B2 | Cited by | United States of America | Applicant |
| US10592164B2 | Cited by | United States of America | Applicant |
| US11782843B2 | Cited by | United States of America | Applicant |
| US2019146918A1 | Cited by | United States of America | Search report |
| US11556462B2 | Cited by | United States of America | Applicant |
| US10635602B2 | Cited by | United States of America | Applicant |
| US10877898B2 | Cited by | United States of America | Applicant |
| US11221956B2 | Cited by | United States of America | Search report |
| US10678443B2 | Cited by | United States of America | Applicant |
| US10831404B2 | Cited by | United States of America | Applicant |
| US10303241B2 | Cited by | United States of America | Applicant |
| US10922234B2 | Cited by | United States of America | Applicant |
| US10884926B2 | Cited by | United States of America | Applicant |
8 members in 5 offices
Priority claims4
| Document | Office | Kind | Date |
|---|---|---|---|
| 2013061841 | United States of America | W | |
| 2013061841 | United States of America | W | |
| PCTUS2013061841 | – | – | – |
| WO2013US61841 | – | – | – |
Members8
| Document | Office | Kind | |
|---|---|---|---|
| WO2015047266A1 | World Intellectual Property Organization (WIPO) | A1 | |
| KR20160024995A | Republic of Korea | A | |
| CN105706071A | China | A | |
| EP3049944A1 | European Patent Office (EPO) | A1 | |
| US2016232103A1 | United States of America | A1 | |
| EP3049944A4 | European Patent Office (EPO) | A4 | |
| KR101842621B1 | Republic of Korea | B1 | |
| EP3049944B1 | European Patent Office (EPO) | B1 |
82 transactions on the USPTO file
Abandoned after 2 non-final rejections, 2 final rejections and 1 RCE.
- Non-final rejections
- 2
- Final rejections
- 2
- RCEs
- 1
- Appeals
- 0
Over time
Point at a mark for the transactionTransactions
| Event | Code | |
|---|---|---|
| Mail Abandonment for Failure to Respond to Office ActionAbandonedMABN2 | MABN2 | |
| Aband. for Failure to Respond to O. A.AbandonedABN2 | ABN2 | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Email NotificationEML_NTR | EML_NTR | |
| Mail Advisory Action (PTOL - 303)MCTAV | MCTAV | |
| Advisory Action (PTOL-303)CTAV | CTAV | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Final ActionA.NE | A.NE | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Email NotificationEML_NTR | EML_NTR | |
| Filing Receipt - CorrectedFLRCPT.C | FLRCPT.C | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Final Rejection (PTOL - 326)Final rejectionMCTFR | MCTFR | |
| Final RejectionFinal rejectionCTFR | CTFR | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Disposal for a RCE / CPA / R129AbandonedABN9 | ABN9 | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Request for Continued Examination (RCE)RCEX | RCEX | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Workflow - Request for RCE - BeginBRCE | BRCE | |
| Email NotificationEML_NTR | EML_NTR | |
| Mail Advisory Action (PTOL - 303)MCTAV | MCTAV | |
| Interview Summary - Examiner Initiated - TelephonicEXET | EXET | |
| After Final Consideration Program Additional Consideration and/or updated searchAFAC | AFAC | |
| Advisory Action (PTOL-303)CTAV | CTAV | |
| Email NotificationEML_NTR | EML_NTR | |
| Email NotificationEML_NTR | EML_NTR | |
| Filing Receipt - ReplacementFLRCPT.R | FLRCPT.R | |
| Change in Power of Attorney (May Include Associate POA)PA.. | PA.. | |
| Correspondence Address ChangeC.AD | C.AD | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| PILOT- Request for After Final Consideration ProgramRAFC | RAFC | |
| Response after Final ActionA.NE | A.NE | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Final Rejection (PTOL - 326)Final rejectionMCTFR | MCTFR | |
| Final RejectionFinal rejectionCTFR | CTFR | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Request for Extension of Time - GrantedXT/G | XT/G | |
| Email NotificationEML_NTR | EML_NTR | |
| Application ready for PDX access by participating foreign officesCCRDY | CCRDY | |
| PG-Pub Issue NotificationPG-ISSUE | PG-ISSUE | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Application Is Now CompleteCOMP | COMP | |
| Application Dispatched from OIPEOIPE | OIPE | |
| Email NotificationEML_NTR | EML_NTR | |
| Email NotificationEML_NTR | EML_NTR | |
| Notice of DO/EO Acceptance MailedM903 | M903 | |
| Filing ReceiptFLRCPT.O | FLRCPT.O | |
| Sent to Classification ContractorPGPC | PGPC | |
| FITF set to YES - revise initial settingFTFS | FTFS | |
| Reference capture on IDSRCAP | RCAP | |
| Information Disclosure Statement (IDS) FiledM844 | M844 | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Incoming Letter Pertaining to the DrawingsLTDR | LTDR | |
| Preliminary AmendmentA.PE | A.PE | |
| 371 Completion Date371COMP | 371COMP | |
| Patent Term Adjustment - Ready for ExaminationPTA.RFE | PTA.RFE | |
| Applicants have given acceptable permission for participating foreignAPPERMS | APPERMS | |
| Cleared by OIPE CSRL194 | L194 | |
| Entity status set to undiscounted (initial default setting or status change)BIG. | BIG. | |
| Initial Exam Team nnIEXX | IEXX |
2 legal events, as the office reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | |
|---|---|---|
| Information on status: application discontinuationABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTIONSTCB | STCB | |
| AssignmentAS | AS |
Numbers
- Publication
- 20160232103
- Publication, DOCDB
- 2016232103
- Publication, EPODOC
- US2016232103
- Application
- 14127553
- Application, DOCDB
- 201314127553
- Application, EPODOC
- US201314127553
Titles
- English
- BLOCK STORAGE APERTURES TO PERSISTENT MEMORY
Classification
- CPC, 17
- G06F12/0246
- G06F12/10
- G06F12/1408
- G06F2212/202
- G06F3/0622
- G06F12/1441
- G06F2212/7201
- G06F3/061
- G06F2212/402
- G06F3/0659
- G06F2212/1052
- G06F3/0679
- G06F13/16
- G06F13/1668
- G06F11/0772
- G06F11/073
- G06F2212/2022
- IPC, 5
- G06F12 10
- G06F11 07
- G06F13 16
- G06F12 14
- G06F3 06
- USPC, 1
- 001001000