La gestion des processus dans les systèmes d'exploitation implique l'allocation des ressources processeur et la planification des processus. L'introduction des threads vise à réduire les coûts de communication et à améliorer le degré de concurrence, en séparant l'allocation indépendante des ressources de l'ordonnancement.
Pour la gestion des sections critiques, des méthodes matérielles comme les instructions TSL et XCHG sont essentielles. Voici une implémentation logicielle modifiée de TSL :
boolean verrou;
boolean TestAndSet(boolean *refVerrou) {
boolean ancien = *refVerrou;
*refVerrou = true;
return ancien;
}
while (TestAndSet(&verrou));
// Accès à la section critique
verrou = false;
L'instruction XCHG échange des valeurs pour contrôler l'accès :
boolean verrou = false;
processus Pi {
boolean temp = true;
repeat Swap(verrou, temp) until temp = false;
// Section critique
verrou = false;
}
Les verrous tournants, basés sur TSL ou XCHG, sont couramment utilisés dans les noyaux pour la gestion des sections critiques, mais rarement au niveau utilisateur en raison de problèmes d'efficacité due à l'attente active et aux inversions de priorité.
Les mécanismes de communication inter-processus incluent la communication par tubes, implémentée via le système de fichiers, ainsi que la mémoire partagée, les signaux et les sockets. Les sockets permettent la communication réseau en utilisant des paramètres tels que l'adresse IP, le protocole de transport (TCP ou UDP) et le numéro de port.
La planification des processus nécessite de distinguer les processus liés au CPU et ceux liés aux E/S. Attribuer une priorité plus élevée aux processus liés aux E/S optimise l'utilisation des ressources. La prédiction des comportements, par exemple avec des algorithmes de vieillissement, aide à anticiper les actions futures des processus.
La mémoire virtuelle avec pagination multiniveau offre des avantages tels que la réduction de la fragmentation, mais peut entraîner une surcharge des tables de pages. La taille des pages influence directement l'utilisation du disque et l'efficacité des E/S : des pages plus petites améliorent l'utilisation, tandis que des pages plus grandes augmentent l'efficacité des E/S.
Les systèmes de fichiers UNIX classiques utilisent des inodes pour stocker les métadonnées. Les liens physiques partagent le même inode, mais créent des entrées distinctes dans la table d'ouverture des fichiers système. Les permissions d'accès sont vérifiées lors de l'ouverture (via l'inode) et de la lecture (via les indicateurs dans la table d'ouverture).
Les conditions nécessaires pour l'interblocage sont l'exclusion mutuelle, l'attente et la détention, la non-préemption et l'attente circulaire. L'allocation statique des ressources peut rompre la condition d'attente et de détention.
La mémoire virtuelle et la technologie d'échange diffèrent : la mémoire virtuelle traite les processus par pages ou segments, permettant l'exécution même si la mémoire requise dépasse la mémoire libre, tandis que l'échange traite les processus par unité et nécessite suffisamment de mémoire libre pour désuspendre.
Les avantages de la programmation concurrente incluent l'exécution parallèle des E/S sur les systèmes monoprocesseur et le calcul accéléré sur les systèmes multiprocesseur, simplifiant ainsi la conception des programmes.
Les problèmes Belady surviennent avec certains algorithmes de remplacement de pages, où l'augmentation des cadres de page peut augmenter le taux de défauts de page.
L'introduction des threads vise à réduire les coûts d'espace et de temps des processus, à diminuer les coûts de communication et à augmenter le degré de concurrence.