Multitasking (nebo takΘ "multi-tasking", "multi-processing",
"multiprogramming", "concurrency") je technika pou╛φvanß operaΦnφmi systΘmy pro
vyu╛φvßnφ jednoho procesoru vφce nezßvisl²mi procesy. To p°inß╣φ jak n∞kterΘ
v²hody, tak samoz°ejm∞ i jistΘ nev²hody.
Nejd°φve tedy klady:
umo╛≥uje kdykoli p°ejφt k jinΘmu programu, ani╛ bychom byli nuceni
p°eru╣ovat rozd∞lanou prßci
╣patn∞ navr╛en² systΘm m∙╛e p°i b∞hu v∞t╣φho mno╛stvφ program∙ negativn∞
ovlivnit funkΦnost toho programu, se kter²m u╛ivatel prßv∞ pracuje. To se
projevφ nap°. extrΘmnφm zpomalenφm, zv²╣enφm doby odezvy na u╛ivatelsk²
p°φkazy a podobn∞. ProblΘm p°edev╣φm u kooperativnφho multitaskingu
realizace multitaskingu se neobejde bez sprßvy proces∙ a ta mß n∞jakou
vlastnφ re╛ii - spot°ebovßvß procesorov² Φas. V krajnφm p°φpad∞ m∙╛e dojφt a╛
k zahlcenφ systΘmu, kdy ve╣ker² nebo alespo≥ naprostß v∞t╣ina procesorovΘho
Φasu je spot°ebovßvßna na re╛ii. Hrozφ p°edev╣φm u preemptivnφho
multitaskingu.
realizace MultitaskingovΘho operaΦnφho systΘmu je slo╛it∞j╣φ a tudφ╛ i
v∞t╣ina firem si za n∞j nechß vφce zaplatit (zlatou vyjφmkou je Linux). Takov²
systΘm mß takΘ v∞t╣φ nßroky na hardware poΦφtaΦe (v∞t╣φ RAM, rychlej╣φ
procesor, vφce mφsta na disku, vφce.....). To je takΘ uvßd∞no jako jeden z
d∙vod∙ proΦ v dob∞, kdy u╛ existovalo mno╛stvφ kvalitnφch a spolehliv²ch
multitaskingov²ch operaΦnφch systΘmu byl stßle nejpou╛φvan∞j╣φ jedno·lohov²
MS-DOS. Zde je ov╣em nutno poznamenat, ╛e nap°φklad multitaskingov² OS EPOC
po╛adoval p°i minimßlnφ konfiguraci jen 512kB operaΦnφ pam∞ti a procesor NEC
V30 s taktem 3,84 MHz!!
pokud nenφ OS spojen s dostateΦn²m systΘmem zabezpeΦenφ, zvy╣uje se riziko
ztrßty dat. A to v p°φpad∞, ╛e chyba jednoho procesu zp∙sobφ zhroucenφ celΘho
OS (ukßzkov²m p°φkladem mohou b²t Windows 3.11, ale bohu╛el i verze pozd∞j╣φ,
i kdy╛ u╛ v men╣φ mφ°e).
Prvnφ multitaskingovΘ operaΦnφ systΘmy byly
vytvo°eny zaΦßtkem 60. let. Byly to OS na velk²ch sßlov²ch poΦφtaΦφch. Na
poΦφtaΦφch typu PC se zaΦali pou╛φvat pom∞rn∞ nedßvno.
Realizace multitaskingu
V∞t╣ina dne╣nφch poΦφtaΦ∙ je osazena pouze
jednφm procesorem. Procesy samoz°ejm∞ nemohou na jednom procesoru b²t
zpracovßvßny spoleΦn∞. OS tedy musφ zajistit, aby procesor zpracovßvßnφ
jednotliv²ch proces∙ st°φdal v krßtk²ch Φasov²ch intervalech, co╛ se u╛ivateli
jevφ jako souΦasnΘ zpracovßvßnφ ·loh. Existujφ t°φ hlavnφ zp∙soby jak toho
dosßhnout: a) task switching b) cooperative multitasking c)
pre-emptive multitasking
Task switching
- p°epφnßnφ program∙ OS s p°epφnßnφm program∙ je
p°φm²m p°edch∙dcem kooperativnφho multitaskingu. Vznikl na interaktivnφch
systΘmech na zßklad∞ pom∞rn∞ jednoduchΘ ·vahy: nejz°eteln∞j╣φ v²hodou
multitaskingu pro u╛ivatele je mo╛nost p°ejφt z jednΘ aplikace k druhΘ, bez
nutnosti ukonΦenφ prßce. P°epφnßnφ program∙ je dosa╛eno tzv. vzßjemn²m volßnφm,
co╛ nenφ vlastnost p°φmo OS, ale jednotliv²ch program∙. Ty mohou umo╛nit
spu╣t∞nφ jinΘho programu a prßci s nφm, po ukonΦenφ tohoto programu se obnovφ
stav p∙vodnφho programu. VzßjemnΘ volßnφ bylo roz╣φ°eno zejmΘna u program∙ pro
Apple Macintosh a dnes se s nφm setkßme i u program∙ pod MS-DOS (tam se ale
obvykle nevolß p°φmo program, ale p°φkazov² interpret). Existujφ dv∞ skupiny OS
s p°epφnßnφm program∙:
systΘmy s omezen²m p°epφnßnφm: umo╛≥uje p°epφnat mezi hlavnφm programem a
n∞kolika specißlnφmi programy - accessories (pom∙cky). Ty jsou vytvo°eny
zvlß╣tnφm zp∙sobem prßv∞ pro p°epφnßnφ a deklarujφ se p°i startu OS.
systΘmy s neomezen²m p°epφnßnφm umo╛≥ujφ spu╣t∞nφ n∞kolika b∞╛n²ch
program∙ a p°epφnßnφ mezi nimi.
Pokud p°echßzφme od jednoho programu k
druhΘmu, chceme vlastn∞ tento program p°eru╣it takov²m zp∙sobem, abychom mohli
jeho b∞h po n∞jakΘm Φase obnovit. Musφme tedy d∙le╛itΘ informace ulo╛it n∞kam na
vn∞j╣φ pam∞╗. To by znamenalo obrovskΘ mno╛stvφ informacφ - obsah celΘ operaΦnφ
pam∞ti, obsah registr∙ procesoru, nastavenφ r∙zn²ch za°φzenφ, stav pomocn²ch
procesor∙ (blitter, kanßly) atd. TakovΘ °e╣enφ by bylo znaΦn∞ neefektivnφ a v
n∞kter²ch p°φpadech i nemo╛nΘ. Obsah operaΦnφ pam∞ti se neuklßdß, ale pouze se
zajistφ, aby Φßst, kterou dan² proces vyu╛φvß, nemohla b²t pou╛ita jin²m
procesem. Mßlokter² program vyu╛φvß v╣echna za°φzenφ, bylo by proto naprosto
zbyteΦnΘ, starat se o v╣echny. Program m∙╛e b²t takΘ po╛ßdßn, aby se dostal p°ed
p°eru╣enφm do p°edem definovanΘho stavu: ukonΦil prßci s perifernφmi za°φzenφmi
i s obrazovkou (kanßly, blitter), ukonΦil v²poΦty v pohyblivΘ °adovΘ Φßrce
(koprocesor) atp. Dßle m∙╛eme program p°im∞t, aby po obnovenφ prßce nespolΘhal
na obsah registr∙ procesoru. Zbude pak jen naprostΘ minimu ·daj∙, kterΘ musφme
ulo╛it - pouze nastavenφ zßsobnφku a obsah obrazovky. Tyto ·daje jsou ulo╛eny
pro v╣echny momentßln∞ rozpracovanΘ ·lohy v tabulce, kterß se naz²vß kontext.
Programy, kterΘ majφ v pam∞ti sv∙j kontext se naz²vajφ procesy (task). Pokud
je t°eba p°epnout z aktivnφho procesu na jin² proces, nap°φklad na zßklad∞
n∞jakΘho signßlu u╛ivatele, OS vyΦkß a╛ proces zavolß slu╛bu, kterou oznamuje,
╛e je v "p°eru╣itelnΘm" stavu (to je ka╛d² proces povinen pravideln∞ d∞lat, a OS
majφ tuto slu╛bu obvykle kombinovanou s jin²mi slu╛bami OS (Φasto nap°.
p°eru╣enφ od klßvesnice), aby ji program nemohl obejφt). Pak OS ulo╛φ do tabulky
na mφsto odpovφdajφcφ dosud aktivnφmu procesu adresu vr╣ku jeho zßsobnφku
(p°eΦte ji z pat°iΦnΘho registru procesoru). Nakonec systΘm zjistφ z tabulky
adresu zßsobnφku novΘho procesu a zavede ji do pat°iΦnΘho registru procesoru.
UkonΦφ slu╛bu a od tΘ chvφle b∞╛φ nov² proces - do╣lo k p°epnutφ kontextu
(context switch) - byl odebrßn procesor starΘmu procesu a p°id∞len procesu
novΘmu. Podrobn∞ji: T∞sn∞ p°ed p°epnutφm kontextu obsahuje zßsobnφk procesu
Φφslo 1 (aktivnφ) na vrcholku nßvratovou adresu pro nßvrat ze systΘmovΘ slu╛by
zp∞t do k≤du procesu. D°φve, ne╛ dojde k nßvratu, v╣ak p°epnutφ kontextu zm∞nφ
zßsobnφk. Ve chvφli nßvratu je tedy aktivnφ zßsobnφk procesu Φφslo2, na jeho╛
vrcholu je samoz°ejm∞ takΘ nßvratovß adresa, ale tentokrßt do procesu Φφslo 2 -
a tam se systΘmovß slu╛ba vrßtφ. P°i vytvß°enφ procesu je vytvo°en tomuto
procesu zßsobnφk, na kter² je ulo╛ena adresa jeho prvnφ instrukce a adresa
tohoto zßsobnφku je ulo╛ena do kontextu.
Cooperative multitasking
- kooperativnφ multitasking Jeho princip
vychßzφ p°φmo z mechanizmu p°epφnßnφ program∙. Tam mohlo dojφt k p°epnutφ
kontextu pouze na ╛ßdost u╛ivatele. To vedlo k tomu ╛e, znaΦnΘ mno╛stvφ
procesorovΘho Φasu bylo nevyu╛ito. To si tv∙rci kooperativnφho multitaskingu
uv∞domovali a byli vedeni snahou tento nevyu╛it² Φas p°id∞lit jinΘmu procesu. V
p°φpad∞, ╛e aktivnφ proces nap°φklad Φekß na stisk klßvesy, m∙╛e b²t spu╣t∞n
proces jin². PotΘ co tento proces zavolß p°eru╣ovacφ slu╛bu vrßtφ se procesor ke
zpracovßvßnφ p∙vodnφho procesu. Pokud ten stßle nedostal signßl od klßvesnice
bude se situace opakovat. Proces Φekajφcφ, v tomto p°φpad∞ na stisk klßvesnice,
se naz²vß proces na pop°edφ (foreground), procesy na pozadφ (background) jsou
pak ty, kterΘ vyu╛φvajφ procesorov² Φas, kter² by jinak byl promarn∞n. Takov²to
multitasking byl pou╛it nap°. u Windows 3.x. Kooperativnφ multitasking mß
v╣echny v²hody, kterΘ poskytuje systΘm s neomezen²m p°epφnßnφm program∙. Navφc
lΘpe vyu╛φvß procesor. VyznaΦuje se ale n∞kter²mi zßva╛n²mi nev²hodami:
zpomalenφ procesu na pop°edφ se odvφjφ od toho jak je proces b∞╛φcφ na
pozadφ naprogramovßn.
nelze pou╛φt pro realizaci paralelnφch ·loh
m∙╛e dojφt k situaci ╛e p°eru╣ovacφ slu╛ba procesu na pozadφ nebude nikdy
zavolßna (nekoneΦnß smyΦka). Dojde pak k zablokovßnφ nejen tohoto procesu, ale
celΘho systΘmu. S tφm je samoz°ejm∞ spojena velmi reßlnß mo╛nost ztrßty dat
ostatnφch spu╣t∞n²ch aplikacφ. Kooperativnφ multitasking tedy nenφ a nem∙╛e
b²t z tohoto hlediska bezpeΦn².
programovßnφ aplikacφ pro kooperativnφ multitasking je omezeno mno╛stvφm
konvencφ. Ve╣kerß Φasov∞ nßroΦn∞j╣φ Φinnost programu musφ b²t rozd∞lena na
krat╣φ ·seky odd∞lenΘ volßnφm "p°eru╣ovacφ" slu╛by. To vedlo k tomu, ╛e °ada
firem oznaΦila svΘ programy "foreground only" Φφm╛ je tento systΘm degradovßn
pouze na systΘm s neomezen²m p°epφnßnφm
- preemptivnφ multitasking Hlavnφ nev²hodou
p°edchozφho °e╣enφ je tedy to, ╛e ka╛d² proces musφ s OS spolupracovat. Toto
omezenφ odstra≥uje prßv∞ preemptivnφ multitasking. Ten umo╛≥uje p°eru╣enφ
kterΘhokoli procesu na kterΘmkoli mφst∞, ani╛ by proces sßm do toho musel
n∞jak²m zp∙sobem zasahovat. U kooperativnφho multitaskingu proces zaji╣╗uje
svoji nezßvislost p°i svΘm op∞tovnΘm spu╣t∞nφ na registrech procesoru,
koprocesoru, stavu blitteru, I/O procesor∙,... Nenφ ov╣em mo╛nΘ toto v╣echno
ulo╛it do kontextu, je nutnΘ to n∞jak²m rozumn²m zp∙sobem obejφt. Do kontextu se
ulo╛φ pouze stav procesoru a p°φpadn∞ koprocesoru a s ostatnφmi prvky systΘmu je
povoleno pracovat jen jedinΘmu procesu. Jejich stav v p°φpad∞ p°eru╣enφ procesu
se tedy nemusφ uklßdat, proto╛e jin² proces s nimi nem∙╛e pracovat. S tφm se
ov╣em objevuje nebezpeΦφ zablokovßnφ proces∙. Proto modernφ OS zakazujφ
pou╛φvßnφ systΘmov²ch prost°edk∙ v╣em proces∙m krom∞ specißln∞ vyhrazen²ch
systΘmov²ch proces∙. Takov² proces se naz²vß server a udr╛uje si informace o
sv²ch klientech, kter²m poskytuje slu╛by umo╛≥ujφcφ jim nep°φmo vyu╛φvat danΘ
za°φzenφ. Zpracovßvßnφ proces∙ se velmi rychle st°φdß (°ßdov∞ desφtky a╛
stovky milisekund) a tak vznikß dojem paralelnφho zpracovßnφ. Velikost
intervalu, po jeho╛ uplynutφ dochßzφ ke st°φdßnφ proces∙ se naz²vß ΦasovΘ
kvantum (time-slice). Po vypr╣enφ ΦasovΘho kvanta tedy dojde k zastavenφ jednoho
procesu a spu╣t∞nφ dal╣φho. St°φdßnφ ·loh je obvykle realizovßno pomocφ vn∞j╣φho
p°eru╣enφ od ΦφtaΦe, kter² Φφtß hodinovΘ pulsy a po uplynutφ p°edem definovanΘ
doby, tzv. zßkladnφho ΦasovΘho intervalu - tiku velikosti jednotek a╛ desφtek
milisekund, generuje ╛ßdost o p°eru╣enφ. OS p°i ka╛dΘm tiku provede n∞kterΘ
nutnΘ servisnφ ·koly (nap°. aktualizace systΘmovΘho Φasu) a pokud zjistφ, ╛e
procesu vypr╣elo ΦasovΘ kvantum, p°eru╣φ jeho Φinnost. To se naz²vß preempcφ.
Preemptivnφ multitasking umo╛≥uje nastavenφ priorit jednotliv²ch proces∙.
P°id∞lovßnφ procesoru P°id∞lovßnφ procesoru proces∙m provßdφ dva
moduly OS: plßnovaΦ (scheduler) a dispeΦer (dispatcher). Scheduler z fronty
Φekajφcφch proces∙ ve swapovacφ oblasti vybφrß procesy, kterΘ budou nahrßny do
pam∞ti a tak p°ipraveny ke spu╣t∞nφ dispeΦerem. DispeΦer pak vybφrß podle
urΦit²ch kriteriφ z fronty proces∙, kterΘ jsou p°ipraveny ke spu╣t∞nφ ten, kter²
bude opravdu spu╣t∞n.
Uzavφrßnφ zdroj∙ Za jist²ch okolnostφ pot°ebujφ procesy k
systΘmov²m prost°edk∙m v²luΦn² p°φstup. Pokud proces zφskal v²luΦn² p°φstup
°φkßme, ╛e zdroj uzav°el. To je nutnΘ, aby nedo╣lo k ΦasovΘ zßvislosti proces∙.
K ΦasovΘ zßvislosti procesu s jin²mi procesy m∙╛e dojφt jen tehdy, kdy╛ proces
vykonßvß urΦitou Φßst svΘho k≤du, kterou naz²vßme kritickou oblastφ. Musφme tedy
zajistit, aby v urΦit² Φasov² okam╛ik byl v kritickΘ oblasti pouze jeden z
proces∙. TΘto podmφnce se °φkß podmφnka vzßjemnΘho vylouΦenφ (mutual exclusion).
VzßjemnΘ vylouΦenφ se realizuje tak, ╛e prvnφ proces, kter² chce se zdrojem
manipulovat, zdroj uzav°e. Po uzav°enφ zdroje tento proces vstupuje do kritickΘ
oblasti a ostatnφ procesy musφ poΦkat, dokud tento proces kritickou oblast
neopustφ. Jakmile proces kritickou oblast opustφ, do kritickΘ oblasti m∙╛e
vstoupit dal╣φ proces. ╪φkßme takΘ, ╛e proces zdroj otev°el (uvolnil).
Uzavφrßnφ zdroj∙ tedy nenφ nic jinΘho ne╛ realizace podmφnky vzßjemnΘho
vylouΦenφ proces∙.
Realizace vzßjemnΘho vylouΦenφ VzßjemnΘ vylouΦenφ lze realizovat
nejr∙zn∞j╣φmi zp∙soby. Ty se nejΦast∞ji d∞lφ do dvou kategoriφ a to z hlediska
stavu, ve kterΘm se nachßzejφ procesy Φekajφcφ na vstup do kritickΘ oblasti. Ty
jsou bu∩ ve stavu aktivnφho Φekßnφ nebo ve stavu zablokovßnφ. Zatφmco
procesy ve stavu aktivnφho Φekßnφ neustßle testujφ spln∞nφ urΦitΘ podmφnky, aby
mohly vstoupit do kritickΘ oblasti, a tφm spot°ebovßvajφ procesorov² Φas (jsou
za°azovßny dispatcherem ke zpracovßnφ), tak p°i °e╣enφ, p°i kterΘm jsou procesy
ve stavu zablokovßnφ je jednodu╣e proces, kter² se ne·sp∞╣n∞ pokusil vstoupit do
kritickΘ oblasti, zablokovßn a tudφ╛ nenφ dispatcherem nadßle za°azovßn ke
zpracovßnφ. PotΘ co jin² proces opustφ danou kritickou oblast je tento proces
probuzen, dispatcher jej Φasem za°adφ ke zpracovßnφ a proces m∙╛e do kritickΘ
oblasti vstoupit. Nedochßzφ tedy ke zbyteΦnΘmu spot°ebovßvßnφ procesorovΘho
Φasu. Oba dva zp∙soby se mohou °e╣it pomocφ zßmku nebo semaforu.
VzßjemnΘ vylouΦenφ realizovanΘ zßmkem Zßmek je procesy sdφlenß
prom∞nnß. Procesy ji mohou nastavovat na r∙znΘ hodnoty. Pokud ji n∞kter² z
proces∙ nastavφ na nenulovou hodnotu, oznamuje tφm ostatnφm proces∙m to, ╛e
vstoupil do kritickΘ oblasti. Pokud je hodnota zßmku nulovß, znamenß to, ╛e se
╛ßdn² z proces∙ v kritickΘ oblasti nenachßzφ. Kdyby ov╣em tento systΘm pracoval
nßsledovn∞ mohlo by se stßt, ╛e do kritickΘ oblasti vstoupφ i vφce proces∙: 1.
Na poΦßtku bude zßmek = 0. 2. Proces testuje hodnotu zßmku. Je-li jeho
hodnota nulovß pokraΦuje bodem 3. Nenφ-li tomu tak provßdφ opakovanΘ testovßnφ
hodnoty zßmku dokud se hodnota zßmku nezm∞nφ na 0 (do kritickΘ oblasti
nevstoupφ). 3. Nastavφ zßmek na 1 a vstoupφ do kritickΘ oblasti. . 4.
T∞sn∞ p°ed v²stupem z kritickΘ oblasti nastavφ zßmek = 0
Pokud by ov╣em byl proces A mezi body 2. a 3. p°eru╣en preempcφ a jin² proces
B se pokusil vstoupit do tΘto kritickΘ oblasti a nevystoupil by z nφ do dal╣φho
volßnφ procesu A vstoupily by do kritickΘ oblasti oba dva procesy. Tomu je nutnΘ
n∞jak²m zp∙sobem zabrßnit. Jsou pou╛φvanΘ tyto t°i mo╛nosti:
b∞hem Φtenφ a nastavenφ zßmku se zakß╛e p°eru╣enφ od hodin - nenφ to
p°φli╣ vhodnΘ °e╣enφ a ani se nepou╛φvß
pou╛ije se specißlnφ instrukce, kterß jak otestuje hodnotu zßmku tak
p°φpadn∞ nastavφ i jeho novou hodnotu - ne v╣echny procesory takovou instrukci
majφ
softwarovΘ °e╣enφ - pou╛φvß b∞╛n²ch strojov²ch instrukcφ, ale je
nßroΦn∞j╣φ na Φas P°i pou╛itφ zßmku jsou procesy Φekajφcφ na vstup do kritickΘ
oblasti ve stavu aktivnφho Φekßnφ. Proto pou╛φvßnφ techniky zßmku nenφ
nejvhodn∞j╣φ.
N∞kdy se technika zßmku pozm∞≥uje tak, ╛e proces po
zji╣t∞nφ, ╛e zßmek je uzav°en, po╛ßdß operaΦnφ systΘm o zablokovßnφ na urΦitou
dobu a op∞tovn² test zßmku provede a╛ po svΘm probuzenφ. To sice omezuje
pl²tvßnφ procesorov²m Φasem, ale na druhΘ stran∞ m∙╛e podstatn∞ prodlou╛it dobu
Φekßnφ procesu (nebo╗ uvoln∞n² zdroj si m∙╛e mezitφm uzav°φt jin² proces) .
VzßjemnΘ vylouΦenφ realizovanΘ semaforem Toto °e╣enφ je
vhodn∞j╣φ. Semafor je prom∞nnß nab²vajφcφ hodnoty 0,1,2,......, n. Semafory musφ
b²t implementovßny operaΦnφm systΘmem jako slu╛ba systΘmu. Pomocφ semaforu
lze implementovat vzßjemnΘ vylouΦenφ nßsledujφcφm zp∙sobem: 1. Na poΦßtku je
semafor (s) nastaven nap°. na hodnotu 1 (s=1) 2. P°ed vstupem do kritickΘ
oblasti je testovßna hodnota s. Pokud je v∞t╣φ jak 0 (s != 0) snφ╛φ se o 1 (s =
s - 1). Pokud je s = 0 je proces pozastaven. Po svΘm probuzenφ a op∞tovnΘm
spu╣t∞nφ dokonΦφ operaci, tj. snφ╛φ hodnotu s o 1 (s = s - 1) 3. P°ed
opu╣t∞nφm kritickΘ oblasti proces zv²╣φ s o 1 (s = s + 1). Jeden z pozastaven²ch
proces∙ je probuzen
Uvßznutφ proces∙ - deadlock V multitaskingov²ch operaΦnφch
systΘmech m∙╛e p°i uzavφrßnφ zdroj∙ snadno dojφt k tak zvanΘmu uvßznutφ proces∙.
Dojde k tomu jestli╛e dva Φi vφce proces∙ na sebe navzßjem Φekajφ. (viz. obr.)
Obr.deadlock
Proces A si uzav°el Zdroj I. a Proces B si
uzav°el Zdroj II. PotΘ se sna╛φ Proces A uzav°φt Zdroj II., ale ten je uzav°en
Procesem B. OS proces A tedy zablokuje. Proces B se sna╛φ uzav°φt Zdroj I. a je
OS takΘ zablokovßn. ╪e╣enφm m∙╛e b²t tzv. ·plnΘ vyhrazenφ prost°edk∙ tzn.,
╛e p°i spu╣t∞nφ procesu budou zablokovßny ve╣kerΘ zdroje, kterΘ by mohl tento
proces b∞hem svΘ Φinnosti pot°ebovat. Je z°ejmΘ ╛e, takovΘ °e╣enφ je znaΦn∞
neefektivnφ a vede k snφ╛enφ pr∙chodnosti systΘmu. Dal╣φ mo╛nostφ je, ╛e v
p°φpad∞, kdy je zdroj, kter² proces pot°ebuje, uzav°en u╛ jin²m procesem, tak
proces uvolnφ v╣echny ostatnφ zdroje, kterΘ si pro sebe uzav°el a po╛ßdß OS o
pozastavenφ. Po urΦitΘ dob∞ je proces op∞t probuzen a pokusφ se uzav°φt si pro
sebe zdroje, kterΘ pot°ebuje pro p°edepsanou Φinnost. P°i takovΘto strategii
nem∙╛e nikdy dojφt k uvßznutφ proces∙, ale procesy se mou dostat do stavu, kter²
se naz²vß starvation - stßrnutφ proces∙ (viz. nφ╛e). Jin²m °e╣enφm je, ╛e na
mno╛in∞ zdroj∙ {Rn}je definovßno uspo°ßdßnφ R1tΘto strategii nem∙╛e dojφt k uvßznutφ proces∙, procesy
se v╣ak mohou dostat do stavu, kter² se naz²vß stßrnutφ proces∙.
Stßrnutφ proces∙ - starvation Procesy sice neΦekajφ na otev°enφ
urΦitΘho zdroje, jsou v omezenΘ mφ°e stßle aktivnφ, ale nepoda°φ se jim uzav°φt
si v╣echny pot°ebnΘ zdroje. P°edpoklßdejme, ╛e jsou dva procesy a dva zdroje.
Oba procesy pro ·sp∞╣nΘ dokonΦenφ svΘ Φinnosti pot°ebuje v╛dy dva zdroje. Oba
dva si tedy uzav°ou v╛dy jeden zdroj. Po urΦitΘ dob∞ se procesy pokusφ uzav°φt
druh² zdroj. Ten je ale ji╛ vyhrazen jinΘmu procesu a procesy tedy uvolnφ ji╛
uzav°enΘ zdroje a po╛ßdajφ OS o p°eru╣enφ. Po jejich op∞tovnΘm spu╣t∞nφ se celß
situace m∙╛e opakovat.
Obr. Starvation
Vyhnout se tomu dß nap°. tak, ╛e doba, po
kterou budou jednotlivΘ procesy pozastaveny , bude r∙zn∞ dlouhß.
Multithreading
Je to schopnost programu sßm sebe v∞tvit. Program se d∞lφ
na tzv. vlßkna (threads of executions), kterß se zdajφ b∞╛et souΦasn∞. To mß
v²hodu v tom, ╛e p°i provßd∞nφ n∞jakΘ nßroΦn∞j╣φ a dlouhotrvajφcφ prßce (nap°.
uklßdßnφ dlouhΘho souboru) se aplikace "nezasekne". Programßtor zpravidla
vytvo°φ jedno vlßkno frontovΘ, kterΘ vyrobφ v╣echna okna, jedno nebo vφce vlßken
bezfrontov²ch, kterß poΦφtajφ. Je znßmΘ tzv. pravidlo 1/10 sekundy "Cokoli trvß
dΘle ne╛ 1/10 sekundy, m∞lo by se provßd∞t v novΘm bezfrontovΘm vlßknu."
Zatφmco u multitaskingu jsou jednotlivΘ procesy zcela odd∞lenΘ (vlastnφ
pam∞╗,...) p°i multithreadingu v╣echna vlßkna (jednΘ aplikace) sdφlejφ stejnΘ
systΘmovΘ zdroje - pam∞╗, soubory, globßlnφ prom∞nnΘ, ka╛dΘ vlßkno mß sv∙j
zßsobnφk, tj. automatickΘ prom∞nnΘ jsou pro ka╛dΘ vlßkno zvlß╣╗. Ve Windows
3.x ka╛dß b∞╛φcφ aplikace je jedna ·loha. OS p°id∞luje CPU t∞mto ·lohßm
pou╛φvßnφm kooperativnφho multitaskingu a spolΘhß na aplikace, ╛e umo╛nφ p°edßnφ
procesorovΘho Φasu jinΘ ·loze. Ve Win32 se u╛ nemluvφ o ·lohßch, ale o procesech
a vlßknech. Proces se m∙╛e sklßdat z jednoho Φi vφce vlßken. Proces a vlßkna
jsou p°eru╣ovßny preempcφ. Ve Windows 3.x byla ka╛dß ·loha pouze jednφm vlßknem.
Program byl provßd∞n od zaΦßtku do konce. Ve Win32 proces vznikß jako jedno
vlßkno, kterΘ m∙╛e vytvo°it vlßkna dal╣φ b∞╛φcφ na pozadφ (formßtovßnφ diskety,
provßd∞nφ slo╛itΘho v²poΦtu, vyhledßvßnφ,....). T∞mto vlßkn∙m je procesorov² Φas
p°edßvßn zcela nezßvisle, jako samostatn²m program∙m.
Thread Scheduling Rozhodnutφ kterΘmu vlßknu p°id∞lit procesorov²
Φas a na jak dlouho je pro OS slo╛it² proces. V prvΘ °ad∞ bere Scheduler ohled
na priority jednotliv²ch vlßken. Ve Windows 95 a NT je mo╛no p°id∞lit ka╛dΘmu
vlßknu hodnotu priority od 0 do 31, Φφm vy╣╣φ Φφslo, tφm vy╣╣φ priorita. Hodnota
priority 31 je reservovßna pro extrΘmn∞ krizovß vlßkna (nap°. zφskßvßnφ dat v
reßlnΘm Φase) zatφmco hodnota 0 je pou╛φvßna OS pro tΘm∞° zbyteΦnß vlßkna, kterß
se spou╣t∞jφ pouze v p°φpad∞, ╛e je procesorov² Φas nevyu╛φvßn. Nejpou╛φvan∞j╣φ
jsou hodnoty od 7 do 11. Po n∞kolika milisekundßch scheduler vyhodnotφ
situaci a p°edß procesorov² Φas vlßknu s nejvy╣╣φ prioritou. Pokud jsou dv∞ Φi
vφce vlßken se stejnou prioritou je spu╣t∞no to od jeho╛ poslednφho provßd∞nφ
ub∞hlo nejvφce Φasu. Vlßkna s vy╣╣φ prioritou jsou tedy provßd∞ny p°ed vlßkny s
ni╛╣φ prioritou a vlßkna s nφzkou prioritou nikdy nep°eru╣φ vlßkna s vysokou
prioritou. Neznamenß to ale, ╛e vlßkno s ni╛╣φ prioritou nebude nikdy spu╣t∞no.
Jsou-li dv∞ vlßkna A a B s prioritou 10 a 9 bude provßd∞no vlßkno A. Pokud mß
vlßkno A prßzdnou frontu zprßv tzn., ╛e dokud nep°ijde dal╣φ zprßva nemß nic na
prßci, je toto vlßkno pozastaveno a m∙╛e b²t spu╣t∞no vlßkno B. PozastavenΘmu
vlßknu nenφ p°id∞lovßn procesorov² Φas dokud neobdr╛φ n∞jakou zprßvu, kterß ho
probudφ a p°eru╣φ preempcφ vlßkno B, je╛ bylo doposud provßd∞no. Mnoho vlßken
tak strßvφ znaΦnΘ mno╛stvφ Φasu ve stavu Φekßnφ na n∞jakou vstupnφ udßlost.