Göm menyn

TDIU16 Process- och operativsystemprogrammering

Visualiseringsverktyg


Här finns visualiseringsverktyget som nämns i labhandledningen. Verktyget är byggt för att visa hur trådning interagerar med datamodellen i C (inklusive pekare och referenser). Verktyget kan köra enkel C-kod och visa vad som händer. I multitrådade program har du möjlighet att köra trådarna i olika ordning för att se vilka problem som kan uppstå. Verktyget säger också till när så kallade data races uppstår.

Verktyget kan användas på två sätt:

  1. Visualisera kod på din dator. Detta görs dels i labbarna, och dels finns en uppsättning gamla problem nedan som är bra övning inför tentan.
  2. Tävla med dina klasskompisar online. Här finns synkroniseringsuppgifter som ger poäng. Se nedan för detaljer.

Hämta verktyget

Ladda ner verktyget från en av länkarna nedan, packa upp filen någonstans och kör Progvis.sh eller Progvis.bat.

  • SU-salar eller ThinLinc

    Om du sitter vid en dator i en SU-sal, eller kör via ThinLinc kan du helt enkelt starta verktyget genom att köra kommandot /courses/TDIU16/progvis/start i en terminal.

  • Verktyg för Linux (Bör fungera i Debian-baserade system)

    På Linux öppnas troligtvis en grafisk arkivhanterare som standard. Markera i så fall alla filer (Ctrl+A), och välj Packa upp eller motsvarande. Välj sedan en tom mapp att lägga dem i. Alternativt, öppna en terminal i den mapp där du vill packa upp verktyget och skriv tar -xvf <sökväg till .tar-filen>. Kör sedan start.sh genom att antingen klicka på den i den grafiska miljön (du kan behöva välja Kör i terminal i meddelandet som visas), eller genom att skriva ./start.sh i terminalen.

  • Verktyg för Windows

    På Windows kommer du antagligen se meddelandet som visas nedan (Windows har skyddat datorn). Det är ett meddelande som visas för alla program som Windows inte känner igen sedan tidigare (dvs. program som inte många i världen laddar ner), och betyder inte nödvändigtvis att programmet är skadligt. Vill du köra programmet, klicka på Mer information och sedan Kör ändå (jag brukar ha för vana att skanna programmen med mitt virusprogram först). Du behöver bara godkänna detta första gången.

    Notera: Verktyget innehåller allt som behövs. Du behöver alltså inte installera någon separat C-kompilator eller liknande.

Undersök kod på din dator

När du har laddat ner och startat verktyget kan du öppna egen kod med hjälp av File -> Open.... Verktyget kompilerar sedan koden och visar den. Du kan sedan stega i ditt program som du vill för att hitta synkroniseringsproblem. Verktyget förstår de synkroniseringsprimitiver som finns i Pintos (de vi tar upp i kursen), samt funktionen thread_new för att starta nya trådar.

Tyvärr klarar inte verktyget allt som går att göra i "vanlig" C. Detta för att verktyget behöver ha lite extra koll på vad koden försöker göra (det går inte alltid i vanlig C). Du märker när detta sker genom att verktyget ger ett kompileringsfel som en "vanlig" C-kompilator inte skulle ge. Det är också en bra idé att köra små exempel i visualiseringsverktyget för att det inte ska bli allt för svårt att se vad som händer.

Tips: Om du enkelt vill experimentera med olika lösningar är det en bra idé att öppna samma källkodsfil både i verktyget och i en texteditor. När du har ändrat i koden kan du sedan välja File -> Reload program... (Ctrl+Shift+R).

Uppgifter/exempel

Här finns en uppsättning exempel som är anpassade för att köra i verktyget. Uppgifterna kan ibland även kompileras och köras utanför verktyget (dock endast på Linux i dagsläget). Om det finns en fil som heter Makefile kan du kompilera koden med kommandot make: skriv make x för att kompilera filen x.c. Detta går dock inte med alla exempel, eftersom vissa av dem är gjorda specifikt för visualiseringsverktyget.

Online-tävling

Verktyget har också stöd för att lösa problem online och tävla med dina klasskamrater. Grundidén är att finns en uppsättning problem i systemet. Varje problem består av en implementation av en enkel datastruktur och ett testprogram (dvs. liknande tentaproblemen). Målet är att hitta och åtgärda alla problem som finns i implementationen. Nya problem läggs upp under kursens gång.

