Jak działa Memtest86 przy złej pamięci RAM?

17

Czytałem kolejne pytanie o Memtest i zacząłem się zastanawiać: jak działa Memtest86 przy złej pamięci RAM?

Pomyśl o tym: Memtest86 musi przechowywać informacje o tym, jak duża jest pamięć RAM, co umieściła w pamięci RAM, aby porównać później, gdzie zaktualizować ekran i wiele innych informacji. Czynność użycia zmiennej wymaga poprawnego działania pamięci RAM. Ale w jaki sposób można uzyskać wiarygodne wyniki, gdy program działa na prawdopodobnie uszkodzonej pamięci RAM?

Analogią do tego jest uruchomienie programu sprawdzającego dysk twardy z dysku twardego, który sprawdzasz. Nigdy byś tego nie zrobił, zły blok może wpłynąć na program na wiele nieoczekiwanych sposobów

Jak działa Memtest86 przy złej pamięci RAM?

TheLQ
źródło
2
Do Twojej wiadomości, cała praca wykonywana przez CPU odbywa się w pamięci RAM. Kiedy program jest wykonywany, jest wykonywany w pamięci RAM, nie ma nic wspólnego ze zmiennymi. Możesz napisać program, który absolutnie nic nie robi i nigdy nie używa żadnych zmiennych, ale program ten znajduje się w pamięci. Bardzo interesujące pytanie.
Keltari
2
Ponieważ wszystkie (nietrywialne) programy używają zmiennych, sztuczką dla testerów / ćwiczących pamięć jest przechowywanie ich zmiennych w rejestrach, a nie w pamięci. Oznacza to również brak stosu! Niektóre programy pamięci wykonują się poza ROM (np. Architektura Harvarda) lub, jeśli rezydują w testowanej pamięci RAM, przenoszą kod po każdym przejściu. Sukces lub niepowodzenie wykonania programu testującego w różnych lokalizacjach pamięci RAM było częścią ćwiczącego. Oczywiście są prawdopodobnie źle napisane testery pamięci, które używają testowanej pamięci RAM jak zwykły program
trociny
@Keltari technicznie, niektóre części BIOS-u działają bezpośrednio z NOR-u flash ....
rackandboneman,

Odpowiedzi:

9

Głównie dlatego, że ilość pamięci RAM potrzebnej do załadowania memtesta jest bardzo mała. Jeśli program działa, prawdopodobnie pamięć w tym jednym obszarze jest w porządku.

Szansa, że-

  1. Mała sekcja memtestu pamięci została załadowana jest zła.
  2. Nadal było wystarczająco dobre, aby mógł pomyślnie ukończyć wszystkie testy bez zauważalnych problemów.

Jest bardzo prawdopodobne.

użytkownik606723
źródło
7

Memtest jest dość trwały, ponieważ tak naprawdę nie zależy od testowanej pamięci RAM.

Na przykład test 0 używa algorytmu kroczącego , a do tego testu wystarczy tylko jeden wskaźnik (prawdopodobnie buforowany), ponieważ porównuje on tylko dwa kolejne adresy pamięci.

Więc jeśli mamy 3-bitową pamięć RAM, Memtest ładuje ją z tym:

<pointer location> 00000001 00000010 00000100 00001000 00010000 00100000 01000000

A jeśli pierwszy adres jest uszkodzony, porówna dwie losowe lokalizacje:

00000001 00100000

I nadal zawiedzie, nawet jeśli zmienne memtest są uszkodzone.

digitxp
źródło
3

Memtest absolutnie musi przyjąć co najmniej jedno założenie, że przynajmniej pamięć, do której jest załadowana, jest dobra. Następnie jest w stanie przeskanować i przetestować resztę pamięci w całości.

Możliwe, że nadal jest w stanie odczytać i wykryć błędy we własnej pamięci, ponieważ jako jedyny załadowany program powinien mieć dostęp do praktycznie całej pamięci w systemie, a zatem być w stanie odczytać i porównać tę pamięć z „znana dobra” próbka.

