{"id":44,"date":"2026-02-23T03:49:51","date_gmt":"2026-02-23T02:49:51","guid":{"rendered":"https:\/\/donatopatino.com\/?p=44"},"modified":"2026-02-23T03:49:51","modified_gmt":"2026-02-23T02:49:51","slug":"les-semaphores-dans-un-systeme-dexploitation","status":"publish","type":"post","link":"https:\/\/donatopatino.com\/?p=44","title":{"rendered":"Les s\u00e9maphores dans un syst\u00e8me d\u2019exploitation"},"content":{"rendered":"\n<p>Dans un syst\u00e8me d\u2019exploitation, les s\u00e9maphores sont des m\u00e9canismes de synchronisation utilis\u00e9s pour g\u00e9rer l\u2019acc\u00e8s concurrent \u00e0 des ressources partag\u00e9es. Ils sont indispensables dans les syst\u00e8mes multit\u00e2ches, o\u00f9 plusieurs processus ou threads s\u2019ex\u00e9cutent en parall\u00e8le.<\/p>\n\n\n\n<p>Un s\u00e9maphore est une variable prot\u00e9g\u00e9e associ\u00e9e \u00e0 une file d\u2019attente. Il repose sur deux op\u00e9rations atomiques : <strong>P (wait)<\/strong> et <strong>V (signal)<\/strong>. L\u2019op\u00e9ration <em>wait<\/em> d\u00e9cr\u00e9mente la valeur du s\u00e9maphore. Si cette valeur devient n\u00e9gative, le processus est bloqu\u00e9 jusqu\u2019\u00e0 ce qu\u2019une ressource soit lib\u00e9r\u00e9e. L\u2019op\u00e9ration <em>signal<\/em> incr\u00e9mente la valeur du s\u00e9maphore et r\u00e9veille \u00e9ventuellement un processus en attente.<\/p>\n\n\n\n<p>On distingue deux types principaux de s\u00e9maphores :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Les s\u00e9maphores binaires<\/strong>, utilis\u00e9s pour assurer l\u2019exclusion mutuelle.<\/li>\n\n\n\n<li><strong>Les s\u00e9maphores comptants<\/strong>, permettant de g\u00e9rer plusieurs ressources identiques.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Exemple pratique 1 : exclusion mutuelle (s\u00e9maphore binaire)<\/strong><\/h2>\n\n\n\n<p>Supposons que deux processus acc\u00e8dent \u00e0 une variable partag\u00e9e.<\/p>\n\n\n\n<p class=\"has-background-color has-white-background-color has-text-color has-background has-link-color wp-elements-40d89521b026785ca4a8224a3ed75559\">Semaphore mutex = 1<\/p>\n\n\n\n<p class=\"has-background-color has-white-background-color has-text-color has-background has-link-color wp-elements-e457fb5a0dc3bc95d04a79105a743466\">Processus P1:<br>wait(mutex)<br>\/\/ section critique<br>modifier_variable_partagee()<br>signal(mutex)<\/p>\n\n\n\n<p class=\"has-background-color has-white-background-color has-text-color has-background has-link-color wp-elements-c7df5da0f0437b7f5f1825e728f9553b\">Processus P2:<br>wait(mutex)<br>\/\/ section critique<br>modifier_variable_partagee()<br>signal(mutex)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Exemple pratique 2 : gestion de ressources multiples (s\u00e9maphore comptant)<\/strong><\/h2>\n\n\n\n<p>Imaginons un syst\u00e8me disposant de <strong>3 imprimantes partag\u00e9es<\/strong>.<\/p>\n\n\n\n<p class=\"has-background-color has-white-background-color has-text-color has-background has-link-color wp-elements-cb1be531858261bbf805709b4e856f25\">Semaphore imprimantes = 3<\/p>\n\n\n\n<p class=\"has-background-color has-white-background-color has-text-color has-background has-link-color wp-elements-98410d61083fb99ac513da10a6c655a4\">Processus utilisateur:<br>wait(imprimantes)<br>\/\/ utilisation d\u2019une imprimante<br>imprimer_document()<br>signal(imprimantes)<\/p>\n\n\n\n<p>Le s\u00e9maphore autorise jusqu\u2019\u00e0 trois processus simultan\u00e9s. Les autres sont bloqu\u00e9s jusqu\u2019\u00e0 la lib\u00e9ration d\u2019une imprimante.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Exemple pratique 3 : synchronisation entre processus<\/strong><\/h2>\n\n\n\n<p>Un processus producteur g\u00e9n\u00e8re des donn\u00e9es et un consommateur les traite.<\/p>\n\n\n\n<p class=\"has-black-color has-white-background-color has-text-color has-background has-link-color wp-elements-da7f8ba8a1d85dc5f2a42175d9175dff\">Semaphore vide = 1<br>Semaphore plein = 0<\/p>\n\n\n\n<p class=\"has-black-color has-white-background-color has-text-color has-background has-link-color wp-elements-73671505502ddc86b15b4b421b9f89ef\">Producteur:<br>produire_donnee()<br>wait(vide)<br>deposer_donnee()<br>signal(plein)<\/p>\n\n\n\n<p class=\"has-black-color has-white-background-color has-text-color has-background has-link-color wp-elements-25464047dc53e1163fa52a1bb67fc314\">Consommateur:<br>wait(plein)<br>retirer_donnee()<br>signal(vide)<br>consommer_donnee()<\/p>\n\n\n\n<p>Ce sch\u00e9ma garantit que le consommateur ne tente pas de lire une donn\u00e9e inexistante.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p>Les s\u00e9maphores permettent d\u2019\u00e9viter les conditions de course et d\u2019assurer une synchronisation correcte entre processus. Bien utilis\u00e9s, ils garantissent la coh\u00e9rence et la s\u00e9curit\u00e9 des acc\u00e8s aux ressources partag\u00e9es, mais une mauvaise gestion peut conduire \u00e0 des blocages ou des interblocages.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans un syst\u00e8me d\u2019exploitation, les s\u00e9maphores sont des m\u00e9canismes de synchronisation utilis\u00e9s pour g\u00e9rer l\u2019acc\u00e8s concurrent \u00e0 des ressources partag\u00e9es. Ils sont indispensables dans les syst\u00e8mes multit\u00e2ches, o\u00f9 plusieurs processus ou threads s\u2019ex\u00e9cutent en parall\u00e8le. Un s\u00e9maphore est une variable prot\u00e9g\u00e9e associ\u00e9e \u00e0 une file d\u2019attente. Il repose sur deux op\u00e9rations atomiques : P (wait) [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-44","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/donatopatino.com\/index.php?rest_route=\/wp\/v2\/posts\/44","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/donatopatino.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/donatopatino.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/donatopatino.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/donatopatino.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=44"}],"version-history":[{"count":1,"href":"https:\/\/donatopatino.com\/index.php?rest_route=\/wp\/v2\/posts\/44\/revisions"}],"predecessor-version":[{"id":45,"href":"https:\/\/donatopatino.com\/index.php?rest_route=\/wp\/v2\/posts\/44\/revisions\/45"}],"wp:attachment":[{"href":"https:\/\/donatopatino.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=44"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/donatopatino.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=44"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/donatopatino.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=44"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}