Title: Besturingssystemen / hoofdstuk 6

Naam: Race conditie
Wat is/doet het?: processen wijzigen dezelfde data en uitkomst hangt af van wie eerst gewijzigd heeft
Hoe werkt het?: zie machinetaal
Pagina: 255

Naam: critical section problem (+ voorwaarden waaraan een oplossing moet voldoen)
Wat is/doet het?: twee processen zitten nooit tegelijk in hun kritieke sectie
Hoe werkt het?: - mut. excl. hoogstens 1 proces in kritieke sectie
- progress: proces in remainder sectie mag niet aan kritieke sectie beginnen als een ander proces ook in de kritieke sectie wil zitten
- bounded waiting: als een proces toegang wil tot de kritieke sectie mag het niet oneindig lang voorrang verlenen
Waar gebruikt?: shared memory
Pagina: 256
Figuur: 6.1

Naam: preemptive kernel
Wat is/doet het?: proces in kernel mode mag onderbroken worden voor preemption
Waar gebruikt?: scheduling kernel processen
Voordelen: betere responsetijd
soms nodig voor real time systemen
Nadelen: mogelijk racecondities met kernel-data
Alternatieven: nonpreemptive kernel
Pagina: 257

Naam: mutex lock
Wat is/doet het?: kritieke sectie beschermen
Hoe werkt het?: atomaire oproepen acquire() en release() om te wachten tot het vrij is en om het vrij te geven, geimplementeerd met test_and_set of compare_and_swap
Welke types zijn er?: busy waiting => spinlock
Waar gebruikt?: bij communicerende processen
Wanneer gebruikt?: voor en na kritieke secties
Voordelen: in multi-CPU systemen kan het ene proces wachten terwijl het andere uitgevoerd wordt op een andere CPU. Dit kan soms korter zijn dan een context switch.
Nadelen: busy waiting
mogelijkheid tot deadlocks
moeilijk te gebruiken, kans op fouten
Alternatieven: semaforen, monitor
Pagina: 262
Figuur: 6.8

Naam: semafoor
Wat is/doet het?: kritieke sectie beschremen
Hoe werkt het?: - P() en V() (wait() en signal())
- bij P() wordt proces toegevoegd aan een lijst van geblokkeerde processen en zet het zijn status op waiting. De semafoor wordt verlaaagd.
- bij V() wordt een proces uit de queue gehaald en de semafoor verhoogd.
(zie code op p 265, 266)
Welke types zijn er?: binair: 0 of 1
counting: [0...[
Waar gebruikt?: bij communicerende processen
Wanneer gebruikt?: voor en na kritieke secties
Voordelen: minder busy waiting (geen lege while-lussen)
Nadelen: mogelijkheid tot deadlocks
moeilijk te gebruiken, kans op fouten
Alternatieven: mutex lock, monitor
Pagina: 263 e.v.

Naam: monitor
Wat is/doet het?: critical section problem oplossen (gedeelde data maar door 1 proces laten lezen/schrijven)
Hoe werkt het?: inhoud:
  - gedeelde data
  - procedures die data wijzigen
  - queues met processen die de monitor willen binnenkomen
  - conditievariabelen waarop sommige processen moeten wachten om binnen te kunnen
werking:
  - wanneer een proces klaar is, is de monitor 'ontgrendeld' en mag een nieuw proces erin
  - bepalen welk proces erin mag hangt af van welke conditionals gesignaleerd zijn
  - welk proces binnenkomt hangt af van queuediscipline (conditional wait)
Welke types zijn er?: stel P signaleert x waarop Q wacht
1. signal & wait: Q mag in de monitor
2. signal & continue: P mag verder uitvoeren
Voordelen: meer hoog niveau
Nadelen: processen moeten zich aan policy houden (beurt afwachten)
Alternatieven: semaforen
Pagina: 274
Figuur: 6.15 tot 6.19

Naam: transactional memory
Wat is/doet het?: kritieke sectie beschermen
Hoe werkt het?: wijzigingen van data in kritieke sectie worden allemaal tegelijk (atomair) uitgevoerd, zodat preemptie tijdens kritieke sectie onmogelijk is
Welke types zijn er?: software ~: compiler saves the day (kijkt waar low level locking nodig is)
hardware ~: aangepaste caching protocols
Alternatieven: semaforen, monitors, Peterson, functionele talen, die nooit variabelen wijzigen
Pagina: 290