Operativsystem ID2200/06 omtentamen 2017-12-18 14:00 ... - KTH

24

Transcript of Operativsystem ID2200/06 omtentamen 2017-12-18 14:00 ... - KTH

Operativsystem ID2200/06

omtentamen

2017-12-18 14:00-18:00

Instruktioner

• Du får, förutom skrivmateriel, endast ha med dig en egenhändigt hand-skriven A4 med anteckningar.

• Svaren skall lämnas på dessa sidor, använd det utrymme som �nnsunder varje uppgift för att skriva ner ditt svar.

• Svar skall skrivas på svenska eller engelska.

• Du skall lämna in hela denna tentamen.

• Inga ytterligare sidor skall lämnas in.

Versioner

Denna tentamen gäller för �era olika omgångar av kurserna ID2200/06. Bero-ende på vilken kursomgång du följer så skall olika delar av tentamensfrågornabesvaras.

För omtentander i ID2200 gäller följande:

• Registrerade för tentamen på 6hp, VT16 och HT16: besvara frågorna1-9, inte fråga 10.

• Registrerade för tentamen på 3.8 hp, dvs före VT16: besvara frågorna1-8, inte 9-10.

• För de som är registrearde för tentamen på 3.8hp men som ännu intehar lab-momentet avklarat kan man besvara även fråga 9 och då fådet momentet tillgodoräknat. Fråga 9 hanteras separat, så få poäng påfråga 9 kompensears inte av �era poäng i övriga delar.

För omtentander i ID2206 gäller följande:

• Registrerade för tentamen på 6hp, HT16: besvara frågorna 1-9, inte 10.

• Registrerade för tentamen på 4.5hp, före HT16: besvara frågorna 1-8och fråga 10

• För de som är registrearde för tentamen på 4.5hp men som ännu intehar lab-momentet avklarat kan man besvara även fråga 9 och då få detmomentet delvis tillgodoräknat. Fråga 9 hanteras separat, så få poängpå fråga 9 kompenseras inte av �era poäng i övriga delar.

1

Betyg för 6hp

Tentamen har ett antal uppgifter där några är lite svårare än andra. Desvårare uppgifterna är markerade med en stjärna, poäng*, och ger poängför de högre betygen. Vi delar alltså upp tentamen i grundpoäng och högrepoäng. Se först och främst till att klara grundpoängen innan du ger dig ikast med de högre poängen.

Notera att det av de 40 grundpoängen räknas bara som högst 36 och, atthögre poäng inte kompenserar för avsaknad av grundpoäng. Gränserna förbetyg är som följer:

• Fx: 21 grundpoäng

• E: 23 grundpoäng

• D: 28 grundpoäng

• C: 32 grundpoäng

• B: 36 grundpoäng och 12 högre poäng

• A: 36 grundpoäng och 18 högre poäng

Gränserna kan komma att justeras nedåt men inte uppåt.

Gränsen för E är för tentamen på 4.5hp 18 poäng och för 3.8hp tentamen 16poäng. Gränsen för tillgodoräkning av lab-moment är 12 poäng på fråga 9.

2

Namn: Persnr:

1 Operativsystem

1.1 vad händer här? [2 poäng]

Vad är foo och bar?

$ ls -l

totalt 8

drwxrwxr-x 2 kalle admin 4096 dec 1 11:53 bar

-rw-rw-r-- 1 jonny angels 58 dec 1 11:53 foo

1.2 kommandon i ett shell [2 poäng]

Ge en kort beskrivning av vad kommandona nedan gör.

• ln

• chown

• less

• pwd

3

Namn: Persnr:

2 Processer

2.1 vad är problemet? [2 poäng]

Koden nedan kanske fungerar att kompilera men vi gör ett allvarligt misstag.Vilket fel gör vi och vad skulle kunna hända?

#include <stdlib.h>

#define SOME 100 // should be > 2

int *some_fibs() {

int buffer[SOME];

buffer[0] = 0;

buffer[1] = 1;

for(int i = 2; i < SOME; i++) {

buffer[i] = buffer[i-1] + buffer[i-2];

}

// buffer contains SOME Fibonacci numbers

return buffer;

}

2.2 Intel 80286 [2 poäng*]

