1. Pamięci ROM

1.4. Organizacja pamięci podręcznej

Zaobserwowano, że podczas wykonywania programu pewne instrukcje i dane są wykorzystywane wielokrotnie. Można z dużym prawdopodobieństwem przewidzieć, które instrukcje i dane będą potrzebne w następnym kroku. Najprościej rzecz ujmując dzieje się tak z dwóch powodów, po pierwsze mamy liniową sekwencję instrukcji w programie, po drugie często wykorzystywane są pętle. Daje po pole do sformułowania zasad lokalności: przestrzennej – związanej z rozmieszczeniem instrukcji w programie i czasowej – związanej z wykorzystaniem pętli. Gdybyśmy mogli przewidzieć, które instrukcje i dane będą potrzebne w następnym kroku, można by je było wcześniej sprowadzić do szybkich pamięci podręcznych, co znacznie przyspieszyłoby wykonanie programu.

Obecnie pamięci podręczne są częścią procesora i są implementowane w tym samym układzie scalonym. Zwykle występują trzy poziomy pamięci podręcznej. Poziom pierwszy L1 stanowi najszybszą pamięć. Jest ona jednocześnie dostępna tylko dla konkretnych rdzeni procesora. Pamięć ta jest rozdzielona: w odrębnym obszarze przechowywane są rozkazy, a w odrębnym dane. W przypadku wprowadzania do pamięci podręcznej L1 rozkazów często zachodzi ich wstępne dekodowanie. Pamięć poziomu drugiego L2 też jest dostępna tylko dla konkretnych rdzeni, z tym że jest to już pamięć wspólna dla rozkazów i danych. Jest to pamięć wolniejsza od L1. Najbardziej pojemna pamięć poziomu trzeciego L3 jest wspólna dla wszystkich rdzeni (Rys. 9).

 

Rys.9. Intel Core I7 950 – organizacja pamięci cache

 

To właśnie dostęp do tej pamięci decyduje o tym, że procesory wielordzeniowe mogą szybko i efektywnie pracować na wspólnych danych. Organizacja pamięci podręcznych jest ściśle powiązana z konkretną architekturą procesora i może być różna w przypadku różnych procesorów.