불량 RAM에서 Memtest86은 어떻게 작동합니까?


17

Memtest에 대한 또 다른 질문을 읽고 궁금해지기 시작했습니다. Memtest86은 불량 RAM에서 어떻게 작동합니까?

생각해보십시오 : Memtest86은 RAM의 크기, 나중에 비교하기 위해 RAM에 넣은 내용, 화면을 업데이트 할 위치 및 더 많은 정보에 대한 정보를 저장해야합니다. 변수를 사용하려면 RAM이 제대로 작동해야합니다. 그러나 결함이있는 RAM에서 프로그램을 실행할 때 어떻게 안정적인 결과를 얻을 수 있습니까?

이것에 비유하면 점검중인 하드 드라이브에서 하드 드라이브 검사 프로그램을 실행하는 것입니다. 당신은 그렇게하지 않을 것입니다. 나쁜 블록은 예기치 않은 많은 방법으로 프로그램에 영향을 줄 수 있습니다

불량 RAM에서 Memtest86은 어떻게 작동합니까?


2
참고로 CPU가 수행하는 모든 작업은 RAM으로 수행됩니다. RAM에서 수행되는 프로그램이 실행될 때 변수와 관련이 없습니다. 절대 아무것도하지 않고 변수를 사용하지 않는 프로그램을 작성할 수 있지만 해당 프로그램은 메모리에 상주합니다. 그래도 매우 흥미로운 질문입니다.
Keltari

2
모든 (사소하지 않은) 프로그램은 변수를 사용하므로 메모리 테스터 / 실행자는 메모리 대신 레지스터에 변수를 저장해야합니다. 그것은 또한 스택이 없음을 의미합니다! 일부 메모리 프로그램은 ROM (예 : 하버드 아키텍처)에서 실행되거나 테스트중인 RAM에 상주하는 경우 각 패스 후 코드를 재배치합니다. 다양한 RAM 위치에서 테스트 프로그램을 성공적으로 수행하지 못했는지 여부는 연습 문제의 일부였습니다. 물론 일반 프로그램처럼 테스트중인 RAM을 사용하는 잘못 작성된 메모리 테스터가있을 수 있습니다.
톱밥

@Keltari 기술적으로 BIOS의 일부는 NOR 플래시에서 바로 실행됩니다.
rackandboneman

답변:


9

memtest를로드하는 데 걸리는 램의 양이 매우 작기 때문입니다. 프로그램이 실행되면이 영역의 메모리가 정상일 수 있습니다.

그 기회는

  1. 메모리 memtest의 작은 섹션이로드되었습니다.
  2. 여전히 눈에 띄는 문제없이 모든 테스트를 성공적으로 완료 할 수있을 정도로 충분했습니다.

거의 없을 것입니다.


7

Memtest는 테스트하는 RAM에 실제로 의존하지 않기 때문에 내구성이 뛰어납니다.

예를 들어, 테스트 0은 Walking Ones 알고리즘을 사용하며 테스트에 필요한 것은 단일 포인터 (아마 캐시 된)입니다. 두 개의 연속 메모리 주소 만 비교하기 때문입니다.

따라서 3 비트 RAM 스틱이 있으면 memtest는 다음과 같이로드합니다.

<pointer location> 00000001 00000010 00000100 00001000 00010000 00100000 01000000

첫 번째 주소가 손상된 경우 두 개의 임의 위치를 ​​비교합니다.

00000001 00100000

memtest의 변수가 손상 되어도 여전히 실패합니다.


3

Memtest는 절대적으로 적어도 하나의 가정을해야합니다. 최소한 그 자체로로드 된 메모리는 양호합니다. 그 후 나머지 메모리를 완전히 스캔하고 테스트 할 수 있습니다.

프로그램이로드 된 유일한 프로그램이므로 시스템의 모든 메모리에 액세스 할 수 있어야하므로 해당 메모리를 읽고 비교할 수 있어야합니다. "잘 알려진"샘플.


