Bagaimana fungsi Memtest86 dengan RAM yang buruk?

17

Saya membaca pertanyaan lain tentang Memtest dan mulai bertanya-tanya: Bagaimana fungsi Memtest86 dengan RAM yang buruk?

Pikirkan tentang hal ini: Memtest86 perlu menyimpan informasi tentang seberapa besar RAM, apa yang dimasukkan ke dalam RAM untuk dibandingkan nanti, di mana memperbarui layar, dan banyak informasi lainnya. Tindakan menggunakan variabel membutuhkan RAM agar berfungsi dengan baik. Tetapi bagaimana Anda bisa mendapatkan hasil yang andal ketika Anda menjalankan program pada RAM yang mungkin rusak?

Sebuah analogi dengan ini adalah menjalankan program pemeriksaan hard drive dari hard drive yang Anda periksa. Anda tidak akan pernah melakukan itu, blok yang buruk dapat mempengaruhi program dengan banyak cara yang tidak terduga

Bagaimana fungsi Memtest86 dengan RAM yang buruk?

TheLQ
sumber
2
FYI, semua pekerjaan yang dilakukan oleh CPU dilakukan dalam RAM. Ketika sebuah program dieksekusi, ini dilakukan dalam RAM, itu tidak ada hubungannya dengan variabel. Anda bisa menulis sebuah program yang sama sekali tidak melakukan apa-apa, dan tidak pernah menggunakan variabel apa pun, tetapi program itu berada dalam memori. Pertanyaan yang sangat menarik.
Keltari
2
Karena semua (non-sepele) program menggunakan variabel, trik untuk penguji memori / berolahraga adalah untuk menyimpan variabel mereka dalam register, daripada memori. Itu juga berarti tidak ada tumpukan! Beberapa program memori dijalankan di luar ROM (misalnya arsitektur Harvard), atau, jika ada dalam RAM yang diuji, pindahkan kode setelah setiap pass. Berhasil atau tidaknya menjalankan program pengujian di berbagai lokasi RAM adalah bagian dari berolahraga. Tentu saja mungkin ada penguji memori yang ditulis dengan buruk yang menggunakan RAM yang sedang diuji seperti program biasa
sawdust
@Keltari secara teknis, bagian dari BIOS berjalan langsung dari NOR flash ....
rackandboneman

Jawaban:

9

Sebagian besar karena jumlah ram yang diperlukan untuk memuat memtest sangat kecil. Jika program berjalan, kemungkinan memori di area ini tidak apa-apa.

Kesempatan itu-

  1. Bagian kecil dari memtest memori dimuat adalah buruk.
  2. Itu masih cukup baik sehingga bisa menyelesaikan semua tes dengan sukses tanpa masalah yang nyata.

Tidak mungkin.

pengguna606723
sumber
7

Memtest cukup tahan lama karena tidak terlalu tergantung pada RAM yang diuji.

Misalnya, tes 0 menggunakan algoritme berjalan , dan yang diperlukan untuk tes itu adalah satu pointer (mungkin di-cache), karena hanya membandingkan dua alamat memori yang berurutan.

Jadi jika kita memiliki RAM stick 3-bit, memtest memuatnya dengan ini:

<pointer location> 00000001 00000010 00000100 00001000 00010000 00100000 01000000

Dan jika alamat pertama rusak, itu akan membandingkan dua lokasi acak:

00000001 00100000

Dan itu masih akan gagal, bahkan jika variabel memtest rusak.

digitxp
sumber
3

Memtest benar-benar harus membuat setidaknya satu asumsi, bahwa setidaknya memori yang dimasukkan ke dalamnya bagus. Setelah itu dapat memindai dan menguji sisa memori secara keseluruhan.

Mungkin masih dapat membaca dan mendeteksi kesalahan dalam memorinya sendiri karena, sebagai satu-satunya program yang dimuat, ia harus memiliki akses ke hampir semua memori pada sistem sehingga dapat membaca dan membandingkan memori itu dengan Sampel "dikenal baik".

