Örebro universitet
Institutionen för naturvetenskap och teknik
Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se)









Tentamen i

Operativsystem för civilingenjörer

onsdag 30 augusti 2024

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 34. För godkänt betyg krävs 20 poäng.
Resultat: Meddelas senast 15 arbetsdagar efter tentamensdatum.
Å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

2x * 2y = 2x+y

Uppgift 1 (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). På vilka sätt används avbrott av operativsystemet, och hur gör de att arbetet blir effektivare?

Uppgift 2 (3 p)

a) Vad menas i operativsystemsammanhang med schedulering ("schemaläggning")?

b) Ange en scheduleringsalgoritm, och beskriv hur den fungerar.

Uppgift 3 (3 p)

Man brukar skilja på samtidighet (engelska: concurrency) och parallellitet (engelska: parallelism). Vad är skillnaden?

Uppgift 4 (5 p)

a) Man brukar skilja på de så kallade exekveringsmoderna kernel mode och user mode, och ibland också på kernel space och user space. Vad innebär dessa termer?

b) Varför finns denna uppdelning?

c) Vid virtualisering, som med VirtualBox och VMware, vill man ha fler än två olika exekveringsmoder. Varför?

Uppgift 5 (3 p)

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.

Hur underlättar operativsystemet programmerarens arbete med diskarna?

Uppgift 6 (5 p)

Här är ett C-program för Linux:

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

#define STUFFS_TO_DO 3

int global = 0;

void do_stuff(int number) {
    int local = 0;
    ++local;
    ++global;
    printf("number %d: local = %d, global = %d\n", number, local, global);
}

int main(void) {
    printf("forks: starting!\n");
    for (int i = 0; i < STUFFS_TO_DO; ++i) {
        int fork_result = fork();
        if (fork_result == -1) {
            fprintf(stderr, "forks: fork failed\n");
            exit(EXIT_FAILURE);
        }
        else if (fork_result == 0) {
            do_stuff(i);
            exit(EXIT_SUCCESS);
        }
        else {
            // Nothing
        }
    }

    printf("forks: finished!\n");
}

a) Beskriv vad programmet gör. Skriv en sammanfattning, alltså inte rad för rad vad koden gör.

b) Vad skrivs ut när programmet körs?

c) Kan utskrifterna bli olika från gång till gång, och vad beror det i så fall på?

d) Om utskrifterna kan bli olika från gång till gång, vad skulle man kunna lägga till i programmet så det alltid blir samma utskrifter?

Uppgift 7 (5 p)

Här är ett annat C-program:

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

#define NR_THREADS 10

volatile long long int data = 0;
pthread_mutex_t lock;

void *thread_body(void *arg) {
    int this_thread_number = (int)arg;
    for (int i = 0; i < 1000000; ++i) {
        pthread_mutex_lock(&lock);
        ++data;
        pthread_mutex_unlock(&lock);
    }
    return NULL;
}

int main(void) {
    printf("Starting %d threads...\n", NR_THREADS);
    pthread_mutex_init(&lock, NULL);
    pthread_t threads[NR_THREADS];
    for (int i = 0; i < NR_THREADS; ++i)
        pthread_create(&threads[i], NULL, thread_body, (void*)i);
    for (int i = 0; i < NR_THREADS; ++i)
        pthread_join(threads[i], NULL);
    printf("The value of data is %lld.\n", data);
}

a) Beskriv vad programmet gör. Skriv en sammanfattning, alltså inte rad för rad vad koden gör.

b) Vad skrivs ut när programmet körs?

c) Vilken funktion har anropen till pthread_mutex_lock och pthread_mutex_unlock?

d) Vad skulle hända om man tog bort de anropen?

Uppgift 8 (7 p)

En ny, modern processor har virtuellt minne, med virtuella minnesadresser som består av 16 bitar, och fysiska minnesadresser som är 20 bitar. 12 bitar används som offset. Datorn är byteadresserad, så på varje minnesadress kan man lagra en byte.

a) Vilka användningsområden kan man tänka sig för den här processorn? Kan den användas för stora beräkningar och simuleringar, är det en processor för vanliga skrivbordsdatorer och bärbara datorer, är den tänkt för små, inbyggda system, eller vad? Motivera svaret!

b) Hur stort virtuellt minne kan man adressera?

c) Hur stort fysiskt minne kan man adressera?

d) Hur stor är en virtuell minnessida ("page" på engelska)?

e) Hur stor är en fysisk frame ("ram" på svenska)?

f) Processorn kan köra flera processer, som var och en har sin egen virtuella minnesrymd. Hur många processer kan vara igång vid samma tidpunkt? Motivera svaret!