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