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



Tentamen i

Operativsystem för civilingenjörer

måndag 22 augusti 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 32. För godkänt betyg krävs 17 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
2x / 2y = 2x-y

Uppgift 1 (3 p)

Det här är datorn ENIAC (foto av U. S. Army):

Datorn ENIAC. U. S. Army Photo.

ENIAC var en av världens första datorer. Den var byggd av radiorör och reläer och vägde över 20 ton. Så tidiga datorer var förstås mycket begränsade jämfört med moderna datorer. Det var många saker de inte kunde göra eftersom de saknade hårdvara för det. Till exempel kunde ENIAC inte visa grafik, för den hade ingen skärm. Tidiga datorer hade heller inget operativsystem.

Nämn något som dessa tidiga datorer inte kunde göra, just för att de saknade operativsystem, och förklara varför avsaknaden av ett OS hindrade dem från att göra det.

Uppgift 2 (2 p)

Vi skriver ett C-program för Linux som öppnar filen foo.bin med systemanropet open, därefter skriver ganska mycket data med ett antal write-systemanrop, och till slut stänger filen med systemanropet close.

En gång när vi provkör programmet märker vi att det tar knappt någon tid alls att göra open, det tar ungefär en sekund att göra alla write-anropen, men close-anropet tar hela tio sekunder. Man tycker att det är skrivningarna, med write, som borde ta längst tid, medan close bara är en mindre administrativ operation som markerar att filen inte längre är öppen.

Förklara vad det är som händer, och varför close-anropet tar så lång tid!

Uppgift 3 (11 p)

Här är ett C-program som använder både fork och pthread_create:

// forkthread.c

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

volatile int data = 0;

static void *thread_body(void *arg) {
    for (int i = 0; i < 1000; i++) {
        ++data;
    }
    return NULL;
} // thread_body

void start_threads(int nr_threads) {
    pthread_t threads[nr_threads];

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

    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);
        }
    }
} // start_threads

int main(void) {
    if (fork() == 0) {
        start_threads(5);
    }
    else {
        start_threads(7);
    }

    printf("All threads have finished.\n");
    printf("Result: data = %d\n", data);

    return EXIT_SUCCESS;
} // main

Utskrifter från två olika provkörningar av programmet:

All threads have finished.
Result: data = 6154
All threads have finished.
Result: data = 4064

All threads have finished.
All threads have finished.
Result: data = 6081
Result: data = 4000

a) Vad är skillnaden mellan fork och pthread_create?

b) Hur kan man få två olika värden på variabeln data i en och samma provkörning? Det finns väl bara en enda data-variabel i programmet? Förklara!

c) Förklara varför siffrorna blev olika i de två provkörningarna!

d) Förklara varför ordningen på raderna blev olika i de två provkörningarna!

e) Den billigaste processor som just nu finns i lager hos vår lokala datorbutik Multitech Data är Intel Celeron G5925 3,6 GHz, som kostar 548 kronor. Den har två kärnor, utan hyperthreading, så den kan köra två trådar parallellt. Kommer det att bli några problem när vi kör programmet på den processorn? Förklara!

f) Om vi vill att programmet ska ge samma svar vid varje körning kan vi använda mutex-lås av datatypen pthread_mutex_t och funktionerna pthread_mutex_lock respektive pthread_mutex_unlock. Men det löser bara en av olikheterna i deluppgift c (siffrorna) och d (ordningen på raderna). Vilken? Varför? Förklara!

Uppgift 4 (5 p)

På en Linux-dator kan man starta program genom att ge kommandon, till exempel de följande. Ange för vart och ett av dessa program om det är ett systemprogram, ett applikationsprogram eller en del av operativsystemkärnan. Om det inte är uppenbart hur ett program ska klassificeras, diskutera svaret!

a) cp (kopierar filer och filkataloger, "mappar")
b) forkthread (programmet i uppgiften ovan)
c) gimp (ett program för redigering av bilder)
d) ls (listar innehållet i en filkatalog)
e) rm (tar bort filer och filkataloger)

Uppgift 5 (7 p)

Vi har en byteadresserad dator som arbetar med virtuellt minne, där virtuella adresser består av 30 bitar och fysiska adresser består av 22 bitar. Sidstorleken ("page size") är 4096 byte.

a) Hur stor är den virtuella adressrymden?

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

c) Hur mycket fysiskt minne kan man ha i datorn?

d) Hur många frames ("ramar", dvs platser för minnessidor) kan man ha i datorn?

e) Hur stor (dvs hur många byte) är en frame?

f) Om vi antar att virtuell minnesadress 1 är lagrad i fysisk minnesadress 4097, var är virtuell minnesadress 100 lagrad? (Alla adresserna anges här med decimala siffror.) Visa hur översättningen görs.

Uppgift 6 (4 p)

För schemaläggningen ("schedulering") av processer används flera olika köer där processerna placeras.

a) Förklara vilka det är, och vad man har varje kö till!

b) Var finns dessa köer?