Différence entre le planificateur de threads Windows et Linux

4

Autant que je sache, les deux utilisent:

  • File d'attente de commentaires à plusieurs niveaux
  • Niveaux de priorité (plage différente)
  • Les deux gèrent les threads et non le processus

Mais quelles sont les grandes différences?

Chris911
la source
Êtes-vous convaincu qu'il en existe, du moins lorsque Linux est fourni et installé comme l'une des distributions courantes et qu'aucune reconstruction / reconfiguration n'a été effectuée?
Selon la page Wikipedia et le chapitre sur la planification du livre que je lis, il y en a, mais la plupart du temps Linux est couvert et presque rien sur Windows. De plus, il semble y avoir des différences entre les versions du noyau sous Linux et même entre XP / Vista / 7 sous Windows, je cherche donc des différences générales, le cas échéant.
De grandes différences? ... eh bien, pour un Linux, vous avez le choix entre plusieurs, si vous voulez. Mais je pense que la question est trop vaste pour qu'on puisse y répondre utilement. BTW: vous devrait clairement préciser que vous voulez dire le planificateur de thread, pas cron et ses alternatives sur Linux et Windows.
0xC0000022L
Notez également que Linux a beaucoup ordonnanceurs. Les plus remarquables sont le planificateur complètement équitable et le planificateur F.ck de Brain.
new123456
vous devrez peut-être demander à re windows. demander re linux. étudier les deux. comprendre les différences. pourrait poser plus de questions techniques qui ne sont peut-être pas trop spécifiques, sur un site informatique d'échange de pile. Quel livre es-tu en train de lire? william stalling a un excellent livre sur les systèmes d’exploitation qui couvre la planification, mais je ne pense pas que cela va spécifique au système d’exploitation.
barlop

Réponses:

6

Selon Priorités de planification chez MSDN :

Les threads sont planifiés pour s'exécuter en fonction de leur priorité de planification. Chaque   le thread se voit attribuer une priorité de planification. La gamme de niveaux de priorité   de zéro (priorité la plus basse) à 31 (priorité la plus élevée). Seulement le   Un fil de page zéro peut avoir une priorité de zéro. (Le fil de page zéro est   un thread système responsable de la remise à zéro des pages libres lorsqu'il y a   pas d'autres threads à exécuter.)

Le système traite tous les threads avec la même priorité comme étant égaux. le   le système attribue des tranches de temps tour à tour à tous les threads   avec la plus haute priorité. Si aucun de ces threads n'est prêt à être exécuté,   le système attribue des tranches de temps tour à tour à tous les threads   avec la priorité la plus haute suivante. Si un thread plus prioritaire devient   disponible pour fonctionner, le système cesse d'exécuter la priorité inférieure   fil (sans lui permettre de finir avec sa tranche de temps), et   assigne une tranche de temps complet au thread de priorité supérieure.   La priorité de chaque thread est déterminée par les critères suivants:

  • La classe de priorité de son processus
  • Le niveau de priorité du thread dans la classe de priorité de son processus

Je crois que ce planificateur de fil décrit un algorithme appelé file d'attente à plusieurs niveaux , qui est un algorithme de planification beaucoup plus simple que la file d’attente de retour multiniveau. Notez que Windows ' processus planificateur utilise file d'attente de commentaires à plusieurs niveaux , selon Wikipédia . Depuis Windows 7 et Windows Server 2008 R2, il existe également Planification en mode utilisateur ce qui permet aux processus de gérer leur propre planification de threads.

Comme mentionné par d’autres, Linux traite les processus et les threads du point de vue de la planification. La planification de processus / threads sous Linux est configurable. Il existe différents algorithmes de planification, dont certains peuvent être configurés en recompilant le noyau:

Notez que défaut ci-dessus signifie défaut dans le noyau vanille. Certaines distributions sont livrées avec un noyau par défaut préconfiguré pour utiliser un planificateur par défaut différent.

