Memtest86 ทำงานอย่างไรกับ RAM ที่ไม่ดี?


17

ฉันกำลังอ่านคำถามเกี่ยวกับ Memtest และเริ่มสงสัยว่า: Memtest86 ทำงานอย่างไรกับ RAM ที่ไม่ดี

คิดเกี่ยวกับมัน: Memtest86 จำเป็นต้องเก็บข้อมูลเกี่ยวกับ RAM ที่มีขนาดใหญ่สิ่งที่ใส่ใน RAM เพื่อเปรียบเทียบในภายหลังสถานที่ที่จะอัปเดตหน้าจอและข้อมูลอื่น ๆ อีกมากมาย การใช้ตัวแปรจำเป็นต้องใช้ RAM เพื่อให้ทำงานได้อย่างถูกต้อง แต่คุณจะได้ผลลัพธ์ที่เชื่อถือได้อย่างไรเมื่อรันโปรแกรมบน RAM ที่อาจผิดปกติ?

การเปรียบเทียบนี้กำลังเรียกใช้โปรแกรมตรวจสอบฮาร์ดไดรฟ์จากฮาร์ดไดรฟ์ที่คุณตรวจสอบ คุณจะไม่ทำเช่นนั้นบล็อกที่ไม่ดีอาจส่งผลกระทบต่อโปรแกรมด้วยวิธีที่ไม่คาดคิดมากมาย

Memtest86 ทำงานอย่างไรกับ RAM ที่ไม่ดี?


2
FYI งานที่ทำโดย CPU ทั้งหมดนั้นทำใน RAM เมื่อโปรแกรมถูกเรียกใช้งานมันทำใน RAM มันไม่มีส่วนเกี่ยวข้องกับตัวแปร คุณสามารถเขียนโปรแกรมที่ไม่ทำอะไรเลยและไม่ใช้ตัวแปรใด ๆ แต่โปรแกรมนั้นอยู่ในหน่วยความจำ คำถามที่น่าสนใจมาก
Keltari

2
เนื่องจากโปรแกรม (ไม่ใช่เรื่องไม่สำคัญ) ทั้งหมดใช้ตัวแปรเคล็ดลับสำหรับผู้ทดสอบหน่วยความจำ / แบบฝึกหัดคือการจัดเก็บตัวแปรของพวกเขาในการลงทะเบียนแทนที่จะเป็นหน่วยความจำ นั่นก็หมายความว่าไม่มีกอง! โปรแกรมหน่วยความจำบางตัวรันออกมาจาก ROM (เช่นสถาปัตยกรรมฮาร์วาร์ด) หรือหากอาศัยอยู่ใน RAM ภายใต้การทดสอบให้ย้ายรหัสหลังจากผ่านแต่ละครั้ง ความสำเร็จหรือความล้มเหลวในการรันโปรแกรมทดสอบที่ตำแหน่ง RAM ต่างๆเป็นส่วนหนึ่งของแบบฝึกหัด แน่นอนมีอาจจะไม่ดีเขียนทดสอบหน่วยความจำที่ใช้ RAM ภายใต้การทดสอบเช่นโปรแกรมสามัญ
ขี้เลื่อย

@Keltari เทคนิคส่วนของไบออสวิ่งออกตรงของ NOR แฟลช ....
rackandboneman

คำตอบ:


9

ส่วนใหญ่เป็นเพราะปริมาณของ ram ที่ใช้ในการโหลด memtest มีขนาดเล็กมาก หากโปรแกรมทำงานอาจเป็นไปได้ว่าหน่วยความจำในพื้นที่นี้ก็โอเค

โอกาสที่ -

  1. โหลดหน่วยความจำ memtest ส่วนเล็ก ๆ ไม่ดี
  2. มันยังดีพอที่จะสามารถทำการทดสอบทั้งหมดได้สำเร็จโดยไม่มีปัญหาที่สังเกตได้

เป็นอย่างมากไม่น่าเป็นไปได้


7

Memtest นั้นค่อนข้างทนทานซึ่งมันไม่ได้ขึ้นอยู่กับ RAM ที่ใช้ทดสอบ

ตัวอย่างเช่นการทดสอบ 0 ใช้อัลกอริธึมการเดินและสิ่งที่ต้องใช้สำหรับการทดสอบนั้นคือตัวชี้เดียว (อาจแคช) เพราะเป็นการเปรียบเทียบที่อยู่หน่วยความจำสองที่ต่อเนื่องกันเท่านั้น

ดังนั้นถ้าเรามี RAM แท่งแบบ 3 บิต memtest จะทำการโหลดด้วย:

<pointer location> 00000001 00000010 00000100 00001000 00010000 00100000 01000000

และหากที่อยู่แรกเสียหายมันจะเปรียบเทียบตำแหน่งสุ่มสองแห่ง:

00000001 00100000

และมันจะยังคงล้มเหลวแม้ว่าตัวแปรของ memtest จะเสียหาย


3

Memtest ต้องทำอย่างน้อยหนึ่งข้อสันนิษฐานว่าอย่างน้อยหน่วยความจำที่มันถูกโหลดเข้ามานั้นดี หลังจากนั้นสามารถสแกนและทดสอบหน่วยความจำส่วนที่เหลือทั้งหมด

อาจเป็นไปได้ว่ามันยังคงสามารถอ่านและตรวจจับข้อผิดพลาดในหน่วยความจำของตัวเองเนื่องจากเป็นโปรแกรมเดียวที่โหลดมันควรมีการเข้าถึงหน่วยความจำทั้งหมดในระบบจริงและสามารถอ่านและเปรียบเทียบหน่วยความจำนั้นกับ ตัวอย่าง "รู้จักดี"


