A cache where data from any address can be stored in any cache
location. The whole address must be used as the tag. All
tags must be compared simultaneously (associatively) with the
requested address and if one matches then its associated data
is accessed. This requires an associative memory to hold the
tags which makes this form of cache more expensive. It does
however solve the problem of contention for cache locations
whole cache is full and then the block to flush can be
selected in a more efficient way.