Architektura i organizacja komuterów W6 Pamięć wewnętrzn

background image

Pamięć wewnętrzna

Kodowanie Hamminga,
pamięć cache, pamięć DRAM

Wyższa Szkoła Biznesu
Architektura i organizacja
komputerów
Wykład 6

background image

Kodowanie Hamminga

Na rysunku (następny slajd) do zilustrowania wykorzystania tego

kodu w odniesieniu do słów 4-bitowych (M=4) zostały

wykorzystane wykresy Venna.
W przypadku trzech krzyżujących się okręgów mamy do

czynienia z siedmioma przedziałami. Przypisujemy 4 bity danych

przedziałom wewnętrznym (rys. a). Pozostałe przedziały są

wypełniane tzw. bitami parzystości. Bit parzystości jest

wybierany tak, że całkowita liczba jedynek w jego okręgu jest

parzysta. Wobec tego, ponieważ okrąg A zawiera 3 jedynki

danych, bit parzystości w tym okręgu jest ustawiany na 1. Jeśli

teraz błąd spowoduje zmianę jednego z bitów danych (rys. c),

jest on łatwy do wykrycia. Sprawdzając bity parzystości,

wykrywamy sprzeczności w okręgach A i C, ale nie w B. Tylko

jeden z 7 przedziałów znajduje się w A i C, ale nie w B. Błąd

może więc być poprawiony przez zmianę tego bitu.

background image

Kod korekcyjny

Hamminga

- wykres Venna

background image

Przykład

W celu wyjaśnienia wykorzystanej koncepcji opracujemy

kod, który może posłużyć do wykrycia i skorygowania 1-

bitowego błędu w słowach 8-bitowych.
Na wstępie określmy wymaganą długość kodu. Zgodnie z

rys. (ostatni rysunek na poprzednim wykładzie: Działanie

kodu

korekcyjnego)

logiczne

układy

porównujące

otrzymują na wejściu dwie wartości K-bitowe.
Porównanie bit po bicie jest przeprowadzane przy użyciu

bramki LUB wyłączne (exclusive-or-EXOR) o 2 ejściach.

Wynik jest określany jako słowo-syndrom. Tak więc, każdy

bit syndromu jest 0 lub 1 zależnie od tego, czy jest, czy też

nie ma zgodności bitów na dwóch wejściach.

background image

Niezbędna ilość bitów

Słowo-syndrom ma więc K bitów i zakres

wartości 2

K

(pomiędzy 0 a 2

K

- 1). Wartość 0

wskazuje, że nie został wykryty żaden błąd, zaś

2

K

-1 wartości służy do wskazania błędu i jego

lokalizacji bitowej. Ponieważ błąd może wystąpić

w każdym z M bitów danych i K bitów

kontrolnych, musimy mieć

2

K

- 1 ≥ M + K

Równanie to określa liczbę bitów wymaganą do

skorygowania błędu 1-bitowego w słowie

zawierającym M bitów danych.

background image

Ile liczb bitów kontrolnych jest

wymaganych w przypadku słów o

różnej długości ?

Równanie to określa liczbę bitów wymaganą do skorygowania
błędu 1-bitowego w słowie zawierającym M bitów danych.

Liczba

bitów

danych

Poprawianie

pojedynczego błędu

Poprawianie

pojedynczego,

wykrywanie

podwójnego błędu

Bity

kontrolne

% wzrostu

Bity

kontrolne

% wzrostu

8

4

50

5

62,5

16

5

31,25

6

37,5

32

6

18,75

7

21,875

64

7

10,94

8

12,5

128

8

6,25

9

7,03

256

9

3,52

10

3,91

background image

Przykład cd.

Widzimy w tej tabeli, że słowo zawierające 8 bitów

danych wymaga 4 bitów kontrolnych. Dla wygody

chcielibyśmy generować syndrom 4-bitowy o

następujących własnościach.
Jeśli syndrom zawiera same 0, to znaczy, że nie

został wykryty żaden błąd.
Jeśli syndrom zawiera jedną i tylko jedną 1, błąd

wystąpił w jednym z bitów kontrolnych. Wówczas

korekta jest niepotrzebna,
Jeśli syndrom zawiera więcej niż jedną 1, to wartość

numeryczna syndromu wskazuje pozycję błędnego

bitu danych. Korekta polega na inwersji tego bitu.

background image

Obliczanie bitów

kontrolnych

W celu uzyskania takich własności bity danych i bity

kontrolne są aranżowane w postaci słowa 12-bitowego w

sposób pokazany na rys. na następnym slajdzie.
Pozycje bitowe są ponumerowane od 1 do 12. Pozycje

bitowe, których numery są potęgą 2, są wyznaczone jako

bity kontrolne. Bity kontrolne są obliczane następująco

(symbol  oznacza operację LUB wykluczające):

background image

Rozkład bitów danych i

bitów kontrolnych

Każdy bit kontrolny działa na każdej

pozycji bitu danych, której numer zawiera

1 w odpowiedniej pozycji kolumny.
Tak więc pozycje bitowe danych 3, 5, 7, 9

i 11 zawierają człon 2

0

; pozycje bitowe 3,

6, 7 i 10 zawieraj ą człon 2

1

; pozycje

bitowe 5, 6, 7 i 12 - człon 2

2

, a pozycje

bitowe 9, 10, 11 i 12 - 2

3

.

Inaczej mówiąc, pozycja bitowa n jest

sprawdzana przez bity C

i

takie, że ∑i = n.

Na przykład pozycja 7 jest sprawdzana

przez bity znajdujące się na pozycjach 4,

2 i 1; zachodzi więc 4 + 2 + 1 = 7.

background image

Przykład cd.

Sprawdźmy na przykładzie, jak funkcjonuje ten
schemat. Załóżmy, że 8-bitowym słowem wejściowym
jest 00111001, z bitem danych M1 na najbardziej
znaczącej pozycji. Obliczenia są następujące:

Załóżmy teraz, że bit danych 3 zawiera błąd i jest
zmieniony z 0 na 1. Po ponownym przeliczeniu bitów
kontrolnych mamy:

background image

Wyznaczanie błędnej

pozycji

Gdy teraz nowe bity kontrolne porównamy ze starymi,

