Quelles garanties les systèmes d'exploitation en temps réel «doux» fournissent-ils

17

Je pense que je sais ce qu'est un système d'exploitation en temps réel "dur". Il s'agit d'un système d'exploitation avec un planificateur qui fournit un contrat avec le programmeur d'application. Une application fournit un délai à chaque demande d'allocation de ressources. Si les demandes de délai sont réalisables , le planificateur garantit que chaque ressource sera allouée à l'application demandeuse avant la date limite. La garantie est suffisante pour permettre à un programmeur d'application de raisonner sur les latences maximales et les débits minimaux de requêtes spécifiques.

Toutes les définitions que je trouve des systèmes en temps réel "doux" me semblent vides. Wikipédia dit

l'utilité d'un résultat se dégrade après son échéance, dégradant ainsi la qualité de service du système.

Uhhhh. D'accord. Selon ces critères, Windows 95 était un système en temps réel doux, tout comme 3BSD, tout comme Linux. Wikipédia n'est pas une excellente source, mais les deux prochains hits de Google ne sont pas beaucoup mieux. Par exemple, http://users.ece.cmu.edu/~koopman/des_s99/real_time/ dit

Dans un système temps réel doux, une opération dégradée dans une charge de pointe rarement rencontrée peut être tolérée.

Ce n'est pas un contrat, c'est une façon élégante de ne rien dire.

Quels sont les exemples de véritables garanties / contrats en temps réel doux offerts par de vrais systèmes d'exploitation?

Je cherche des réponses du formulaire:

