In our discussions of memory systems, we have generally acted as if instructions and data share space within each level of the memory hierarchy. For the main memory and the virtual memory, this is generally true. However, for caches, data and instructions are often stored in separate data and instruction caches, as shown in Fig. 2. This arrangement, which is sometimes called a Harvard cache or Harvard architecture, is used because it allows the processor to fetch instructions from the instruction cache and data from the data cache simultaneously. When a cache contains both instructions and data, it is called a unified cache.