Multitasking & Multithreading

┌vod

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. 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∙: 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:

Pre-emptive multitasking

- 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:

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.)

Deadlock
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.

Starvation
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.

index

William Wollis 1999


 people have visited this site
1