I processorn 80286 som lanserades 1982, hade Intel lagt till en privilegieradinstruktion LIDT (Load Interrupt Descriptor Table). Vad menas det medatt instruktionen är privilegierad och varför behöver denna instruktion varaprivilegierad?

4

Namn: Persnr:

3 Schemaläggning

3.1 interaktiva processer [2 poäng]

Antag att vi vill implementera en schemaläggare med bra responstid förinteraktiva processer men att vi inte har kunskap om processerna är inter-aktiva eller inte. Vad är en bra heuristik för att avgöra vilka processer somär interaktiva och hur skulle vi kunna ge dem bättre responstid?

5

Namn: Persnr:

3.2 tillståndsdiagram [2 poäng]

Här följer ett tillståndsdiagram för processer vid schemaläggning. Fyll i demarkerad delarna så att man förstår vad tillstånden betyder och när enprocess förs mellan olika tillstånd.

. . . . . .start . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .. . . . . .

3.3 stride scheduling [2 poäng*]

Man skulle kunna implementera en stride scheduler genom att ha alla pro-cesserna i en lista ordnad efter ett s.k. pass value. Den process som är försti listan väljs som den process som skall exekverar. När processesn har exe-kverats så skall den läggas in i listan igen, på vilken position skall den läggasin?

6

Namn: Persnr:

4 Virtuellt minne

4.1 segmentering [2 poäng]

När man använder segmentering för att hantera fysiskt minne så kan man fåproblem med extern fragmentering. Detta undviks om man istället använders.k. paging. Varför kan vi undvika extern fragmentering med hjälp av paging?

4.2 ett träd [2 poäng]

Vid representation av en sidtabell (page table) så används en trädstruktur.Varför har man en trädstruktur, det skulle gå betydligt snabbare att slå uppett värde om man representerade tabellen som en array med direkt åtkomsttill elementen. Ett träd ger oss bara en eller �era indirektionssteg så varföranvända ett träd?

7

Namn: Persnr:

4.3 x86_64 adressering [2 poäng*]

I en x86-processor i 64-bitarsmode så innehåller ett PTE en ramadress på40 bitar. Denna kombineras med den virtuella adressens o�set på 12 bitartill en fysisk adress. Detta blir 52 bitar men en process har endast 48-bitarsvirtuellt minne. Vilken fördel får vi genom att ha en 52-bitars fysisk adress?

5 Minneshantering

5.1 malloc() [2 poäng]

I Linux (och alla Unix dialekter) så är malloc en biblioteksrutin och inte ettsystemanrop. Varför är det en biblioteksrutin? Vore det inte snabbare omvi anropade systemanropet direkt, det är ju operativsystemet som hanterarallt minne i alla fall?

8

Namn: Persnr:

5.2 vem är din buddy [2 poäng]

Antag att vi använder buddy-allokering och har minsta block på 16 bytes.Om vi frigör ett block på 32 bytes som har nummer 0b001010, vilket blockär då vår buddy?

5.3 adressorterad [2 poäng*]

Antag att vi implementerar en minneshanterare och länkar de fria blocken ien enkellänkad lista. Om vi håller denna lista sorterad på adressordning såkanske vi kan hitta block som skall slås ihop när ett block frigörs. Hur skulleimplementationen se ut, hur hittar vi block som kan slås ihop?

9

Namn: Persnr:

6 Flertrådad programmering

6.1 count [2 poäng]

Om vi exekverar proceduren hello() nedan samtidigt i två trådar så blirresultatat - ja vad blir resultatet? Hur kan det komma sig?

i n t loop = 10 ;

void ∗ h e l l o ( ) {i n t count = 0 ;

f o r ( i n t i = 0 ; i < loop ; i++) {count++;

}p r i n t f (" count i s : %d" , count ) ;

}

6.2 saker på högen [2 poäng]

Om vi har ett �ertrådat program så kan naturligtvis trådarna läsa och skrivatill globala variabler och därmed arbeta med gemensamma datastrukturer.Hur är det med datastrukturer som en tråd allokerar på heapen, kan dessaläsas och skrivas från andra trådar?

10

Namn: Persnr:

6.3 thread local storage [2 poäng*]