나는 주로 나쁜 RAM이 할 수있는 행동의 변화에 ​​대해 생각하고있었습니다. 예를 들어 불량 램이 로직을 변경하여 모든 테스트가 항상 사실로 나타났습니다.
TheLQ

테스트하는 동안 단일 비트 플립이 거짓 판독을 참으로 만들 수 있다고 말할 수 있지만 플립 비트는 훨씬 더 중요 할 것입니다 .Memtest에서는 실제 실행 크기를 기대합니다. 코드가 "테스트 사례"보다 크므로 비트 오류로 인해 프로그램이 실패 대신 패스를 감지하기 전에 끔찍하게 충돌 할 것으로 예상됩니다. 그래도 가능하다는 것을 인정합니다.
Mokubai

1

작아서. 일부 RAM이 불량하면 프로그램이 작을수록 프로그램의 일부가 불량 지점 중 하나에있을 가능성이 줄어 듭니다. 메모리 테스트를로드하기에 충분히 부팅 할 때 RAM을 사용하는 일부 펌웨어 코드가 필요하다는 것을 고려할 때, 그렇게 할 수 있으면 RAM의 낮은 영역이 memtest가 실행할 수있을 정도로 충분히 작동한다는 것입니다.


1

생각해보십시오 : Memtest86은 RAM의 크기, 나중에 비교하기 위해 RAM에 넣은 내용, 화면을 업데이트 할 위치 및 더 많은 정보에 대한 정보를 저장해야합니다. 변수를 사용하려면 RAM이 제대로 작동해야합니다. 그러나 결함이있는 RAM에서 프로그램을 실행할 때 어떻게 안정적인 결과를 얻을 수 있습니까?

글쎄, 이것은 Memtest가하는 일입니다-RAM에 다양한 (알려진) 패턴을 쓰고, 읽고, 비교합니다. 불일치가 있으면 RAM이 손상된 것입니다.

이것에 비유하면 점검중인 하드 드라이브에서 하드 드라이브 검사 프로그램을 실행하는 것입니다. 당신은 그렇게하지 않을 것입니다. 나쁜 블록은 예기치 않은 많은 방법으로 프로그램에 영향을 줄 수 있습니다

이것이 사실이지만, 선택의 여지가없는 경우가 있습니다. 프로그램을 성공적으로로드 할 수있는 한, 어떤 종류의 결함이있는 매체에서 실행중인 경우에도 진단 작업을 수행 할 수 있어야합니다.

불량 RAM에서 Memtest86은 어떻게 작동합니까?

먼저 메모리에 먼저로드해야합니다. 대부분의 경우이 메모리는 여전히 유효합니다. 그것이하는 경우에 하지 , Memtest은 대부분 프로그램 자체가 체크섬과 일부 현재 위치에서 변수를 비교하여 손상되었음을 결정합니다. 일치하지 않는 경우 RAM이 잘못되었거나 다운로드 한 사본이 손상되었음을 즉시 알 수 있습니다 (후자가 원인인지 여부를 확인하는 것은 사소한 작업입니다).


TL, DR : Memtest86 +는 RAM의 첫 메가 바이트가 여전히 양호하다고 가정 할 때만 작동합니다 (가장 많이로드 될 위치). 이 영역이 손상되었다고 가정하면 Memtest86 + 자체는 단순히 작동하지 않습니다 (테스트를 실행하지 않아도 RAM이 불량하다는 매우 빠른 지표입니다).


0

응용 프로그램이 변수를 저장하는 RAM이 불량이면 대부분의 테스트가 실패합니다.

이 알고리즘은 모든 종류의 서로 다른 패턴을 쓴 다음 다시 읽음으로써 올바르게 작성되었는지 확인합니다. 쓰기 또는 읽기가 올바르게 진행되지 않으면 해당 테스트가 실패하게됩니다. 대부분의 테스트를 실행하고 몇 시간 동안 실행하면 RAM이 얼마나 안정적인지 알 수 있습니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.