Örebro universitet
Institutionen för naturvetenskap och teknik
Thomas Padron-McCarthy
(thomas.padron-mccarthy@oru.se)
Tentamen i
Operativsystem
för civilingenjörer
onsdag 5 juni 2019
Gäller som tentamen för:
DT513G Operativsystem för civilingenjörer, provkod 0100
Hjälpmedel:
|
Inga.
|
Poängkrav:
|
Maximal poäng är 32.
För godkänt betyg krävs 16 poäng.
|
Resultat:
|
Meddelas på kursens hemsida eller via e-post senast onsdag 26 juni 2019.
|
Återlämning av tentor:
|
Elektroniskt via Studentforum.
|
Examinator och jourhavande:
|
Thomas Padron-McCarthy, telefon 070 - 73 47 013.
|
-
Skriv tydligt och klart. Lösningar som inte går att läsa kan
naturligtvis inte ge några poäng.
Oklara och tvetydiga formuleringar kommer att misstolkas.
-
Skriv den personliga tentamenskoden på varje inlämnat blad.
Skriv inte namn eller personnummer på bladen.
-
Skriv bara på en sida av papperet.
Använd inte röd skrift.
-
Antaganden utöver de som står i uppgifterna måste anges. Gjorda
antaganden får inte förändra den givna uppgiften.
-
Skriv gärna förklaringar om hur du tänkt.
Även ett svar som är fel kan ge poäng,
om det finns med en förklaring som visar att huvudtankarna var rätt.
LYCKA TILL!
Uppgift 1 (2 p)
Vad är ett operativsystem?
Uppgift 2 (3 p)
Vilka är operativsystemets viktigaste uppgifter?
Uppgift 3 (3 p)
Här är ett C-program för Linux, kallat "program 1",
som läser en gigabyte data från en fil:
#include <unistd.h>
#include <fcntl.h>
#define KILO 1024
#define MEGA (KILO*KILO) // 1048576
#define GIGA (KILO*KILO*KILO) // 1073741824
char data[GIGA];
int main(void) {
int fd = open("data.bin", O_RDONLY);
for (int i = 0; i < KILO; ++i) {
read(fd, &data[i * MEGA], MEGA);
}
close(fd);
}
I en annan version av samma program, kallat "program 2",
byter vi ut for-loopen mot den här:
for (int i = 0; i < MEGA; ++i) {
read(fd, &data[i * KILO], KILO);
}
(Skillnaden är alltså att vi bytt plats på "MEGA" och "KILO".)
Programmen gör samma sak,
och de fungerar korrekt,
men man kan förvänta sig att ett av programmen går betydligt
snabbare än det andra.
a) Vilket program är snabbast?
b) Förklara varför skillnaden mellan programmen blir så stor!
Uppgift 4 (5 p)
Operativsystemkärnan har, precis som många andra dataprogram,
en hel del data som den håller reda på.
Beskriv de viktigaste, och vilka datastrukturer man använder för dem.
Uppgift 5 (3 p)
En mikrokärna ("micro-kernel" på engelska)
är ett sätt att bygga operativsystem.
Vad innebär det att en operativsystem har en mikrokärna?
Vilka fördelar och nackdelar medför det?
Uppgift 6 (3 p)
Vad är en process?
Hur skiljer sig en process från en tråd?
Uppgift 7 (2 p)
Här är ett C-program för Linux.
Vad skrivs ut när programmet körs?
#include <stdio.h>
#include <unistd.h>
int main(void) {
int x = 1;
fork();
x = x + 1;
printf("Hej! x = %d!\n", x);
fork();
x = x + 1;
printf("Hopp! x = %d!\n", x);
}
Uppgift 8 (4 p)
a) Vad innebär virtuellt minne?
b) Varför måste man ha stöd i hårdvaran när man använder virtuellt minne?
c) Varför är sidstorlekar ("page size" på engelska) alltid jämna tvåpotenser?
Visa med exempel!
Uppgift 9 (3 p)
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?
Uppgift 10 (4 p)
När man ska lagra de data som hör till en process
kan det vara svårt att hitta ett tillräckligt stort, sammanhängande utrymme
i det fysiska primärminnet.
Hur löser man det problemet på vanliga moderna datorer
och med vanliga moderna operativsystem som Linux och Windows?