A system for maintaining data coherency in a multiprocessor system
includes a first processor having a cache and a directory, a second
processor having a directory, and at least one additional processor
having a directory and separate from the first and second processors. The
first processor is configured to determine if a data line is not found in
the cache of the first processor and forward a request for the data line
to the second processor. The second processor is configured to forward
the data line from the second processor to the first processor, update
the directory of the second processor to reflect the data line being
forwarded to the first processor, and forward a directory update message
to the at least one additional processor to reflect the data line being
forwarded to the first processor. An entry in the directories includes a
memory address, a most recent data holder, and a line state.