¿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 incorrecta conocida o un bloque de direcciones?
Para Linux, hay BadRAM . ¿Existe una implementación existente para Windows? ¿Es eso posible con el kernel de Windows (NT 6.1)? Tal vez un controlador de modo kernel?
Respuestas:
Bob, hay tres partes en tu pregunta. Me dirigiré a uno a la vez.
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 encuentra el módulo en sus bancos DIMM, Windows 7 se ejecutará como si no hubiera nada mientras no intente tocar las porciones 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 tiene suerte.
Bloqueo de sectores de mala memoria en Windows
En los sistemas operativos x86 (32 y 64 bits), la memoria es administrada por el núcleo. Como mencionas, BadMem puede bloquear sectores de memoria defectuosos en Linux. Funciona instruyendo al núcleo para que bloquee las direcciones de memoria que especificó. Esto impide que Linux aborde esas direcciones cuando asigna (y desasigna) memoria. Pero para hacer esto, BadMem necesita parchear el núcleo. BadMem no es más que un parche de kernel que configura antes de aplicar.
Ahora, no tienes esa capacidad en Windows. No puedes 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 (lo que es comprensible).
Por esta razón, no puede indicar a Windows de ninguna manera que no use ciertas direcciones de memoria. La única forma sería que Microsoft parchee el kernel específicamente para su caso. Improbable.
La difusión de direcciones de memoria incorrecta
No hay muchas razones por las cuales un módulo de memoria puede 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. Al contrario de los discos duros, no hay partes móviles en los módulos de memoria, como bien saben. Por lo tanto, los sectores defectuosos no tienden a extenderse, como es el caso de 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 de hecho son malas. Por lo tanto, la mala memoria puede dar la impresión de "propagación" 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, solo pueden manejar las 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 erróneas como un módulo defectuoso y, por lo tanto, no es confiable.
Lo que esto significa es que, aunque BadMem es una propuesta atractiva, en realidad no es una solución al problema de la mala memoria. Lo más probable es que no termines con un sistema operativo que intente leer un sector defectuoso y se bloquee con un error de detención. Un módulo defectuoso es un módulo defectuoso es un módulo defectuoso.
fuente
El BCD de Windows (datos de configuración de arranque) 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 no serán utilizadas por el sistema operativo.El
{badmemory}
objeto acepta un elementoBadMemoryList
(tipo BCD0x1700000a
), que es una lista de enteros que se pueden ingresar como hexadecimales, separados por espacios. Supongo que sería posible insertar manualmente direcciones de memoria incorrecta como se encuentran en memtest86 a 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, estas direcciones / PFN pueden no coincidir con las informadas por los diagnósticos de memoria. La edición manual se puede hacer con Visual BCD Editor .En cualquier caso, las tarjetas de memoria defectuosas deben reemplazarse como lo indican las otras respuestas. Esto es simplemente una nota sobre una posible forma de solucionar el problema (¿temporalmente?).
fuente
Windows BCD tiene
{badmemorylist}
y{badmemoryaccess}
objetos. Debe establecer la primera en páginas con mala memoria separadas por espacios (por ejemplobcdedit /set badmemorylist 1499543 1434007
) y la segunda enNo
(bcdedit /set badmemoryaccess No
)Tenga en cuenta que el tamaño de página de memoria en Windows generalmente
4KB
Probado en Windows 7 y funciona bien
Puede probar su configuración con Rammap by Sysinternals
PD: tengo esa información de
"Windows Internals Book" chapter 10
fuente
Tuve problemas 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 los costos de envío y el tiempo, no tiene sentido enviar la garantía.
Logré algunos golpes.
La clave para pasar los parámetros de memoria dañados son:
0x10000000
corresponde a 0x10000 en Windows0x00001000
corresponde a 0x1 en Windowsbcdedit /set {badmemory} badmemorylist 0xB7 0xB8 0xB9 0xBA
a errores en memtest de 0x000B7000 a 0x000BAFFF. Tenga en cuenta que no puede colocar una variedad de recuerdos, sino todas las páginas una por unabcdedit /enum {badmemory}
, muestra la lista de páginas marcadas.bcdedit /set badmemoryaccess no
evitar que se usen las páginas marcadasfuente
/
y el comando para que funcione, por lo que en lugar debcdedit / enum {badmemory}
ser elbcdedit /enum {badmemory}
mismo para los demásHasta donde sé, la única forma de hacerlo es usando el comando BurnMem, que puede limitar artificialmente la cantidad de RAM que utiliza Windows.
fuente
maxmem
, ya que aparentementeburnmem
no limita la dirección física máxima mientras lomaxmem
hace. El Vista y 7 equivalentes seríantruncatememory
. Si bien esta es una posible solución, ¿existe un método más preciso para los casos en que la memoria defectuosa está en el medio o al comienzo del espacio de direcciones y bloquea todo después de que no se desea?Mira esta utilidad: https://github.com/prsyahmi/BadMemory
Es muy fácil de usar y admite el bloqueo de rangos de direcciones. Y puede usar la dirección completa recibida de MemTest86 sin eliminar los últimos tres dígitos.
fuente
¡¡¡PRECAUCIÓN!!! Windows puede fallar al arrancar, esté listo para reconstruir el BCD. Para ese caso, use el símbolo del sistema en Opciones de inicio avanzadas. No sé por qué ya no arranca, parece suceder al azar o si pones demasiadas direcciones en badmemorylist.
Aquí hay un programa de símbolo del sistema de C ++ que obtiene una lista continua de direcciones de memoria en un archivo .txt listo para (
bcdedit /set badmemorylist
obcdedit /set {badmemory} badmemorylist
no funcionó en Win7 para mí)Use
bcdedit /set badmemoryaccess 0
para denegar el acceso.Puede verificar con EasyBCD en Ver configuración -> Detallado. Después de reiniciar, verifique con Rammap si el Espacio de direcciones físicas desapareció.
fuente
Sí. Hay parámetros de arranque para controlar la cantidad de memoria que Windows puede usar. Sin embargo, solo puede eliminar del final del espacio de memoria. Consulte este artículo de msdn para controlar los parámetros de arranque. Los parámetros de interés son
truncatememory
yremovememory
.fuente
Puede probar esta función en Windows 7, pero no estoy seguro de qué chip afectará, o si elimina la misma cantidad de cada uno. Tendré que mirar alrededor para descubrirlo.
fuente