Disussions liées au livre Systèmes d'exploitation paru chez Pearson Education France.
Vous n'êtes pas identifié.
Suite à des abus constatés et provoqués par des connexions de "robots", l'enregistrement de nouveaux utilisateurs est temporairement suspendu. Merci de contacter l'administrateur du site pour s'abonner au forum.
Pages: 1
Bonjour à tous,
Comment peut-on utiliser les sémaphores avec des instructions spéciales telles " Test And Set "?
Salutations...
Hors ligne
Bonjour,
Pourriez-vous être plus précis dans votre question ? TAS est typiquement une instruction en langage machine tandis que le sémaphore est une structure de données fourni par l'OS et opérant à des niveaux d'abstraction plus élevés (langages de programmation de plus haut niveau). Les deux ont donc peu de chances de co-exister.
Ou souhaitez-vous savoir comment implanter des sémaphores avec des instructions de type TAS ?
Bart Lamiroy
Hors ligne
Bonjour,
Exactement, c'est ça ce que je veux le savoir.
Salutations...
Hors ligne
Si vous souhaitez une réponse technique précise, le mieux est de regarder les codes sources du noyau Linux, par exemple, et de la libC pour avoir des exemples précis de mise en oeuvre qui prennent en considération tous les aspects du problème, intégrés dans les contraintes réelles d'un OS opérationnel.
Sur le principe :
- Le système gère un ensemble de structures de données potentiellement partagées par différents processus et que l'on appelle sémaphores. Cette structure de données comporte notamment un champ de gestion d'accès exclusif (mutex)
- Lorsqu'un processus fait appel à la bibliothèque système ad hoc fournissant les fonctions de gestion des sémaphores. Celle-ci, après les vérifications d'existence et de droits d'accès effectuées, tente de s'octroyer un accès exclusif à la ressource sémaphore en tentant de mettre le mutex à 0 (s'il n'y est pas déjà) avec une opération de type TSL ou TAS. Soit l'opération réussit, et le traitement du sémaphore continue. Soit elle échoue. Si elle échoue, elle retente d'en acquérir l'exclusivité. Ceci peut être fait en attente pseudo-active.
- Une fois l'exclusivité obtenue, si le traitement consiste à décrémenter le sémaphore, ceux cas se présentent :
a/ le sémaphore vaut plus que 0, et le décrément s'opère sans tarder et un appel à TSL ou TAS rend le mutex.
b/ le sémaphore vaut 0, auquel cas on enregistre dans la structure de données interne que le processus est en attente sur le sémaphore, on demande à l'ordonnanceur de mettre le processus en sommeil, et on libère le mutex avec TSL ou TAS, en positionnant les valeurs ad hoc pour que le processus reprenne au niveau de la vérification du mutex.
- Si le traitement consiste à incrémenter le sémaphore, on incrémente, et on vérifie si d'éventuels processus sont en attente sur le sémaphore. On demande à l'ordonnanceur de les réveiller et on libère le mutex avec un TSL ou TAS.
Bart Lamiroy
Hors ligne
Pages: 1