Göm menyn
Detta är en gammal version av kurshemsidan och kan innehålla inaktuell information. Klicka här för att komma till årets upplaga av kursen.

TDIU16 Process- och operativsystemprogrammering

Laborationer


Labanmälan

Se länken i vänstermenyn.

Versionshantering med git

Koden för Pintos hämtar du genom att klona ett git-repository. När du väl klonat Pintos från kurs-repositoryt finns inget krav att fortsätta utnyttja fördelarna med att ha koden i git annat än att ladda upp koden där så att assistenterna i kursen kan komma åt den. Dock kan du enkelt välja att utnyttja styrkorna med Git under kursen och få värdefull kunskap på köpet.

Det finns många tutorials om git på webben. En som är både "hands-on" och visuell är http://learngitbranching.js.org/.

Om du väljer att använda git rekommenderar vi:

  • Använd branching! Lös varje delproblem i en egen branch. Gör experiment i en egen branch. Ni kan till och med jobba parallellt på var sin branch om det fungerar för er. Då kan ni ha "master" funktionell och ändå committa ofta.
  • Checka in koden frekvent! Gör en commit så fort ni har löst ett litet problem som för er framåt. Så fort det går beskriva vad ni gjort med en kort mening, kör git commit -m "den korta meningen". Då blir det lätt följa vad som hänt i historiken, vilket kan underlätta vid felsökning, eller om man behöver gå tillbaka till en tidigare version.

Git blir mycket enklare om du vet vad du gör, eller omvänt: om du provar ett kommando och det visar sig fel är det mycket jobbigt att få det rätt igen (men det går!). När du gjort alla fel och till slut lärt dig använda git rätt kanske du uppskattar lite träffsäker git-komik:

Labba hemma

Då årets upplaga av kursen kommer att hållas på distans, är det bra att kunna labba hemifrån. Har du en Linux-dator, så är det antagligen inga problem. Se till att installera qemu och gcc-multilib så ska det inte vara några problem. Kör du Windows, vill du antagligen göra labbarna i en virtuell Linux-maskin. Här nedanför finns en guide för hur du installerar en sådan. Samma procedur kan också användas för Mac OS, även om det kan se lite annorlunda ut där. ThinLinc finns också i nödfall, men eftersom alla på universitetet kommer att arbeta hemifrån kommer inte ThinLinc orka med att alla labbar via det samtidigt.

Det finns två möjligheter att installera en lämplig miljö i en virtuell maskin. Dels kan du installera allt själv (vilket är bra att kunna i framtiden). Följ då denna guiden:

Installera en virtuell Linux-maskin

Alternativt kan du använda en färdig installation som vi har förberett. Denna fungerar ungefär som skolans system. Detta är något enklare, men vi har märkt att det inte alltid fungerar som det ska. Fungerar det inte, testa ovanstående guide.

Installera en virtuell Linux-maskin från en avbild

Arbete med laborationerna

Laborationerna sker parvis även i år. Under labpassen ser vi helst att ni samarbetar i den Teams-kanal ni blir inbjudna till i början av kursen, så är det snabbt och enkelt för assistenterna att hjälpa er. Även utanför labtid går det utmärkt att använda samma Teams-kanal, men då är det okej att använda andra verktyg som ni ser passar.

Assistenthjälp under laborationspass

Labbarna sker i Teams. Innan första labben kommer ni att bli inbjudna till ett team i Teams. Där finns en privat kanal med ert gruppnummer där ni kan arbeta med er labb (när ni vill) och kanalen Handuppräckning, där ni kan be om hjälp.

När passet börjar kommer assistenten att skriva ett meddelande i kanalen Handuppräckning. Om ni vill ha hjälp så svarar ni helt enkelt på det meddelandet med ert gruppnummer och vad ni behöver hjälp med (se punkterna nedanför). Sätt er sedan och arbeta vidare i ett möte i er privata kanal, så kommer assistenten och hjälper er när det är er tur.

I och med att vi oftast har mycket att göra under passen (många att hjälpa och oftast problem som tar ett tag att lösa) så finns det risk att man får vänta uppemot 30-50 minuter när det är som värst (så brukar det vara i vanliga fall när vi har pass i sal). För att snabba upp processen och minska väntetiden för alla i kursen, se till att ni kan svara på nedastående frågor innan ni ställer er i kö. Svaret på frågorna nedan hjälper assistenten att snabbt förstå vad ni har gjort, så att ni snabbt kan få så relevant hjälp som möjligt (i bästa fall hittar ni felet själva utan att behöva vänta). Har ni inte svar på de frågorna när det är er tur så kommer assistenten be er att svara på de frågorna och ställa er i kö igen (och då har ni väntat i onödan). Se också till att ni har er kod redo i samtalet i Teams så att assistenten kan hjälpa er direkt.

