RAM에 결함이 있는 Windows 실행

RAM에 결함이 있는 Windows 실행

RAM 모듈에 결함이 있는 경우 Windows(7, x64)를 실행할 수 있나요? 보다 정확하게는 알려진 잘못된 주소나 주소 블록을 할당하지 않도록 Windows에 지시하는 방법이 있습니까?

Linux의 경우 다음이 있습니다.불량RAM. Windows에 대한 기존 구현이 있습니까? Windows 커널(NT 6.1)에서도 가능합니까? 커널 모드 드라이버일까요?

답변1

밥, 질문에는 세 부분이 있습니다. 한 번에 하나씩 다루겠습니다.

불량 메모리로 Windows 실행

결함이 있는 모듈로 Windows 7을 실행하는 것은 실제로 가능합니다. 불량 섹터의 위치와 모듈이 DIMM 뱅크에 있는 위치에 따라 Windows 7은 메모리의 불량 부분을 건드리지 않는 한 아무것도 없는 것처럼 실행됩니다. 따라서 이상적으로는 결함이 있는 모듈을 뱅크 0에서 최대한 멀리 옮기는 것이 좋습니다. 당연히 이것이 유일한 모듈이라면 운이 좋지 않습니다.

Windows에서 불량 메모리 섹터 차단

x86(32비트 및 64비트) 운영 체제에서 메모리는 커널에 의해 관리됩니다. 언급했듯이 BadMem은 Linux에서 불량 메모리 섹터를 차단할 수 있습니다. 이는 사용자가 지정한 메모리 주소를 잠그도록 커널에 지시하여 작동합니다. 이는 메모리를 할당(및 할당 취소)할 때 Linux가 해당 주소를 처리하는 것을 효과적으로 중지합니다. 하지만 이를 위해서는 BadMem이 커널을 패치해야 합니다. BadMem은 적용하기 전에 구성하는 커널 패치에 지나지 않습니다.

이제 Windows에서는 해당 기능이 없습니다. 커널을 패치할 수 없습니다. 커널 모드 드라이버를 개발해도 아무런 소용이 없습니다. Windows 커널은 드라이버가 메모리 관리 아키텍처보다 우선하도록 허용하지 않기 때문입니다(당연히 그렇습니다).

이러한 이유로 특정 메모리 주소를 사용하지 않도록 창에 지시할 수는 없습니다. 유일한 방법은 Microsoft가 귀하의 경우에 맞게 커널을 패치하는 것입니다. 할 것 같지 않은.

나쁜 메모리 주소의 확산

메모리 모듈에 잘못된 주소가 포함될 수 있는 이유는 많지 않습니다. 궁극적으로 모든 것은 생산 라인의 오류로 귀결되며 컴퓨터에 들어가기 전에 손상을 입지 않았다고 가정합니다. 하드 드라이브와 달리 메모리 모듈에는 움직일 수 있는 부분이 없습니다. 따라서 불량 섹터는 하드 드라이브 섹터처럼 확산되는 경향이 없습니다.

그러나 메모리 테스트 소프트웨어가 완벽한 것은 아닙니다. 실제로는 잘못된 특정 주소를 전달하는 것이 가능하고 일반적입니다. 따라서 나쁜 메모리는 점점 더 많은 주소가 나쁜 것으로 드러날수록 "확산"된다는 인상을 줄 수 있습니다. 이러한 이유로 BadMem과 같은 도구는 사용자가 지시한 주소만 처리할 수 있기 때문에 약점을 드러냅니다.

누구도 메모리 모듈을 철저히 테스트하여 불량 메모리 주소를 모두 식별한 다음 이를 잠그고 "양호한" 메모리 모듈을 얻을 수 있는 가능성은 거의 없습니다. 가장 쉬운 방법은 주소가 잘못된 모듈을 전체적으로 결함이 있는 모듈로 간주하여 결과적으로 신뢰할 수 없는 것으로 간주하는 것입니다.

