Ö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 januari 2022

Gäller som tentamen för:
DT513G Operativsystem för civilingenjörer, provkod A001


Hjälpmedel: Ordbok för översättning.
Poängkrav: Maximal poäng är 28. För godkänt betyg krävs 15 poäng.
Resultat: Meddelas senast torsdag 27 januari 2022.
Återlämning av tentor: Elektroniskt via webbportalen Studenttjänster.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070 - 73 47 013.




LYCKA TILL!

Formelsamling

20 = 1 224 = 16777216
21 = 2 225 = 33554432
22 = 4 226 = 67108864
23 = 8 227 = 134217728
24 = 16 228 = 268435456
25 = 32 229 = 536870912
26 = 64 230 = 1073741824
27 = 128 231 = 2147483648
28 = 256 232 = 4294967296
29 = 512 233 = 8589934592
210 = 1024 234 = 17179869184
211 = 2048 235 = 34359738368
212 = 4096 236 = 68719476736
213 = 8192 237 = 137438953472
214 = 16384 238 = 274877906944
215 = 32768 239 = 549755813888
216 = 65536 240 = 1099511627776
217 = 131072 241 = 2199023255552
218 = 262144 242 = 4398046511104
219 = 524288 243 = 8796093022208
220 = 1048576 244 = 17592186044416
221 = 2097152 245 = 35184372088832
222 = 4194304 246 = 70368744177664
223 = 8388608 247 = 140737488355328

Uppgift 1 (5 p)

a) Vad är ett operativsystem?

b) Vad menas med operativsystemkärnan? Hur är den relaterad till kärnorna i en flerkärnig CPU?

c) Datorvirus är skadliga program som sprider sig genom att lägga en kopia av sig själva inuti andra program, så att när det programmet körs kan viruset spridas ytterligare. Är datorvirus systemprogram eller applikationsprogram? Diskutera!

Uppgift 2 (5 p)

a) Man brukar säga att operativsystemet ska erbjuda en virtuell maskin som applikationerna kan använda. Samtidigt finns det virtualisering, som också handlar om virtuella maskiner. Vad är skillnaden? Är det helt olika saker, eller hänger de ihop på något sätt? Jämför och förklara!

b) 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 3 (3 p)

Interrupt ("avbrott" på svenska) är en hårdvarumekanism i processorn som kan underlätta operativsystemets arbete och göra det effektivare (dvs snabbare). Förklara hur!

Uppgift 4 (7 p)

Här är ett C-program:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

#define NR_THREADS 2

int total_printouts = 0;

static void *thread_body(void *arg) {
    int thread_number = (int)arg + 1;
    printf("In thread %d: Started!\n", thread_number);
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 1000000000; j++)
            ;
        printf("In thread %d, printout number %d: Running!\n",
               thread_number, i + 1);
        ++total_printouts;
    }
    printf("In thread %d: Finishing...\n", thread_number);
    return NULL;
} // thread_body

int main(void) {
    pthread_t threads[NR_THREADS];

    printf("In main: Will be starting %d thread(s)...\n", NR_THREADS);

    for (int i = 0; i < NR_THREADS; ++i) {
        if (pthread_create(&threads[i], NULL, thread_body, (void*)i) != 0) {
	    printf("Error: Couldn't create thread %d.\n", i);
	    exit(EXIT_FAILURE);
	}
    }

    printf("In main: Waiting for %d thread(s) to finish...\n", NR_THREADS);

    for (int i = 0; i < NR_THREADS; ++i) {
	if (pthread_join(threads[i], NULL) != 0) {
	    printf("Error: Couldn't join thread %d.\n", i);
	    exit(EXIT_FAILURE);
	}
    }

    printf("In main: All %d thread(s) have finished.\n", NR_THREADS);
    printf("Total printouts: %d\n", total_printouts);

    return EXIT_SUCCESS;
} // main

Den dyraste processor som just nu (när jag skriver detta) finns i lager enligt prisjämförelsesajten Prisjakt är Intel Xeon Platinum 8280. Den kostar 129526 kronor inklusive moms. Den kan använda en terabyte (1024 gigabyte) minne och den klockas i 2,7 GHz, men den har också ett turboläge där den klarar ända upp till 4 GHz. Den har 28 kärnor, och med hyperthreading kan den köra 56 trådar parallellt.

Vi har en dator med den processorn, och Linux eller något annat modernt och bra operativsystem. Vi kör programmet på den datorn. Utmatningen från programmet kan variera lite beroende på hur trådarna råkar schemaläggas, men vid en provkörning ser det ut så här:

In main: Will be starting 2 thread(s)...
In main: Waiting for 2 thread(s) to finish...
In thread 1: Started!
In thread 2: Started!
In thread 1, printout number 1: Running!
In thread 2, printout number 1: Running!
In thread 1, printout number 2: Running!
In thread 2, printout number 2: Running!
In thread 1, printout number 3: Running!
In thread 1: Finishing...
In thread 2, printout number 3: Running!
In thread 2: Finishing...
In main: All 2 thread(s) have finished.
Total printouts: 6

Körningen tog 4,0 sekunder.

Nu ändrar vi definitionen av NR_THREADS i programmet till den här:

#define NR_THREADS 1000

Vad kommer nu att hända? Hur kommer utmatningen att se ut? Hur lång tid tar körningen? Förklara hur du resonerat och räknat.

Uppgift 5 (8 p)

Vi har en byteadresserad dator som arbetar med minnesadresser på 17 bitar. Det finns alltså 217, dvs 131072, olika minnesadresser. Datorn har 214, dvs 16384, byte fysiskt minne, som delas mellan de olika processerna som körs. Med hjälp av virtuellt minne och så kallad "paging" kan varje process ändå ha tillgång till 131072 byte virtuellt minne. Av de 17 bitarna i en virtuell adress används 9 för sidnummer ("page number") och 8 för offset inom sidan.

a) Hur stor (dvs hur många byte) är en minnessida ("page")?

b) Hur många minnessidor är den virtuella minnesrymden indelad i?

c) Hur många olika ramar ("frames") finns det i det fysiska minnet?

d) Ge ett exempel på vad den virtuella minnesadressen 3 skulle kunna översättas till.

e) Hur stor (i byte räknat) blir varje process sidtabell ("page table")? Redovisa hur du räknat!

f) Förklara, med den beskrivna datorn som exempel, hur paging fungerar. Hur är det möjligt att en process kan ha mer minne än vad som finns? Och hur är det möjligt att flera processer var och en kan ha mer minne än vad som finns?