Apakah mungkin menjalankan Windows (7, x64) dengan modul RAM yang rusak? Lebih tepatnya, apakah ada cara untuk memberitahu Windows untuk tidak mengalokasikan alamat yang dikenal buruk atau blok alamat?
Untuk Linux, ada BadRAM . Apakah ada implementasi yang ada untuk Windows? Apakah itu mungkin dengan kernel Windows (NT 6.1)? Mungkin driver mode kernel?
Jawaban:
Bob, ada tiga bagian untuk pertanyaanmu. Saya akan membahas satu per satu.
Menjalankan Windows dengan memori buruk
Memang mungkin untuk menjalankan Windows 7 dengan modul yang rusak. Bergantung pada lokasi bad sector dan di mana modul berada di bank DIMM Anda, Windows 7 akan berjalan seperti tidak ada apa-apa asalkan tidak mencoba menyentuh bagian buruk dari memori. Jadi, idealnya Anda akan memindahkan modul yang rusak sejauh mungkin dari bank 0. Tentu saja, jika ini adalah satu-satunya modul Anda, Anda kurang beruntung.
Memblokir sektor memori buruk di Windows
Pada sistem operasi x86 (32 dan 64 bit), memori dikelola oleh kernel. Seperti yang Anda sebutkan, BadMem mampu memblokir sektor memori buruk di Linux. Ini bekerja dengan menginstruksikan kernel untuk mengunci alamat memori yang Anda tentukan. Ini secara efektif menghentikan Linux dari pernah mengatasi alamat-alamat itu ketika mengalokasikan (dan membatalkan alokasi) memori. Tetapi untuk melakukan ini, BadMem perlu menambal kernel. BadMem tidak lebih dari patch kernel yang Anda konfigurasikan sebelum mendaftar.
Sekarang, Anda tidak memiliki kemampuan itu di Windows. Anda tidak dapat menambal kernel. Mengembangkan driver mode kernel juga tidak akan ada gunanya bagi Anda, karena kernel Windows tidak akan pernah membiarkan driver Anda lebih diutamakan daripada arsitektur manajemen memorinya (dapat dimengerti demikian).
Karena alasan ini, Anda tidak dapat menginstruksikan windows dengan cara apa pun untuk tidak menggunakan alamat memori tertentu. Satu-satunya cara bagi Microsoft untuk menambal kernel untuk kasus Anda secara khusus. Tidak sepertinya.
Penyebaran alamat memori buruk
Tidak banyak alasan mengapa modul memori mungkin berisi alamat yang salah. Pada akhirnya semuanya bermuara pada kesalahan di jalur produksi, dengan asumsi itu tidak mengalami kerusakan sebelum masuk ke komputer Anda. Berlawanan dengan hard drive, tidak ada komponen bergerak dalam modul memori, seperti yang Anda ketahui. Jadi, bad sector tidak cenderung menyebar seperti halnya sektor hard drive.
Namun, perangkat lunak tes memori tidak mudah. Mungkin (dan umum) untuk itu melewati alamat tertentu yang sebenarnya buruk. Jadi memori buruk dapat memberi kesan "menyebar" karena semakin banyak alamat yang dinyatakan buruk. Untuk alasan ini alat-alat seperti BadMem mengungkapkan kelemahan mereka, karena secara alami mereka hanya dapat menangani alamat yang Anda instruksikan.
Tidak mungkin ada orang yang dapat melakukan tes modul memori secara menyeluruh dan mengidentifikasi semua alamat memori yang buruk, kemudian mengunci mereka dan berakhir dengan modul memori "baik". Hal termudah untuk dilakukan adalah menganggap modul dengan alamat yang buruk sebagai modul yang rusak di seluruh dan akibatnya tidak dapat dipercaya.
Ini berarti bahwa, meskipun BadMem adalah proposisi yang menarik, itu sebenarnya bukan solusi untuk masalah memori buruk. Lebih mungkin maka Anda masih akan berakhir dengan sistem operasi yang mencoba membaca sektor yang buruk dan crash dengan stop error. Modul yang buruk adalah modul yang buruk adalah modul yang buruk.
sumber
Windows BCD (Boot Configuration Data) sebenarnya memiliki
{badmemory}
objek. Sepertinya alamat memori yang "diprediksi gagal" oleh memori ECC akan terdaftar di sini, dan tidak digunakan oleh sistem operasi.The
{badmemory}
objek menerimaBadMemoryList
(tipe BCD0x1700000a
) elemen, yang merupakan daftar bilangan bulat yang bisa dimasukkan sebagai hex, dipisahkan dengan spasi. Saya kira akan mungkin untuk memasukkan alamat memori buruk secara manual seperti yang ditemukan oleh memtest86 ke elemen ini - tapi saya belum menguji ini. Tampaknya, ia menerima nomor bingkai halaman, yang merupakan alamat sebenarnya dibagi dengan 4096. Sayangnya, alamat / PFN ini mungkin tidak cocok dengan yang dilaporkan oleh diagnostik memori. Pengeditan manual dapat dilakukan dengan Visual BCD Editor .Bagaimanapun, memory stick yang rusak harus diganti seperti yang ditunjukkan oleh jawaban lain. Ini hanyalah catatan tentang cara yang mungkin untuk mengatasi masalah ini (sementara?).
sumber
Windows BCD memiliki
{badmemorylist}
dan{badmemoryaccess}
objek. Anda harus mengatur halaman memori pertama ke buruk dipisahkan oleh spasi (mis.bcdedit /set badmemorylist 1499543 1434007
) Dan yang kedua keNo
(bcdedit /set badmemoryaccess No
)Ingatlah bahwa ukuran halaman memori di windows biasanya
4KB
Diuji di windows 7 dan berfungsi dengan baik
Anda dapat menguji pengaturan Anda dengan Rammap oleh Sysinternals
PS, saya mendapat info itu
"Windows Internals Book" chapter 10
sumber
Saya mengalami masalah RAM di tablet dengan SoC. Memori dilas atau diintegrasikan ke dalam SoC dan tidak dapat diganti.
Saya di Argentina dan penjualnya di Cina, dan biaya pengiriman dan waktunya, tidak masuk akal untuk mengirimkan garansi.
Saya berhasil beberapa hit.
Kunci untuk melewatkan parameter memori yang rusak adalah:
0x10000000
sesuai dengan 0x10000 di Windows0x00001000
sesuai dengan 0x1 di Windowsbcdedit /set {badmemory} badmemorylist 0xB7 0xB8 0xB9 0xBA
untuk kesalahan dalam memtest dari 0x000B7000 hingga 0x000BAFFF. Perhatikan bahwa Anda tidak dapat menempatkan serangkaian memori, tetapi semua halaman satu per satubcdedit /enum {badmemory}
, menunjukkan daftar halaman yang ditandai.bcdedit /set badmemoryaccess no
mencegah halaman yang ditandai digunakansumber
/
dan perintah untuk itu berfungsi, jadi alih-alihbcdedit / enum {badmemory}
itu akanbcdedit /enum {badmemory}
sama untuk yang lainSejauh yang saya ketahui, satu-satunya cara untuk melakukan ini adalah menggunakan perintah BurnMem yang secara artifisial dapat membatasi jumlah penggunaan RAM windows.
sumber
maxmem
, karena tampaknyaburnmem
tidak membatasi alamat fisik maksmaxmem
. Vista dan 7 akan setaratruncatememory
. Meskipun ini merupakan solusi yang memungkinkan, apakah ada metode yang lebih tepat untuk kasus di mana memori yang rusak berada di tengah atau awal ruang alamat dan memblokir semuanya setelah itu tidak diinginkan?Lihatlah util ini: https://github.com/prsyahmi/BadMemory
Sangat mudah digunakan dan mendukung pemblokiran rentang alamat. Dan Anda dapat menggunakan alamat lengkap yang diterima dari MemTest86 tanpa menghapus tiga digit terakhir.
sumber
PERINGATAN!!! Windows mungkin gagal untuk boot, siap untuk membangun kembali BCD. Untuk itu gunakan Command Promt di Advanced Startup Options. Saya tidak tahu mengapa itu tidak bisa boot lagi, tampaknya terjadi secara acak atau jika Anda memasukkan terlalu banyak Alamat ke dalam badmemorylist.
Inilah program prompt perintah C ++ yang mendapatkan daftar alamat memori terus-menerus dalam file .txt yang siap untuk
bcdedit /set badmemorylist
ataubcdedit /set {badmemory} badmemorylist
(tidak berfungsi pada Win7 untuk saya)Gunakan
bcdedit /set badmemoryaccess 0
untuk menolak akses.Anda dapat memeriksa dengan EasyBCD di View Settings -> Detail. Setelah restart dengan cek dengan Rammap jika Space Alamat Fisik lenyap.
sumber
Iya nih. Ada parameter boot untuk mengontrol jumlah memori yang dapat digunakan windows. Anda hanya dapat menghapus dari ujung ruang memori. Lihat artikel msdn ini untuk mengontrol parameter boot. Parameter yang menarik adalah
truncatememory
danremovememory
.sumber
Anda dapat mencoba fitur ini di Windows 7, tetapi saya tidak yakin chip mana yang akan berpengaruh, atau jika memotong jumlah yang sama dari masing-masing. Saya harus melihat sekeliling untuk mencari tahu.
sumber