Jonny Karlsson 25.10.2005 PROCESSPROGRAMMERING Föreläsning 9 (25.10.2005) Innehåll: - IPC: Semaforer.

Slides:



Advertisements
Liknande presentationer
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 1 ( ) Innehåll: -Introduktion av kursen -Program och processer -Fildeskriptorer -Filhantering.
Advertisements

Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 3 ( ) Innehåll: -Namngivna rörledningar.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 3 ( ) Innehåll: -Namngivna rörledningar -Signaler -Signalhantering.
Funktioner och programorganisation
De fundamentala datatyperna
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
C-programmering ID120V William Sandqvist Länkad lista
Programmeringsteknik för K och Media
Programmeringsteknik K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 7: Deadlocks.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
INTRODUKTION TILL PROGRAMMERING
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Föreläsning 11 Arrayer.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
PROCESSPROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 7 ( ) Innehåll: -Datakanaler och datakanalpar -Kommunikation på samma dator med datakanaler.
Pekare och speciell programstruktur i inbyggda system
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( )‏ Innehåll:Trådsäkerhet - Intrinsic locks och synkronisering - Synchronized statements.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Vektorer (klassen Vector) Sortering
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( ) Innehåll: -Programmerade rörledningar -Namngivna rörledningar.
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Grundläggande programmering
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( ) Innehåll: - Förening av dataströmmar - Signaler - Signalhantering.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: -Producent – konsument problemet -Förmedling av fildeskriptorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: -IPC: Semaforer -Exekveringstrådar (threads) -Introduktion till Java.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 12 ( ) Innehåll: -Datakanaler och datakanalpar -Kommunikation på samma dator med datakanaler.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 6: Process- synkronisering.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 11 ( ) Innehåll: - Förmedling av fildeskriptorer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( ) Innehåll: -Processtruktur -Processklyvning och kodbyte -Avslutning av processer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 3 ( ) Innehåll: -Processtruktur -Processklyvning och kodbyte -Avslutning av processer.
INTRODUKTION TILL PROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 5 ( ) Innehåll: -Signaler -Signalhantering.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 5 ( ) Innehåll: IPC: meddelandeköer IPC: delat minne.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
INTRODUKTION TILL PROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Repetitionssatser: do-satsen och for-satsen -Operatorer:
F6 - Pekare 1 Programmeringsteknik, 4p vt-00 Pekare & adresser Alla variabler är knutna till en viss adress i minnet int i; adressen till denna fås med.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 7 ( ) Innehåll: -IPC: Meddelandeköer.
Operativsystem - Processkommunikation
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: - Förening av dataströmmar -Blockerande I/O multiplexering -Icke blockerande.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( )‏ Innehåll:Trådar: - Avbrott (”interrupts”)‏ - Metoden join()‏ Högnivå objekt för.
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( ) Innehåll: -Fildeskriptorer -Filhantering -Felhantering.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( )‏ Innehåll:  Att designa parallella program - manuell vs. automatisk parallellisering.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: -Exekveringstrådar.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Anders Sjögren Funktioner något in och något annat ut.
Presentationens avskrift:

Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 9 ( ) Innehåll: - IPC: Semaforer

Jonny Karlsson Vad är en semafor? En semafor är en räknare som används för att kontrollera samtidig åtkomst av en delad resurs. Kan beskrivas som ett trafikljus: semafor == 0 visar rött ljus och sätter en process i väntetillstånd semafor > 0visar grönt ljus och tillåter en process att komma åt en delad resurs.

