Operativsystem (IS1350) 2017-03-15 08:00-12:00 Namn: Instruktioner Betyg Du får endast ha med dig skrivmateriel. Mobiler etc skall lämnas till tentamensvakterna. Svaren skall lämnas på dessa sidor, använd det utrymme som nns under varje uppgift för att skriva ner ditt svar. Svar skall skrivas på svenska. Du skall lämna in hela denna tentamen. Inga ytterligare sidor skall lämnas in. Tentamen har ett antal uppgifter där några är lite svårare än andra. De svårare uppgifterna är markerade med en stjärna, poäng*, och ger poäng för de högre betygen. Vi delar alltså upp tentamen i grundpoäng och högre poäng. Se först och främst till att klara grundpoängen innan du ger dig i kast med de högre poängen. Notera att det av de 22 grundpoängen räknas bara som högst 18 och, att högre poäng inte kompenserar för avsaknad av grundpoäng. Gränserna för betyg är som följer: Fx: 11 grundpoäng E: 12 grundpoäng D: 15 grundpoäng C: 18 grundpoäng B: 18 grundpoäng och 5 högre poäng A: 18 grundpoäng och 8 högre poäng Erhållna poäng Skriv inte här, detta är för rättningen. 1
Uppgift 1 2 3 4 5 6 7 8 Max G/H 4/0 4/0 4/2 2/2 2/2 2/2 4/0 0/2 G/H Totalt antal poäng: 2
1 Operativsystem 1.1 ler och rättigheter [2 poäng] I ett Unix-operativsystem så är ler och mappar skyddade så att rättigheterna för att använda ett objekt är begränsat. Dessa rättigheter kan vi se då vi listar innehållet i en mapp. Beskriv vilka rättigheter som gäller för len foo nedan. > ls -l foo > -rwxr-x--- 1 kalle trusted 234 dec 26 13:18 foo Svar: Ägaren kalle har läs-, skriv- och exekveringsrättigheter. Medlemmar i gruppen trusted kan läsa och exekvera. Övriga användare har inga rättigheter. 1.2 kommandon i shell [2 poäng] Om vi ger kommandosekvensen nedan, vad kommer vi då få för resultat? Varför? > echo "cd foo grep bar" wc -w Svar: Resultatet är 4. Vi `pipe:ar strängen cd foo grep bar till kommandot wc -w som kommer att räkna antalet ord. 2 Processer 2.1 vad är var? [2 poäng] I koden nedan har vi allokerat upp två arrayer; vilka arrayer och i vilka segment åternns de: globalt, stack eller heap? #include <stdio.h> #include <stdlib.h> int x = 43; int *foo(int *a, int s) { int *r = malloc(s * sizeof(int)); 3
for(int i = 0; i < s; i++) { r[i] = a[i] + x; return r; int main() { int h[] = {1,2,3,4; int *c = foo(h, 4); printf("%d \n", c[3]); return 0; Svar: De två arrayerna är h som allokeras på stacken i main() och r som allokeras på heapen i foo(). 2.2 fork [2 poäng] Vad skrivs ut när vi kör programmet nedan och varför får vi detta resultat? #i n c l u d e <u n i s t d. h> #i n c l u d e <s t d i o. h> i n t x = 4 2 ; i n t main ( ) { i f ( f o r k ( ) == 0) { x++; p r i n t f (" x = %d\n ", x ) ; e l s e { x++; p r i n t f (" x = %d\n ", x ) ; r e t u r n 0 ; Svar: Det kommer att skrivas x = 43 och x = 43 efter varandra.de två processerna kommer få var sin kopia av den globala datastrukturen x som 4
då har värdet 42. Eftersom uppdateringarna är oberoende av varandra har båda processerna värdet 43 vid utskrift. 3 Schemaläggning 3.1 tillståndsdiagram [2 poäng] Nedan är ett tillståndsdiagram för processer vid schemaläggning Fyll i de markerad delarna så att man förstår vad tillstånden betyder och när en process förs mellan olika tillstånd. Svar: scheduled terminate start ready running exit timout I/O complete blocked I/O request 3.2 shortest time-to-completion rst [2 poäng] Schemaläggaren shortest time-to-completion rst är en optimal schemaläggare; vad är det den optimerar och varför är den i praktiken inte användbar? Svar: Den optimerar omlopstiden (turnaround) för ett givet antal jobb. Problemet är att vi i de esta fall inte vet hur lång tid det kommer att ta för ett jobb att avslutas. 3.3 realtidsschemaläggare [2 poäng*] I realtidsschemaläggning så beskriver vi jobb med tre värden som brukar beteckans: e, d och p. Vad står dessa parameterar för (du behöver inte komma ihåg vilken som är vilken men skall kunna ange egenskaperna som beskriver ett jobb). 5
Svar: e: längsta exekveringstid d: dead-line, när måste jobbet vara klart p: periodicitet, hur ofta skall jobbet schemaläggas 4 Virtuellt minne 4.1 paging [2 poäng] Antag att vi har en virtuell adress som består av ett 20-bitars sidnummer och en 12-bitars oset. Vi har en fysisk adressrymd på 32 bitar, kodar ett ramnummer i 20 bitar och element i en sidomvandlingstabell är fyra bytes stort. Hur stor är en sida och hur stor skulle en komplett omvandlingstabell behöva vara? Svar: Sidorna är 4Kibyte stora eftersom vi har 12 bitars oset. Tabellen skulle behöva vara 4Mibyte eftersom vi behöver 1Mi element. 4.2 bounds [2 poäng*] När vi implementerar ett segmenterat minne så vill vi gärna ha ett boundsvärde som säger hur stort segmentet är. Om vi inte har det så riskera vi att addressera utanför segmentet. När vi implementerar ett sidat minne (paging) så behövs inget bounds-värde? Varför behöver vi inte det? Vad är det som hindrar oss från att addressera utanför sidan? Om det nu är något som hindrar oss från att göra fel, är det något som kostar? Vad kostar det? Svar: Alla sidor är lika stora och storleken är exakt så stor som vårt oset kan addressera dvs vårt oset kommer alltid att hamna innaför sidans gränser. Kostnaden är att det vi alltid allokerar minne i storleken av en sida. Om vi har en sidstorlek på 4K byte och behöver 6K byte, så kommer vi att allokera 8K byte. 6
5 Minneshantering 5.1 parkeringsplatser [2 poäng] När det skulle ordnas parkeringsplatser längs med Sveavägen så fanns två förslag: 1/ ha målade parkeringsrutor som var 6m långa 2/ låt bilar parkera med 25 cm mellanrum, utan att begränsas av målade rutor. Om vi för enkelhetens skull antar att bilar är mellan 4 och 5.50 meter och att alla kan parkera en bil i en lucka med en halv meter till godo, vad är då problemet med respektive lösning? Svar: I alternativ med parkeringrutor så kommer vi ha en intern fragmentering då vi i snitt förlorar 75 cm per plats. I fall två kan vi få extern fragmentering eftersom luckor kan bli för små för att användas. 5.2 buddy-allokering [2 poäng*] Den så kallade buddy-algoritmen för att hantera ledigt minne har en klar föredel men också en klar nackdel. Antag att vi har ett minne som är indelat i 4K block och att vi ar 16K som är fria i block 0b10100. Vad gör vi när vi får 8K ledigt i block 0b11000? Hur illustrerar detta nackdelen? Rita en bild som visar var någonstans de fria blocken nns och vilket problem vi har. Varför accepterar vi detta? Svar: Bilden skall visa adressrymden och att de två blocken ligger bredvid varandra. Den skall också visa att dessa två block inte är buddies och därför inte kan slås ihop. Vi accepterar detta eftersom vi får ett mycket enkelt sätt att avgöra om två block kan slås ihop och block alltod kommer att vara 2 k sidor stora, vilket är enklare att hantera. 6 Flertrådad programmering 6.1 count [2 poäng] Om vi exekverar proceduren hello() nedan samtidigt i två trådar så kan resultatet bli att count blir... - ja vilka värden kan count anta efter det att båda trådarna exekverat klart? Hur kan det komma sig? i n t loop = 1 0 ; i n t count = 0 ; 7
void h e l l o ( void ) { : f o r ( i n t i = 0 ; i < loop ; i ++) { count++; Svar: Variabeln count kan ha ett slutgiltiga värde i intervallet [2, 20]. Detta eftersom operationen count++ inte är atomär utan består av en läs operation, en addering och en skrivoperation. Att hitta fallet där count blir 2 är rätt klurigt, det viktiga att förstå är att operationerna inte är atomära och att det försöker uppdatera samma minnesposition. 6.2 Petersons algoritm [2 poäng*] Beskriv vad Petersons algoritm skall lösa och varför den inte går att använda på de esta moderna datorsystem. Svar: Algoritmen implementerar ett lås men fungerar endast då systemet garanterar sekvensiell konsistens. Moderna system ger oss dock endast s.k. total store order. 7 Filsystem 7.1 länkar [2 poäng] Vad är skillnaden mellan en hård och en mjuk länk? Svar: En mjuk länk är en indirekt referens till ett annat namn. En hård länk är en referens till en inode. 7.2 inode [2 poäng] Kortfattat - vad innehåller en inode? Svar: En inode innehåller meta-data om en l: när skapades den, ägare, rättighter, storlek mm. Den innehåller också information om vilka datablock som används för att lagra innehållet i len. 8
8 Virtualisering [2 poäng*] En närbesläktigad lösning till full virtualisering är s.k. containers. Dessa erbjuder många av de fördelar som virtualisering av ett operativsystem ger men har en begränsning; vilken är den stora skillnaden mellan containers och virtualiserade operativsystem? Svar: Containers erbjuder en miljö som är helt avgränsad från övriga system som kör på samma dator: eget minne, lsystem, nätverk mm. Den stora skillnaden är att alla containers använder samma kärna dvs de är begränsade till att köra samma operativsystem. 9