Jonny Karlsson 12.2.2007 1 PROCESSPROGRAMMERING Föreläsning 2 (12.2.2007) Innehåll: -Processtruktur -Processklyvning och kodbyte -Avslutning av processer.

Slides:



Advertisements
Liknande presentationer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
Advertisements

Avlusning Debugger (”avlusare”) Breakpoints Watch.
INTRODUKTION TILL PROGRAMMERING
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.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 3 ( ) Innehåll: -Namngivna rörledningar -Signaler -Signalhantering.
Funktioner och programorganisation
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
Filhantering Grundprincipen för filhantering Öppna filen
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.
Föreläsning 4 Python: mera om funktioner och parametrar
2D1311 Programmeringsteknik med PBL Föreläsning 4 Skolan för Datavetenskap och kommunikation.
Programmeringsteknik för K och Media
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 5 Python: argument från kommando-tolken
Föreläsning 4 Python: Definiering av egna funktioner Parametrar
Distribuerade filsystem
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kap 3 & 4: Processer & trådar.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 11: Implementation av filsystem.
Föreläsning 5.  Idag  Kap 7 i Dawson  Filer  Felhantering med try…except.
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 6 ( ) INNEHÅLL: -Mera om tabeller.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 7 ( ) Innehåll: -Datakanaler och datakanalpar -Kommunikation på samma dator med datakanaler.
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; }
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( )‏ Innehåll:Trådsäkerhet - Intrinsic locks och synkronisering - Synchronized statements.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar.
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 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
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.
Anders Sjögren Pekare. Anders Sjögren Skapa ett program som byter plats på två heltal Pekare.
DD1311 P ROGRAMMERINGSTEKNIK MED PBL Föreläsning 9 Skolan för Datavetenskap och kommunikation.
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.
Föreläsning 14 ”Enkel” Filhantering.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Namnrum, räckvidd och rekursion Linda Mannila
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 11 ( ) Innehåll: - Förmedling av fildeskriptorer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 3 ( ) Innehåll: -Processtruktur -Processklyvning och kodbyte -Avslutning av processer.
INTRODUKTION TILL PROGRAMMERING
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 11 C# I/O Streams C# använder “strömmar” för in- och utmatningsoperationer.
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.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
1 Sockets Traditionellt har UNIX varit svag på IPC, InterProcess Communication. I augusti 1983 kom en ny IPC-mekanism i 4.2BSD som var enkel om konsistent.
INTRODUKTION TILL PROGRAMMERING
PROCESSPROGRAMMERING Föreläsning 1 ( )‏ Innehåll: Introduktion till paralellprogrammering (“concurrent programming”)‏ Introduktion till parallellprogrammering.
Anders Sjögren Filer - långtidslagring. Anders Sjögren Filtyper i DOS talet ett ( intx=1; ) lagrat i en –textfil, (en sekvens av tecken ( bytes )) enligt.
2D1311 Programmeringsteknik med PBL Föreläsning 4 Skolan för Datavetenskap och kommunikation.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 7 ( ) Innehåll: -IPC: Meddelandeköer.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
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.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( ) Innehåll: -Fildeskriptorer -Filhantering -Felhantering.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: -Exekveringstrådar.
Get-id.c main( ) { printf( "My PID is %d\n", getpid( ) ); printf( "My parent's PID is %d\n", getppid( ) ); printf( "My User ID (UID) is %d\n", getuid(
Program indata ? utdata 1/20 Vahid Mosavat, Nada, KTH.
Föreläsning 3 Väsentliga delar i ett Javaprogram Input i paketet extra
Jimmy Hedman South Pole AB Linuxkonsult sedan -00
Presentationens avskrift:

Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( ) Innehåll: -Processtruktur -Processklyvning och kodbyte -Avslutning av processer -Processynkronisering -Programmerade rörledningar -Namngivna rörledningar

2Jonny Karlsson Processtruktur Två olika processtyper i Unix: Huvudprocess-Föräldraprocess-Master Slavprocess-Barnprocess-Slave En föräldraprocess kan ha flera barnprocesser och en barnprocess endast en föräldraprocess

3Jonny Karlsson Processtruktur Alla öppna processer identifieras med en unik process-ID (PID) Specialprocesser: PIDAnvänds avFunktion 0kernel Systemprocessen 1initSköter om uppstart av Unix systemet efter ”reboot” 2pagedaemonAnsvarar för sökning i det virtuella minnessystemet pid_t getpid(void)returnerar nuvarande processens PID pid_t getppid(void)returnerar föräldraprocessens PID

4Jonny Karlsson Processklyvning Systemanropet fork() används i Unix för att starta upp en ny process från en innevarnade process. (kloning av en process).

5Jonny Karlsson Processklyvning pid_t fork (void) Öppnar en ny paralell process (barnprocess) som blir en fullständig kopia av förälderprocessen. Båda processerna fortsätter exekveringen som normalt genast efter fork() anropet. fork() funktionen returnerar ett heltal (pid_t) som kan ha följande värden: -1 =Error 0 = Barnprocess OK till barnprocessen >1=Barnprocessens PID till Föräldraprocessen fork() anropas en gång men returnerar två gånger. Barnprocessen mottar en nolla eftersom en barnprocess inte kan ha fler än en förälderprocess Förälderprocessen mottar den uppstartade barnprocessens PID, eftersom en förälder kan ha flera barnprocesser 

6Jonny Karlsson Kodbyte Med kodbyte menas uppstart och exekvering av en programkod lagrat i en annan programfil. Används vanligtvis genast efter processklyvning (fork) och startar upp ett program som skall exekveras av barnprocessen. Funktioner för kodbyte: - execl(), execv(), execle(), execve(), execlp(), execvp() Se manualfilerna (man) int execl(char *name, char *arg1, char *arg2,...., char *argn, 0); namepekare på programkodens filnamn arg1pekare på teckensträng för uppstart av programkoden arg2pekare på parameter 1 arg2pekare på parameter 2 argn... Sista parameterAlltid 0 

7Jonny Karlsson Avslutning av processer En process avslutas vanligen med exit(), return() eller _exit() kommondot i programmets main() funktion. void exit(int status) void _exit(int status) void return(int status) Dessa funktioner berättar för föräldraprocessen hur barnprocessen avslutats. status = 0vid normal processavslutning status = felkodvid processavslutning som förorsakats av ett fel.

8Jonny Karlsson Processynkronisering En föräldraprocess kan vänta på avslutning av en barnprocess med systemanropen wait() eller waitpid() pid_t wait (int *status); pid_t waitpid(pid_t pid, int *status, int options) se man fil pid_t Den avslutade barnprocessens PID statusEtt heltalsvärde som hänvisar till barnprocessens ”exit kod” Funktionerna wait() och waitpid() kan vid anropet reagera på tre olika sätt: 1.blockerar föräldraprocessen ifall barnprocessen fortfarande är aktiv 2.returnarar omeldelbart slutstatus från en redan avslutad barnprocess 3.returnerar omedelbart ett felmeddelande ifall föräldern inte har någon barprocess att vänta på 

9Jonny Karlsson Processynkronisering status kan analyseras med ett antal makron definierade i sys/wait.h: WIFEXITED(status), WEXITSTATUS(status), WIFSIGNALED(status), WTERMSIG(status), WIFSTOPPED(status), WSTOPSIG(status) (se man wait för mera info) exempel: WEXITSTATUS(status)Returnerar barnprocessens ”exit kod” 

10Jonny Karlsson Programmerade rörledningar Är det äldsta och fortfarande vanligaste sättet att förverkliga kommunication mellan UNIX-processer Används vanligen för kommunikation mellan en föräldraprocess och en eller flera barnprocesserBegränsningar: Kan endast användas mellan processer som är släkt med varandra i rakt nedstigande led. (minst en fork i mellan) Kommunikationen är Halv-Duplex (kommunikation möjlig endast i en riktning)

11Jonny Karlsson Programmerade rörledningar ATT SKAPA EN PROGRAMMERAD RÖRLEDNING En programmerad rörledning skapas i ett C-program med systemanropet pipe int pipe(int filedes[2]); pipe skapar, förutom själva rörledningen, ett par fildeskriptorer filedes[0]Pekar på rörledningens läsända filedes[1]Pekar på rörledningens skrivända Returnerar:0 vid framgång -1 vid misslyckande

12Jonny Karlsson Programmerade rörledningar ATT SKRIVA TILL ELLER LÄSA FRÅN EN RÖRLEDNING Skrivning till eller läsning från en programmerad rörledning kan göras på samma sätt som vid filhantering Man skriver till rörledningens skrivända: write(filedes[1], buffer, strlen(buffer)); och läser från rörledningens läsända: read(filedes[0], buffer, strlen(buffer)); En fildeskriptor kan associeras med en strömpekare med systemanropet fdopen strompek = fdopen(filedes[1], ”w”); strompek2 = fdopen(filedes[0], ”r”); Vartefter man kan skriva till rörledningen med fprintf(strompek,...) och läsa ur rörledningen med fscanf(strompek2,...)

13Jonny Karlsson Programmerade rörledningar STÄNGNING AV EN ÖPPEN RÖRLEDNING Görs på samma sätt som vid stängning av öppna filer: close(filedes[0]);Stänger rörledningens läsända close(filedes[1]);Stänger rörledningens skrivända 

14Jonny Karlsson Programmerade rörledningar ANVÄNDNING AV PROGRAMMERADE RÖRLEDNINGAR Om samtidig kommunikation i båda riktningarna mellan två processer önskas, krävs två rörledningar Vanligen skapar föräldraprocessen först 2 rörledningar och kallar därefter på fork. Därefter stänger föräldra- och barnprocessen var sin ända av var sin rörledning.

15Jonny Karlsson Programmerade rörledningar För en process som uppstartats av barnprocessen till följd av kodbyte (execl) är deskriptortabellen (filedes[2] i exemplet tdigare) som skapats i förldraprocessen obekant. Man brukar därför koppla rörledningens läsända till standard input och skrivända till standard output i barnprocessen. Detta måste göras i barnprocessen före kodbyte. En rörlednings läsanda kopplas till standard input enligt följande: close(0)Standard input stängs dup(filedes[0])Skapar en kopia av rörledningens läsdeskriptor med lägsta möjliga deskriptorvärde (I detta fall 0 eftersom deskriptor 0 stängdes före dup close(filedes[0])Ursprungliga läsdeskriptorn stängs Efter detta kan barnprogrammet som uppstartats som följd av kodbyte läsa data ur rörledningen via deskriptor 0 eller strömpekare stdin En rörlednings skrivända kopplas till standard output på motsvarande sätt. 