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).
la source
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_FIFO
politique 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 lesnice
valeurs 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
N
travaux exécutables de priorité la plus élevée sur uneN
machine à processeur. De grandes difficultés ont été prises pour éviter les problèmes d'inversion de priorité à l'intérieur du noyau. Lorsque le processusA
devient exécutable et qu'il a une priorité plus élevée que tout autre processus en cours d'exécutionB
,A
il prévaut immédiatementB
.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 .
la source
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
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
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 .
la source