Directory-based cache coherence

[citation needed] The full bit vector format is the simplest structure to implement, but the least scalable.

While this may be fine for a small number of processors, when implemented in large systems the size requirements for the directory becomes excessive.

This improves size requirements at the expense of bus traffic saving (processors per node - 1)×(total lines) bits of space.

[citation needed] In this case the directory entry uses 1 bit for a group of processors for each cache line.

A cache only stores a small subset of blocks in main memory at a particular time.

Different caches that share a memory block are arranged in the form of a binary tree.

Each memory block has the root node information (HEAD) and Sharing counter field (SC).

One method is to invalidate one of the sharers, using its pointer for the new requestor, though this can be costly in cases where a block has a large number of readers, such as a lock.

Diagram of full bit vector directory format, where E=Exclusive, S=Shared, M=Modified, and U=Uncached
Diagram of coarse bit vector directory format