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. |
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
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.
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!
// 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!
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)
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.
a) Förklara vilka det är, och vad man har varje kö till!
b) Var finns dessa köer?