Cache memory system

Abstract: A fast, high performance computer memory system includes a system memory (12) for storing code and non-code data accessible by at least two bus masters, bus means (14) connecting the memory (12) with the bus masters, and a plurality of caches (16,18,20) connected to the bus means (14). An internal cache (16) holds data selected solely on the basis of memory accesses by the host processor, a pre-fetch cache (18) pre-fetches code from the memory (12), and a write buffer cache (20) is connected to the bus means (14) for buffering data written to the memory (12).

Description: This invention relates to computer memory systems of the kind including a system memory adapted to store code data and non-code data and accessible by at least two bus masters, and bus means connecting said memory with said bus masters. The performance of a computer system can be enhanced by the use of a memory hierarchy. For example, a three tiered memory can be constructed from low, medium, and high speed memories. A low speed memory may be a magnetic disk for low cost, bulk storage of data. A medium speed memory may be constructed from DRAMs for use as the computer system's main memory. A high speed memory may employ SRAMs for use as a processor cache memory. The theory behind memory hierarchy is to group code (instructions) and other data to be executed by the system processor in the highest speed memory. Since high speed memory is typically the most expensive memory available, economics dictate that it be relatively small. Main memory consisting of DRAMs is denser and less expensive than a cache memory with SRAMs, and can therefore be significantly larger than the cache memory. During operation, instructions and other data are transferred from system memory to the cache memory in order to have quick access to the variables of the currently executing program. As additional data, not in the cache, is required, such data is transferred from the main memory by replacing selected data in the cache. Various replacement algorithms are utilized to determine which data is replaced. An efficiently operating cache architecture exhibits a high ratio of "hits" to accesses. A "hit" occurs when data requested is in the cache. A number of factors influence the hit ratio. The dominant factor is the locality of reference of the code being executed. In other words, if the code is located in proximate physical locations in memory, the hit ratio will be higher than if the code is widely distributed throughout memory. Another factor influencing the hit ratio of a cache is the number of devices having access to the memory. If only a single bus master, such as the system processor, has access to the memory, the data stored in the cache can be controlled to achieve a reasonably high hit ratio. However, when more than a single bus master has access to the memory through the same cache, the cache can bounce back and forth between requests from the bus masters, greatly reducing the hit ratio. In other words, the cache is non-discriminatory, with the demands of the system processor and other bus masters affecting the cache equally. One operation can significantly impact the data make-up of the cache. For example, data cached in response to memory accesses from a non-host CPU bus master will overwrite data needed by the host processor. Another factor affecting the hit ratio relates to the fact that both code and non-code data are cached. Blocks of data in the system memory are mapped into different physical locations in the cache. If each block of data in system memory may be mapped to only a single location, the cache is known as a direct mapped cache. Set associative mapping involves each block of data being mapped to more than a single location. For example, if each block of data may be mapped to either of two locations, the cache is known as two-way set associative. Irrespective of the number of locations available for a system memory block, when both code and non-code data are being cached, there will be overlap in their respective mappings. Thus, when both code and non-code data are cached, there can be significant thrashing which takes place as data is replaced in response to the memory accesses. A computer memory system in accordance with the preamble of claim 1 is known from US-A-4078254. From EP-A-0340668 there is known a memory system including a first cache containing solely operand data, and a second cache containing solely code data. It is an object of the present invention to provide a high speed computer memory system of the kind adapted to store code data and non-code data and accessible by at least two bus masters, which system has a small caching structure. Therefore, according to the present invention, there is provided a computer memory system, including a system memory adapted to store code data and non-code data and accessible by at least two bus masters one of which being formed by a host processor, bus means connecting said system memory with said bus masters, and a plurality of caches connected to said bus means, a first of said caches being adapted to hold data selected solely on the basis of memory accesses by a first of said bus masters, characterized in that a second of said caches is adapted to contain solely code data, and in that said plurality of caches includes a third cache which is adapted to buffer data writes to said system memory by any bus master other than said host processor if said host processor is of a first type and which is adapted to buffer data writes to said system memory by any bus master including said host processor if said host processor is of a second type. One embodiment of the present invention will now be described with reference to the accompanying drawing, in which:- Figure 1 is a block diagram of a high performance computer memory system according to one form of the present invention. Figure 1 shows a block diagram of a computer memory system 10. System 10 includes a system memory 12 which in a preferred embodiment consists of dynamic random access memory (DRAM) chips. The data stored in memory 12 can be generally divided into code data (instructions) and non-code data. As used herein, the term "data" refers to information and includes both code data (instructions) and non-code data. Memory 12 is connected to other parts of a computer system (not shown) by bus means 14. Memory system 10 is designed for use with two or more bus masters. More particularly, it is designed for use with a host processor such as an Intel processor 386, 386sx or 486 in combination with other bus masters or devices which will compete with the host processor for access to memory system 10. Access to DRAM 12 is controlled by DRAM controller 22 which is located within bus means 14. Memory system 10 also includes an internal cache 16, a pre-fetch cache 18 and a write buffer cache 20, each connected to bus means 14. In a preferred form, internal cache 16 is a 4K byte, four-way set associative cache, pre-fetch cache 18 is a 128 byte, direct-mapped cache, and write buffer cache 20 is a 128 byte, two-way set associative cache. A feature of the present system is that the functionality of the various caches may be varied depending upon the host processor type (386, 386sx or 486) utilized. However, certain features of the caches do not vary. For example, internal cache 16 holds data which is selected solely on the basis of memory accesses by the host processor. In other words, internal cache 16 is dedicated to the host processor and will not be affected by memory accesses by other bus masters. It will be appreciated that each of the caches is readable by any of the bus masters. Thus, even though cache 16 will not allow data writes therein based on memory accesses by other than the system processor, it will be read by another bus master if requested data happens to reside therein. It will further be appreciated that each of the caches snoops (observes) any data writes not intended for it in order to invalidate its contents upon snoop hits, thereby ensuring coherency. Another immutable feature of the caches is that pre-fetch cache 18 contains solely code data pre-fetched from DRAM 12. Furthermore, it only pre-fetches code based on a memory access by the host processor. In operation, whenever the system processor requests code data not already in the pre-fetch cache, the next sequential 128 bytes of code are pre-fetched into cache 18 as a queue in anticipation of subsequent requests for code. Write buffer cache 20 only buffers data to be written into DRAM 12. It is not merely a write buffer, but is a cache which, as mentioned above, can be read by any bus master. However, it will not cache data from DRAM 12. An important feature of the present system is the separation of the functionality of each of the caches, such that the selective definition of those functions based on the processor type is readily effected. By this insight, the present system is able to achieve or exceed the performance of a system utilizing a single cache many times larger than the cumulative size of the subject caches. With respect to the selective definition of function based on processor type, for a system employing a 486 system processor, write buffer cache 20 buffers data writes by any bus master other than the system processor. For a system employing a 386 or 386sx system processor, internal cache 16 holds only code data and is a read only cache for the system processor, and write buffer cache 20 buffers data writes by any bus master including the system processor. The operational characteristics of the caches are defined through self configuration at power-on time based on information relating to the type of host processor present. DRAM controller 22 supports fast page mode for accesses to DRAM 12. Fast page mode is a well known technique for speeding up accesses to DRAM by activating a row line in a memory page and then strobing sequential column lines to transfer data into or out of DRAM. In the present embodiment, DRAM 12 is divided into pages which contain either code or non-code data. A register associated with DRAM 12 is located either in DRAM 12 or DRAM controller 22 and holds the page address of a most recently accessed page. In effect, the system provides a bias towards code pages or non-code pages depending upon the type of processor connected to the system. For example, if the system processor is a 486, the address of the most recently accessed code address page is held in the register. In operation, both code and non-code data pages in DRAM 12 can be randomly accessed. If a code page is accessed on one cycle and a non-code page is accessed on the next cycle, the address of the code page is held in a register while the non-code page is accessed. Immediately after the non-code page access, the address in the register is used to reopen the code page. In contrast, if the system processor is a 386 or 386sx, the address of the most recently accessed non-code address page is held in the register. The combination of selective open page bias, fast page mode accesses and multiple caches provides increased system performance. The use of a two-way set associative cache for write buffer cache 20 is a preferred feature of the present system. The non-code data region of memory may be divided into three areas known as list, heap and stack. Data blocks in memory are reserved for the list, heap and stack, each of which has its own organization and purpose. For example, a stack is a set of data elements, only one of which can be accessed at a time. The list data is primarily read and generally not written to. In structured programs, a high percentage of writes occur to the stack with the second most data writes occurring to the heap. By proper assignment of the heap and stack data blocks in DRAM and mapping respective blocks to opposing sets in the two-way set associative cache, increased operational efficiency can be realized. Furthermore, an open page bias in the DRAM for non-code data will effectively be an open page bias for list data. In this manner, operational efficiency of the present embodiment is further enhanced.