För att lösa problem använder du Online-menyn i verktyget. Den innehåller följande alternativ:

  • Connect Anslut till onlinesystemet. Gör detta innan du använder något annat alternativ i menyn. Första gången kommer du få ett meddelande om att du behöver logga in. Klickar du på OK så kommer din webbläsare öppnas. Välj då att logga in med LiU-ID (annars kan du inte få bonus). Du blir sedan ombedd att ange ett namn som visas för andra i systemet, och blir till slut ombedd att klocka på Connect igen.
  • Disconnect Stäng anslutningen. Detta är i princip bara relevant ifall du vill logga in med en annan användare.
  • Status... Visa topplistan (inklusive dina poäng). Här kan du också byta ditt namn i systemet.
  • Problems... Detta är antagligen det viktigaste alternativet i menyn. Detta alternativ visar en lista över de problem du kan lösa. Se nedan för mer detaljer.
  • Submit problem... Här kan du ladda upp egna problem till alla användare. Du behöver antagligen inte använda detta alternativ, lösningar av problem hanteras automatiskt på andra ställen.
  • Log out Logga ut. Detta gör att du kommer få logga in igen nästa gång du klickar på Connect. Detta är användbart ifall du vill logga in som en annan användare, annars är det inte viktigt att logga ut.

För att börja lösa problem kan du alltså välja Online -> Problems.... Här finns fyra flikar som du kan välja mellan:

  • To debug Denna flik innehåller problem som behöver felsökas. Dessa problem innehåller ett eller flera problem i sin implementation. Om du väljer att lösa ett problem kommer du först att bli ombedd att hitta ett problem genom att stega trådarna. Ett problem kan vara antingen ett data race, men också att programmet krascar på något sätt. Efter det kommer systemet uppmana dig att försöka lösa problemet genom att modifiera koden för implementationen.
  • To test Denna flik innehåller problem som behöver testas mer. Detta innebär att testprogrammet (main-funktionen) fungerar som det ska i nuläget. Dock kan det vara så att testprogrammet inte testar allt som skulle kunna gå fel. Exempelvis kanske testprogrammet har glömt att försöka köra en viss funktion parallellt från olika trådar. Din uppgift här är alltså att modifiera testprogrammet så att det upptäcker nya fel i implementationen (om sådana finns). När du försöker ladda upp din lösning kommer verktyget att se dels om ditt nya testprogram har hittat ett fel i implementationen, och dels om du använder implementationen korrekt (enligt den specifikation som finns om alla funktioner i implementationen).
  • Solved Här finns alla problem som du har löst (dvs. laddat upp en lösning till). Du kan försöka lösa dessa problem igen om du i efterhand har kommit på en bättre lösning.
  • My problems Här visas de problem som du har laddat upp. När du löser ett problem så betraktas din lösning som ett nytt problem som andra kan bygga vidare på eller lösa. Dina egna problem syns dock inte i flikarna to debug eller to test. Du kan försöka lösa dina egna problem, men då får du bara 1/3 av poängen för lösningarna.

Poäng

Du får poäng enligt följande:

  1. Du har hittat ett fel i ett debug-problem: 10 p
  2. Du har skickat in en förbättring till ett debug-problem: 10 p
  3. Din lösning åtgärdade alla fel som fanns i ett debug-problem: 50 p
  4. Du har lyckats hitta ett fel i ett test-problem genom att modifiera testprogrammet: 100 p

Notera att en förbättring kan falla inom fler kategorier ovan. Försöker du lösa ett debug-problem och hittar ett fel, och skickar in en lösning som löser det felet (och eventuella andra fel som fanns) så får du alltså 10 + 10 + 50 = 70 poäng.

Enligt sidan Examination så ger 400 poäng 1 bonuspoäng på tentan. Notera att detta kräver att du har loggat in med ditt LiU-ID, annars vet vi i kursen inte vem som har samlat poäng. Om vi i kursen märker att poängsystemet missbrukas (exempelvis genom att skicka in samma lösning till samma problem flera gånger) kommer vi räkna bort den typen av lösningar. Notera att dessa problem är tänkta att lösas individuellt.


Sidansvarig: Filip Strömbäck
Senast uppdaterad: 2022-03-11