tworzymy słowo-syndrom:

Wynikiem jest 0110, co wskazuje, że pozycja bitowa 6 (M3),

zawierająca bit danych 3, jest błędna.
Na rysunku (następny slajd) są zilustrowane powyższe

obliczenia. Bity danych i bity kontrolne zostały odpowiednio

umieszczone w słowie 12-bitowym. Dzięki ułożeniu

numerów każdego z bitów danych w kolumny, jedynki w

każdym wierszu wskazują bity danych sprawdzane przez bit

kontrolny przypisany temu wierszowi.

background image

Generowanie bitów

kontrolnych

Ponieważ wynik jest zmieniany tylko przez jedynki, tylko kolumny

zawierające jedynki zostały zakreślone dla identyfikacji. Bity kontrolne

mogą być następnie obliczone wzdłuż wierszy. Pokazano wyniki dla

pierwotnych bitów danych oraz dla bitów danych zawierających błąd.

background image

SEC, SEC-DED

Omówiony właśnie kod jest znany jako kod poprawiania

pojedynczego błędu (ang. single-error-correcting - SEC).
Częściej pamięć półprzewodnikowa jest wyposażana w kod

poprawiania pojedynczego i podwójnego błędu (SEC-DED). Jak

były widać w tabeli (slajd nr 6 na początku wykładu), takie kody

wymagają jednego dodatkowego bitu w porównaniu z kodami

SEC.
Na rysunku (następny slajd) jest pokazane, jak działa taki kod,

znów dla przypadku 4-bitowego słowa danych.
Przedstawiona sekwencja ujawnia, że jeśli występują dwa błędy

(rys. c), procedura kontrolna jest błędna i pogarsza problem,

tworząc trzeci błąd (rys. e). W celu pokonania tej trudności,

dodany jest ósmy bit, taki że całkowita liczba jedynek na wykresie

jest parzysta. Dodatkowy bit parzystości umożliwia wychwycenie

błędu (rys. f).

background image

Kod Hamminga SEC-DEC

background image

Pamięć podręczna i

pamięć główna

Pamięci podręczne stosuje
się w celu uzyskania
pamięci o takiej szybkości,
jaką

mają

najszybsze

osiągalne

pamięci,

z

jednoczesnym uzyskaniem
dużego rozmiaru pamięci
w cenie tańszych rodzajów
pamięci
półprzewodnikowych.
Koncepcja

ta

jest

zilustrowana na rys.

background image

Cache - zasada działania

Występuje tu względnie duża i wolniejsza pamięć główna

obok mniejszej i szybszej pamięci podręcznej.
Pamięć podręczna zawiera kopię części zawartości pamięci

głównej. Gdy procesor zamierza odczytać słowo w pamięci,

najpierw następuje sprawdzenie, czy słowo to nie znajduje się

w pamięci podręcznej. Jeśli tak, to słowo jest dostarczane do

procesora. Jeśli nie, to blok pamięci głównej zawierający

ustaloną liczbę słów jest wczytywany do pamięci podręcznej,

a następnie słowo jest dostarczane do procesora.
Ze względu na zjawisko lokalności odniesień, jeśli blok

danych został pobrany do pamięci podręcznej w celu

zaspokojenia pojedynczego odniesienia do pamięci, jest

prawdopodobne, że przyszłe odniesienia będą dotyczyły

innych słów zawartych w tym samym bloku.

background image

Struktura pamięci

podręcznej

i pamięci głównej

Na rysunku (następny slajd) jest pokazana struktura

systemu pamięć podręczna/pamięć główna.
Pamięć główna składa się z 2

n

adresowalnych słów,

przy czym każde słowo ma jednoznaczny adres n-

bitowy.
Aby było możliwe odwzorowywanie pamięć ta składa

się z pewnej liczby bloków o stałej długości,

zawierających K słów każdy. Tak więc występuje

M=2

n

/K bloków. Pamięć podręczna zawiera C wierszy

zawierających K słów każdy, a liczba wierszy jest

znacząco mniejsza od liczby bloków w pamięci

głównej (C << M).

background image

Struktura pamięci podręcznej i

pamięci głównej:

(a) pamięć główna; (b) pamięć

podręczna

background image

Znaczniki

W każdej chwili, pewien zespół bloków pamięci

pozostaje w wierszach pamięci podręcznej.
Jeśli słowo w bloku pamięci jest odczytywane, to

odpowiedni blok jest przenoszony do jednego z

wierszy pamięci podręcznej.
Ponieważ bloków jest więcej niż wierszy, określony

wiersz nie może być jednoznacznie i trwale

przypisany określonemu blokowi. Każdy wiersz

zawiera w związku z tym znacznik określający, który

blok jest właśnie przechowywany. Znacznik jest

zwykle częścią adresu pamięci głównej, o czym

powiemy w dalszej części wykładu.

background image

Odczyt

Na

rysunku

jest

pokazana

operacja

odczytu.
Procesor generuje adres

słowa, które ma być

odczytane, RA.
Jeśli słowo jest zawarte

w pamięci podręcznej,

jest

dostarczane

do

procesora.
W przeciwnym razie blok

zawierający to słowo jest

ładowany do pamięci

podręcznej, po czym

słowo jest dostarczane

do procesora.

background image

Właściwości pamięci

podręcznych

Pojemność pamięci

Sposób zapisu

Rodzaj
odwzorowywania

jednoczesny

bezpośrednie

opóźniony

skojarzeniowe

jednokrotny

sekcyjno-skojarzeniowe

Rozmiar bloku

Algorytm wymiany

Liczba pamięci
podręcznych

najmniej

ostatnio

uzywany (LRU)

jedno- lub dwupoziomowa

pierwszy

wszedł

-

pierwszy wychodzi (FIFO)

jednolita

lub

rozszczepiona

najrzadziej używany (LFU)
swobodny

background image

Rozmiar pamięci

podręcznej

Chcielibyśmy, żeby rozmiar pamięci podręcznej był na tyle

mały, żeby ogólny przeciętny koszt na bit był zbliżony do

tego kosztu samej pamięci głównej, oraz na tyle duży, żeby

ogólny przeciętny czas dostępu był zbliżony do czasu

