TDDIU81. Processer och trådar. Andreas Dahlberg, Jonathan Doherty, Tony Magnusson, Patrik Ottosson, Rasmus Siljedahl

Relevanta dokument
Processer och trådar. Rasmus Cronstrand Per Jonsson Ante Wall Fabian Åberg

Deluppgift 17 Processhantering: exec, sleep, exit, plist

Datorteknik ERIK LARSSON

Outline. Datorsystemtekni. Kravspecifikation. Kravspecifikation (forts.)

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

Olika OS. Unix, Linux och Windows. Unix. Unix. En översikt av ett par OS. Titt på hur de gör. Många varianter. Mycket gemensamt. En del som skiljer

Deluppgift 10 Starta den första processen (3.5h förarbete, 30min kodning)

Dagens OS. Unix, Linux och Windows. Unix. Unix. En översikt av dagens OS Titt på hur de gör. Många varianter Mycket gemensamt. En del som skiljer

Schemaläggning Unix. Minneshantering etc. Linux. Schemaläggning av trådar (kernel threads) Detaljer. Operativsystem - Lektion 7

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH.

Operativsystem ID2200 Tentamen TEN1 3.8 hp :00-18:00

Översikt. Datorarkitekturer med operativsystem. Inledning. Inledning

Operativsystem (ID2200/06) XX XX:00-XX:00

Hur delas CPU? Processormodell. Vårt produk9onsbolag igen. Produkt 2. Produkt Vinster med aa göra saker sam9digt.

Försättsblad till skriftlig tentamen vid Linköpings Universitet Cover page for written exam at Linköping University

Flera processer. Minneshantering. Trashing kan uppstå ändå. Ersätta globalt

Fö 7: Operativsystem. Vad är ett operativsystem? Målsättning med operativsystem. Styr operativsystemet datorn?

Operativsystem ID2206 Tentamen TEN1 4.5 hp :00-18:00

Öppna filer och filsystem i PintOS Hemuppgift TDDI81, 21/

Operativsystem. Innehåll. Operativsystemets funktion. Vad är ett OS? Vart hittar men ett OS? OS hanterar processorns resurser

Schemaläggningsmetodik för multi-core inom Windows 7 OS Vad är scheduling och hur schemalägger Windows OS sina processer?

Datorteknik ERIK LARSSON

Lösningsförslag till tentamen i IS1350 Operativsystem

Tentamen i ID2206, ID2200 samt IS1350 Operativsystem

Hjälpmedel: Inga hjälpmedel förutom penna, suddgummi och glatt humör.

Mål. Datorteknik. Repetition av avbrott. Innehåll. Mätning och styrning. Datorer för mätning och styrning. timer. Datorsystem A/D. Analog insignal D/A

Operativsystem ID2200/06 omtentamen :00-18:00

Operativsystem. Informationsteknologi sommarkurs 5p, Agenda. Slideset 7. Exempel på operativsystem. Operativsystem

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Vad händer när man kör ett program? Program och processer. Funktionsanrop. Avsluta programmet

Realtidsstöd i Minix. En laborationrapport. Oktober 2012

Minneshantering segmentering och virtuellminne. Föreläsning 3

Fö 5+6 TSEA81. Reflektion av Lab 2. clock.c (module) Real-time kernel + Real-time OS

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

En Von Neumann-arkitektur ( Von Neumann-principen i föreläsning 1) innebär:

Operativsystem (IS1350) :00-12:00

Operativsystem Lektion 1. Lärare. Schema. Kurssajten Finns på adressen. Jan Erik Moström. Set Norman

Datorsystem. Laboration 3: Operativsystem Senast uppdaterad: 14 oktober 2012 Version 1.3. Student: Underskrift: Underskrift: Datum:

Deluppgift 9 Installera Pintos

Trådar och Multiprocessorer. Föreläsning 6

Operativsystem - input/output, skydd, virtualisering

Maskinorienterad programmering

Möte 7: Uppföljning av föreläsningen med Peer Instruction - (PI)

Operativsystem ID hp, ID2200 6hp

Processprogrammering och operativsystem Introduktion. Kursinformation. Varför operativsystem?

