0. Programmering och operativsystem Aarne Ranta Datorintroduktion 2008, D och DV, Chalmers & GU %!target:html %!postproc(html): #NEW %!postproc(html): #HR
#NEW ==Den här kursen== Introduktion till - datoranvändning - programmering - datavetenskap Utformad för dem som vet och skall veta mest om datorer och programmering - D-linjen på Chalmers - DV-linjen på Göteborgs Universitet #NEW ==Webbsidan== Hur hittar man den: från svårast till lättast 0. Navigera i Chalmers studieportal ``` http://www.student.chalmers.se/ ``` 1. Anteckna URL (Uniform Resource Locator) ``` http://www.cs.chalmers.se/~aarne/datorintro/ ``` 2. Googla med ``` datorintroduktion D-linjen Chalmers ``` 3. Googla med ``` Aarne Ranta ``` tryck på "Datorintroduktion" #NEW ==Kursens uppbygnad== Vi går snabbt genom [kurswebbsidan ..], för att förklara - vad man ska lära sig under kursen - hur man ska göra för att klara kursen #NEW ==Datavetenskap== **Datavetenskap** (Computer Science) har sina rötter på två håll: - matematik - elektronik Datavetenskap kan därför se rätt så olika ut beroende på datavetare. #NEW ==Hårdvara och mjukvara== hårdvara = maskinvara, mjukvara = programvara ``` mjukvara användarprogram -- Firefox, emacs, GHC operativsystemet -- Windows, Unix, Symbian ------------------------------------------------------------- hårdvara datorn -- PC, Mac, iPhone, PSP ``` datavetenskap (men inte alla företag...) strävar efter att hålla isär nivåerna. #NEW ==Operativsystemet Unix== Första versionen i 1970 Känns numera under namnen Linux, Mac OS X, SunOS, BSD... Fungerar på alla sorters maskiner Populärt bland professionella programmerare och datavetare - användaren kan lätt programmera systemet - relativt bra säkerhet - "känns rätt" p.g.a. enkelhet, tydlighet, modularitet, ortogonalitet, öppenhet #NEW ==Huvuddelarna i Unix== Kärnan (Eng. kernel): närmast hårdvaran Filsystemet: kataloger och filer Kommandotolken (Eng. shell): närmast användaren Därtill: - drivrutiner - fönstersystem - grafiska gränssnitt #NEW ==Shellkommandon== När man matat in användar-ID och lösenord, kommer man oftast in i ett fönstersystem. Man kan då öppna ett "shell", som kan heta "terminal", "konsole", "xterm", "cygwin", etc. I shellet har man tillgång till (nästan) alla program. De enklaste programmen är **shellkommandon**. || kommando | förklaring | engelska || | ``pwd`` | ange arbetskatalogen | print working directory | ``ls`` | ge listan av filer | list | ``cd`` | navigera till en annan katalog | change directory | ``whatis`` | beskriv ett kommando med en rad | what is | ``man`` | ge full beskrivning av kommandot | manual Arbetskatalogen = den katalog "där jag befinner mig just nu" #NEW ==Argument och jokrar== Kommandon tar **argument**. Vi betecknar typer av argument med STORA bokstäver. ``` ls DIR -- ge listan av filer i katalogen DIR ("directory") ls FILE -- ge listan av filen FILE (om den finns) ls -- ge listan av filer i arbetskatalogen ``` Argument kan innehålla **jokrar** ("wildcards"), ``*``. En joker betyder "vilka tecken som helst (eller inga)". Exempel: ``` ls *.jpg -- ge listan av alla filer vars namn slutar .jpg ``` #NEW ==Styrkan med shellkommandon== Man kan tro att det är bekvämast att se listor av filer i ett grafiskt program. Men försök att få listan av enbart jpg-filer: ``` ls *.jpg ``` Eller listan av alla jpg-filer som börjar med ``img`` i alla underkataloger av arbetskatalogen: ``` ls */img*.jpg ``` #NEW ==Några till shellkommandon== Filhantering: FILE kan oftast vara DIR || kommando | argument | förklaring | engelska || | cp | FILE FILE | kopiera filen | copy | mv | FILE FILE | flytta eller döpa om filen | move | rm | FILE | ta bort filen | remove | mkdir | DIR | skapa en katalog | make directory Analys av strängar och tecken || kommando | argument | förklaring | engelska || | cat | FILES | visa innehållet i FILES | catenate | grep | STRING FILE | ange rader med STRING | grep | wc | FILE | räkna rader, ord och tecken | word count #NEW ==Unixfilosofin== Skriv och använda enkla program, som gör en sak i taget. **Pipe**: kombinera program i sekvens. Symbol: ``|`` (läs: "pajp") Exempel: visa hur många filer som finns i arbetskatalogen ``` ls | wc ``` Exempel: visa på hur många rader ordet "funktion" förekommer i alla ``.txt``-filer i katalogen ``lectures``: ``` grep "funktion" lectures/*.txt | wc ``` #NEW ==Programmering: praktiskt perspektiv== Använd Unix-program och andra tillgängliga program så länge de räcker. Skriv egna program när det inte finns färdiga - för precis de bitar som saknas. Lär dig att lösa vilket som helst programmeringsproblem. Lär dig att känna igen när problemet inte bara är programmering. #NEW ==Programmering: teoretiskt perspektiv== Alla datavetare sysslar med **programmering**. Vad är detta? - matematikerns svar: att skriva algoritmer i ett precist språk - elektrikerns svar: att få maskinen att göra önskade saker **Algoritm**: en metod att göra något i välbestämda steg, t.ex. division ``` 6 6 6 ----------- 3 | 1 9 9 8 1 8 --- 1 9 1 8 --- 1 8 1 8 === ``` #NEW ==Programspråk== Algoritmer måste uttryckas i ett precist språk för att en dator ska kunna utföra dem. - **högnivåspråk**: anpassade till människans sätt att tänka - **lågnivåspråk**: anpassade till maskinens sätt att fungera ``` ------------------------------ människan högnivåspråk matematisk text Haskell Java C Assembler Maskinspråk lågnivåspråk ------------------------------ maskinen ``` #NEW ==Exempel på språknivåer== ``` summan av alla heltal från 1 till och med 100 -- matematisk text sum [1 .. 100] -- Haskell int result = 0 ; -- Java, C for (int i = 1 ; i != 100 ; ++i) result += i ; iconst_1 ; dup ; istore_1 ; istore_2 ; -- Assembler (Jasmin) TEST: bipush 100 ; iload_1 ; ifeq END iload_1 ; iload_2 ; iadd ; istore_2 ; iinc 1 1 ; goto TEST END 0000 0011 0101 1001 0011 1011 0011 1100 ... -- Maskin (JVM) ``` #NEW ==Val av nivå: för- och nackdelar== Högnivåspråk: - mindre att skriva - elegant, abstrakt - portabelt (kan fungera i olika maskiner) - lättare att få korrekt Maskinspråk: - lättare att implementera på maskin - kan göras effektivare - kan nå all hårdvara utan kontroll //Obs: på förra sliden är Java/C och Assembler-exemplen fel!// #NEW ==Programspråk i vår utbildningar== Vi lär ut Haskell först Senare lär vi Java, C, assembler Och ännu lägre: datorarkitektur, kretselektronik... Och ännu högre: matematiska modeller av beräkning Och bryggan mellan nivåer: **kompilatorer** #NEW ==Kompilatorn== Kompilatorn är ett program som automatiskt översätter högnivåspråk till maskinspråk. Det är därför programmerarna (oftast) kan hålla sig till högnivåspråk. Det är därför samma program kan köras på olika sorters datorer. #NEW ==GHC(i)== GHC = Glasgow Haskell Compiler GHCi = GHC Interactive Vi kommer att - skriva Haskell-program - kompilera dem med GHCi - köra dem på datorn GHC(i) finns för Linux, Mac, Windows... gratis från [``www.haskell.org/ghc`` www.haskell.org/ghc] #NEW ==Ett sätt att använda GHC(i)== Starta ett GHCi-shell i Unix-shellet och skriva program till prompten ``` ubuntu$ ghci Prelude> 2+2 4 Prelude> sum [1 .. 100] 5050 ``` Snabbt och effektivt för mycket korta program. Även för att testa längre program. #NEW ==Ett annat sätt att använda GHC(i)== Skriv program i en fil, t.ex. ``MyProgram.hs``, läs in i GHCi, och kör i GHCi ``` Prelude> :l MyProgram.hs MyProgram> factorial 12 479001600 ``` Snabbt för program stora som små, men inte effektivast. Det vi mest använder resten av kursen. Filen ``MyProgram.hs`` kan se ut så här: ``` factorial n = product [1 .. n] ``` #NEW ==Ett till sätt att använda GHC(i)== Skriv program i en fil, t.ex. ``factorial.hs``, kompilera med GHC, och kör i Unix-shell ``` ubuntu$ ghc factorial.hs ubuntu$ factorial 12 479001600 ``` Det är så här man skapar program för användare: de behöver inte veta om GHC eller att programmet var skrivet i Haskell. Programmen kan användas i Unix-pipes. Frivilligt på den här kursen. #NEW ==Emacs== En texteditor som är många programmerares favorit. Speciellt lämpligt för att skriva programkod i. Kan öppnas från shellet med kommandot ``emacs``, eller eventuellt från en meny i "applications" eller motsvarande. #NEW ==Övningar== Redovisning: visa kommandona, kör dem, och visa resultatet. 1. Testa vad som händer med kommandon ``ls``, ``cp``, ``cd`` och ``wc`` om de används utan argument. 2. Uppvisa vilka kataloger på din dator som är de närmaste underkatalogerna till rooten (``/``). 3. Hur många filer finns i ``/usr/bin/``? Denna katalog innehåller de användarprogram som följer med operativsystemet. Uppvisa shellkommandot som utför räkningen. 4. Skapa en katalog ``pictures``, och kopiera dit 25 jpg-bilder från webben eller någon annan källa. Vi ska använda denna katalog senare för att skapa ett fotoalbum likt [detta test5.html]. 5. Hitta den fullständiga texten till August Strindbergs roman "Röda rummet" på webben. Kopiera över den till din dator, och räkna hur många rader som innehåller ordet "cigarr". **Obs**. Även om texten är uppdelad i flera filer, kan du ändå göra detta utan större möda. 6. Skapa i emacs en fil ``jack.txt`` som består av 32768 rader med texten "All work and no play makes Jack a dull boy". **Bonus**. Hur många tangenttryck behövde du? 7. Starta ``ghci`` och skriv en formel som anger antalet dagar sedan du föddes.