Koncepcja pamięci podręcznej (cache)
Koncepcja pamięci cache jest podobna do koncepcji pamięci wirtualnej i wynika z własności pamięci SRAM i DRAM. Przypominamy krótko, że pamięci statyczne są szybsze od pamięci dynamicznych, natomiast pobierają więcej energii i są zdecydowanie droższe. Ponadto są układami o niższym stopniu scalenia. Z tych powodów nie jest możliwe zbudowanie całej pamięci operacyjnej z pamięci statycznych. Z drugiej strony, pamięci dynamiczne są zbyt wolne dla szybkich, współczesnych procesorów i wymagają przy dostępie stanów oczekiwania. Wynika to zarówno z dużej częstotliwości zegara taktującego te procesory, jak i na przykład z występującej w procesorach Pentium pracy dwupotokowej czy też dynamicznej realizacji instrukcji. Aby zmniejszyć ten efekt, wprowadzono następującą koncepcje. Pamięć systemu składa się z relatywnie dużej pamięci operacyjnej (rzędu kilkuset MB do pojedynczych GB) zbudowanej z pamięci dynamicznych oraz z mniejszej (kilka do kilkuset kB), lecz znacznie szybszej pamięci cache zbudowanej z pamięci statycznych. Ponadto w systemie musi znajdować się sterownik pamięci cache koordynujący w systemie współpracę pamięci z pozostałymi układami. W przypadku operacji na pamięci sterownik ten sprawdza, czy poszukiwana informacja znajduje się w pamięci cache. Jeżeli tak, operacja jest wykonywana na pamięci cache, bez stanów oczekiwania. Sytuacja taka nazywana jest trafieniem (ang. cache hit). W przypadku nieobecności informacji w pamięci cache następuje dostęp do pamięci operacyjnej z koniecznymi stanami oczekiwania. Jest to tak zwane chybienie (ang. cache miss).
1. Architektura systemu z pamięcią cache
We współczesnych systemach z pamięcią cache występują dwa rodzaje architektury: Look – through i Look – aside.
1.1. Architektura Look – through
Sposób podłączenia pamięci cache w przypadku architektury Look – through pokazany jest na rysunku 31.
Rysunek 31 Architektura Look – through
W architekturze tej pamięć cache, połączona magistralą lokalną z procesorem, oddziela go od reszty systemu. W przypadku trafienia główna magistrala systemu nie jest w ogóle używana, co powoduje dodatkowe zwiększenie szybkości działania systemu. Związane jest to z możliwością korzystania z magistrali głównej przez innych zarządców magistrali (np. sterownik DMA) w trakcie realizacji operacji na pamięci cache. Żądanie dostępu do pamięci jest przekazywane do pamięci głównej (PAO) tylko w wypadku chybienia. Inicjowany jest wówczas cykl magistrali głównej z koniecznymi stanami oczekiwania.
1.2. Architektura Look – aside
Sposób współpracy pamięci cache z systemem przy zastosowaniu architektury Look – aside przedstawia rysunek 32.
Rysunek 32 Architektura Look – aside
W przypadku tej architektury procesor nie jest odizolowany od reszty układów przez cache. Dostęp do pamięci powoduje rozpoczęcie normalnego cyklu magistrali. W przypadku trafienia cykl ten jest zawieszany, a operacja jest wykonywana w pamięci cache bez stanów oczekiwania. W przypadku chybienia wykonywany jest normalny cykl magistrali ze stanami oczekiwania.
Przy zastosowaniu architektury Look-aside, nawet w przypadku trafienia, magistrala nie jest dostępna dla innych zarządców magistral. Nie są też możliwe równolegle operacje dla dwóch zarządców magistral. Zaletami architektury Look-aside są natomiast: prostsza konstrukcja, niższy koszt i nieco szybsza realizacja operacii w przypadku chybienia (normalny cykl magistrali jest rozpoczynany od razu po żądaniu dostępu do pamięci).
2. Elementy systemu pamięci cache
System pamięci cache składa się z trzech elementów:
· banku danych pamięci cache (pamięć danych),
· katalogu pamięci cache (często nazywanego TAG-RAM-em),
· sterownika pamięci cache.
W banku danych pamięci cache przechowywana jest zapisywana i odczytywana informacja, natomiast katalog pamięci cache służy do szybkiego sprawdzania, czy poszukiwana informacja znajduje się w pamięci danych cache (konkretnie, czy dany adres jest odwzorowany w pamięci cache). Stanowi to zadanie sterownika pamięci cache, który ponadto organizuje współpracę pamięci cache z systemem. Jednym z bardzo ważnych elementów tej współpracy jest zapewnienie zgodności (ang. consistency lub coherency) zawartości pamięci cache z pamięcią główną. Problemowi temu poświęcony jest następny podpunkt.
3. Sposoby zapewniania zgodności pamięci cache
Niezgodność zawartości pamięci cache z zawartością pamięci głównej występuje w dwóch przypadkach: nastąpił zapis do pamięci cache bez zapisu do pamięci głównej lub nastąpił zapis do pamięci głównej baz zapisu do pamięci cache. Pierwsza sytuacja występuje w przypadku trafienia przy zapisie. Druga występuje na przykład w przypadku transmisji DMA do pamięci głównej (gdy z magistrali głównej korzystał inny zarządca magistral niż procesor). Czasowa niezgodność pamięci jest dopuszczalna, nie wolno natomiast dopuścić do sytuacji, w której zostanie użyta nieaktualna informacja.
W przypadku zapisu do pamięci cache stosowane są następujące strategie utrzymania zgodności:
· Write-through,
· buforowane Write-through,
· Write-back.
W strategii Write-through każdy zapis do pamięci cache powoduje jednocześnie zapis do pamięci głównej. Jest to rozwiązanie bardzo proste i pewne, niestety powodujące zmniejszenie szybkości działania systemu (każdy zapis trafia do „wolnej” pamięci głównej).
Buforowane (lub inaczej opóźnione) Write-through polega na zapisaniu informacji zarówno w przypadku trafienia, jak i chybienia do bufora sterownika cache, przy czym procesor widzi tę operację jako dostęp do pamięci bez stanów oczekiwania. W rzeczywistości operacja zapisu do pamięci głównej jest realizowana później (jest opóźniona). Stany oczekiwania występują dla procesora jedynie w przypadku kolejno po sobie następujących zapisów do pamięci. Pomiędzy zapisem informacji do pamięci cache dostęp do magistrali dla innych zarządców magistrali jest blokowany w celu uniknięcia użycia nieaktualnej informacji (dodatkowy powód tej operacji to potrzeba dostępności magistrali w celu dokonania przepisania informacji z bufora).
W przypadku strategii Write-back zawartości pamięci cache i pamięci głównej są uzgadniane tylko w przypadku takiej potrzeby. Występuje ona, gdy inny zarządca magistrali chce skorzystać z komórki pamięci głównej, która zawiera nieaktualną informację, lub gdy w pamięci cache wymieniana jest linia zawierająca nową informację. Budowa pamięci cache stosującej strategię Write-back jest bardziej skomplikowana, gdyż jak wynika z podanego opisu, należy śledzić operacje magistrali w pamięci głównej dotyczące innych zarządców magistrali. W przypadku operacji w komórkach odwzorowanych w pamięci cache należy przeprowadzić jej uaktualnienie.
Drugi przypadek, w którym może dojść do niezgodności pamięci głównej i pamięci cache, występuje, gdy inny (niż procesor główny) zarządca magistrali dokonuje zapisu (lub. dla pamięci cache ze strategią Write-back, także odczytu) do pamięci. Najczęściej używaną metodą utrzymania zgodności w takim przypadku jest śledzenie przez sterownik cache operacji magistrali (ang. bus snooping). Reakcja systemu pamięci cache zależy od strategii stosowanej do utrzymania zgodności przy zapisie informacji przez procesor. W przypadku strategii Write-through sterownik pamięci cache może unieważnić linię odwzorowującą w niej modyfikowaną komórkę pamięci. Powoduje to w przypadku odwołania się procesora do tej informacji w pamięci cache chybienie i w konsekwencji jej odczyt z pamięci głównej.
W przypadku strategii Write-back proste unieważnienie linii nie jest możliwe, gdyż może ona zawierać informacje wpisane do cache przez procesor, a nie odwzorowane w pamięci głównej, które ulegną straceniu. Sterownik pamięci cache musi więc spowodować wstrzymanie na pewien czas zapisu przez zarządcę magistrali, przepisanie linii do pamięci głównej i dopiero wtedy jej unieważnienie. Po tej operacji zarządca magistrali może wznowić operację zapisu.
Trzecia możliwość występuje zarówno dla architektury Write-through, jak i Write-back. W przypadku wykrycia zapisu do komórki, która jest odwzorowywana w pamięci cache, informacja jest przechwytywana przez sterownik pamięci cache i jednocześnie do niej zapisywana.
W przypadku stosowania strategii Write-back sterownik pamięci cache musi śledzić także operacje odczytu. Jeżeli zarządca magistrali próbuje odczytać komórkę pamięci głównej, która jest odwzorowana w pamięci cache i była zmieniana, sterownik pamięci cache musi wstrzymać cykl magistrali, uaktualnić pamięć główną i dopiero wtedy zezwolić na odczyt.
4. Organizacja pamięci cache
W celu zapewnienia możliwości szybkiego sprawdzenia, czy komórka pamięci w której ma być wykonana operacja, jest odwzorowana w pamięci cache, dwie części pamięci cache, bank danych i katalog, tworzą tak zwaną jednoblokową pamięć asocjacyjną (ang. One-way Set-associative lub Direct-mapped). W takiej organizacji pamięć cache stanowi jeden blok, który jest dzielony na zestawy. Pamięć główna dzielona jest na strony o rozmiarze równym rozmiarowi bloku pamięci cache. Strony są z kolei również dzielone na zestawy, przy czym liczba zestawów w stronie jest identyczna jak w bloku pamięci cache. Każdy zestaw w pamięci cache ma swoją pozycję w katalogu (TAG-RAM). Zawiera ona adres strony, z którego pochodzi dany zestaw. Każdy zestaw jest wpisywany na miejsce w pamięci cache do zestawu o numerze zgodnym z numerem zestawu w stronie. Umożliwia to bardzo szybkie sprawdzenie obecności zestawu - nie musimy bowiem przeszukiwać katalogu, lecz sprawdzamy adres bloku w określonej pozycji katalogu. Interpretacja graficzna struktury jednoblokowej pamięci asocjacyjnej cache oraz jej relacje z pamięcią główną przedstawia rysunek 33.
Rysunek 33 Przykład organizacji pamięci cache
W przypadku wymiany zestawu na danej pozycji modyfikowany jest adres bloku w pozycji katalogu odpowiadającej temu zestawowi. Przykładowo na rysunku 33 w wyniku odczytu odpowiednich komórek w pamięci cache są odwzorowane zestawy 4 i 5 ze strony 0 oraz zestaw dwa ze strony 1. Jeżeli teraz nastąpi odwołanie do zestawu 4 na stronie 2, to zestaw ten zostanie wpisany w banku pamięci cache na miejsce zestawu 4 ze strony 0. Jednocześnie w pozycji katalogu cache odpowiadającej danemu zestawowi w miejsce strony 0 zostanie wpisana strona 2.
Jeżeli bank danych pamięci cache dzielimy na dwa lub cztery bloki, mówimy odpowiednio o dwu- lub czteroblokowej pamięci asocjacyjnej (ang. two-ways set-associative memory lub four-ways set-associative memory).
mrdjmaciek