Semaforen. Semaforen p. 1/2

Vergelijkbare documenten
Gelijktijdigheid: Wederzijdse Uitsluiting & Synchronisatie Concurrency: Mutual Exclusion & Synchonization (5e ed: , Appendix A.

Mutual Exclusion en Semaforen

Conclusies over semaforen

TECHNISCHE UNIVERSITEIT EINDHOVEN Faculteit Wiskunde en Informatica

ICT Infrastructuren: Concurrency en Deadlock. 25 november 2013 David N. Jansen

TI-2720 Operating System Concepten. 6 november 2012, uur. docent: H.J. Sips. Dit is een tentamen met 9 open vragen

Het begrip 'Proces' Proces-toestand

Real-Time Systems (RTSYST)

Toets In2305-ii Embedded Programming Dinsdag 28 November 2006, 15:45-16:30

Tree traversal. Bomen zijn overal. Ferd van Odenhoven. 15 november 2011

Tree traversal. Ferd van Odenhoven. 15 november Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering. Doorlopen van bomen

Elfde college algoritmiek. 18 mei Algoritme van Dijkstra, Heap, Heapify & Heapsort

Take-home Tentamen Protocolvericatie. Universiteit van Amsterdam. 27 Maart 1994

Datastructuren: stapels, rijen en binaire bomen

4EE11 Project Programmeren voor W. College 3, , Blok D Tom Verhoeff, Software Engineering & Technology, TU/e

Tentamen In2305-ii Embedded Programming Woensdag 17 Januari 2007, 14:00-17:00

RCL Arduino Workshop 1

CPU scheduling : introductie

Datastructuren: stapels, rijen en binaire bomen

TECHNISCHE UNIVERSITEIT EINDHOVEN Faculteit Wiskunde en Informatica

Gedistribueerd programmeren

TECHNISCHE UNIVERSITEIT EINDHOVEN Faculteit Wiskunde en Informatica

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Arduino Cursus, Deel 2 Programmeren. Simon Pauw, ZB45, Amsterdam

Hoofdstuk 3: Processen: Beschrijving en Besturing. Wat is een proces? Waarom processen? Wat moet het OS ervoor doen? Is het OS zelf een proces?

Technology, Innovation & Society Delft

TECHNISCHE UNIVERSITEIT EINDHOVEN Faculteit Wiskunde en Informatica

Deel 8: stappenmotoren en interrupts

1=2720/2725 Operating System Concepten

Besturingssystemen. Gilles Callebaut. Samenvatting Operating Systems

Real-Time Systems (RTSYST)

Vierde college algoritmiek. 2 maart Toestand-actie-ruimte Exhaustive Search

Tentamen Programmeren in C (EE1400)

Java virtuele machine JVM

Vijfde college algoritmiek. 2/3 maart Exhaustive search

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

IN1671 Operating System concepten Oefen opgaven

Concurrency in Java met threads. Java Threads. Voorbeelden concurrency in applicaties. Waarom concurrency in Java?

Doorzoeken van grafen. Algoritmiek

public boolean equaldates() post: returns true iff there if the list contains at least two BirthDay objects with the same daynumber

Arduino Workshop 1 Zuid-Limburg

Computerarchitectuur en netwerken. InterProcess Communication (IPC)

Module 3: Scratch programmeren: is het logisch of is het niet logisch?

ICT Infrastructuren: Processen en Threads. 18 november 2013 David N. Jansen

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Lineaire data structuren. Doorlopen van een lijst

OPDRACHT Opdracht 2.1 Beschrijf in eigen woorden wat het bovenstaande PSD doet.

Twaalfde college algoritmiek. 13 mei Branch & Bound Heap, Heapsort & Heapify

Semantiek & Correctheid Thread synchronisatie & communicatie

TI-2720 Operating System Concepten. 21 januari 2013, uur. docent: H.J. Sips. Dit is een tentamen met 9 open vragen

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Uitwerking Tentamen Operating Systems Maandag 15 juni 2015 P1 P2 P3 P4 P5 P1 P3 P5 P4 P2 P1 P3 P5 P3. Opgave 1

slides7.pdf 23 nov

NAAM: Programmeren 1 Examen 29/08/2012

Kunstmatige Intelligentie (AI) Hoofdstuk 25 van Russell/Norvig = [RN] Robotica. voorjaar 2016 College 8, 12 april 2016

Dynamisch Programmeren. Het Rugzakprobleem

Multi-core systemen. door Alexander Melchior

VOORBLAD SCHRIFTELIJKE TOETSEN

Workshop Arduino - deel 2

7 Omzetten van Recursieve naar Iteratieve Algoritmen

Examen besturingssystemen

DDS chips. DDS = Direct Digital (frequency) Synthesis. Output = sinusvormig signaal. Maximum frequentie = ½ klokfrequentie

Uitgebreide uitwerking tentamen Algoritmiek Dinsdag 2 juni 2009, uur

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms

Honours projecten BSc Informatica: twee voorstellen

Programmeermethoden NA. Week 6: Lijsten

Voorkennis: C, basiskennis microprocessoren (bij voorkeur ARM7 processor)

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Werkbladen voor Arduino workshop 1

Algoritmiek. 15 februari Grafen en bomen

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Java Programma structuur

Evenwijdig programmeren - communicatie tussen processen

Stacks and queues. Hoofdstuk 6

Javascript oefenblad 1

Grafen en BFS. Mark Lekkerkerker. 24 februari 2014

Programmeren in Java les 3

Computerarchitectuur en netwerken Toets 1 4 okt

Arrays in LOGO. In LOGO heeft de eerste item van de array standaard index 1.

Verslag Opdracht 4: Magische Vierkanten

Samenvatting Besturingssystemen

Kunstmatige Intelligentie (AI) Hoofdstuk 25 van Russell/Norvig = [RN] Robotica. voorjaar 2019 College 9, 11 april 2019

Tentamen Besturingssystemen voor INF (211045) / TEL (211047) dinsdag 3 juli 2001, uur.

n-queens Local Search met Conflict Minimalizatie

Een gelinkte lijst in C#

Constraint satisfaction. Computationele Intelligentie. Voorbeelden. Een constraint satisfaction probleem. Constraint Satisfaction

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Programmeren met Arduino-software

1. Een kortste pad probleem in een netwerk kan worden gemodelleerd als a. een LP probleem. b. een IP probleem. c. een BIP probleem. d.

Correctievoorschrift VWO NederlandsNederl. Informatica. Tijdvak 1 Woensdag 17 mei uur. College-examen schriftelijk.

Presentatie Michiel. Informaticastage najaar 2004

Kortste Paden. Algoritmiek

Over binaire beslissingsdiagrammen naar Donald E. Knuth s The Art of Computer Programming, Volume 4

TECHNISCHE UNIVERSITEIT EINDHOVEN Faculteit Wiskunde en Informatica

Wat is FP? The Haskell School of Expression. Functies. Types 1+1=2. Iedere expressie (en waarde) heeft een type.

Gedistribueerd Programmeren - Samenvatting

Inhoudsopgave. Optimalisatie van de mmips. Forwarding optie 1. Design flow. implementation

Honours projecten BSc Informatica: twee voorstellen

Programmeermethoden NA

Transcriptie:

Semaforen 2008 Semaforen p. 1/2

Vorige Keer mbv mutual exclusion kritieke sectie (cs) 1. software : Dekker s, Peterson s algoritme 2. hardware: uniprocessor machine: disable interrupts 3. hardware: multiprocessor machine: speciale machineinstructies, bijv. set&test Nadeel van 1 & 3 : busy waiting Nadeel van 2 : bloedlink Daarom in Hfst 5.3: semaforen [Dijkstra 65] Semaforen p. 2/2

Binaire Semaforen Binaire semafoor s bestaat uit: integer s.count, met waarde 0 of 1 een rij van geblokkeerde processen s.queue 2 atomaire operaties: wait en signal Idee: count = 0 kritieke sectie bezet proces wacht in queue tot het naar binnen mag wait(s) als je mag ga cs in en zet s.count op 0 anders blokkeer in s.queue signal(s) wek indien mogelijk proces in s.queue anders zet s.count terug op 1 Semaforen p. 3/2

Mutual Exclusion P1 P2.. wait(s); wait(s); cs1; cs2; signal(s); signal(s);.. binaire semafoor wordt ook wel lock genoemd wait is dan acquire lock signal is dan release lock Semaforen p. 4/2

Implementatie struct semaphore { int count; list_of_processes queue; void wait(semaphore s) { if (s.count = 1 ) then { s.count = 0 else { zet dit proces in s.queue; blokkeer het void signal(semaphore s) { if empty(s.queue) then { s.count = 1 else { haal een proces uit s.queue ; zet het in ready queue Semaforen p. 5/2

Implementatie Maar: wait en signal moeten atomair zijn! Dus: mutual exclusion nodig! Oplossingen: software oplossing (Dekker s, Peterson s) probleem: overhead, beetje busy waiting op uniprocessor machine: disable interrupts redelijk, gegeven korte en vaste duur operaties gebruik speciale machineinstructie (set&test) probleem: beetje busy waiting wait en signal zelf als machine-instructies? Semaforen p. 6/2

Voordelen van Semaforen Busy waiting? Neen: proces wordt gewekt en hoeft niet zelf te kijken of het weer verder mag Starvation? Als het wekken via First-In-First-Out gaat zal er geen starvation optreden Bij een ander wekbeleid mogelijk wel starvation Ten opzichte van uitschakelen interrupts: Semaforen niet zo link Verschillende semaforen worden voor verschillende soorten kritieke secties gebruikt Semaforen p. 7/2

Algemene Semaforen Algemene semafoor s bestaat uit integer s.count, met initiële waarde 0 een rij van geblokkeerde processen s.queue atomaire operaties: wait, signal Idee: count is het aantal processen dat nog naar binnen mag wait(s) verlaag eerst s.count blokkeer in s.queue als s.count< 0 signal(s) verhoog eerst s.count wek proces in s.queue als s.count 0 Semaforen p. 8/2

Implementatie struct semaphore { int count; list_of_processes queue; ; void wait(semaphore s) { s.count = s.count-1; if (s.count<0) {zet dit proces in s.queue; blokkeer het ; void signal(semaphore s) { s.count = s.count+1; if (s.count<=0) {haal ander proces uit s.queue; zet het in ready queue ; Natuurlijk weer atomair! Semaforen p. 9/2

Eigenschappen Het wekken van een proces wil zeggen dat het in de READY-queue wordt geplaatst; het hoeft dus niet meteen aan de beurt te zijn om instructies uit te voeren Semaforen worden niet uitsluitend gebruikt om kritieke secties af te schermen, maar meer algemeen om ervoor te zorgen dat bepaalde code alleen wordt uitgevoerd als aan bepaalde eisen is voldaan. Semaforen p. 10/2

Producer/Consumer Probleem n producers en 1 consumer van buffer b Gemeenschappelijke variabelen: in, out, b producer while (true) { "produceer item v"; b[in] = v; in = in+1; consumer while (true) { "wacht tot in > out"; w = b[out]; out = out+1; "verwerk item w"; Wat zijn de synchronisatie-problemen hier? Semaforen p. 11/2

Oneindige Buffer b[1] b[2] b[3] b[4] b[5] out in Note: shaded area indicates portion of buffer that is occupied Figure 5.12 Infinite Buffer for the Producer/Consumer Problem Semaforen p. 12/2

Oplossing? bin. sem. s, initieel s.count=1 bin. sem. delay, initieel delay.count=0 producer while (true) { produce(); semwaitb(s); append(); n++; if (n==1) {semsignalb(delay); semsignalb(s); consumer semwaitb(delay); while (true) { semwaitb(s); take(); n--; semsignalb(s); consume(); if (n==0) {semwaitb(delay); Semaforen p. 13/2

Neen... Zie Uppaal tegenvoorbeeld. Semaforen p. 14/2

Consumer Aanpassing Introduceer hulpvariabele semwaitb (delay); while (true) { semwaitb(s); take(); n--; m = n; semsignalb(s); consume(); if (m==0) {semwaitb(delay) Nu wel beide problemen opgelost! Semaforen p. 15/2

Oplossing met Alg. Semaforen bin. sem. s, initieel s.count=1 alg. sem. n, initieel n.count=0 producer while (true) { produce(); semwait(s); append(); semsignal(s); semsignal(n); consumer while (true) { semwait(n); semwait(s); take(); semsignal(s); consume(); Semaforen p. 16/2

Producer Aanpassing? Verwissel signal(s) en signal(n) producer while (true) { produce(); semwait(s); append(); semsignal(n); semsignal(s); consumer while (true) { semwait(n); semwait(s); take(); semsignal(s); consume(); Semaforen p. 17/2

Producer Aanpassing? Verwissel signal(s) en signal(n) OK omdat consumer op beide semaforen wacht Semaforen p. 17/2

Consumer Aanpassing? Verwissel wait(n) en wait(s) producer while (true) { produce(); semwait(s); append(); semsignal(n); semsignal(s); consumer while (true) { semwait(s); semwait(n); take(); semsignal(s); consume(); Semaforen p. 18/2

Consumer Aanpassing? Verwissel wait(n) en wait(s) producer while (true) { produce(); semwait(s); append(); semsignal(n); semsignal(s); consumer while (true) { semwait(s); semwait(n); take(); semsignal(s); consume(); Deadlock als consumer in cs bij lege buffer Semaforen p. 18/2

Eindige Buffer b[1] b[2] b[3] b[4] b[5] b[n] out in (a) b[1] b[2] b[3] b[4] b[5] b[n] in out (b) Figure 5.16 Finite Circular Buffer for the Producer/Consumer Problem Semaforen p. 19/2

Oplossing? bin. sem. s, initieel s.count=1 alg. sem. n, initieel n.count=0 alg. sem. e, initieel e.count=buffersize producer while (true) { produce(); wait(e); wait(s); append(); signal(s); signal(n); consumer while (true) { wait(n); wait(s); take(); signal(s); signal(e); Semaforen p. 20/2

Oplossing?!!! bin. sem. s, initieel s.count=1 alg. sem. n, initieel n.count=0 alg. sem. e, initieel e.count=buffersize producer while (true) { produce(); wait(e); wait(s); produce(); signal(s); signal(n); consumer while (true) { wait(n); wait(s); take(); signal(s); signal(e); Semaforen p. 20/2