A move engine and operating system transparently reconfigure physical memory to accomplish addition, subtraction, or replacement of a memory module. The operating system stores FROM and TO real addresses in unique fields in memory that are used to virtualize the physical address of the memory module being reconfigured and provide the reconfiguration in real-time through the use of hardware functionality and not software. Using the FROM and TO real addresses to select a source and a target, the move engine copies the contents of the memory module to be removed or reconfigured into the remaining or inserted memory module. Then, the real address associated with the reconfigured memory module is re-assigned to the memory module receiving the copied contents, thereby creating a virtualized physical mapping from the addressable real address space being utilized by the operating system into a virtual physical address space. During the process of moving the memory contents, the operating system stalls. Write memory requests addressed to the real address space currently associated with the sourcing memory module indicated by either the FROM or TO real address space. As will be appreciated, a memory module can be inserted, removed or replaced in physical memory without the operating system having to stop all memory operations in the memory to accomplish the physical memory change.
|
6. A method of data processing within a data processing system, wherein the data processing system including a processor device for generating memory accesses containing physical addresses associated with memory locations of a physical memory system for reading and writing of data thereto, the physical memory system including a plurality of memory controllers, each responding to memory accesses requested by the processor device by writing and reading memory blocks stored within one or more memory modules coupled thereto, the method comprising:
setting a first field and a second field stored in the physical memory system to indicate a first real address and a second real address corresponding to a first and a second memory module, respectively, the first and second memory modules being coupled to a first and a second memory controller, respectively;
copying the plurality of memory blocks from the first memory module to the second memory module based on the first real address and the second real address;
after completing the copying step, configuring the first and second memory controllers to respond only to memory accesses addressed to the second real address; and
removing the first memory module from the physical memory system following the configuring step, and wherein the first real address is within a current addressable space for the physical memory system.
10. A data processing system comprising:
a physical memory system having a plurality of memory modules for storing data as a plurality of memory blocks, each memory block comprising contiguous bytes of physical memory;
a plurality of memory controllers, wherein each memory controller of the plurality of memory controllers has one or more memory modules of the plurality of memory modules coupled thereto, and wherein each memory controller of the plurality of memory controllers responds to memory accesses by writing and reading memory blocks stored within the one or more of the memory modules coupled thereto; and
a plurality of processor devices for generating memory accesses containing real addresses associated with memory locations of the physical memory system for reading and writing of data thereto;
a first field within the physical memory system storing a first real address corresponding to a first memory module of the plurality of memory modules coupled thereto, wherein a first memory controller coupled to the first memory module is programmed to respond to memory requests addressed to the first real address, and a second field within the physical memory system storing a second real address corresponding to a second memory module of the plurality of memory modules coupled thereto, wherein a second memory controller coupled to the second memory module is programmed to respond to memory requests addressed to the second real address;
a move engine that, in response to a notification that a configuration of the first and second memory modules is being modified, copies the plurality of memory blocks from the first memory module to the second memory module based on the first real address and the second real address; and
an operating system that restricts a write memory request being issued to the physical memory system that is addressed to the real address stored in one of the first field or second field during a time period that the move engine is copying the plurality of memory blocks from the first memory module to the second memory module, and that reprograms the second memory controller to respond to memory requests addressed to the first real address after the time period that the move engine is copying the plurality of memory blocks from the first memory module to the second memory module wherein the first memory module is removed from the physical memory system after the operating system enables the second memory controller to respond to memory accesses addressed to the first real address after the time period that the move engine is copying the plurality of memory blocks from the first memory module to the second memory module.
1. A computing system coupled to a physical memory system having a plurality of memory modules for storing data as a plurality of memory blocks, each memory block comprising contiguous bytes of physical memory, and further coupled to at least one memory controller, wherein each memory controller of the at least one memory controller has one or more memory modules of the plurality of memory modules coupled thereto, and wherein each memory controller of the at least one memory controller responds to memory accesses by writing and reading memory blocks stored within one or more of the memory modules coupled thereto, and further coupled to a processor device for generating memory accesses containing real addresses associated with memory locations of die physical memory system for reading and writing of data thereto, the computing system comprising:
a first field within the physical memory system storing a first real address corresponding to a first memory module of the plurality of memory modules coupled thereto, wherein a first memory controller coupled to the first memory module is programmed to respond to memory requests addressed to the first real address, and a second field within the physical memory system storing a second real address corresponding to a second memory module of the plurality of memory modules coupled thereto, wherein a second memory controller coupled to the second memory module is programmed to respond to memory requests addressed to the second real address;
a move engine that, in response to a notification that a configuration of the first and second memory modules is being modified, copies the plurality of memory blocks from the first memory module to the second memory module based on the first real address and the second real address; and
an operating system that restricts a write memory request being issued to the physical memory system that is addressed to the real address stored in one of the first field or second field during a time period that the move engine is copying the plurality of memory blocks from The first memory module to the second memory module, and that reprograms the second memory controller to respond to memory requests addressed to the first real address after the time period that the move engine is copying the plurality of memory blocks from the first memory module to the second memory module, wherein the first memory module is removed from the physical memory system after the operating system enables the second memory controller to respond to memory accesses addressed to the first zeal address after the time period that the move engine is copying the plurality of memory blocks from the first memory module to the second memory module.
2. The computing system of
3. The computing system of
4. The computing system of
5. The computing system of
7. The method of
8. The method of
9. The method of
11. The system of
12. The system of
13. The system of
14. The system of
|
The present invention is related to the subject matter of the following commonly assigned, copending U.S. patent applications: Ser. No. 10/268,728 entitled “Method and System of Managing Virtualized Physical Memory in a Memory Controller and Processor System” and filed Oct. 10, 2002; Ser. No. 10/268,743 entitled “Method and System of Managing Virtualized Physical Memory in a Multi-Processor System” and filed Oct. 10, 2002. The content of the above-referenced applications is incorporated herein by reference.
1. Technical Field
The present invention relates in general to data processing and in particular to managing physical memory in a data processing system. Still more particularly, the present invention relates to a method and system for managing physical memory in a data processing system utilizing specialized hardware and software.
2. Description of the Related Art
In computer systems it is customary that there be one-to-one correspondence between the memory address produced by the processor and a specific area in the physical memory of the system. This limits the operating system and applications to an address space determined by the actual physical memory installed in the system. Moreover, many modem computer systems run multiple concurrent tasks or processes, each with its own address space. It would be expensive to dedicate a full complement of memory to each task and the operating system, especially since many processes use only a small part of their address spaces at any given time. Modem computer systems have overcome this limitation through the use of virtual memory, which implements a translation table to map program addresses (or effective addresses) to real memory addresses. Virtual memory allows a program to run on what appears to be a large, contiguous, physical-memory address space, dedicated entirely to the program. In reality, however, the available physical memory in a virtual memory system is shared between multiple programs or processes. Effective addresses used in a process are translated by a combination of computer hardware and software to real addresses of physical memory. This process is called memory mapping or address translation.
In a virtual memory system, the allocation of memory is most commonly performed by the operating system software (OS). It is a function of the operating system to ensure that the data and code a program is currently using is in main memory and that the translation table can map the effective addresses to the real addresses correctly. This requires an interrupt of the instruction sequence so that the privileged kernel code can allocate physical memory to the area being accessed so that normal program flow can continue without error. This interrupt and the kernel processing to allocate physical memory requires a significant amount of processing time and upsets the normal pipelining of instructions through the CPU.
The burden on the operating system of managing physical memory increases when physical memory is reconfigured while the computer system is in operation. In cases where the physical memory size is increased or decreased, or when a memory module is replaced during system operation (for example, when a failure occurs in a memory module requiring replacement), the OS is required to temporarily interrupt the task being processed and totally stop all memory operations within the physical memory. The OS will then modify the system memory configuration information in the translation table, use the changed physical addresses to store data from any bad memory device out to disk, and then reconfigure the remaining memory devices. If a memory device has been removed, the OS must invalidate the physical address space of the removed device and maintain the invalidated address space so that it cannot be used, essentially leaving an unavailable block of space within the addressable space of the memory system. The operating system must then map logical addresses to physical addresses to avoid pages with bad memory locations. These problems increase the overhead of the OS and complicate the control of memory. What is needed is a method and system for physical memory control capable of solving the above-described problems of the prior art and quickly and efficiently implementing dynamic reconfiguration of physical memory as required.
In accordance with a preferred embodiment, a method and system of managing virtualized physical memory in a multiprocessor system is provided. A multiprocessor system is coupled to a physical memory system having a plurality of memory modules for storing data as a plurality of memory blocks, each memory block comprising contiguous bytes of physical memory, and further coupled to at least one memory controller, wherein each memory controller of the at least one memory controller has one or more memory modules of the plurality of memory modules coupled thereto, and wherein each memory controller of the at least one memory controller responds to memory accesses by writing and reading memory blocks stored within one or more of the memory modules coupled thereto. The multiprocessor system includes at least one processor device for generating memory accesses containing real addresses associated with memory locations of the physical memory system for reading and writing of data thereto. A register within a processor device has a first field storing a FROM real address corresponding to a first memory module of the plurality of memory modules coupled thereto, wherein a first memory controller coupled to the first memory module is programmed to respond to memory requests addressed to the FROM real address, and a second field storing a TO real address corresponding to a second memory module of the plurality of memory modules coupled thereto, wherein a second memory controller coupled to the second memory module is programmed to respond to memory requests addressed to the TO real address. A move engine within the processor device is provided that, in response to a notification that a configuration of the first and second memory modules is being modified, copies the plurality of memory blocks from the first memory module to the second memory module based on the FROM real address and the TO real address. An operating system within the processor device issues a write memory request addressed to the FROM real address and the TO real address in response to the processor device issuing a write memory request addressed to the real address stored in one of the first field or second field during a time period that the move engine is copying the plurality of memory blocks from the first memory module to the second memory module, and that reprograms the second memory controller to respond to memory requests addressed to the FROM real address after the time period that the move engine is copying the plurality of memory blocks from the first memory module to the second memory module.
In an alternative embodiment, the operating system issues the write memory request addressed to both the FROM real address and TO real address in response to the processor device requesting a write memory request addressed to the FROM real address during a time period that the move engine is copying the plurality of memory blocks from the first memory module to the second memory module.
In another alternative embodiment, the first memory module is removed from the physical memory system after the operating system enables the second memory controller to respond to memory accesses addressed to the TO real address after the time period that the move engine is copying the plurality of memory blocks from the first memory module to the second memory module.
In yet another alternative embodiment, the FROM real address is within the current addressable space of the physical memory system prior to the time period that the move engine is copying the plurality of memory blocks from the first memory module to the second memory module.
In yet another alternative embodiment, the second memory module is inserted into the physical memory system before the move engine copies the plurality of memory blocks from the first memory module to the second memory module.
In yet another alternative embodiment, the TO real address is outside the current addressable space of the physical memory system address prior to the time period that the move engine is copying the plurality of memory blocks from the first memory module to the second memory module.
The novel features believed characteristic of the invention are set forth in the appended claims. The invention itself however, as well as a preferred mode of use, further objects and advantages thereof, will best be understood by reference to the following detailed description of an illustrative embodiment when read in conjunction with the accompanying drawings, wherein:
With reference now to the figures and in particular with reference to
As further illustrated in
System interconnect 12, which can comprise one or more buses, a switch fabric, or other interconnect architecture, serves as a conduit for communication among the devices (e.g., processing units 10, memory controllers 24, 34 and 44, etc.) coupled to system interconnect 12. A typical transaction on system interconnect 12 begins with a request, which may include a transaction field indicating the type of transaction, one or more tags indicating the source and/or intended recipient(s) of the transaction, and an address and/or data. Each device connected to system interconnect 12 preferably snoops all transactions on system interconnect 12 and, if appropriate, responds to the request with a snoop response. These actions may include sourcing data on system interconnect 12, storing data provided by the requesting snooper, invalidating cached data, etc. Input/output connector 52 is also coupled to interconnect 12 and provides a conduit for communications among the other devices coupled to interconnect 12 and the external devices coupled to PCI bus 56 through bridge 54.
Data processing system 8 utilizes a virtual memory system, which implements a translation table to map program addresses (or effective addresses) to real memory addresses.
The virtual memory system allows the available physical memory to be shared between multiple programs or processes. Processing units 10 allow the address space of the processing units (“logical address space”) to have a different size than the available physical memory 22 by providing an address translation mechanism that translates the effective addresses (EA) to physical addresses (PA) that refer to locations in actual physical memory. This virtual memory system also allow multiple programs to reside simultaneously in system memory without each needing to know the location of its physical base address. Rather, such multiple programs need only know their logical base address. Moreover, rather than attempting to maintain a translation or mapping for each possible effective address, the virtual memory system divides effective and physical memory into blocks. In many systems, these blocks are fixed in size and referred to as sections or pages. The addresses within an individual page all have identical upper-most bits. Thus, a memory address is the concatenation of a page number, corresponding to the upper bits of the address, and a page offset, corresponding to the lower bits of the address.
Data structures are typically maintained in physical memory to translate from effective page numbers to real page addresses. These data structures often take the form of conversion tables, normally referred to as segment tables and page tables. A segment table is indexed by an effective page address or number, and generally has a number of entries corresponding to pages in the effective address space. Each entry is a mapping of a specific page number or effective page address to a virtual page address. A page table is indexed by a virtual page address or number, and generally has a number of entries corresponding to pages in the effective address space. Each entry is a mapping of a specific page number or effective page address to a real page address.
Effective-to-real address translation is performed in processor units 10 using a specialized hardware cache (not shown), referred to as an address translation cache or as a translation lookaside buffer (TLB), dedicated to translations. A TLB is a fast and small static memory for storing the most frequently referenced entries from the page table. It typically has a fixed number of entries. When processing a memory request, a computer first attempts to find an appropriate address translation in the TLB. If such an address translation is not found, a page table is automatically accessed to retrieve the proper translation.
Those skilled in the art will appreciate that data processing system 8 can include many additional unillustrated components, such as I/O adapters, interconnect bridges, non-volatile storage, ports for connection to networks or attached devices, etc. Because such additional components are not necessary for an understanding of the present invention, they are not illustrated in
With reference now to
For each process, a page or block in its addressable space is addressed by an effective address. As shown in
As shown in
As seen in
Referring back to
In this example, memory module M2 is being removed from data processing system 8.
As a first step, processor unit 10 reports to the operating system that its total available physical memory has now been reduced by one memory module. For example, if each memory module M1, M2, M3 is a 64 Giga-Byte (GB) memory device, the operating system would be informed that its available physical memory is now 128 GB. The operating system immediately begins to swap out pages to reduce the amount of stored data accordingly. Processor unit 10 notifies move engines 28 that memory module M2 is being removed from physical memory 22. Move engine 28 immediately selects the remaining module or modules that will be used to store the data contained in memory module M2.
OS 36 accesses memory fields 306, 308 in memory module M1 to store a “FROM” real address for the memory module being removed and a “TO” real address for the contents of the memory module being removed (as used herein, the real address refers to the entire real address or that portion (for example, the higher-order bits) needed to uniquely identify an associated memory module storing data addressed by the indexed block of memory). OS 36 accesses and modifies the memory fields 306, 308 as necessary to perform a given memory re-configuration. In an alternative embodiment, the FROM and TO memory addresses held in fields 306, 308 could be stored in a general purpose register in the processor, or in another memory storage device.
As seen in
In the example shown in
During the process of moving the memory storage, memory controllers 24, 34, and 44 continue to respond to memory access requests over interconnect 12. However, OS 36 restricts all “Write” memory requests (but allowing “Reads”) that are addressed to the memory stored at the FROM real address, as indicated by the FROM real address field 306, to assure memory coherency throughout the move process. In the example of
Upon completion of the data transfer from memory module M2 to memory module M3, move engine 28 copies the TO real address into the FROM real address in field 306 or resets the memory fields. Memory controller 44 is then reprogrammed to respond to real addresses RA2, previously managed by memory controller 34, and OS 36 enables normal Read/Write memory acessess to real address RA2. Memory module M1 is now addressed by real address RA1 and memory module M3 is now addressed by real address RA2. Memory Controller 44 now performs a physical mapping of real addresses in the RA2 space directly into memory module M3, thereby creating a virtualized physical mapping from the addressable real address space being utilized by the operating system into a virtual physical address space.
With reference now to
Memory fields 306, 308 are programmed by OS 36 with respective FROM and TO real addresses, in accordance with a preferred embodiment. The real address assigned to memory module M2 is programmed with a TO real address, in this case RA4, outside the current real address space of physical memory 22. The FROM real address is the address to which the memory module being inserted is assigned after insertion and reprogramming of the real addressable space. Field 306 is programmed with a FROM real address RA2 and field 308 is programmed with a TO real address RA4. The memory controller associated with the memory module being inserted, in this case memory controller 34, is programmed by OS 36 to respond to real address RA4. As will be appreciated, the real address selected for each field is dependent on the size of the memory module M2 being inserted and the size of the existing memory module M3. In this example, they are assumed to be of equal size. In the event that they are different sizes, the real address for memory module M3 would be selected to fall on the memory boundary of memory module M2 to provide a contiguous real memory space.
After memory module M2 is physically inserted into physical memory 22, move engine 28 begins a “move process” for copying the contents of the memory address space at TO real address (RA4) from the memory address space at FROM real address (RA2). Accordingly, move engine 28 begins copying the contents of memory module M3 into memory module M2 by making memory access requests over interconnect 12 to memory controller 44 to copy each memory cell of memory module M3 into the memory address space at real address RA4. Memory controller 44 receives writes from each memory cell of memory module M3 and maps them into the physical address space of memory module M2. This is depicted in
During the move process, a Read memory access from processor unit 10 directed to real address RA2 continues to be serviced by the memory controllers 44, which is programmed to respond to real address space RA2. A Write memory access from processor unit 10 directed to real address RA2 will be stalled until the physical memory 22 is reconfigured. As will be appreciated, this mechanism allows for memory coherency during the move process.
Once the move process has completed, OS 36 directs memory controller 34 to respond to memory accesses from interconnect 12 directed to FROM real address in field 306 and directs memory controller 44 to respond to memory accesses from interconnect 12 directed to another real address within the reconfigured real memory space. In this example, memory controller 44 is reprogrammed to respond to real address RA3 to provide contiguous real addressable memory RA1-RA3. OS 36 will then begin to store and access memory pages across the real address space RA1-RA3 of memory modules M1, M2, and M3.
As will be appreciated there are cases where the memory module being inserted matches the memory boundry of the existing memory and the real address space does not have to be re-configured. Thus, in an alternative embodiment, the memory move process is not performed and OS 36 immediately programs the memory controller associated with the inserted memory module to respond to the TO real address associated with the newly added real address space. For example, if memory module M2 as shown in
For the case of replacement of a memory module in the physical memory 22, the memory module is removed from physical memory 22 in accordance with the process described in conjunction with
As will be appreciated, the preferred embodiment enables the OS and move engines to provide the virtualization function of the physical memory to allow for a memory module to be inserted, removed or replaced in physical memory. When physical memory is re-configured, move engine 28 performs a data transfer between the memory modules of physical memory 22 and OS 36 controls the real-to-physical addressing of the subject memory module to allow the addition, subtraction or substitution of the particular memory module. This memory management is done efficiently by the hardware and OS with little interruption of the continued memory system operation to accomplish the re-configuration of physical memory.
While the invention has been particularly shown and described with reference to a preferred embodiment, it will be understood by those skilled in the art that various changes in form and detail may be made therein without departing from the spirit and scope of the invention.
Arimilli, Ravi Kumar, Dodson, John Steven, Ghai, Sanjeev, Wright, Kenneth Lee
Patent | Priority | Assignee | Title |
7421619, | Feb 11 2005 | International Business Machines Corporation | Method in a processor for performing in-memory tracing using existing communication paths |
7844860, | Feb 11 2005 | International Business Machines Corporation | Apparatus and computer program product in a processor for performing in-memory tracing using existing communication paths |
7913123, | Feb 11 2005 | Biomet Biologics, LLC | Concurrently sharing a memory controller among a tracing process and non-tracing processes using a programmable variable number of shared memory write buffers |
7979750, | Feb 11 2005 | International Business Machines Corporation | Synchronizing triggering of multiple hardware trace facilities using an existing system bus |
7992051, | Feb 11 2005 | International Business Machines Corporation | Method, apparatus, and computer program product in a processor for dynamically during runtime allocating memory for in-memory hardware tracing |
Patent | Priority | Assignee | Title |
5404478, | Dec 28 1989 | Hitachi, Ltd. | Method of managing a virtual storage for a multi-processor system |
5615352, | Oct 05 1994 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Methods for adding storage disks to a hierarchic disk array while maintaining data availability |
5819310, | May 24 1996 | EMC Corporation | Method and apparatus for reading data from mirrored logical volumes on physical disk drives |
5926836, | Dec 03 1996 | EMC IP HOLDING COMPANY LLC | Computer and associated method for restoring data backed up on archive media |
6044445, | Jun 30 1995 | Kabushiki Kaisha Toshiba | Data transfer method and memory management system utilizing access control information to change mapping between physical and virtual pages for improved data transfer efficiency |
6141729, | Sep 23 1996 | MATSUSHITA ELECTRIC INDUSTRIAL CO , LTD | Data transfer system which divides data among transfer units having different transfer speed characteristics |
6223269, | Sep 27 1997 | EMC IP HOLDING COMPANY LLC | Stacked mapped storage system |
6243790, | Sep 27 1996 | Fujitsu Limited | Methods and apparatus for re-arranging logical drives in a disk array apparatus |
6269431, | Aug 13 1998 | EMC IP HOLDING COMPANY LLC | Virtual storage and block level direct access of secondary storage for recovery of backup data |
6282610, | Mar 31 1997 | NetApp, Inc | Storage controller providing store-and-forward mechanism in distributed data storage system |
6341341, | Dec 16 1999 | RPX Corporation | System and method for disk control with snapshot feature including read-write snapshot half |
6356991, | Dec 31 1997 | Unisys Corporation | Programmable address translation system |
6434681, | Dec 02 1999 | EMC IP HOLDING COMPANY LLC | Snapshot copy facility for a data storage system permitting continued host read/write access |
6442649, | Aug 18 1999 | INTEL NETWORK SYSTEMS, INC | Dynamic expansion of storage device array |
6442650, | Oct 06 1997 | EMC IP HOLDING COMPANY LLC | Maximizing sequential output in a disk array storage device |
6457139, | Dec 30 1998 | EMC IP HOLDING COMPANY LLC | Method and apparatus for providing a host computer with information relating to the mapping of logical volumes within an intelligent storage system |
6473847, | Mar 31 1998 | Yamaha Corporation | Memory management method for use in computer system |
6662289, | May 15 2001 | Hewlett Packard Enterprise Development LP | Method and apparatus for direct conveyance of physical addresses from user level code to peripheral devices in virtual memory systems |
6665787, | Feb 29 2000 | SK HYNIX INC | Very high speed page operations in indirect accessed memory systems |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Oct 07 2002 | ARIMILLI, RAVI KUMAR | International Business Machines Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 013404 | /0827 | |
Oct 07 2002 | DODSON, JOHN STEVEN | International Business Machines Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 013404 | /0827 | |
Oct 07 2002 | GHAI, SANJEEV | International Business Machines Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 013404 | /0827 | |
Oct 07 2002 | WRIGHT, KENNETH LEE | International Business Machines Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 013404 | /0827 | |
Oct 10 2002 | International Business Machines Corporation | (assignment on the face of the patent) | / |
Date | Maintenance Fee Events |
Jun 09 2005 | ASPN: Payor Number Assigned. |
Jan 26 2009 | REM: Maintenance Fee Reminder Mailed. |
Jul 19 2009 | EXP: Patent Expired for Failure to Pay Maintenance Fees. |
Date | Maintenance Schedule |
Jul 19 2008 | 4 years fee payment window open |
Jan 19 2009 | 6 months grace period start (w surcharge) |
Jul 19 2009 | patent expiry (for year 4) |
Jul 19 2011 | 2 years to revive unintentionally abandoned end. (for year 4) |
Jul 19 2012 | 8 years fee payment window open |
Jan 19 2013 | 6 months grace period start (w surcharge) |
Jul 19 2013 | patent expiry (for year 8) |
Jul 19 2015 | 2 years to revive unintentionally abandoned end. (for year 8) |
Jul 19 2016 | 12 years fee payment window open |
Jan 19 2017 | 6 months grace period start (w surcharge) |
Jul 19 2017 | patent expiry (for year 12) |
Jul 19 2019 | 2 years to revive unintentionally abandoned end. (for year 12) |