Hardverska rešenja za Ideja je da se naprave zaštitu kritične sekcije mašinske instrukcije koje podrazumevaju upotrebu su u stanju da urade bar posebnih instrukcija dve operacije bez procesora. mogućnosti prekida. Najčešće se za potrebe zaštite kritične sekcije koriste sledeće tri instrukcije:
TAS (Test And Set)
FAA (Fetch And Add)
SWAP (zamena) TAS (Test And Set) FAA (Fetch And Add) SWAP (zamena)
• Instrukcija TAS operiše sa • Instrukcija FAA operiše • SWAP operiše sa dve
dve promenljive sa dve promenljive. promenljive SWAP(A, B) i A = TAS(B) . • Njena sintaksa je rezultat je atomična FAA(A, B) i pri njenom zamena vrednosti • Funkcioniše tako što se promenljivih A i B. korišćenju se vrednost vrednost koja se nalazi u promenljive B • Primera radi zamena se, promenljivoj B prebacuje prebacuje u A, uz ili bez korišćenja a vrednost B + A u pomoćne promenljive, u promenljivu A, promenljivu B. sastoji od bar tri a u promenljivu B se • U izrazu B + A uzima operacije. postavlja 1. stara vrednost promenljive A, pre promene vrednosti. • Postoje različita rešenja za zaštitu kritične sekcije korišćenjem ovakvih instrukcija, ali je u osnovi ideja svih slična.
• Obično postoji jedna promenljiva kojom se štiti ulaz u kritičnu
sekciju, a procesi aktivno čekaju da se ulaz oslobodi.
• Kada se to desi, onda atomičnost ovih instrukcija omogućava
da tačno jedan proces uđe u kritičnu sekciju. ALGORITAM ZAŠTITA KRITIČNE SEKCIJE (TAS)
• Proces i: • Mana ovakvog rešenja je činjenica
• ne_može = 1; da je to rešenje zasnovano na hardverskoj podršci, odnosno da je • WHILE (ne_može == 1) potrebno da procesor ima • ne_može = TAS(zauzeto); ugrađenu tu instrukciju. • ENDWHILE • Sa druge strane, ovo rešenje se bez bilo kakve modifikacije može • //Kritična sekcija primeniti na proizvoljan broj • zauzeto = 0; procesa, ali ne postoji garancija koliko će neki proces da čeka. ZAŠTITA KRITIČNE SEKCIJE (SWAP) • Brava je globalna promenljiva koja se postavlja na 0, što označava da je prolaz u kritičnu sekciju slobodan, tj. da je brava otključana. • //Brava je globalna promenljiva • Sa druge strane, procesi koji se nadmeću inicijalizovana na 0 za pristup kritičnoj sekciji imaju promenljivu • Proces i: ključ čija vrednost 1 govori da ključ nije u bravi, odnosno da čekaju da uđu u • ključ = 1; kritičnu sekciju. • WHILE (ključ != 0) • Procesi u petlji pokušavaju da kroz SWAP • SWAP (brava, ključ); operaciju ubace ključ u bravu, tj. ugrabe trenutak kada je otključana, zaključaju je i • ENDWHILE time dobiju pristup kritičnoj sekciji, istovremeno zaključavajući je za sve • //Kritična sekcija ostale procese. • brava = 0; • Kada proces završi sa radom u kritičnoj sekciji, on postavlja vrednost promenljive brava na 0, otključavajući je za ostale procese.