En plus de l'algorithme de planification, il existe également politiques du planificateur : SCHED_FIFO, SCHED_BATCH, SCHED_IDLE, SCHED_OTHER et SCHED_RR; qui peut être modifié au moment de l’exécution et qui décrit le type de charge de travail d’un processus.

Le planificateur par défaut actuel, Planificateur parfaitement équitable, utilise un arbre rouge-noir pour maintenir l’équité de la planification. De À l'intérieur du planificateur complètement équitable de Linux 2.6 :

L’idée principale du CSA est de maintenir l’équilibre (équité) dans   fournir du temps processeur aux tâches. Cela signifie que les processus doivent être   étant donné une bonne quantité du processeur. Quand le temps des tâches est fini   d’équilibre (c’est-à-dire qu’une ou plusieurs tâches ne reçoivent pas une quantité équitable   de temps par rapport aux autres), alors ces tâches déséquilibrées devraient être   donné le temps d'exécuter.

Pour déterminer le solde, le CFS maintient le temps   fourni à une tâche donnée dans ce qu'on appelle le runtime virtuel. le   le temps d'exécution virtuel d'une tâche plus petite, c'est-à-dire le moins de temps possible   la tâche a été autorisée à accéder au processeur - plus ses besoins sont élevés   pour le processeur. Le CFS comprend également le concept de dormeur   équité pour garantir que les tâches qui ne sont pas exécutables actuellement (par exemple,   exemple, en attente d’entrée / sortie) reçoivent une part comparable du processeur   quand ils en ont finalement besoin.

Mais plutôt que de maintenir les tâches dans une file d'attente d'exécution, comme cela a été fait dans   précédents ordonnanceurs Linux, le CFS gère un système chronologique rouge-noir   arbre (voir Figure 1). Un arbre rouge-noir est un arbre avec quelques   propriétés intéressantes et utiles. Tout d'abord, c'est auto-équilibrage, qui   signifie qu'aucun chemin dans l'arbre ne sera jamais plus de deux fois plus long que   tout autre. Deuxièmement, les opérations sur l’arbre ont lieu en temps O (log n)   (où n est le nombre de nœuds dans l’arbre). Cela signifie que vous pouvez   insérer ou supprimer une tâche rapidement et efficacement.

Donc principales différences:

les fenêtres

  • Processus de planification en utilisant la file d'attente de commentaires multiniveaux + Planification de threads en utilisant la file d'attente multiniveaux. Le planificateur de threads choisit simplement le thread le plus prioritaire, le planificateur de processus est plus intelligent et utilise la file d'attente de commentaires.

Linux

  • Le planificateur de processus et de threads unifié, configurable, utilise par défaut CFS. Le planificateur utilise une métrique d'équité et utilise la priorité pour orienter la distribution de la CPU vers des processus plus prioritaires.
Lie Ryan
la source
3
Mais les processus Winoows ne sont pas des unités d'exécution; ce sont des conteneurs de ressources (y compris, si le processus est en cours d'exécution, au moins un thread). Faire une distinction entre la planification de processus et la planification de threads me semble erroné. Je pense que votre première source est soit trop simplifiée, soit obsolète, et vous en lisez peut-être trop dans l'entrée Wikipedia. La seule manière dont un processus interagit avec le planificateur est de fournir une priorité de base à ses threads.
Ian Ni-Lewis
1

Si vous vous référez au planificateur de noyau (et non à un planificateur de tâches périodique comme certains commentaires le suggèrent), Linux est assez simple: en termes de planification, Linux ne fait aucune différence entre les threads et les processus. Du point de vue du noyau, ce ne sont que des unités de planification; la différence repose sur le poids du commutateur de contexte. Ceci est parfois appelé un modèle de filetage un à un .

Comme il y a moins d'informations disponibles sur les internes de Windows, on peut en dire peu. Cependant, Windows a historiquement différencié les processus et les threads, il est donc plus probable qu'ils soient traités différemment en termes de planification.

C2H5OH
la source