Comprendre la multiprogrammation
Comprendre la multiprogrammation
La multiprogrammation est une forme rudimentaire de traitement parallèle dans laquelle plusieurs programmes sont
s'exécuter en même temps sur un uniprocesseur. Puisqu'il n'y a qu'un seul processeur, il ne peut y avoir de vrai
exécution simultanée de différents programmes. Au lieu de cela, le système d'exploitation exécute une partie de l'un
programme, puis une partie d'un autre, et ainsi de suite. Pour l'utilisateur, il semble que tous les programmes s'exécutent à
le même temps.
La multiprogrammation informatique est l'allocation d'un système informatique et de ses ressources à plus
qu'une application, un travail ou un utilisateur simultané ("programme" dans cette nomenclature).
Au départ, cette technologie a été recherchée afin d'optimiser l'utilisation d'un système informatique, puisque le temps
et les ressources de traitement étaient souvent gaspillées lorsqu'un seul travail attendait une interaction humaine ou
autres opérations d'entrée/sortie de données.
La capacité de multiprogrammation a été développée comme une fonctionnalité des systèmes d'exploitation à la fin des années 1950.
et est devenu d'usage courant dans l'informatique de grande taille au milieu à la fin des années 1960. Cela a suivi le
développement de systèmes matériels qui possédaient la logique de circuit requise et les ensembles d'instructions pour
faciliter le transfert de contrôle entre le système d'exploitation et un ou plusieurs indépendants
applications, utilisateurs ou flux de travail.
Dans ce contexte, le mot racine "programme" ne fait pas nécessairement référence à une application compilée,
plutôt, tout ensemble de commandes soumis à l'exécution par un utilisateur ou un opérateur. Cela pourrait inclure un
script ou flux de contrôle des travaux et tous les appels inclus à des instructions macro, système
modules d'applications ou utilitaires. Une session utilisateur entière, interactive et connectée peut être
considéré comme un "programme" dans ce sens.
Un programme comprend généralement de nombreuses tâches, une tâche étant un groupe relativement petit de
instructions de traitement qui, ensemble, réalisent une étape logique définissable dans l'achèvement d'un travail
ou l'exécution d'un programme d'application fonctionnant en continu. Une tâche se termine fréquemment par quelque chose
demande nécessitant le déplacement de données, une opportunité pratique permettant à un autre programme d'avoir
ressources système, en particulier le temps CPU.
Dans le multiprogrammation, l'exécution concurrente (partage du processeur) est réalisée lorsque le
le système d'exploitation identifie les opportunités d'interrompre le traitement d'un programme entre
tâches (par exemple, lorsqu'il attend une saisie / sortie) et transférer le contrôle du processus à un autre programme
(application, emploi ou utilisateur). Dans une large mesure, la capacité d'un système à partager ses ressources
équitablement²ou selon certaines priorités²dépend du design des programmes
être géré et à quelle fréquence ils peuvent être interrompus.
Multitâche
En informatique, le multitâche est une méthode où plusieurs tâches, également appelées processus, partagent
ressources de traitement courantes telles qu'un processeur. Dans le cas d'un ordinateur avec un seul processeur, uniquement
une tâche est dite en cours d'exécution à tout moment, ce qui signifie que le processeur exécute activement
Les instructions pour cette tâche. Le multitâche résout le problème en planifiant quelle tâche peut être la
un en cours d'exécution à tout moment donné, et quand une autre tâche en attente a son tour. L'acte de réaffecter
un processeur d'une tâche à une autre s'appelle un changement de contexte. Lorsque des changements de contexte se produisent
assez fréquemment, l'illusion de parallélisme est atteinte. Même sur des ordinateurs avec plus d'un
Le CPU (appelé machines multiprocesseurs), le multitâche permet d'exécuter beaucoup plus de tâches que là
sont des processeurs.
Les systèmes d'exploitation peuvent adopter l'une des nombreuses stratégies de planification différentes, qui tombent généralement
Dans les systèmes de multiprogrammation, la tâche en cours s'exécute jusqu'à ce qu'elle effectue une opération.
cela nécessite d'attendre un événement externe (par exemple, la lecture d'une bande) ou jusqu'à ce que l'ordinateur
le planificateur échange de force la tâche en cours d'exécution hors du processeur. Les systèmes de multiprogrammation sont
Dans les systèmes de partage de temps, la tâche en cours est tenue de céder le processeur, soit volontairement
ou par un événement externe tel qu'une interruption matérielle. Les systèmes de partage de temps sont conçus pour
permettre à plusieurs programmes de s'exécuter apparemment simultanément. L'expression 'partage de temps'
était généralement utilisé pour désigner des ordinateurs partagés par des utilisateurs interactifs à des terminaux, tels que
Le terme partage de temps n'est plus couramment utilisé, ayant été remplacé par
simplement le multitâche, et par l'avènement des ordinateurs personnels et des stations de travail plutôt que
systèmes interactifs partagés.
Les systèmes d'exploitation ont été développés pour tirer parti de ces capacités matérielles et fonctionner
plusieurs processus de manière préemptive. Par exemple, le multitâche préemptif a été mis en œuvre dans le
la première version de Unix [1] en 1969, et est standard dans les systèmes d'exploitation Unix et semblables à Unix,
y compris Linux, Solaris et BSD avec ses dérivés.
Parce qu'un système multitâche coopératif repose sur le fait que chaque processus abandonne régulièrement du temps pour
d'autres processus sur le système, un programme mal conçu peut consommer tout le temps CPU
pour lui-même ou provoquer le blocage complet du système. Dans un environnement serveur, c'est un risque qui rend
le réseau est fragile et délicat. Tous les logiciels doivent être évalués et approuvés pour une utilisation dans un test
environnement avant d'être installé sur le serveur principal, ou l'ensemble du réseau soit ralentit
ou s'arrête lorsqu'un programme sur le serveur se comporte mal.
Multithreading
Les ordinateurs multithreading ont un support matériel pour exécuter efficacement plusieurs threads. Ces
se distinguent des systèmes de multiprtype de traitement (comme les systèmes multicœurs) en ce que les fils
doivent partager les ressources d'un seul cœur : les unités de calcul, les caches CPU et le
mémoire cache de traduction (TLB). Là où les systèmes de multiprocesseurs incluent plusieurs complet
les unités de traitement, le multithreading vise à accroître l'utilisation d'un seul noyau en tirant parti de
le parallélisme au niveau des threads ainsi que le parallélisme au niveau des instructions. Comme les deux techniques sont complémentaires,
ils sont parfois combinés dans des systèmes avec plusieurs CPU multithread et dans des CPU avec
cœurs multithreading multiples.
Avantages
1. Si un fil subit beaucoup de manques de cache, les autres fils peuvent continuer, en profitant
des ressources informatiques inutilisées, ce qui peut ainsi conduire à une exécution globale plus rapide, car
ces ressources auraient été inoccupées si un seul fil d'exécution avait été exécuté.
2. Si un fil ne peut pas utiliser toutes les ressources de calcul du CPU (car les instructions
dépendre des résultats de chacun), faire tourner un autre thread permet de ne pas les laisser inactifs.
3. Si plusieurs threads travaillent sur le même ensemble de données, ils peuvent en fait partager leur cache,
menant à une meilleure utilisation du cache ou à une synchronisation de ses valeurs.
Inconvénients
1. Plusieurs threads peuvent interférer les uns avec les autres lorsqu'ils partagent des ressources matérielles telles que
mémoire cachée ou tampons de traduction (TLBs).
Les temps d'exécution d'un seul fil ne s'améliorent pas mais peuvent se dégrader, même lorsque seul
un fil est en cours d'exécution. Cela est dû à des fréquences plus lentes et/ou à un pipeline supplémentaire
étapes nécessaires pour accommoder le matériel de commutation de fils.
3. Le support matériel pour le multithreading est plus visible pour le logiciel, nécessitant donc plus
des changements tant dans les programmes d'application que dans les systèmes d'exploitation que le multiprocesseur.
Multiprocessing
Le traitement multiprocesseur est l'utilisation de deux unités centrales de traitement (CPU) ou plus au sein d'un seul
système informatique. Le terme fait également référence à la capacité d'un système à supporter plus d'un
processeur et/ou la capacité d'allouer des tâches entre eux.[1] Il existe de nombreuses variations sur cela
le thème de base, et la définition du multiprocessus peut varier selon le contexte, principalement en fonction de
comment les CPU sont définis (plusieurs cœurs sur une seule puce, plusieurs puces dans un seul paquet, plusieurs
packages dans une unité système, etc.).
Le multiprocessus fait parfois référence à l'exécution de plusieurs processus logiciels concurrents dans un
système par opposition à un seul processus à un instant donné. Cependant, les termes multitâche ou
la multiprogrammation est plus appropriée pour décrire ce concept, qui est principalement mis en œuvre
dans le logiciel, tandis que le multiprocédage est plus approprié pour décrire l'utilisation de plusieurs
processeurs matériels. Un système peut être à la fois multiprocessus et multiprogrammation, seulement l'un des
deux, ou aucun des deux.
Multiprocessing symétrique
En informatique, le multiprocesseur symétrique ou SMP implique un matériel informatique multiprocesseur
architecture où deux processeurs identiques ou plus sont connectés à une seule mémoire principale partagée
mémoire et sont contrôlés par une seule instance de système d'exploitation. Les systèmes multiprocesseurs les plus courants aujourd'hui
utiliser une architecture SMP. Dans le cas des processeurs multi-cœurs, l'architecture SMP s'applique à
les cœurs, les traitant comme des processeurs séparés. Les processeurs peuvent être interconnectés par des bus,
interrupteurs en croix ou réseaux maillés sur puce. Le goulet d'étranglement dans l'évolutivité des SMP utilisant
les bus ou les commutateurs de barres transversales sont la bande passante et la consommation d'énergie de l'interconnexion parmi
les différents processeurs, la mémoire et les ensembles de disques. Les architectures en maillage évitent cela.
goulots d'étranglement, et fournir une évolutivité presque linéaire à des nombres de processeurs beaucoup plus élevés au prix de
de programmabilité
Des défis de programmation sérieux subsistent avec ce type d'architecture car cela nécessite deux
modes de programmation distincts, un pour les processeurs eux-mêmes et un pour l'interconnexion
entre les CPU. Un langage de programmation unique devrait être capable non seulement de partitionner
la charge de travail, mais aussi comprendre la localité de la mémoire, qui est sévère dans un système basé sur un maillage
architecture.
Les systèmes SMP permettent à n'importe quel processeur de travailler sur n'importe quelle tâche peu importe où se trouvent les données pour cette tâche.
situé en mémoire, à condition que chaque tâche du système ne soit pas en cours d'exécution sur deux ou plusieurs
processeurs en même temps ; avec un support approprié du système d'exploitation, les systèmes SMP peuvent facilement
déplacer les tâches entre les processeurs pour équilibrer efficacement la charge de travail.
Multiprocessing asymétrique
Le traitement multiprocesseur asymétrique, ou AMP, était une solution logicielle temporaire pour gérer plusieurs unités centrales de traitement.
avant que le traitement multiprocesseur symétrique, ou SMP, ne soit disponible
Le multiprocessus signifie plus d'un CPU dans un système informatique. Le CPU est l'unité arithmétique et
moteur logique qui exécute des applications utilisateur ; une interface d'E/S telle qu'un GPU, même si c'est
implémenté à l'aide d'un processeur embarqué, ne constitue pas un CPU car il ne fonctionne pas
le programme d'application de l'utilisateur. Avec plusieurs CPU, plus d'une application utilisateur peut s'exécuter à
au même moment. Tous les processeurs ont le même jeu d'instructions en mode utilisateur, donc un travail en cours peut être