1 Rodzaje pami ci W systemach komputerowych mamy do czynienia z pami ci wewn trzn (póªprzewodniki) oraz pami ci zewn trzn (techniki zapisu magnetyczne, optyczne). Pami ci wewn trzne dzielimy na dwa podstawowe rodzaje: RAM i ROM. Do masowej produkcji RAM stosujemy dwa rodzaje ukªadów: SRAM (Static RAM) i DRAM (Dynamic RAM). SRAM jest budowana w zasadzie w znany nam sposób: za pomoc przerzutników. Ukªady DRAM zbudowane s z czego± w rodzaju kondensatorów. Pami DRAM jest co jaki± czas (kilka milisekund) od±wie»ana, poniewa» ªadunek z kondensatorów ucieka. Gªówna cz ± pami ci RAM jest zbudowana we wspóªczesnych komputerach jako ukªady DRAM s one g ±ciej upakowane ni» SRAM, zu»ywaj mniej energii, produkuj mniej ciepªa i s ta«sze. Przewag SRAM jest szybko± dost pu (Porównanie czasu dost pu w 2004 r.: SRAM 0.5-5ns, DRAM 50-70ns, twardy dysk: kilkana±cie milionów ns.). Z tego powodu zazwyczaj pewna cz ± pami ci (pami podr czna procesora, cache) jest pami ci SRAM. Pami ROM (nieulotna, zachowuje dane po odª czeniu zasilania) przechowuje dane od których zale»y funkcjonowanie systemu, np. program wykonywany podczas inicjalizacji komputera. Oprócz komputerów, ROM jest wykorzystywana w systemach wbudowanych, czy innych systemach nie wymagaj cych programowania. Pami ROM mo»e by zrealizowana jako ukªad kombinacyjny: na wej±ciu podawany jest adres, na wyj±ciu pojawia si zawarto±» danej komórki pami ci. 2 Hierarchia pami ci Procesor - cache L1 - cache L2 - (cache L3) - pami gªówna - dyski magnetyczne - dyski optyczne - pami ci ta±mowa. Im dalej od procesora tym wolniej, ale taniej, wi cej i rzadziej... 3 Lokalno± odwoªa«wydajne funkcjonowanie systemu pami ci we wspóªczesnych systemach komputerowych bazuje na twz. lokalno±ci odwoªa«. Zasada jest taka: je±li przenosimy zawarto± fragmentu pami ci, który jest aktualnie potrzebny na wy»szym poziomie, to przy okazji przenosimy równie» troch s siednich danych, licz c,»e przydadz si one za chwil. Dlaczego taka strategia dobrze dziaªa? Rozkazy s zazwyczaj ªadowane sekwencyjnie, dane ukªadane w tablice, w programach wyst puj p tle... 4 Pami podr czna Chcemy uzyska (prawie) tak przeci tn szybko± transferu jak maj najszybsze pami ci (SRAM), mimo»e zdecydowana wi kszo± pami ci w naszym systemie jest zbudowana przy u»yciu ta«szej technologii (DRAM). Pami skªada si z 2 n sªów, ka»de sªowo ma swój jednoznaczny n-bitowy adres. Pami t dzielimy na pewn liczb bloków, z których ka»dy zawiera K sªów. Mamy zatem 2 n /K bloków. Pami podr czna zawiera C wierszy, z których ka»dy mie±ci K sªów (odpowiada zatem blokowi). Oczywi±cie C jest zdecydownanie mniejsze od 2 n /K. W ka»dej chwili pewne bloki pami ci gªównej znajduj si w pami ci podr cznej. Ka»dy wiersz zawiera znacznik okre±laj cy, który blok aktualnie przechowuje. Typowy schemat odwoªania do pami ci cache wygl da nast puj co: 1
Rysunek 1: Prosty system pami ci podr cznej odczytanie rzeczywistego adresu RA z CPU czy blok zawieraj cy RA jest w cache? je±li tak (traenie) prze±lij odpowiednie sªowo do CPU je±li nie (chybienie): znajd¹ blok w pami ci gªównej zawieraj cy RA przydziel wiersz cache blokowi dostarcz sªowo z RA do CPU zaªaduj blok pami ci gªównej do wiersza cache Rysunek 2: Typowa organizacja pami ci podr cznej Projektuj c pami cache nale»y ustali nat puj ce parametry: liczba poziomów pami ci cache pojemno± pami ci na ka»dym poziomie funkcja odwzorowuj ca algorytm wymiany 2
Rysunek 3: Struktura pami ci gªównej i podr cznej sposób zapisu rozmiar bloku 4.1 Funkcja odwzorowuj ca Do którego wiersza pami ci cache powinien tra dany blok? Trzy mo»liwe rozwi zania: bezpo- ±rednie, skojarzeniowe i sekcyjno-skojarzeniowe. Rozwa»a b dziemy przykªad: pami podr czna 64 KB bloki s czterobajtowe; cache ma zatem 2 14 wierszy pami gªówna to 16 MB; sªowo to pojedynczy bajt; adres ma zatem 24 bity; liczba bloków: 4 M. 4.1.1 Odwzorowanie bezpo±rednie Ka»dy blok pami ci ma przypisany dokªadnie jeden wiersz cache. Numer wiersza i zale»y od numeru bloku j i liczby wierszy cache m w prosty sposób: i = j mod m. W naszym przykªadzie oraganizacja b dzie taka jak na rysunku 5. Wiersz pierwszy ma przyporz dkowane bloki 000000,010000,...,FF0000. Wiersz pierwszy bloki 000001,010001,...,FF0001. Znacznikiem w tym przypadku jest osiem pierwszych bitów adresu rzeczywistego. Odwzorowanie bezpo±rednie jest metod prost i tani w realizacji. Wad jest sztywne przypisanie bloku do wiersza. W efekcie, je±li pewne dwa bloki, dziel ce ten sam wiersz s ±ci gane na przemian, wydajno± systemu spada. 3
Rysunek 4: Odwzorowanie bezpo±rednie 4.1.2 Odwzorowanie skojarzeniowe (asocjacyjne) Ka»dy blok mo»e by ªadowany do dowolnego wiersza. W efekcie znacznikiem musi by caªy numer bloku, czyli w naszym przypadku 22 bity (dwa ostatnie bity oznaczaj przesuni cie w bloku). Ogólna organizacja skojarzeniowej pami ci podr cznej oraz sytuacja w naszym przykªadzie przedstawione s na rysunkach 6, 7. Odwzorowanie skojarzeniowe wymaga zaprojektowania algorytmu wymiany. Jest elastyczne, ale jego wad s zªo»one ukªadu sªu» ce do jednoczesnego badania wszyskich znaczników jednocze±nie. Dlatego w praktyce u»ywa si rozwi zania po±redniego. 4.1.3 Odwzorowanie sekcyjno-skojarzeniowe W tym rozwi zaniu pami podr czna podzielona jest na v sekcji, z których ka»da skªada si z k wierszy. Blok pami ci mo»e by przechowywany w dowolnym wierszu ustalonej sekcji (kompromis pomi dzy poprzednimi rozwi zaniami). Je±li przez i oznaczymy numer sekcji, j numer bloku, m liczb wierszy, to wzory s nast puj ce: m = v k, i = j mod v. Adres rzeczywisty jest dzielony logicznie na trzy pola: znacznik, sekcja, sªowo. Za pomoc d bitów wybieramy jedn z v = 2 d sekcji. Porównujemy równolegle wszyskie znaczniki i je±li trali±my to wybieramy odpowiednie sªowo z wiersza (o tym decyduj najmniej znacz ce bity adresu). W naszym przykªadzie (rys. 9) u»ywamy pami ci z liczb wierszy w sekcji k = 2. Znacznik musi mie 9 bitów, numer sekcji 13, a sªowo, tak jak poprzednio 2. W skrajnych przypadkach: v = m, k = 1 mamy odwzorowanie bezpo±rednie, v = 1, k = m odwzorowanie skojarzeniowe. W praktyce u»ywa si niewielkich k 2 lub 4. Dalsze zwi kaszanie k przynosi bardzo niewielki wzrost liczby trae«przy niewspóªmiernie du»ym wzro±cie komplikacji sprz tu. 4
Rysunek 5: Przykªad odwzorowania bezpo±redniego 4.2 Co si dzieje w przypadku chybienia odczytu? Potok musi zosta opó¹niony - wysyªamy do ukªadu pami ci warto± PC-4,» damy przesªanie odpowiedniego bloku, zapisujemy dane (i znacznik) do wiersza pami ci cache, wznawiamy potok (je±li chybienie nast piªo przy pobieraniu rozkazu, ponownie pobieramy rozkaz). 4.3 Algorytmy wymiany Dotyczy rozwi zania skojarzeniowego i sekcyjno-skojarzeniowego. Gdy wprowadzamy nowy blok do pami ci podr cznej, wtedy jeden z dotychczasowych trzeba wyrzuci. Który? Nasz algorytm musi by mo»liwie prosty, poniewa» b dzie oczywi±cie implementowany sprz towo. Wymienimy cztery najcz ±ciej u»ywane algorytmy: 1. least-recently used wymieniamy ten, do którego odwoªywali±my si najdawniej; w przypadku pami ci skojarzeniowo-sekcyjnej dwudro»nej strategia ta jest ªatwa do zaimplementowania: mamy dodatkowy bit dla ka»dego wiersza cache. Gdy si do niego odwoªujemy ustawiamy bit na 1, a bit drugiego wiersza w sekcji na 0. Wymieniamy ten, który ma aktualnie 0. 2. rst-in-rst-out w rozwa»anym przypadku dwudro»nym równie» ªatwy do zrealizowania 3. least-frequently used z ka»dym wierszem musimy zwi za licznik 5
Rysunek 6: Organizacja skojarzeniowej pami ci podr cznej 4. przypadkowo co ciekawe, okazuje si,»e losowa wymiana nie jest du»o gorsza od wcze- ±niejszych algorytmów 4.4 Algorytm zapisu Kolejna istotna kwestia spójno± danych umieszczonych w pami ci podr cznej i w pami ci gªównej. Przed wymian bloku w cache musimy ustali, czy stary blok nie zostaª zmieniony i czy wobec tego nie trzeba zmieni zawarto±ci pami ci gªównej. W rzeczywistych systemach mamy problem: do pami ci gªównej mo»e mie dost p wi cej ni» jedno urz dzenie. Na przykªad moduª IO mo»e zapisywa /odczytywa pami bezpo±rednio (bez udziaªu procesora). Mo»liwe algorytmy: Zapis jednoczesny (write through). Wszystkie operacje zapisu s prowadzone jednocze±nie na pami ci podr cznej i gªównej (statystycznie okoªo 15 % operacji dost pu do pami ci to zapisy). Ewentualne inne moduªy wyposa»one we wªasn pami cache monitoruj wtedy magistral i równocze±nie uaktualniaj swoj zawarto±. Wada du»y przepªyw danych pomi dzy cache a pami ci gªówn. Aby nie spowalnia potoku mo»emy mie dodatkowy bufor zapisu - dane zapisywane s do bufora, z którego pó¹niej przenoszone s do pami ci (potok dziaªa dalej). Bufor ma zazwyczaj od jednej do kilku pozycji. Drugie rozwi zanie: zapis opó¹niony (write back) aktualizuje si tylko pami cache. Dopiero podczas wymiany bloku sprawdza si (bit aktualizacji) czy blok byª modykowany i je±li tak kopiuje si go do pami ci gªównej. Wada pami gªówna nie zawsze jest aktualna zatem moduªy IO musz korzysta z pami ci podr cznej. Powa»ne problemy (przy obydwu rozwi zaniach) mog wyst powa, gdy wiele urz dze«(zwykle procesorów) posiada wªasne pami ci podr czne. Wtedy nawet przy zapisie jednoczesnym pami ci podr czne poszczególnych urz dze«mog by nieaktualne. Spójno± systemu pami ci 6
Rysunek 7: Przykªad odwzorowania asocjacyjnego podr cznej jest obecnie przedmiotem intensywnych testów. 4.5 Rozmiar pami ci cache Nie mo»e by zbyt du»a z kilku powodów: cena (chcemy utrzyma przeci tn cen bitu caªego systemu pami ci systemowej na poziomie pami ci DRAM), zajmowane miejsce (umieszczamy j w procesorze), szybko± dziaªania (du»a pami cache dziaªa wolniej ni» maªa ze wzgl du na czas adresowania liczba bramek adresuj cych jest wi ksza). Trudno poda oczywi±cie najlepszy rozmiar to zale»y np. od tego jakie programy s wykonywane. 4.6 Rozmiar bloku Wydaje si,»e optymalny jest rozmiar kilku-kilkunastu (maksymalnie kilkudziesi ciu) jednostek adresowalnych (sªów lub bajtów). Testy wykazuj,»e pocz tkowe zwi kszanie rozmiaru bloku zwi ksza wspóªczynnik trae«, ale pó¹niej zaczyna on male (wi ksze bloki == mniej bloków po pobraniu bloku mo»e on zosta szybko wymieniony; du»e bloki pobierane s sªowa do± odlegªe od potrzebnego) 4.7 Liczba pami ci podr cznych W momencie wprowadzenia pami ci cache system posiadaª zazwyczaj pojedyncz pami c cache. Obecne systemy dysponuj zazwyczaj kilkoma poziomami cache, dodatkowo czasem pami 7
Rysunek 8: Organizacja sekcyjno-skojarzeniowa pami ci podr cznej rozkazów jest oddzielona od pami ci danych. 4.7.1 Pami ci wielopoziomowe Pierwszy poziom znajduj si bezpo±rednio w procesorze. Nie wykorzystuje on zatem oczywi±ci szyny systemowej. Oznaczany jest zazwyczaj jako L1. We obecnych systemach buduje si tak»e dodatkowe poziomy. Poziom L2 zawiera wi cej pami ci ni» poziom L1, dost p do niego mo»e by nieco wolniejszy, ale równie» nia u»ywa zazwyczaj szyny systemowej. Znajduje si obecnie zazwyczaj równie» na chipie procesora. Badania wykazuj,»e wprowadzenie drugiego poziomu poprawia funkcjonowanie systemu. Nie jest to takie oczywiste, bo oczywi±ci komplikuje si ukªad steruj cy (dodatkowe problemy z wymian, strategi zapisu, itp.). W niektórych systemach nie ko«czy si na dwóch poziomach. Np. w Itanium mamy: L1 (16KB+16KB), L2 (96KB) i L3 (4MB). 4.7.2 Jednolita czy dzielona pami cache? Od pewnego czasu standardowe staje si dzielenie pami ci cache na pami rozkazów i pami danych. Zauwa»my,»e przewaga cache jednolitego jest automatyczne balansowanie liczby roz- 8
Rysunek 9: Przykªad organizacji sekcyjno-skojarzeniowej pami ci podr cznej (dwudro»nej) kazów i danych oraz prostota ukªadu steruj cego. Z czego wynika zatem tendencja do dzielenia pami ci: spisuje si ona lepiej w maszynach superskalarnych i potokowych. 5 Organizacja pami ci podr cznej w procesorze Pentium 4 Historia: 386 bez cache procesora; 486 8kb, rozmiar bloku 16 bajtów, czterodro»na pami sekcyjno-asocjacyjna; Pentium dwie pami ci cache (dane, rozkazy) W przypadku Pentium 4 (jednego z modeli) mamy 8KB pami ci danych na poziomie L1 (64 bajty w bloku, czterodro»na) oraz osobny cache dla rozkazów (o nim za chwil ). Poziom L2 obsªuguje obydwie cz ±ci poziomu L1 (128 bajtów, o±miodro»ny, 256 KB). W cache rozkazów umieszczane s nie rozkazy asemblera, ale mikrorozkazy, które przeszªy ju» przez cykl pobrania (z pami ci L2) i zdekodowania. 9