Jonny Karlsson 11.3.2008 PROCESSPROGRAMMERING Föreläsning 6 (11.3.2008) Innehåll: -IPC: Semaforer -Exekveringstrådar (threads) -Introduktion till Java.

Slides:



Advertisements
Liknande presentationer
INTRODUKTION TILL PROGRAMMERING
Advertisements

Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 1 ( ) Innehåll: -Introduktion av kursen -Program och processer -Fildeskriptorer -Filhantering.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 3 ( ) Innehåll: -Namngivna rörledningar -Signaler -Signalhantering.
Funktioner och programorganisation
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
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.
Metoder i java Det finns två typer av metoder i java
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Programmeringsteknik K och Media
Föreläsning 8 Appletprogram/fristående grafiska program Rita linjer, rektanglar mm Skriva text Byta färg Appletprogram html.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kap 3 & 4: Processer & trådar.
Föreläsning 13 Polymorfism, Paket och JAR-filer. Polymorfism Ordet härstammar från grekiskan Poly – många Morf – form Polymorf – många former Någonting.
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.
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() -
Programmeringsteknik för Media1 & K1
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.
Programspråk Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande program och kompilerande program. Python är ett interpreterande.
Mitt första Java program Mahmud Al Hakim Copyright, Mahmud Al Hakim, 1.
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 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.
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.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
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.
Java paket och jar-filer
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.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 5 ( ) Innehåll: IPC: meddelandeköer IPC: delat minne.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska operatorer och logiska uttryck -Referenstyper.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( )‏ Innehåll:  Introduktion till Java EE (Enterprise Edition)  Enterprise Java Beans.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Introduktion till programmeringsspråket Java -Den allmänna.
INTRODUKTION TILL PROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Repetitionssatser: do-satsen och for-satsen -Operatorer:
PROCESSPROGRAMMERING Föreläsning 1 ( )‏ Innehåll: Introduktion till paralellprogrammering (“concurrent programming”)‏ Introduktion till parallellprogrammering.
Föreläsning 13 Appletprogram/fristående grafiska program Arv Rita linjer, rektanglar mm Skriva text, byta färg Appletprogram & HTML Grafiska användargränssnitt.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 7 ( ) Innehåll: -IPC: Meddelandeköer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 9 ( ) Innehåll: - IPC: Semaforer.
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.
Programmeringsteknik för K och Media
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.
OOP&M - teori1 OOP del III–vecka 15 Mer NetBeans MouseEvent Graphics Threads TIJ Chapter 14 Menus sid Drawing File Dialogs
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 3 Väsentliga delar i ett Javaprogram Input i paketet extra
Anders Sjögren Funktioner något in och något annat ut.
Presentationens avskrift:

Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: -IPC: Semaforer -Exekveringstrådar (threads) -Introduktion till Java Applet programmering

Jonny Karlsson Semaforer 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

Jonny Karlsson Exekveringstrådar (threads) Exekveringstrådar är en lättviktsvariant av processer. Är egentilgen inga processer utan varje tråd hör till en process Alla trådar exekveras parallellt. Skillnad mellan trådar och processer: En process består av en programdel, en datadel och en mängd tillgängliga resurser (öppna deskriptorer, reserverat minne o.s.v.). En tråd består av en ”uppgift” (är oftast en funktion som utför trådens arbete) och delar på samma data och resurser som andra trådar. P.g.a. att trådarna delar på gemensamma resurser och att de inte kör ett helt program är de resurssnåla, både CPU-mässigt och minnesmässigt. Tiden att skapa en ny tråd är obetydlig, medan en processklyvning kan ta en viss tid. (Processklyvning kopierar ju all data och programkod till den nya processen)

Jonny Karlsson Introduktion till Java Applet programmering En ”Java Applet” är ett program som kan köras i en Web-bläddrare genom att använda en Java Virtual Machine (JVM). Basstrukturen för för en Applet ser ut som på följande sida.

Jonny Karlsson Introduktion till Java Applet programmering //Följande paket måste importeras import java.applet.*; import java.awt.*; // Nedärver den egna applet klassen från klassen Applet public class MinApplet extends Applet { // Följande metoder behövs I alla Applets // init – anropas första gången man kommer in på HTML-sidan där “appleten” finns public void init() {... } // start – anropas varje gång man kommer in på HTML-sidan där “appleten” finns public void start() {... } // stop – anropas om man lämnar sidan med “appleten” public void stop() {... } // destroy – anropas om man lämnar applet-sidan för gått (t.ex. Stänger av browsern) public void destroy {... } //paint – tillåter en att “rita” i en applet (t.ex. Skriva text eller rita en figur). Metoden anropas bl.a. om man flyttar på //brower-fönstret eller om repaint() anropas public void paint (Graphics g) { } }

Jonny Karlsson Introduktion till Java Applet programmering Efter att applet-koden kompilerats med javac (t.ex. I JCreator-editorn eller direkt från kommandoraden) kan en applet integreras i HTML koden på följande sätt: </html> För att ovanstående HTML-kod skall fungera förutsätts det att man har kompilerat MinApplet.java med framgång och att MinApplet.class finns i samma katalog som html- filen. Efter detta är det bara att öppna html-filen i en browser (internet-bläddrare) För att kunna köra en Java-applet via browsern krävs det att man har installerat Java Runtime Environment (JRE) på datorn och en plug-in för den i browsern.