Piet van Oostrum 18 april 2002 Wat is een proces? Een

advertisement
Processen
CSN
– CS4 –
Processen en Threads
Wat is een proces?
I Een onafhankelijke activatie van een programma
I Kan afzonderlijk gestart/gestopt worden
I Heeft eigen resources (vb. geheugen)
Piet van Oostrum
I Heeft een eigen “leven” zolang het actief is
I Kan met het O.S. en andere processen communiceren
18 april 2002
I Bescherming tegen andere processen
Waarom?
I Administratieve eenheid - kan gemakkelijk verwijderd worden (resources)
I Concurrency
CSN-CS4
1
CSN-CS4
1
CPU allocatie
Scheduling
I Meestal zijn er meer processen dan processors
I Scheduling = het mechanisme waarbij het O.S. kiest wanneer een ander
proces de CPU krijgt, en welk proces dat moet zijn.
I Dus de processen moeten de CPU(s) delen
I Ieder proces krijgt een “virtuele” processor (eigen registers e.d.)
I Het O.S. wisselt de echte CPU(s) tussen de virtuele CPU’s (scheduling)
I Processen kunnen verschillende prioriteiten hebben
I Scheduler = het deel van het O.S. dat dit doet
I Preemptive scheduling = Het O.S. kan de CPU van een proces afpakken,
zonder dat dit proces daarvoor toestemming hoeft te geven
I Non-preemptive 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.
I Timeslice Bij preemptive scheduling krijgt een proces meestal een maximum
tijd (timeslice) toegewezen. Als het proces deze opmaakt, wordt geschedulet.
(via klokinterrupt)
CSN-CS4
2
CSN-CS4
Scheduling 2
3
Scheduling en interrupts
I Vb. Win16 en Mac OS9: Er wordt alleen gescheduled als er een
systeemaanroep plaatsvindt.
(Maar een DOS-box wordt preemptive gescheduled)
I Win32: 16-bits processen als Win16, 32-bits processen preemptive
WACHT
proces A
WACHT
proces B
?
I Unix: Preemptive in user mode, non-preemptive in de kernel
I Context switch = het omschakelen van de context van het ene proces naar het
andere
I Context = alles wat in het O.S. of de hardware specifiek is voor een proces
Registerinhouden
Stack
page tables
O.S. administratie
apparaat A
interrupt A
apparaat B
interrupt B
CSN-CS4
4
CSN-CS4
slides4.pdf — April 18, 2002 — 1
?
5
Scheduler
Scheduling Algoritmes
I Prioriteiten kunnen toegekend worden op basis van soort programma
(multimedia, achtergrond, . . . )
runnable
low priority
runnable
time slice op
medium priority
time slice op
start
I Prioriteiten kunnen dynamisch aangepast worden:
scheduler
I Meestal worden rekenintensieve (CPU-bound) processen op lagere prioriteit
gezet dan processen die veel I/O doen (I/O-bound).
scheduler
runnable
running
high priority
I Interactieve processen nog hoger (systeem “voelt lekker aan”).
scheduler
I Methode: Als een proces zijn timeslice opmaakt krijgt hij een lagere prioriteit
wakeup()
WAIT()
exit
error
I Als een proces wacht op I/O krijgt hij een hogere prioriteit
I Als het wachten op gebruiker (toetsenbord/muis) is, dan nog hoger
zombie
stopped
blocked
I Lagere prioriteits processen krijgen grotere timeslices
I Soms worden prioriteiten langzaam opgehoogd
CSN-CS4
6
CSN-CS4
7
Real-time scheduling
Real-time scheduling
I Real-time = werk dat gebonden is aan de echte tijd.
I Het moet mogelijk zijn aan te geven dat vóór een bepaalde tijd een
gedefinieerde taak afgehandeld moet zijn.
I bijv. het afspelen van geluid en video.
I of: het besturen van een vliegtuig of chemische installatie
I Real-time processen moeten absolute voorrang krijgen boven niet real-time
I Bijv. door extra hoge prioriteiten
I Een proces moet kunnen aangeven dat op een bepaalde tijd hij de CPU moet
hebben (of een ander aan te wijzen proces)
I Dit moet ook goed gaan als er meerdere real-time processen zijn.
I 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.
I De scheduler moet garanderen dat op de gevraagde tijd het proces de CPU
krijgt
I De meeste “gewone” operating systems zijn niet goed voor real-time
CSN-CS4
CSN-CS4
8
I bijv. Unix kan te lang in de kernel bezig zijn.
9
Proces Management
Wachten in Win32
I Proces starten
I Wacht tot het kind-proces klaar is:
WaitForSingleObject(process_handle)
I Proces stoppen
I WaitForSingleObject() is een algemene systeemaanroep die ook voor
andere wachtobjecten gebruikt wordt.
I Wacht tot een ander proces klaar is
I Proces onderbreken (tijdelijk)
I Vb. File handles (asynchrone I/O), process handles (wacht tot proces klaar is).
Win32 proces starten:
I WaitForMultipleObjects() kan gebruikt worden om op meer objecten te
wachten. Naar keuze op één of alle.
I CreateProcess (10 parameters, o.a. programma-file)
I Geeft o.a. een process handle terug in STARTUPINFO datastructuur
(9e parameter)
I via de process handle kan het ouder-proces op kind-proces wachten of het
“killen”
CSN-CS4
10
CSN-CS4
slides4.pdf — April 18, 2002 — 2
11
Unix process management
Copy-on-Write
I Unix proces creatie en programma-executie zijn gescheiden!!
I Het O.S. maakt niet echt een kopie van de data
I fork() aanroep: creëert een nieuw proces
I De data pagina’s worden gemarkeerd als read-only
I kindproces is een kloon van ouderproces
I 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
I Instructies kunnen geshared worden (memory management)
I Data (stack/heap): ieder proces eigen kopie
I voordeel: zowel de snelheid als de flexibiliteit.
I Nadeel: Bij een groot datadeel veel kopiewerk
I en: misschien wordt het direct weggegooid
CSN-CS4
12
CSN-CS4
13
Unix fork voorbeeld
Unix exec
pid = fork();
I exec (programmafile, arg0, arg1, ...)
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 ‘‘proces id’’ van het kind
*/
}
I In het lopende proces wordt het hele virtuele geheugen vervangen door het
nieuw opgestarte programma uit programmafile.
I Alle data dat het proces had wordt vergeten
I Open files, permissies e.d. kunnen wel overgeerfd worden.
I Het procesnummer (pid) blijft hetzelfde.
I arg0, arg1, ... zijn de “command line argumenten”.
I Er zijn verwchillende vormen van deze aanroep, waarbij de argumenten op
verschillende manieren kunnen worden meegegeven.
I Exec wordt vaak in de kind-tak van een fork gedaan
CSN-CS4
14
Unix fork en exec
CSN-CS4
15
fork – exec – wait
pid = fork();
ouder proces
kind proces
fork
if (pid == 0) {
/* kind, start ander programma */
exec
kind proces
fork
exec (....);
exec
}
else {
/* ouder proces,
wacht tot kind klaar is */
wait
exit
exit
waitpid (pid, ...)
kind wordt zombie
}
wait
CSN-CS4
16
CSN-CS4
slides4.pdf — April 18, 2002 — 3
17
Vormen van concurrency
Proces vs. thread
Proces
I Interrupts: device driver loopt tegelijk met
andere device drivers
andere OS instructies
processen
I Heeft resources (geheugen, open files, permissies, etc.)
I Wordt als één geheel gestart en gestopt (bijv. bij fout)
Thread
I Processen: proces loopt tegelijk met andere processen
I 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
I Is eenheid voor de scheduling
I Heeft eigen machine-registers (o.a. PC)
I Heeft eigen stack (binnen virtueel geheugen van proces)
I Heeft toegang tot alle resources van het proces
I Kan variabelen van andere threads benaderen
CSN-CS4
18
CSN-CS4
Thread Management
19
Threads in O.S.
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 geimplementeerd worden
Vb. netscape, java op win16 en Unix.
I Het O.S. kent twee datastructuren: thread en proces
I Een proces heeft één of meer threads (hoofdcode geldt ook als thread)
Voordelen
I Als een thread niet verder kan, kan het O.S. een andere thread schedulen.
I Threads kunnen concurreren met andere threads in hetzelfde of andere
processen
I bij een multiprocessor systeem kunnen meerdere threads tegelijk actief zijn
(vb. Windows NT)
Nadeel
I Thread management kost meer tijd (system call)
CSN-CS4
20
CSN-CS4
21
Threads in runtime systeem
Multithreading problemen
I Het O.S. weet niks over threads
I Globale systeemvariabelen moeten een per-thread kopie hebben
I Thread management gebeurt binnen het proces mbv bibliotheekfuncties
I vb. Unix system calls leveren foutcode af in de variabele errno
Voordelen
fid = fopen ("filenaam", ...);
I Kan in elk O.S. gebruikt worden
I Is efficiënt (weinig extra tijd nodig)
I Speciale code nodig om blokkerende system calls te behandelen bijv. met
asynchrone I/O
Nadelen
I O.S. scheduler kan er geen rekening mee houden
I Als één thread blokkeert, zijn alle threads geblokkeerd
/* mogelijk probleempunt */
if (fid < 0) {
/* error -- errno = foutcode */
}
nbytes = read (fid, buffer, bufsize);
/* mogelijk probleempunt */
if (nbytes < 0) {
/* error -- errno = foutcode */
}
I Geen multiprocessor ondersteuning
CSN-CS4
22
CSN-CS4
slides4.pdf — April 18, 2002 — 4
23
Reentrant library
Voorbeelden
I Bibliotheekfuncties moeten geen globale variabelen gebruiken (static alleen
read-only)
Netscape
I Per HTML document of plaatje een aparte thread
I Een functie heet reentrant als hij op ieder willekeurig punt onderbroken kan
worden en een nieuwe “kopie” opgestart zodat ze elkaar niet in de weg zitten
I Document wordt opgebouwd terwijl andere threads wachten op netwerk
verkeer
I Eventueel per-thread data.
I Gezamenlijke window → synchronisatie nodig
I Wanneer globale data essentieel zijn, dan moeten wijzigen erop beschermd zijn
(synchronised):
I Gezamenlijke cache voor eerder opgehaalde documenten en plaatjes →
synchronisatie nodig
mutex_lock (semafoor);
...
/* wijzigingen op globale datastructuur */
...
mutex_unlock (semafoor)
Tekenprogramma
I Aparte thread voor het tekenen op het scherm
I Aparte thread voor user interface
I lock en unlock operaties moeten samenwerken met de thread scheduler.
CSN-CS4
24
I Aparte threads voor ingewikkelde berekeningen
CSN-CS4
Multithreaded server
hoofd thread
I Hoofd-thread wacht
quests” van clienten
thread per request
start thread
request
“re-
I Per request wordt een thread gestart
wacht
op
volgende
request
I Hoofd-thread wacht intussen op
nieuwe requests
I request-threads kunnen wachten
op I/O en blokkeren niet de hele server
I Gemeenschappelijke datastructuur (bijv. database) mogelijk.
reply
CSN-CS4
op
26
slides4.pdf — April 18, 2002 — 5
25
Download