Mokubai
sumber
Saya terutama berpikir tentang perubahan perilaku RAM buruk yang bisa dilakukan. Misal jika ram buruk mengubah logika sehingga semua tes selalu muncul benar.
TheLQ
Saya akan mengatakan bahwa ada kemungkinan satu bit flip dapat membuat pembacaan yang salah sebagai benar saat pengujian, tetapi lebih mungkin bahwa bit yang membalik akan menjadi sesuatu yang jauh lebih kritis, di Memtest saya akan mengharapkan ukuran menjalankan aktual kode menjadi lebih besar dari "kasus uji" dan jadi saya berharap sedikit kesalahan akan menyebabkan program crash parah sebelum mendeteksi celah di tempat yang gagal. Saya akui itu kemungkinan.
Mokubai
1

Dengan menjadi kecil. Jika beberapa RAM buruk, semakin kecil programnya, semakin kecil kemungkinan beberapa bagian dari program akan berada di salah satu titik buruk. Menimbang bahwa mem-boot cukup jauh untuk memuat tes memori akan melibatkan beberapa kode firmware menggunakan RAM, kemungkinannya adalah jika Anda bisa sejauh itu, area rendah RAM bekerja cukup baik sehingga memtest dapat menjalankannya.

wrosecrans
sumber
1

Pikirkan tentang hal ini: Memtest86 perlu menyimpan informasi tentang seberapa besar RAM, apa yang dimasukkan ke dalam RAM untuk dibandingkan nanti, di mana memperbarui layar, dan banyak informasi lainnya. Tindakan menggunakan variabel membutuhkan RAM agar berfungsi dengan baik. Tetapi bagaimana Anda bisa mendapatkan hasil yang andal ketika Anda menjalankan program pada RAM yang mungkin rusak?

Nah, inilah yang dilakukan Memtest - ia menulis berbagai pola (dikenal) ke RAM Anda, membacanya kembali, dan membandingkannya. Jika ada kecocokan, RAM Anda harus rusak.

Sebuah analogi dengan ini adalah menjalankan program pemeriksaan hard drive dari hard drive yang Anda periksa. Anda tidak akan pernah melakukan itu, blok yang buruk dapat mempengaruhi program dengan banyak cara yang tidak terduga

Meskipun ini benar, ada beberapa kasus di mana Anda tidak punya pilihan. Selama Anda dapat memuat program dengan sukses, itu harus dapat melakukan tugas-tugas diagnostik itu (bahkan jika itu berjalan pada media yang rusak dari beberapa jenis).

Bagaimana fungsi Memtest86 dengan RAM yang buruk?

Yah, itu harus memuat dirinya ke dalam memori terlebih dahulu. Dalam kebanyakan kasus, memori ini akan tetap bagus. Jika tidak , Memtest kemungkinan besar akan menentukan bahwa program itu sendiri rusak dengan membandingkan beberapa variabel di tempat dengan checksum. Jika mereka tidak cocok, Anda akan langsung tahu bahwa RAM Anda buruk, atau salinan yang Anda unduh rusak (dan itu akan menjadi tugas yang sepele untuk menentukan apakah yang terakhir adalah penyebabnya atau tidak).


TL, DR: Memtest86 + hanya berfungsi dengan asumsi megabita pertama RAM Anda masih baik-baik saja (lokasi di mana ia akan dimuat kemungkinan besar). Dengan asumsi area ini rusak, Memtest86 + sendiri tidak akan berfungsi (yang merupakan indikator yang cukup cepat RAM Anda buruk tanpa harus menjalankan tes).

Penerobosan
sumber
0

Jika RAM aplikasi menyimpan variabel buruk, maka sebagian besar tes akan gagal.

Algoritme menulis semua jenis pola yang berbeda dan kemudian memeriksa apakah mereka ditulis dengan baik dengan membacanya lagi, jika tulisan atau bacaan tidak berjalan dengan benar itu akan membuat tes yang dimaksud gagal. Dengan menjalankan sebagian besar tes dan menjalankannya selama beberapa jam, Anda dapat melihat seberapa stabil RAM Anda ...

Thomas Hunter
sumber