dostępu samej pamięci podręcznej.
Im większa jest pamięć podręczna, tym większa jest też

liczba bramek służących do adresowania tej pamięci. W

rezultacie duże pamięci podręczne są nieco wolniejsze niż

małe - nawet jeśli są wykonane za pomocą tej samej

technologii układów scalonych i umieszczone w tym samym

miejscu w mikroukładzie i w obwodzie drukowanym.
Rozmiar pamięci podręcznej jest również limitowany

dostępną powierzchnią mikroukładu i obwodu drukowanego.

background image

Funkcja odwzorowania

Ponieważ wierszy w pamięci podręcznej jest mniej

niż bloków pamięci głównej, wymagany jest

algorytm odwzorowywania bloków pamięci głównej

w wierszach pamięci podręcznej.
Ponadto potrzebne są środki do określania, który

blok pamięci głównej aktualnie zajmuje wiersz

pamięci podręcznej. Wybór funkcji odwzorowywania

dyktuje organizację pamięci podręcznej.
Mogą

być

wykorzystywane

trzy

metody:

bezpośrednia,

skojarzeniowa

i

sekcyjno-

skojarzeniowa.

background image

Przykład

Omówimy je kolejno. W każdym przypadku rozpatrzymy

strukturę ogólną, a następnie przykład. Dla wszystkich

trzech przypadków przykład zawiera następujące elementy:

1. Pamięć podręczna może przechowywać 64 KB.
2. Dane są przenoszone między pamięcią główną a pamięcią

podręczną w blokach po 4 bajty. Oznacza to, że pamięć

podręczna jest zorganizowana w postaci 16K=2

14

wierszy

po 4 bajty każdy.

3. Pamięć główna składa się z 16 MB, przy czym każdy bajt

jest bezpośrednio adresowalny za pomocą 24-bitowego

adresu

(2

24

=16M).

Tak

więc,

aby

umożliwić

odwzorowywanie, możemy traktować pamięć główną jako

składającą się z 4M bloków po 4 bajty każdy.

background image

Odwzorowanie

bezpośrednie

Najprostsza metoda, znana jako odwzorowanie

bezpośrednie,

polega

na

odwzorowywaniu

każdego bloku pamięci głównej na tylko jeden

możliwy wiersz pamięci podręcznej. Schemat tej

metody jest pokazany na rys. (następny slajd)
Odwzorowywanie jest wyrażane jako

i=j mod m

gdzie:

i - numer wiersza pamięci podręcznej,
j - numer bloku pamięci głównej,
m - liczba wierszy w pamięci podręcznej.

background image

Organizacja pamięci

podręcznej o

bezpośrednim

odwzorowaniu

background image

Organizacja pamięci

podręcznej o

bezpośrednim

odwzorowaniu

Funkcja odwzorowywania może być z łatwością realizowana

za pomocą adresu. W celu uzyskania dostępu do pamięci

podręcznej każdy adres pamięci głównej może być

widziany jako składający się z 3 pól.
Najmniej znaczące bity w określają jednoznacznie słowo lub

bajt w bloku pamięci głównej; w najnowocześniejszych

maszynach adres jest formułowany na poziomie bajtów.
Pozostałych s bitów określa jeden z 2

s

bloków pamięci

głównej. Układy logiczne pamięci podręcznej interpretują te

s bitów jako znaczniki w postaci s - r bitów (najbardziej

znacząca część) oraz pole linii złożone z r bitów. To ostatnie

pole identyfikuje jeden z m = 2

r

wierszy pamięci

podręcznej.

background image

Wynik odwzorowania

Wynikiem tego odwzorowywania jest to, że bloki pamięci

głównej są przypisane do wiersza pamięci podręcznej

następująco:

Wykorzystanie części adresu jako numeru wiersza pozwala na

jednoznaczne odwzorowanie każdego bloku pamięci głównej w

pamięci podręcznej. Gdy blok jest właśnie wczytywany do

przypisanego wiersza, konieczne jest zaznaczenie danych, aby

odróżnić je od innych bloków, które mogą pasować do tego

wiersza. Do tego celu służą najbardziej znaczące bity s - r.

Przypisane bloki pamięci głównej

Wiersz pamięci podręcznej

0, m, ..., 2

S

-m

0

1, m + 1, ..., 2

S

-m + 1

1

...

...

m-1, 2m-1, ..., 2

S

- 1

m-1

background image

Przykład: Operację

odczytu

System pamięci podręcznej jest prezentowany za pomocą

adresów 24-bitowych.
Czternastobitowy numer wiersza jest wykorzystywany jako

indeks dostępu do określonego wiersza w pamięci

podręcznej.
Jeśli 8-bitowy znacznik jest zgodny ze znacznikiem aktualnie

przechowywanym w tym wierszu, to 2-bitowy numer słowa

służy do wyboru jednego z 4 bajtów w tym wierszu. W

przeciwnym razie 22-bitowe pole obejmujące znacznik i

wiersz jest wykorzystywane do pobrania bloku z pamięci

głównej.
Adres użyty do tego pobierania składa się z tych 22 bitów

powiązanych z dwoma bitami zerowymi, tak więc na granicy

bloku są pobierane 4 bajty.

background image

Metoda

odwzorowywania

bezpośredniego jest prosta i

tania przy wdrażaniu. Jej

główną wadą jest to, że dla

danego bloku istnieje stała

lokalizacja

w

pamięci

podręcznej.
W rezultacie, jeśli program

będzie się często odwoływał

do słów z dwóch różnych

bloków przypisanych do tego

samego wiersza, to bloki te

będą ciągle przenoszone do

pamięci

podręcznej,

co

obniży ogólną szybkość.

Przykład

odwzorowania

bezpośredniego

background image

Odwzorowywanie

skojarzeniowe

Odwzorowywanie

skojarzeniowe

eliminuje

wady

odwzorowywania bezpośredniego, gdyż umożliwia ładowanie
każdego bloku pamięci głównej do dowolnego wiersza pamięci
podręcznej.
W tym przypadku sterujące układy logiczne pamięci
podręcznej interpretują adres pamięci po prostu jako znacznik
i pole słowa.
Pole znacznika jednoznacznie określa blok pamięci głównej. W
celu stwierdzenia, czy blok znajduje się w pamięci podręcznej,
sterujące układy logiczne pamięci podręcznej muszą
jednocześnie zbadać zgodność znacznika każdego wiersza. Na
rysunku jest pokazany taki właśnie schemat logiczny.

