sistemas simulador paginacion operativos memoria gestor gestion ejercicios asignacion algoritmo c linux unit-testing gcc memory-management

paginacion - simulador de memoria ram java



Cómo simular errores de asignación de memoria (10)

La aplicación My C usa 3er bibliotecas, que hacen su propia gestión de memoria. Para ser robusto, mi aplicación tiene un código para lidiar con las fallas de las funciones de la biblioteca debido a la falta de memoria libre.

Me gustaría probar este código, y para esto, necesito simular fallas debido a la falta de memoria.

¿Qué herramienta / s se recomiendan para esto? Mi entorno es Linux / gcc.


(Como complemento de algunas de las respuestas anteriores)

Consulte "Cerca eléctrica" ​​para ver un ejemplo de una biblioteca interceptadora de malloc que puede usar con su ejecutable (usando el truco LD_PRELOAD, por ejemplo).

Una vez que haya interceptado malloc, puede usar lo que quiera para desencadenar fallas. Un error desencadenado aleatoriamente sería una buena prueba de estrés para las diversas partes del sistema. También puede modificar la probabilidad de falla en función de la cantidad de memoria solicitada.

La suya es una idea interesante, por cierto, es claramente algo que me gustaría hacer en algunos de mis códigos ...


Además, debe usar Valgrind para probarlo todo y obtener informes realmente útiles sobre el comportamiento de memoria de su programa


Cree su propia envoltura Malloc que devolverá aleatoriamente null en lugar de un puntero válido. Bueno, o que falla constantemente si quieres una prueba unitaria.



En los sistemas operativos que comprometen en exceso la memoria (por ejemplo, Linux o Windows), simplemente no es posible manejar los errores de falta de memoria. malloc puede devolver un puntero válido y, más adelante, cuando intenta desreferenciarlo, su sistema operativo puede determinar que se ha quedado sin memoria y matar el proceso.

http://www.reddit.com/comments/60vys/how_not_to_write_a_shared_library/ es un buen artículo sobre esto.


Es posible que desee ver algunos de los sitios de computación orientados a la recuperación, como el grupo ROC de Berkeley / Stanford . He oído hablar a algunas de estas personas antes, y usan el código para inyectar errores aleatoriamente en el tiempo de ejecución de C. Hay un enlace a su herramienta FIT en la parte inferior de su página.


Puede escribir su propia biblioteca simulada con la misma interfaz que su biblioteca de terceros en lugar de la misma. También puede usar LD_PRELOAD para anular las funciones seleccionadas de la biblioteca de terceros.


Puedo dar una versión específica de Linux (tal vez POSIX): __malloc_hook, __realloc_hook, __free_hook. Estos están declarados en malloc.h.

EDITAR: Un poco de elaboración: estos son indicadores de función (ver malloc.hy su página de manual para la declaración exacta), pero cuidado: estos no son exactamente estándares, solo extensiones de GNU. Entonces, si la portabilidad es un problema, no use esto.

Una solución un poco menos dependiente de la plataforma podría ser que usted declare una macro malloc. Si estás probando, esto llama un gancho y el malloc real.

memhook.h:

#define malloc(s) (my_malloc(s))

memhook.c:

#include "memhook.h" #undef malloc #include <stdlib.h>

etc.

Puede usar esto para detectar fugas, fallar al azar la asignación, etc.


Quieres el comando ulimit en bash. Tratar

help ulimit en un aviso de bash shell.


Puede usar ulimit para limitar la cantidad de recursos que un usuario puede usar, incluida la memoria. Así que creas un usuario de prueba, limitas el uso de la memoria a algo lo suficiente para iniciar tu programa y lo ves morir :)

Ejemplo:

ulimit -m 64

Establece un límite de memoria de 64 kb.