Multitâche 26116 29713097 2008-05-18T22:12:28Z SRombauts 6198 /* Voir aussi */ [[Synchronisation (multitâches)]] En [[informatique]], un [[système d'exploitation]] est dit '''multitâche''' (en anglais multi-task) s'il permet d'exécuter, de façon apparemment simultanée, plusieurs [[programme informatique|programmes]] sur un [[ordinateur]]. On parle également de ''multiprogrammation''. Le terme multitâche intervient au niveau logique ([[système d'exploitation]]) et est indépendant du nombre de processeurs présents physiquement dans l'ordinateur ([[multiprocesseur]]). == Concept == La simultanéité apparente est le résultat de l'alternance rapide d'exécution des [[processus (informatique)|processus]] présents en [[Mémoire informatique|mémoire]]. Le passage de l'exécution d'un processus à un autre est appelé [[commutation de contexte]]. Ces commutations peuvent être initiées par les programmes eux-mêmes (multitâche coopératif) ou par le système d'exploitation lors d'événements externes (multitâche préemptif). == Historique == Le premier [[ordinateur]] '''multitâche''' dans le monde a été conçu par la firme [[Bull]] en [[1958]]. Il s'agissait du [[Gamma 60]]. Cet ordinateur ne possédait toutefois pas encore de [[langage de programmation]] ([[logiciel]], ''software'' en anglais) à la hauteur des performances du [[système d'exploitation]] ([[matériel informatique]], ''hardware'' en anglais). Les systèmes multitâches se sont ensuite répandus dans le courant des [[années 1960]] sous le nom de systèmes à [[temps partagé]]. Ils permettaient à plusieurs utilisateurs de travailler sur la même (grosse, selon les critères de l'époque) machine. == Multitâche coopératif == Le multitâche coopératif est une forme simple de multitâche où chaque [[processus (informatique)|processus]] doit explicitement permettre à une autre tâche de s'exécuter. Il a été utilisé, par exemple, dans les produits [[Microsoft Windows]] jusqu'à [[Windows 3.11]] ou dans [[Mac OS]] jusqu'à [[Mac OS 9]]. Cette approche simplifie l'architecture du système d'exploitation mais présente plusieurs inconvénients : * Si un des processus ne redonne pas la main à un autre processus, par exemple si le processus est [[bogue (informatique)|bogué]], le système entier peut s'arrêter. * Le partage des ressources (temps [[processeur|CPU]], mémoire, accès disque, etc.) peut être inefficace. * Le multitâche coopératif est une forme de [[couplage fort (programmation concurrente)|couplage fort]]. == Multitâche préemptif == Pour remédier à cette situation, les systèmes grand-public ont évolué pour utiliser une approche nommée «&nbsp;[[multitâche préemptif]]&nbsp;». <br />Dans un tel système, le processeur signale au système d'exploitation que le processus en cours d'exécution doit être mis en pause pour permettre l'exécution d'un autre processus. Le système doit alors sauver l'état du processus en cours (le compteur ordinal, les valeurs des registres)&nbsp;; le processus est placé dans une file d'attente ; lorsqu'il est en bout de file, son contexte d'exécution est restauré. À la différence du «&nbsp;multitâche coopératif&nbsp;», du point de vue des [[programme informatique|programme]]s préemptés, la [[commutation de contexte]] est transparente. L'AmigaOS est un système multitâche préemptif depuis sa naissance en 1985. D'autres systèmes d'exploitation le sont devenus comme Windows (avec Windows 2000 en 2000) et MacOS x en 2001. == Comparaison == Le [[multitâche préemptif]] est plus robuste que le multitâche coopératif&nbsp;: une tâche ne peut bloquer l'ensemble du système. Le système d'exploitation peut aussi utiliser plus efficacement les ressources disponibles, par exemple si des données sont disponibles via un [[périphérique (informatique)|périphérique]] d'entrée, le processus devant traiter ces données peut être immédiatement activé. <br /> De plus, une tâche en attente de données ne consommera pas de temps processeur avant que ses données ne soient réellement disponibles. Bien que, au départ, le multitâche ait été conçu pour permettre à plusieurs utilisateurs d'utiliser le même ordinateur, il est apparu très rapidement qu'il était très pratique même pour un seul utilisateur. Utiliser son [[traitement de texte]] favori tout en butinant sur le [[World Wide Web|Web]] est de nos jours une caractéristique incontournable. Une autre utilité du multitâche provient du fait qu'il est plus facile de concevoir et d'écrire plusieurs programmes simples, plutôt qu'un seul programme capable de tout faire, puis de les faire coopérer pour effectuer les tâches nécessaires. Les [[Algorithmique|algorithmes]] implémentant le multitâche ont été raffinés au cours du temps. Les systèmes modernes peuvent gérer des [[processus (informatique)|processus]] avec des '''priorités''' différentes ainsi que des ordinateurs comportant de un à quelques centaines de [[processeur]]s. La technologie des [[processus léger]]s (ou ''threads'' en anglais) a été permise grâce à la présence de [[Noyau (informatique)#Gestionnaire de mémoire|gestionnaires de mémoire]] évolués. Les processus légers partagent toute ou partie de la mémoire d'un processus existant. Ce partage permet, entre autres, une [[commutation de contexte]] plus rapide et un partage de données plus efficace entre les processus légers. En contrepartie, de tels programmes peuvent être plus complexes et peuvent se montrer difficiles à mettre au point. <!-- Mémoire virtuelle en Français =swap. C'est le partage de la mémoire avec les threads qui se pose au niveau du gestionnaire de mémoire, indépendemment du support physique utilisé. Il faut également éviter les jugements de valeurs sur les techno's. 'Une amélioration, souvent décriée... ' --> Une autre innovation clé a été l'introduction des niveaux de '''privilèges'''&nbsp;: les processus possédant un niveau de privilège bas ne peuvent pas effectuer certaines opérations, par exemple écrire sur des portions de mémoire vitales pour la sécurité du système. <!-- Hors sujet?? Indiquer plus clairement le lien avec le multitâche. --> Si un tel processus effectue une opération interdite, le programme est interrompu et un programme superviseur (souvent le [[système d'exploitation]]) préempte le processus en cours, puis l'arrête définitivement. Cette technique permet de créer des [[machine virtuelle (informatique)|machines virtuelles]] où le système « réel » [[émulation|émule]] le fonctionnement d'une ou plusieurs machines virtuelles, par exemple afin d'accroître la sécurité (une machine virtuelle ne peut pas interférer avec une autre machine virtuelle<!-- dans leur fonctionnement intrinsèque... notant que deux VM peuvent fort bien communiquer, à l'instar de deux noeuds d'un réseau -->). == Voir aussi == * [[Synchronisation (multitâches)]] * [[temps partagé]] * [[taux de multiprogrammation]] * [[Système temps réel]] {{portail informatique}} [[Catégorie:Système d'exploitation]] [[Catégorie:Programmation concurrente]] [[ca:Multitasca]] [[cs:Multitasking]] [[da:Multitasking]] [[de:Multitasking]] [[en:Computer multitasking]] [[es:Multitarea]] [[eu:Multiataza]] [[fa:چندکارگی]] [[fi:Moniajo]] [[hu:Többfeladatos]] [[id:Multitasking]] [[it:Multitasking]] [[ja:マルチタスク]] [[nl:Multitasking]] [[no:Multitasking]] [[pl:Wielozadaniowość]] [[pt:Multitarefa]] [[ru:Многозадачность]] [[simple:Multitasking]] [[sk:Multitasking]] [[sv:Multikörning]]