ฉันส่วนใหญ่คิดเกี่ยวกับการเปลี่ยนแปลงในพฤติกรรมที่เลว RAM สามารถทำได้ เช่นถ้าหน่วยความจำไม่ดีเปลี่ยนตรรกะเพื่อให้การทดสอบทั้งหมดปรากฏขึ้นจริงเสมอ
TheLQ

ฉันจะบอกว่าเป็นไปได้ที่การอ่านเพียงเล็กน้อยอาจทำให้อ่านผิดได้จริงในขณะทดสอบ แต่มีแนวโน้มว่าบิตที่การพลิกจะเป็นสิ่งที่สำคัญยิ่งกว่าใน Memtest ฉันคาดหวังว่าขนาดของการวิ่งจริง รหัสจะใหญ่กว่า "กรณีทดสอบ" และดังนั้นฉันคาดว่าข้อผิดพลาดเล็กน้อยจะทำให้โปรแกรมผิดพลาดอย่างน่ากลัวก่อนที่จะตรวจพบการส่งผ่านแทนที่ความล้มเหลว ฉันยอมรับว่ามันเป็นไปได้ว่า
Mokubai

1

โดยเป็นคนตัวเล็ก หากแรมบางตัวไม่ดีโปรแกรมที่มีขนาดเล็กก็จะมีโอกาสน้อยลงที่โปรแกรมบางส่วนจะอยู่ในจุดที่ไม่ดี เมื่อพิจารณาว่าการบูตหน่วยความจำเพียงพอที่จะโหลดการทดสอบหน่วยความจำจะเกี่ยวข้องกับรหัสเฟิร์มแวร์บางอย่างโดยใช้ RAM อัตราต่อรองคือถ้าคุณไปได้ไกลพื้นที่ RAM ต่ำจะทำงานได้ดีพอที่ memtest จะสามารถเรียกใช้ได้


1

คิดเกี่ยวกับมัน: Memtest86 จำเป็นต้องเก็บข้อมูลเกี่ยวกับ RAM ที่มีขนาดใหญ่สิ่งที่ใส่ใน RAM เพื่อเปรียบเทียบในภายหลังสถานที่ที่จะอัปเดตหน้าจอและข้อมูลอื่น ๆ อีกมากมาย การใช้ตัวแปรจำเป็นต้องใช้ RAM เพื่อให้ทำงานได้อย่างถูกต้อง แต่คุณจะได้ผลลัพธ์ที่เชื่อถือได้อย่างไรเมื่อรันโปรแกรมบน RAM ที่อาจผิดปกติ?

นี่คือสิ่งที่ Memtest ทำ - มันเขียนรูปแบบต่าง ๆ (ที่รู้จัก) ไปยัง RAM ของคุณอ่านมันกลับมาและเปรียบเทียบ หากมีข้อผิดพลาด RAM ของคุณจะต้องได้รับความเสียหาย

การเปรียบเทียบนี้กำลังเรียกใช้โปรแกรมตรวจสอบฮาร์ดไดรฟ์จากฮาร์ดไดรฟ์ที่คุณตรวจสอบ คุณจะไม่ทำเช่นนั้นบล็อกที่ไม่ดีอาจส่งผลกระทบต่อโปรแกรมด้วยวิธีที่ไม่คาดคิดมากมาย

แม้ว่าจะเป็นเรื่องจริง แต่ก็มีบางกรณีที่คุณไม่มีทางเลือก ตราบใดที่คุณสามารถโหลดโปรแกรมได้สำเร็จก็ควรจะสามารถทำงานการวินิจฉัยได้ (แม้ว่าจะทำงานบนสื่อที่มีข้อบกพร่อง)

Memtest86 ทำงานอย่างไรกับ RAM ที่ไม่ดี?

มันต้องโหลดตัวเองเข้าไปในหน่วยความจำก่อน ในกรณีส่วนใหญ่หน่วยความจำนี้จะยังคงดี ในกรณีที่ไม่เป็นเช่นนั้น Memtest มักจะตัดสินว่าตัวโปรแกรมเองเสียหายโดยการเปรียบเทียบตัวแปรแบบแทนที่กับการตรวจสอบ ในกรณีที่พวกเขาไม่ตรงกันคุณจะรู้ได้ทันทีว่า RAM ของคุณไม่ดีหรือสำเนาที่คุณดาวน์โหลดเสียหาย (และมันจะเป็นงานเล็กน้อยเพื่อตรวจสอบว่าหลังเป็นสาเหตุหรือไม่)


TL, DR: Memtest86 + ใช้งานได้เพียงสมมติว่าเมกะไบต์แรกของ RAM ของคุณยังคงดี (ตำแหน่งที่โหลดได้มากที่สุด) สมมติว่าบริเวณนี้เสียหาย Memtest86 + นั้นจะไม่ทำงาน (ซึ่งเป็นตัวบ่งชี้ที่รวดเร็วว่า RAM ของคุณไม่ดีโดยไม่ต้องทำการทดสอบ)


0

หาก RAM แอปพลิเคชันบันทึกตัวแปรที่ไม่ดีการทดสอบส่วนใหญ่จะล้มเหลว

อัลกอริทึมเขียนรูปแบบที่แตกต่างกันทุกประเภทแล้วตรวจสอบว่าพวกเขาเขียนได้ดีโดยการอ่านอีกครั้งหากการเขียนหรือการอ่านไม่ได้ไปอย่างถูกต้องจะทำให้การทดสอบในคำถามล้มเหลว ด้วยการรันการทดสอบส่วนใหญ่แล้วปล่อยให้มันทำงานเป็นเวลาหลายชั่วโมงคุณจะได้เห็นว่า RAM ของคุณมีความเสถียรเพียงใด ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.