Försättsblad till skriftlig tentamen vid Linköpings Universitet Cover page for written exam at Linköping University

Program. Datorteknik. Semantiskt gap. C - Inledning. Abstraktionsnivå: Högnivåspråk. Assemblyspråk. Maskinspråk

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Operativsystem ID1200/06 och ID2200/06 Tentamen TENA 6 hp :00-18:00

Operativsystem ID2200/06 omtentamen :00-18:00

HI1025 Operativsystem, KTH Haninge, VT2012

Fö 8: Operativsystem II. Minneshantering. Minneshantering (1) Minneshantering (2) Minneshantering och Virtuelltminne.

Aktivitetsschemaläggning för flerkärninga processorer

Datorsystem 5. På denna föreläsning skall vi prata om Operativsystem Exempel på tenta (typ fjolårets)

Försättsblad till skriftlig tentamen vid Linköpings Universitet Cover page for written exam at Linköping University

DIG IN TO Dator och nätverksteknik

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Operativsystem. IS hp. Jim Dowling Docent, PhD [Bilder av Robert Rönngren]

Operativsystem - Processer I

... Funktionsanrop. Vad händer när man kör ett program?

Maskinorienterad programmering

Datorteknik ERIK LARSSON

LEX INSTRUKTION REPLIKERING UPPGRADERING

F8: Undantagshantering

DVG A06. Operativsystem, mm. Karlstads universitet Datavetenskap. DVG A06 Johan Eklund. Datavetenskap, Karlstads universitet 1

Operativsystem ID2200/06 tentamen och omtentamen :00-12:00

Definition DVG A06. Varför operativsystem? Operativsystem. Översikt. - Vad är ett operativsystem?

Systembeskrivning. Systemskiss. Moduler.

Operativsystem ID2200/06 omtentamen :00-18:00

Deluppgift 9 Installera PintOS

Länkning av Prolog under C

Arkitekturer i operativsystem

Hyper-Threading i Intelprocessorer

Realtidssystem. - Schemaläggning - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 6

Några gamla tentamensuppgifter: Processer. 3. Antag givet ett system i vilket rent CPU-bundna processer med följande egenskaper exekveras.

4 grundregler. Minneshantering. Problemet. Windows minkrav

Datakom II (MNP) ht 1998 Bengt Ahlgren 1. Vad är speciellt med implementering av kommunikationsprotokoll?

Realtidssystem. - Dödläge - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 5

Försättsblad till skriftlig tentamen vid Linköpings Universitet Cover page for written exam at Linköping University

Operativsystem DVG A06. Definition. Varför operativsystem? - Vad är ett operativsystem?

F5: Högnivåprogrammering

En processor kan ha en klockfrekvens på flera GHz. Det går alltså a9 exekvera en instruk=on väldigt for, givet a9 instruk=onen finns i processorn.

Programallokering. Programtyper. Att placera program i flashrespektive. Program i FLASH-minne. Program i RAM-minne

Operativsystem. Hierarkin för hårdvara läses nerifrån

Operativsystem ID1200/06 Tentamen :00-18:00

Tentamen i Algoritmer & Datastrukturer i Java

Operativsystem - Processkedulering

CE_O3. Nios II. Inför lab nios2time

JAVASCRIPT-POWERED LOADRUNNER CHRISTIAN GERDES PERFORMANCE ENGINEER LIGHTS IN LINE AB

Linköpings Tekniska Högskola Institutionen för Datavetanskap (IDA), Software and Systems (SaS) (c) Klas Arvidsson

Du loggar in på VUHelp genom webbsidan med ett användarnamn och lösenord.

1.1 Runnable och Thread

Concurrency Saker händer samtidigt. Process En instans av ett program

Tentamen Datorteknik och realtidssystem, TSEA81 Datum Lokal

Lösningar till tentamen i EIT070 Datorteknik

Introduktion till hårdvara, mjukvara och operativsystem

Projekt Fake för Virtutech

Tentamen Lösningar EDA698 Realtidssystem

Transkript:

TDDIU81 Processer och trådar Andreas Dahlberg, Jonathan Doherty, Tony Magnusson, Patrik Ottosson, Rasmus Siljedahl

