Multitegumtöö

Allikas: Vikipeedia

Informaatikas tähendab multitegumtöö mingi kindla aja jooksul mitme eri ülesande (protsessi) samaaegset täitmist.[1] Multitegumtöö käigus ei oota arvuti käimasoleva protsessi lõppu ega täida ülesandeid järjepanu, vaid on valmis pooleli oleva ülesande kõrval uut ülesannet alustama. Selle tulemusena täidavad arvuti keskprotsessor ja muutmälu protsesse osaliselt ja vaheldumisi.

Multitegumtöö ei tähenda sõna otseses mõttes mitme ülesande samaaegset täitmist. Teisisõnu ei pruugi protsessid toimuda paralleelselt. Multitegumtöö eeldab, et mitu (rohkem kui üks) protsessi on osaliselt täidetud ning sealjuures need protsessid ka mingi etteantud aja jooksul edenevad. Paljudel arvutitel on tänapäeval mitu tuuma ja/või mitu protsessorit, et oleks võimalik korraga rohkem protsesse jooksutada. Iga protsessori või tuuma kohta on ette nähtud üks ülesanne, ent tänu multitegumtööle on võimalik ülesannete arvu ühe tuuma või ühe protsessori kohta oluliselt suurendada.

Ühe keskprotsessoriga arvutil peaks olema võimalik jooksutada ainult üht protsessi korraga. Multitegumtöö lahendab selle probleemi ajaplaanimise näol ehk otsustab, millal üht või teist ülesannet täidetakse. Kui keskprotsessori ümberlülitamine ühe ülesande täitmiselt teisele ehk kontekstkommunikatsioon on piisavalt tihe, jääb mulje, nagu protsesse jooksutataks paralleelselt.[2] Ajaplaanimise strateegiad erinevad suuresti operatsioonisüsteemide lõikes, üldjoontes esinevad järgnevad tüübid:

  • Multiprogrammi süsteemides: käimasolev ülesanne peatatakse juhul kui on vaja oodata mõnd väljaspool asetleidvat sündmust (näiteks välisest allikast andmete lugemist) või kui ajakava koostamise programm sundluse korras parasjagu jooksva protsessi keskprotsessorist välja saalib. Multiprogrammi süsteemi eesmärk on kasutada keskprotsessorit maksimaalselt.
  • Ajajaotusega süsteem: käimasolev ülesanne vabastab keskprotsessori kas vabatahtlikult või sunniviisiliselt (näiteks mingi riistvara seadme toimingu korral). Ajajaotusega süsteem on loodud mitmete programmide sujuvaks kooskasutamiseks.
  • Reaalajasüsteem: osale ootel olevatele ülesannetele on tagatud keskprotsessori kasutusõigus teatavate väliste sündmuste korral. Reaalajasüsteemid on loodud mehaaniliste seadeldiste juhtimiseks (näiteks tööstuslikud robotid).

Mõiste multitasking on kujunenud rahvusvaheliseks. Paljudes keeltes (näiteks saksa, itaalia, taani, norra) kasutatakse seda mõistet muutmata, tõlkimata kujul. Ka eesti keeles kohtab sõna multitasking üsna sagedasti.

Multiprogrammeerimine[muuda | muuda lähteteksti]

Informaatika algusaegadel oli protsessoriaeg kallis ja kõiksugused arvuti lisaseadmed üldjuhul aeglased. Kui arvuti jooksutas programmi, millel oli tarvis juurdepääsu lisaseadmele, pidi keskprotsessor käskluste täitmise seniks lõpetama, kuni lisaseadmed andmeid töötlesid.[3]

Esimene multiprogrammi süsteemiga arvuti oli J. Lyons and Co. Leo III. Mitu programmi laeti korraga arvuti mällu ja üks neist lasti käima. Ühe programmi kontekst salvestati mällu, kui programm jäi ootama mõne välise seadme järele, ning mälus olevatest programmides järgmine lasti käima.

Multiprogrammi süsteemi populariseerumisele aitas oluliselt kaasa virtuaalmälu ja -masinate laiem levik.

Kooperatiivne multitegumtöö[muuda | muuda lähteteksti]