background image

Organizacja w pełni

skojarzeniowej pamięci

podręcznej

background image

Przykładowa pamięć z

odwzorowaniem

skojarzeniowym

Na kolejnym rysunku można będzie zobaczyć naszą przykładową

pamięć w wersji odwzorowywania skojarzeniowego.
Adres pamięci głównej składa się z 22-bitowego znacznika i 2-

bitowego numeru bajtu. W przypadku każdego wiersza pamięci

podręcznej 22-bitowy znacznik musi być przechowywany razem

z 32-bitowym blokiem danych.
W przypadku odwzorowywania skojarzeniowego blok do

zastąpienia jest wybierany elastycznie, kiedy nowy blok jest

wczytywany do pamięci podręcznej. Opracowano algorytmy

zastępowania służące do maksymalizacji współczynnika trafień,

które omówimy w dalszej części tego podrozdziału. Główną wadą

odwzorowywania skojarzeniowego są złożone układy wymagane

do równoległego badania znaczników wszystkich wierszy pamięci

podręcznej.

background image

Przykład

odwzorowania

skojarzeniowego

background image

Odwzorowywanie

sekcyjno-skojarzeniowe

Odwzorowywanie

sekcyjno-skojarzeniowe

stanowi

kompromis

łączący

zalety

odwzorowywania

bezpośredniego i skojarzeniowego; jest ono pozbawione

wad charakteryzujących te metody. W tym przypadku

pamięć podręczna jest dzielona na v sekcji, z których

każda składa się z k wierszy. Zależności są następujące:

m = v  k

i=j modulo v

gdzie:

i - numer sekcji pamięci podręcznej,
j - numer bloku pamięci głównej,
m - liczba wierszy pamięci podręcznej.

background image

Odwzorowywanie

sekcyjno-skojarzeniowe

W

przypadku

odwzorowywania

sekcyjno-

skojarzeniowego blok B

j

może być odwzorowywany

na dowolny wiersz sekcji i.
W tym przypadku sterujące układy logiczne

pamięci podręcznej interpretują adres pamięci jako

trzy pola: znacznik, sekcja i słowo.
Za pomocą d bitów sekcji precyzuje się jedną z v =

2

d

sekcji, a s bitów znacznika w połączeniu z polem

sekcji określa jeden z 2

S

bloków pamięci głównej.

Na rysunku są przedstawione sterujące układy

logiczne pamięci podręcznej.

background image

Dwudrożna sekcyjno-

skojarzeniowa organizacja

pamięci podręcznej

background image

Przykład. Sekcyjno-

skojarzeniowa organizacja

pamięci podręcznej.

Na rysunku jest pokazana nasza
przykładowa

pamięć

w

wersji

odwzorowywania

sekcyjno-

skojarzeniowego z dwoma wierszami
w każdej sekcji; układ można określić
jako

dwudrożny

sekcyjno-

skojarzeniowy.

background image

Przykład. Sekcyjno-

skojarzeniowa organizacja

pamięci podręcznej.

Za pomocą 13-bitowego numeru sekcji identyfikuje się

jednoznacznie określoną sekcję złożoną z 2 wierszy wewnątrz

pamięci skojarzeniowej. Określa się także numer bloku w

pamięci głównej, modulo 2

13

, co umożliwia odwzorowanie

bloków na wierszach. Tak więc bloki 000000, 00A000, ...,

FF1000 pamięci głównej są przypisane sekcji 0 pamięci

podręcznej.
Dowolny z tych bloków może być załadowany do jednego z

dwóch wierszy tej sekcji. Zauważmy, że żaden z dwóch bloków

przypisanych tej samej sekcji pamięci podręcznej nie ma

takiego samego numeru znacznika. W przypadku operacji

odczytu 13-bitowy numer sekcji jest wykorzystywany do

określenia, która sekcja ma być badana. Następnie jest

sprawdzana zgodność obu wierszy sekcji z numerem znacznika

adresu, do którego chcemy uzyskać dostęp.

background image

Dwudrożne

odwzorowanie

sekcyjno-

skojarzeniowe

background image

Ilość wierszy w sekcji

W krańcowym przypadku, gdy v=m, k=1, metoda

sekcyjno-skojarzeniowa redukuje się do odwzorowywania

bezpośredniego, a przy v=1, k=m - redukuje się do

odwzorowywania skojarzeniowego.
Wykorzystywanie dwóch wierszy na sekcję (v=m/2, k=2)

jest najbardziej powszechną organizacją sekcyjno-

skojarzeniową. Poprawia ona znacząco współczynnik

trafienia w stosunku do odwzorowywania bezpośredniego.
Czterodrożne odwzorowywanie sekcyjno-skojarzeniowe

(v=m/4, k-2) umożliwia uzyskanie umiarkowanej poprawy

w zamian za względnie mały koszt dodatkowy.
Dalsze zwiększanie liczby wierszy w sekcji przynosi małe

efekty.

background image

Algorytm zastępowania

Gdy do pamięci podręcznej jest wprowadzany nowy

blok, jeden z istniejących bloków musi być zastąpiony.
W przypadku odwzorowywania bezpośredniego istnieje

tylko jeden możliwy wiersz dla każdego określonego

bloku i wybór nie jest możliwy.
W przypadku metody skojarzeniowej i sekcyjno-

skojarzeniowej wymagany jest algorytm zastępowania.
Aby uzyskać dużą szybkość, algorytm taki musi być

wbudowany w postaci sprzętowej.
Wypróbowano wiele algorytmów. Wspomnimy o

czterech najbardziej powszechnych.

background image

Algorytm LRU

Prawdopodobnie najbardziej efektywny jest algorytm „najmniej

ostatnio używany” (ang. least-recently used - LRU). Algorytm

określa, że należy zastąpić ten blok w sekcji, który pozostawał w

pamięci podręcznej najdłużej bez odwoływania się do niego.
W

