Question

Je dois construire un simulateur de processeur double cœur en C (il est en fait une simulation de mémoire multi-niveaux, le cache L1 / L2, substitution de bloc, etc.). La chose est, je vais avoir du mal à comprendre un moyen pour synchroniser les noyaux (dont je suis programmation en tant que fils). Toute idée comment je pourrais faire une horloge mondiale? Dois-je changer de fils aux processus de l'enfant? Merci à l'avance

Était-ce utile?

La solution

Tant d'options: puisque vous pouvez les interactions complexes de bout en soutien avec plusieurs threads, vous voudrez peut-être envisager d'utiliser un « horloge virtuelle » avec un passage de messages « bus » . De cette façon, vous aurez plus de temps pour se concentrer sur les fonctionnalités de base au lieu de débogage la logique de synchonisation ...

En utilisant cette technique, vous pouvez construire une machine d'état (voir ) par thread "acteur" (pire cas) et inquiètent moins mutex / conditions. Une fois que vous avez cette base, vous serez en mesure de traiter les cas qui apparaissent à mi-parcours (par exemple «j'ai oublié ce détail ... pas de soucis, il suffit d'ajouter un état ici ... ne pas avoir à re -shuffle mes mutex).

En outre, puisque faire la simulation est tout au sujet de « temps virtuel » (puisque vous ne pouvez pas exécuter en temps réel!), Puis d'avoir une architecture de base basée sur une « horloge virtuelle » abstracts le problème à un niveau approprié.

Autres conseils

Vous pourriez avoir un fil d'horloge plus N fils de processeur. Le fil d'horloge peut faire explicitement appels à chaque thread de processeur pour faire une étape de traitement. Chaque thread processeur reçoit un appel du fil d'horloge à doStep(); il fait un pas, puis renvoie le contrôle au fil d'horloge.

Vous pouvez également randomiser l'ordre dans lequel les fils de processeur sont appelés à faire des mesures afin que vous êtes plus susceptible d'attraper des bugs dans votre code client.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top