Muteks vs Semafor
i henhold til operativsystemets terminologi er muteks og semaforer kerneressourcer, der leverer synkroniseringstjenester, også kaldet synkroniseringsprimitiver. Processynkronisering spiller en vigtig rolle for at opretholde konsistensen af delte data. Både program-og maskinløsninger er til stede til håndtering af kritiske sektionsproblemer. Men maskinløsninger til kritiske sektionsproblemer er ret vanskelige at implementere. Begge leverer synkroniseringstjenester, men de er ikke de samme.
hvad er det?
Muteks er et gensidigt udelukkelsesobjekt, der synkroniserer adgang til en ressource. Det er skabt med et unikt navn i starten af et program. Mutekslåsemekanismen sikrer, at kun en tråd kan erhverve muteksen og komme ind i det kritiske afsnit. Denne tråd frigiver kun muteksen, når den kommer ud i det kritiske afsnit.
det er en speciel type binær semafor, der bruges til at kontrollere adgangen til den delte ressource. Det inkluderer en prioriteret arvemekanisme for at undgå udvidede prioriterede inversionsproblemer. Det gør det muligt at holde nuværende opgaver med højere prioritet i blokeret tilstand i kortest mulig tid. Prioriteret arv korrigerer dog ikke prioriteret inversion, men minimerer kun dens virkning.
eksempel
dette vises ved hjælp af følgende eksempel,
brug af Muteks
en muteks giver gensidig udelukkelse, enten producent eller forbruger, der kan have nøglen (muteks) og fortsætte med deres arbejde. Så længe producenten fylder bufferen, skal brugeren vente og omvendt. I Muteks lock kan hele tiden kun en enkelt tråd arbejde med hele bufferen.
når ET program starter, anmoder Det systemet om at oprette et muteksobjekt for en given ressource. Systemet opretter objektet med et unikt navn eller ID. Når programtråden ønsker at bruge ressourcen, optager den lås på muteksobjektet, udnytter ressourcen og efter brug frigiver den låsen på muteksobjektet. Derefter får den næste proces lov til at erhverve låsen på muteksobjektet.
i mellemtiden har en proces erhvervet låsen på muteks-objektet, og ingen anden tråd eller proces kan få adgang til denne ressource. Hvis objektet allerede er låst, skal processen, der ønsker at erhverve låsen på objektet, vente og stå i kø af systemet, indtil objektet er låst op.
fordele ved Muteks
her er følgende fordele ved muteks, såsom:
- Muteks er bare enkle låse opnået, før de går ind i det kritiske afsnit og derefter frigiver det.
- da kun en tråd er i sin kritiske sektion til enhver tid, er der ingen løbsbetingelser, og data forbliver altid konsistente.
ulemper ved Muteks
Muteks har også nogle ulemper, såsom:
- hvis en tråd opnår en lås og går i seng eller er forhindret, kan den anden tråd muligvis ikke bevæge sig fremad. Dette kan føre til sult.
- det kan ikke låses eller låses op fra en anden kontekst end den, der erhvervede den.
- kun en tråd skal tillades i det kritiske afsnit ad gangen.
- den normale implementering kan føre til en travl ventetilstand, som spilder CPU-tid.
Hvad er Semafor?
Semaphore er simpelthen en variabel, der ikke er negativ og deles mellem tråde. En semafor er en signalmekanisme, og en anden tråd kan signalere en tråd, der venter på en semafor.
en semafor bruger to atomoperationer,
1. Vent: venteoperationen reducerer værdien af dens argument S, hvis den er positiv. Hvis S er negativ eller nul, udføres der ingen operation.
2. Signal til processynkronisering: signaloperationen øger værdien af dens argument S.
en semafor tillader eller afviser enten adgang til ressourcen, afhængigt af hvordan den er konfigureret.
brug af Semafor
i tilfælde af en enkelt buffer kan vi adskille 4 KB-bufferen i fire buffere på 1 KB. Semaphore kan forbindes med disse fire buffere, så brugere og producenter kan arbejde på forskellige buffere samtidigt.
typer af Semafor
Semafor er kendetegnet ved operativsystemet i to kategorier, der tæller semafor og binær semafor.
1. Tæller Semafor: Semaforens værdi initialiseres til antallet af ressourcer, der findes i systemet. Når en proces ønsker at få adgang til ressourcen, udfører den venteoperationen () på semaforen og reducerer semaforværdien med en. Når den frigiver ressourcen, udfører den signal () – operationen på semaforen og øger semaforværdien med en.
når semaforetællingen går til 0, betyder det, at processerne besætter alle ressourcer. En proces skal bruge en ressource, når semaforetællingen er 0. Den udfører venteoperationen () og blokeres, indtil semaforværdien bliver større end 0.
2. Binær semafor: værdien af en semafor varierer mellem 0OG 1. Det er en af de mest almindelige årsager til, at en person er en person, der er i stand til at få et barn. I binær semafor, hvis en proces ønsker at få adgang til ressourcen, udfører den venteoperationen () på semaforen og reducerer værdien af semaforen fra 1 til 0. Når den frigiver ressourcen, udfører den en signal () – operation på semaforen og øger dens værdi til 1. Antag, at værdien af semaforen er 0, og en proces ønsker at få adgang til ressourcen. I så fald udfører den vent() drift og blokerer sig selv, indtil den aktuelle proces, der bruger ressourcerne, frigiver ressourcen.
fordele ved Semafor
her er følgende fordele ved semafor, såsom:
- det giver mere end en tråd adgang til det kritiske afsnit.
- semaforer er maskinuafhængige.
- semaforer implementeres i mikrokernens maskinuafhængige kode.
- de tillader ikke flere processer at komme ind i det kritiske afsnit.
- da der er travlt og venter i semafor, er der aldrig spild af procestid og ressourcer.
- de er maskinuafhængige, som skal køres i mikrokernens maskinuafhængige kode.
- de tillader fleksibel forvaltning af ressourcer.
ulempe ved semaforer
semaforer har også nogle ulemper, såsom:
- en af de største begrænsninger ved en semafor er prioriteret inversion.
- operativsystemet skal holde styr på alle opkald for at vente og signalere semafor.
- deres brug håndhæves aldrig, men det er kun ved konvention.
- vent-og Signaloperationerne skal udføres i den rigtige rækkefølge for at undgå deadlocks i semafor.
- Semaphore programmering er en kompleks metode, så der er chancer for ikke at opnå gensidig udelukkelse.
- det er heller ikke en praktisk metode til brug i stor skala, da deres anvendelse fører til tab af modularitet.
- Semaphore er mere tilbøjelig til programmerings fejl
- , og det kan forårsage dødvande eller krænkelse af gensidig udelukkelse på grund af programmerings fejl.
forskel mellem Muteks og Semafor
den grundlæggende forskel mellem semafor og muteks er, at semafor er en signaleringsmekanisme, dvs.processer udfører vent() og signal() operation for at indikere, om de erhverver eller frigiver ressourcen. I modsætning hertil er en muteks en låsemekanisme, og processen skal erhverve låsen på et muteksobjekt, hvis den ønsker at erhverve ressourcen. Her er nogle flere forskelle mellem semafor og muteks, såsom:
Vilkår | Muteks | Semafor |
---|---|---|
Definition | muteks er en låsemekanisme, for at erhverve en ressource skal en proces låse muteksobjektet, og mens en ressourceproces frigives, skal den låse muteksobjektet op. | Semafor er en signalmekanisme som Vent() og signal() operationer udført på semaforvariablen angiver, om en proces erhverver eller frigiver ressourcen. |
eksistens | en muteks er et objekt. | Semafor er en heltalsvariabel. |
funktion | Muteks giver flere programtråde adgang til en enkelt ressource, men ikke samtidigt. | Semaphore tillader flere programtråde at få adgang til en endelig forekomst af ressourcer. |
ejerskab | Muteks objektlås frigives kun ved den proces, der har erhvervet låsen på muteks-objektet. | Semaforværdi kan ændres ved enhver proces, der erhverver eller frigiver ressourcen ved at udføre vent() og signal() operation. |
kategorisere | Muteks er ikke kategoriseret yderligere. | semaforen kan kategoriseres i at tælle semafor og binær semafor. |
Operation | objektet låses eller låses op ved at anmode om eller frigive ressourcen. | Semaforværdi ændres ved hjælp af Vent() og signal() operation bortset fra initialisering. |
ressourcer besat | hvis et muteks-objekt allerede er låst, venter processen, der ønsker at erhverve ressource, og bliver i kø af systemet, indtil ressourcen frigives, og muteks-objektet bliver låst op. | Antag, at processen erhverver alle ressourcerne, og ingen ressource er gratis. I så fald udfører processen, der ønsker at erhverve ressource, vent() operation på semaforvariabel og blokerer sig selv, indtil antallet af semafor bliver større end 0. |
Leave a Reply