Antag att vi implementerar en minnes hanterare (alloc/free) där vi använ-der nedanstående konstruktion för att hantera frilistan. Vilka fördelar ocheventuell nackdelar skulle detta medföra?

__thread chunk ∗ f r e e = NULL;

void f r e e ( void ∗memory) {i f (memory != NULL) {

s t r u c t chunk ∗cnk = ( s t r u c t chunk ∗ ) ( ( s t r u c t chunk ∗)memory − 1 ) ;cnk−>next = f r e e ;f r e e = cnk ;

}re turn ;

}

11

Namn: Persnr:

7 Filsystem och lagring

7.1 rpm [2 poäng]

De �nns hårdiskar med olika prestanda, en sak som skiljer dem är hur snabbtde roterar. Vad har rotationshastigheten för betydelse, vad förbättras och vadkan komma att försämras?

7.2 vad var [2 poäng]

Antag att vi har ett enkelt �lsystem utan journal där vi skriver direkt tillinoder, bitmappar och datablock. Antag att vi skall skriva till en �l ochbehöver ytterligare ett datablock. Vilka strukturer kommer att ändras ochvilken förändring skall genomföras.

12

Namn: Persnr:

7.3 loggbaserade fs [2 poäng*]

I ett loggbaserar �lsystem skriver vi alla förändringar i en kontinuerlig loggutan att göra förandringar i de redan existerande block som en �l har. Vadär poängen med att hela tiden skriva nya modi�erade kopior av datablockistället för att gå in och göra de små förändringar som vi vill göra? Om detär bättre, är det något som blir sämre?

13

Namn: Persnr:

8 Virtualisering

8.1 ett system anrop [2 poäng]

När vi gör ett systemanrop i en användarprocess i ett virtualiserat operativ-system så kommer kontroll föras mellan: användrarprocessen, det virtualise-rade operativsystemet och hypervisorn. Visa i ett sekvensdiagram vad somhänder från det att användarprocessen exekverar INT 0x80 tills det att denfår tillbaks kontrollen.

Hypervisor Guest operating system Application

running

system call

INT 0x80

resume execution

8.2 sätta IDT [2 poäng*]

När en hypervisor startar ett virtualiserat operativsystem så kommer detvirtualiserade systemet med all säkerhet vilja sätta det register som pekarut den IDT som den vill använda. Vad är problemet och hur man kan lösadet?.

14

Namn: Persnr:

9 Implementering

9.1 minnesmappning [2 poäng]

Nedan följer en, något förkortad, utskrift av en minnesmappning av en kö-rande process. Beskriv kortfattat vad varje segment markerat med ??? fyllerför roll.

> cat /proc/13896/maps

00400000-00401000 r-xp 00000000 08:01 1723260 .../gurka ???

00600000-00601000 r--p 00000000 08:01 1723260 .../gurka ???

00601000-00602000 rw-p 00001000 08:01 1723260 .../gurka ???

022fa000-0231b000 rw-p 00000000 00:00 0 [???]

7f6683423000-7f66835e2000 r-xp 00000000 08:01 3149003 .../libc-2.23.so ???

:

7ffd60600000-7ffd60621000 rw-p 00000000 00:00 0 [???]

7ffd60648000-7ffd6064a000 r--p 00000000 00:00 0 [vvar]

7ffd6064a000-7ffd6064c000 r-xp 00000000 00:00 0 [vdso]

ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]

15

Namn: Persnr:

9.2 fork [2 poäng]

Om vi kör programmet nedan, vad kommer att skrivas ut på skärmen? Var-för?

i n t x = 0 ;

i n t main ( ) {

i n t pid ;

pid = fo rk ( ) ;

i f ( pid == 0) {p r i n t f (" ch i l d : x i s at %p\n" , &x ) ;

} e l s e {p r i n t f ("mother : x i s at %p\n" , &x ) ;wait (NULL) ;

}

re turn 0 ;}

16

Namn: Persnr:

9.3 pipes [2 poäng]

Vi kan enkelt (typ enkelt) göra en fork() och sen sätt upp stdin och stdout

