

En informatique , le multitâche désigne l' exécution simultanée de plusieurs tâches (ou processus ) sur une période donnée. De nouvelles tâches peuvent interrompre celles déjà en cours d'exécution avant leur achèvement, sans attendre leur fin. Ainsi, un ordinateur exécute des segments de plusieurs tâches de manière entrelacée, ces tâches partageant des ressources de traitement communes telles que l'unité centrale de traitement (CPU) et la mémoire vive . Le multitâche interrompt automatiquement le programme en cours d'exécution, en sauvegardant son état (résultats partiels, contenu de la mémoire et des registres de l'ordinateur) et en chargeant cet état sauvegardé pour un autre programme, auquel il transfère ensuite le contrôle. Ce « changement de contexte » peut être initié à intervalles réguliers ( multitâche préemptif ), ou le programme en cours d'exécution peut être programmé pour signaler au logiciel de supervision quand il peut être interrompu ( multitâche coopératif ).
Le multitâche ne nécessite pas l'exécution parallèle de plusieurs tâches simultanément ; il permet plutôt à plusieurs tâches de progresser sur une période donnée. Même sur les ordinateurs multiprocesseurs , le multitâche permet d'exécuter beaucoup plus de tâches qu'il n'y a de cœurs de processeur.
Le multitâche est une fonctionnalité courante des systèmes d'exploitation depuis au moins les années 1960. Il permet une utilisation plus efficace du matériel informatique : lorsqu'un programme attend un événement externe, comme une saisie utilisateur ou la fin d'un transfert d'entrée/sortie avec un périphérique, le processeur central peut continuer à être utilisé par un autre programme. Dans un système à temps partagé , plusieurs opérateurs humains utilisent le même processeur comme s'il leur était dédié, tandis qu'en arrière-plan, l'ordinateur gère plusieurs utilisateurs en exécutant simultanément leurs programmes respectifs. Dans les systèmes multiprogrammés , une tâche s'exécute jusqu'à ce qu'elle doive attendre un événement externe ou jusqu'à ce que le planificateur du système d'exploitation la déplace du processeur. Les systèmes temps réel, tels que ceux conçus pour contrôler des robots industriels, nécessitent un traitement rapide ; un même processeur peut être partagé entre les calculs de mouvement de la machine, les communications et l'interface utilisateur.
Les systèmes d'exploitation multitâches intègrent souvent des mécanismes permettant de modifier la priorité des tâches, afin que les tâches importantes bénéficient de plus de temps processeur que celles jugées moins importantes. Selon le système d'exploitation, une tâche peut correspondre à un programme d'application complet, ou être composée de plusieurs threads exécutant des portions du programme global.
Un processeur destiné à être utilisé avec des systèmes d'exploitation multitâches peut inclure un matériel spécial pour prendre en charge en toute sécurité plusieurs tâches, comme la protection de la mémoire et des anneaux de protection qui garantissent que le logiciel de supervision ne peut pas être endommagé ou détourné par des erreurs de programme en mode utilisateur.
Le terme « multitâche » est devenu un terme international, car le même mot est utilisé dans de nombreuses autres langues telles que l'allemand, l'italien, le néerlandais, le roumain, le tchèque, le danois et le norvégien.
le temps processeur était coûteux et les périphériques très lents. Lorsqu'un ordinateur exécutait un programme nécessitant l'accès à un périphérique, le processeur devait interrompre l'exécution des instructions du programme pendant que le périphérique traitait les données. Cette méthode était généralement très inefficace. La multiprogrammation est une technique informatique qui permet de charger et d'exécuter simultanément plusieurs programmes en mémoire, permettant ainsi au processeur de basculer rapidement entre eux. Ceci optimise l'utilisation du processeur en le maintenant actif dans l'exécution de tâches, ce qui est particulièrement utile lorsqu'un programme attend la fin d'opérations d'entrée/sortie.Le Bull Gamma 60 , conçu initialement en 1957 et commercialisé pour la première fois en 1960, fut le premier ordinateur conçu pour la multiprogrammation. Son architecture comportait une mémoire centrale et un distributeur de programmes alimentant jusqu'à vingt-cinq unités de traitement autonomes en code et en données, et permettant le fonctionnement simultané de plusieurs groupes.
Un autre ordinateur de ce type était le LEO III , commercialisé pour la première fois en 1961. Lors du traitement par lots , plusieurs programmes différents étaient chargés dans la mémoire de l'ordinateur, et le premier commençait à s'exécuter. Lorsque ce premier programme atteignait une instruction en attente d'un périphérique, le contexte de ce programme était mis de côté, et le deuxième programme en mémoire pouvait alors s'exécuter. Le processus se poursuivait jusqu'à ce que tous les programmes aient terminé leur exécution.
La multiprogrammation ne garantit pas l'exécution rapide d'un programme. En effet, le premier programme peut très bien fonctionner pendant des heures sans nécessiter l'accès à un périphérique. Comme aucun utilisateur n'attendait devant un terminal interactif, cela ne posait aucun problème : les utilisateurs remettaient un jeu de cartes perforées à un opérateur et revenaient quelques heures plus tard pour obtenir les résultats imprimés. La multiprogrammation réduisait considérablement les temps d'attente lors du traitement de plusieurs lots.
systèmes d'exploitation , est aujourd'hui connue sous le nom de multitâche coopératif. Bien qu'il soit désormais rarement utilisé dans les grands systèmes, hormis pour des applications spécifiques telles que CICS ou le sous-système JES2 , le multitâche coopératif était autrefois le seul mécanisme d'ordonnancement employé par Microsoft Windows et les anciens Mac OS pour permettre l'exécution simultanée de plusieurs applications. Le multitâche coopératif est encore utilisé aujourd'hui sur les systèmes RISC OS . Dans un système multitâche coopératif, où chaque processus cède régulièrement du temps aux autres, un programme mal conçu peut monopoliser tout le temps CPU, soit en effectuant des calculs complexes, soit en restant constamment en attente ; dans les deux cas, le système se bloque . Sur un serveur, ce risque rend l'ensemble du système extrêmement fragile.
multitâche préemptif
Kubuntu (KDE Plasma 5) : quatre bureaux virtuels exécutant plusieurs programmes simultanément. Le multitâche préemptif permet au système informatique de garantir plus efficacement à chaque processus une « tranche » régulière de temps d'exécution. Il permet également au système de traiter rapidement les événements externes importants, tels que les données entrantes, qui peuvent nécessiter l'attention immédiate d'un processus ou d'un autre. Les systèmes d'exploitation ont été développés pour tirer parti de ces capacités matérielles et exécuter plusieurs processus de manière préemptive. Le multitâche préemptif a été implémenté dans le moniteur PDP-6 et Multics en 1964, dans OS/360 MFT en 1967 et dans Unix en 1969. Il était disponible dans certains systèmes d'exploitation pour des ordinateurs aussi petits que le PDP-8 de DEC ; il constitue une fonctionnalité essentielle de tous les systèmes d'exploitation de type Unix , tels que Linux , Solaris et BSD et ses dérivés , ainsi que des versions modernes de Windows.
Le premier système d'exploitation multitâche préemptif disponible pour les particuliers était probablement OS-9 de Microware , proposé sur des ordinateurs basés sur le Motorola 6809, que le TRS-80 Color Computer 2 [ Tandy fournissait ensuite ce système d'exploitation en tant que mise à niveau pour les systèmes équipés d'un lecteur de disquettes . Sinclair QDOS, sur le Sinclair QL , suivit en 1984, mais sans grand succès. L'Amiga de Commodore sortit l'année suivante, offrant une combinaison de fonctionnalités multitâches et multimédias. Microsoft fit du multitâche préemptif une fonctionnalité essentielle de son système d'exploitation phare au début des années 1990, lors du développement de Windows NT 3.1 , puis de Windows 95. En 1988, Apple proposa A/UX , une alternative basée sur UNIX System V au Mac OS classique . En 2001, Apple opta pour Mac OS X , influencé par NeXTSTEP .
Un modèle similaire est utilisé dans Windows 9x et la famille Windows NT , où les applications 32 bits natives sont exécutées en multitâche préemptif. Les éditions 64 bits de Windows, pour les architectures x86-64 et Itanium , ne prennent plus en charge les anciennes applications 16 bits et offrent ainsi un multitâche préemptif pour toutes les applications compatibles.
Temps réel
Another reason for multitasking was in the design of real-time computing systems, where there are a number of possibly unrelated external activities needed to be controlled by a single processor system. In such systems a hierarchical interrupt system is coupled with process prioritization to ensure that key activities were given a greater share of available process time.
Multithreading
Threads were born from the idea that the most efficient way for cooperating processes to exchange data would be to share their entire memory space. Thus, threads are effectively processes that run in the same memory context and share other resources with their parent processes, such as open files. Threads are described as lightweight processes because switching between threads does not involve changing the memory context.
While threads are scheduled preemptively, some operating systems provide a variant to threads, named fibers, that are scheduled cooperatively. On operating systems that do not provide fibers, an application may implement its own fibers using repeated calls to worker functions. Fibers are even more lightweight than threads, and somewhat easier to program with, although they tend to lose some or all of the benefits of threads on machines with multiple processors.
Some systems directly support multithreading in hardware.
Memory protection
unité de gestion de la mémoire (MMU). Si un processus tente d'accéder à une adresse mémoire située en dehors de son espace mémoire, la MMU refuse la requête et signale au noyau qu'il doit prendre les mesures appropriées ; cela se traduit généralement par l'arrêt forcé du processus fautif. Selon la conception du logiciel et du noyau, ainsi que la nature de l'erreur, l'utilisateur peut recevoir un message d'erreur de violation d'accès, tel qu'une « erreur de segmentation ».Dans un système multitâche bien conçu et correctement implémenté, un processus donné ne peut jamais accéder directement à la mémoire appartenant à un autre processus. Une exception à cette règle est la mémoire partagée ; par exemple, dans le mécanisme de communication interprocessus System V, le noyau alloue de la mémoire partagée par plusieurs processus. De telles fonctionnalités sont fréquemment utilisées par les logiciels de gestion de bases de données comme PostgreSQL.
Des mécanismes de protection de la mémoire inadéquats, dus à des défauts de conception ou à de mauvaises implémentations, créent des failles de sécurité susceptibles d'être exploitées par des logiciels malveillants.
Échange de mémoire
L'utilisation d'un fichier ou d'une partition d'échange permet au système d'exploitation de fournir davantage de mémoire que celle physiquement disponible en conservant des portions de la mémoire principale dans un espace de stockage secondaire . Bien que le multitâche et l'échange de mémoire soient deux techniques totalement distinctes, elles sont très souvent utilisées conjointement, car l'échange de mémoire permet de charger plusieurs tâches simultanément. Généralement, un système multitâche autorise l'exécution d'un autre processus lorsque le processus en cours atteint un point où il doit attendre le rechargement d'une portion de mémoire depuis le stockage secondaire.
Programmation
Au fil des années, les systèmes multitâches ont été perfectionnés. Les systèmes d'exploitation modernes comprennent généralement des mécanismes détaillés pour la priorisation des processus, tandis que le multiprocesseur symétrique a introduit de nouvelles complexités et capacités.
multitâche préemptif
Le multitâche préemptif permet au système informatique de garantir plus efficacement à chaque processus une « tranche » régulière de temps d'exécution. Il permet également au système de traiter rapidement les événements externes importants, tels que les données entrantes, qui peuvent nécessiter l'attention immédiate d'un processus ou d'un autre. Les systèmes d'exploitation ont été développés pour tirer parti de ces capacités matérielles et exécuter plusieurs processus de manière préemptive. Le multitâche préemptif a été implémenté dans le moniteur PDP-6 et Multics en 1964, dans OS/360 MFT en 1967 et dans Unix en 1969. Il était disponible dans certains systèmes d'exploitation pour des ordinateurs aussi petits que le PDP-8 de DEC ; il constitue une fonctionnalité essentielle de tous les systèmes d'exploitation de type Unix , tels que Linux , Solaris et BSD et ses dérivés , ainsi que des versions modernes de Windows.
Le premier système d'exploitation multitâche préemptif disponible pour les particuliers était probablement OS-9 de Microware , proposé sur des ordinateurs basés sur le Motorola 6809, que le TRS-80 Color Computer 2 [ Tandy fournissait ensuite ce système d'exploitation en tant que mise à niveau pour les systèmes équipés d'un lecteur de disquettes . Sinclair QDOS, sur le Sinclair QL , suivit en 1984, mais sans grand succès. L'Amiga de Commodore sortit l'année suivante, offrant une combinaison de fonctionnalités multitâches et multimédias. Microsoft fit du multitâche préemptif une fonctionnalité essentielle de son système d'exploitation phare au début des années 1990, lors du développement de Windows NT 3.1 , puis de Windows 95. En 1988, Apple proposa A/UX , une alternative basée sur UNIX System V au Mac OS classique . En 2001, Apple opta pour Mac OS X , influencé par NeXTSTEP .
Un modèle similaire est utilisé dans Windows 9x et la famille Windows NT , où les applications 32 bits natives sont exécutées en multitâche préemptif. Les éditions 64 bits de Windows, pour les architectures x86-64 et Itanium , ne prennent plus en charge les anciennes applications 16 bits et offrent ainsi un multitâche préemptif pour toutes les applications compatibles.
Temps réel
Another reason for multitasking was in the design of real-time computing systems, where there are a number of possibly unrelated external activities needed to be controlled by a single processor system. In such systems a hierarchical interrupt system is coupled with process prioritization to ensure that key activities were given a greater share of available process time.
Multithreading
Threads were born from the idea that the most efficient way for cooperating processes to exchange data would be to share their entire memory space. Thus, threads are effectively processes that run in the same memory context and share other resources with their parent processes, such as open files. Threads are described as lightweight processes because switching between threads does not involve changing the memory context.
While threads are scheduled preemptively, some operating systems provide a variant to threads, named fibers, that are scheduled cooperatively. On operating systems that do not provide fibers, an application may implement its own fibers using repeated calls to worker functions. Fibers are even more lightweight than threads, and somewhat easier to program with, although they tend to lose some or all of the benefits of threads on machines with multiple processors.
Some systems directly support multithreading in hardware.
Memory protection
Dans un système multitâche bien conçu et correctement implémenté, un processus donné ne peut jamais accéder directement à la mémoire appartenant à un autre processus. Une exception à cette règle est la mémoire partagée ; par exemple, dans le mécanisme de communication interprocessus System V, le noyau alloue de la mémoire partagée par plusieurs processus. De telles fonctionnalités sont fréquemment utilisées par les logiciels de gestion de bases de données comme PostgreSQL.
Des mécanismes de protection de la mémoire inadéquats, dus à des défauts de conception ou à de mauvaises implémentations, créent des failles de sécurité susceptibles d'être exploitées par des logiciels malveillants.
Échange de mémoire
L'utilisation d'un fichier ou d'une partition d'échange permet au système d'exploitation de fournir davantage de mémoire que celle physiquement disponible en conservant des portions de la mémoire principale dans un espace de stockage secondaire . Bien que le multitâche et l'échange de mémoire soient deux techniques totalement distinctes, elles sont très souvent utilisées conjointement, car l'échange de mémoire permet de charger plusieurs tâches simultanément. Généralement, un système multitâche autorise l'exécution d'un autre processus lorsque le processus en cours atteint un point où il doit attendre le rechargement d'une portion de mémoire depuis le stockage secondaire.
Programmation
Au fil des années, les systèmes multitâches ont été perfectionnés. Les systèmes d'exploitation modernes comprennent généralement des mécanismes détaillés pour la priorisation des processus, tandis que le multiprocesseur symétrique a introduit de nouvelles complexités et capacités.