2017-05-14 2 views
0

J'ai lu qu'un système d'exploitation met en œuvre la programmation en utilisant la méthode suivante:L'utilisation d'une minuterie matérielle est-elle la seule façon d'implémenter la planification des processus?

  • La CPU doit avoir une horloge matérielle qui déclenche une interruption chaque X millisecondes.
  • Une fois les feux d'interruption de la minuterie, le gestionnaire d'interruption de la minuterie exécutera instructions qui fera la CPU commencer à exécuter un autre processus (ou un autre thread Je suppose que je devrais dire).

Ma question est: La méthode que je viens de décrire est-elle la seule façon d'implémenter la planification?

Répondre

2

Non Fondamentalement, il existe deux méthodes de base de la mise en œuvre multithreading dans un système d'exploitation:

1) préemptif Multitâche

Avec multi-tâches préemptif vous pouvez usw source d'interruption pour déclencher votre commutateur de tâche. La plupart du temps, on fait une commutation de tâches à l'intérieur de la minuterie au cas où une tâche de longue durée est exécutée et qu'aucun autre événement matériel n'est survenu. Dans le cas où d'autres événements matériels se sont produits, on pourrait également faire un changement de tâche pour bloquer les threads avec une priorité plus élevée pour permettre la gestion des événements matériels.

2) Coopérative multitâche

Dans multitâche coopératif du système d'exploitation threads commutateurs à chaque fois qu'un appel de système est exécuté. Cela peut être soit un appel système spécial qui permet à une application de déclencher explicitement un changement de tâche (comme le rendement utilisé dans les premiers systèmes multitâches comme Windows 3.11, Mac OS classique, etc.). On peut également mettre en œuvre un multitâche coopératif complètement en mode utilisateur. Aujourd'hui, la plupart des systèmes d'exploitation adoptent une approche hybride: ils réagissent aux événements matériels (au cas où un thread en cours d'exécution n'appelle jamais les routines système et qu'aucune autre E/S ne se produit, il peut être le temporisateur). une manière coopérative chaque fois que les applications exécutent des appels système ou des bibliothèques fournies par le système d'appel.

0

Une interruption de minuterie est nécessaire pour les commutations de contexte de découpage temporel entre des threads ou des processus de même priorité. Une alternative pour certains systèmes d'exploitation embarqués préemptifs multi-thread est de faire de chaque thread une priorité différente, ce qui élimine le besoin d'un découpage temporel ou d'une interruption par minuterie. Les interruptions peuvent toujours être utilisées pour déclencher des changements de contexte (en plus des threads utilisant des appels système pour signaler d'autres threads), mais une interruption de minuterie n'est pas nécessaire.