A system and method for storing only one copy of a data block that is
shared by two or more processes is described. In one embodiment, a
global/non-global predictor predicts whether a data block, specified by a
linear address, is shared or not shared by two or more processes. If the
data block is predicted to be non-shared, then a portion of the linear
address referencing the data block is combined with a process identifier
that is unique to form a global/non-global linear address. If the data
block is predicted to be shared, then the global/non-global linear address
is the linear address itself. If the prediction as to whether or not the
data block is shared is incorrect, then the actual value of whether or not
the data block is shared is used in computing a corrected
global/non-global linear address. If the data referenced by either the
global/non-global linear address that was predicted correctly or the
corrected global/non-global linear address resides in the
global/non-global linear-addressed cache memory, then that data block is
accessed and transmitted to a requesting processor. If the data referenced
by either the global/non-global linear address that was predicted
correctly or the corrected global/non-global linear address does not
reside in the global/non-global linear-addressed cache memory, then a
cache line selected by a replacement policy has its data block replaced
with a data block from a storage device at a higher hierarchical level as
specified by the linear address.
Ein System und eine Methode für die Speicherung von von nur einer Kopie Daten blockieren, die durch zwei oder mehr Prozesse wird beschrieben geteilt wird. In einer Verkörperung sagt ein global/non-global Kommandogerät, ob Daten blockieren, spezifiziert durch eine lineare Adresse voraus, wird geteilt oder geteilt nicht durch zwei oder mehr Prozesse. Wenn der Datenblock vorausgesagt wird nicht-geteilt zu werden, dann wird ein Teil der linearen Adresse, die den Datenblock bezieht, mit einem Prozeßbezeichner kombiniert, der einzigartig ist, eine global/non-global lineare Adresse zu bilden. Wenn der Datenblock vorausgesagt wird geteilt zu werden, dann ist die global/non-global lineare Adresse die lineare Adresse selbst. Wenn die Vorhersage, ob oder nicht der Datenblock geteilt wird, falsch ist, dann wird der tatsächliche Wert von, ob oder nicht der Datenblock geteilt wird, verwendet, wenn man eine behobene global/non-global lineare Adresse berechnet. Wenn die Daten, die durch jedes die global/non-global lineare Adresse bezogen werden, die richtig oder die behobene global/non-global lineare Adresse vorausgesagt wurde, im global/non-global linear-adressierten Cachespeicher liegen, dann wird dieser Datenblock einem erbittenen Prozessor erreicht und übermittelt. Wenn die Daten, die durch jedes die global/non-global lineare Adresse bezogen werden, die richtig oder die behobene global/non-global lineare Adresse vorausgesagt wurde, nicht im global/non-global linear-adressierten Cachespeicher liegen, dann hat eine Pufferspeicherlinie, die durch eine Wiedereinbaupolitik vorgewählt wird, seinen Datenblock, der mit einem Datenblock von einer Speichervorrichtung auf einem höheren hierarchischen Niveau ersetzt wird, wie durch die lineare Adresse spezifiziert.