VyÜlo v t²denφku: COMPUTERWORLD
╚φslo:13/95
RoΦnφk:1995
Rubrika/kategorie: Co (ne)najdete ve slovnφku

zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φlßnek

Ji°φ Peterka

Thread

Nenφ nad to, kdy₧ se v∞ci mohou d∞lat souΦasn∞. To samoz°ejm∞ platφ i pro poΦφtaΦe. V∞tÜina t∞ch dneÜnφch vÜak nenφ p°φliÜ uzp∙sobena myÜlence paralelismu, a soub∞₧nΘmu provßd∞nφ vφce r∙zn²ch Φinnostφ nevychßzφ zrovna vst°φc. P°φΦinou je ji₧ samotnß koncepce drtivΘ v∞tÜiny dneÜnφch poΦφtaΦ∙, kterß vychßzφ z myÜlenek pana von Neumanna, formulovan²ch v dob∞ kolem druhΘ sv∞tovΘ vßlky. PoΦφtaΦe, postavenΘ na zßklad∞ t∞chto myÜlenek (tj. poΦφtaΦe s tzv. von Neumannovou architekturou), jsou v zßsad∞ sekvenΦnφ, a poΦφtajφ jen s jedin²m ählavnφm" v²poΦtem, probφhajφcφm postupn∞, neboli sekvenΦn∞, na jedinΘm procesoru.

Pokud n∞kdo na takovΘmto poΦφtaΦi chce dosßhnout alespo≥ zdßnφ paralelismu, neboli soub∞₧nΘho provßd∞nφ vφce r∙zn²ch v²poΦt∙ - nap°φklad odpovφdajφcφch r∙zn²m ·lohßm tΘho₧ u₧ivatele Φi ·lohßm r∙zn²ch u₧ivatel∙ - musφ si sßm zajistit vÜe pot°ebnΘ. Tedy implementovat takovΘ mechanismy, kterΘ zprost°edkujφ alespo≥ rychlΘ st°φdßnφ vφce r∙zn²ch v²poΦt∙ na jedinΘm dostupnΘm procesoru. Typicky jsou tyto prost°edky realizovßny jako souΦßst operaΦnφho systΘmu, kter² tak vytvß°φ pot°ebnΘ vφce·lohovΘ prost°edφ.

Jak ale v∙bec °eÜit st°φdßnφ jednotliv²ch v²poΦt∙ na jedinΘm procesoru? Na co je t°eba dßvat nejv∞tÜφ pozor?

NejspφÜe na to, aby vzßjemnΘ st°φdßnφ konkrΘtnφch v²poΦt∙ bylo pln∞ transparentnφ. Neboli aby ka₧d² jednotliv² v²poΦet v∙bec nemusel v∞d∞t o tom, ₧e se o procesor d∞lφ i s jin²mi v²poΦty formou st°φdßnφ. Ka₧d² jednotliv² proces by naopak m∞l prßvo si myslet, ₧e je na sv∞t∞ sßm, a ₧e mß procesor v²hradn∞ k vlastnφ dispozici. Jak mu ale zachovat tuto iluzi, kdy₧ ve skuteΦnosti je ka₧d² v²poΦet Φas od Φasu odstaven od svΘho procesoru, a ke slovu se dostßvß jin² proces?

PodstatnΘ je v tomto ohledu zajistit, aby ₧ßdn² v²poΦet v∙bec nepoznal, ₧e jeho provßd∞nφ bylo v urΦitΘm ΦasovΘm okam₧iku p°eruÜeno a obnoveno a₧ n∞kdy pozd∞ji, zatφmco v mezidobφ pokraΦovalo provßd∞nφ jin²ch v²poΦt∙. ProblΘm je ale v tom, ₧e jednotlivΘ v²poΦty majφ kolem sebe svΘ ä₧ivotnφ prost°edφ", kterΘ si urΦit²m zp∙sobem äzabydlujφ", a kterΘ se jim p°i takovΘmto p°eruÜenφ nesmφ zm∞nit. Neboli: kdy₧ se urΦit² v²poΦet po svΘm doΦasnΘm p°eruÜenφ dostane op∞t ke slovu, musφ svΘ ä₧ivotnφ prost°edφ" najφt p°esn∞ v takovΘm stavu, v jakΘm se nachßzelo v okam₧iku p°eruÜenφ.

Co vÜechno ale spadß do takovΘhoto ä₧ivotnφho prost°edφ", v odbornΘ terminologii oznaΦovanΘho jako kontext? Zcela jist∞ sem pat°φ aktußlnφ hodnota tzv. ΦφtaΦe instrukcφ (registru PC, program counter-u) - proto₧e tato hodnota vyjad°uje mφsto, ve kterΘm doÜlo k p°eruÜenφ prßv∞ provßd∞nΘho v²poΦtu. Bez zachovßnφ tΘto informace by v∙bec nebylo mo₧nΘ se k provßd∞nφ p°eruÜenΘho v²poΦtu n∞kdy pozd∞ji vrßtit.

