A számítógép-programok kategóriái
A számítógépes program egy számítási algoritmust valósít meg, és tartalmazza a változók deklarációit, az értékek változókhoz rendelését, kifejezéseket és folyamatvezérlő utasításokat, amelyek általában egy magas szintű programozási nyelven, például Java vagy C++ nyelven vannak kifejezve. A végrehajtásuk előtt a programokat általában lefordítják, majd átalakítják a központi feldolgozó egység (CPU, processzor) által szekvenciálisan vagy egyidejűleg futtatható gépi utasításokká/kóddá. A szekvenciális programok a program sorrendjében (tehát az utasítások programozó által megadott sorrendjében) futnak.
Az egyidejű programok ezzel szemben olyan szekvenciális programok halmazai, amelyek futás közben egy vagy több CPU-n osztoznak az időben. Ezzel az időosztással több program felváltva használhat egyetlen számítási erőforrást. Olyan CPU esetében, amely egyszerre egy programot képes futtatni, több szekvenciális program egy processzoron való futtatásához az operációs rendszernek valamilyen ütemezési stratégiát, például ciklikus időszeletelést alkalmazva kell lefoglalnia az erőforrást az egyes programok számára egy meghatározott időtartamra.
1. ábra: A programok osztályozása
Az általános alkalmazás kifejezés, gyakran félreérthetően, szekvenciális és egyidejű programot is jelenthet, az utóbbiakat pedig olykor párhuzamos programoknak is nevezik. A párhuzamos program olyan szekvenciális programok halmaza, amelyek egymást átfedő időtartamokban futnak külön CPU-kon. Többprocesszoros rendszerekben, például többmagos processzorlapkával szerelt gépeken a külön magokon végrehajtott, egymással összefüggő szekvenciális programok együttesen párhuzamos programot alkotnak. Ezzel szemben azok az egymással összefüggő szekvenciális programok, amelyek egyetlen CPU idején osztoznak, egyidejű programot képeznek. Ebben a leckében megkülönböztetjük továbbá azokat a párhuzamos programokat, amelyek több különálló, hálózatba kötött számítógépen (nem pedig egyetlen gép különböző magjain) futó szekvenciális programokból állnak. Ezeket elosztott programoknak nevezzük. Az előző ábra a programoknak ezt az osztályozását mutatja be.
A párhuzamos/elosztott programozás másik gyakran használt szakkifejezése a többfeladatos feldolgozás, amely arra vonatkozik, hogy egy program számításai átfedésben vannak egy másikéival. Ez a fogalom minden modern operációs rendszerben központi szerepet tölt be, és olyan ütemezési mechanizmust ír le, amellyel egy operációs rendszer több programot képes egyszerre kiszolgálni. A többfeladatos feldolgozás annyira hasznosnak bizonyult, hogy már minden modern programozási nyelv támogatja a többszálú szerkezetek által.
A „szál” kifejezés a Pthreads (POSIX-szálak)1 kapcsán terjedt el, amely az egyidejűségi szerkezetek széles körben, elsősorban UNIX rendszereken alkalmazott specifikációja.2 Egy végrehajtási szál az a legkisebb utasítássorozat, amelyet egy operációs rendszer kezelni tud az ütemezőjével. A szál fogalma szorosan összefügg a folyamatéval: egy szál egy folyamat címterében fut, a folyamat viszont a saját címterében. Egy folyamat tehát egy vagy több szálat tartalmazhat, a szálak pedig nem önálló munkaegységek. A különböző folyamatok elvileg nem osztoznak a memórián, az egy folyamaton belüli szálak viszont mind osztoznak a szülőjük címterén.
A tevékenység egy másik kifejezés, amely egy kis munkaegységre hivatkozik, és ebben a leckében a "folyamat" kifejezésre használjuk. Emellett közösen jelöljük azokat a tevékenységeket (esetleg csak egyet), amelyek ugyanahhoz a programhoz/alkalmazáshoz tartoznak, mint egy feladat. Egy alkalmazás több feladatot is magában foglalhat. Egy folyadékdinamikai alkalmazás például általában három feladatból áll, amelyek egymástól függetlenül felelnek a szerkezeti, áramlástani és hőtani elemzésekért. Az egyes feladatok több tevékenységen keresztül végzik el a munkát. Az alábbi ábra a folyamat, a szál, a tevékenység, a feladat és az alkalmazás fogalmát szemlélteti.
2. ábra: A folyamatok, szálak, feladatok, feladatok és alkalmazások fogalmainak bemutatása
Hivatkozások
- Barney, Blaise (utolsó frissítés: 2019. július). POSIX Threads Programming Lawrence Livermore National Laboratory
- M. Ben-Ari (2006. március 6.). Az egyidejű és elosztott programozási Addison-Wesley alapelvei