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. |
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
b) Ange en scheduleringsalgoritm, och beskriv hur den fungerar.
b) Varför finns denna uppdelning?
c) Vid virtualisering, som med VirtualBox och VMware, vill man ha fler än två olika exekveringsmoder. Varför?
Hur underlättar operativsystemet programmerarens arbete med diskarna?
#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?
#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?
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!