Chapitre 7. Processeur

Le processeur est un dispositif capable d'exécuter une séquence d'instructions stockées en mémoire. Ces instructions peuvent nécessiter l'usage de registres (petit morceaux de mémoire interne). Elles peuvent aussi nécessiter la lecture et l'écriture en mémoire.

La périodicité de l'exécution des instruction est controllée par une horloge indiquant au processeur quand il doit effectuer un cycle. Un cycle est une partie d'instruction : décodage de l'instruction, récupération des données depuis la mémoire, écriture en mémoire, etc. Le nombre de cycles pour une instruction dépend de sa complexité.

Le processeur peut aussi réagir à certains signaux externes comme le signal de remise à zéro (reset) et les demandes d'interruption. Ces signaux sont habituellement émis par les périphériques.

Donc, un processeur a trois types d'interaction avec le monde extérieur :

Dans Vinace, les processeur sont représentés par des classes héritant de la classe CProcessor.

Pour créer un nouveau processeur, une classe enfant doit être créée et les méthodes suivantes doivent être implémentées :

Constructeur: le constructeur de CProcessor prend deux paramètre : la mémoire qui doit être liée au processeur et un nombre de signaux. Le constructeur de la classe enfant doit appeler celui de CProcessor avec un nombre donnée de signaux. C'est le nombre de signaux possibles différents. Par exemple, pour un processeur n'ayant que le signal de remise à zéro, ce nombre est 1.

reset(): cette méthode est censée remettre l'état du processeur à zéro. Elle est appelée une fois lorsque le processeur est instancié. C'est à la classe enfant de connecter le signal de remise à zéro à cette méthode.

process_instruction(): cette méthode est censée traiter l'instruction suivante. Elle est appelée par cycle() une fois les cycles de l'instruction précédente terminés. process_instruction() doit augmenter le membre cycles du bon nombre de cycles correspondant à l'instruction.

process_signals(): Cette méthode est censée traiter les signaux. Elle est appelée par cycle(). Elle doit renvoyer faux si un signal a été traité et vrai s'il n'y avait pas de signal à traiter. Dans ce cas, cycle() appelle alors process_instruction.