2010-11-11 2 views
1

J'ai essayé de comprendre la différence entre les deux car ils s'appliquent à différents algorithmes utilisés pour choisir les tâches à exécuter dans certains ordonnanceurs de CPU.Quelle est la différence entre un arbre noir rouge et une seule file d'attente?

Quelle est la différence entre une arborescence RB qui place le processus de temps le plus court nécessaire à gauche et choisit des nœuds de gauche à exécuter, et une file d'attente qui les place dans le premier ordre de travail le plus court?

Répondre

2

Une seule file d'attente a une complexité temporelle [1] de O (1) à la recherche car elle peut simplement faire apparaître le processus suivant à l'exécution. L'insertion a également O (1) car elle place le nouvel élément à la fin de la file d'attente. Ce genre d'ordonnanceur à tour de rôle a été utilisé, par ex. au début du noyau Linux. L'inconvénient était que toutes les tâches étaient exécutées à chaque fois dans le même ordre. Pour résoudre ce problème, une simple amélioration consiste à continuer à faire apparaître la tête de la file d'attente avec O (1) et à rechercher un emplacement approprié dans la file d'attente par insertion en priorité et/ou temps, avec O (n). Certains planificateurs gardent plusieurs files d'attente (ou même une file d'attente prioritaire), qui ont des temps de fonctionnement variables en fonction de l'implémentation et des besoins. D'autre part, l'arbre rouge-noir a une complexité temporelle de O (log n) pour obtenir le processus suivant et lors de l'insertion. L'idée principale d'un arbre rouge-noir est qu'il se maintient équilibré à chaque opération, restant ainsi efficace sans autres opérations d'optimisation. Une file d'attente prioritaire peut également être implémentée en utilisant un arbre rouge-noir en interne.

Un bon point de départ sur les planificateurs (Linux) est le CFS article sur le site d'IBM, qui a aussi un bon ensemble de références.

Questions connexes