Sammanfattning Den här rapporten innehåller en kort genomgång av allmän process och trådhantering i operativsystem. Sen beskrivs hur detta är implementerat i operativsystemet Pintos. Processer När en process skapas av parentprocess så får den nya childprocessen ett unikt process identifier(pid), för att underlätta identifieringen av alla processer. När den nuvarande childprocessen sedan skapar nya childprocesser blir den själv en parentprocess. När de körts klart så avslutas dom och tas bort med systemanropet exit(). Då avallokers allting som den processen använt av operativsystemet [1]. Det är lite skillnad på vad som händer när en process skapas i Unix jämfört mot Windows. I Unix skapas en ny childprocess med systemanropet fork(). För att parentprocessen lättare ska kunna kommunicera med den nya processen så innehåller den nya processen en kopia av adressutrymmet hos föräldern. Efter fork() så fortsätter båda två att exekveras [1]. I Windows skapas en ny process med funktionen CreateProcess() vilket påminner om fork() på det sätt att en ny process skapas av en parentprocess. Skillnaden mellan är att CreateProcess() måste ladda in ett program till adressutrymmet av childprocessen istället för att ärva adressutrymmet av sin förälder [1]. För att starta en process i Pintos så måste först en ny tråd skapas, det görs genom att kalla på funktionen thread_create(). Thread_create() skapar i sin tur en kernel tråd och en struct thread som sedan läggs till i queuen. Struct thread innehåller en page för thread stacken som är 4kb stor, samt relevant data. Då en process består av denna struct thread betyder det att struct thread är processens process control block (PCB). Det betyder även att struct thread representerar thread control block (TCB) på samma gång. Därav har Pintos en 1:1 mappning mellan user trådar och kernal trådar och PCB och TCB är representerade i samma data struktur. Skapningen av tråden fortsätter i funktionen start_process där en userprocess laddas och körs. Precis som i boken så har processen ett id men i Pintos är det samma som trådens id. En av de viktigaste funktionerna för att hantera processer är process_execute som finns i pintos, denna funktion exekverar det som står på command line. Detta gör den genom att skapa en ny process. När den ska skapar en ny process gör den det genom att skapa en ny thread och schemalägger att funktionen start_process ska köras. Funktionen start_process är i pintos en thread funktion som laddar användarens process och kör den. När en process ska avslutas så ska process_exit() köras i pintos och returnera statuskoden. Jämfört med boken Operating system concept då UNIX kör exit() utför den samma som pintos att returnera status men också ser till att tömma allt minne. I pintos utförs detta av en egen funktion process_cleanup. När exit() körs i UNIX, kan parent processen använda sig av wait() för att vänta på att child processen ska avslutas. I pintos finns motsvarande funktion process_wait() som väntar på att child processen ska dö och returnera exit status [2]. Funktionen process_cleanup är viktig när en process är klar och ska stängas ner eller om en process har kraschat. Den har till uppgift att städa upp den nuvarande processens resurser genom att befria minnet som den tar upp. 1

Varje gång en process ska utföra en context switch kallas funktionen process_activate, den har som uppgift att ställa in cpu till att köra user code, den laddar in page directory till cpu s page directory bas register. Som de beskriver i boken Operating system concept är det interrupts som orsakar en context switch. När detta sker utförs en state save som sparar den nuvarande processens värden för att senare kunna aktivera processen igen. När den aktiveras igen så kör den state restore och detta är motsvarigheten till process_activate i pintos [3]. Det sista som sker i process_activate är att den ställer tillbaka interrupt så att det återigen kan ske. Schemaläggning I Pintos initieras ready-kön i början av filen thread/thread.c. De funktionerna som används för att schemalägga proccesser är: thread_unblock() lägger den inmatade tråden i ready-kön och sätter trådens läge till THREAD_READY thread_block() låter den inmatade tråden vänta tills thread_unblock() anropas. Trådens läge sätts till THREAD_BLOCKED. Sen schemaläggs en ny tråd för körning. schedule() använder de två ovanstående funktionerna och byter till den nya tråden. schedule_tail() anropas i slutet av schedule() och sätter den nuvarande trådens läge till THREAD_RUNNING. Sen nollställs thread_ticks och proccessen aktiveras. Om den föregående tråden hade läget THREAD_DYING så frigörs dess minne. thread_yield() lägger den tråden som körs på ready-kön och sätter dess läge till THREAD_READY. Sen anropas schedule() för att starta en ny tråd. thread_tick() anropas via en interupt timer. Funktionen räknar upp en variabel som håller reda på hur många ticks tråden körts. User, idle och kerneltrådarna har varsin räknare. Om tråden har kört sina maximala tics anroppas thread_yield(). Antalet tics varje tråd får köra i ett sträck bestäms av konstanten TIME_SLICE. running_thread() hämtar den tråden som körs för tillfället. För att ta reda på vilken tråd som körs så tar man reda på vilken sida stackpekaren är i. Längst upp på sidan finns då struct thread som ger den information man vill ha. next_thread_to_run() hämtar nästa tråd att köras från ready-kön. 2

