Pregunta

Tengo que construir un simulador de procesador de doble núcleo en C (en realidad es una simulación de memoria de niveles múltiples, caché L1 / L2, la sustitución de bloque, etc). La cosa es, estoy teniendo un tiempo difícil averiguar una manera de sincronizar los núcleos (que estoy de programación como hilos). ¿Alguna idea de cómo podría hacer un reloj global? ¿Debo cambiar de hilos a los procesos hijo? Gracias de antemano

¿Fue útil?

Solución

Así que muchas opciones aquí: ya que podría terminar en marcha el apoyo a las interacciones complejas con múltiples hilos, es posible que desee considerar el uso de un "reloj virtual" con un paso de mensajes "bus" . De esta manera, tendrá más tiempo para centrarse en la funcionalidad del núcleo en lugar de depurar la lógica synchonization ...

El uso de esta técnica, se puede construir una máquina de estados (ver aquí ) por hilo "actor" (peor caso) y preocuparse menos por exclusiones mutuas / condiciones. Una vez que tenga esta base, usted será capaz de manejar los casos que se presentan a mitad de camino (por ejemplo, "Me había olvidado de ese detalle ... no se preocupe, sólo tiene que añadir un estado aquí ... no tiene que volver -shuffle mis mutex).

Además, ya que de simulación es una cuestión de "tiempo virtual" (ya que no se puede ejecutar en tiempo real!), Y luego tener una arquitectura de base en base a un "reloj virtual" abstrae el problema a un nivel apropiado.

Otros consejos

Usted podría tener un hilo de reloj más N hilos de procesador. El hilo de reloj puede explícitamente hacer llamadas a cada hilo procesador para hacer 1 etapa de procesamiento. Cada hilo procesador recibe una llamada de la rosca reloj para doStep(); que hace un paso, a continuación, devuelve el control al hilo reloj.

También puede cambiar aleatoriamente el orden en que los hilos de procesador están llamados a hacer los pasos de manera que es más probable para atrapar insectos en su código de cliente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top