Jaetun tiedon eheyden hallinta riippuu suuresti prosessien synkronoinnista. Kriittisten osien ongelmien ratkaisemiseen on saatavilla sekä ohjelmisto- että laitteistoratkaisuja. Toisaalta kriittisen osan ongelman laitteistoratkaisut ovat erittäin vaikeita toteuttaa. Tarkastellaan ja vertaillaan Mutexia ja Semaphorea, kahta sovellusratkaisua kriittisten osioongelmien ratkaisemiseen.
Mutex vs Semaphore
Ero mutexin ja semaforin välillä on se, että semafori on signalointiprosessi, mikä tarkoittaa, että prosessit käyttävät wait()- ja signal()-toimintoja osoittamaan, ovatko ne hankkimassa tai vapauttamassa resurssia, kun taas mutex on lukittava menetelmä. mikä tarkoittaa, että jos operaatio haluaa saada resurssin, sen on ensin hankittava lukko mutex-objektiin.
Mutex tulee sanoista Mutual Exclusion Object. Se on eräänlainen binäärinen semafori, jota käytetään rajoittamaan pääsyä jaettuun resurssiin. Pitkittyjen prioriteetin inversioon liittyvien huolenaiheiden estämiseksi siinä on prioriteetin periytymismekanismi. Sen avulla olemassa olevat korkeamman prioriteetin työt voidaan estää mahdollisimman lyhyeksi ajaksi. Prioriteetin periytyminen sitä vastoin ei korjaa prioriteetin inversiota; pikemminkin se vähentää sen vaikutusta.
Semafori on ei-negatiivinen muuttuja, jota ylläpidetään säikeiden välillä. Semafori on signalointimekanismi, ja toinen säie voi signaloida säiettä, joka odottaa semaforia. Prosessin synkronoinnissa se käyttää kahta atomimenettelyä: () odotus ja () signaali. Semafori joko mahdollistaa tai estää pääsyn resurssiin sen määrityksen mukaan.
Vertailutaulukko Mutexin ja Semaforen välillä
Vertailuparametrit | Mutex | Semafori |
Mekanismi | Se on lukitusjärjestelmä. | Se on jonkinlainen merkinantojärjestelmä. |
Tarkoitus | Lankaa edustaa mutex. | Prosesseja edustaa semafori. |
Luonto | Mutex on yleensä atominen ja yksikkö. | Semafori on luonteeltaan atominen, mutta ei yksittäinen. |
Tietotyyppi | Mutex ei ole muuta kuin ohjelmisto. | Semafori on muuttuja, jolla on kokonaislukuarvo. |
Tyypit | Mutexillä ei ole alatyyppejä. | Laskevat ja binaariset semaforit ovat kahdenlaisia semaforeja. |
Muokkaus | Vain prosessi, joka voi pyytää tai vapauttaa resurssin, voi muokata sitä. | Semaforia voidaan muokata odotus- ja signaalitoimintojen avulla. |
Mikä on Mutex?
Mutual Exclusion on termi, jota käytetään kuvaamaan tilannetta Mutex on objektin lyhyt nimi. Voimme päätellä sanasta keskinäinen poissulkeminen, että vain yhdellä ohjelmalla on tällä hetkellä pääsy tiettyyn resurssiin. Mutex-objekti mahdollistaa useiden sovellussäikeiden pääsyn samaan resurssiin samanaikaisesti, vain yhden kerrallaan.
Aina kun ohjelma pyytää järjestelmältä resurssia, järjestelmä luo mutex-objektin, jolla on yksilöllinen identiteetti tai tunnus. Tämän seurauksena aina kun ohjelma haluaa käyttää kyseistä resurssia, se lukitsee objektin. Ohjelma käyttää sitten resurssia ennen kuin lopulta vapauttaa mutex-objektin. Mutex-objekti voidaan sitten luoda ja käyttää muissa ohjelmissa samalla tavalla.
Kun objekti lukitaan, kyseinen resurssi määritetään kyseiselle prosessille, eikä mikään muu prosessi voi käyttää sitä. Tämän seurauksena mikään muu ohjelma ei saa käyttää järjestelmäresursseja tärkeällä alueella. Mutex-objektia voidaan käyttää prosessisynkronoinnin suorittamiseen tällä tavalla.
Mutex mahdollistaa vastavuoroisen poissulkemisen; joko tuottajalla tai kuluttajalla voi olla avain (mutex) ja jatkaa työskentelyä. Kuluttajan on odotettava niin kauan kuin tuottajan puskuri täyttyy ja päinvastoin.
Mikä on semafori?
Semafori on kokonaislukumuuttuja S, jota käytetään prosessin synkronointiin ja joka alustetaan järjestelmän resurssien lukumäärällä. S:n arvon muuttamiseksi se käyttää kahta päätoimintoa: odota () ja signaali (). Molempia näitä toimintoja käytetään muuttamaan semaforin arvoa, mutta ne mahdollistavat vain yhden ohjelman tehdä niin kerrallaan, joten kaksi menetelmää ei voi muuttaa semaforin arvoa samanaikaisesti. Laskennalliset semaforit ja binaariset semaforit ovat kahdenlaisia semaforeja.
Semaforimuuttuja alustetaan ensin käytettävissä olevien resurssien määrällä samalla kun lasketaan semaforeja. Waita()-menetelmä suoritetaan sitten aina, kun prosessi vaatii resurssia, ja semaforimuuttujan arvoa pienennetään yhdellä. Prosessi käyttää sitten resurssia, jonka jälkeen se kutsuu signal()-menetelmää, joka lisää semaforimuuttujan arvoa yhdellä. Aina kun semaforimuuttujan arvo saavuttaa 0:n, eli kun ohjelma on käyttänyt kaikki resurssit eikä yhtään ole enää käytössä, silloin, jos toisen prosessin on käytettävä resursseja, sen on odotettava aikansa. Luomme prosessin synkronoinnin tällä tavalla.
Binäärisemaforeissa semaforimuuttujan arvo on joko 0 tai 1. Kun prosessi haluaa käyttää resurssia, kutsutaan wait()-metodia ja semaforin arvoksi säädetään 0 alkaen 1. Prosessi tekee sitten resurssin käyttöä, ja kun se on tehty, kutsutaan signaali()-menetelmää ja semaforimuuttujan arvoksi asetetaan 1. Jos semaforimuuttujan arvo on 0 tietyllä hetkellä ja toinen ohjelma haluaa päästäkseen samaan resurssiin sen on odotettava, että aiempi ohjelma vapauttaa resurssit. Prosessin synkronointi voidaan suorittaa tällä tavalla. Se on verrattavissa mutexiin, mutta se ei lukitse mitään.
Tärkeimmät erot Muteksin ja Semaforin välillä
Johtopäätös
Jos käytettävissä on useita resursseja, Semaphore on parempi vaihtoehto. Mutex on parempi valinta, kun on vain yksi jaettu resurssi. Semaforin avulla monet säikeet pääsevät tärkeälle alueelle. Koneet eivät vaikuta semaforeihin. Semaforit käsitellään mikroytimen koneriippumattomassa koodissa. Prosessiaikaa tai resursseja ei koskaan mene hukkaan, koska semaforissa on aina kiireinen odotus. Ne mahdollistavat myös resurssienhallinnan joustavuuden, kun taas Mutexet ovat vain yksinkertaisia lukkoja, jotka on hankittava ennen elintärkeän alueen saavuttamista ja sitten vapautettava, mutta Mutexissa standardimenetelmä voi johtaa kiireiseen odotustilaan, mikä tuhlaa CPU-aikaa. Sitä ei myöskään voi lukita tai avata muusta kontekstista kuin siitä, jossa se hankittiin.