Felsökning: Vi har märkt att Teams ibland kraschar när man försöker dela sin skärm på Linux. Händer det dig, försök först att uppdatera Teams (på Ubuntu går det ibland automatiskt via sudo apt update && sudo apt upgrade), och ta sedan bort mappen .config/Microsoft, exempelvis med cd ~/.config; rm -r Microsoft.

  1. Vad heter labben ni arbetar på?
  2. Vilken del av labben arbetar ni på?
    Exempel: Vi arbetar med systemanropet open
    Exempel: Vi arbetar med den globala processlistan så att wait ska fungera
  3. Vilket testprogram kör ni i Pintos? (eller: vilket kommando kör ni?)
    Exempel: Jag kör programmet sumargv
    Exempel: Jag kör kommandot make check
  4. Hur märker du att det är ett problem? (Var även redo att visa detta)
    Exempel: När jag kör sumargv så kraschar Pintos med ett pagefault.
    Exempel: Returvärdet från open verkar inte vara korrekt enligt mina utskrifter.
    Exempel: Testet tests/filesys/sc-bad-open misslyckas, när jag tittar i utdatan så ser det ut som att testet kraschar, men jag förstår inte varför. Vi validerar ju den parametern!
  5. Hur borde det bete sig?
    Exempel: Jag borde kunna köra sumargv och se att jag får värdet 0 till exit med hjälp av den spårutskrift jag har där.
    Exempel: open borde returnera 4 här, eftersom jag har öppnat två filer tidigare.
    Exempel: Testet försöker nog skicka in en dålig pekare till open, och då borde vår implementation säga ifrån.
  6. Om något som fungerade förut plötsligt har slutat att fungera: Vad ändrade ni på senast innan problement uppstod?
    Exempel: Testet tests/klaar/pfs fungerade utmärkt fram tills vi lade till det här låset i inode.
  7. Vad har ni gjort för att hitta var felet uppstår? Har ni använt exempelvis spårutskrifter eller GDB?
    Exempel: Vi har testat att ringa in problemet med spårutskrifter på de här ställena.
    Exempel: Vi har testat att stega igenom den här delen av koden med GDB, men då verkar inte problemet uppstå.
    Om svaret är nej kommer assistenten att beskriva hur ni kan hitta liknande fel på lämpligt sätt i framtiden.
  8. Vad har ni testat för att få det att fungera?
    Exempel: Jag har försökt flytta låset till de här positionerna, och då fungerar det inte heller.
    Exempel: Jag har testat att också verifiera den här pekaren, men det verkar inte hjälpa

Assistenterna kommer att ta emot frågor från kvart över till hel, sedan ha 15 minuters rast, och sedan vara tillgängliga från kvart över till hel igen (precis som på en föreläsning). Kön som finns i Teams vid rasten kommer självklart att finnas kvar till senare, men assistenten kommer helt enkelt inte att hjälpa någon just då.

I och med att det i allmänhet tar lång tid att hjälpa varje grupp i denna kursen (det är mer kod, och mer intressanta fel som kan uppkomma) så kan ni i allmänhet inte räkna med att ni kan få hjälp mer än en gång per pass. Det är därför en bra idé att samla ihop frågor inför passet så att ni kan ställa alla när det är er tur. Utöver det är det en bra idé att utnyttja väntetiden till att göra exempelvis någon av de fristående laborationerna, så att inte väntetiden går förlorad.

Redovisningar

Laborationerna redovisas under labbpassen.

Dokumentation (original)

Labuppgifter

Nedan finns en lista på alla labbuppgifter i kursen i den ordningen de är tänkta att lösas. Utöver dessa finns en samling frivilliga övningar som ger extra övning i C, eller som visar på hur olika koncept i Pintos fungerar i Linux (eller andra UNIX-system). Den uppmärksamme läsaren ser att vissa uppgifter finns både under "Frivilliga uppgifter" och som en del av den ordinarie labbserien. Dessa laborationer är saker som kan implementeras fristående i mån av tid, men som sedan kommer att användas i Pintos. Om man kör fast på någon av de ordinarie laborationerna är det därför en bra idé att se om det finns några extralaborationer man kan göra så länge, eftersom de ändå behöver göras i sinom tid.

PDF:erna med labbuppgifter är i allmänhet korta, och beskriver vad som är målet med uppgiften samt visar var man kan börja nysta i problemet. Ofta behövs ytterligare information för att lösa laborationen, vilken återfinns i Pintos-Wikin som är länkad nedan. Där finns mycket generell information som kan vara relevant i flera laborationer, exempelvis tips för felsökning, hur olika saker i Pintos är uppbyggda och dylikt.

Pintos-Wiki

Här nedan finns Pintos-Wikin med övergripande information som är relevant till laborationerna. Innan ni börjar med laborationerna är det en bra idé att läsa igenom introduktionskapitlet i Wikin som går igenom saker att tänka på när man skriver C-kod i en kernel.

Pintos-Wiki

Fristående uppgifter att göra när man sitter fast

Dessa uppgifter kommer användas senare i kursen, och kan vara bra att titta på ifall man har fastnat med en ordinarie laboration. Dessa implementeras alla utanför Pintos, så de går att göra även om allt annat i Pintos är trasigt.

Fristående frivilliga uppgifter

Dessa uppgifter behöver inte göras för att klara labbserien (därav numreringen X=eXtra). Däremot ger de en djupare förståelse för hur vissa av de systemanrop som implementeras i Pintos fungerar.

Vecka 13

Vecka 14

Deadline 1

Du ska kunna köra examples/file_syscall_tests.c felfritt.

Deadline för bonus 14/4

Vecka 15

Vecka 16

Vecka 17

Deadline 2

Programmen examples/longrun_* fungerar.

Deadline för bonus 4/5

Vecka 18

Vecka 19, 20, och 21 (Notera, kristi kimmelsfärd mitt i vecka 19)

Deadline 3

Alla Pintos testprogram fungerar konsekvent över många testkörningar.

Deadline för bonus 25/5

Vecka 23

  • Tenta

Sidansvarig: Filip Strömbäck, Klas Arvidsson
Senast uppdaterad: 2021-04-08