Hoppa till huvudinnehållet
Institutionen för informationsteknologi
Labhemsida 2007

Datorsystem 1 del 2 - VT 2006

Resultat

Labbarna är nu rättade, resultat finns här.
Inloggning sker via studentkatalogen: använd "lösenord A".
Rättade labbar finns utanför mitt kontor (rum 1237).

Uppgifter

Under kursen kommer ni att göra tre inlämningsuppgifter i UNIX programmering. Uppgifterna löses enskilt eller i grupper om två. Lösningar lämnas i Johns postfack (våning 4, hus 1).

Alla labtillfällen kommer att vara i sal 1515.

Om du inte är van att använda UNIX system så kan det vara idé att läsa datorhandboken (Speciellt avsniten grundläggande kommandon och processer. Du behöver också kunna packa upp lab-paketen: Komprimering och arkivering (en enkel lösning är: tar -xzvf lab1.solaris.tar.gz).

Uppgift 1: Skriv ett UNIX shell

Här finns lab-paketet för den första uppgiften: lab1.solaris.tar.gz.
Instruktioner och dokumentation finns både i paketet och här. Skelettkod för en lösning i C finns här (för java-lösning se lab-paketet).

Lämna i utskriven kod, samt svar på frågorna i steg 1, i Johns postfack på våning 4 hus 1. Glöm inte att ange vem/vilka som lämnat in lösningen!

Problem i skelettkod för C

När flera processer ska kommunicera via en pipe kan inte föräldern anropa 'wait' från 'command' eftersom då kommer inte nästa barn skapas föränn det tidigare dött.
Byt ut main mot den nedan, och anropa inte 'wait' från 'command' (fr.o.m. steg 5)

int main()
{
  while (1) {
    gets(line);
    char* cmd = line;
    char* next = strchr(cmd, '|');
    int input = 0;
    bool first = true;
    int n;
    for (n = 1; next != NULL; ++n) {
      *next = '\0';
      split(cmd);
      input = command(input, first, false);
      cmd = next + 1;
      next = strchr(cmd, '|');
      first = false;
    }
    split(cmd);
    input = command(input, first, true);

    for (int i = 0; i < n; ++i) wait(NULL);
  }
  return 0;
}

Uppgift 2: Dining Philosophers

Ett klassiskt synkroniseringsproblem. Läs igenom följande före labtillfället:

  • Semaphores (Avsnitt 7.4 i 6:e utgåvan, avsnitt 6.5 i 7:e utgåvan.)
  • Deadlocks (Kapitel 8 i 6:e utgåvan, kapitel 7 i 7:e utgåvan, speciellt om hur man undviker deadlock).
  • The dining philosophers (Avsnitt 7.5.3 i 6:e utgåvan, avsnitt 6.6.3 i 7:e utgåvan.)

Här finns lab-paketet för den andra uppgiften: lab2.solaris.tar.gz.
Instruktioner och dokumentation finns både i paketet och här. Skelettkod för en lösning i C finns här.

Lab-tillfälle: onsdag 15/2.

Lämna i utskriven kod i Johns postfack på våning 4 hus 1. Glöm inte att ange vem/vilka som lämnat in lösningen!

Uppgift 3: UNIX filsystem

Här finns lab-paketet för den tredje uppgiften: lab3.solaris.tar.gz.
Instruktioner och dokumentation finns både i paketet och här. Se även: lab3-documentation.pdf. Skelettkod för en lösning i C finns här.

Lab-tillfälle: måndag 20/2

Jag ska på läkarbesök på förmiddagen, så jag kommer till labben så fort jag är klar.
mvh. John

Lämna i utskriven kod i Johns postfack på våning 4 hus 1. Glöm inte att ange vem/vilka som lämnat in lösningen!

Observera: Du måste flytta till test-katalogen för att kunna lista dess innehåll, eftersom det är en symbolisk länk och ditt program inte ska följa symboliska länkar. När du flyttar till katalogen och kör ~/path/to/lab/ls.sh . så får du ett felmeddelande eftersom CLASSPATH i ls.sh är relativ. För att komma runt detta, hämta detta lilla script, lägg det i din lab-katalog, och kör det (använd chmod för att göra det exeverbart). Det kommer att byta ditt script ls.sh mot ett med absoluta sökvägar.

Deadlines

2006-02-17 Deadline för första uppgiften.
2006-02-27 Deadline för andra uppgiften.
2006-02-31 Deadline för tredje uppgiften.

Uppdaterad  2007-02-01 16:46:27 av John Håkansson.