Dagens program. Operativsystemer Prosesser og systemkall i UNIX Hente prosessens nummer Starte prosesser Vente på prosesser Utføre programmer

Like dokumenter
IN 147 Program og maskinvare

Dagens tema (kapittel 15 i Englander-boken)

Prosesser. Dagens tema. Hva er en prosess? En prosess er et program under utførelse.

Dagens tema. Nyttige programmer Programmet make. Flyt-tall Representasjon av flyt-tall. Standarden IEEE 754. Systemkall i Unix

Dagens tema. Nyttige programmer Programmet make. Hvis én fil endres, hvilke filer må da kompileres på nytt?

Dagens tema: Parallellstyring

Prosesstabeller (PCB - Prosess Control Block) Se på PD: kommandoene ps og top Bakgrunnsprosesser Opprettelse av prosesser:

Oppsummering av IN147 siste del Operativsystemer Parallellisering Veien videre

Dagens tema INF1070. Info om C. Cs preprosessor. Feilsøking. Dag Langmyhr,Ifi,UiO: Forelesning 31. januar 2005 Ark 1 av 29

Informasjon om C. Dagens tema INF1070 INF1070 INF1070 INF1070. Den viktigste kilden til informasjon om C (utenom en god. C-funksjonene.

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

IN 147 Program og maskinvare

Pekere og vektorer. Dagens tema. I C gjelder en litt uventet konvensjon:

Dagens tema. Det siste om C Pekere og vektorer. Pekere til pekere. Vanlige pekerfeil. struct-er og typedef. Lister. Feilsøking

IN 147 Program og maskinvare

Nyttige Linux-kommandoer. Hvordan du kan jobbe mer effektivt Dag Langmyhr

Programmeringsspråket C

IN 147 Program og maskinvare. Vanlige feil ved bruk av pekere Feilsøking Debuggere

Signaturer. Dagens tema. En vanlig feil int-funksjon. Dette kan noen ganger gi rare feilmeldinger: INF1070 INF1070 INF1070 INF1070

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Del 1 En oversikt over C-programmering

Dagens tema INF1070. Vektorer (array er) Tekster (string er) Adresser og pekere. Dynamisk allokering

Dagens tema INF1070. Signaturer. Typekonvertering. Pekere og vektorer. struct-er. Definisjon av nye typenavn. Lister

Dagens tema C, adresser og pekere

Ark 3 av 26. printf("i adresse %08x ligger b med verdien %d.\n", &b, b); printf("i adresse %08x ligger a med verdien %d.

Oving 2. Oppgave 1. #include <stdio.h> int main(int argc, char **argv) { char *navn = argv[1]; printf ("Navnet ditt er %s\n", navn); } Oppgave 2

Programmeringsspråket C Del 2

Hvordan en prosessor arbeider, del 1

Programmeringsspråket C

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

IN 147 Program og maskinvare

Programmeringsspråket C

Kapittel 1 En oversikt over C-språket

Dagens tema INF2270. Cs preprosessor. Separat kompilering av C funksjoner. C og minnet. Dag Langmyhr,Ifi,UiO: Forelesning 5. februar 2007 Ark 1 av 15

Programmeringsspråket C Del 2

Programmeringsspråket C Del 2

IN 147 Program og maskinvare

Sikkerhet: Virus Sikkerhet i operativsystemet Maskinstøtte for sikkerhet Trojanske hester Ormer. IN 147 Program og maskinvare.

EKSAMEN. Operativsystemer. 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater.

IN 147 Program og maskinvare. Velkommen til IN 147. Program- og maskinvare

Vektorer. Dagens tema. Deklarasjon. Bruk

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

IN 147 Program og maskinvare

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Del 4 Noen spesielle C-elementer

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Oppgave 1 - Linux kommandolinje (%)

Oversikt. Beskrivelse Bash. 1 UNIX shell. 2 Kommandolinje som brukergrensesnitt. 3 Input og output. 4 Bash builtins. 5 Linux utilities.

Kjøresystemer. Hva er et kjøresystem? Den abstrakte maskinen SIMPLESEM (2.6) Klassifisering av språk: Parametre (2.7.7) Statiske språk (

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

2 Om statiske variable/konstanter og statiske metoder.

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

HØGSKOLEN I SØR-TRØNDELAG

INF225 høsten 2003 Prosjekt del 4: kodegenerering

Dagens tema: Enda mer MIPS maskinkode

Oversikt over IN147(A):

Semantikk. Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Semantikk. Semantikk. En måte å svare på: gi semantikken til språket!

IN 147 Program og maskinvare

Programmering i C++ Løsningsforslag Eksamen høsten 2005

2 Om statiske variable/konstanter og statiske metoder.

Definisjon av prosess

IN 147 Program og maskinvare

Programmeringsspråket C Del 2. Michael Welzl

Dagens tema INF1070. Vektorer (array-er) Tekster (string-er) Adresser og pekere. Dynamisk allokering

Dagens tema: Liten repetisjon Håndtering av statusverdier

Dagens tema. Perl: Mer om regulære uttrykk Filer Lister og tabeller Kompilering og interpretering (kapittel ) IN 211 Programmeringsspråk

Cs preprosessor. Dagens tema. Betinget kompilering

Dagens tema. Adresser som parametre Dynamisk allokering Signaturer Definisjon av nye typenavn Typekonvertering Pekere og vektorer

Dagens tema: Datastrukturer

HØGSKOLEN I SØR-TRØNDELAG

Programmeringsspråket C Del 2. Hans Petter Taugbøl Kragset

Oppgavene 1, 2, 4, 5, 6, 9, 12 og 13 passer best til å løses ved en datamaskin.

Mer om Perl INF3110/4110. Filer og bruk av disse. Lister. Tabeller. Søking og regulære uttrykk. Oppsummering

Dagens tema. Mer om C Enkle datatyper Sammensatte datatyper: Vektorer og matriser Tekster Mengder Strukturer Unioner Ringbuffere

Dagens tema INF2270. Signaturer. Typekonvertering. Pekere og vektorer. struct er. Definisjon av nye typenavn. Lister. Info om C

oppgavesett 4 INF1060 H15 Øystein Dale Hans Petter Taugbøl Kragset September 22, 2015 Institutt for informatikk, UiO

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Fra Python til Java, del 2

IN 147 Program og maskinvare

Betinget eksekvering og logiske tester i shell

Mer om C programmering og cuncurrency

INF1000 : Forelesning 4

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

Debugging. Tore Berg Hansen, TISIP

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Løsningsforslag til eksamen i IN 147(A)

Programmeringsspråket C Del 3. Michael Welzl

Programmeringsspråket C Del 3. Hans Petter Taugbøl Kragset

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

INF1000: noen avsluttende ord

IN 147 Program og maskinvare. Dagens tema:

Utførelse av programmer, metoder og synlighet av variabler i JSP

Transkript:

Dagens program Operativsystemer Prosesser og systemkall i UNIX Hente prosessens nummer Starte prosesser Vente på prosesser Utføre programmer Nyttige forklaringer Sikker opprettelse av nye prosesser Hva er en kommandotolker? Ark 1 av 18 Forelesning 28.3.2001

Hva er en prosess i UNIX? En prosess er et program under utførelse. Prosessen består av Hurtiglager for kode, data og stakk: Stakk Tomt Data Kode Registerinnhold. Systeminformasjon, blant annet et prosessnummer (en såkalt PID). Forelesning 28.3.2001 Ark 2 av 18

Hvordan kommunisere med operativsystemet? Brukerprogrammer har behov for å kommunisere med operativsystemet, blant annet for å få utført I/U. Forskjellige operativsystemer benytter ulike teknikker til dette: Hopp til spesielle adresser (CP/M). Spesielle instruksjoner (som SysCall). Ulovlige instruksjoner. Systemkall (UNIX). Et systemkall er et kall på en C-rutine som ligger i operativsystemet. Forelesning 28.3.2001 Ark 3 av 18

Et enkelt systemkall Filen pid.c #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { printf("prosessen har PID=%d\n", (int)getpid()); return 0; maskin navn> pid Prosessen har PID=20796 maskin navn> pid Prosessen har PID=20797 getpid gir oss altså prosess-id (PID) til den kallende prosessen. Forelesning 28.3.2001 Ark 4 av 18

Hvordan opprette en ny prosess? Den absolutt eneste måten å opprette nye prosesser på i UNIX er å benytte systemkallet fork. Fork gjør følgende: 1. En ny prosess opprettes. 2. Den nye prosessen er en nøyaktig og fullstendig kopi av foreldre-prosessen. Det eneste som er forskjellig, er at de har forskjellig PID. 3. Begge prosessene fortsetter eksekveringen etter fork-kallet. Forelesning 28.3.2001 Ark 5 av 18

Filen fork1.c #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { printf("prosessen har PID=%d\n", (int)getpid()); fork(); printf("nå er PID=%d\n", (int)getpid()); return 0; maskin navn> fork1 Prosessen har PID=20803 Nå er PID=20804 Nå er PID=20803 Forelesning 28.3.2001 Ark 6 av 18

Foreldre og barn Den prosessen som opprinnelig utførte fork-kallet, kalles foreldreprosessen, ogde som opprettes, kalles barneprosesser. For å kunne skille de to prosessene, benyttes følgende løsning for returverdien fra fork: Barneprosessen får 0. Foreldreprosessen får barnets PID. Filen fork2.c #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { pid_t pid; pid = fork(); if (pid == 0) { printf("dette er barnet\n"); else{ printf("barnet har PID=%d\n", (int)pid); return 0; maskin navn> fork2 Dette er barnet Barnet har PID=20811 Forelesning 28.3.2001 Ark 7 av 18

Hvordan avslutte prosesser? En prosess kan avslutte normalt på tre forskjellige måter: Prosessen terminerer (med ukjent status) når programmet avsluttes. Hvis hovedprogrammet (main) avsluttes med en return-setning, vil dette være prosessens statusverdi. Systemkallet exit vil terminere prosessen, samt angi statusverdi. Statusverdi 0 angir «status OK»; andre verdier angir en feilsituasjon. Forelesning 28.3.2001 Ark 8 av 18

Å vente på andre prosesser Systemkallet wait benyttes til å vente på at prosessens barn skal bli ferdige. Kallet #include <sys/types.h> #include <sys/wait.h> pid_t n; int status;. n = wait(&status); vil gjøre følgende: Hvis det ikke finnes flere barne-prosesser, returnerer wait øyeblikkelig med n = 1. Når det finnes barn som er ferdige, returnerer wait med følgende parametre: n er PID til barnet. status (nest nederste byte) inneholder barnets statusverdi. status (nederste byte) inneholder data om hvorledes barnet ble avsluttet; 0 angir nomal stopp. Hvis det bare finnes levende barn, blir prosessen som kaller wait blokkert til ett av barna er ferdig. Forelesning 28.3.2001 Ark 9 av 18

Filen fork3.c #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main(void) { pid_t pid, n; int status; pid = fork(); if (pid) { /* Samme som (pid!= 0) */ printf("opphavet har PID=%d, ", (int)getpid()); printf("barnet har PID=%d\n", (int)pid); printf("nå venter opphavet...\n"); n = wait(&status); printf("n=%d, status=0x%x\n", (int)n, status); return 0; else{ printf("barnet har PID=%d\n", (int)getpid()); printf("barnet får status=99\n"); exit(99); maskin navn> fork3 Barnet har PID=20818 Barnet får status=99 Opphavet har PID=20817, barnet har PID=20818 Nå venter opphavet... n=20818, status=0x6300 Forelesning 28.3.2001 Ark 10 av 18

Hvordan utføre programmer? Systemkallet execve benyttes til å utføre programmer. Kallet execve("/usr/bin/pwd", param, env); vil gjøre følgende: Alt innholdet av prosessen som utfører kallet, vil bli erstattet av innholdet av filen /usr/bin/pwd. Parametre og omgivelsen overføres. Den nye prosessen kjøres. Det er altså ingen retur fra en execve med mindre noe går galt! (Det finnes mange varianter av execve; ofte benyttes navnet exec om alle sammen. Forskjellen mellom de forskjellige dreier seg for det meste om hvorledes man kan sløyfe parametre eller gi disse på en alternativ måte. I dette kurset vil vi kun benytte execve.) Forelesning 28.3.2001 Ark 11 av 18

Filen pwdx.c #include <stdio.h> #include <sys/types.h> #include <unistd.h> char *empty[1] = {NULL; int main(void) { execve("/usr/bin/pwd", empty, empty); perror("pwdx"); exit(1); maskin navn> pwdx /ifi/ganglot/a09/kritisk/in147/v01/forelesninger/kode Forelesning 28.3.2001 Ark 12 av 18

Parametre til execve Andre og tredje parameter til execve angir parametre til kommandoen og omgivelsen kommandoen skal utføres i. Begge parametre er adresser til vektorer av pekere til tekster, og begge vektorene må avsluttes med en NULL-peker. Filen lsx.c #include <stdio.h> #include <sys/types.h> #include <unistd.h> char *par[] = { "ls", "-acf", NULL ; char *env[] = { NULL ; int main(void) { execve("/bin/ls", par, env); perror("lsx"); exit(1); maskin navn> lsx./../ lsx* lsx.c test-a@ Omgivelsen er de variable som overføres mellom forskjellige utgaver av kommandotolkeren. I (ba)sh angis disse variablene som export, i (t)csh med direktivet setenv. Forelesning 28.3.2001 Ark 13 av 18

Program-parametre Parametrene kan komme som parametre til hovedprogrammet (main) og omgivelsesvariablene som den globale pekeren environ evt. som en tredje parameter til main slik vi har brukt det. Filen pars.c #include <stdio.h> extern char **environ; int main(int argc, char *argv[]) { char **ep; int i; for (i = 0; i < argc ; i++) printf("argv[%d]= %s \n", i, argv[i]); ep = environ; while (*ep) { printf("%s\n", *ep); ++ep; return 0; Forelesning 28.3.2001 Ark 14 av 18

maskin navn> pars -la 122 /bin/cp argv[0]= pars argv[1]= -la argv[2]= 122 argv[3]= /bin/cp PWD=/ifi/ganglot/a09/kritisk/in147/V01/Forelesninger/Kode JDBC_HOME=/hom/kritisk/jConnect/JConnect4.0 TZ=MET WINDOWID=71303182 PAGER=less. Antallet parametre er gitt i argc, mens listen av omgivelsesvariable avsluttes med en NULL-peker. Forelesning 28.3.2001 Ark 15 av 18

Hvordan kvele et UNIX-system? Selv om UNIX-implementasjoner er godt sikret, finnes det kode som kveler de aller fleste: while(1) {... fork();... hvor det ikke er tilstrekkelig mange kall på wait. Som en løsning er det blitt skrevet en egen fork: safefork, som kun tillater seks barneprosesser opprettet pr. prosess; forøvrig oppfører den seg akkurat som fork. Koden ligger på ~in147/kode/safefork.c. Alle IN147-studenter anmodes intenst om å bruke safefork i stedet for fork. Kopiér filen til området der programmet ditt ligger. Forelesning 28.3.2001 Ark 16 av 18

Kommandotolkeren En kommandotolker (ofte kalt «shell» på engelsk) er et program som leser brukerens kommandolinjer og kaller de riktige programmene. De vanligste kommandotolkerne heter sh (Bourne shell), csh (C shell) og bash («Bourne-again shell»). Snart kommer ifish (Ifi shell). En kommandotolker (som (ba)sh) gjør (sterkt forenklet) følgende når den skal utføre vanlige kommandoer: while (1) { skriv klarsignal ( prompt ) les brukerens kommandolinje splitt linjen i kommando og parametre if ( tolkerkommando som exit eller cd ) { utfør kommandoen else{ if (safefork() == 0) { finn programfilen til kommandoen execve( programfil, parametre, omgivelse ); else{ vent til barnet er ferdig wait(&status); Forelesning 28.3.2001 Ark 17 av 18

Hvordan finne programmene? Når brukeren gir en kommando som tail, hvilken programfil menes da? Det finnes (foreløbig) 24 åpne filer som heter tail på systemet. Omgivelsesvariabelen PATH forteller hvilke filområder som kommandotolkeren skal lete i: maskin navn> printenv PATH /ifi/mjollnir/objectstore/ostore/bin:/ifi/mjollnir/objectstore/osji/bin:/local/vlsi/bin/sol: /ifi/ganglot/a09/kritisk/bin:/local/x11r5/bin:/local/x11r5/bin/pbm:/local/java/jdk1.2/bin: /local/bin/texmf:/local/bin:/local/ssh/bin:/local/bin/msdos:/opt/sunwspro/bin:/usr/openwin/bin: /usr/dt/bin:/usr/ccs/bin:/usr/ucb:/usr/bin:/local/sybase11/sol/bin:/local/gnu/bin:/local/qt/bin:.:/local/etc:/etc:/local/drift/bin:/local/hacks/bin/sol:/local/hacks/bin:/local/kt-lab/bin: /ifi/levding/mysql/mysql/bin:/local/vbroker/bin:/local/oracle/8.0.5/bin De aktuelle områdene er angitt med kolon som skilletegn. Hvis man lurer på hvilken programfil som velges, kan man skrive maskin navn> which tail /usr/ucb/tail Forelesning 28.3.2001 Ark 18 av 18