
¿Es posible ejecutar Windows (7, x64) con un módulo RAM defectuoso? Más precisamente, ¿hay alguna forma de decirle a Windows que no asigne una dirección o un bloque de direcciones incorrectos conocidos?
Para Linux, hayMala RAM. ¿Existe una implementación para Windows? ¿Es eso posible incluso con el kernel de Windows (NT 6.1)? ¿Quizás un controlador en modo kernel?
Respuesta1
Bob, tu pregunta tiene tres partes. Me ocuparé de uno en uno.
Ejecutar Windows con mala memoria
De hecho, es posible ejecutar Windows 7 con un módulo defectuoso. Dependiendo de la ubicación de los sectores defectuosos y de dónde se ubica el módulo en sus bancos DIMM, Windows 7 se ejecutará como si nada, siempre y cuando no intente tocar las partes defectuosas de la memoria. Por lo tanto, lo ideal sería mover el módulo defectuoso lo más lejos posible del banco 0. Naturalmente, si este es su único módulo, no tendrá suerte.
Bloquear sectores de memoria defectuosos en Windows
En los sistemas operativos x86 (32 y 64 bits), la memoria la gestiona el kernel. Como mencionas, BadMem es capaz de bloquear sectores de memoria defectuosos en Linux. Funciona indicando al kernel que bloquee las direcciones de memoria que usted especificó. Esto efectivamente impide que Linux aborde esas direcciones al asignar (y desasignar) memoria. Pero para poder hacer esto, BadMem necesita parchear el kernel. BadMem no es más que un parche del kernel que configuras antes de aplicarlo.
Ahora bien, no tienes esa capacidad en Windows. No se puede parchear el kernel. Desarrollar un controlador en modo kernel tampoco le servirá de nada, ya que el kernel de Windows nunca permitirá que su controlador tenga prioridad sobre su arquitectura de administración de memoria (es comprensible).
Por este motivo, no puede indicar a Windows de ninguna manera que no utilice determinadas direcciones de memoria. La única forma sería que Microsoft parcheara el kernel específicamente para su caso. Improbable.
La difusión de direcciones de mala memoria
No hay muchas razones por las que un módulo de memoria pueda contener direcciones incorrectas. En última instancia, todo se reduce a un error en la línea de producción, suponiendo que no sufrió daños antes de ingresar a su computadora. A diferencia de los discos duros, en los módulos de memoria no hay partes móviles, como bien sabes. Por lo tanto, los sectores defectuosos no tienden a propagarse como ocurre con los sectores del disco duro.
Sin embargo, el software de prueba de memoria no es infalible. Es posible (y común) que pase ciertas direcciones que en realidad son malas. Por lo tanto, la mala memoria puede dar la impresión de "propagarse" a medida que más y más direcciones se revelan como malas. Por esta razón herramientas como BadMem revelan su debilidad, porque naturalmente sólo pueden manejar aquellas direcciones que usted les indique.
Es poco probable que alguien pueda realizar una prueba exhaustiva de un módulo de memoria e identificar todas las direcciones de memoria defectuosas, luego bloquearlas y terminar con un módulo de memoria "bueno". Lo más fácil es considerar un módulo con direcciones incorrectas como un módulo defectuoso y, en consecuencia, no se puede confiar en él.
Lo que esto significa es que, por mucho que BadMem sea una propuesta atractiva, en realidad no es una solución al problema de la mala memoria. Lo más probable es que termines con un sistema operativo que intenta leer un sector defectuoso y falla con un error de detención. Un módulo defectuoso es un módulo defectuoso.
Respuesta2
El BCD (datos de configuración de arranque) de Windows en realidad tiene un {badmemory}
objeto.Parece que las direcciones de memoria que la memoria ECC "predice que fallarán" se enumerarán aquí y el sistema operativo no las utilizará.
El {badmemory}
objeto acepta un elemento BadMemoryList
(tipo BCD 0x1700000a
), que es una lista de números enteros que se pueden ingresar como hexadecimal, separados por espacios. Supongo que sería posible insertar manualmente direcciones de memoria incorrectas encontradas por memtest86 en este elemento, pero no lo he probado.Aparentemente, acepta 'números de marco de página, que es la dirección real dividida por 4096.Desafortunadamente, es posible que estas direcciones/PFN no coincidan con los reportados por los diagnósticos de memoria. La edición manual se puede realizar conEditor visual BCD.
En cualquier caso, las tarjetas de memoria defectuosas deben reemplazarse como se indica en las otras respuestas. Esto es simplemente una nota sobre una posible forma de solucionar el problema (¿temporalmente?).
memtest86 Pro (no gratuito)puede producir los comandos de lista negra correctos para usteden su informe. Otras respuestas describen el proceso para hacerlo manualmente.
Respuesta3
Tuve problemas con la RAM en una tableta con SoC. La memoria está soldada o integrada en el SoC y no se puede reemplazar.
Estoy en Argentina y el vendedor está en China, y por los costos y tiempo de envío, no tiene sentido enviar en garantía.
Logré algunos golpes.
La clave para pasar los parámetros de la memoria dañada es:
- Las direcciones en memtest86 coinciden con las direcciones utilizadas en Windows.
- debe marcar páginas completas de 4KBytes.
- en memtest
0x10000000
corresponde a 0x10000 en Windows - en memtest
0x00001000
corresponde a 0x1 en Windows - significa: El número de página en Windows elimina los últimos 3 números hexadecimales de memtest.
- significa que: windows elimina ceros a la izquierda.
- considere 5 y 6, para evitar errores en los números de página.
- la declaración correcta es:
bcdedit /set {badmemory} badmemorylist 0xB7 0xB8 0xB9 0xBA
a errores en memtest de 0x000B7000 a 0x000BAFFF. Ten en cuenta que no puedes poner un rango de recuerdos, sino todas las páginas una por una. - No se pueden agregar páginas, todas las páginas deben marcarse en el mismo comando. Si es una página nueva, agrega sobrescribe la anterior. Logré agregar 4096 páginas en un solo comando. No lo he probado más.
bcdedit /enum {badmemory}
, muestra la lista de páginas marcadas.bcdedit /set badmemoryaccess no
evitar que se utilicen las páginas marcadas- es necesario reiniciar después de marcar las páginas y eliminar el acceso.
Respuesta4
Mira esta utilidad:https://github.com/prsyahmi/BadMemory
Es muy fácil de usar y admite el bloqueo de rangos de direcciones. Y puede utilizar la dirección completa recibida de MemTest86 sin eliminar los últimos tres dígitos.