OS: Exercise 6: File systems, RAID, I/O, Virtualization, Security

You can do this exercise in any size group you wish. Don't worry if you find some of the questions difficult to answer, since they may be intended to initiate a discussion rather than have a single correct answer.

There might also be more questions than you have time to answer, but do as many as you can.

There are solutions to some of the questions, but try to solve them yourself first.

Preparations

Before this exercise, you should (ideally) have:

Uppgift 1

För en programmerare skulle en disk (eller SSD) vara ganska krånglig att använda, om man behövde arbeta direkt mot hårdvaran. Man skulle själv behöva hålla reda på vilka diskblock man lagt sina data i, och läsa och skriva de rätta diskblocken. Operativsystemet erbjuder en enklare abstraktion i form av filer.

a) Vad menas med filsystem? Används ordet i flera olika betydelser?

b) I Unix finns en datastruktur som kallas i-nod (på engelska "i-node" eller "inode"). Vad används den till, och vad innehåller den?

c) En filkatalog ("directory" på engelska), även kallad mapp eller folder, innehåller filer. Eller gör den det? Vad är det katalogerna i Unix innehåller? Beror det på vad man menar med "innehåller"?

d) Vilka data som hör till filer och filsystem finns i operativsystemkärnan?

Uppgift 2

Här nedan finns programmet hej.c. Vi kör det på en dator med Linux. Som vi vet betyder ett anrop till fprintf, eller write, inte att data genast finns permanent lagrat i filsystemet (normalt på sekundärminne, som i sin tur brukar vara antingen en SSD eller en mekanisk disk), utan det kommer att mellanlagras i olika buffertar. Vilka buffertar kommer att användas när vi kör det här programmet? Hur kommer data att flyttas?

#include <stdio.h>

int main(void) {
    FILE *f1 = fopen("hej.txt", "w");
    fprintf(f1, "Hej!\n");
    fprintf(f1, "Hej hej!\n");
    fclose(f1);
    FILE *f2 = fopen("hej.txt", "r");
    int c;
    while ((c = getc(f2)) != EOF)
        putchar(c);
    fclose(f2);
    return 0;
}

Uppgift 3

I uppgiften ovan står det att filsystemet "normalt" är på sekundärminne. Var kan det annars vara?

Uppgift 4

Ibland säger man att Unix har som filosofi att "allt är en fil". Vad menar man med det? Ge också några exempel på sådant som "är en fil".

Uppgift 5

Hur lång tid tar det att skriva en gigabyte data till en fil?

Uppgift 6

Jag har en RAID-array med diskar i min dator. Varför behöver jag ändå backup?

Uppgift 7

a) I samband med i virtualisering, vad betyder termerna värd ("host") och gäst ("guest")?

b) Vad är det för skillnad på ett operativsystem och en hypervisor?

c) Ibland skiljer man på hypervisors av typ 0, 1 och typ 2. Vad är skillnaden?

d) Hur skulle du klassificera VirtualBox? Är det en hypervisor, och i så fall vilken typ?

Uppgift 8

Moderna processorer brukar ha åtminstone två "exekveringsmoder" eller "körningslägen" ("execution modes" på engelska) ibland kallade "ringar": en "user mode" med lägre rättigheter som är avsedd för att köra användarprogram, och en "supervisor mode" med mer rättigheter. För virtualisering och virtuella maskiner vill man ha åtminstone tre. Varför? Förklara!

Uppgift 9

När man installerar applikationsprogram ("appar") på en mobiltelefon, brukar man kunna ange för varje sådant program vad det får och inte får göra, till exempel om det får göra uppkopplingar via Internet.

På en vanlig Linux-dator (en server, eller en stationär eller bärbar dator) kan man normalt inte göra det, utan alla applikationsprogram som man installerar får alla rättigheter, och det går inte (särskilt lätt) att begränsa dem.

Varför är det gjort så?

Uppgift 10

Ange för varje påstående om det är sant eller falskt! För de falska påståendena, förklara hur det egentligen är!

  Påstående Sant Falskt
a I Linux kan programmet strace användas för att visa vilka systemanrop en process gör.    
b Äldre operativsystem var baserade på avbrott (interrupts), så att när det till exempel fanns data att läsa från en disk så skickade disken ett avbrott till operativsystemkärnan. Ett avbrott medför att den körande processen stoppas, och kärnan tar över. I moderna operativsystem använder man i stället pollning, dvs att kärnan hela tiden ligger och kollar om det finns data. Med flerkärniga processorer blir det effektivare, eftersom man kan ha en pollningstråd på varje kärna.    
c Systemanropet wait i Linux gör att processen stoppas det antal sekunder som man skickar som argument, och sedan fortsätter köra.    
d Virtualisering innebär att trådar kan flyttas mellan olika processer.    
e Demand paging innebär att varje process när den startas måste ange hur mycket minne (mätt i antal sidor, eller på engelska "pages") som den maximalt kommer att behöva. Om den skulle begära mer minne, kommer operativsystemet i stället att avsluta processen.    
f När primärminnet blir fullt kan operativsystemet behöva kasta ut en del av sidorna ("pages"), och det finns flera olika algoritmer för att välja vilka som ska kastas ut. Det bästa är att kasta ut de sidor som det kommer att dröja längst tid innan de behövs, men man kan normalt inte veta vilka det är. Det näst bästa är att i stället använda en FIFO-kö, och kasta ut den sida som funnits i minnet längst.    
g Thrashing är samma sak som garbage collection, eller skräpsamling på svenska, tillämpat på sidorna i primärminnet. Operativsystemet går igenom minnet, och kastar ut de sidor som inte längre går att nå från något av de körande programmen.    


Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), May 22, 2022