Na mikroprocesorze ze sprzętowym zarządzaniem TLB (powiedzmy Intel x86-64), jeśli wystąpi błąd TLB, a procesor idzie po tablicy stron, czy dostęp do pamięci (poza układem) przechodzi przez hierarchię pamięci podręcznej (L1, L2 itp.) )?
Na mikroprocesorze ze sprzętowym zarządzaniem TLB (powiedzmy Intel x86-64), jeśli wystąpi błąd TLB, a procesor idzie po tablicy stron, czy dostęp do pamięci (poza układem) przechodzi przez hierarchię pamięci podręcznej (L1, L2 itp.) )?
Odpowiedzi:
Tak, o ile mi wiadomo, w procesorach Intel x86-64, gdy wystąpi brak TLB i procesor idzie po tablicy stron, dostęp do pamięci poza układem przechodzi przez hierarchię pamięci podręcznej.
Nadal jestem trochę rozmyślany nad kilkoma szczegółami i mam nadzieję, że wypełni je inna odpowiedź - czy nie ma instrukcji Intela lub AMD, która opisuje spacer po stronach z niesamowitymi szczegółami? Rozumiem, że:
Schemat na stronie 2 Thomasa W. Barra, Alana L. Coxa, Scotta Rixnera. „Caching Translation: Skip, Don't Walk (the Page Table)”, który wyznacza linię między „Wpisami zapisanymi przez pamięć podręczną MMU” a „Wpisami zapisanymi przez bufor danych L2”. (Może to być przydatny artykuł dla osób projektujących nowe procesory , co jest całkowicie tematem „Projektowanie elektroniki”).
Stephane Eranian i David Mosberger. „Pamięć wirtualna w jądrze systemu Linux IA-64” i Ulrich Drepper. „Co każdy programista powinien wiedzieć o pamięci” (może to być przydatny artykuł dla osób piszących systemy operacyjne, które zajmują się tabelą stron IA-64, co jest nieco nie na temat ED - być może przepełnienie stosu przez „ system ” lub tag „ osdev ” lub wiki OSDev.org byłoby lepszym miejscem na ten temat).
Tabela A-10 na stronie 533 firmy Intel. „Intel® 64 and IA-32 Architectures Software Developer's Manual” „PAGE_WALKS.CYCLES ... może wskazywać, czy większość przechodzeń stron jest zadowolona z pamięci podręcznej, czy może powodować brak pamięci podręcznej L2”.
invlpg
unieważnienia jakiegokolwiek buforowania TLB dla danego adresu virt. Jeśli podczas przeglądania strony HW nie znajdzie wpisu dla tego adresu wirtualnego lub uprawnienia do wpisu nie zezwalają na dostęp, otrzymasz #PF
wyjątek. System operacyjny radzi sobie z tym, aktualizując tabelę stron (być może po stronicowaniu danych z dysku lub wykonując kopiowanie przy zapisie), a następnie wznawiając, aby ładowanie / przechowywanie z błędem uruchomiło się ponownie i powiodło przejście do HW.
Zgadzam się, że należy to do wymiany stosów architektury komputerowej, a nie wymiany stosów elektronicznych, ale ponieważ jest to tutaj:
@davidcary jest poprawny.
Trochę historii:
Spacery po tablicach stron Intel x86 NIE były buforowane aż do P5, czyli Pentium. Mówiąc dokładniej, dostępy do pamięci obszaru spacer po tablicy stron nie były buforowane, pomija się pamięć podręczną. Ponieważ większość maszyn do tego czasu była zapisywana, otrzymywały wartości zgodne z pamięcią podręczną. Ale nie węszyli skrzynek.
P6, aka Pentium Pro i AFAIK, wszystkie kolejne spacery po tabelach stron procesorów mogły uzyskać dostęp do bufora i używać wartości pobranej z bufora. Dlatego pracowali z buforami zapisu. (Można oczywiście umieścić tabele stron w pamięci nieuleczalnej, zdefiniowanej np. Przez MTRR. Jest to jednak duża utrata wydajności, chociaż może być użyteczna przy debugowaniu systemów operacyjnych.)
Nawiasem mówiąc, ten „dostęp do pamięci strony tabeli stron może uzyskiwać dostęp do pamięci podręcznej danych” jest odrębny od „pozycji tabeli stron mogą być przechowywane (buforowane) w buforze Lookaside TLB Ttranslation”. Na niektórych komputerach TLB nazywa się „pamięcią podręczną tłumaczenia”.
Innym powiązanym problemem jest to, że wewnętrzne węzły tabel stron mogą być buforowane w jeszcze większej liczbie struktur danych podobnych do TLB, np. Pamięci podręcznej PDE.
Jedna kluczowa różnica: pamięć podręczna danych jest spójna i szpiegowana. Ale pamięci podręczne TLB i PDE nie są podsłuchiwane, tzn. Nie są spójne. Najważniejsze jest to, że ponieważ tabele stron mogą być buforowane w niespójnych buforach TLB i PDE itp., Oprogramowanie musi jawnie opróżniać poszczególne wpisy lub grupy zbiorcze (jak cała TLB), gdy wpisy w tablicy stron mogą być tak buforowane są zmieniane. Przynajmniej po zmianie w „niebezpieczny” sposób, przechodząc z RW-> R-> I lub zmieniając adresy.
Myślę, że można uczciwie powiedzieć, że za każdym razem, gdy dodawany jest nowy rodzaj niespójnego buforowania podobnego do TLB, niektóre systemy operacyjne ulegają awarii, ponieważ domyślnie zakładają, że tak się nie dzieje.