Yhteinen poissulkeminen

Muteksi ( Englanti  : poissulkevuuden , poissulkeminen ) on synkronointi primitiivinen käytetty ohjelmoinnissa tietokoneissa estämään resursseja jaetaan järjestelmän käyttämisen samanaikaisesti. Sen toteutus vaihtelee järjestelmän mukaan (keskeytyspeite, lukeminen / kirjoittaminen yhdessä jaksossa jne.)

Nämä algoritmit mahdollistavat tietojen pääsyn säätämisen esimerkiksi sallimalla vain yhden rutiinin pääsyn siihen kerrallaan.

Määritelmä

Mutex MMS on synkronointi primitiivinen käytetään tietokonetta ohjelmointi estää jaettuja resursseja järjestelmän käyttämisen samanaikaisesti.

Jotkut algoritmit käyttävät tilaa komennon suorittamiseen: muteksien on tiedettävä, ovatko kyseiset ohjelmat varattu vai ovatko ne valmiit ja ovat valmiustilassa ( odota ). Tällaisia ​​algoritmeja ovat esimerkiksi:

Suurimmalla osalla mutexeista on sivuvaikutuksia, esimerkiksi semaforit (mutex laskurin kanssa), jotka voivat estää suorituksen, luoda pullonkauloja tai jopa jättää täyttämättä roolinsa sallimalla silti pääsyn suojattuihin tietoihin. Toinen vaikutus on resurssien täydellinen esto, ellei niitä käyttänyt ohjelma ole ilmoittanut järjestelmälle, että se ei enää tarvitse niitä.

Lukitus

Umpikuja (Englanti umpikuja ) tapahtuu esimerkiksi silloin, kun lanka T1 oli jo hankkinut resurssi R1 pyytää pääsyä resurssiin R2, kun taas lanka T2, joka on jo hankittu resurssi R2, Sovelluksen käyttö resurssien R1. Molemmat ketjut odottavat sitten toisen omistaman resurssin vapauttamista. Siksi tilanne on tukossa.

Niiden välttämiseksi on olemassa useita menetelmiä:

Umpikuja voi tapahtua myös, jos yksi ketju pyytää pääsyä jo hankittuun resurssiin, jotkut toteutukset, kuten Linuxin "nopea" mykistys, estävät ketjun. Toteutus voi käsitellä tätä tilannetta uudelleenkäynnistetyllä mutexilla tai havaitsemalla tämän tilanteen ja ilmoittamalla virheestä.

Umpikuja ei rajoitu synkronointia perusalkioiden kuten mutexes, se voi tapahtua myös etusijalla peruutukset osana aikataulutus tehtäviä.

Todellinen ongelma: Mars Pathfinder

Vuonna 1997 Mars Pathfinder -matkalla oli ongelma, kun robotti oli jo Marsilla . Jonkin ajan kuluttua tiedot menetetään järjestelmällisesti. Insinöörit löysivät sitten virheen, joka liittyi useiden tehtävien synkronointiin. Syytetyt tekijät olivat seuraavat:

Joskus sattui, että kirjoittaminen (matala prioriteetti) omisti muteksen. Bussihallinta (korkea prioriteetti) odotti tätä mykistystä. Tehtävien vaihtaminen jätti sitten viestintärutiinin (keskiprioriteetti) käynnissä. Tänä aikana mykistys pysyi estettynä, koska resurssit kohdennettiin matalan prioriteetin rutiinille. Väylän hallintaa ei sen vuoksi voitu enää suorittaa, ja tietyn odotusajan jälkeen (insinöörien valvontakoiran asettama suoja ) järjestelmä suoritti uudelleenkäynnistyksen. Tällainen ongelma tunnetaan prioriteetin peruuttamisena .

Ongelma ei ollut kriittinen ja koodi korjattiin etänä. Muissa tilanteissa seuraukset olisivat kuitenkin voineet olla katastrofaalisia. Sitten todettiin, että ongelma oli jo syntynyt testien aikana ilman korjaamista.

Katso myös

Aiheeseen liittyvät artikkelit

Viitteet

Ulkoiset linkit