Mekanismer. (implementation)

Relevanta dokument
Tentamen i TDIU16 Process- och operativsystemprogrammering

Synkronisering. Ordning och reda

Synkronisering - Semaforen. Om att vänta men inte i onödan

Summering av fält. Synkronisering. Summering av fält. Bounded Buffer. Bounded Buffer (get) Bounded Buffer (put)

Summering av fält 1.1. Synkronisering - Semaforen. Summering av fält 1.3. Summering av fält 1.2. Summering av fält 2.3 (INTE GK)

Exam Concurrent and Real-Time Programming

Operativsystem - Processkommunikation

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH.

Realtidssystem. - Dödläge - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 5

Försättsblad till skriftlig tentamen vid Linköpings Universitet Cover page for written exam at Linköping University

Realtidssystem. - Semaforer, trådsynkronisering - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 2

Föreläsning 15: Parallella subrutiner. Parallellitet. Varför parallella underprogram?

Tentamen på kursen Distribuerade system. Lycka till!

Webbregistrering pa kurs och termin

Mål. Datorteknik. Repetition av avbrott. Innehåll. Mätning och styrning. Datorer för mätning och styrning. timer. Datorsystem A/D. Analog insignal D/A

1. Varje bevissteg ska motiveras formellt (informella bevis ger 0 poang)

Vad är viktigast? Sammanfattning. Processer och trådar. Processer och trådar. Flerprocessorsystem. Schemaläggning. Interprocesskommunikation.

Realtidssystem. - Semaforer, trådsynkronisering - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp

Fö 2 TSEA81 Datorteknik och realtidssystem

Deadlocks. detektera och undvik

Deluppgift 10 Starta den första processen (3.5h förarbete, 30min kodning)

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

FÖRBERED UNDERLAG FÖR BEDÖMNING SÅ HÄR

Systemnära programmering Tentamen. Systemnära programmering, 7.5hp 5 november 2012

Webbreg öppen: 26/ /

Concurrency Saker händer samtidigt. Process En instans av ett program

Trådar. Aktiva objekt

Spekulativ exekvering i CPU pipelining

1 Comparator & Comparable

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Isolda Purchase - EDI

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Quick Start Guide Snabbguide

Realtidsprogrammering. En introduktion Implementering (med exempel från PIC)

Omtentamen i Realtidsprogrammering för Au3, D3, E3

Synkronisering. Föreläsning 8

Provlektion Just Stuff B Textbook Just Stuff B Workbook

Tentamen i Introduktion till programmering

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

PORTSECURITY IN SÖLVESBORG

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Tentamen Nätverksprogrammering Lösningsförslag

electiaprotect GSM SEQURITY SYSTEM Vesta EZ Home Application SMART SECURITY SYSTEMS! SVENSKA ios Android

Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013

Föreläsning 6: Introduktion av listor

Tentamen i Matematik 2: M0030M.

Styrteknik: Binära tal, talsystem och koder D3:1

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Software Technology. Josef Svenningsson

TDIU01 - Programmering i C++, grundkurs

E12 "Evil is going on"

Tentamen Nätverksprogrammering Lösningsförslag

Linköpings Tekniska Högskola Institutionen för Datavetanskap (IDA), Software and Systems (SaS) (c) Klas Arvidsson


PORTSECURITY IN SÖLVESBORG

Libers språklåda i engelska Grab n go lessons

Tentamen PC-teknik 5 p

VHDL testbänk. Mall-programmets funktion. Låset öppnas när tangenten 1 trycks ned och sedan släpps. William Sandqvist

Boiler with heatpump / Värmepumpsberedare

Lösningar till tentamen i EIT070 Datorteknik

Karlstads Universitet, Datavetenskap 1

Deluppgift 17 Processhantering: exec, sleep, exit, plist

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Lektion 4 - SMD006/SMD117

Dokumentnamn Order and safety regulations for Hässleholms Kretsloppscenter. Godkänd/ansvarig Gunilla Holmberg. Kretsloppscenter

COMPUTABILITY BERÄKNINGSBARHET. Källa: Goldschlager, Lister: Computer Science A Modern Introduction 2. upplaga 1988, Prentice Hall

Föreläsning Datastrukturer (DAT037)

Hjälpmedel: Inga hjälpmedel förutom penna, suddgummi och glatt humör.

Support Manual HoistLocatel Electronic Locks

Instruktioner för Service / Instructions for Service

Instruktioner för Service / Instructions for Service

Tentamen Lösningar EDA698 Realtidssystem