이것이 의미하는 바는 BadMem이 매력적인 제안이긴 하지만 실제로 나쁜 메모리 문제에 대한 해결책은 아니라는 것입니다. 아마도 불량 섹터를 읽으려고 시도하다가 중지 오류로 인해 작동이 중단되는 운영 체제를 갖게 될 가능성은 거의 없습니다. 나쁜 모듈은 나쁜 모듈입니다.

답변2

Windows BCD(부팅 구성 데이터)에는 실제로 {badmemory}개체가 있습니다.ECC 메모리에 의해 "실패할 것으로 예상되는" 메모리 주소가 여기에 나열되며 운영 체제에서는 사용되지 않는 것 같습니다.

객체 는 공백으로 구분된 16진수로 입력할 수 있는 정수 목록인 (BCD 유형 ) 요소를 {badmemory}허용합니다 . memtest86에서 발견한 잘못된 메모리 주소를 이 요소에 수동으로 삽입하는 것이 가능할 것이라고 생각합니다. 그러나 이것을 테스트하지는 않았습니다.BadMemoryList0x1700000a분명히 이는 실제 주소를 4096으로 나눈 '페이지 프레임 번호'를 허용합니다.안타깝게도 이러한 주소/PFN은 메모리 진단에서 보고된 주소/PFN과 일치하지 않을 수 있습니다. 수동 편집은 다음을 통해 수행할 수 있습니다.비주얼 BCD 편집기.

어떤 경우든 다른 답변에 표시된 대로 결함이 있는 메모리 스틱을 교체해야 합니다. 이는 문제를 해결하는 가능한 방법에 대한 참고 사항일 뿐입니다(일시적으로?).


memtest86 Pro(무료 아님)올바른 블랙리스트 명령을 생성할 수 있습니다.보고서에서. 다른 답변에서는 수동으로 수행하는 프로세스를 설명합니다.

답변3

SoC가 있는 태블릿에서 RAM 문제가 발생했습니다. 메모리는 SoC에 용접되거나 통합되어 있으며 교체할 수 없습니다.

저는 아르헨티나에 있고 판매자는 중국에 있는데, 배송비와 시간 때문에 보증서를 보내는 건 말도 안 돼요.

몇 안타를 기록했습니다.

손상된 메모리 매개변수를 전달하는 핵심은 다음과 같습니다.

  1. memtest86의 주소는 Windows에서 사용되는 주소와 일치합니다.
  2. 4KBytes의 전체 페이지를 표시해야 합니다.
  3. memtest의 0x10000000값은 Windows의 0x10000에 해당합니다.
  4. memtest의 0x00001000값은 Windows의 0x1에 해당합니다.
  5. 의미: Windows의 페이지 번호는 마지막 3개의 memtest 16진수 숫자를 제거합니다.
  6. 즉, 창은 왼쪽에서 0을 제거합니다.
  7. 페이지 번호의 오류를 방지하려면 5와 6을 고려하십시오.
  8. 올바른 설명은 bcdedit /set {badmemory} badmemorylist 0xB7 0xB8 0xB9 0xBA0x000B7000에서 0x000BAFFF까지 memtest의 오류입니다. 다양한 추억을 넣을 수는 없지만 모든 페이지를 하나씩 넣을 수 있습니다.
  9. 페이지를 추가할 수 없습니다. 모든 페이지는 동일한 명령으로 표시되어야 합니다. 새 페이지를 추가하면 이전 페이지를 덮어씁니다. 단 한 번의 명령으로 4096페이지를 추가하는 데 성공했습니다. 나는 그것을 더 시도하지 않았습니다.
  10. bcdedit /enum {badmemory}, 표시된 페이지 목록을 표시합니다.
  11. bcdedit /set badmemoryaccess no 표시된 페이지가 사용되는 것을 방지
  12. 페이지를 표시하고 액세스 권한을 제거한 후 재부팅해야 합니다.

답변4

이 유틸리티를 보세요:https://github.com/prsyahmi/BadMemory

사용이 매우 쉽고 주소 범위 차단을 지원합니다. 그리고 마지막 세 자리를 제거하지 않고 MemTest86에서 받은 전체 주소를 사용할 수 있습니다.

관련 정보