0. Programmering och operativsystem

Aarne Ranta
Datorintroduktion 2008, D och DV, Chalmers & GU

Den här kursen

Introduktion till

Utformad för dem som vet och skall veta mest om datorer och programmering

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"

Kursens uppbygnad

Vi går snabbt genom kurswebbsidan, för att förklara

Datavetenskap

Datavetenskap (Computer Science) har sina rötter på två håll:

Datavetenskap kan därför se rätt så olika ut beroende på datavetare.

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.

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

Huvuddelarna i Unix

Kärnan (Eng. kernel): närmast hårdvaran

Filsystemet: kataloger och filer

Kommandotolken (Eng. shell): närmast användaren

Därtill:

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"

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

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

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

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

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.

Programmering: teoretiskt perspektiv

Alla datavetare sysslar med programmering. Vad är detta?

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
            ===

Programspråk

Algoritmer måste uttryckas i ett precist språk för att en dator ska kunna utföra dem.

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)

Val av nivå: för- och nackdelar

Högnivåspråk:

Maskinspråk:

Obs: på förra sliden är Java/C och Assembler-exemplen fel!

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

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.

GHC(i)

GHC = Glasgow Haskell Compiler

GHCi = GHC Interactive

Vi kommer att

GHC(i) finns för Linux, Mac, Windows... gratis från

www.haskell.org/ghc

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.

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]

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.

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.

Ö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.

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.