Dans (nom du système d'exploitation) si le programmeur le fait (ce que le programmeur doit faire), le système d'exploitation garantit (ce que le système garantit).

Logique errante
la source

Réponses:

22

Vous avez raison, et Wikipedia est aussi informatif que possible - le temps réel doux n'est pas une caractérisation formelle, c'est un jugement de valeur. Une autre façon de dire «doux en temps réel» est «je souhaite que ce soit en temps réel», ou peut-être plus précisément «ça devrait être en temps réel mais c'est trop difficile».

Si vous voulez vraiment exprimer sous la forme d'une garantie, c'est une garantie de meilleur effort plutôt qu'une garantie de performance spécifique.

Ou, pour citer la FAQ Erlang (Erlang est un langage de programmation initialement conçu pour une utilisation en téléphonie):

Que signifie le temps réel doux?

Les cyniques diront "essentiellement rien".

(…) De nombreux systèmes de télécommunications ont des exigences moins strictes [qu'en temps réel dur], par exemple, ils pourraient nécessiter une garantie statistique du type "une recherche de base de données prend moins de 20 ms dans 97% des cas". Les systèmes logiciels en temps réel, comme Erlang, vous permettent de faire ce genre de garantie.

Et cela fournit une définition utile. Le temps réel doux indique une conception qui est optimisée pour chaque tâche individuelle en ne prenant pas plus qu'une certaine quantité de temps , plutôt que pour optimiser le temps total passé pour effectuer toutes les tâches. Par exemple, un système en temps réel doux viserait à traiter 99,9% des demandes en 10 ms et à traiter 100 demandes par seconde, alors qu'un temps non réel pourrait viser à traiter 200 demandes par seconde mais permettre à la demande occasionnelle de se bloquer pour 50 ms ou plus. Un temps réel dur garantirait une demande toutes les 15 ms quoi qu'il arrive.

Le temps réel doux est utilisé pour les applications où un délai non respecté signifie une dégradation du service, mais n'est pas critique en termes de performances. Le multimédia et la téléphonie sont des cas d'utilisation typiques. Chaque image audio ou vidéo doit être rendue dans le temps, sinon elle doit être ignorée; mais sauter un cadre n'est pas la fin du monde. Les concepteurs d'Erlang avaient des objectifs similaires en matière de fiabilité dans d'autres domaines: ils ont observé qu'il valait mieux qu'un central téléphonique abandonne très occasionnellement un appel, mais pour être absolument sûr que le central dans son ensemble continuerait à fonctionner quoi qu'il arrive, que de risque d'échec catastrophique en essayant de maintenir les connexions à tout prix.

En revanche, quelque chose comme le contrôle d'un moteur nécessite que le logiciel ne manque jamais une échéance. Cela a des coûts: les performances globales sont généralement plus lentes et seuls des comportements relativement simples peuvent être obtenus. De l'autre côté du spectre, une application de calcul de nombre ne se soucie généralement que des performances globales - ce qui compte, c'est la vitesse de multiplication des matrices 1000x1000, et non la vitesse de calcul de chaque colonne.

Gilles 'SO- arrête d'être méchant'
la source
@ E.DouglasJensen Votre déclaration est une exagération grossière. Votre réponse n'est pas fondamentalement en désaccord avec l'article de Wikipedia.
Gilles 'SO- arrête d'être méchant'
Oui je suis d'accord. Mon commentaire visait à englober plusieurs pages Wikipédia sur le temps réel, et une grande partie de ce contenu est au mieux mal envisagée.
E. Douglas Jensen
Ma plus grande plainte est que les gens ne considèrent pas qu'un logiciel en temps réel aussi dur (respectant toutes les échéances) doit être officiellement vérifié pour (par exemple) les systèmes de freinage automobile - tout comme les logiciels en temps réel (par exemple, avec probabilité> 0,9) , au moins 89% des tâches ne doivent pas être retardées de plus de 20%) doivent être motivées et officiellement vérifiées. Tous les systèmes de combat militaires sont doux en temps réel. Au lieu de cela, les gens ont une pensée bâclée ad hoc et disent «Que Sera Sera».
E. Douglas Jensen du
"La première révolution est lorsque vous changez d'avis sur la façon dont vous regardez les choses et voyez qu'il pourrait y avoir une autre façon de voir les choses que vous n'avez pas été montré." - Gil Scott-Heron, "La révolution ne sera pas télévisée"
E. Douglas Jensen
4

Linux avec le patchset -rt (temps réel) fournit un planificateur qui fournit une garantie intéressante qui semble non vide. (Bien que je ne sache pas comment la garantie peut être mise à profit.)

La SCHED_FIFOpolitique de planification Linux-rt fonctionne comme suit: L'utilisateur attribue une priorité à chaque processus. (Les numéros de priorité pour les processus "en temps réel" sont 0-99, et les nicevaleurs Unix traditionnelles -20 à 19 correspondent aux priorités 100 à 139. (Donc "0" est la priorité "la plus élevée" et "139" est la "la plus basse). "priorité.)

La garantie est qu'à tout moment le planificateur planifie les Ntravaux exécutables de priorité la plus élevée sur une Nmachine à processeur. De grandes difficultés ont été prises pour éviter les problèmes d'inversion de priorité à l'intérieur du noyau. Lorsque le processus Adevient exécutable et qu'il a une priorité plus élevée que tout autre processus en cours d'exécution B, Ail prévaut immédiatement B.

Notez, cependant, qu'aucune garantie de temps stricte n'est donnée. Le temps passé à effectuer la préemption pourrait théoriquement être arbitrairement long. En outre, il semble y avoir des moyens par lesquels un travail de faible priorité pourrait initier un tas d'E / S à longue latence. Lorsque les E / S sont terminées, les gestionnaires d'interruption pour le travail de faible priorité peuvent interrompre un travail de priorité plus élevée, qui est, sans doute, une forme d'inversion de priorité.

Ainsi, la garantie limitée fournie est la suivante: s'il existe un seul processus avec la priorité la plus élevée, chaque fois qu'il est exécutable, il obtiendra toutes les ressources du processeur que le système d'exploitation peut lui donner de manière réaliste. Si vous avez une bonne limite supérieure sur la quantité de ressources de processeur consommées par le processus de priorité la plus élevée, vous pouvez calculer une estimation raisonnablement précise des ressources qui seront disponibles pour le deuxième processus de priorité la plus élevée, etc.

Un article détaillé décrivant le planificateur temps réel Linux est http://www.linuxjournal.com/magazine/real-time-linux-kernel-scheduler .

Logique errante
la source
1
Je pense que la FAQ RTLinux fournit une caractérisation utile ici (ils n'utilisent pas les adjectifs durs ou mous ): «La tâche la plus prioritaire voulant que le CPU reçoive toujours le CPU dans un laps de temps fixe après l'éveil de l'événement, la tâche a eu lieu . "
Gilles 'SO- arrête d'être méchant'
4

Pour définir «temps réel doux», il est plus facile de le comparer avec «temps réel dur».

Parlant avec désinvolture, la plupart des gens ont implicitement un modèle mental informel qui considère l'information ou un événement comme étant "en temps réel"

• si, ou dans la mesure où, cela se manifeste pour eux avec un retard (latence) qui peut être lié à sa devise perçue

• c'est-à-dire dans un laps de temps où l'information ou l'événement a une valeur satisfaisante pour eux.

Il existe de nombreuses définitions différentes de «temps réel dur», mais dans ce modèle mental, le temps réel dur est représenté par le terme «si». Plus précisément, en supposant que les actions en temps réel (telles que les tâches) ont des délais d'achèvement, la valeur acceptable de l'événement si toutes les tâches sont limitées est limitée au cas particulier où toutes les tâches respectent leurs délais.

Les systèmes durs en temps réel partent de l'hypothèse très forte que tout ce qui concerne l'application, le système et l'environnement est statique et connu a priori - par exemple, quelles tâches, qu'ils sont périodiques, leurs heures d'arrivée, leurs périodes, leurs délais, qu'ils ont gagnés 't avoir des conflits de ressources, et globalement l'évolution du temps du système. Dans un système de commande de vol d'avion ou un système de freinage automobile et de nombreux autres cas, ces hypothèses peuvent généralement être satisfaites afin que toutes les échéances soient respectées.

Ce modèle mental est délibérément et très utilement assez général pour englober à la fois dur et mou en temps réel - doux est adapté à l'expression «dans la mesure où». Par exemple, supposons que l'événement de fin de tâche ait une valeur sous-optimale mais acceptable si

  • pas plus de 10% des tâches manquent leurs délais
  • ou aucune tâche n'est en retard de plus de 20%
  • ou le retard moyen de toutes les tâches ne dépasse pas 15%
  • ou le retard maximum parmi toutes les tâches est inférieur à 10%

Ce sont tous des exemples courants de cas en temps réel doux dans un grand nombre d'applications.

Considérez l'application à tâche unique consistant à venir chercher votre enfant après l'école. Cela n'a probablement pas de date limite, mais il y a une valeur pour vous et votre enfant en fonction du moment où cet événement a lieu. Trop tôt gaspille des ressources (comme votre temps) et trop tard a une certaine valeur négative car votre enfant peut être laissé seul et potentiellement en danger (ou du moins incommodé).

Contrairement au cas spécial statique en temps réel dur, le temps réel doux ne fait que les hypothèses spécifiques à l'application nécessaires sur les tâches et le système, et des incertitudes sont attendues. Pour récupérer votre enfant, vous devez vous rendre à l'école en voiture, et le temps de le faire est dynamique en fonction des conditions météorologiques, des conditions de circulation, etc. Vous pourriez être tenté de sur-provisionner votre système (c.-à-d. pire temps de conduite), mais encore une fois cela gaspille des ressources (votre temps, et l'occupation du véhicule familial, éventuellement en refusant l'utilisation par d'autres membres de la famille).

Cet exemple peut ne pas sembler coûteux en termes de gaspillage de ressources, mais considérons d'autres exemples. Tous les systèmes de combat militaires sont doux en temps réel. Par exemple, envisagez d'effectuer une attaque aérienne contre un véhicule terrestre hostile en utilisant un missile guidé avec des mises à jour comme manœuvres cibles. La satisfaction maximale pour terminer les tâches de mise à jour du cours est obtenue par une frappe destructrice directe sur la cible. Mais une tentative de surprovisionner des ressources pour garantir ce résultat est généralement beaucoup trop coûteuse et peut même être impossible. Dans ce cas, vous pouvez être moins mais suffisamment satisfait si le missile frappe suffisamment près de la cible pour la désactiver.

De toute évidence, les scénarios de combat comportent de nombreuses incertitudes dynamiques possibles qui doivent être prises en compte par la gestion des ressources. Les systèmes logiciels en temps réel sont également très courants dans de nombreux systèmes civils, tels que l'automatisation industrielle, bien que les systèmes militaires soient évidemment les plus dangereux et les plus urgents pour obtenir une valeur acceptable satisfaisante.

La clé de voûte des systèmes en temps réel est la «prévisibilité». Le cas difficile en temps réel s'intéresse à un seul cas particulier de prévisibilité - c'est-à-dire que les tâches respecteront toutes leurs échéances et que la valeur maximale possible sera atteinte par cet événement. Ce cas spécial est appelé «déterministe».

Il existe un spectre de prévisibilité; la plupart des systèmes en temps réel (à savoir les systèmes logiciels) ont une prévisibilité non déterministe, par exemple, des temps d'exécution des tâches et donc des valeurs acquises de ces événements. En général, la prévisibilité, et donc la valeur, peuvent être faites aussi près du point final déterministe que nécessaire, mais à un prix qui peut être physiquement impossible ou excessivement cher (comme au combat ou peut-être même pour aller chercher votre enfant à l'école).

Le temps réel doux nécessite un choix spécifique à l'application d'un modèle de probabilité (pas le modèle fréquentiste commun) et donc d'un modèle de prévisibilité pour raisonner sur les latences des événements et les valeurs résultantes.

En se référant à la liste ci-dessus des événements qui fournissent une valeur acceptable, nous pouvons maintenant ajouter des cas non déterministes, tels que

  • la probabilité qu'aucune tâche ne rate son échéance de plus de 5% est supérieure à 0,87.

Dans une application de défense antimissile, étant donné qu'en combat l'infraction a toujours l'avantage sur la défense, lequel de ces deux scénarios de calcul en temps réel préférez-vous:

  • parce que la destruction parfaite de tous les missiles hostiles est très improbable ou impossible, affectez vos ressources défensives pour maximiser la probabilité que le plus grand nombre de missiles hostiles les plus menaçants (par exemple, en fonction de leurs cibles) soient interceptés avec succès (les interceptions rapprochées comptent car elles peut déplacer le missile hostile en dehors du cap);

  • se plaignent que ce n'est pas un problème informatique en temps réel car il est dynamique au lieu d'être statique, et les concepts et techniques traditionnels en temps réel ne s'appliquent pas, vous n'êtes donc pas intéressé à faire de la R&D pour le temps réel doux.

Malgré les divers malentendus sur le temps réel doux dans la communauté informatique en temps réel (mais pas dans d'autres domaines non informatiques), le temps réel doux est très général et puissant, et potentiellement très complexe par rapport au temps réel dur.

Pour répondre directement à la question OP:

  • un système dur en temps réel peut fournir des garanties déterministes - le plus souvent que toutes les tâches respecteront leurs délais, l'interruption ou le temps de réponse aux appels système sera toujours inférieur à x, etc. - SI ET SEULEMENT SI des hypothèses très fortes sont faites et sont correctes tout ce qui compte est statique et connu a priori (en général, de telles garanties pour les systèmes durs en temps réel sont un problème de recherche ouvert, sauf pour les cas assez simples)

  • un système en temps réel doux ne fait pas de garanties déterministes, il est destiné à fournir la meilleure actualité probabiliste et la prévisibilité probables analytiquement spécifiées qui sont réalisables dans les circonstances dynamiques actuelles, selon des critères spécifiques à l'application. De toute évidence, le temps réel dur est un cas spécial simple de temps réel doux. De toute évidence, les assurances non déterministes analytiques en temps réel doux peuvent être très complexes à fournir, mais sont obligatoires dans les cas en temps réel les plus courants (y compris les plus critiques pour la sécurité, tels que le combat), car la plupart des cas sont dynamiques et non statiques.

J'ai une discussion détaillée beaucoup plus précise en temps réel, en temps réel dur, en temps réel doux, la prévisibilité, le déterminisme et les sujets connexes sur mon site Web real-time.org .

E. Douglas Jensen
la source