Question

Considérons la fonction / processus,

void task_fun(void) { while(1) } Si ce processus devait fonctionner sur un système d'exploitation PC normal, il serait heureux courir pour toujours. Mais sur un téléphone mobile, il serait certainement planter le téléphone entier en quelques minutes que le chien de garde de HW expire et remet à zéro le système. Sur un PC, ce processus, après son expiration de sa tranche horaire prévu sera prévue et un nouveau processus runnable serait planifiée.

Mon doute est pourquoi nous ne pouvons pas appliquer la même stratégie sur un RTOS? Quelle est la limitation de la performance impliqués si une telle politique d'ordonnancement est implemeted sur un RTOS?

Un doute est plus que j'ai vérifié la fonction schedule() à la fois mon PC OS (Ubuntu) et mon téléphone qui fonctionne également le noyau Linux. Je les ai trouvés tous deux pour être à peu près la même. Où est la remise de chien de garde fait sur mon téléphone? Mon hypothèse est que le programmateur est celui qui commence le chien de garde avant de laisser une course de processus. point que quelqu'un peut me où dans le code de son fait?

Était-ce utile?

La solution

Le téléphone « plantage » est un problème avec la conception du téléphone ou le système d'exploitation spécifique, non intégrés ou systèmes d'exploitation RTOS en général. Il serait « mourir de faim » des tâches moins prioritaires (y compris éventuellement le service de surveillance), ce qui est probablement ce qui se passe ici.

Dans la plupart RTOS intégré, il est prévu que tous les processus sont définis au déploiement par le concepteur du système et la conception est pour tous les processus pour être programmés selon les besoins. Placement défini par l'utilisateur ou un code tiers sur le système d'un tel peut compromettre son système de planification comme dans votre exemple. Je suggère que tous ces processus devraient fonctionner en même faible priorité que tous les autres pour que le planificateur round-robin de services d'application de l'utilisateur également sans compromettre les services système.

systèmes d'exploitation de téléphone sont généralement RTOS, mais les processus utilisateurs ne devraient pas fonctionner à une plus grande priorité que les processus du système. Il peut être intentionnel que ces processus sont exécutés plus élevés que le service de surveillance exactement pour protéger le système des applications « mauvaise conduite » qui yours de Simule.

La plupart des RTOS utilisent un ordonnanceur de priorité préemptive (tâche la plus prioritaire prêt fonctionne jusqu'à ce qu'il se termine, les rendements, ou est préempté par une tâche de priorité plus élevée ou d'interruption). Certains également planifier la ronde pour des tâches au même niveau de priorité (exécution de la tâche jusqu'à ce qu'elle se termine, les rendements ou consomme sont prêts à exécuter son tranche de temps et d'autres tâches de la même priorité).

Autres conseils

Il existe plusieurs façons peut être mis en œuvre un chien de garde, dont aucune est imposée par Linux:

  • Un processus ou un fil exécute périodiquement pour vérifier que les opérations essentielles sont effectuées. Si elles ne sont pas, des mesures de correction est prise, comme le redémarrage de la machine, ou réinitialiser un élément gênant.
  • procédé A ou court de fil en continu pour absorber le temps CPU supplémentaire et réinitialiser une minuterie. Si la tâche n'est pas en mesure d'exécuter, une minuterie expire et prend des mesures correctives.
  • Un composant matériel remet à zéro le système si elle n'est pas massé périodiquement; qui est une horloge matérielle arrive à expiration.

Il n'y a rien ici qui ne peut être fait soit sur un RTOS ou tout autre système d'exploitation multi-tâches.

Linux, sur un ordinateur de bureau ou sur un téléphone mobile, n'est pas un RTOS. Sa politique de programmation est axée sur le temps.

Sur un RTOS, la programmation est déclenchée par des événements, que ce soit par le biais de l'environnement ISR ou du logiciel lui-même via des appels système (envoi de message, attendez mutex, ...)

Dans un système d'exploitation normal, nous avons deux types de processus. Processus utilisateur et processus du noyau. processus noyau le temps constraints.However, processus utilisateur ne dispose pas de contraintes de temps.

Dans un RTOS, tous les processus sont processus du noyau et donc des contraintes de temps doivent être strictement respectées. Tous les processus / tâche (peut être utilisé de manière interchangeable) sont en fonction des contraintes prioritaires et le temps sont importants pour le système de fonctionner correctement.

Donc, si votre code task_fun (void) {while (1)} pistes pour toujours, d'autres tâches plus prioritaires seront mourir de faim. Par conséquent, chien de garde se bloque le système pour spécifier le développeur que les contraintes de temps d'autres tâches ne sont pas remplies.

Par exemple, GSM Scheduler doit exécuter toutes les 4.6ms, si l'exécution de votre tâche pour plus de temps, les contraintes de temps de Planificateur de tâches GSM ne peuvent pas être satisfaites. Ainsi, le système doit redémarrer à son objet vaincu.

Hope this helps:)

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