Varajased multitegumtöö süsteemid kasutasid rakendusi, mis jagasid vabalt ressursse teiste rakendustega. Tänapäeval ei leia see meetod enam väga palju kasutust, ent sellel põhimõttel toimisid nii Windows 95[4] kui Mac OS.

Kooperatiivne multitegumtöö toimib põhimõttel, et käimasolev protsess on valmis ja võimeline korrapäraselt teistele programmidele ressursse loovutama. Süsteemi kokkujooksmiseks piisab ühest ainsast halvasti kirjutatud programmist, mis tarbib ära kogu keskprotsessori võimsuse.

Eelisasendus[muuda | muuda lähteteksti]

Eelisasendus, ka tõrjuv multitegumtöötlus, on multitegumtöö vorm, kus operatsioonisüsteem lubab igale protsessile lõpliku aja selle täitmiseks.[5] Kui protsessi ei suudetud selle ettenähtud ajaga täita, pannakse see ootele, kuni tähtsam tegum on lõpetanud. Plaanur tegeleb protsesside järjestamisega ning arvutusaja jagamisega. Sellises süsteemis saab protsesse jaotada kaheks: esiteks protsessid, mis ootavad sisendit või väljundit, st nende täitmise kiirust piirab sisend või väljund, teiseks protsessid, mis kasutavad protsessorit, nende täitmiskiirus on piiratud arvutusvõimsusega. Näiteks lihtsamates süsteemides, kui protsess ootab mingit sisendit (nt kõvakettalt andmeid või klaviatuurilt klahvivajutusi), siis peab kogu süsteem selle taga ootama ning taustal ei ole võimalik protsessori jõudlust kasutada. Näiteks kasutades eelisasendust, on võimalik sisendi-väljundi protsess (protsess nr 1) katkestada ning anda protsessor mõne teise protsessi (protsess nr 2) käsutusse. Kui näiteks sisendist saadakse andmeid, siis katkestatakse protsess nr 2 ning jätkatakse protsessi nr 1 täitmisega.

Multitegumtöö reaalajasüsteemis[muuda | muuda lähteteksti]

Sarnaselt eelisasendusega antakse igale tegumile piiratud aeg, mille jooksul peab tegumi töö tehtud saama. Ajastust haldab protsessor. Kui aeg on täis, katestatakse protsess ning liigutakse tähtsuselt järgmise juurde. Süsteemi hierarhia peab tagama olulisematele protsessidele suurema osa arvutusvõimsusest.[6]

Lõimtöötlus[muuda | muuda lähteteksti]

Lõimtöötlus (inglise multithreading) on ühe programmi eri protsesside jaotamine eri tuumade või protsessorite vahel (näiteks üks protsess kogub andmeid, teine analüüsib neid andmeid, kolmas kirjutab saadud tulemused kõvakettale). Lõimed on efektiivsed, sest nendes jooksvad programmiosad kasutavad sama aadressiruumi.

Mõned süsteemid toetavad lõimtöötlust riistvara tasandil.[7]

Mälukaitse[muuda | muuda lähteteksti]

Multitegumtöös on vajalik ressursside pidev ümberjaotamine, mälukaitse hoolitseb turvalise ja efektiivse mäluruumi haldamise eest nii, et seal ei tekiks viga ega kirjutataks mõne teise programmi infot üle.[8]

Halvasti toimiv mälukaitse on potentsiaalne turvaoht, mälukaitse peab keelama selleks mitte ette nähtu programmidel delikaatsete andmete mälust lugemise, nt paroolide.

Üldiselt tegeleb mälukaitsega kernel.

Viited[muuda | muuda lähteteksti]

  1. Irv Englander (2009). The architecture of Computer Hardware and Systems Software. An Information Technology Approach.. Wiley. p. 265. 
  2. http://www.linfo.org/context_switch.html
  3. https://users.ece.cmu.edu/~koopman/stack_computers/sec9_2.html
  4. https://support.microsoft.com/en-us/kb/117567
  5. http://www.riscos.info/index.php/Preemptive_multitasking
  6. http://www.on-time.com/rtos-32-docs/rtkernel-32/programming-manual/tasking/what-is-multitasking.htm
  7. http://cache-www.intel.com/cd/00/00/01/77/17705_htt_user_guide.pdf
  8. https://users.ece.cmu.edu/~koopman/stack_computers/sec9_2.html