przypadku

dwudrożnego

odwzorowywania

sekcyjne-

skojarzeniowego jest to łatwe do wdrożenia. Każdy wiersz

zawiera bit wykorzystania (USE). Gdy wiersz jest adresowany,

jego bit USE jest ustawiany na 1, a bit USE pozostałego wiersza

w tej sekcji jest ustawiany na 0. Jeśli blok ma być wczytany do

sekcji, wykorzystuje się wiersz, którego bit USE ma wartość 0.

Ponieważ zakładamy, że niedawno wykorzystywane lokacje

pamięci są bardziej prawdopodobne do wykorzystania w

przyszłości, LRU powinien dawać najlepszy współczynnik trafień.

background image

Algorytmy FIFO, LFU a

może losowo

Inną możliwość stwarza algorytm „pierwszy wchodzi -

pierwszy wychodzi” (FIFO). Polega on na zastępowaniu tego

bloku w sekcji, który najdłużej pozostawał w pamięci

podręcznej. Algorytm FIFO jest łatwy do wdrożenia w postaci

metody cyklicznego buforowania.
Jeszcze inną możliwość stanowi algorytm „najrzadziej

używany” (LFU). Określa on, że zastępowany jest ten blok w

sekcji, którego dotyczyło najmniej odniesień. Algorytm LFU

można wdrożyć przez skojarzenie licznika z każdym wierszem.
Ostatnią z metod jest jest przypadkowy wybór wśród

kandydujących wierszy. Jest ona niezależna od ilości odniesień.

Badania symulacyjne wykazały, że losowe zastępowanie

prowadzi do niewiele tylko mniejszej wydajności w stosunku

do pozostałych algorytmów.

background image

Algorytm zapisu

Zanim blok pozostający w pamięci podręcznej będzie

mógł być zastąpiony, konieczne jest rozważenie, czy

musi on być zmieniony w pamięci podręcznej, a nie w

pamięci głównej.
Jeśli nie musi, to stary blok w pamięci podręcznej

może być nadpisany.
Jeśli musi, to znaczy, że na słowie zawartym w tej linii

pamięci podręcznej musi być przeprowadzona

przynajmniej jedna operacja zapisu, a pamięć główna

musi być odpowiednio zaktualizowana.
Możliwe są różne algorytmy zapisu wykorzystujące

współzależności dotyczące wydajności i ekonomii.

background image

Problemy konstrukcyjne

Do pamięci głównej może mieć dostęp więcej niż jedno

urządzenie. Na przykład, moduł wejścia-wyjścia może być

zdolny do odczytu/zapisu bezpośrednio w pamięci. Jeśli

słowo byłoby zmienione tylko w pamięci podręcznej, to

odpowiednie słowo w pamięci głównej byłoby nieaktualne.

Ponadto, jeśli moduł wejścia-wyjścia zmieniłby słowo w

pamięci głównej, to odpowiednie słowo w pamięci

podręcznej byłoby nieważne.
Bardziej złożony problem występuje, gdy mamy do czynienia

z wieloma procesorami podłączonymi do tej samej magistrali

i wyposażonymi we własne, lokalne pamięci podręczne. Jeśli

w takiej sytuacji byłoby zmienione słowo w jednej pamięci

podręcznej, spowodowałoby to unieważnienie słowa w

innych pamięciach podręcznych.

background image

I inne kłopoty

W przypadku organizacji magistralowej, w której więcej niż

jedno urządzenie (zwykle procesor) ma pamięć podręczną,

a pamięć główna jest wspólna, powstaje nowy problem.
Jeśli dane w jednej pamięci podręcznej są zmieniane, to

operacja taka powoduje unieważnienie odpowiedniego

słowa nie tylko w pamięci głównej, ale także w innych

pamięciach podręcznych (jeśli to słowo w nich akurat

występuje). Jeśli nawet jest stosowana metoda zapisu

jednoczesnego, to inne pamięci podręczne mogą zawierać

nieaktualne dane.
System, który zapobiega temu problemowi, jest nazywany

systemem zapewniającym spójność pamięci podręcznej.

background image

Zapis jednoczesny

Najprostsza

metoda

jest

określana

jako

zapis

jednoczesny (ang. write through). Przy jej zastosowaniu

wszystkie operacje zapisu są prowadzone jednocześnie

zarówno do pamięci głównej, jak i do pamięci

podręcznej, co zapewnia stałą aktualność danych w

pamięci głównej.
Jakikolwiek inny moduł, procesor - pamięć podręczna

może monitorować przesyłanie do pamięci głównej w

celu zachowania spójności (consistency) swojej pamięci

podręcznej.
Główną wadą tej metody jest to, że generuje ona

znaczny przepływ danych do pamięci i może przez to

spowodować występowanie wąskich gardeł.

background image

Zapis opóźniony

Metoda alternatywna, nazwana metodą zapisu opóźnionego

(ang. write back), minimalizuje ilość operacji zapisu do pamięci. W

przypadku tej metody aktualizuje się tylko pamięć podręczną.
Gdy następuje taka aktualizacja, określana jest wartość bitu

aktualizacji (UPDATE) skojarzonego z wierszem pamięci podręcznej.
Jeśli następnie blok jest zastępowany, to podlega on wpisaniu do

pamięci głównej tylko wtedy, gdy jest ustanowiony bit UPDATE.
Problemem tej metody jest to, że część zawartości pamięci głównej

jest nieaktualna, przez co dostęp modułów wejścia-wyjścia jest

możliwy tylko za pośrednictwem pamięci podręcznej.
Komplikuje to układy i stwarza możliwość wąskich gardeł.

Doświadczenie wykazało, że udział zapisów w operacjach dostępu

do pamięci jest rzędu 15%

background image

Obserwowanie magistrali

z zapisem jednoczesnym

Do możliwych rozwiązań problemu spójności pamięci

podręcznej należą:
Obserwowanie magistrali z zapisem jednoczesnym.

Każdy sterownik pamięci podręcznej monitoruje linie

adresowe w celu wykrycia operacji zapisu do pamięci

dokonywanych przez inne jednostki nadrzędne

magistrali. Jeśli inna jednostka nadrzędna wpisuje dane