Claims: A computer memory system, including a system memory (12) adapted to store code data and non-code data and accessible by at least two bus masters one of which being formed by a host processor, bus means (14) connecting said system memory (12) with said bus masters, and a plurality of caches (16,18,20) connected to said bus means (14), a first of said caches (16) being adapted to hold data selected solely on the basis of memory accesses by a first of said bus masters, characterized in that a second of said caches (18) is adapted to contain solely code data, and in that said plurality of caches (16, 18, 20) includes a third cache (20) which is adapted to buffer data writes to said system memory (12) by any bus master other than said host processor if said host processor is of a first type and which is adapted to buffer data writes to said system memory (12) by any bus master including said host processor if said host processor is of a second type. A computer memory system according to claim 1, characterized in that each of said caches (16,18,20) is readable by each of said bus masters. A computer memory system according to either claim 1 or claim 2, characterized in that said first cache (16) is a four-way set associative cache. A computer memory system according to any one of the preceding claims, characterized in that said second cache (18) is adapted to store only code data prefetched from said system memory (12). A computer memory system according to any one of the preceding claims, characterized in that said second cache (18) is a direct mapped cache. A computer memory system according to any one of the preceding claims, characterized in that said third cache (20) is a two-way set associative cache.

Inventors: ELLIS JACKSON L, KING EDWARD C, MOUSSAVI ROBERT B, WEISSER PIRMIN L, ELLIS, JACKSON L., KING, EDWARD C., MOUSSAVI, ROBERT B., WEISSER, PIRMIN L.
Applicants: NCR INT INC, NCR INTERNATIONAL, INC.
Application year: 1991
Main classification: G06F12
IPC codes: G06F12