Pamięć (część 2)
Przedmioty prowadzone w ramach Programu Rozwoju WSFiZ w Białymstoku realizowane są w ramach
Programu Operacyjnego Kapitał Ludzki, Priorytet IV Szkolnictwo wyższe i nauka, Poddziałanie 4.1.1
Wzmocnienie potencjału dydaktycznego uczelni, współfinansowanego ze środków
Europejskiego Funduszu Społecznego (POKL.04.01.01-00-030/08)
9. Pamięć (część 2)
Spis treści
9. Pamięć (część 2) .................................................................................................................. 1
9.2.3 Organizacja pamięci operacyjnej .......................................................................... 1
9.2.4 Pamięć kieszeniowa ............................................................................................. 2
9.2.4.1 Organizacja dostępu do procesora......................................................................... 3
9.2.4.2 Budowa i działanie ............................................................................................... 5
9.2.3 Organizacja pamięci operacyjnej
Pomimo iż rynek oferuje szeroką gamę rozmiarów pamięci zrealizowanych w jednym układzie
scalonym rzadko udaje się zrealizować wymagania konstruktorów posługując się pojedynczą
kością. Dysponując wieloma kośćmi o różnych parametrach katalogowych zazwyczaj chcemy
albo powiększyć liczbę słów zachowując oferowaną przez producenta liczbę bitów w słowie
(długość słowa) albo powiększyć długość słowa zachowując oferowaną ich liczbę.
Zwiększanie długości słowa polega na takim połączeniu układów scalonych, aby ich linie
danych stanowiły kolejne bity tworzonego słowa. Na rysunku 9.7 pokazano schemat pamięci
1M×9b powstaÅ‚ej z poÅ‚Ä…czenia dwóch koÅ›ci pamiÄ™ci 1M×4b i jednej 1M×1b.
Wejścia/wyjścia danych
d0 d1 d2 d3 d4 d5 d6 d7 d8
20 d0
adres 1M×9b d1
E E d2
R/W R/W d3
d1
1M×9b d2
d3
E d0
R/W
d0
1M×1b
E
R/W
Rysunek 9.7. Rozszerzanie długości słowa pamięci
1
Pamięć (część 2)
Wejście adresowe są zwarte, tak że ten sam adres wybiera bity d0d1d2d3 z kości pierwszej, bity
d4d5d6d7 z kości drugiej i bit d8 z kości trzeciej. Są to bity tego samego słowa powstałego układu
złożonego. Podobnie zwarte są linie R/W i E (wejście aktywujące) wszystkich układów
składowych tworząc analogiczne (tj. R/W i E) linie nowego układu. Opisany sposób stosowany
jest np. przy budowie modułów SIMM (ang. single in line module)
Zwiększanie ilości słów wymaga zwiększenia liczby adresów, co pociąga za sobą rozszerzenie
szyny adresowej. Natomiast linie danych układów składowych są ze sobą zwarte. Idea
konstrukcji nowego układu polega na tym, aby każdy układ składowy realizował część
przestrzeni adresowej nowo tworzonej dużej pamięci. Wybór układu składowego, w którym
dla konkretnego adresu znajduje się komórka pamięci dokonuje się za pomocą dekodera. Wejścia
dekodera stają się ostatnimi bitami adresu układu finalnego.
KonstrukcjÄ™ pamiÄ™ci 1M×4b z 4 ukÅ‚adów 256K×4b pokazano na rysunku 9.8 (patrz niżej).
UkÅ‚ady 256K×4b majÄ… 18-bitowe adresy: linie a0- a17. UkÅ‚ad finalny (1M×4b) ma ich w sumie 20
(18 bitów z układów składowych: linie a0- a17 i dwa od dekodera: linie a18- a20). Linie danych d0-
d3 układów składowych są ze sobą zwarte.
4
d3-d0
256K×4b 256K×4b 256K×4b 256K×4b
E R/W E R/W E R/W E R/W
16
R/W a19 a18 a17- a0
Rysunek 9.8. Powiększenie ilości słów pamięci
9.2.4 Pamięć kieszeniowa
Idea pamięci kieszeniowych powstała ze skojarzenia dwóch faktów:
istnienia dużych, ale wolnych pamięci dynamicznych oraz małych ale szybkich pamięci
statycznych;
istnienia zjawiska tzw. lokalności (ang. locality) w adresach generowanych przez
wykonujący się program, które to zjawisko objawia się niewielkim rozrzutem
wspomnianych adresów (precyzyjnie: prawdopodobieństwo wygenerowania adresów z
2
Pamięć (część 2)
bliskiego sąsiedztwa jest istotnie większe od prawdopodobieństwa wygenerowania
adresów leżących poza nim).
Pojęcie bliskie sąsiedztwo można utożsamiać z obszarem pamięci zajmowanym przez program.
Przekopiowanie komórek odpowiadającym bliskiemu sąsiedztwu z pamięci dynamicznej do
szybkiej pamięci statycznej nazywanej pamięcią kieszeniową (ang. cache memory)
spowodowałoby, że odwołania do pamięci w trakcie wykonywania programu z dużym
prawdopodobieństwem mogłyby być kierowane właśnie do tego obszaru. Jeżeli adres
pamięciowy wygenerowany przez procesor w trakcie wykonywania programu istotnie jest
adresem komórki znajdującej sie w pamięci kieszeniowej to mówimy o tzw. trafieniu. Jeżeli
adres ten jest adresem komórki znajdującej poza pamięcią kieszeniową to nazywamy ten fakt
chybieniem. Jeżeli zaszło chybienie, to należy wymienić zawartość części pamięci kieszeniowej
kopiując do niej komórki z adresami bliskimi adresu chybionego, bo szansa na to, że kolejne
odwołania do pamięci będą dotyczyły właśnie tych adresów jest duża.
Opisana idea okazała sie na tyle atrakcyjna, że jest dzisiaj powszechnie stosowna. Ze względu
na lokalizację wyróżnia sie trzy poziomy pamięci kieszeniowej:
L1 pamięć jest zintegrowana z procesorem (jest jego częścią albo inaczej znajduje sie w
jego wnętrzu);
L2 pamięć umieszczone jest w jednej obudowie z procesorem;
L3 pamięć jest poza procesorem, najczęściej w bezpośrednim jego sąsiedztwie.
Pojemność pamięci zależy od jej poziomu. Dla poziomu L1 typowe wartości wartości nie
przekraczją kilkudziesięciu KB (można przyjąć, że nie więcej niż 128 KB); dla poziomu L2:
kilkadziesiąt KB do pojedynczych MB; dla poziomu L3 są to wartości nawet rzędu 100 MB.
Prędkość tych pamięci jest od kilku do kilkunastu razy większa od prędkości dynamicznej
pamięci operacyjnej. Ze względu na dynamiczny rozwój technologii wartości te szybko ulegają
zmianie. Podsumowanie wartości parametrów pamięci kieszeniowych znajduje sie w tabeli 9.2.
Poziom Pojemność Czas dostępu
L1 d"128KB ~1ns
L2 128KB÷4MB 1÷2ns
L3 d"144MB 2÷5ns
Tabela 9.2. Zestawienie parametrów różnych poziomów pamięci kieszeniowej
9.2.4.1 Organizacja dostępu do procesora
Wyróżniamy trzy typy organizacji dostępu procesora do pamięci kieszeniowej:
dostęp bezpośredni (ang. look-aside);
dostęp przez (ang. look-through);
dostęp od tyłu (ang. look-backside).
Pokrótce opiszemy każdy z nich. Zaczniemy od dostępu bezpośredniego. W tym trybie
procesor odwołuje się do pamięci kieszeniowej wykorzystując magistralę pamięciową (patrz
rysunek 9.9 niżej). Pamięć kieszeniowa jest podłączona równolegle z pamięcią operacyjną. W
takim układzie częstotliwość pracy obu pamięci jest taka sama (komunikacja odbywa się po
wspólnej magistrali), tylko czas dostępu dzięki szybkości pamięci kieszeniowej może ulec
skróceniu. Wykorzystanie tej samej magistrali nie jest korzystne. Jest ona blokowana przy
3
Pamięć (część 2)
każdym dostępie procesora do pamięci kieszeniowej i nie może być w tym samym czasie
udostępniona innym urządzeniom.
magistrala pamięci
Procesor Pamięć operacyjna
Pamięć
kieszeniowa
Rysunek 9.9. Architektura dostępu pamięci do procesora: tryb bezpośredni
W trybie dostępu przez pamięć kieszeniowa pośredniczy w dostępie procesora do pamięci
operacyjnej. Procesor odwołuje się do pamięć kieszeniowej, która jest połączona przez magistralę
pamięciową z pamięcią operacyjną RAM (patrz rysunek 9.10).
Pamięć Pamięć
Procesor kieszeniowa operacyjna
Rysunek 9.10. Architektura dostępu pamięci do procesora: tryb przez
W trybie dostępu od tyłu pamięć kieszeniowa jest dołączony do procesora przez oddzielną
magistralÄ™ nazywanÄ… pomocniczÄ… (ang. BSB; Back Side Bus). Druga magistrala nazywana
główną (ang. FSB Front Side Bus) łączy procesor z pamięcią operacyjną (patrz rysunek 9.11). W
tym układzie obie magistrale są zupełnie niezależne (mogą pracować z różnymi
częstotliwościami). Możliwe jest też wykorzystanie magistrali FSB przez inne urządzenia
zapisujące do pamięci operacyjnej, w czasie gdy procesor komunikuje się z pamięcią
kieszeniowÄ… przez magistralÄ™ pomocniczÄ….
magistrala
FSB Pamięć
Procesor operacyjna
magistrala
BSB
Pamięć
kieszeniowa
Rysunek 9.11. Architektura dostępu pamięci do procesora: tryb od tyłu
4
Pamięć (część 2)
9.2.4.2 Budowa i działanie
Ogólna zasada konstrukcji pamięci kieszeniowych polega na podziale pamięci operacyjnej na k
bloków po q słów każdy, a pamięci kieszeniowej na linie (ang. slot), w której mieści się jeden
blok oraz jego numer nazywany etykietą (ang. tag). Aby obliczyć długość linii (w bitach) należy
wyznaczyć liczbę bitów, jaką zajmie etykieta. Zróbmy to przy założeniu, że mamy k bloków.
Jeżeli szukaną liczbę oznaczymy przez x to musi być ono tak dobrane, aby na x bitach można
było zapisać każdy możliwy numer bloku. Ilość numerów, jakie można zapisać na x bitach równa
jest ilości różnych ciągów zero-jedynkowych o długości x, czyli 2x. Mamy więc:
2x = k
czyli, że
x = log2k (1)
Długość linii w bitach, zakładając, że słowo jest 8-bitowe wynosi więc:
s = log2k + 8"q (2)
Na rysunku 9.12 pokazane są schematy pamięci operacyjnej i kieszeniowej skonstruowanych
według omówionych zasad.
Przy projektowaniu pamięci kieszeniowej należy rozwiązać trzy kluczowe zagadnienia:
1. odwzorowanie adresów pamięci operacyjnej i pamięci kieszeniowej;
2. algorytmy wymiany pamięci operacyjnej i kieszeniowej;
3. strategia aktualizacji zawartości pamięci operacyjnej i kieszeniowej.
Omówimy je posługując się przykładową pamięcią operacyjną o pojemności 64K = 216 słów
podzieloną na 8-słowowe bloki (q=8) i również przykładową pamięcią kieszeniową o pojemności
m = 128 linii po 8 słów w linii. Z tych danych wynika, że mamy k = 216/8 = 216/23 = 213 = 8192
bloków.
a) b)
log2k q słów
0 0
1 1
1 blok
.....
q-1
2 blok
k-1 blok m-2
m-1
k blok
Rysunek 9.12. Schemat pamięci operacyjnej (a) i kieszeniowej (b).
5
Pamięć (część 2)
Odwzorowanie pamięci operacyjnej na pamięć kieszeniową organizuje się według jednej z
trzech metod: bezpośredniej, skojarzeniowe lub skojarzeniowej zmodyfikowanej.
W metodzie bezpośredniej (ang. direct mapping) każdej linii pamięci kieszeniowej przydziela
się pewien ustalony zbiór bloków pamięci operacyjnej. Tylko bloki tego zbioru mogą być
kopiowane do i z ustalonej linii. Liczba bloków zbioru równa jest liczbie bloków przypadających
na jednÄ… liniÄ™ i wynosi:
k/m = 8192/128 = 213/27 = 26 = 64
Zgodnie z zasadami konstrukcji pamięci kieszeniowej podanymi wcześniej każdy blok tego
zbioru ma swoją etykietę o długości x bitów, gdzie x można wyliczyć korzystając z wzoru 1
(patrz wyżej) ale odnosząc go do liczby bloków w zbiorze. Tak więc:
x = log2(k/m) = log264 = log226 = 6
Ponieważ każdą linię pamięci kieszeniowej tworzy etykieta i odpowiadający jej blok, to
długość linii (przy założeniu, że mamy 8-bitowe słowa) zgodnie z wzorem 2 (patrz wyżej)
wynosi:
s = 6 + 8"8 = 70 bitów.
Na rysunku 9.13 (patrz niżej) pokazany jest schemat pamięci kieszeniowej z mapowaniem
bezpośrednim wraz ze sposobem wyboru boków tworzących zbiory przypisywane
poszczególnym liniom tej pamięci. Wewnątrz niektórych prostokątów przedstawiających
pojedyncze, kolejne bloki pamięci wypisane są kolejne numery bloków tworzących zbiór
przypisany do wybranej dla przykładu pierwszej linii (tj. linii o numerze 0) pamięci kieszeniowej.
Niezależnie pokazują to strzałki skierowane do tej i do niektórych wybranych linii. Zgodnie z
tym schematem linii 0 przypisane sÄ… 64 bloki o numerach: 0, 128, 256, ... , 8064. Natomiast linii
pierwszej przypisane sÄ… 64 bloki o numerach: 1, 129, 257, ... , 8065. Ostatniej linii (ma numer
127) przypisane sÄ… 64 bloki o numerach: 127, 255, ... , 8191.
nr bloku
0 1 0
1 1
2
127
128 2
129
130
255
8064 64 127
70 bitów
8191
Rysunek 9.13. Odwzorowanie bloków pamięci operacyjnej na pamięć kieszeniową w metodzie
bezpośredniej.
6
Pamięć (część 2)
Pokazany schemat organizacji znajduje swoje odzwierciedlenie w interpretacji adresu
generowanego przez procesor (pamiętajmy, że taki adres zawsze wskazuje słowo w pamięci
operacyjnej). Przy 64K pamięci adresy są 16 bitowe, a każde 16 bitów dzielimy na 3 grupy:
6-bitowa etykieta wskazujÄ…ca numer bloku w ramach 64-blokowego zbioru;
7-bitowy adres wskazujący numer linii w pamięci kieszeniowej;
3-bitowy adres wskazujący numer słowa w 8-słowowym bloku.
nr linii pamięci nr słowa
etykieta kieszeniowej w bloku
6 bitów 7 bitów 3 bity
Rysunek 9.14. Interpretacja bitów adresu wytworzonego przez procesor w metodzie bezpośredniej.
Procesor, który wytworzy adres, odczytuje z pamięci kieszeniowej etykietę w linii wskazanej
grupą 7 bitów tego adresu i porównuje ją z etykietą adresu wytworzonego. Zgodność oznacza
trafienie. Wtedy z pamięci kieszeniowej odczytywane jest słowo o numerze wskazanym przez
grupę 3 ostatnich bitów adresu. Niezgodność oznacza chybienie i wtedy należy dokonać
wymiany całej linii pamięci kieszeniowej. Polega to na zapisaniu aktualnej zawartości linii do
pamięci operacyjnej, a następnie odczytaniu z niej żądanego bloku, zapisania go do pamięci
kieszeniowej i sięgnięciu do słowa wskazanego przez grupę 3 ostatnich bitów adresu.
W metodzie skojarzeniowej (ang. associative mapping) dopuszcza się, aby każdy blok mógł
być przypisany do dowolnej linii pamięci kieszeniowej. W naszym przykładzie mamy 8192 = 213
bloków co oznacza konieczność wydłużenia etykiety do 13 bitów, a długości linii do s = 13 + 8"8
= 77 bitów (patrz wzór 2 wyżej). Schemat takiej pamięci pokazano na rysunku 9.15.
a) b)
0 0
1
2 nr słowa
etykieta w bloku
13 bitów 3 bity
i 127 adres pamięci operacyjnej
i+1
i+2 77 bitów
8191
Rysunek 9.15. (a) Odwzorowanie bloków pamięci operacyjnej na pamięć kieszeniową w metodzie
skojarzeniowej; (b) odpowiadająca jej struktura adresu pamięci operacyjnej.
Sprawdzenie czy w tak zorganizowanej pamięci znajduje się zawartość wytworzonego adresu
polega na przejrzeniu wszystkich linii w celu stwierdzenia czy znajduje siÄ™ tam linia z
poszukiwaną etykietą. Jest to czasochłonne i znacznie spowolniłoby działanie pamięci. Dlatego
do realizacji sprawdzania obecności linii o zadanej etykiecie używa się tzw. pamięci
skojarzeniowej albo asocjacyjnej, która dała nazwę całej metodzie.
Pamięć asocjacyjna jest to pamięć RAM (w naszym przykładzie jej rozmiary to 128 słów 13
bitowych bo tyle jest etykiet) z dodatkowymi wejściami w liczbie równej ilości bitów słowa tej
pamięci (u nas: 13) oraz dodatkowymi wyjściami odpowiedzi w liczbie równej ilości słów
7
Pamięć (część 2)
pamięci (u nas 128). Działa ona w ten sposób, że generuje na wyjściu numer i jedynkę, jeżeli w i-
tym słowie znajduje się podana na wejścia kombinacja bitów (tzn. generuje kod 1 z n; tu 1 z
128). Jeżeli wszystkie wyjścia pamięci asocjacyjnej skierujemy do kodera, to na jego wyjściu
uzyskamy zakodowany binarnie numer linii pamięci kieszeniowej, pod którym znajduje się
poszukiwany blok. Jeżeli na wyjściu pamięci asocjacyjnej będą same zera, to oznacza to
chybienie i wtedy pamięć kieszeniowa nie jest odczytywana (patrz rysunek 9.16).
13 128 7
Pamięć asocjacyjna Koder
128×13b
Rysunek 9.16. Układ testujący zawartość pamięci kieszeniowej
Wadą tej metody jest wysoki koszt pamięci asocjacyjnej, który na dodatek szybko rośnie wraz
ze wzrostem pojemności pamięci. Można wtedy posłużyć się zmodyfikowaną metodą
skojarzeniowÄ….
W zmodyfikowanej metodzie skojarzeniowej (ang. set-associative mapping) rozmiary
pamięci asocjacyjnej nie są tak duże, a nawet można z niej zrezygnować. Generalnie metoda
polega na zmniejszeniu ilości linii pamięci kieszeniowej kosztem ich wydłużenia. Dzieje się tak
przez umieszczenie w jednej linii wielu bloków. Z daną linią mogą być skojarzone tylko
określone bloki (podobnie jak w metodzie bezpośredniej). Miejsce ich zapisu wewnątrz linii jest
dowolne. Przykładowa realizacja dla naszego przykładu z dwoma blokami w linii pokazana jest
na rysunku 9.17.
a) b)
0 blok0 blok1 0
1 blok 2 blok3 1
2 nr linii
pamięci nr słowa
etykieta kieszeniowej w bloku
7 bitów 6 bitów 3 bity
63 blok 126 blok 127 63 adres pamięci operacyjnej
64
65 2 × 71 bitów
8191
Rysunek 9.17. Odwzorowanie bloków pamięci operacyjnej na pamięć kieszeniową w zmodyfikowanej
metodzie skojarzeniowej (a); odpowiadająca jej struktura adresu pamięci operacyjnej (b)
Pojemność pokazanej pamięci wynosi 64 linie142 bitowe. Z zasady konstrukcji tego rodzaju
pamięci wynika, że długość linii powinna wynosić 70 bitów (ze względu na podobieństwo do
metody bezpośredniej). Dodatkowy, 71 bit jest potrzebny, aby oznaczyć miejsce bloku w linii:
przy dwóch blokach wystarczy na to 1 bit. Liczba ta pomnożona przez 2 (dwa bloki w linii) daje
142.
Podstawową zaletą te metody jest możliwość wyeliminowania całkowicie drogiej pamięci
asocjacyjnej.
8
Pamięć (część 2)
Opiszemy teraz algorytmy wymiany zawartości pamięci kieszeniowej. Wymiana taka ma
miejsce wtedy, gdy procesor żąda dostępu do komórki pamięci, której nie ma w pamięci
kieszeniowej. W metodzie bezpośredniej wymian zachodzi pomiędzy dwoma określonymi
blokami. W pozostałych metodach istnieje możliwość wyboru bloku, który ma zostać usunięty z
pamięci kieszeniowej, aby w zwolnione miejsce zapisać potrzebny blok. Wyboru dokonuje się
stosując jeden z trzech algorytmów:
1. Algorytm usuwania najdłużej nieużywanego bloku: LRU (ang. least recently used). Jest on
stosowany dla zmodyfikowanej metody skojarzeniowej. Jeżeli przez p oznaczymy liczbę
bloków zapisanych w jednej linii, to algorytm ten wymaga dopisania dodatkowych log2p
bitów na blok. W naszym przykładzie p = 2, co daje 1 dodatkowy bit. Początkowo wszystkie
bity są zerowane. Trafienie w blok ustawia wartość bitu tego bloku na jeden. Przy
konieczności wymiany usuwa się blok z zerowym bitem. Trafienie w blok, który już ma
ustawioną jedynkę ustawia 0 w drugim bloku. Jeżeli bloków w linii jest więcej, to na
dodatkowych bitach organizuje sie licznik trafień. Polityka podbijania i obniżania wartości
liczników jest taka jak dla jednego bitu. W przypadku, gdy bloków, które spełniają kryteria
usunięcia jest więcej jak jeden wybiera się przypadkowy z nich.
2. Algorytm usuwania bloku najdłużej przebywającego w pamięci: FIFO (ang. first in firdt out).
Jego implementacja wymaga zainstalowania dodatkowego pola, w którym dla każdego bloku
zapisuje się numer wskazujący kolejność załadowania do pamięci kieszeniowej. Usuwany
jest blok z najmniejszą wartością numeru.
3. Algorytm usuwania najrzadziej używanego bloku; LFU (ang. least frequently used). Jego
implementacja wymaga zainstalowania dodatkowego pola, w którym dla każdego bloku
zapisuje się liczbę odwołań do tego bloku. Usuwany jest blok z najmniejszą wartością
licznika.
Ostatnim z listy zagadnień projektowych był problem aktualizacji zawartości pamięci
kieszeniowej i operacyjnej. Jest on znany również pod nazwą problemu synchronizacji
zawartości obu rodzajów pamięci. Konieczność takiej synchronizacji wynika z dwóch powodów:
1. zawartość pamięci kieszeniowej może zostać zmieniona na skutek wykonywania programu,
podczas gdy odpowiadająca jej zawartość pamięci operacyjnej pozostanie nie zmieniona;
2. zawartość pamięci operacyjnej może zostać zmieniona w wyniku transmisji realizowanych
przez DMA bądz inne urządzenie zewnętrzne, podczas gdy odpowiadająca jej zawartość
pamięci kieszeniowej pozostanie nie zmieniona.
Aby utrzymać stan spójności (koherentność) pamięci należy aktualizować zawartość obu
pamięci. Można dokonywać tego po każdej zmianie. Ten sposób nosi nazwę zapisu
natychmiastowego (ang. write through). Jego wadą jest spowolnienie działania systemu.
Alternatywą są metody: powtórnego zapisu (ang. write back lub copy back) oraz
natychmiastowej sygnalizacji (ang. write once). Pierwsza z nich polega na utrzymywaniu dla
każdego bloku 1-bitowego wskaznika aktualizacji (ang. update). Zapis do bloku ustawia ten
wskaznik na 1. Przy usuwaniu bloku bada się wskaznik i zapisuje się do pamięci operacyjnej
wyłącznie bloki z ustawionym wskaznikiem. Pozostałe są po prostu nadpisywane.
Metoda natychmiastowej sygnalizacji stosowana jest w systemach wieloprocesorowych i jej
omawianie wykracza poza ramy tego opracowania.
9
Pamięć (część 2)
Na zakończenie omawiania zagadnień związanych z pamięcią kieszeniową powiedzmy kilka
słów o wydajności pamięci operacyjnej wspartej pamięcią kieszeniowa. Miarą wydajności jest
tzw. współczynnik trafień h (ang. hit ratio) definiowany jako procentowy udział odwołań do tych
komórek pamięci, które zostały znalezione w pamięci kieszeniowej w stosunku do wszystkich
odwołań. Jednocześnie przez współczynnik chybień rozumie się wielkość 1 h. Wprowadzenie
powyższych określeń pozwala zdefiniować średni czas dostępu w systemie z pamięcią
kieszeniowÄ… jako:
ta = tc + (1-h)"tm
gdzie tc jest czasem dostępu pamięci kieszeniowej, a tm jest czasem dostępu pamięci operacyjnej.
h
0,9 q=64
q=16
0,6 q=8
0,3
5 10 15 20 (KB) pojemność
pamięci
kieszeniowej
Rysunek 9.18. Zależność współczynnika trafienia od pojemności pamięci kieszeniowej
Na rysunku 9.18 pokazano zależność współczynnika trafień od pojemności pamięci
kieszeniowej zmierzone dla komputera PDP 11. Parametrem jest wielkość bloku pamięci (q). Jak
wynika z tego rysunku wartość współczynnika początkowo rośnie wraz ze wzrostem pojemności
pamięci. Jednak powyżej pewnej granicy nie ma sensu dalsze zwiększanie pojemności pamięci
kieszeniowej, ponieważ wartość współczynnika trafień przyrasta już bardzo niewiele. Powodem
może być osiągnięcie takiego stanu, w którym w pamięci kieszniowej mieści się całość instrukcji
i danych, na których w danym momencie operuje program.
10
Wyszukiwarka
Podobne podstrony:
9w Pamiec 1 v019w Pamiec 3Sprawdź swoją pamięć A4uczenie sie i pamiecZimowym rankiem w Edo pamięci 47 roninówpamiec (3)Lekcja 7 Trening pamieci to nie wszystko Zadbaj o swoja koncentracjewięcej podobnych podstron