Computerarchitectuur en netwerken 4 Processen en Threads Lennart Herlaar 19 september 2016
Inhoud Scheduling scheduler prioriteiten real-time scheduling Processen ouder-kind processen Unix: fork en exec copy-on-write Threads definitie problemen voorbeelden Memory management en processen memory-mapped files DLL pagina classificatie Lennart Herlaar Computerarchitectuur en netwerken 4 1
Processen Wat is een proces? Een onafhankelijke activatie van een programma Kan afzonderlijk gestart/gestopt worden Heeft eigen resources (vb. geheugen, netwerkverbinding) Heeft een eigen leven zolang het actief is Kan met het O.S. en andere processen communiceren Bescherming tegen andere processen Waarom? Administratieve eenheid - kan gemakkelijk verwijderd worden (resources) Concurrency (gelijktijdige uitvoering van taken) Lennart Herlaar Computerarchitectuur en netwerken 4 2
CPU allocatie Meestal zijn er meer processen dan processoren (CPU s) Dus de processen moeten de CPU(s) delen Ieder proces krijgt een virtuele processor (eigen registers e.d.) Het O.S. wisselt de echte CPU(s) tussen de virtuele CPU s (dit heet scheduling) Processen kunnen verschillende prioriteiten hebben Lennart Herlaar Computerarchitectuur en netwerken 4 3
Scheduling Scheduling = het mechanisme waarbij het O.S. kiest wanneer een ander proces de CPU krijgt, en welk proces dat moet zijn. Scheduler = het deel van het O.S. dat dit doet Preëmptive scheduling = Het O.S. kan de CPU van een proces afpakken, zonder dat dit proces daarvoor toestemming hoeft te geven Non-preëmptive of Cooperative scheduling = Het O.S. kan de CPU alleen aan een ander proces geven op de tijdstippen dat het draaiende proces aangeeft. Een proces kan dan het hele systeem ophangen. Timeslice Bij preëmptive scheduling krijgt een proces meestal een maximum tijd (timeslice) toegewezen. Als het proces deze opmaakt, wordt gescheduled. (via klokinterrupt) Lennart Herlaar Computerarchitectuur en netwerken 4 4
Scheduling 2 Vb. Win16 en Mac OS9: Er wordt alleen gescheduled als er een systeemaanroep plaatsvindt. Win32: 16-bits processen als Win16, 32-bits processen preëmptive (traditioneel) Unix: Preëmptive in user mode, non-preëmptive in de kernel Context switch = het omschakelen van de context van het ene proces naar het andere Context = alles wat in het O.S. of de CPU specifiek is voor een proces Registerinhouden Stack page tables O.S. administratie etc. Lennart Herlaar Computerarchitectuur en netwerken 4 5
Scheduling en interrupts WACHT proces A proces B apparaat A WACHT?? interrupt A apparaat B interrupt B Lennart Herlaar Computerarchitectuur en netwerken 4 6
Scheduler start scheduler runnable running scheduler wakeup() sleep() exit error blocked zombie stopped Lennart Herlaar Computerarchitectuur en netwerken 4 7
Scheduling Algoritmes Prioriteiten kunnen toegekend worden op basis van soort programma (multimedia, achtergrond,... ) Prioriteiten kunnen dynamisch aangepast worden: Meestal worden rekenintensieve (CPU-bound) processen op lagere prioriteit gezet dan processen die veel I/O doen (I/O-bound). Interactieve processen nog hoger (systeem voelt lekker aan ). Methode: Als een proces zijn timeslice opmaakt krijgt hij een lagere prioriteit Als een proces wacht op I/O krijgt hij een hogere prioriteit Als het wachten op gebruiker (toetsenbord/muis) is, dan nog hoger Lennart Herlaar Computerarchitectuur en netwerken 4 8
Timeslices en prioriteiten Processen met lagere prioriteit krijgen grotere timeslices Soms worden prioriteiten langzaam opgehoogd prioriteit hoog middel laag bij timeslice einde bij I/O wacht timeslice Lennart Herlaar Computerarchitectuur en netwerken 4 9
Real-time scheduling Real-time = werk dat gebonden is aan de echte tijd. bijv. het afspelen van geluid en video. of: het besturen van een vliegtuig of chemische installatie Real-time processen moeten absolute voorrang krijgen boven niet real-time Bijv. door extra hoge prioriteiten Een proces moet kunnen aangeven dat hij op een bepaalde tijd de CPU moet hebben (en/of hoe lang) De scheduler moet garanderen dat op de gevraagde tijd het proces de CPU krijgt De scheduler moet snel op events reageren (o.a timers) Lennart Herlaar Computerarchitectuur en netwerken 4 10
Real-time scheduling Het moet mogelijk zijn aan te geven dat vóór een bepaalde tijd een gedefinieerde taak afgehandeld moet zijn. Dit moet ook goed gaan als er meerdere real-time processen zijn. Scheduling op deadline of slack time. deadline = de tijd dat een proces klaar moet zijn. Scheduler kiest het proces dat de vroegste deadline heeft. slack time = de tijd waarmee je een proces nog uit kan stellen voor het te laat is. Scheduler kiest het proces met de kleinste slack time. De meeste gewone operating systems zijn niet goed voor real-time bijv. Unix kan te lang in de kernel bezig zijn. Lennart Herlaar Computerarchitectuur en netwerken 4 11
Real-time Scheduling slack A deadline A A B slack B deadline B Lennart Herlaar Computerarchitectuur en netwerken 4 12
Real-time Scheduling slack A deadline A A B slack B deadline B bij deadline scheduling: A eerst bij slacktime scheduling: B eerst Lennart Herlaar Computerarchitectuur en netwerken 4 12
Proces Management Functies: Proces starten Proces stoppen Wacht tot een ander proces klaar is Proces onderbreken (tijdelijk) Win32 proces starten: CreateProcess (10 parameters, o.a. programma-file) Geeft o.a. een process handle terug in datastructuur via de process handle kan het ouder-proces op kind-proces wachten of het killen Lennart Herlaar Computerarchitectuur en netwerken 4 13
Wachten in Win32 Kindproces = proces dat door ouderproces gestart wordt Wacht tot het kind-proces klaar is: WaitForSingleObject(process_handle) WaitForSingleObject() is een algemene systeemaanroep die ook voor andere wachtobjecten gebruikt wordt. Vb. File handles (asynchrone I/O), process handles (wacht tot proces klaar is). WaitForMultipleObjects() kan gebruikt worden om op meer objecten te wachten. Naar keuze op één of op alle. Lennart Herlaar Computerarchitectuur en netwerken 4 14
Kind- en ouderproces ouder kind CreateProcess Wait... klaar Lennart Herlaar Computerarchitectuur en netwerken 4 15
Unix process management fork Unix proces-creatie en programma-executie zijn gescheiden!! fork() en exec() fork() aanroep: creëert een nieuw proces kindproces is een kloon van ouderproces Instructies kunnen geshared worden (memory management) Data (stack/heap): ieder proces eigen kopie Probleem: als het kind een kloon is van de ouder hoe onderscheid je ze dan? In de ouder is het resultaat het procesnummer van het kind In het kind is het resultaat van de fork() 0 Lennart Herlaar Computerarchitectuur en netwerken 4 16
Unix fork voorbeeld pid = fork(); if (pid == 0) { /* hier zijn we in het kind proces... do whatever you want to do */ } else if (pid == -1) { /* error (niet genoeg geheugen of teveel processen of zo) probeer het later nog eens */ } else { /* hier zijn we in het ouder proces pid is nu de process id van het kind */ } Lennart Herlaar Computerarchitectuur en netwerken 4 17
Unix exec exec (programmafile, arg0, arg1,...) In het nieuwe lopende proces wordt het hele virtuele geheugen vervangen door het nieuw opgestarte programma uit programmafile. Alle data die het proces had worden vergeten Open files, permissies e.d. kunnen wel overgeërfd worden. Het procesnummer (pid) blijft hetzelfde. arg0, arg1,... zijn de command line argumenten. Exec() wordt vaak in de kind-tak van een fork() gedaan maar dat hoeft niet. Lennart Herlaar Computerarchitectuur en netwerken 4 18
Unix fork en exec pid = fork(); if (pid == 0) { /* kind, start ander programma */ exec (...); } else { /* ouder proces, wacht tot kind klaar is */ } waitpid (pid,...) Lennart Herlaar Computerarchitectuur en netwerken 4 19
fork exec wait ouder proces fork kind proces kind proces fork exec exec wait exit exit kind wordt zombie wait Lennart Herlaar Computerarchitectuur en netwerken 4 20
Inhoud Scheduling scheduler prioriteiten real-time scheduling Processen ouder-kind processen Unix: fork en exec copy-on-write = Threads definitie problemen voorbeelden Memory management en processen memory-mapped files DLL pagina classificatie Lennart Herlaar Computerarchitectuur en netwerken 4 21
Copy-on-Write Exec: in het lopende proces wordt het hele virtuele geheugen vervangen. Nadeel: Bij een groot datadeel geeft een fork veel kopieerwerk en: misschien wordt het direct weggegooid Lennart Herlaar Computerarchitectuur en netwerken 4 22
Copy-on-Write Exec: in het lopende proces wordt het hele virtuele geheugen vervangen. Nadeel: Bij een groot datadeel geeft een fork veel kopieerwerk en: misschien wordt het direct weggegooid Oplossing: Het O.S. maakt bij de fork niet echt een kopie van de data De data pagina s worden gemarkeerd als read-only Wanneer één van de processen in een pagina iets verandert, wordt er een kopie voor dit proces gemaakt, en beide pagina s worden op read/write gezet Dit wordt copy-on-write genoemd (collegedictaat: 1.9.3) voordeel: zowel de snelheid als de flexibiliteit. Let op: copy-on-write kan ook voor andere doelen gebruikt worden. Lennart Herlaar Computerarchitectuur en netwerken 4 22
Copy-on-write voorbeeld ouder fysiek kind read only (tijdelijk) Lennart Herlaar Computerarchitectuur en netwerken 4 23
Copy-on-write voorbeeld ouder fysiek kind verander een byte read only (tijdelijk) Lennart Herlaar Computerarchitectuur en netwerken 4 24
Copy-on-write voorbeeld ouder fysiek kind read only (tijdelijk) read write Lennart Herlaar Computerarchitectuur en netwerken 4 25
Inhoud Scheduling scheduler prioriteiten real-time scheduling Processen ouder-kind processen Unix: fork en exec copy-on-write Threads = definitie problemen voorbeelden Memory management en processen memory-mapped files DLL pagina classificatie Lennart Herlaar Computerarchitectuur en netwerken 4 26
Vormen van concurrency Interrupts: device driver loopt tegelijk met andere device drivers andere OS instructies processen Processen: proces loopt tegelijk met andere processen Binnen een proces: Threads Threads zijn mini-procesjes binnen een gewoon proces Ook wel lightweight process genoemd Kunnen door OS of door het proces zelf geregeld worden Multithreaded proces = proces dat uit verschillende threads bestaat Lennart Herlaar Computerarchitectuur en netwerken 4 27
Threads proces thread geheugen files instructie stroom Lennart Herlaar Computerarchitectuur en netwerken 4 28
Proces vs. thread Proces Heeft resources (geheugen, open files, permissies, etc.) Wordt als één geheel gestart en gestopt (bijv. bij fout) Thread Is eenheid voor de scheduling Heeft eigen machine-registers, o.a. program counter (PC) Heeft eigen stack (binnen virtueel geheugen van proces) Heeft toegang tot alle resources van het proces Kan variabelen van andere threads gebruiken Lennart Herlaar Computerarchitectuur en netwerken 4 29
Thread Management Wie beheert de threads? 1 Het O.S Het O.S. kent het begrip thread Starten, stoppen, synchroniseren van threads via system calls De scheduler schedulet threads, niet processen 2 Het proces zelf ( run-time systeem ) Het O.S. weet niets over threads Het proces zelf heeft een thread scheduler (o.a. m.b.v. timers) Kan op elk systeem geïmplementeerd worden Vb. oude browsers, java op win16 en oudere Unix systemen. Lennart Herlaar Computerarchitectuur en netwerken 4 30
Threads in O.S. Het O.S. kent twee soorten objecten: thread en proces Een proces heeft één of meer threads ( main geldt ook als een thread) Voordelen Nadeel Als een thread niet verder kan, kan het O.S. een andere thread schedulen. Threads kunnen concurreren met andere threads in hetzelfde of andere processen bij een multiprocessor systeem kunnen meerdere threads tegelijk actief zijn Thread management kost meer tijd (system call) Lennart Herlaar Computerarchitectuur en netwerken 4 31
Threads in runtime systeem Het O.S. weet niks over threads Thread management gebeurt binnen het proces met behulp van bibliotheekfuncties Voordelen Nadelen Kan in elk O.S. gebruikt worden Is efficiënt (weinig extra tijd nodig) Speciale code nodig om blokkerende system calls te behandelen bijv. met asynchrone I/O (niet-blokkerende I/O) Als één thread blokkeert, zijn alle threads van het proces nl. geblokkeerd O.S. scheduler kan er geen rekening mee houden Geen multiprocessor voordeel binnen een proces Lennart Herlaar Computerarchitectuur en netwerken 4 32
Multithreading problemen Globale systeemvariabelen moeten een per-thread kopie hebben vb. Unix system calls leveren foutcode af in de variabele errno fid = fopen ("filenaam",...); /* mogelijk probleempunt */ if (fid < 0) { /* error -- errno = foutcode */ } nbytes = read (fid, buffer, bufsize); /* mogelijk probleempunt */ if (nbytes < 0) { /* error -- errno = foutcode */ } Lennart Herlaar Computerarchitectuur en netwerken 4 33
Reentrant library Bibliotheekfuncties moeten geen globale variabelen gebruiken (static alleen read-only) Een functie heet reëntrant als hij op ieder willekeurig punt onderbroken kan worden en een nieuwe kopie opgestart zonder elkaar in de weg te zitten Eventueel per-thread data. Wanneer globale data essentieel zijn, dan moeten wijzigingen erop beschermd zijn (synchronised): mutex_lock (semafoor);... /* wijzigingen op globale datastructuur */... mutex_unlock (semafoor) lock en unlock operaties moeten samenwerken met de thread scheduler. Lennart Herlaar Computerarchitectuur en netwerken 4 34
Voorbeelden gebruik van threads WWW browser Per HTML document of plaatje een aparte thread Document wordt opgebouwd terwijl andere threads wachten op netwerk verkeer Gezamenlijke window synchronisatie nodig Gezamenlijke cache voor eerder opgehaalde documenten en plaatjes synchronisatie nodig Windows Elke folder op de desktop heeft eigen thread Meerdere kopieeracties e.d. tegelijk mogelijk Lennart Herlaar Computerarchitectuur en netwerken 4 35
Voorbeelden gebruik van threads Tekenprogramma Servers Aparte thread voor het tekenen op het scherm Aparte thread voor user interface Aparte threads voor ingewikkelde berekeningen In multiprocessor systeem kunnen meerdere gelijk actief zijn WWW server / database server / file server meerdere request tegelijk actief Bij Unix (NFS) vaak proces per client (i.v.m. permissies per gebruiker) In een proces hebben alle threads dezelfde toegangsrechten Lennart Herlaar Computerarchitectuur en netwerken 4 36
Multithreaded server hoofd thread thread per request request start thread wacht op volgende request start thread reply reply Lennart Herlaar Computerarchitectuur en netwerken 4 37
Inhoud Scheduling scheduler prioriteiten real-time scheduling Processen ouder-kind processen Unix: fork en exec copy-on-write Threads definitie problemen voorbeelden Memory management en processen = memory-mapped files DLL pagina classificatie Lennart Herlaar Computerarchitectuur en netwerken 4 38
Memory-mapped Files 1 Hoe kan een proces de data in een file gebruiken/veranderen? met de file API (open, read, write) goed voor sequentieel gebruik (=van begin tot eind in de normale volgorde) lastig voor random access (willekeurige volgorde) je zou liever iets hebben waarmee je gewoon met een pointer in de file kunt wijzen het OS zou dan automatisch de juiste bytes in het geheugen moeten halen Lennart Herlaar Computerarchitectuur en netwerken 4 39
Memory-mapped Files 2 Een bibliotheek (library) is een kant en klaar stuk software dat in verschillende programma s gebruikt kan worden. als een file een bibliotheek bevat dan wil je gewoon de instructies erin kunnen uitvoeren mogelijkheid 1: lees de hele file in het geheugen als je maar een deel van de bibliotheek gebruikt is dit inefficiënt mogelijkheid 2: lees alleen het deel dat je gebruikt dit is moeilijk te voorspellen bovendien moeten de adressen wel kloppen eigenlijk zou het OS automatisch de juiste bytes in het geheugen moeten halen Oplossing: memory-mapped files (dictaat 4.9) Lennart Herlaar Computerarchitectuur en netwerken 4 40
Memory-mapped Files 3 in plaats van file API opdrachten kunnen we het memory management systeem gebruiken (paginering) zeg tegen het O.S. dat een bepaald deel van het virtueel geheugen bij een file hoort het OS noteert dat deze virtuele adressen niet in het fysieke geheugen staan maar op de harde schijf ze staan echter niet in de swapruimte maar in de genoemde file je kunt nu de data in de file gebruiken of veranderen: alleen de stukken die echt nodig zijn komen in het fysieke geheugen er worden geen read en write system calls gegeven als we dezelfde file mappen in twee processen dan hebben we shared memory Lennart Herlaar Computerarchitectuur en netwerken 4 41
Shared Library (DLL) we kunnen ook instructies uit de gedeelde file uitvoeren: dan hebben we een shared library of DLL (dynamic link library) een shared library is een library (bibliotheek) die door verschillende processen gebruikt kan worden maar slechts één keer in het geheugen staat. de DLL bevat veel gebruikte methodes, bijvoorbeeld wiskundige berekeningen grafische bewerkingen netwerkfuncties die niet in de kernel zitten voor de rest is de DLL gewoon een memory-mapped file dus alleen de delen die echt gebruikt worden komen in het fysieke geheugen terecht Lennart Herlaar Computerarchitectuur en netwerken 4 42
Memory mapped file mem mapped file schijf virtueel geheugen fysiek geheugen Lennart Herlaar Computerarchitectuur en netwerken 4 43
Memory mapping proces A intern geheugen proces B programma code A programma code B swap gebied data 0000 1111 0000 1111 0000 1111 data swap gebied swap gebied file stack 0000 1111 stack file swap paging 00 11 pagina s van file paging Lennart Herlaar Computerarchitectuur en netwerken 4 44
Geheugen pagina s vrij nog niet gebruikt vast pagina s van het O.S. die niet gepaged mogen worden (bijv. page tables, de pager zelf) nieuw pagina s die nog niet gepaged zijn (bijv nieuwe stack/heap) file van/naar een file gepaged: instructies, mapped files en cache pagina s swap niet bij een specifieke file horend, gepaged van en naar een speciale swap-ruimte: data, heap en stack pagina s e.d. Lennart Herlaar Computerarchitectuur en netwerken 4 45
Samenvatting Scheduling: De scheduler bepaalt welk proces of welke thread de CPU mag gebruiken Processen kunnen verschillende prioriteiten hebben of real-time behandeling nodig hebben. Processen en Threads: Threads zijn mini-procesjes binnen een proces. Ze zijn handig om binnen een proces verschillende dingen gelijktijdig te kunnen doen maar dit geeft ook wel problemen die je moet oplossen Memory management: De memory management hardware kan voor handige dingen gebruikt worden: copy-on-write om onnodig kopiëren te voorkomen memory-mapped files om files handiger te bewerken, shared memory te maken en DLL s te implementeren Lennart Herlaar Computerarchitectuur en netwerken 4 46