do takiej lokacji w pamięci wspólnej, która występuje

również w pamięci podręcznej, to sterownik pamięci

podręcznej unieważnia dostęp do pamięci podręcznej.

Strategia ta jest uzależniona od tego, czy wszystkie

sterowniki pamięci podręcznych posługują się metodą

zapisu jednoczesnego.

background image

Sprzętowe zapewnianie

spójności

Sprzętowe zapewnianie spójności (ang. hardware
transparency).
Wykorzystywane są dodatkowe
rozwiązania sprzętowe zapewniające, że wszystkie
aktualizacje pamięci głównej dokonywane za
pośrednictwem

pamięci

podręcznej

znajdują

odzwierciedlenie

we

wszystkich

pamięciach

podręcznych. Jeśli jeden procesor modyfikuje słowo
w swojej pamięci podręcznej, aktualizacja ta jest
wprowadzana również do pamięci głównej. Ponadto,
wszystkie

odpowiednie

słowa

w

pozostałych

pamięciach podręcznych są podobnie aktualizowane.

background image

Pamięć wyłączona ze

współpracy z pamięcią

podręczną

Pamięć wyłączona ze współpracy z pamięcią

podręczną (ang. non-cachable memory). Tylko część

pamięci głównej jest wspólna dla więcej niż jednego

procesora i ta właśnie część jest oznaczana jako

wyłączona ze współpracy z pamięcią podręczną. W

takim systemie wszystkie operacje dostępu do pamięci

wspólnej nie dotyczą pamięci podręcznych, ponieważ

pamięć wspólna nigdy nie jest kopiowana do pamięci

podręcznych. Pamięć wyłączona ze współpracy z

pamięcią podręczną może być identyfikowana za

pomocą układów logicznych wyboru mikroukładu lub

najbardziej znaczących bitów adresu.

background image

Rozmiar bloku

Gdy blok danych jest pobierany i umieszczany w pamięci

podręcznej, pobierane jest nie tylko żądane słowo, lecz również

pewna liczba sąsiednich słów.
Gdy zwiększamy rozmiar bloku od bardzo małego do dużego,

współczynnik trafień najpierw wzrasta ze względu na zasadę

lokalności: wysokie prawdopodobieństwo, że dane sąsiadujące z

wywołanym słowem będą potrzebne w niedalekiej przyszłości.

W miarę wzrostu rozmiaru bloku do pamięci podręcznej

doprowadzana jest coraz większa ilość użytecznych danych.
Przy dalszym wzroście współczynnik trafień zacznie jednak

maleć, a prawdopodobieństwo wykorzystania nowo pobieranych

informacji stanie się mniejsze niż prawdopodobieństwo

ponownego użycia informacji, która jest zastępowana.

background image

Dlaczego nie używamy

bardzo dużych bloków

Grają tu rolę dwa szczególne zjawiska:

Użycie większych bloków powoduje zmniejszenie
liczby bloków, które mieszczą się w pamięci
podręcznej.

Ponieważ

każde

wpisanie

bloku

powoduje usunięcie starej zawartości pamięci
podręcznej, mała liczba bloków sprawia, że dane są
usuwane niedługo po ich pobraniu.
Gdy blok staje się większy, każde dodatkowe słowo
jest dalsze od potrzebnego słowa, staje się więc
mniej prawdopodobne jego użycie w niedalekiej
przyszłości.

background image

Liczba pamięci

podręcznych

Kiedy wprowadzono pamięci podręczne,
typowy system miał pojedynczą pamięć
podręczną.
Ostatnio stało się normą wykorzystywanie
wielu pamięci podręcznych.
Dwoma

aspektami

tego

zagadnienia

projektowego są: liczba poziomów pamięci
oraz

podział

lub

scalanie

pamięci

podręcznych.

background image

Pamięć

wewnątrzprocesorowa

W miarę wzrostu gęstości upakowania układów

logicznych stało się możliwe dysponowanie

pamięcią podręczną wewnątrz tego samego

mikroukładu co procesor: określamy to mianem

pamięci podręcznej w procesorze (ang. on-chip

cache).
W porównaniu z pamięcią osiągalną za pomocą

zewnętrznej

magistrali

wewnątrzprocesorowa

pamięć

podręczna

umożliwia

zmniejszenie

aktywności procesora w magistrali zewnętrznej i

przez to skraca się czasy wykonywania operacji i

zwiększa się ogólną wydajność systemu.

background image

Zalety stosowania

pamięci

wewnątrzprocesorowej

Jeśli wymagane rozkazy lub dane znajdują się w

wewnątrzprocesorowej

pamięci

podręcznej,

konieczność dostępu do magistrali jest eliminowana.
Ze względu na krótsze ścieżki danych wewnątrz

procesora w porównaniu z długościami magistrali,

dostęp do wbudowanej pamięci podręcznej jest

wyraźnie szybszy w porównaniu z cyklem magistrali,

nawet w stanie nie wymagającym oczekiwania.
Ponadto, w tym okresie magistrala pozostaje wolna i

mogą zachodzić inne transfery.

background image

Pamięci podręczna L1 i L2

Wbudowanie pamięci podręcznej do procesora pozostawia otwarte

pytanie, czy nadal jest pożądana zewnętrzna (poza mikroukładem

procesora) pamięć podręczna. Odpowiedź brzmi zwykle: tak.
Większość współczesnych projektów zawiera zarówno pamięć

podręczną wewnątrzprocesorowa, jak i zewnętrzną. Wynikająca

stąd organizacja jest znana jako dwupoziomowa pamięć

podręczna, przy czym pamięć wewnętrzna jest oznaczana jako

poziom 1 (L1), a zewnętrzna jako poziom 2 (L2).
Przyczyna wprowadzania pamięci L2 jest następująca. Jeśli nie

byłoby

pamięci

podręcznej

L2,

a

procesor

zgłosiłby

zapotrzebowanie na dostęp do lokacji pamięci nie występującej w

pamięci podręcznej L1, to procesor musiałby sięgać do pamięci

DRAM lub ROM poprzez magistralę. Ze względu na typowo

niewielką szybkość magistrali oraz stosunkowo długi czas dostępu

do pamięci rezultatem będzie zmniejszona wydajność.