för de båda processerna kommunicerar via en s.k. pipe. Hur kan vi få två pro-cesser att göra det samma om det inte är vi som skapar den andra processenvia fork(). Hur kan en process skapa en pipe som en annan process skallläsa från?

17

Namn: Persnr:

9.4 en mapp [2 poäng]

En mapp i Linux representeras på samma sätt som en �l dvs med en inodesom pekar ut ett datablock där datablocket innehåller namn och referensertill �ler som ligger i mappen. Det betyder att vi använder samma syste-manrop när vi vill läsa en mapp som när vi läser en �l - sant eller falskt?Motivera.

9.5 sbrk() och sen då [2 poäng]

Man kan använda systemanropet sbrk() för att allokera mer utrymmer förheapen men hur kan en process lämna tillbaks minne?

18

Namn: Persnr:

9.6 en billig operation [2 poäng]

Nedan är ett utsnitt från ett program som implementerar klock-algoritmen.Koden visar på varför klock-algoritmen är billigare än implementationen avLRU. Vad skulle vi gjort i motsvarande fall om vi implementerat LRU?

:i f ( entry−>present == 1) {

entry−>re f e r en c ed = 1} e l s e {

:}

19

Namn: Persnr:

9.7 execlp() [2 poäng*]

I programmet nedan anropar vi biblioteksproceduren execlp() som ersätterden körande processens programkod. Här använder vi det för att anropa/bin/ls och skriva ut dels aktuell mapp (current directory), dels användarenshemma-mapp. Varför kommer detta inte att fungera?

i n t main ( ) {

i n t pid = fo rk ( ) ;

i f ( pid == 0) {

char cwd [ 1 0 2 4 ] ;getcwd (cwd , s i z e o f ( cwd ) ) ;p r i n t f (" This i s the cur r ent d i r e c t o r y : \n " ) ;exec lp ("/ bin / l s " , "/ bin / l s " , &cwd , NULL) ;

p r i n t f (" This i s your home d i r e c t o r y : \n " ) ;exec lp ("/ bin / l s " , "/ bin / l s " , getenv ("HOME") , NULL) ;

} e l s e {wait (NULL) ;

}re turn 0 ;

}

20

Namn: Persnr:

9.8 sockets [2 poäng*]

När vi vill kommunicera mellan två processer kan vi använda så kalladesockets. Dessa �nns i �era versioner bland annat SOCK_STREAM och SOCK_-

DGRAM. Beskriv skillnaden mellan dessa olika varianter.

9.9 delat minne [2 poäng*]

Processer i ett Unix-system kan kommunicera med varandra via �era olikakanaler. De kan även dela minnesareor på liknande sätt som två trådar i enprocess can dela heap och global data. Hur kan vi få två processer att delaminne?

21

Namn: Persnr:

9.10 context [2 poäng*]

Med hjälp av bibliotektsanropet getcontext() kan en process spara undansitt eget så kallade context. Vi skulle kunna bygga upp ett bibliotek som lätoss skapa nya exekverande trådar och växla mellan dessa manuellt genomatt en exekverande tråd anropade en schemaläggare.

Varför skulle vi vilja bygga upp ett liknande bibliotek, �nns det några för-delar? Vad skulle nackdelarna vara?

22

Namn: Persnr:

10 Bara för omtentamen i ID2206 reggade före HT16(4.5hp tentamen)

10.1 NFS och AFS [2 poäng]

NFS och AFS två exempel på distribuerade �lsystem. Vad gör dessa systemför att e�ektivisera skrivning och läsning av �ler och vilka problem medfördet?

10.2 saltade lösenord [2 poäng]

När lösenord lagras i krypterad form på en server så används ofta ett såkallat salt. Vad har saltet för funktion?

23

Namn: Persnr:

10.3 multiprocessor [2 poäng*]

Om vi har en multiprocessor så måste en schemaläggare naturligtvis kunnalåta processer köra på de olika processornerna. Vi kan dock göra bättre ellersämre schemalägging, beskriv en aspekt som vi måste ta hansyn till och hurvi anpassar schemaläggaren.

10.4 at-least-once [2 poäng*]

Om vi har en implementering av RPC som erbjuder �at-least-once� så kan vifå problem när vi implementerar en tjänst. Vad är problemet och hur löserman det?

24