Mokubai
źródło
Myślałem głównie o zmianach w zachowaniu, które może zrobić kiepska pamięć RAM. Np. Jeśli zły baran zmienił logikę, tak aby wszystkie testy zawsze były prawdziwe.
TheLQ
Powiedziałbym, że możliwe jest, że pojedynczy bit może zrobić fałszywy odczyt jako prawdziwy podczas testowania, ale bardziej prawdopodobne jest, że bit, który się przewróci, będzie miał coś znacznie bardziej krytycznego, w Memtest oczekiwałbym wielkości rzeczywistego działania kod jest większy niż „przypadki testowe”, więc spodziewam się, że niewielki błąd spowodowałby, że program strasznie się zawiesi, zanim wykryje przejście w miejsce błędu. Przyznaję jednak, że jest taka możliwość.
Mokubai
1

Będąc małym. Jeśli jakaś pamięć RAM jest zła, im mniejszy jest program, tym mniejsze jest prawdopodobieństwo, że część programu znajdzie się w jednym z gorszych punktów. Biorąc pod uwagę, że uruchomienie wystarczająco daleko, aby załadować test pamięci, będzie wymagało użycia kodu oprogramowania układowego za pomocą pamięci RAM, istnieje prawdopodobieństwo, że jeśli uda ci się dostać tak daleko, niskie obszary pamięci RAM działają wystarczająco dobrze, aby memtest mógł z nich uruchomić.

wrosecrans
źródło
1

Pomyśl o tym: Memtest86 musi przechowywać informacje o tym, jak duża jest pamięć RAM, co umieściła w pamięci RAM, aby porównać później, gdzie zaktualizować ekran i wiele innych informacji. Czynność użycia zmiennej wymaga poprawnego działania pamięci RAM. Ale w jaki sposób można uzyskać wiarygodne wyniki, gdy program działa na prawdopodobnie uszkodzonej pamięci RAM?

Cóż, właśnie to robi Memtest - zapisuje różne (znane) wzorce w pamięci RAM, odczytuje je z powrotem i porównuje. W przypadku niezgodności pamięć RAM musi zostać uszkodzona.

Analogią do tego jest uruchomienie programu sprawdzającego dysk twardy z dysku twardego, który sprawdzasz. Nigdy byś tego nie zrobił, zły blok może wpłynąć na program na wiele nieoczekiwanych sposobów

Chociaż jest to prawda, w niektórych przypadkach nie masz wyboru. Tak długo, jak można pomyślnie załadować program, powinien on być w stanie wykonywać swoje zadania diagnostyczne (nawet jeśli działa na jakimś uszkodzonym nośniku).

Jak działa Memtest86 przy złej pamięci RAM?

Cóż, najpierw musi się załadować do pamięci. W większości przypadków ta pamięć będzie nadal dobra. W przypadku, gdy jest to nie , Memtest najprawdopodobniej ustalić, że sam program jest uszkodzony porównując kilka zmiennych w miejscu z sumą kontrolną. W przypadku, gdy się nie zgadzają, od razu wiadomo, że albo pamięć RAM jest zła, albo pobrana kopia jest uszkodzona (i ustalenie, czy ta ostatnia jest przyczyną, czy nie, byłoby trywialnym zadaniem).


TL, DR: Memtest86 + działa tylko przy założeniu, że pierwszy megabajt pamięci RAM jest nadal w porządku (miejsce, w którym najprawdopodobniej zostanie załadowany). Zakładając, że ten obszar jest uszkodzony, sam Memtest86 + po prostu nie działałby (co jest dość szybkim wskaźnikiem, że twoja pamięć RAM jest zła, nawet bez uruchomienia testów).

Przełom
źródło
0

Jeśli pamięć RAM, w której aplikacja zapisuje zmienne, jest zła, wówczas większość testów zakończy się niepowodzeniem.

Algorytm zapisuje różnego rodzaju wzorce, a następnie sprawdza, czy są dobrze napisane, czytając je ponownie, jeśli zapis lub odczyt nie poszły poprawnie, spowoduje to, że test nie powiedzie się. Uruchamiając większość testów i pozwalając na działanie przez kilka godzin, możesz następnie sprawdzić, jak stabilna jest twoja pamięć RAM ...

Thomas Hunter
źródło