Bilden nedan visar vilka funktioner som flyttar trådar mellan olika lägen. Schemaläggningsalgoritmen som används är Round-robin. Round-robin schemaläggning fungerar som FIFO-schemaläggning fast med preemption. Varje tråd körs i ordningen som de läggs på ready-kön. Men varje tråd får bara köra under en förutbestämd tid åt gången. När tiden gått ut körs nästa tråd istället. När alla trådar körts börjar man om från början igen. Om en tråd blir färdig innan sitt tidsfönster har gått ut så släpper den CPUn och nästa tråd schemaläggs direkt. Round-robin är en simpel schemaläggningsalgoritm som är enkel att implementera men saknar vissa funktioner såsom prioritering. Det är viktigt att välja rätt storlek på tidsfönstret då det ha en stor inverkan på algoritmens prestanda. Ett för litet värde ger mycket overhead då byten mellan trådar sker väldigt ofta. Med ett för stort värde blir algoritmen i princip en FCFS istället. Trådhantering De states(waiting, running etc) som finns i pintos för trådar är liknande andra operativ som finns. Läser man boken så ser man att nästan alla operativ har likadana states, och det skiljer sig väldigt lite mellan olika operativsystem. Däremot finns det stora skillnader mellan hantering av dessa trådar. Kerneltrådar och usertrådar hanteras inte på samma sätt i olika operativsystem. I Pintos används en one-to-one model. Structen kernal_thread anropas i funktionen thread_create vilket ger att för varje process som startas, så startasen kernal thread som senare blir kopplad till en user thread som senare kör processen. Denna metod är en av de enklaste metoderna att implementera och är använt av till exempel win32 och linux. Nackdel är att det finns ett begränsat antal kernel threads. Det kan innebära att man inte kan starta upp vissa andra user threads, eftersom alla kernels är upptagna. I Pintos nuvarande implementation skapas en ny kerneltråd varje gång man skapar en ny tråd. Genom att modifiera nuvarande struct thread som i nuläget representerar både PCB och TCB och skapa en ny datastruktur för Process Control Block(PCB), kan man skapa nya Thread Control Blocks och lägga till dem till sin process(pcb) genom pekare. Då en ny user thread skapas lägger man till referensen till Process Control Blocket placerar den på kön, sedan när det är denna threads tur att exekvera använder den länken till sin Process Control Block för att få tillgång till processens resurser. Process Control Block bör flyttas till filen där processer hanteras och innehålla följande data: 3

--- PCB --- Tillgängligt minne Trådar Öppna filer Schemaläggn. Info Prioritet ID Referenslista 1. Abraham Silberschatz, Greg Gagne, Peter 3.3.1 Process Creation 90-95. 2. Abraham Silberschatz, Greg Gagne, Peter 3.3.2 Process Termination 95. 3. Abraham Silberschatz, Greg Gagne, Peter 3.2.3 Context Switch 89-90. Thread Control Block kan vara kvar i nuvarande struct thread med följande data: TCB Stack "fil.txt" MINNE FÖR RESULTAT LÄS FIL CPU Context/ Sparade reg. 4