6.1 & 6.2 - Background & The Critical-Section Problem (p.241, 243)
Background
- Race Condition = Een situatie waarbij meerdere processen tegelijk dezelfde data (oa variabele) proberen te manipuleren, en waarbij de uiteindelijke uitkomst van deze dat wordt bepaald door in welke volgorde de processen hebben plaatsgevonden.
- Te vermijden door het toevoegen van synchronisatie tussen de processen.
The Critial-Section Problem
- Critical Section = Segement met code welke belangrijke variabelen/tables/files aanpast.
- Er mag maar een proces tegelijk bij de data van een critical section.
- Lastig in multithreading -> problem.
- Bestaat uit 4 delen (in volgorde):
- Entry Section = Segment met code welke de toestemming verkrijgt om de critical section te mogen starten.
- De Critial Section.
- Exit Section = Segement met code welke wordt uitgevoerd als afhandeling van de critical section.
- Remainder Section = Segement met code welke wordt uitgevoerd na de critical section.
- Als een oplossing een echte oplosing is voor het critical-section problem voldoet het aan deze eisen:
- Mutual Exclusion = Als process A zijn critical section uitvoert, mogen andere processen dit niet doen.
- Progress = Als geen process nu bezig is met zijn critical section, en er processen zijn die graag dit willen gaan doen EN niet bezig zijn met hun remainder section. Dan mogen deze processn meedoen in de beslissing welk process vervolgens zijn critical section gaat uitvoeren.
- Processen mogen niet voor eeuwig wachten tot ze nu critical section mogen uitvoeren.
- Bounded Waiting = Er is een limiet op het aantal keer dat een ander process eerst zijn critical section mag uitvoeren voordat een process aan de beurt is.
- Omgaan met critical sections in OSs
- Preemptive kernels = Real-time operations.
- Belangrijk dat code goed wordt geschreven om een race condition te voorkomen. Meerdere kernel processen kunnen tegelijk lopen.
- Non-preemptive kernels = Niet toestaan om processen te laten interrupten wanneer de cpu in kernel mode is.
- Alleen kernel mode process stopen door: uit kernel mode gaan, het process blokkeert, het geeft zelf de controle van de CPU op.
- Dus geen race conditons in kernel mode, maar kernel mode processen moeten snel worden uitgevoerd om andere processen niet te laten wachten.