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
.
- Vad heter labben ni arbetar på?
-
Vilken del av labben arbetar ni på?
Exempel: Vi arbetar med systemanropetopen
Exempel: Vi arbetar med den globala processlistan så attwait
ska fungera
-
Vilket testprogram kör ni i Pintos? (eller: vilket kommando kör ni?)
Exempel: Jag kör programmetsumargv
Exempel: Jag kör kommandotmake check
-
Hur märker du att det är ett problem? (Var även redo att visa detta)
Exempel: När jag körsumargv
så kraschar Pintos med ett pagefault.
Exempel: Returvärdet frånopen
verkar inte vara korrekt enligt mina utskrifter.
Exempel: Testettests/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! -
Hur borde det bete sig?
Exempel: Jag borde kunna körasumargv
och se att jag får värdet 0 tillexit
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 tillopen
, och då borde vår implementation säga ifrån. -
Om något som fungerade förut plötsligt har slutat att fungera: Vad ändrade ni på senast
innan problement uppstod?
Exempel: Testettests/klaar/pfs
fungerade utmärkt fram tills vi lade till det här låset iinode
. -
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. -
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)
- Stanford's documentation (Projekten är inte relevanta för kursen.)
- A local copy.
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.
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.
- X1. Grunder i C
- X2. Processhantering i UNIX
- X3. Den dubbellänkade listan i Pintos
- X4. Felsökning med debugger
Vecka 13
- 01. Argumenthantering i C-program
- 02. Associativ Container
- De två ovanstående uppgifterna demonstreras lämpligtvis i slutet av första passet (30/3)
- 03. Installera Pintos
- 04. Systemanropen halt och exit
Vecka 14
- 05. Systemanrop för tangentbord och skärm
- 06. Systemanrop för filhantering
- Nedastående laborationer är inte en del av deadline 1, men påbörjas lämpligtvis innan 14/4
- 07. Skapa stack till main
- 08. Argument till main i Pintos
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