Jonny Karlsson Funktionsprincip 1.Testa semaforen som kontrollerar åtkomsten. 2.Om semaforens värde är positivt kan processen använda den delade resursen. Processen minskar samtidigt semaforens värde med 1 för att indikera att processen har använt en enhet hos resursen. 3.Om semaforens värde är 0 försätts processen i pausläge tills semaforens värde åter igen blir positivt. När en väntande process väcks upp startar den på nytt från steg 1. En process som blivit klar med en delad resurs ökar semaforens värde med 1. Samtidigt väcks en process som köar till samma delade resurs upp. Binära semaforer är den vanligaste semafortypen. Dessa kan endast anta värdet 1 (grönt) eller 0 (rött) En semafor som kan initialieras till vilket positivt heltalsvärde som helst kallas för heltalssemafor och kan användas för att t.ex. räkna hur många enheter hos en delad resurs som har använts.

Jonny Karlsson Semafor operationer Två typer: P-operationer V-operationer P-operationen används för att testa semaforen och minska semaforens värde med 1 (göra semaforen röd). V-operationen används för att öka på en semafors värde (göra semaforen grön) och väcka upp en väntande process som köar till samma delade resurs (göra semaforen grön).

Jonny Karlsson P-operation void P(semaphore s) { if(s > 0) if(s > 0) s--; s--; else else { enter_queue(); enter_queue(); pause(); pause(); P(s); P(s); }} Pseudo-kod för en P-operation

Jonny Karlsson V-operation void V(semaphore s) { s++; s++; if(!empty(process_queue)) if(!empty(process_queue)) wake_up(process_in_queue); wake_up(process_in_queue);} Pseudo-kod för en V-operation

Jonny Karlsson Programmeringsexempel semaphore s = 1; //1 while(1){ ej_kritisk_sektion_i(); //2 ej_kritisk_sektion_i(); //2 P(s); //3 P(s); //3 kritisk_sektion_i(); //4 kritisk_sektion_i(); //4 V(s); //5 V(s); //5} 1.Initialiserar semaforen med värdet 1 (grön) 2.Programmets icke-kritiska del = den del av programmet som inte hanterar en delad resurs 3.Före en kritisk sektion av programmet inleds utförs en P-operation.(1 – Testar, 2 väntar eller gör semaforen röd) 4.Programmets kritiska sektion = den del av programmet som hanterar en delad resurs. 5.När processen hanterat den delade resursen klart utför den en V-operation (Gör semaforen grön och väckar upp väntande processer)

Jonny Karlsson Ta i bruk en semafortabell #include int semget(key_t key, int nsems, int flag); keyPositivt heltal, samma i alla processer som använder samma semafor nsemsAntal semaforer som skall tas i bruk flagLiknande bitmönster som msgflg och shmflg (se meddelandeköer och delat minne). ex. 0777|IPC_CREAT ReturnerarSemaforidentifikator (heltal > 0) vid framgång -1 vid misslyckande

Jonny Karlsson Ta i bruk en semafortabell Process 1: #define SK 99 int SID; SID = semget(SK,1,0777|IPC_CREAT); Process 2: #define SK 99 int SID; SID = semget(SK,1,0777|IPC_CREAT); Ex. Process 1 och Process 2 skapar/tar i bruk en (en semafortabell innehållande endast en semafor) gemensam semafor.

Jonny Karlsson Hantering av en semafortabell #include int semctl(int semid, int semnum, int cmd, union semnum { int val; struct semid_ds *buf; unsigned short *array; } arg); semidsemaforidentifikatorn som returnerades av semget semnumindexvärdet på semafortabell-elementet där önskad semafor finns cmdsymbolikst värde som anger hurudan operation som skall utföras av semctl

