Système et procédé pour commander l'exécution d'instructions par un processeur La présente invention concerne des processeurs et, plus particulièrement, un système et procédé pour commander l'exécution d'instructions par un processeur. Des processeurs (par exemple : des unités centrales (CPU), des microprocesseurs, etc.) sont utilisés pour exécuter des instructions dans une variété d'applications différentes. Par exemple : des processeurs peuvent être utilisés pour exécuter des instructions dans des applications critiques du point de vue de la sécurité et/ou d'une mission qui ont des exigences d'intégrité, de disponibilité et d'assurance élevées. De telles applications peuvent inclure l'aéronautique, les missiles, l'aérospatiale, l'utilisation militaire, les centrales nucléaires, et autres. Dans de telles applications, deux ou plusieurs processeurs peuvent être configurés pour exécuter un nombre spécifique d'instructions dans une quantité de temps spécifique. Par exemple : deux ou plusieurs processeurs peuvent être configurés pour fonctionner d'une manière synchrone de telle manière que deux ou plusieurs processeurs commencent et/ou terminent leurs opérations sensiblement en même temps. Malheureusement, si les deux ou plusieurs processeurs ne commencent et/ou terminent pas les opérations sensiblement en même temps, les résultats des deux ou plusieurs processeurs peuvent être non fiables et/ou inutilisables. Selon un mode de mise en oeuvre de l'invention, un procédé pour commander un nombre total d'instructions exécutées par un processeur inclut d'ordonner au processeur d'exécuter itérativement des instructions via de multiples itérations jusqu'à ce qu'une période de temps prédéterminée se soit écoulée. Un nombre d'instructions exécutées dans chaque itération des itérations est inférieur à un nombre d'instructions exécutées dans une itération antérieure des itérations. Le procédé inclut aussi de déterminer le nombre total d'instructions exécutées pendant la période de temps prédéterminée.
Selon un autre mode de mise en oeuvre de l'invention, un procédé pour commander une période de temps pendant laquelle des instructions sont exécutées par un processeur inclut d'ordonner au processeur d'exécuter un premier nombre d'instructions via de multiples itérations jusqu'à ce que le premier nombre d'instructions aient été exécutées. Une période de temps de chaque itération des itérations est inférieure à une période de temps d'une itération antérieure des itérations. Le procédé inclut aussi d'ordonner au processeur de fournir un total nombre total d'instructions exécutées par le processeur. Le procédé inclut de déterminer une période de temps totale pendant laquelle le premier nombre d'instructions ont été exécutées. Selon un mode de réalisation de l'invention, un système pour commander un nombre total d'instructions exécutées par un processeur inclut un processeur. Le processeur est configuré pour recevoir des instructions et exécuter de manière itérative une série d'instructions via de multiples itérations jusqu'à ce qu'une période de temps prédéterminée se soit écoulée. Un nombre d'instructions exécutées dans chaque itération des itérations est inférieur à un nombre d'instructions exécutées dans une itération antérieure des itérations. Le processeur est aussi configuré pour déterminer le nombre total d'instructions exécutées pendant la période de temps prédéterminée et pour recevoir des instructions pour exécuter un nombre calculé d'instructions après que la période de temps prédéterminée s'est écoulée si le nombre total d'instructions est inférieur à un nombre total souhaité d'instructions. L'invention sera mieux comprise à l'étude détaillée de quelques modes de réalisation. La figure 1 est un diagramme schématique d'un mode de réalisation d'un système à haute intégrité qui peut employer au moins deux processeurs synchronisés ; La figure 2 est un diagramme schématique d'un autre mode de réalisation d'un système à haute intégrité qui peut employer au moins deux processeurs synchronisés ; La figure 3 est un diagramme schématique d'un mode de réalisation d'un système à haute intégrité comportant un processeur multicoeur avec un hyperviseur pour commander le fonctionnement de multiples processeurs ; La figure 4 est un diagramme du processeur multicoeur de la figure 3 ; La figure 5 est un diagramme de temps d'un mode de mise en oeuvre d'un procédé pour commander ses instructions exécutées par un processeur ; La figure 6 est un diagramme de temps d'un mode de mise en oeuvre d'un procédé pour synchroniser de multiples processeurs ; et La figure 7 est un organigramme d'un mode de mise en oeuvre d'un procédé pour commander des instructions exécutées par un processeur; La figure 1 est un diagramme schématique d'un mode de réalisation d'un système à haute intégrité 10 qui peut employer deux ou plus de deux processeurs synchronisés. Le système à haute intégrité 10 peut être un système à haute intégrité (par exemple : ayant une haute probabilité d'atteindre une réponse correcte), à haute disponibilité (par exemple : un système en fonctionnement pouvant délivrer une réponse), et/ou à haute assurance (par exemple : assurant que le système utilise le bon logiciel). Par exemple : le système à haute intégrité 10 peut être conçu avec un taux de défaillance aléatoire (FIT) de moins d'approximativement 10-9 par heure (par exemple : par heure de vol). Certains modes de réalisation peuvent inclure trois ou plus de trois processeurs synchronisés pour fournir un système à haute intégrité et à haute disponibilité. Par conséquent, le système à haute intégrité 10 peut être conçu pour être utilisé dans une application aéronautique critique du point de vue de la sécurité en temps réel (par exemple : un aéronef). Le système à haute intégrité 10 inclut une mémoire 12 pour supporter une application 14. En outre, l'application 14 est configurée pour fournir des instructions exécutables à un ou plusieurs processeurs 16, 18, et 20. L'application 14 pour chacun des processeurs 16, 18 et 20 est la même application fonctionnelle et fournit les instructions exécutables aux un ou plusieurs processeurs 16, 18 et 20. Par conséquent, le système à haute intégrité 10 est conçu de telle manière que la plate-forme (par exemple : les processeurs 16, 18 et 20) fournit l'intégrité et la disponibilité. Dans une telle configuration, la plate- forme peut inclure un design complexe, alors que l'application 14 inclut un design simplifié. Dans certains modes de réalisation, l'application 14 peut être conçue pour fournir l'intégrité. Dans une telle configuration, la plate-forme peut inclure un design simple, alors que l'application 14 inclut un design complexe pour fournir la logique pour la haute intégrité, la haute disponibilité et la haute assurance. Comme illustré dans le présent mode de réalisation, les processeurs 16, 18, et 20 fournissent des résultats à un bus de système 22. Par exemple : des résultats venant des instructions exécutées peuvent être fournis depuis les processeurs 16, 18, et 20 au bus de système 22. Bien que seulement trois processeurs 16, 18 et 20 soient illustrés, le système à haute intégrité 10 peut inclure plus ou moins de processeurs. Par exemple : dans certains modes de réalisation, cinq ou six processeurs peuvent être utilisés dans un design ayant un FIT inférieur à approximativement 10-11 par heure, chaque processeur ayant un FIT d'approximativement 10-3. De nombreuses suppositions et variables sont utilisées pour calculer le FIT. Comme autre exemple, six, sept, ou huit processeurs peuvent être utilisés dans un design ayant un FIT inférieur à approximativement 10-15 par heure. Les processeurs 16, 18, et 20 peuvent chacun recevoir la même entrée et peuvent être conçus pour fournir la même sortie. Par conséquent, la sortie des processeurs 16, 18, et 20 peut être synchronisée en temps réel pour vérifier que la sortie des processeurs 16, 18, et 20 est la même. Avec des processeurs synchronisés 16, 18, et 20, le système à haute intégrité 10 peut produire des résultats fiables. Les résultats fiables produits par les processeurs synchronisés 16, 18, et 20 peuvent répondre aux exigences de haute intégrité, disponibilité et assurance. En tant que tel, le système à haute intégrité 10 peut être utilisé pour des applications critiques de sécurité et/ou de mission. Par conséquent, le système à haute intégrité 10 peut fonctionner d'une manière efficace et rentable sans utiliser un matériel spécialisé. La figure 2 est un diagramme schématique d'un mode de réalisation d'un système à haute intégrité 26 qui peut employer deux ou plus de deux processeurs synchronisés. Le système à haute intégrité 26 inclut des premières machines à états répliquées 28 et des secondes machines à états répliquées 30. Les premières machines à états répliquées 28 ont une entrée 32 (par exemple : des données d'entrée) qui est identiquement fournie à chaque processeur 34, 36, et 38. Après l'exécution des instructions, les processeurs 34, 36, et 38 fournissent une sortie synchronisée. Ensuite, les premières machines à états répliquées 28 réalisent un consensus distribué 40 (par exemple : un algorithme) qui donne une seule sortie des premières machines à états répliquées 28. En outre, les secondes machines à états répliquées 30 ont une entrée 42 (par exemple : des données d'entrée) qui est fournie identiquement à chaque processeur 44, 46, et 48. Dans certains modes de réalisation, les entrées 32 et 42 sont les mêmes. Après l'exécution des instructions, les processeurs 44, 46, et 48 fournissent chacun une sortie synchronisée. Ensuite, les secondes machines à états répliquées 30 réalisent un consensus distribué 50 (par exemple : un algorithme) qui donne une seule sortie des secondes machines à états répliquées 30. La sortie des premières et secondes machines à états répliquées 28 et 30 fournit une redondance qui facilite l'utilisation soit du consensus distribué 40 soit du consensus distribué 50. Par exemple : si le consensus distribué 40 de la première machine à états répliquée 28 détermine une réponse, alors cette réponse est utilisée. Néanmoins, si le consensus distribué 40 de la première machine à états répliquée 28 ne détermine pas une réponse, une réponse venant du consensus distribué 50 de la seconde machine à états répliquée 30 est utilisée. Ainsi, la redondance des première et seconde machines à états répliquées 28 et 30 facilite une disponibilité améliorée. En utilisant le présent mode de réalisation, un FIT d'approximativement 10-15 par heure peut être obtenu. Le système à haute intégrité 26 peut utiliser tout algorithme convenable pour un consensus distribué. Par exemple : le système à haute intégrité 26 peut utiliser basic paxos, multi-paxos, cheap paxos, fast paxos, generalized paxos, byzantine multi-paxos, fast byzantine multi-paxos, storage-less paxos, coping paxos, one-correct paxos, fast paxos B, information theoretic byzantine paxos, Chandra-Toueg (CT), Mostefaoui-Raynal (MR), query update (Q/U), hybrid-quorum (HQ), zyzzyva, aardvark, upright, Brooks-Iyengar, practical byzantine fault tolerance (PBFT), et/ou aliph, entre autres. Comme décrit ci-dessus, les processeurs 34, 36, et 38 peuvent chacun fournir une sortie synchronisée. En outre, les processeurs 44, 46, et 48 peuvent chacun fournir une sortie synchronisée. Les processeurs peuvent être synchronisés de toute manière convenable qui fournit une synchronisation en temps réel. Par conséquent, les consensus distribués 40 et 50 du système à haute intégrité 26 peuvent fournir des résultats fiables et/ou utilisables. La figure 3 est un diagramme schématique d'un mode de réalisation d'un système à haute intégrité 60 comportant un premier processeur multicoeur 62 avec un hyperviseur pour commander le fonctionnement des multiples processeurs. Le système à haute intégrité 60 inclut le premier processeur multicoeur 62, un second processeur multicoeur 64, et un troisième processeur multicoeur 66. Bien que des processeurs multicoeurs soient décrits ici, le système à haute intégrité 60 peut inclure des processeurs avec tout nombre convenable de coeurs (par exemple : 1, 2, 4, 8, 16, etc.). En outre, chacun des processeurs multicoeurs 62, 64, et 66 inclut des processeurs d'application 68, 70, et 72 pour exécuter des instructions, et un processeur E/S 74 configuré pour commander l'exécution d'instructions des processeurs d'application 68, 70, et 72, et pour exécuter un algorithme de consensus distribué. Les processeurs multicoeurs 62, 64, et 66 communiquent ensemble et avec des dispositifs extérieurs en utilisant des bus de système 76 et 78. Bien que deux bus de système 76 et 78 soient illustrés, le système à haute intégrité 60 peut inclure tout nombre convenable de bus (par exemple : 1, 2, 4, etc.). Comme illustré, les processeurs d'application 68 de chacun des processeurs multicoeurs 62, 64, et 66 peuvent former une machine à états répliquée 80. En outre, les processeurs d'application 70 de chacun des processeurs multicoeurs 62, 64, et 66 peuvent former une machine à états répliquée 82. De plus, les processeurs d'application 72 de chacun des processeurs multicoeurs 62, 64, et 66 peuvent former une machine à états répliquée 84. Dans certains modes de réalisation, le nombre de coeurs de processeur alloués des processeurs multicoeurs 62, 64, et 66 peut varier, de telle manière que moins que le nombre total de coeurs de processeur peuvent être alloués, un nombre différent de coeurs de processeur peuvent être alloués de chacun des processeurs multicoeurs 62, 64, et 66, et autres.Dans certains modes de réalisation, une application à haute intégrité peut utiliser la vérification d'intégrité, mais pas une haute disponibilité et peut allouer seulement deux coeurs de processeur à l'application à haute intégrité. Dans d'autres modes de réalisation, l'application à haute intégrité peut atteindre une haute disponibilité en allouant plus que trois coeurs de processeur de chaque processeur multicoeur 62, 64, et 66 à l'application à haute intégrité. La figure 4 illustre en outre un diagramme du processeur multicoeur 62. Le second processeur multicoeur 64 et le troisième processeur multicoeur 66 peuvent inclure le même que le premier processeur multicoeur 62. Comme illustré, le premier processeur multicoeur 62 inclut un hyperviseur 86 (par exemple : un gestionnaire de machine virtuelle (GMV)). Dans le présent mode de réalisation, le hyperviseur 86 est un hyperviseur de type un, néanmoins, dans un autre mode de réalisation, tout hyperviseur convenable (par exemple : de type deux) peut être utilisé. L'hyperviseur de type un peut être un hyperviseur qui fonctionne directement sur un matériel hôte pour commander le matériel et gérer les systèmes d'exploitation invités (par exemple :VMware vSphere, Oracle VM Server for SPARC, the Citrix XenServer, KVM, Microsoft Hyper-V hypervisor, and autres). En outre, un hyperviseur de type deux peut être un hyperviseur qui fonctionne dans un système d'exploitation conventionnel (par exemple : BHyVe, VMware Workstation, VirtualBox). Pour des systèmes en temps réel intégrés, la technologie de l'hyperviseur peut être basée sur un noyau de séparation utilisé dans un RTOS MILS ou un ARINC-653 RTOS (par exemple : Green Hills INTEGRITY and INTEGRITY-178, Wind River VxWorks MILS and 653, LynuxWorks LynxSecure and LynxOS-178, etc.). Le premier processeur multicoeur 62 inclut aussi des ressources intégrées 88 qui peuvent être fournies aux processeurs 68, 70, 72, et 74. Par exemple : les ressources intégrées 88 peuvent inclure des ressources de réseau, des ressources de partitionnement, des ressources de sécurité, et autres. Le processeur d'application 68 (Partition MV 1), le processeur d'application 70 (Partition MV 2), et le processeur d'application 72 (Partition MV 3) peuvent chacun être configurés d'une manière similaire. Par conséquent, les processeurs d'application 68, 70, et 72 fonctionnent chacun en utilisant un système d'exploitation invité (OS invité) 90 (par exemple : Linux, Windows, un RTOS incorporé, etc. qui interagit avec l'hyperviseur 86 pour accéder au matériel du premier processeur multicoeur 62. Dans certains modes de réalisation, les processeurs d'application 68, 70, et 72 peuvent chacun fonctionner en utilisant un environnement "métal nu" (par exemple : Ada run time) au lieu de l'OS invité 90. De plus, une ou plusieurs applications 92 et 94 peuvent être exécutée par l'OS invité pour exécuter des instructions fournies à l'OS invité 90. Les processeurs d'application 68, 70, et 72 peuvent inclure des "clients", comme un client de disque virtuel 96 et un client de carte d'interface de réseau virtuelle (CIR) 98 qui sont configurés pour accéder à des "serveurs" correspondants (par exemple : des pilotes). En outre, les processeurs d'application 68, 70, et 72 incluent chacun une structure de coeur (100) (par exemple : un compteur d'instructions retirées (RIC) et une horloge) qui sont des fonctions réelles mises en oeuvre dans les processeurs 68, 70, et 72. De plus, les processeurs d'application 68, 70, et 72 peuvent aussi inclure un client d'horloge virtuelle 102 qui est utilisé pour accéder à un serveur d'horloge virtuelle.
Comme illustré, le processeur E/S 74 inclut aussi l'OS invité 90, le disque virtuel 96 et la CIR virtuelle 98. En outre, le processeur E/S 74 est configuré pour exécuter un algorithme de consensus distribué 104. Le processeur E/S 74 inclut aussi un pilote de disque 110 qui agit comme un serveur pour fournir un accès à des ressources de disque (par exemple : via des clients de disque virtuel 96), et un pilote de carte d'interface de réseau (CIR) 112 qui agit comme un serveur pour fournir un accès au réseau (par exemple : via des clients CIR 98). Le processeur E/S 74 est configuré pour réaliser une logique de consensus distribué entre les autres processeurs 68, 70, et 72. En outre, le processeur E/S 74 inclut une structure de coeur 114 (par exemple : un compteur d'instructions retirées (RIC), une horloge, une CIR, et un disque). En outre, le processeur 74 inclut un serveur d'horloge virtuelle 116 pour fournir une horloge virtuelle à des clients d'horloge virtuelle 102 pour faciliter la synchronisation entre les processeurs 68, 70, et 72 (par exemple : des lignes de traitement). Par conséquent, le processeur E/S 74 est configuré pour faire l'interface entre les processeurs d'application 68, 70, et 72 et d'autre matériel permettant ainsi aux processeurs d'application 68, 70, et 72 de recevoir et d'exécuter des instructions. En outre, comme illustré, chacun des processeurs 68, 70, 72, et 74 inclut une OS invité 90 de telle manière que les processeurs peuvent réaliser des opérations indépendamment. Les processeurs d'application 68, 70, et 72 peuvent être configurés pour fonctionner comme machines à états répliquées sans variables cachées (par exemple : des informations ajoutées aux données traitées). Par exemple, les processeurs d'application 68, 70, et 72 peuvent être configurés pour fonctionner de telle manière que de l'information peut être reçue (par exemple :des données d'entrée), des instructions peuvent être exécutées, et un résultat sorti de la même manière (par exemple : les résultats sont les mêmes) pour tous les processeurs d'application 68, 70, et 72. Par conséquent, avec la même entrée fournie aux processeurs d'application 68, 70, et 72, la même sortie peut être obtenue. En outre, les sorties peuvent être synchronisées de telle manière que les processeurs d'application 68, 70, et 72 commencent et/ou terminent le traitement à des intervalles de temps synchronisés, donnant des résultats identiques (par exemple : cohérents) sans différences observables. La figure 5 est un diagramme de temps 120 d'un mode de mise en oeuvre d'un procédé pour commander des instructions exécutées par un processeur. Comme illustré, les instructions sont exécutées le long d'une ligne de temps 122. Un premier signal de synchronisation 124 (par exemple, un signal d'horloge) est illustré du côté gauche de la ligne de temps 122. En outre, un second signal de synchronisation de temps 126 est illustré vers une partie centrale de la ligne de temps 122. Une durée 128 est le temps entre le premier signal de synchronisation de temps 124 et le second signal de synchronisation de temps 126. La durée 128 peut être toute durée convenable. Par exemple : dans certains modes de réalisation la durée 128 peut être approximativement de 250 las ± 10 las. De plus, un troisième signal de synchronisation de temps 130 est illustré du côté droit de la ligne de temps 122. Une durée 132 est la différence en temps entre le second signal de synchronisation de temps 126 et le troisième signal de synchronisation de temps 130, et est généralement la même que la durée 128. Le même motif illustré dans le diagramme de temps 120 peut être répété pendant le fonctionnement d'un processeur. Par conséquent, la durée entre deux signaux de synchronisation quelconques peut être tout temps convenable fonction du processeur, de l'application, de l'horloge, du temps, et autres (par exemple : approximativement 250 las +/- 10 las). Dans certains modes de réalisation et de mise en oeuvre, il peut être souhaitable de maximaliser un nombre d'instructions exécutées par un processeur entre des signaux de synchronisation de temps sans exécuter des instructions quand les signaux de synchronisation de temps ont lieu. Par conséquent, il peut être souhaitable de stopper l'exécution des instructions dans une fenêtre de temps 134 avant le second signal de synchronisation de temps 126. De plus, une durée 136 (par exemple : une période de temps prédéterminée) illustre un temps total entre le premier signal de synchronisation de temps 124 et un temps de début de la fenêtre de temps 134. La durée 136 est inférieure à la durée 128. Dans certain modes de réalisation, la durée 136 peut être approximativement de 230 ùs, et la durée de la fenêtre de temps 134 peut être approximativement de 20 ùs.
Dans certains modes de réalisation, un nombre total d'instructions exécutées par un processeur peut être commandé. Dans un exemple, le nombre d'instructions exécutées par le processeur peut suivre une progression géométrique où le nombre d'instructions exécutées dans chaque itération est environ la moitié du nombre d'instructions exécutées dans l'itération précédente. Par exemple : un nombre total estimé d'instructions que le processeur exécute pendant la durée 136 peut être calculé (par exemple : en fonction au moins en partie de la durée 136). Pendant une première itération du procédé pour commander les instructions exécutées par le processeur (par exemple : le processeur 68, 70, 72), approximativement la moitié du nombre total estimé d'instructions peuvent être exécutées. Par exemple : entre le premier signal de synchronisation 124 et un temps 138, approximativement la moitié du nombre total estimé d'instructions peuvent être exécutées. Ensuite, le processeur (par exemple : le processeur 68, 70, 72) peut se voir demander (par exemple : par le processeur 74) d'exécuter itérativement un certain nombre d'instructions pendant une itération courante qui est inférieur à un nombre précédent d'instructions exécutées dans une itération antérieure jusqu'à ce que la durée 136 se soit écoulée. Par exemple, entre le temps 138 et un temps 140, le processeur peut se voir demander d'exécuter approximativement la moitié des instructions exécutées entre le premier signal de synchronisation de temps 124 et le temps 138. En outre, entre le temps 140 et un temps 142, le processeur peut se voir demander d'exécuter approximativement la moitié des instructions exécutées entre le temps 138 et le temps 140. Comme illustré, le temps 142 n'est pas dans la fenêtre de temps 134. Par conséquent, entre le temps 142 et un temps 144, le processeur peut se voir demander d'exécuter approximativement la moitié des instructions exécutées entre le temps 140 et le temps 142. Le temps 144 est dans la fenêtre de temps 134, ainsi, la durée 136 s'est écoulée. Le processeur peut envoyer une indication (par exemple : une empreinte, un message à d'autres processeurs, une détermination d'instructions supplémentaires à exécuter, la génération d'une interruption de compte de temps, etc.) après la fin de chaque itération. Le nombre total d'instructions exécutées pendant la durée 136 peut être déterminé de toute manière convenable. Par exemple, le nombre total d'instructions exécutées pendant la durée 136 peut être déterminé en sommant (par exemple : en additionnant) le nombre d'instructions exécutées entre le premier signal de synchronisation 124 et le temps 144. Comme autre exemple, le nombre total d'instructions exécutées pendant la durée 136 peut être déterminé en accédant à (par exemple : en lisant) un compte d'un compteur d'instructions retirées (RIC).
Dans certain modes de réalisation et de mise en oeuvre, le nombre total d'instructions exécutées pendant la durée 136 peut être inférieur à celui souhaité. Par conséquent, le processeur peut se voir demander d'exécuter un nombre calculé d'instructions après que la durée 136 s'est écoulée. En contraste, si le nombre total d'instructions exécutées pendant la durée 136 est supérieur ou égal à un nombre total souhaité d'instructions, le processeur peut retarder le traitement pendant une période de temps après la durée 136. De même, pendant la durée 132 après le second signal de synchronisation de temps 126, une fenêtre de temps 146 peut être disposée avant le troisième signal de synchronisation de temps 130. Il peut être souhaitable de stopper l'exécution d'instructions dans la fenêtre de temps 146 pour commander le nombre d'instructions exécutées avant le signal de synchronisation de temps 130. De plus, une durée 148 (par exemple : une période de temps prédéterminée) illustre un temps total entre le second signal de synchronisation de temps 126 et un temps de début de la fenêtre de temps 146. La durée 148 est inférieure à la durée 132. De même, le nombre total d'instructions exécutées par un processeur peut encore être commandé. Par exemple, un nombre total estimé d'instructions que les processeurs doit exécuter pendant la durée 148 peut être calculé (par exemple : en se basant au moins en partie sur la durée 148). Pendant une première itération du procédé pour commander des instructions exécutées par le processeur après le second signal de synchronisation de temps 126, approximativement la moitié du nombre total estimé d'instructions peuvent être exécutées. Par exemple, entre le second signal de synchronisation 126 et un temps 150, approximativement la moitié du nombre total estimé d'instructions peuvent être exécutées. Le processeur peut se voir demander d'exécuter itérativement un certain nombre d'instructions pendant une itération courante qui est inférieur à un nombre précédent d'instructions exécutées dans une itération antérieure jusqu'à ce que la durée 148 se soit écoulée. Par exemple : entre le temps 150 et un temps 152, le processeur peut se voir demander d'exécuter approximativement la moitié des instructions exécutées entre le second signal de synchronisation de temps 126 et le temps 150. En outre, entre le temps 152 et un temps 154, le processeur peut se voir demander d'exécuter approximativement la moitié des instructions exécutées entre le temps 150 et le temps 152. Comme illustré, le temps 154 n'est pas dans la fenêtre de temps 146. Par conséquent, entre le temps 154 et un temps 156, le processeur peut se voir demander d'exécuter approximativement la moitié des instructions exécutées entre le temps 152 et le temps 154. Le temps 156 est dans la fenêtre de temps 146, ainsi, la durée 148 s'est écoulée. Le processeur peut envoyer une indication et réaliser une logique supplémentaire pour synchroniser des comptes d'instructions retirées (RIC) entre des processeurs répliqués après la fin de chaque itération. De même, le nombre total d'instructions exécutées pendant la durée 148 peut être déterminé de toute manière convenable. Par exemple, le nombre total d'instructions exécutées pendant la durée 148 peut être déterminé en sommant le nombre d'instructions exécutées entre le second signal de synchronisation de temps 126 et le temps 156. Comme autre exemple, le nombre total d'instructions exécutées pendant la durée 148 peut être déterminé en accédant à un compte depuis un RIC. Dans certain modes de réalisation et de mise en oeuvre, le nombre total d'instructions exécutées pendant la durée 148 peut être inférieur à celui souhaité. Par conséquent, le processeur peut se voir demander d'exécuter un nombre calculé d'instructions après que la durée 148 s'est écoulée. Par exemple, le processeur peut se voir demander d'exécuter le nombre calculé d'instructions entre le temps 156 et un temps 158. En contraste, si le nombre total d'instructions exécutées pendant la durée 148 est supérieur ou égal à un nombre total souhaité d'instructions, le processeur peut retarder le traitement pendant une période de temps après la durée 148. Le diagramme de temps 120 peut aussi être utilisé pour illustrer un autre mode de réalisation. Par exemple, le nombre d'instructions exécutées par le processeur peut être calculé en fonction de la durée de temps restante. Par exemple, un nombre total estimé d'instructions que le processeur exécute pendant la durée 136 peut être calculé en fonction de la durée 136. Pendant une première itération du procédé pour commander des instructions exécutées par le processeur (par exemple : le processeur 68, 70, 72), dont la moitié du nombre total estimé d'instructions peuvent être exécutées. Par exemple, au premier signal de synchronisation 124, la moitié du nombre total estimé d'instructions peuvent être exécutées. Ensuite, le processeur (par exemple : le processeur 68, 70, 72) peut se voir demander (par exemple : par le processeur 74) d'exécuter un nombre estimé d'instructions en fonction de la moitié du temps restant de la durée 136. En outre, au temps 140, le processeur peut se voir demander d'exécuter un nombre estimé d'instructions en fonction de la moitié du temps restant de la durée 136. Comme illustré, le temps 142 n'est pas dans la fenêtre de temps 134. Par conséquent, au temps 142, le processeur peut se voir demander d'exécuter un nombre estimé d'instructions en fonction de la moitié du temps restant de la durée 136. Le temps 144 est dans la fenêtre de temps 134, ainsi, la durée 136 s'est écoulée. Le processeur peut se synchroniser avec d'autres processeurs après qu'il est entré dans la fenêtre de temps 134. Pour se synchroniser avec d'autres processeurs, une empreinte du processeur peut être comparée à une empreinte d'un autre processeur. Une période de temps totale pendant laquelle le nombre d'instructions ont été exécutées peut être déterminée comme décrit auparavant. Dans certain modes de réalisation, le processeur peut se voir demander d'exécuter un second nombre d'instructions après que la durée 136 s'est écoulée si la période de temps totale est inférieure à une période de temps prédéterminée. En outre, Dans certains modes de réalisation, le processeur peut se voir demander de retarder le traitement après la durée 136. En utilisant les procédés décrits ci-dessus, un processeur peut être commandé pour exécuter un certain nombre d'instructions dans une certaine période de temps. Par conséquent, le nombre d'instructions exécutées dans une période de temps peut être optimisé (par exemple : maximalisé). En outre, de multiples processeurs peuvent être commandés ensemble pour synchroniser les processeurs. La figure 6 est un diagramme de temps 180 d'un mode de mise en oeuvre d'un procédé pour synchroniser de multiples processeurs. Par conséquent, le fonctionnement d'un premier processeur est illustré le long d'une ligne de temps 182, le fonctionnement d'un second processeur est illustré le long d'une ligne de temps 184, et le fonctionnement d'un troisième processeur est illustré le long d'une ligne de temps 186. En outre, un premier signal de synchronisation de temps 188 (par exemple : un signal d'horloge) est illustré du côté gauche des lignes de temps 182, 184, et 186. De plus, un second signal de synchronisation de temps 190 est illustré du côté droit des lignes de temps 182, 184, et 186. De plus, vers le côté droit des lignes de temps 182, 184, et 186 se trouve un segment de temps 192 où la synchronisation des premier, second, et troisième processeurs est vérifiée et/ou corrigée de telle manière que les processeurs sont synchronisés quand le second signal de synchronisation de temps 190 est reçu. Une durée 194 est le temps entre le premier signal de synchronisation de temps 188 et le second signal de synchronisation de temps 190. La durée 194 peut être toute durée convenable. Par exemple, dans certains modes de réalisation, la durée 194 peut être approximativement de 250 las ± 10 las. Le même motif illustré dans le diagramme de temps 180 peut être répété aussi souvent que nécessaire (par exemple : entre chaque signal de synchronisation de temps) pendant le fonctionnement des processeurs. Par conséquent, la durée entre deux signaux de synchronisation consécutifs peut être tout temps convenable, comme un temps fonction du processeur, de l'application, de l'horloge, du temps, et autres (par exemple : approximativement 250 las +/- 10 las). Dans certain modes de réalisation et de mise en oeuvre, il peut être souhaitable de maximaliser un nombre d'instructions exécutées par les processeurs entre des signaux de synchronisation de temps, et de synchroniser les processeurs ensemble. Par conséquent, pour synchroniser les processeurs, il peut être souhaitable de stopper l'exécution des instructions sur chaque processeur dans les fenêtres de temps 196, 198, et 200 avant le second signal de synchronisation de temps 190. De plus, Une durée 202 (par exemple : une période de temps prédéterminée) illustre un temps total entre le premier signal de synchronisation de temps 188 et un temps de début de la fenêtre de temps 196, 198, et 200. La durée 202 est inférieure à la durée 194. Dans certain modes de réalisation, la durée 202 peut être approximativement de 230 las, et la durée de chacune des fenêtres de temps 196, 198, et 200 peut être approximativement de 20 las.
Dans certains modes de réalisation et de mise en oeuvre, un nombre total d'instructions exécutées par un processeur peut être commandé. Par exemple : un nombre total estimé d'instructions que chacun des processeurs exécute pendant la durée 202 peut être calculé (par exemple : en fonction au moins en partie de la durée 202). Comme présenté ci-dessus, le nombre d'instructions exécutées pendant chaque itération peut être déterminée en utilisant tout procédé convenable. Par exemple, le nombre d'instructions peut être fonction d'une progression géométrique (par exemple : approximativement la moitié d'un nombre précédent d'instruction), d'un temps restant (par exemple : la moitié des fenêtres de temps restantes) et autres. Pendant une première itération du procédé pour commander des instructions exécutées par le premier processeur, approximativement la moitié du nombre total estimé d'instructions peuvent être exécutées. Par exemple, entre le premier signal de synchronisation 188 et un temps 204, approximativement la moitié du nombre total estimé d'instructions peuvent être exécutées. Ensuite, le premier processeur peut se voir demander d'exécuter itérativement un certain nombre d'instructions pendant une itération courante qui est inférieur à un nombre précédent d'instructions exécutées dans une itération antérieure jusqu'à ce que la durée 202 se soit écoulée. Par exemple : entre le temps 204 et un temps 206 (par exemple : pendant une seconde itération), le premier processeur peut se voir demander d'exécuter approximativement la moitié des instructions exécutées entre le premier signal de synchronisation de temps 188 et le temps 204. En outre, entre le temps 206 et un temps 208 (par exemple : pendant une troisième itération), le premier processeur peut se voir demander d'exécuter approximativement la moitié des instructions exécutées entre le temps 204 et le temps 206. Comme illustré, le temps 208 n'est pas dans la fenêtre de temps 196. Par conséquent, entre le temps 208 et un temps 210, le premier processeur peut se voir demander de réaliser une quatrième itération en exécutant approximativement la moitié des instructions exécutées entre le temps 206 et le temps 208. Comme illustré, le temps 210 est dans la fenêtre de temps 196 ; ainsi, la durée 202 s'est écoulée après que quatre itérations ont été réalisées. Le processeur peut envoyer une indication (par exemple : une empreinte, un message aux autres processeurs, une détermination d'instructions supplémentaires à exécuter, la génération d'une interruption de décompte de temps, etc.). Après la fin de chaque itération. En outre, le premier processeur peut envoyer une empreinte (par exemple : un RIC, une compte de charge de mémoire, un compte de stockage de mémoire, et autres) après la fin de chaque itération. Le second processeur peut aussi être commandé pour stopper l'exécution d'instructions après que la durée 202 s'est écoulée. Par exemple, pendant une première itération du procédé pour commander des instructions exécutées par le second processeur, approximativement la moitié du nombre total estimé d'instructions peuvent être exécutées. Précisément, entre le premier signal de synchronisation 188 et un temps 212, approximativement la moitié du nombre total estimé d'instructions peuvent être exécutées. Ensuite, le second processeur peut se voir demander d'exécuter itérativement un certain nombre d'instructions pendant une itération courante qui est inférieur à un nombre précédent d'instructions exécutées dans une itération antérieure jusqu'à ce que la durée 202 se soit écoulée. Par exemple, entre le temps 212 et un temps 214 (par exemple : pendant une seconde itération), le second processeur peut se voir demander d'exécuter approximativement la moitié des instructions exécutées entre le premier signal de synchronisation de temps 188 et le temps 212. En outre, entre le temps 214 et un temps 216 (par exemple : pendant une troisième itération), le second processeur peut se voir demander d'exécuter approximativement la moitié des instructions exécutées entre le temps 212 et le temps 214. En outre, entre le temps 216 et un temps 218 (par exemple : pendant une quatrième itération), le second processeur peut se voir demander d'exécuter approximativement la moitié des instructions exécutées entre le temps 214 et le temps 216. Comme illustré, le temps 218 n'est pas dans la fenêtre de temps 198. Par conséquent, entre le temps 218 et un temps 220, le second processeur peut se voir demander une cinquième itération en exécutant approximativement la moitié des instructions exécutées entre le temps 216 et le temps 218. Comme illustré, le temps 220 est dans la fenêtre de temps 198 ; ainsi, la durée 202 s'est écoulée après que cinq itérations se sont écoulées. Similairement au premier processeur, le second processeur peut envoyer une indication (une empreinte, un message à d'autres processeurs, une détermination d'instructions supplémentaires à exécuter, la génération d'une interruption de décompte de temps, etc.) après la fin de chaque itération.
Le troisième processeur peut aussi être commandé pour stopper l'exécution d'instructions après que la durée 202 s'est écoulée. Par exemple, pendant une première itération du procédé pour commander des instructions exécutées par le troisième processeur, approximativement la moitié du nombre total estimé d'instructions peuvent être exécutées. Précisément, entre le premier signal de synchronisation 188 et un temps 222, approximativement la moitié du nombre total estimé d'instructions peuvent être exécutées. Ensuite, le troisième processeur peut se voir demander d'exécuter itérativement un certain nombre d'instructions pendant une itération courante qui est inférieur à un nombre précédent d'instructions exécutées dans une itération antérieure jusqu'à ce que la durée 202 se soit écoulée. Par exemple, entre le temps 222 et un temps 224 (par exemple : pendant une seconde itération), le troisième processeur peut se voir demander d'exécuter approximativement la moitié des instructions exécutées entre le premier signal de synchronisation de temps 188 et le temps 222. En outre, entre le temps 224 et un temps 226 (par exemple : pendant une troisième itération), le troisième processeur peut se voir demander d'exécuter approximativement la moitié des instructions exécutées entre le temps 222 et le temps 224. De plus, entre le temps 226 et un temps 228 (par exemple : pendant une quatrième itération), le troisième processeur peut se voir demander d'exécuter approximativement la moitié des instructions exécutées entre le temps 224 et le temps 226. En outre, entre le temps 228 et un temps 230 (par exemple : pendant une cinquième itération), le troisième processeur peut se voir demander d'exécuter approximativement la moitié des instructions exécutées entre le temps 226 et le temps 228. Comme illustré, le temps 230 n'est pas dans la fenêtre de temps 200. Par conséquent, entre le temps 230 et un temps 232, le troisième processeur peut se voir demander d'exécuter une sixième itération en exécutant approximativement la moitié des instructions exécutées entre le temps 228 et le temps 230. Comme illustré, le temps 232 est dans la fenêtre de temps 200 ; ainsi, la durée 202 s'est écoulée après que six itérations ont été réalisées. Similairement aux premier et second processeurs, le troisième processeur peut envoyer une indication et/ou une empreinte après la fin de chaque itération. Le nombre total d'instructions exécutées par les premier, second et/ou troisième processeurs pendant la durée 202 peut être déterminé de toute manière convenable. Par exemple, le nombre total d'instructions exécutées pendant la durée 202 peut être déterminé en sommant (par exemple : en additionnant) le nombre d'instructions exécutées entre le premier signal de synchronisation de temps 188 et le temps à la fin de la dernière itération (par exemple : les temps 210, 220, 232). Comme autre exemple, le nombre total d'instructions exécutées pendant la durée 202 peut être déterminé en accédant à (par exemple : en lisant) un compte depuis le RIC. Dans certain modes de réalisation et de mise en oeuvre, le nombre total d'instructions exécutées par les premier, second, et troisième processeurs pendant la durée 202 peut être inférieur à celui souhaité. Par conséquent, les processeurs peuvent se voir demander d'exécuter un nombre calculé d'instructions après que la durée 202 s'est écoulée. En contraste, si le nombre total d'instructions exécutées pendant la durée 202 est supérieur ou égal à un nombre total souhaité d'instructions, les processeurs peuvent retarder le traitement pendant une période de temps après la durée 202. Par exemple, comme décrit ci-dessus, pendant la durée 202 le premier processeur commence quatre itérations, le second processeur commence cinq itérations et le troisième processeur commence six itérations. Pour des besoins d'illustration, les premier, second, et troisième processeurs peuvent être des processeurs à 1,0 GHz pouvant exécuter deux milliards d'instructions par secondes. En outre, pour cette illustration, les processeurs sont configurés pour fonctionner en utilisant l'approche géométrique comme décrit ci-dessus. Ainsi, un nombre total estimé d'instructions à exécuter pendant la durée 202 (par exemple : 230 las) peut être approximativement de 460 000 instructions (par exemple : 2 000 000 000 x 230 las). Par conséquent, pendant une première itération approximativement une moitié du nombre d'instructions total peuvent être exécutées ; ainsi, pendant la première itération approximativement 230 000 instructions peuvent être exécutées. En outre, pendant chaque itération suivante approximativement la moitié des instructions exécutées dans l'itération précédente peuvent être exécutées. En tant que tel, pendant la seconde itération approximativement 115 000 instructions peuvent être exécutées. En tant que tel, pendant la troisième itération approximativement 57 500 instructions peuvent être exécutées. En tant que tel, pendant la quatrième itération approximativement 28 750 instructions peuvent être exécutées. Pendant la cinquième itération approximativement 14 375 instructions peuvent être exécutées, et pendant la sixième itération approximativement 7 188 instructions peuvent être exécutées. L'empreinte de chaque processeur doit se correspondre après la fin de chaque itération. Ainsi, le premier processeur peut exécuter approximativement 431 250 instructions (par exemple : 230 000 + 115 000 + 57 500 + 28 750) au moment où les itérations du premier processeur s'arrêtent dans la fenêtre 196 (par exemple : après la quatrième itération). En outre, le second processeur peut exécuter approximativement 445 625 instructions (par exemple : 230 000 + 115 000 + 57 500 + 28 750 + 14 375) au moment où les itérations du second processeur s'arrêtent dans la fenêtre 198 (par exemple : après la cinquième itération). En outre, le troisième processeur peut exécuter approximativement 452 813 instructions (par exemple : 230 000 + 115 000 + 57 500 + 28 750 + 14 375 + 7 188) au moment où les itérations du troisième processeur s'arrêtent dans la fenêtre 200 (par exemple : après la sixième itération). On notera que les premier, second, et troisième processeurs peuvent exécuter un nombre différent d'instructions en fonction de tout nombre de variables, comme des variations de performance des processeurs sur la période temps donnée.
En tant que tel, chacun des premier, second, et troisième processeurs peut ne pas être synchronisé (par exemple : peut ne pas avoir réalisé le même nombre d'instructions). Par conséquent, le premier processeur peut exécuter approximativement 21 563 instructions (par exemple : 14 375 + 7 188) pour rattraper le troisième processeur. En outre, le second processeur peut exécuter approximativement 7 188 instructions pour rattraper le troisième processeur. Ainsi, pendant les fenêtres de temps 196 et 198, les premier et second processeurs peuvent se voir demander d'exécuter les instructions supplémentaires de telle manière qu'à la fin des fenêtres de temps 196 et 198 les premier et second processeurs ont terminé le même nombre d'instructions que le troisième processeur. De plus, le troisième processeur peut être retardé pendant le reste de la fenêtre de temps 200 pour allouer aux premier et second processeurs du temps pour exécuter les instructions. On notera que les premier et/ou second processeurs peuvent commencer à exécuter des instructions supplémentaires avant que le troisième processeur finisse sa sixième itération de telle manière qu'il ait suffisamment de temps pour exécuter les instructions.
Comme autre exemple, encore pendant la durée 202 le premier processeur commence quatre itérations, le second processeur commence cinq itérations et le troisième processeur commence six itérations. De même, pour des besoins d'illustration, les premier, second, et troisième processeurs peuvent être des processeurs à 1,0 GHz pouvant exécuter deux milliards d'instructions par secondes. En outre, pour cette illustration, les processeurs sont configurés pour fonctionner en utilisant l'approche géométrique comme décrit ci-dessus. Ainsi, un nombre total estimé d'instructions à exécuter pendant la durée 202 (par exemple : 230 las) peut être approximativement de 460 000 instructions (par exemple : 2 000 000 000 x 230 las). Par conséquent, pendant une première itération des instructions pour approximativement une moitié de la durée totale peuvent être exécutées ; ainsi, pendant la première itération approximativement 23 000 instructions peuvent être exécutées par chaque processeur (par exemple : 2 000 000 000 x 115 las). En outre, pendant chaque itération suivante, chacun des processeurs peut exécuter des instructions en fonction de son temps restant respectif. En tant que tel, pendant la seconde itération, le premier processeur peut déterminer qu'il a approximativement 108 las restantes ; ainsi, le premier processeur peut exécuter approximativement 108 000 instructions (par exemple : 2 000 000 000 x 54 ps) pour exécuter des instructions pour approximativement la moitié du temps restant. De plus, pendant la troisième itération, le premier processeur peut déterminer qu'il a approximativement 52 ps restantes ; ainsi, le premier processeur peut exécuter approximativement 52 000 instructions (par exemple : 2 000 000 000 x 26 ps) pour exécuter des instructions pour approximativement la moitié du temps restant. De plus, pendant la quatrième itération, le premier processeur peut déterminer qu'il a approximativement 24 ps restantes ; ainsi, le premier processeur peut exécuter approximativement 24 000 instructions (par exemple : 2 000 000 000 x 12 ps) pour exécuter des instructions pour approximativement la moitié du temps restant. Par conséquent, le premier processeur peut exécuter approximativement 414 000 instructions (par exemple : 230 000 + 108 000 + 52 000 + 24 000) au moment où les itérations du premier processeur s'arrêtent dans la fenêtre 196. Passons au second processeur, pendant la seconde itération, le second processeur peut déterminer qu'il a approximativement 110 ps 20 restantes ; ainsi, le premier processeur peut exécuter approximativement 110 000 instructions (par exemple : 2 000 000 000 x 55 ps) pour exécuter des instructions pour approximativement la moitié du temps restant. En outre, pendant la troisième itération, le second processeur peut déterminer qu'il a approximativement 54 ps 25 restantes ; ainsi, le second processeur peut exécuter approximativement 54 000 instructions (par exemple : 2 000 000 000 x 27 ps) pour exécuter des instructions pour approximativement la moitié du temps restant. De plus, pendant la quatrième itération, le second processeur peut déterminer qu'il a approximativement 24 ps 30 restantes ; ainsi, le second processeur peut exécuter approximativement 24 000 instructions (par exemple : 2 000 000 000 x 12 ps) pour exécuter des instructions pour approximativement la moitié du temps restant. En outre, pendant la cinquième itération, le second processeur peut déterminer qu'il a approximativement 10 ps restantes ; ainsi, le second processeur peut exécuter approximativement 10 000 instructions (par exemple : 2 000 000 000 x 5 ps) pour exécuter des instructions pour approximativement la moitié du temps restant. Par conséquent, le second processeur peut exécuter approximativement 428 000 instructions (par exemple : 230 000 + 110 000 + 54 000 + 24 000 + 10 000) au moment où les itérations du second processeur s'arrêtent dans la fenêtre 198. Passons au troisième processeur, pendant la seconde itération, le troisième processeur peut déterminer qu'il a approximativement 114 ps restantes ; ainsi, le troisième processeur peut exécuter approximativement 114 000 instructions (par exemple : 2 000 000 000 x 57 ps) pour exécuter des instructions pour approximativement la moitié du temps restant. De plus, pendant la troisième itération, le troisième processeur peut déterminer qu'il a approximativement 58 ps restantes ; ainsi, le troisième processeur peut exécuter approximativement 58 000 instructions (par exemple : 2 000 000 000 x 29 ps) pour exécuter des instructions pour approximativement la moitié du temps restant. De plus, pendant la quatrième itération, le troisième processeur peut déterminer qu'il a approximativement 28 ps restantes ; ainsi, le troisième processeur peut exécuter approximativement 28 000 instructions (par exemple : 2 000 000 000 x 14 ps) pour exécuter des instructions pour approximativement la moitié du temps restant. De plus, pendant la cinquième itération, le troisième processeur peut déterminer qu'il a approximativement 14 ps restantes ; ainsi, le troisième processeur peut exécuter approximativement 14 000 instructions (par exemple 2 000 000 000 x 7 ps) pour exécuter des instructions pour approximativement la moitié du temps restant. De plus, pendant la sixième itération, le troisième processeur peut déterminer qu'il a approximativement 6 ps restantes ; ainsi, le troisième processeur peut exécuter approximativement 6 000 instructions (par exemple : 2 000 000 000 x 3 ps) pour exécuter des instructions pour approximativement la moitié du temps restant. Par conséquent, le troisième processeur peut exécuter approximativement 450 000 instructions (par exemple : 230 000 + 114 000 + 58 000 + 28 000 + 14 000 + 6 000) au moment où les itérations du troisième processeur s'arrêtent dans la fenêtre 200. L'empreinte de chaque processeur peut ne pas correspondre après la fin de chaque itération. En tant que tel, chacun des premier, second, et troisième processeurs peut ne pas être synchronisé (par exemple : peut ne pas avoir réalisé le même nombre d'instructions). Par conséquent, le premier processeur peut exécuter approximativement 36 000 instructions (par exemple : 450 000 - 414 000) pour rattraper le troisième processeur. En outre, le second processeur peut exécuter approximativement 22 000 instructions (par exemple : 450 000 - 428 000) pour rattraper le troisième processeur. Ainsi, pendant les fenêtres de temps 196 et 198, les premier et second processeurs peuvent se voir demander d'exécuter les instructions supplémentaires de telle manière qu'à la fin des fenêtres de temps 196 et 198 les premier et second processeurs ont terminé le même nombre d'instructions que le troisième processeur. De plus, le troisième processeur peut être retardé pendant le reste de la fenêtre de temps 200 pour allouer aux premier et second processeurs du temps pour exécuter les instructions. Les premier et/ou second processeurs peuvent commencer à exécuter des instructions supplémentaires avant que le troisième processeur finisse sa sixième itération de telle manière qu'il y ait suffisamment de temps pour exécuter les instructions. Après que les processeurs ont été synchronisés, les empreintes digitales de chaque processeur doivent se correspondre. Par exemple : les comptes d'instruction retirées (RIC) doivent se correspondre. La figure 7 est un organigramme d'un mode de réalisation d'un procédé 240 pour commander des instructions exécutées par un processeur (par exemple : le processeur 68, 70, 72). Le processeur se voit demander d'exécuter des instructions (bloc 242). Par exemple, le processeur peut se voir demander par un autre processeur d'exécuter un certain nombre d'instructions en fonction d'une période de temps pour l'exécution, ou en fonction d'un nombre prédéterminé d'instructions. Dans un mode de réalisation, le processeur peut se voir demander d'exécuter des instructions qui correspondent à approximativement la moitié des instructions anticipées comme devant être exécutées entre un temps courant et un début d'une fenêtre de temps (par exemple : la fenêtre de temps 134, 146) dans le futur où l'on souhaite stopper l'exécution des instructions. Après que le processeur a exécuté les instructions, une détermination est faite concernant si le temps est dans la fenêtre de temps (bloc 244). Si le temps courant n'est pas dans la fenêtre de temps, le procédé retourne au bloc 242 où le processeur se voit demander d'exécuter des instructions supplémentaires. Le nombre d'instructions exécutées pendant chaque itération peut être supérieur au nombre d'instructions dans chacune des itérations suivantes. En retournant au bloc 244, si le temps courant est dans la fenêtre de temps un nombre total d'instructions exécutées est déterminé (bloc 246). Les effets techniques de l'invention incluent de pouvoir commander un nombre d'instructions exécutées entre des signaux de synchronisation de temps sur un seul processeur. En outre, dans un système avec de multiples processeurs, les processeurs peuvent être commandés de telle manière que chaque processeur exécute le même nombre d'instructions entre des signaux de synchronisation consécutifs. Par conséquent, les processeurs peuvent être synchronisés et peuvent convenir pour utiliser dans un système à haute intégrité et/ou à haute disponibilité.
Liste des références 10 système à haute intégrité 12 mémoire 14 application 16 processeur 18 processeur 20 processeur 22 bus de système 26 système à haute intégrité 28 première machine à états répliquée 30 seconde machine à états répliquée 32 entrée 34 processeur 36 processeur 38 processeur 40 consensus distribué 42 entrée 44 processeur 46 processeur 48 processeur 50 consensus distribué 60 système à haute intégrité 62 processeur multicoeur 64 processeur multicoeur 66 processeur multicoeur 68 processeur d'application 70 processeur d'application 72 processeur d'application 74 processeur E/S 76 bus de système 78 bus de système 80 machine à états répliquée 82 machine à états répliquée 84 machine à états répliquée 86 hyperviseur 88 ressources intégrées 90 OS invité 92 application 94 application 96 client disque virtuel 98 client CIR 100 structure de coeur 102 client horloge virtuelle 104 algorithme de consensus distribué 110 pilote de disque 112 pilote de CIR 114 structure de coeur 116 serveur d'horloge virtuelle 120 diagramme de temps 122 ligne de temps 124 premier signal de synchronisation de temps 126 second signal de synchronisation de temps 128 durée 130 troisième signal de synchronisation de temps 132 durée 134 fenêtre de temps 136 durée 138 temps 140 temps 142 temps 144 temps 146 fenêtre de temps 148 durée 150 temps 152 temps 154 temps 156 temps 158 temps 180 diagramme de temps 182 ligne de temps 184 ligne de temps 186 ligne de temps 188 premier signal de synchronisation de temps 190 second signal de synchronisation de temps 192 Segment de temps 194 durée 196 fenêtre de temps 198 fenêtre de temps 200 fenêtre de temps 202 durée 204 temps 206 temps 208 temps 210 temps 212 temps 214 temps 216 temps