arborescente d'hiérarchie de processus. Un processus père peut lancer plusieurs
processus fils (p. ex. la fonction système fork sous Unix) qui à leur tour peuvent
lancer des processus fils, etc. Ces processus doivent ensuite pouvoir communiquer
des informations entre eux. Le système doit également gérer le chargement, le
déchargement de processus en mémoire. Il doit pouvoir les commuter sans perte du
flot d'exécution intra-processus. Il doit aussi décider le l'ordre d'exécution, la priorité
et le temps alloué à chaque processus (quantum) avant de le suspendre, p. ex..Pour
cela, il utilise un ordonnanceur qui prend les décisions quant à quel processus
relancer, et un noyau d'une taille minimale qui s'occupe de gérer les interruptions et
l'occupation en mémoire des processus.
- ordonnancement circulaire
- ordonnancement avec priorité
Les Threads (processus léger)
Jusqu'à maintenant nous avons considéré qu'un processus était l'équivalent d'un
programme comprenant trois parties : les données statiques, les instructions et la pile
; le tout dans un bloc contigu de mémoire. Souvent, il existe une quatrième partie, qui
s'appelle le tas, et qui est une zone de mémoire de laquelle le programme peut
puiser de façon non organisée des blocs de mémoire, contrairement à la pile, dans
laquelle on ne peut qu'empiler ou dépiler des objets par le dessus. C'est là
notamment que des langages de haut niveau puisent les ressources lorsqu'ils font
appel à malloc() en C, ou encore new en C++ et Java. Le processus dispose en plus
d'un nombre d'autres ressources (p. ex. le contenu des registres, les fichiers ouverts,
...) qui résident dans la table de description du processus gérée par le système.
Lorsque plusieurs utilisateurs lancent une même application sur une même machine,
il est important de distinguer toutes ces zones mémoire, et il est donc important de
pouvoir disposer de plusieurs instances (processus) d'un même programme. En
revanche, il peut être tout aussi utile de faire effectuer des tâches en parallèle par un
processus principal, tout en partageant certaines ressources mémoire entre le
processus parent et ses fils, surtout que cela facilite grandement le partage et
l'échange de données que, d'un point de vue système, le changement de contexte
demande beaucoup moins de surcharge. Dans ce cas, on parle de threads. Chaque
thread est un processus, du point de vue du système d'exploitation, mais il ne
dispose uniquement de sa propre pile. Tous les autres ressources (zone statique,
tas, etc.) sont partagées avec le processus parent et les fils de celui-ci.