Do kontextu ka₧dΘho konkrΘtnφho v²poΦtu vÜak zcela jist∞ musφme za°adit i mnoho dalÜφch v∞cφ: obsahy vÜech registr∙ procesoru, stav p°φznak∙ (flag-∙) a stav zßsobnφku, kde dan² v²poΦet m∙₧e mφt ulo₧eny svΘ nejr∙zn∞jÜφ meziv²sledky. Ty vÜak m∙₧e mφt ulo₧eny nap°φklad i v jin²ch oblastech pam∞ti, ne₧ je zßsobnφk - nap°φklad v r∙zn²ch datov²ch segmentech. TakΘ ty proto musφme zahrnout do kontextu danΘho v²poΦtu. Obecn∞ tam pak musφme zahrnout takΘ cel² adresov² prostor, kter² je pro dan² v²poΦet viditeln², proto₧e na kterΘmkoli mφst∞ v tomto adresovΘm prostoru m∙₧e b²t n∞co relevantnφho, co nesmφ b²t p°epsßno Φi jinak zm∞n∞no. Dßle bychom do kontextu ka₧dΘho v²poΦtu m∞li zahnout nap°φklad i stav vÜech vstupn∞-v²stupnφch obvod∙ a za°φzenφ, proto₧e ka₧d² v²poΦet m∙₧e mφt v urΦitΘm okam₧iku jist²m zp∙sobem rozpracovßny n∞kterΘ vstupn∞/v²stupnφ operace, a °φdit se podle jejich pr∙b∞hu.

Je toho opravdu hodn∞, co pat°φ do kontextu ka₧dΘho v²poΦtu, a co tedy musφ z∙stat zachovßno bez sebemenÜφ zm∞ny i p°i p°φpadnΘm p°eruÜenφ danΘho v²poΦtu. V okam₧iku, kdy dochßzφ k doΦasnΘmu p°eruÜenφ jednoho v²poΦtu a jeho vyst°φdßnφ v²poΦtem jin²m, je pak vlastn∞ t°eba vhodn∞ uschovat cel² kontext prßv∞ p°eruÜovanΘho v²poΦtu, a nahradit jej kontextem jinΘho v²poΦtu. Dochßzφ tedy k n∞Φemu, co m∙₧eme po prßvu nazvat p°epnutφm kontextu (context switch).

Jak ale m∙₧eme tuÜit z p°edchozφch odstavc∙, p°epnutφ kontextu m∙₧e b²t znaΦn∞ netrivißlnφ zßle₧itostφ, nßroΦnou p°edevÜφm dφky äobjemu" celΘho kontextu. ZvlßÜt∞ jde-li o takovΘ v²poΦty, kterΘ v rßmci svΘho kontextu hospoda°φ skuteΦn∞ tak, jako kdyby m∞li cel² poΦφtaΦ jen a jen pro sebe - takov²mto v²poΦt∙m je pak skuteΦn∞ nutnΘ uschovßvat v₧dy cel² jejich kontext. Existujφ ovÜem i takovΘ v²poΦty, kterΘ se v tomto ohledu chovajφ pon∞kud rozumn∞ji: poΦφtajφ s tφm, ₧e budou Φasto st°φdßny jin²mi v²poΦty, a proto se sv²m kontextem hospoda°φ ·Φeln∞ji. Jsou zcela zßm∞rn∞ psßny tak, aby p°i jejich äodstavenφ" bylo nutnΘ uschovat a nßsledn∞ obnovit jen nezbytnΘ minimum informacφ, obvykle p°edstavujφcφ jen obsah registr∙ procesoru, stav p°φznak∙ a stav zßsobnφku, a nikoli nap°φklad r∙znΘ oblasti pam∞ti. TakovΘto v²poΦty, kter²m se v odbornΘ terminologii °φkß vlßkna (threads), mohou naopak zcela zßm∞rn∞ poΦφtat s tφm, ₧e jejich adresov² prostor nebude p°i jejich st°φdßnφ uschovßvßn a pozd∞ji zase obnovovßn, ale ₧e bude trvale p°φstupn² vÜem vzßjemn∞ se st°φdajφcφm vlßkn∙m, kterΘ jej tak budou vlastn∞ spoleΦn∞ sdφlet.

Protip≤lem vlßken (threads) jsou v tomto ohledu takovΘ v²poΦty, kterΘ bychom s jistou dßvkou nadsßzky mohli oznaΦit jako äte₧kotonß₧nφ" - jsou to takovΘ v²poΦty, p°i jejich₧ p°eruÜenφ se uschovßvß cel² jejich rozsßhl² kontext, a nikoli jen mal² objem ·zce lokalizovan²ch dat, jako je tomu v p°φpad∞ vlßken. TakovΘto ät∞₧kotonß₧nφ" v²poΦty se obecn∞ oznaΦujφ jako procesy (zatφmco vlßkna se n∞kdy oznaΦujφ takΘ jako älightweight processes", doslova: äodlehΦenΘ procesy").


zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φlßnek
Tento Φlßnek m∙₧e b²t voln∞ Üφ°en, pokud se tak d∞je pro studijnφ ·Φely, na nev²d∞leΦnΘm zßklad∞ a se zachovßnφm tohoto dov∞tku. Podrobnosti hledejte zde, resp. na adrese http://archiv.czech.net/copyleft.htm