Article de reference

multitâche informatique

Les systèmes d'exploitation de bureau modernes sont capables de gérer simultanément un grand nombre de processus différents. Cette capture d'écran montre Fedora Linux fonctionna...

Les systèmes d'exploitation de bureau modernes sont capables de gérer simultanément un grand nombre de processus différents. Cette capture d'écran montre Fedora Linux fonctionnant simultanément avec l' environnement de bureau KDE Plasma 6 , Firefox , KCalc , le calendrier intégré, GNU nano , GIMP et le lecteur multimédia VLC .
Le multitâche de Microsoft Windows 1.01, sorti en 1985, est ici illustré par l'exécution des programmes MS-DOS Executive et Calculator.

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

Une autre raison du multitâche résidait dans la conception des systèmes informatiques en temps réel , où un certain nombre d'activités externes, potentiellement sans lien entre elles, devaient être contrôlées par un seul processeur. Dans de tels systèmes, un système d'interruptions hiérarchique est associé à une priorisation des processus afin de garantir que les activités clés bénéficient d'une part plus importante du temps de traitement disponible .

Multithreading

Les threads sont nés de l'idée que le moyen le plus efficace pour des processus coopérants d'échanger des données consiste à partager l'intégralité de leur espace mémoire. Ainsi, les threads sont en réalité des processus qui s'exécutent dans le même contexte mémoire et partagent d'autres ressources avec leurs processus parents , telles que les fichiers ouverts. Les threads sont qualifiés de processus légers car le passage d'un thread à l'autre n'implique pas de modification du contexte mémoire.

Alors que les threads sont planifiés de manière préemptive, certains systèmes d'exploitation proposent une variante, appelée fibres , qui sont planifiées de manière coopérative. Sur les systèmes d'exploitation ne fournissant pas de fibres, une application peut implémenter ses propres fibres en appelant de manière répétée des fonctions de travail. Les fibres sont encore plus légères que les threads et un peu plus faciles à programmer, bien qu'elles aient tendance à perdre tout ou partie des avantages des threads sur les machines multiprocesseurs .

Certains systèmes prennent directement en charge le multithreading au niveau matériel .

Protection de la mémoire

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.