2012-03-22 22 views
7

Właśnie przeczytałem dwa artykuły na ten temat, które dostarczają informacji niekonsekwentnie, więc chcę wiedzieć, który z nich jest poprawny. Być może oba są poprawne, ale w jakim kontekście?Ile bajtów kontroler pamięci podręcznej pobiera czas z pamięci głównej do pamięci podręcznej L2?

W first jeden stwierdza, że ​​możemy sprowadzić rozmiaru strona raz

Kontroler pamięci podręcznej jest zawsze obserwując pamięć ładowane i ładowanie danych z kilku pozycjach pamięci po pozycji pamięci, który został właśnie czytać.

Aby dać prawdziwy przykład, jeśli dane załadowane przez procesor przechowywane na adres 1000, kontroler pamięci podręcznej załaduje dane z adresów "n" po adresie 1000. Ta liczba "n" nazywana jest stroną; jeśli dany procesor pracuje z 4 kilobajtowymi stronami (co jest typową wartością), ładuje dane z 4096 adresów pod bieżącą pozycją w pamięci (load 1000 w naszym przykładzie). Na poniższym rysunku ilustrujemy ten przykład.

enter image description here

W second jeden stwierdza, że ​​pobieramy sizeof (linia cache) + sizeof (Prefetcher) czas

Można więc podsumować, jak pamięć podręczna działa jako:

  1. CPU prosi o instrukcję/dane przechowywane w adresie "a".
  2. Ponieważ zawartość adresu "a" nie znajduje się w pamięci podręcznej pamięci, procesor musi pobrać go z pamięci RAM .
  3. Kontroler pamięci podręcznej ładuje wiersz (zwykle 64 bajty), zaczynając od adresu "a" do pamięci podręcznej pamięci. Jest to więcej danych niż wymagany procesor, więc jeśli program nadal wykonuje sekwencyjnie (tj. Prosi o adres a + 1), następna instrukcja/dane, które CPU zażąda, będą już załadowane do pamięci podręcznej .
  4. Obwód o nazwie prefetcher ładuje więcej danych znajdujących się za tą linią, tj. Rozpoczyna ładowanie zawartości z adresu a + 64 do pamięci podręcznej. Aby dać ci prawdziwy przykład, procesory Pentium 4 mają prefixcher 256-bajtowy , więc ładuje kolejne 256 bajtów po linii już załadowanej do pamięci podręcznej.
+0

To nie może być cała strona. Obecne procesory mogą obsługiwać strony do 4 MB w trybie 32-bitowym i 1 GB w trybie 64-bitowym. – ughoavgfhw

Odpowiedz

9

Całkowicie zależna od implementacji sprzętowej. Niektóre implementacje ładują pojedynczą linię z pamięci głównej w czasie —, a rozmiary linii pamięci podręcznej różnią się znacznie między różnymi procesorami. Widziałem wielkości linii od 64 bajtów aż do 256 bajtów. Zasadniczo rozmiar "linii pamięci podręcznej" oznacza, że ​​gdy procesor żąda pamięci z głównej pamięci RAM, robi to na raz bajtów. Więc jeśli n ma 64 bajty, a ładujesz 4-bajtową liczbę całkowitą przy 0x1004, MMU faktycznie wyśle ​​64 bajty na całą magistralę, wszystkie adresy od 0x1000 do 0x1040. Cały ten fragment danych zostanie zapisany w pamięci podręcznej danych jako jedna linia.

Niektóre jednostki MMU mogą pobierać wiele linii pamięci podręcznej przez magistralę według żądania - tak, że wysłanie żądania pod adres 0x1000 na maszynie z 64-bajtowymi pamięciami podręcznymi faktycznie ładuje cztery linie od 0x1000 do 0x1100.Some systems pozwala to zrobić jawnie ze specjalnym opcją pobierania wstępnego w pamięci podręcznej lub DMA.

Artykuł za pomocą pierwszego linku jest jednak całkowicie błędny. To myli rozmiar OS memory page ze sprzętem cache line. To są zupełnie różne koncepcje. Pierwszy to minimalny rozmiar wirtualnej przestrzeni adresowej, którą system operacyjny przydzieli od razu. Ten ostatni jest szczegółowym opisem sposobu, w jaki procesor komunikuje się z główną pamięcią RAM.

One przypominają nawzajem tylko w tym sensie, że gdy system operacyjny ma mało pamięci fizycznej, wyświetli pewną nie-ostatnio używaną pamięć wirtualną na dysk; później, gdy ponownie użyjesz tej pamięci, system operacyjny załaduje całą stronę z dysku z powrotem do fizycznej pamięci RAM. Jest to analogiczne (ale nie powiązane) ze sposobem, w jaki procesor ładuje bajty z pamięci RAM, dlatego autor "Tajemnic sprzętowych" był zdezorientowany.

Dobre miejsce, aby dowiedzieć się wszystkiego o pamięci komputera i dlaczego pamięci podręczne działają tak, jak robią to artykuł Ulricha Dreppera, .

+0

+1 dla linku do papieru pamięci Dreppera. Ale rozmiar strony jest z pewnością funkcją hw, a system operacyjny nie może wybrać dla niej wartości arbitralnej (np. Sprawdzić, jak działają tabele stron). – janneb

+0

@janneb Ta odpowiedź nie wydawała się odpowiednim miejscem do dyskusji na temat różnicy między pobieraniem pamięci podręcznej, rozmiarem strony ERR, rozmiarem TLB i rozmiarem tabeli oprogramowania VMEM. Krótko mówiąc, wiele implementacji pozwala na różne rozmiary stron w TLB. Mam na biurku urządzenie, które pozwala na przydzielenie pamięci jako strony 4kb, 64kb lub 4mb. – Crashworks

+0

Z pewnością nie, ale w obecnej chwili, czytając odpowiedź, można uzyskać błędne zrozumienie, że strony pamięci są jedynie szczegółami implementacji systemu operacyjnego, podczas gdy w rzeczywistości jest ona ściśle związana z tym, w jaki sposób HW dokonuje wyszukiwania adresów wirtualnych-> fizycznych. – janneb

Powiązane problemy