Operativsystem för civilingenjörer
måndag 29 maj 2023
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 31. För godkänt betyg krävs 18 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
a) Ange en uppgift som det är operativsystemet som utför.
b) Ange en uppgift som operativsystemet inte utför.
c) Ange en uppgift där det inte är uppenbart ifall operativsystemet eller ett applikationsprogram ska lösa den.
a) Det står att man "flyttat ut delar av kärnans uppgifter ut ur kärnan". Vart har man flyttat dem?
b) Varför vill man göra det, dvs vilka fördelar ger en mikrokärna?
c) Vilka nackdelar ger det?
d) Ge exempel på någon uppgift som man kan flytta ut ur kärnan.
e) Ge exempel på någon uppgift som man inte kan flytta ut ur kärnan. Varför går det inte att flytta ut den?
#include <stdio.h> #include <unistd.h> int x = 0; int main(void) { int y = 0; fork(); x = x + 1; y = y + 1; fork(); x = x + 1; y = y + 1; fork(); x = x + 1; y = y + 1; printf("x = %d, y = %d\n", x, y); } |
#include <stdio.h> #include <pthread.h> volatile int x = 0; void *thread_body(void *arg) { int y = 0; x = x + 1; y = y + 1; printf("x = %d, y = %d\n", x, y); return NULL; } int main(void) { int z = 0; x = x + 1; z = z + 1; printf("x = %d, z = %d\n", x, z); pthread_t thread1, thread2; pthread_create(&thread1, NULL, thread_body, NULL); pthread_create(&thread2, NULL, thread_body, NULL); pthread_join(thread1, NULL); pthread_join(thread2, NULL); printf("x = %d, z = %d\n", x, z); } |
a) Hur stor är den virtuella adressrymden?
b) Hur stor är den fysiska adressrymden?
c) Hur stor är en virtuell minnessida ("page" på engelska)?
d) Hur stor är en fysisk frame ("ram" på svenska)?
e) Hur många frames (dvs platser för minnessidor) kan man ha i datorn?
f) Vi tänker oss att vi har en sidtabell ("page table") för en process, och att enligt den sidtabellen är virtuell minnessida 3 lagrad i fysisk frame 2. (Båda numreras med början på noll.) Ange en adress inom denna virtuella minnessida, och visa hur den översätts till en fysisk adress. Visa både hur översättningen görs och vad resultatet blir.
g) Om vi vill använda den här datorn till något, som till exempel beräkningar, vilka problem kommer vi att få?
Om man låter två processer dela på ett gemensamt minnesutrymme, är en del av minnet alltså gemensamt för de två processerna. Har de blivit två trådar nu? Eller finns det skillnader jämfört med om de verkligen var trådar? Förklara!