printenv sort pager printenv grep args sort pager

Parallellism, återblick

säkerhetsutrustning / SAFETY EQUIPMENT

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Tentamen i Realtidsprogrammering

Manhour analys EASA STI #17214

Uttagning för D21E och H21E

PROFINET MELLAN EL6631 OCH EK9300

Programmering för språkteknologer II, HT2014. Rum

Blockkedjor. en introduktion för datavetare. Rikard Hjort, 24 maj 2019

Trådar och Multiprocessorer. Föreläsning 6

Design av inbyggda system

Översättning av galleriet. Hjälp till den som vill...

Par m 328 feet. Lång höger sväng. Korgen står placerad i en skogsglänta OB-linje på vänster sida.

Port Security in areas operated by Port of Norrköping company

Exempelsamling Assemblerprogrammering

3. Mikroprogrammering II

Module 1: Functions, Limits, Continuity

Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Operativsystem - Processkommunikation

In- och utenheter. Händelsebaserad programmering i GLUT. Interrupt-baserad interaktion. Sampling / polling. Händelsebaserad interaktion (forts.

Outline. Datorsystemtekni. Kravspecifikation. Kravspecifikation (forts.)

Föreläsning Datastrukturer (DAT036)

Transkript:

Mekanismer (implementation)

Repetition Semafor Räknar tillgängliga resurser Initieras med startvärde Vid förbrukning: väntar tills resurs finns Användning: invänta händelse Lås Markerar att en variabel/datastruktur är upptagen Har ägare och felhantering Vid låsning: väntar tills variabeln/datastrukturen är ledig Användning: skapa mutual exclusion Condition Placerar låst tråd i vänteläge Har inget minne Användning: invänta ändring av låst variabel/datastruktur 1

Hur implementeras de? Skall förhinda alla race-conditions skall garantera deterministikt resultat Är i sig själva kritiska sektioner rekursiv catch 22 för att garantera enskild access till en resurs krävs enskild access till (en annan) resurs osv... Skall fungera effektivt busy-wait förbjudet nyttjar inga resurser vid väntan, placeras på väntekö progress bounded waiting Skall fungera på både uniprocessor och multiprocessor 2

Kritisk sektion 4 delar Ingång (entry section) Hur implementeras ingången till en kritisk sektion? Kritisk sektion (critical section) Kod som kräver mutual exclusion Utgång (exit section) Hur implementeras utgången Återstod (remainder section) Representerar normal, icke-kritisk kod 3

Kritisk sektion - exempel Några trådar kör följande kod. forever { lock() global = global + 1 unlock() ++local } // ingång // kritiskt // utgång // återstod 4

Tre krav ställs Mutual Exclusion When a given process is in its critical section other processes cannot be in their critical sections. Progress The decision as to who can enter the critical section must not be postponed indefinitely. Also, when no process is in its critical section and several processes are requesting to enter their critical section, who should decide who will enter the critical section? Answer: Only those processes which are not in their remainder section. Bounded Waiting If process P1 makes a request to enter its critical section, the request might not be granted right away. Instead other processes may be allowed to enter their CSs. Process P1 must then wait. If there is a limit to the number of times those other processes may be granted access to their CSs before P1's request is granted then it is a bounded wait. I.e. waiting is not indefinite. 5

Live-lock Något de flesta någon gång fått en känsla för i verkliga livet... Tänk dig två personer som skall mötas Båda stiger åt sidan åt samma håll för att låta den andra passera Båda stiger åt sidan åt andra hållet Förprogrammerade processer skulle fortsätta enligt detta mönster i evighet... Människor skrattar förläget till varandra, ber om ursäkt, och löser situationen enligt nytt protokoll... 6

Låset eget försök Implementera ett lås ( upptagetskylt ) som skyddar en kritisk variabel/datastruktur Vid låsning tråd skall vänta tills ledigt Vid upplåsning väntande tråd(ar) vaknar Krav Mutual exclusion upprätthålls Inga krav på effektivitet 7

Några försök Använd en upptaget -flagga Peterson s lösning (för två trådar) Förhindra trådbyte geom att hindra avbrott Kombinera! Placera på väntekö Nyttja speciella hårdvaruinstruktioner Utför steg för steg och diskutera. 8

Försök med flagga (FEL!) bool busy = false; /* init */ while ( busy ) ; busy = true; /* * godtyckligt lång kritisk sektion här */ busy = false; 9

Peterson s i_want_in[me(id)] = true; whose_turn = OTHER(id); while ( i_want_in[other(id)] && whose_turn == OTHER(id) ) ; /* busy wait */ /* insert critical code here */ i_want_in[me(id)] = false; 10

Analys av Peterson s Mutex: P i får tillträde omm det är hens tur eller den andre inte vill in Om P j också vill in så är antingen P i eller P j i loopen Progress (prevent livelock) Om P i vill in kommer den komma in direkt eller... Bounded waiting... efter att P j smiter före högst en gång 11

Avbrott? (DÅLIGT) old_level = interrupt_disable() /* * kritisk sektion här */ interrupt_enable(old_level) Riskfyllt Missar avbrott eller fördröjer avbrottshantering Ej tillgängligt för usermodetrådar Fungerar inte på multiprocessorer Stängs avbrott av måste kritiska sektionen vara mycket kort 12

Synkronisera avbrottshanterare Vid avbrott (interrupt) från hårdvara, t.ex. timer, så exekverar operativsystemet en funktion för att hantera avbrottet. Vad händer om den funktionen använder en delad resurs? Lås fungerar inte: Avbrottet kan ske när tråden som avbryts håller låset. Då försöker avbrottshanteraren (som lånar av trådens exekveringstid) låsa igen. Men det är förbjudet eftersom låset har felhantering som hindrar att en tråd låser när den redan håller låset. Binär semafor fungerar inte: Avbrottet kan ske när tråden som avbryts räknat ned semaforen. Då försöker avbrottshanteraren (som lånar av trådens exekveringstid) räkna ned igen och kommer att vänta på sema_up. Men det kommer inte att hända, för tråden exekverar ju avbrottshanteraren och kommer inte fortsätt med sin kod förrän avbrottshanteraren är klar. Avbrott måste stängas av för att synkronisera kod mellan trådar och funktioner som hanterar avbrott. Det är enda tillfället avbrott bör manipuleras. 13

Kombinera (FEL!) bool busy = false; /* init */ old_level = interrupt_disable(); while ( busy ) ; busy = true; interrupt_enable(old_level); /* godtyckligt lång kritisk sektion här */ busy = false; 14

Väntekö (Pintos) bool busy = false; /* init */ init_wait_queue(); /* init */ old_level = interrupt_disable(); while ( busy ) { place_me_on_wait_queue(); switch_to_other_ready_thread(); } busy = true; interrupt_enable(old_level); /* godtyckligt lång kritisk sektion här */ old_level = interrupt_disable(); busy = false; wake_other_from_wait_queue_and_place_on_ready_queue(); interrupt_enable(old_level); 15

Generellt trådbyte /* utförs med avbrott avstängt */ old_level = interrupt_disable(); place_me_on_ready_queue(); switch_to_other_ready_thread(); /* sätter på avbrott så fort tråden får fortsätta igen */ interrupt_enable(old_level); 16

Test and set En assemblerinstruktion ekvivalent med: bool test_and_set(bool* flag) { bool save = *flag; *flag = true; return save; } 17

Atomic swap En assemblerinstruktion ekvivalent med: void atomic_swap(int* a, int* b) { int save = *a; *a = *b; *b = save; } 18

Test and set igen Kan implementeras race-free med atomic_swap: bool test_and_set(bool* flag) { bool set = true; atomic_swap(&set, flag); return set; } 19

Lås med test and set bool busy = false; /* init */ while (test_and_set(&busy)) ; /* kort kritisk sektion här */ busy = false; 20

Compare and swap int compare_and_swap( int* mem, int compare_to, int replacement) { int oldmem = *mem; if (oldmem == compare_to) *mem = replacement; return oldmem; } 21

Lås med compare and swap bool busy = false; /* init */ while (compare_and_swap(&busy, false, true)) ; /* noop */ /* kort kritisk sektion här */ busy = false; 22

Flera implementationer Finns på wikipedia för den intresserade. Delad resurs Två trådar Dekker's algorithm Peterson's algorithm Delad resurs Många trådar Eisenberg McGuire algorithm Lamport s bakery algorithm Av speciellt intresse kan vara varianter för att ordna mutual exclusion i JavaScript med AJAX (Asynchronous Javascript And XML). Normala JavaScript kör typiskt sett i webbläsarens UI-tråd och saknar(?) inbyggt stöd för både trådar och mutual exclusion (såsom lås och semaforer). AJAX callbacks är dock asynkrona(?) och kan behöva synkronisering om de uppdaterar globala data. (Mer utredning av JS-expert krävs.) 23