Funkcje pamięci cache
Pamięć operacyjna (robocza) komputera - zwana pamięcią RAM (ang. Random Acces Memory - pamięć o dostępie swobodnym) służy do przechowywaniu danych aktualnie przetwarzanych przez program oraz ciągu znaków, z których składa się program.
Coraz szybciej taktowane procesory wymagają coraz szybszych układów pamięciowych. Już w komputerach z procesorem 386DX 25MHz wprowadzono obok pamięci operacyjnej, pamięć podręczną (cache), ponieważ normalne układy DRAM okazały się zbyt wolne dla procesora taktowanego taką częstotliwością i musiał on odczekać dodatkowe cykle, zanim otrzymał dane z pamięci. W celu usunięcia tego ograniczenia wprowadzona została pamięć podręczna stanowiąca bufor o krótkim czasie dostępu (mierzonym w pojedynczych nanosekundach lub setkach pikosekund). Układy te zbudowane są z szybkich modułów pamięci statycznej SRAM (ang. Static Random Acces Memory). SRAM w porównaniu do układów DRAM jest dużo szybsza, ale równocześnie ma dużo mniejszą gęstość, jest również o wiele droższa. Mniejsza gęstość oznacza, że układy SRAM mają większe wymiary i w sumie przechowują mniej komórek pamięci. Duża ilość tranzystorów i grupowa budowa układów oznacza, że kości SRAM są nie tylko większe, ale i droższe w porównaniu z układami DRAM. Na przykład moduł SDRAM może zawierać ponad 64 MB RAM, podczas gdy moduł SDRAM o takim samym rozmiarze będzie miał tylko 2 MB, a koszt jego wytworzenia wyniesie tyle samo, co 64 MB modułu DRAM. Ogólnie rzecz biorąc, pamięć SRAM jest około 30 razu większa i 30 razy droższa od pamięci DRAM. Z powodu dużych rozmiarów i kosztów wytwarzania, moduły SRAM nie są stosowane jako pamięć systemowa komputerów PC. Pamięć ta będąca szybką pamięcią wspiera o wiele wolniejszą pamięć operacyjną. Zastosowanie ich zaowocowało zwiększeniem wydajności obliczeniowej procesorów. Jest to jeden z najważniejszych podzespołów wpływających na wydajność jednostki centralnej. W procesorach 486DX pamięć podręczna o rozmiarze 8 KB i jej kontroler były zintegrowane z procesorem. Taka wewnętrzna pamięć jest taktowana tą samą częstotliwością co procesor i określana jest jako pamięć podręczna pierwszego poziomu (ang. L1 cache). Jej pojemność bywa różna w zależności od procesora. Od czasu wprowadzenia procesorów Intel Pentium z funkcjami MMX pamięć cache pierwszego poziomu wynosi 32 KB, z czego 16 KB jest przeznaczone na dane, a 16 KB na instrukcje. Obecnie wykorzystuje się łączenie kaskadowe modułów pamięci cache z coraz dłuższymi czasami dostępu (L1 najszybsze, L3 najwolniejsze).
Pamięć 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). Jest to zadaniem 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 zawartości pamięci cache z pamięcią główną.
Buforowe działanie pamięci podręcznej osiąga się, umieszczając je niedaleko na trasie do pamięci głównej. Niezależnie od różnic w strategii dostępu w chwili obecnej w komputerach klasy PC występują trzy podstawowe sposoby dołączania pamięci cache:
1. Układ Look-Aside
2. Układ Look-Through
3. Układ Backside
Ad. 1 Pamięć podręczna L2 jest zainstalowana na płycie głównej komputera i dołączona jest równolegle do magistrali pamięciowej. Pamięć L1 zlokalizowana jest we wnętrzu procesora i taktowana jest jego zegarem. Procesor odwołuje się do pamięci podręcznej, wykorzystując magistralę pamięciową. Częstotliwość pracy pamięci podręcznej jest taka sama jak pamięci głównej. Podniesienie wydajności osiągnąć można zatem tylko przez skrócenie czasu dostępu.
Ad. 2 W układzie Look-Through procesor jest oddzielony od pamięci RAM pamięcią podręczną cache. Procesor zanim sięgnie do pamięci głównej, napotyka układ pamięci podręcznej L1, a jeśli nie znajduje tam żądanych danych, zwraca się do L2. Jest ona z kolei sprzężona z pamięcią główną poprzez właściwą magistralę pamięciową. Pamięć podręczna L2 może być taktowana inną częstotliwością niż sama magistrala pamięciowa.
Ad. 3 W układzie Backside wprowadzono całkowite oddzielenie pamięci podręcznej od magistrali pamięciowej. Kontroler pamięci L2 osadzony jest w strukturze procesora i ma bezpośrednie połączenie z pamięcią podręczną. Częstotliwości taktowania magistral są od siebie niezależne. Fragment łączący procesor z pamięcią główną nazywany jest magistralą FSB (ang. Front Side Bus) w przeciwieństwie do części biegnącej do pamięci cache drugiego poziomu.
Pamięć cache L1 jest zintegrowana z procesorem i nie ma możliwości jej rozbudowy; składa się ona z bufora rozkazów połączonego z szyną adresową oraz z bufora danych połączonego z szyną danych procesora. Wyróżniamy trzy sposoby obsługi cache L1: write through (WT), write back (WB) oraz linear burst (LB). W procesorach klasy Pentium stosowany jest głównie tryb zapisu write back (WB). Zdecydowanie najlepsze jest takie rozwiązanie, w którym chipset oferuje wsparcie dla wszystkich rodzajów zapisu cache'u, czyli: write through, write back oraz linear burst. Tryb zapisu do pamięci buforowej L1 najczęściej wybierany jest w BIOS-e komputera.
W przypadku trybu Write Throught przy odczytywaniu danych kontroler pamięci podręcznej sprawdza na podstawie adresów zapisanych w pamięci DRAM i w pamięci Cache Tag RAM, czy nie znajdują się one już w pamięci cache. Jeśli tak, mamy do czynienie z tak zwanym trafieniem w pamięć podręczną (cache hit). Trafienie takie występuje w 95% przypadków. W efekcie tego trafienia dane zostaną natychmiastowo pobrane z szybkiej pamięci. W przeciwnym przypadku (chybienie pamięci podręcznej - cache miss) dane zostaną pobrane z wolniejszej pamięci operacyjnej. Za pomocą Cache Tag RAM, stanowiącego pewnego rodzaju indeks zawartości pamięci podręcznej, kontroler ustala czy ma do czynienia z trafieniem czy z chybieniem. 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.
W trybie pracy pamięci cache, Write Back, operacje odczytu przebiegają w zasadzie tak samo jak w pierwszym. Przy zapisie natomiast najpierw aktualizowane są dane w pamięci podręcznej, a nie w operacyjnej. Zawartość pamięci cache i pamięci głównej są uzgadniane tylko w przypadku takiej potrzeby.
Optymalne wykorzystanie przyspieszających funkcji pamięci podręcznej wymaga w praktyce działań wielopoziomowych - pierwszy bufor jest bardzo szybki i stosunkowo mały, a drugi stopień pośredni - już większy, lecz nieco wolniejszy. Bufor pierwszego poziomu o rozmiarze od kilku do kilkudziesięciu kilobajtów osadzany jest wprost na krzemowej strukturze scalonej procesora i pracuje synchronicznie z nim. W przypadku niektórych procesorów stosowany jest też trzeci poziom pamięci podręcznej o rozmiarze rzędu kilku megabajtów. Trzeci poziom pamięci podręcznej ma za zadanie zminimalizować częstotliwość odwołań do pamięci, a więc zmniejszyć powstawania konieczności wstrzymywania działań potoków procesora.
Kontroler pamięci cache L2 odpowiedzialny jest za obsługę bufora drugiego poziomu oraz współpracę z pamięcią buforową pierwszego poziomu i pamięcią operacyjną RAM. L2-cache instalowana jest najczęściej na płycie głównej.
Pamięć buforowa drugiego poziomu jest instalowana na płycie głównej w sposób umożliwiający jej rozbudowę. Płyty główne wyposażane są standardowo w pewną określoną ilość pamięci cache L2. Najczęściej spotykane rozmiary to: 256KB, 512KB, 1MB, 2MB. Najważniejsze jest, aby pamięć ta była zainstalowana (chociaż 128KB, a najlepiej 512KB). W efekcie następuje ogromny wzrost wydajności komputera. Zainstalowanie kolejnych kilobajtów już nie powoduje tak radykalnych przyrostów wydajności systemu (np. rozbudowa z 256 KB do 512 KB daje wzrost wydajności rzędu 5%).
Fizyczna lokalizacja pamięci podręcznej L2 i L3 (odległość od jądra procesora) oraz ewentualnie jakość (czas dostępu) zastosowanych układów mają decydujący wpływ na maksymalną częstotliwość taktowania pamięci. Dość istotna jest również logiczna organizacja systemu buforowania. Dotyczy ona zarówno pamięci operacyjnej, jak i pamięci podręcznej. Pamięć operacyjna podzielona jest na bloki o rozmiarze równym ilości dostępnej pamięci buforowej. Pamięć podręczna poziomu drugiego podobnie jak pamięć operacyjna nie stanowi jednolitego obszaru. Operuje ona jednostkami przydziału o długości 32 bajtów. Każda jednostka stanowi niezależną strukturę, opatrzoną własnym adresem oraz dodatkowymi informacjami określającymi status zawartych w nich danych.