Jonny Karlsson Hantering av en semafortabell GETVAL värdet på semaforen med index semnum returneras (fjärde parameter behövs ej, kan sättas till 0) GETVAL värdet på semaforen med index semnum returneras (fjärde parameter behövs ej, kan sättas till 0) SETVAL semaforen med index semnum får värdet arg.val (fjärde parameter skall vara ett heltal) SETVAL semaforen med index semnum får värdet arg.val (fjärde parameter skall vara ett heltal) GETPID processnummer returneras för den process som senast avläste eller ändrade värdet på semaforen med index semnum i semafortabellen. GETPID processnummer returneras för den process som senast avläste eller ändrade värdet på semaforen med index semnum i semafortabellen. GETNCNT ett heltal  0 returneras, detta heltal anger antalet processer, som väntar på att semaforen med index semnum skall inkrementeras (ifall index =+1 väntar processerna på en V-operation) GETNCNT ett heltal  0 returneras, detta heltal anger antalet processer, som väntar på att semaforen med index semnum skall inkrementeras (ifall index =+1 väntar processerna på en V-operation) GETZCNT ett heltal  0 returneras, detta heltal anger antalet processer som väntar på att semaforen med index semnum skall få värdet 0 GETZCNT ett heltal  0 returneras, detta heltal anger antalet processer som väntar på att semaforen med index semnum skall få värdet 0 GETALL värden på alla semaforer kopieras till tabellen arg.array.(semnum ej betydelse t.ex.0) GETALL värden på alla semaforer kopieras till tabellen arg.array.(semnum ej betydelse t.ex.0) SETALL semafortabellens semaforer får nya värden från tabellen arg.array (semnum ej betydelse) SETALL semafortabellens semaforer får nya värden från tabellen arg.array (semnum ej betydelse) IPC_RMID semafortabellen raderas. Alla processer som köar till någon av semaforerna väcks upp. IPC_RMID semafortabellen raderas. Alla processer som köar till någon av semaforerna väcks upp.

Jonny Karlsson Hantering av en semafortabell IPC_STAT semafortabellen status info sparas i den post som arg.buf adresserar. Denna post har datatypen struct semid_ds och definieras i sys/sem.h och sys/ipc.h IPC_STAT semafortabellen status info sparas i den post som arg.buf adresserar. Denna post har datatypen struct semid_ds och definieras i sys/sem.h och sys/ipc.h IPC_SET semafortabellen får nya status info från den post som arg.buf adresserar IPC_SET semafortabellen får nya status info från den post som arg.buf adresserar struct semid_dsInnehåller statusinfo om semaforen (se man-fil eller kursboken

Jonny Karlsson Hantering av en semafortabell /*initialiserar semaforvärdet i semafortabell[0] som indexeras /*av SID till värdet 1*/ semctl(SID, 0, SETVAL, 1); /*raderar semafortabell[0]*/ semctl(SID, 0, IPC_RMID, 0); Ex. Initialisering och radering av semafortabeller

Jonny Karlsson Semafor-operationer #include int semop(int semid, struct sembuf semoparray[], size_t nops); struct sembuf { ushort sem_num;Semaforens indexvärde i semafortabellen short sem_op;Semaforoperation sem_flgSemaforflagga: IPC_NOWAIT, SEM_UNDO eller 0 } (mera info om sem_op och sem_flg på nästa slide) nopsantalet semaforoperationer

Jonny Karlsson Semafor-operationer sem_op = -1P-operation: 1. semaforen testas 2. om semaforvärdet är > 0 får processen hantera delad resurs och utför operationen: semaforvärde += sem_op; (minskar semaforvärdet med 1) om semaforvärdet == 0 försätts processen i väntetillstånd med beaktande av värdet i semflg och efter att den uppväckts av en annan process utförs P-operationen på nytt. om semaforvärdet == 0 försätts processen i väntetillstånd med beaktande av värdet i semflg och efter att den uppväckts av en annan process utförs P-operationen på nytt. sem_op = 1V-operation: Operationen semaforvärde += semop (ökar semaforvärdet med 1) utförs alltid och samtidigt väcks alla processer som väntar på inkrementering av denna semafor.

Jonny Karlsson Semafor-operationer struct sembuf V_op, P_op; P_op.sem_num = 0; P_op.sem_op = -1; P_op.sem_flg = 0; V_op.sem_num = 0; V_op.sem_op = 1; V_op.sem_flg = 0; ej_kritisk_sektion(); semop(SID, &P_op, 1); kritisk_sektion(); semop(SID, &V_op, 1); Ex. P- och V-operationer