2017-10-14 46 views
5

Powiedzmy, że 32-bitowa wartość jest zapisywana w miejscu w pamięci, które obejmuje 2 strony. Dla dobra argumentu przyjmijmy, że 2 bajty kończą się na pierwszej stronie, a 2 kolejne na drugiej. Pierwsza strona jest zapisywalna, ale druga strona nie jest mapowana. Wykonanie instrukcji w całości spowoduje błąd strony i jest to w porządku.Co się stanie, gdy niepodpisany zapis przekroczy granicę strony i zostanie wywołana usterka?

Moje pytanie brzmi: czy wyzwalacz błędu strony wystąpi przed lub po zapisaniu pierwszych 2 bajtów wartości w pamięci? Innymi słowy, kod będzie działał po tym, jak błąd (na przykład program obsługi błędów) będzie w stanie zaobserwować częściowy zapis?

Załóżmy, że środowisko X86, ponieważ podejrzewam, że zachowanie może być architektury, a może nawet konkretnego modelu.

+0

IIRC, cały zapis zostaje przerwany z winy. Podręczniki Intel x86 powinny dokumentować to szczegółowo, jeśli chcesz dokładnie sprawdzić. Mniej pewne na ten temat, ale ukryte magazyny IIRC AVX512 * mogą * faktycznie przechowywać niektóre z elementów (bez wad) przed popełnieniem błędu. Właśnie sprawdziłem instrukcję refaktoryzacji ISA dotyczącą instrukcji rozpraszania, a oni nie mówią, że: symbole rozproszone sprawdzają błędy w określonej kolejności. (Ale w przypadku pojedynczego elementu rozproszenia, jeśli to jest błąd, to w ogóle nie jest wykonywane.) –

+1

Byłbym zaskoczony, gdyby istniały jakiekolwiek architektury, które pozwalałyby na częściowe przechowywanie na stronie, która nie jest wadliwa. BTW, linki do podręczników x86 Intela w [wiki tagu x86] (https://stackoverflow.com/tags/x86/info). –

+0

@PeterCordes - Nie sprawdzałem sklepów AVX-512, ale bez wątpienia tak to działa. Nawet zbieracze AVX2 działają w ten sposób: aktualizują rejestr masek po każdej operacji zbierania (co do zasady w każdym razie), aby można je było przerwać (tak mi się wydaje), więc jeśli zostanie zgłoszony wyjątek, część ładunku mogła już zostać zakończona, a rejestr maski odzwierciedli to (więc potencjalnie problem można naprawić i ponowne uruchomienie obciążenia). Bez wątpienia AVX-512 zbiera się tak samo i byłoby dziwnie, gdyby rozproszenia były inne. – BeeOnRope

Odpowiedz

-3

Od Intel Architectures Manual Volume 3A:

dostępy do Cacheable pamięci, które są podzielone w poprzek linii pamięci podręcznej i granice strona nie są gwarantowane do atomowej przez procesor Intel Core 2 Duo, Intel® Atom ™, Procesory Intel Core Duo, Pentium M, Pentium 4, Intel Xeon, P6, Pentium i Intel486.

IMO nie atomowy oznacza, że ​​może wystąpić opisany scenariusz. Przerwanie można wygenerować po zapisaniu pierwszych 2 bajtów.

+0

Jednak sprawdzanie uprawnień w obu częściach podziału strony musi zostać zakończone, zanim jedna z części stanie się widoczna na całym świecie, chyba że nie mam racji co do jej działania. –

+0

Nie widzę różnych. NIE-atomowe oznacza, że ​​inne części (inne rdzenie lub magistrala) mogą częściowo zapisywać obserwator, dlaczego ten sam rdzeń nie może obserwować częściowego zapisu, gdy wystąpi zakłócenie? Nie sądzę, że częściowe zapisanie zostanie wycofane po wystąpieniu błędu strony. Sprawia to, że problem jest bardziej złożony i nic nie zyskuje .. –

+0

zależy od tego, jak będzie wyglądał transfer autobusu, jeśli rdzeń podzieli go na dwa transfery lub jeśli jest to pojedynczy niewyrównany transfer ... oczywiście prostszą odpowiedzią jest po prostu spróbuj tak? –