Czyli co student INF-EKA powinien wiedzieć o MESI...

Transkrypt

Czyli co student INF-EKA powinien wiedzieć o MESI...
METODY
ELIMINACJI
STUDENTÓW
INFORMATYKI
Czyli co student INF-EKA powinien wiedzieć o MESI......
copyright Mahryanuss 2004 ©
Data Cache Consistency Protocol
Czyli po naszemu protokół zachowujący spójność danych w pamięci podręcznej.
Protokół spójności danych w cache składa się z zestawu reguł, poprzez które do linii pamięci
podręcznej przydzielane zostają stany. Zasady te stosuje się tylko do cykli zapisu oraz odczytu.
Każda linia w pamięci cache procesora ma przydzielony stan zależny od poprzedniej aktywności
procesora, jak i aktywności całej magistrali danych. Protokół kontroli danych w procesorze pentium
zawiera cztery stany definiujące poprawność linii, dostępność danych w niej zawartych w innych
poziomach cache, oraz czy nie została zmodyfikowana (przez procesor).
Te stany to:
M
E
S
I
(zmodyfikowany)
(wyłączny)
(wspólny)
(niepoprawny)
M
linia pamięci jest dostępna tylko w jednym z poziomów cache, i jest różna od
zawartości pamięci operacyjnej. Do linii w stanie M może być przeprowadzony dostęp bez
odwoływania się do magistrali.
E
linia pamięci jest dostępna tylko w jednym z poniomów cache, oraz w Pamięci
Operacyjej. Do linii w stanie E może być przeprowadzony dostęp bez odwoływania się do
magistrali. Próba zapisu do tej linii zmieni jej stan na M.
S
stan wskazuje na to, że linia jest potencjalnie wspólna dla wszystkich poziomów
cache, oraz dla Pamięci Operacyjnej. Odczyt z tej linii nie odwoła się do magistrali pamięci, ale
zapis tak. Zapis do linii S odświeży jej zawartość.
I
stan ten wskazuje, że linia nie jest dostępna w cache. Odczyt z niej będzie chybiony i
spowoduje natychmiastowe wypełnienie linii zawartością z Pamięci Operacyjnej. Zapis do linii I
powoduje w procesorach Pentium wywołanie cyklu zapisu skrośnego na magistrali.
Poprawność danych w poziomach pamięci, a stan linii:
Stan
Poprawność linii
Poprawność linii w Poprawność danych w
innym poziomie cache
PO
M
Tak
Nie
Nie
E
Tak
Nie
Tak
S
Tak
Tak
Tak
I
Nie
?
Tak
Tryby zapisu w cache
WT write through, zapis skrośny. Jest to pierwszy tryb zapisu jaki powstał. Używany był
w procesorach 80486 (pierwsze układy z pamięcią podręczną). Jest to zapis przeprowadzany przez
całą hierarchię pamięci od najniższego poziomu cache – do Pamięci Operacyjnej.
WB write back (copy back). Wprowadzony razem z architekturą pentium. Jest to rodzaj
zapisu z opóźnieniem. Po wpisaniu danej do linii cache aktualizacja reszty pamięci jest opóźniana
do momentu wymiany danej linii w pamięci podręcznej. Przyspiesza to znacznie działanie systemu
cache i zmniejsza aktywność na magistrali.
WO write once. Jest to połączenie obu powyższych trybów. Pierwszy zapis do cache
realizowany jest jako WT (po wystąpieniu RM). Dalsze zapisy są przeprowadzane w trybie WB, aż
do ponownego unieważnienia linii cache.
Write through:
W tym trybie występują tylko dwa stany danej linii. S oraz I. W wyniku chybionego odczytu w
stanie Invalid linia jest wypełeniana zawartością PO. W tym momencie stan linii przechodzi w S.
Kolejny zapis do tej linii uaktywania zawsze zapis skrośny czyli uaktualnienie wszystkich
poziomów pamięci, więc stan nadal pozostaje w S. To samo występuje w przypadku odczytu z
cache. Nic nie ulega zmianie, więc stan pozostaje ten sam. Odczyt poprzez kanał DMA powoduje
natychmiastową aktualizację danych w pamięci operacyjnej zawartością danej linii, więc stan linii
to S. Zewnętrzny zapis do PO unieważnia daną linię.
Write back:
W wyniku wypełnienia linii przechodzi ona w stan E. Po kolejnym zapisie przechodzi do M, i tam
już pozostaje przy następnych zapisach. Zapis do PO poprzez DMA przenosi linię w stan I.
Zewnętrzny odczyt powoduje przejście do E (czyli wypełnienie linii). Odczyt trafiony (czyli odczyt
przy stanach różnych od I) jak zwykle nic nie zmienia.
Write once:
Wypełnienie linii działa jak w WT, więc przenosi do stanu S. Pierwszy zapis przenosi do stanu E
(od tej pory działa tryb CB). Kolejne zapisy przenoszą do M. Skonsolidowanie linii z zwartością PO
w wyniku odczytu poprzez kanał DMA powoduje przejście do stanu S (tryb WT). Zapis przez
DMA unieważnia linię.
Można to wszystko przedstawić w postaci prostej tabelki:
WT
WB
WO
S
E
S
S
M
E
Subsequent Write
S
M
M
ESH-R
S
E
S
ESH-W
I
I
I
Read Hit
-
-
-
Line fill
Write hit
*
*subsekwentny (jakby to określił JB) ;P
Rozwalanie zadań na kole :)
Oto kilka imperatywów do rozwiązywania zadań z cache:
W zadaniach od JB oba poziomy cache traktuje się osobno. Ścieżkę przejść należy stosować do obu
w zależności od trybu w jakim pracują. Ustalenie trybu pracy jest bardzo proste i wymaga
znajomości powyższej tabelki. Identyfikacja jest możliwa najczęściej dzięki informacji na temat
pierwszego zapisu. Przykład. Jeżeli podane jest, że po pierwszym zapisie (już po wypełnieniu linii)
stan się nie zmienia, to implikuje to tryb WT, w którym wszystkie zapisy przenoszą linię w stan S.
Jeżeli natomiast powiedziane jest, że przy zapisie stan linii przechodzi do E, to wiadomo, że mamy
do czynienia z WO lub WB. Jeżeli przejście do E wystąpi przy pierwszym zapisie , to wiadomo, że
jest to WO, a jeżeli znajdujemy się w E po wypełnieniu linii, to znaczy, że mamy do czynienia z
trybem WB. Wszystko co trzeba zapamiętać, to stany linii przy zapisach do cache (wypełnienie,
pierwszy zapis, drugi zapis). Wiadomo, że odczyt nigdy nie wpłynie na stan linii, zapis poprzez
DMA do PO zawsze ją unieważni, natomiast odczyt DMA uaktywni wypełnienie linii (a konkretnie
sprawdzenie czy jest taka, jak zawartość odpowiedniego bloku w PO).
Użyte skróty:
PO
DMA JB
ESH -
pamięć operacyjna
direct memory access, czyli bezpośredni dostęp do pamięci z pominięciem procesora
wiadomo ;)
external hit, dostęp zewnętrzny do pamięci (np. Poprzez DMA).
Kto doszedł aż tutaj, ten zaliczy egzamin na 5.0 ;P

Podobne dokumenty