background image

Zwykle co najmniej 2

poziomy

Z drugiej strony, jeśli zastosowano pamięć podręczną L2

SRAM, to często możliwe jest szybkie pobranie

brakującej informacji.
Jeśli pamięć SRAM jest dostatecznie szybka, aby

dostosować się do szybkości magistrali, to możliwy jest

dostęp do danych za pomocą transakcji o zerowym

czasie oczekiwania, co stanowi najszybszy rodzaj

transferów magistralowych.
Potencjalne oszczędności wynikające z zastosowania

pamięci podręcznej L2 zależą od współczynników trafień

zarówno pamięci L1, jak i L2. W kilku badaniach

wykazano, że na ogół zastosowanie pamięci podręcznej

drugiego poziomu poprawia wydajność.

background image

Jednolita a podzielona

pamięć podręczna

Gdy

po

raz

pierwszy

wprowadzono

wewnątrzprocesorową pamięć podręczną, w
wielu projektach zawierających pojedynczą
pamięć

podręczną

wykorzystywano

zarówno do przechowywania danych, jak i
rozkazów.
Obecnie stało się powszechne dzielenie
pamięci

podręcznej

na

dwie:

jedną

przeznaczoną na rozkazy, drugą zaś na dane.

background image

Zalety pamięci jednolitej

Dla danego rozmiaru pamięci podręcznej pamięć

jednolita wyróżnia się większym współczynnikiem

trafień

niż

pamięć

podzielona,

ponieważ

automatycznie równoważy ona pobieranie rozkazów

z pobieraniem danych. To znaczy, jeśli struktura

rozkazów przewiduje o wiele więcej pobrań rozkazów

niż danych, pamięć podręczna będzie wykazywała

tendencję do wypełniania się rozkazami. Jeżeli

natomiast wymagane jest częstsze pobieranie

danych, pamięć ta będzie się wypełniała danymi.
Tylko

jedna

pamięć

podręczna

musi

być

zaprojektowana i wdrożona.

background image

Zwykle pamięć podzielona

Mimo tych zalet występuje tendencja do stosowania

pamięci podzielonych, szczególnie w przypadku

maszyn superskalarnych, jak rodziny Pentium i

PowerPC, co akcentuje równoległe wykonywanie

rozkazów

i

wstępne

pobieranie

rozkazów

przewidywanych do wykonywania.
Kluczową zaletą podzielonej pamięci podręcznej jest

to, że eliminowana jest rywalizacja o pamięć

podręczną między procesorem rozkazów a jednostką

wykonującą.
Jest

to

ważne

w

każdym

rozwiązaniu

wykorzystującym potokowe przetwarzanie rozkazów.

background image

Zwykle pamięć podzielona

Typowo procesor pobiera rozkazy z wyprzedzeniem i napełnia bufor -

rejestr potokowy - rozkazami, które mają być wykonane. Załóżmy

teraz, że mamy do dyspozycji jednolitą pamięć podręczną dla

rozkazów i danych. Gdy jednostka wykonująca sięga do pamięci w

celu załadowania i przechowania danych, zapotrzebowanie jest

doprowadzane do jednolitej pamięci podręcznej.
Jeśli w tym samym czasie układ wyprzedzającego pobierania

rozkazów wysyła zapotrzebowanie na odczytanie rozkazu z pamięci

podręcznej, to zapotrzebowanie to zostanie czasowo zablokowane,

żeby pamięć podręczna mogła najpierw obsłużyć jednostkę

wykonującą, pozwalając jej na zakończenie właśnie wykonywanego

rozkazu.
Ta rywalizacja o pamięć podręczną może spowodować zmniejszenie

wydajności, interferując z wydajnym wykorzystaniem potoku

rozkazów. Struktura podzielonej pamięci podręcznej umożliwia

pokonanie tej trudności.

background image

Pamięć EDRAM

Być może najprostszą z nowych architektur DRAM jest

wzbogacona pamięć DRAM (EDRAM), opracowana w firmie

Ramtron [BOND94]. Pamięć EDRAM zawiera małą pamięć

podręczną SRAM w typowym mikroukładzie DRAM.
Na rysunku jest pokazana 4-megabitowa wersja pamięci

EDRAM. W pamięci podręcznej SRAM jest przechowywana

cała zawartość ostatnio odczytywanego wiersza, który

składa się z 2048 bitów lub z 512 porcji 4-bitowych.
W komparatorze jest przechowywany 11-bitowy adres

ostatnio wybieranego wiersza. Jeśli następny dostęp

dotyczy tego samego wiersza, to wymagane jest tylko

dotarcie do szybkiej pamięci podręcznej SRAM.

background image

Wzbogacona dynamiczna

pamięć RAM (EDRAM)

background image

Zalety EDRAM

Pamięć

EDRAM

ma

kilka

innych

własności

poprawiających wydajność.
Operacje

odświeżania

mogą

być

prowadzone

równolegle

z

operacjami

odczytu

z

pamięci

podręcznej, co minimalizuje czas, w którym

mikroukład jest nieosiągalny z powodu odświeżania.
Zauważmy też, że ścieżka odczytu z pamięci

podręcznej wiersza do portu wyjściowego jest

niezależna od ścieżki zapisu z modułu wejścia-wyjścia

do wzmacniaczy odczytu. Dzięki temu kolejny dostęp

do pamięci podręcznej związany z odczytem może być

realizowany równolegle z kończeniem operacji zapisu.

background image

Synchroniczna pamięć

DRAM (SDRAM)

Zupełnie inne podejście do poprawiania wydajności
pamięci DRAM przyjęto w synchronicznej pamięci
DRAM (SDRAM) opracowanej wspólnie przez pewną
liczbę firm.
W przeciwieństwie do typowej pamięci DRAM, która
jest asynchroniczna, wymiana danych między
pamięcią

SDRAM

a

procesorem

jest

synchronizowana przez sygnał zegara zewnętrznego
i zachodzi z pełną szybkością magistrali procesor-
pamięć bez narzucania stanów oczekiwania.

background image

Typowa praca DRAM

W typowej pamięci DRAM procesor przekazuje adresy i

sygnały sterujące do pamięci, wskazując że zbiór danych

