Velkommen til INF1060 Introduksjon til operativsystemer og datakommunikasjon 1
Forelesere Pål Halvorsen (paalh@ifi.uio.no) Nettverk og Distribuerte systemer (ND) (ved Simula) Tor Skeie (tskeie@ifi.uio.no) Nettverk og Distribuerte systemer (ND) (ved Simula) Michael Welzl (michawe@ifi.uio.no) Nettverk og Distribuerte systemer (ND) (ved IFI) Organisasjon: (alle organisatoriske spørsmål, vedr. oppgaver osv.): Hans Petter Taugbøl Kragset (hpkragse@ifi.uio.no) 2
Pensum-bøker Modern Operating Systems Andrew S. Tanenbaum, 2008. Pearson. 3rd edition. ISBN: 0136006639 http://www.pearsonhighered.com/product?isbn=0136006639 Alternativt: Operating Systems: A Systematic View William S. Davis and T.M. Rajkumar, 2004. Addison-Wesley. 6th edition. ISBN: 0-321-26751-6 Innføring i Datakommunikasjon Øyvind Hallsteinsen, Bjørn Klefstad og Olav Skundberg, 2008. Gyldendal Norsk Forlag, 2.utgave. ISBN 9788205384149. 3
Anbefalt litteratur The C programming Language Brian W. Kernighan, Dennis M. Ritchie. Prentice Hall. 2.utgave. ISBN 0-13-110362-8 C: A Reference Manual Samuel P. Harbison and Guy L. Steele, 2002. Prentice Hall. 5. utgave. ISBN: 0-13-089592-X 4
Hjemmeside Kursets hjemmeside: www.uio.no/studier/emner/matnat/ifi/inf1060/h16/ Er hovedkanalen for løpende informasjon om kurset. Lysark til forelesningene blir lagt på hjemmesiden Ukeoppgaver legges ut hver uke; senere kommer også løsningsforslag. Ukesoppgavene er også pensum! Obligatoriske oppgavene legges ut på hjemmesiden Hjemmeeksamen legges ut på hjemmesiden Viktige beskjeder dukker opp ved behov 5
Undervisningstilbud Forelesninger Introduserer konsepter, basis for pensum i faget Plenumstimer Dypere forståelse gjennom oppgaveløsning og eksemplifisering. Det er her du lærer C!!! Orakeltimer Én-til-én hjelp med oppgaver Ukesoppgaver Mengdetrening Obligatoriske oppgaver Tvungen trening til eksamen 6
Piazza Piazza brukes som Q&A-plattform http://piazza.com/uio.no Søk opp INF1060 Still spørsmål, få svar - hjelp andre, få hjelp! 12 min gjennomsnittlig responstid i fjor (!) 7
Obligatoriske oppgaver Det er tre obligatoriske oppgaver: To programmeringsoppgaver, en teorioppgave Én hjemmeeksamen De skal leveres individuelt Karakter på hjemmeeksamen teller 40% av sluttkarakteren Den avsluttende skriftlige eksamenen teller 60% Det blir digital eksamen Mer informasjon kommer senere (nærmere eksamen) 8
Følg med på hjemmesiden! 9
Forventninger Hva kan dere forvente å få ut av å ta kurset? Kjennskap til programmeringsspråket C og trening i å bruke det Forstå hva et operativsystem er og hvordan det fungerer Forstå grunnleggende egenskaper ved kommuniserende systemer Kunne skrive enkle programmer som kommuniserer over nettverk 10
Kursevalueringen 2015 Hva har vi gjort for å gjøre ting bedre? Nye obligatoriske oppgaver Ny hjemmeeksamen Forbedrede slides første tre forelensinger Økt bevissthet på deres bakgrunn (1000/1010) Tydeliggjøring av kursets form Vi tar dette på alvor! Har du tilbakemeldinger tas de imot med enorm takk! 11
Programmeringsspråket C (Foilene om C er basert på foiler laget av Dag Langmyhr) Bakgrunn: Implementasjon av Unix ved AT&Ts laboratorium i Palo Alto 1960-75 Navnet kommer fra BCPL B C Opphavsmannen heter Dennis Ritchie ANSI-standard i 1989 ( C89 ) ISO-standard i 1990 revidert versjon i 1999 ( C99 ) (ANSI-standard i 2000, men ANSI C betyr vanligvis C89) 12
Formålet med C Tilgang til maskinens ressurser Lite maskinavhengige programmer Kompakte programmer Raske programmer 13
C - Fordeler og ulemper Fordeler Kompilerer til svært rask kode Standarisert godt Ulemper Ikke innebygget feilhåndtering/feilmeldinger Portabilitet Fordel og ulempe Frihet Gjør hva du vil, men lite hjelp å få 14
Hvorfor er det nyttig å lære C? Det er flere grunner: C er fremdeles et veldig utbredt språk C brukes i mange større programmeringsprosjekter C og Unix er uløselig knyttet sammen Med C kan man skrive raskere kode enn de fleste andre språk Programmering i C gir en følelse av hvordan datamaskinen fungerer 15
Hello World Alle lærebøker i programmering har med følgende lille eksempel: #include <stdio.h> int main(void) { printf("hello 1060!\n"); } (Det var Kernighan & Ritchies første bok om C som startet denne moten!) I Java ser programmet slik ut: class Hello { public static void main(string args[]) { System.out.println("Hello 1060!"); } } 16
Kompilering Følgende kommando brukes til å kompilere programmet: $ gcc hello.c -o hello Det kompilerte programmet kjøres med: $./hello Alternativ til gcc: clang - http://clang.llvm.org/ 17
Navn Store og små bokstaver: Det er forskjell på store og små bokstaver I C. MAIN, Main og main er tre helt ulike navn. 18
Funksjoner En C-funksjon ligner veldig på en metode i Java. Den består alltid av fire deler: type på returverdien. navn på funksjonen. parameterliste med typeangivelse av hver parameter. kroppen som er selve funksjonen. parameterliste type navn #include <stdio.h> int main(void) { printf("hello 1060!\n"); } kropp 19
Tekstkonstanter Brukes akkurat som i Java. String Spesialtegn: String\n 20
Utskrift printf (ikke automatisk linjeskift!): printf( Ikke linjeskift ); printf( Nå med linjeskift!\n ); Utskrift av tall: printf( Velkommen til %d, alle sammen, 1060); 21
Datatyper i C I C har vi diverse datatyper som følger: Navn Bytes char minst 1 Vi vet også størrelsesrekkefølgen: char <= short <= etc. short minst 2 int minst 2 long minst 4 Siden C99 har vi også long long med minst 8 byte 22
Datatyper i C: signed / unsigned Datatypene finnes signed eller unsigned f.eks. signed char, unsigned char Samme størrelse i minne, en annen måte å lagre taller på: 2-komplement unsigned char: binær 11111111 = 255 (tallene 0.. 255) signed char: binær 11111111 = -1, 11111110 = -2,.. (tallene -128.. 127) 23
Operatorer C har alle de vanlige, aritmetiske operatorene + - * / % Disse kan (som i Java) brukes ved tilordning av verdier: a += 5; //a = a + 5; a *= 10; //a = a * 10; a++; //a += 1; a--; //a -= 1; 24
Sammenligninger Sammenligningsoperatorer er de samme som i Java: == Likhet!= Ulikhet < Mindre enn <= Mindre enn eller lik > Større enn >= Større enn eller lik IKKE bland == og = 25
Logiske verdier/operatorer Logiske verdier: Det finnes ingen boolean type i C! I stedet brukes heltall der 0 er false og alle andre verdier er true. Logiske operatorer (som i Java) &&! 26
Binære operatorer Binære operatorer (som i Java): ~ not & and or ^ xor a b ~a a & b a b a ^ b 0 0 1 0 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 1 0 1 1 0 NB! Ikke bland sammen logiske og binære operatorer! int a = 1 && 4; // a = 1 int b = 1 & 4; // b = 0 // 1: 0001 // 4: 0100 27
OBS om C syntax Stort sett det samme som i Java... MEN: Java kompilatoren forhindrer at typer blandes Trolig fordi blanding av typer viste seg å være en vanlig feilkilde med C (og C++) Siden det ikke finnes noen egen boolean typ, og 0 tolkes som feil, er det viktig å skille bruk av = vs. ==, & vs. && etc. 28