Podręcznik

1. Pamięci ROM

1.6. Sposób kojarzenia adresów (odwzorowania) linii

W pamięci RAM możliwy jest dostęp do poszczególnych bajtów. Pamięć podręczna jest zorganizowana w linie o rozmiarze dziesiątek, czy setek bajtów. Trzeba w jakiś sposób zapewnić odwzorowanie pamięci RAM w pamięć podręczną. Można to zrealizować na wiele sposobów. Wyróżniamy trzy podstawowe sposoby odwzorowania linii:

  • pamięci całkowicie skojarzeniowe (ang. fully associative),
  • pamięci z odwzorowaniem bezpośrednim (ang. direct mapped),
  • pamięci wielodrożne (ang. set-associative).

W każdym przypadku najpierw należy podzielić pamięć RAM na linie o takim samym rozmiarze jak linie pamięci podręcznej. Załóżmy, że pamięć RAM zawiera 1048575 takich linii (Rys. 11). Pamięć podręczna jest zawsze mniej pojemna niż pamięć RAM, załóżmy, że jest 4096 linii w tej pamięci. Jeśli każda linia z pamięci RAM może być umieszczona w dowolnej linii pamięci podręcznej, to mówimy, że pamięć podręczna jest całkowicie skojarzeniowa. W tym przypadku wykorzystanie pamięci podręcznej jest optymalne, ale czas wyszukiwania linii jest długi, bo trzeba porównać etykiety adresu każdej z linii, aby stwierdzić czy dana linia znajduje się już w pamięci podręcznej (Rys.11).

Rys. 11. Pamięć podręczna całkowicie skojarzeniowa (ang. fully associative)

 

Odmienną organizację ma pamięć z odwzorowaniem bezpośrednim. W tym przypadku priorytetem jest szybkość odnajdywania linii w pamięci podręcznej. Linie w pamięci RAM są podzielone na rozłączne bloki (Rys.12). Powiedzmy, że do bloku należą te linie, których trzy ostatnie cyfry adresu są takie same (np. 00000, xx000, FF000). W ten sposób powstaje 4096 bloków po 256 linii (razem 1048575 linii). Zauważmy, że linie należące do poszczególnych bloków są porozrzucane w pamięci RAM (nie przylegają do siebie). Pomięć podręczna zawiera 4096 linii (tyle samo ile jest bloków). W odwzorowaniu bezpośrednim w każdej określonej linii pamięci podręcznej może być umieszczona tylko jedna linia z odpowiadającego jej bloku, czyli muszą się zgadzać trzy końcowe cyfry adresu. W ten sposób, gdy szukana jest linia w pamięci podręcznej, określany jest blok, do którego dana linia należy i porównywana jest etykieta adresu tylko jednej linii skojarzonej z tym blokiem. Szybkość wyszukiwania jest bardzo duża. Problem może się pojawić, kiedy na raz potrzebne są dwie (albo więcej) linie z tego samego bloku. Chociaż taka sytuacja jest mało prawdopodobna, to w końcu się wydarzy. Ponieważ z danego bloku tylko jedna linia może być w pamięci podręcznej, to linie będą wymieniane co chwila znacznie obniżając wydajność całego systemu.

Rys.12. Pamięć podręczna z odwzorowaniem bezpośrednim (ang. direct mapped)

 

Rozwiązaniem powyższego problemu jest pamięć wielodrożna (Rys.13). Tu również pamięć RAM jest podzielona na bloki. Każdemu blokowi pamięci RAM odpowiada jednak nie jedna linia pamięci podręcznej, ale odpowiedni blok linii (w tym przypadku 4, stąd pamięć 4-drożna). W pamięci podręcznej mamy zatem 4096 bloków po 4 linie. Tak jak poprzednio linia z określonego bloku z pamięci RAM może się znaleźć tylko w odpowiednim, jednym bloku pamięci podręcznej (przyporządkowanie jak poprzednio). Tu jednak do dyspozycji mamy 4 linie, więc cztery linie z jednego bloku pamięci RAM można umieścić w pamięci podręcznej. Prawdopodobieństwo, że linie z tego samego bloku będą wzajemnie wyrzucały się z pamięci podręcznej jest dużo mniejsze. Jednocześnie pamięć o takiej organizacji jest szybka, do skojarzenia adresów linii potrzebne są w tym przypadku tylko cztery porównania. Obecnie pamięci cache wbudowane w procesory klasy PC mają taką właśnie organizację, przy czym wykorzystywane są pamięci 4-ro, 8-mio, 16-to drożne.

 

Rys.13. Wielodrożna pamięć podręczna (ang. set-associative)