o określonej lokacji w pamięci powinien być albo

odczytany z pamięci DRAM, albo do niej zapisany.
Po pewnym opóźnieniu (czas dostępu) pamięć DRAM albo

odczytuje, albo zapisuje dane.
Podczas opóźnienia związanego z czasem dostępu,

pamięć DRAM realizuje różne funkcje wewnętrzne, takie

jak aktywowanie dużych pojemności linii wierszy i

kolumn, odczytywanie danych i wyprowadzanie ich przez

bufory wyjściowe.
Procesor musi po prostu przeczekać to opóźnienie,

zmniejszając wydajność systemu.

background image

Praca SDRAM

W przypadku dostępu synchronicznego pamięć

DRAM przenosi dane do wewnątrz i na zewnątrz

pod kontrolą zegara systemowego.
Procesor lub inna jednostka nadrzędna wydaje

rozkaz i podaje informację adresową, które są

zatrzaskiwane w pamięci DRAM.
Pamięć DRAM udziela odpowiedzi po upływie

pewnej liczby cykli zegara. W tym czasie

jednostka

nadrzędna

może

bezpiecznie

realizować inne cele, a pamięć SDRAM

przetwarza zgłoszone zapotrzebowanie.

background image

Tryb pakietowy (ang.

burst mode)

Na rysunku są pokazane wewnętrzne układy logiczne

pamięci SDRAM.
Wykorzystuje ona tryb pakietowy w celu wyeliminowania

czasu ustalania adresu oraz czasu wstępnego ładowania

linii wiersza i kolumny po pierwszej operacji dostępu.
W przypadku trybu pakietowego ciągi bitów danych

mogą być szybko wyprowadzone za pomocą zegara tuż

po uzyskaniu dostępu do pierwszego bitu. Taki tryb

pracy jest użyteczny, gdy wszystkie pożądane bity

danych są ułożone szeregowo w tym samym wierszu

matrycy, którego dotyczyła początkowa operacja

dostępu.

background image

Synchronicz

na,

dynamiczna

pamięć RAM

(SDRAM)

background image

Rejestr trybu

Zwróćmy ponadto uwagę, że pamięć SDRAM ma

dwusegmentową architekturę wewnętrzną, która umożliwia

poprawę warunków równoległych działań w ramach

mikroukładu.
Rejestr trybu i związane z nim sterujące układy logiczne

stanowią jeszcze jedną istotną własność odróżniającą pamięć

SDRAM od konwencjonalnych pamięci DRAM. Pozwalają one

na dostosowanie pamięci SDRAM do specyficznych wymagań

systemowych.
Rejestr trybu ustala długość porcji danych, która jest liczbą

oddzielnych

jednostek

danych

synchronicznie

doprowadzanych do magistrali. Rejestr ten umożliwia także

programiście regulowanie zwłoki między otrzymaniem

zapotrzebowania na odczyt a rozpoczęciem transferu danych.

background image

Zastosowanie SDRAM

Pamięć SDRAM sprawuje się najlepiej, gdy
dokonuje szeregowego transferu dużych
bloków danych, co ma miejsce w takich
zastosowaniach,

jak

przetwarzanie

tekstów, arkusze kalkulacyjne i multimedia.

background image

RDRAM

Pamięć RDRAM, opracowana w firmie Rambus,

stanowi

bardziej

rewolucyjne

rozwiązanie

problemu szerokości pasma pamięci.
Mikroukłady RDRAM mają obudowy pionowe, ze

wszystkimi końcówkami po jednej stronie.
Mikroukład wymienia dane z procesorem

poprzez 28 połączeń nie dłuższych niż 12 cm.

Magistrala umożliwia adresowanie do 320

mikroukładów RDRAM i może przenosić 500

Mbit/s. Można to porównać z wielkością około 33

Mbit/s dla synchronicznych pamięci DRAM.

background image

RDRAM

Specjalna magistrala RDRAM dostarcza informacje adresowe

i

sterujące,

wykorzystując

asynchroniczny

protokół

przesyłania danych blokami.
Po początkowym czasie dostępu 480 ns osiągana jest

szybkość przekazywania danych równa 500 Mbit/s. Tym, co

umożliwia taką szybkość, jest sama magistrala, dla której

bardzo dokładnie określono impedancje, taktowanie i

sygnały.
Zamiast sterowania za pomocą jasno określonych sygnałów

RAS, CAS, R/W i CE stosowanych w konwencjonalnych

pamięciach DRAM, w przypadku pamięci RDRAM dostęp do

danych zachodzi poprzez magistralę o dużej szybkości.

Żądanie dostępu do danych zawiera adres, rodzaj operacji

oraz liczbę bajtów w operacji.

background image

DDRAM

Obecnie najczęściej używana pamięć.
W porównaniu z SDRAM pozwala na
odczyt/zapis w trakcie narastania i
opadania sygnału zegarowego co
podwaja wydajność.


Document Outline


Wyszukiwarka

Podobne podstrony:
Architektura i organizacja komuterów W5 Pamięć wewnętrzna
Architektura i organizacja komuterów W6 Pamięć zewnętrzna
Architektura i organizacja komuterów W5 Pamięć wewnętrzna
Architektura i organizacja komuterów W7 Pamięć zewnętrzn
Architektura i organizacja komuterów W3 Działanie komput
Architektura i organizacja komuterów W1 Co to jest i skąd to się wzięło
Architektura i organizacja komuterów W4 Połączenia magistralowe
Architektura i organizacja komuterów W4 Połączenia magis
Architektura i organizacja komuterów W7 Wejście Wyjście
Architektura i organizacja komuterów W3 Działanie komputera
Architektura i organizacja komuterów W9 Wspieranie systemu operacyjnego
Architektura i organizacja komuterów 11 Procesor
Architektura i organizacja komuterów W8 Wejście Wyjście
Architektura i organizacja komuterów W9 Procesor
Architektura i organizacja komuterów W1 i 2 Co to jest i skąd to się wzięło
Architektura i organizacja komuterów W2 Ewolucja i wydaj
Pamiec wewnetrzna id 348371 Nieznany
Zarządzanie pamięcią wewnętrzną

więcej podobnych podstron