Shared Memory ist ein klassisches Mittel zur Interprozeßkommunikation
des Unix-Betriebssystem. Der Begriff bezeichnet einen
Hauptspeicherbereich, der von mehreren Prozessen verwendet
werden kann. Konkurrierende Zugriffe auf den Speicher werden unter
Verwendung von sogenannten Semaphoren (Zählvariablen) synchronisiert.
Das System garantiert, daß die zur Synchronisation verwendete
Semaphore nur jeweils einem Prozeß zugeordnet wird.
Das Unix-Betriebssystem stellt dem Anwender eine meist konfigurierbare,
endliche Anzahl von SHM-Segmenten einer bestimmten Maximalgröße bereit.
Typisch ist eine Anzahl von 100 Segmenten zu je maximal 131072 Bytes.
Durch die begrenzte Anzahl von SHM-Segmenten ist es nicht möglich,
jedem Cache-Eintrag ein Segment zur Verfügung zu stellen. Dies verbietet sich
ohnehin, da die Größe des Cache-Eintrags die Größe eines SHM-Segment
überschreiten kann. Mehrere kleinere Cache-Einträge in einem SHM-Segment
unterzubringen, führt ebenso schnell zu einem sehr hohen Verwaltungsaufwand
wie die Verteilung eines großen Cache-Eintrags über mehrere SHM-Segmente.
Eine weitere Schwierigkeit, die Fragmentierung des Speichermedium wurde bereits
bei den Ersetzungsstrategien diskutiert.
Die Implementierung im PEAR-Datencache verwendet lediglich ein SHM-Segment.
In dem Segment wird ein Hash mit Cache-Einträgen abgelegt. Bei Anforderung eines Cache-Eintrags
wird der Hash mit allen Einträgen ausgelesen und der angeforderte Eintrag zurückgeliefert.
In Verbindung mit dem obligatorischen Semaphor-Handling und der Tatsache,
daß PHP-Variablen nur in serialisierter Form im SHM abgelegt werden können,
entsteht ein großer Verwaltungsoverhead. Dies sorgt für eine enttäuschende Performance.