a UNIX / LINUX operációs rendszerben. C/C++ programozás
Azaz miért, ki, kinek, miről, mennyit, hogyan...
Ez a rész a UNIX fájlrenszerének rövid bemutatását tartalmazza, beleértve a könyvtárszerkezetet és az állománynevekre vonatkozó szabályokat. Ezután a folyamatok és az állományok összehasonlítása következik. Ezen kívül lesz pár szó a folyamatkezelő utasításokról is.
A folyamatok közti kommunikáció (IPC) többféleképpen is megvalósulhat: jelzések, állományok, csővezetékek (pipe), névvel ellátott csővezetékek (FIFO), szemaforok (semaphores), üzenetsorok (message queues) vagy osztott memória (shared memory) által.
Rövid bevezetés az ANSI C használatába, különös tekintettel azokra az elemekre, utasításokra, amelyek nem azonosak a Borland C szintaxisával. Ugyanitt találhatók meg a folyamatok kezeléséhez szükséges utasítások részletes leírásai is.
Folyamatokkal végzett műveletek
Folyamatok létrehozására, végrehajtására, befejezésére stb. vonatkozó szabályok és utasítások összefoglalója.
A jelzéseket főként más folyamatok figyelmeztetésére, riasztására, vagy kivételek kezelésére használjuk. Ezen üzenetek nagyon kevés információt hordoznak, mivel véges számú jelből állhatnak. A jelzés hatására a folyamat megszakad és értelmezi az adott jelet. Alkalmazásuk nem túl hatékony, főleg folyamatok befejezésére használjuk.
A csővezetékek (pipe-ok) már megoldják a fájloknál fellépő szinkronizációs problémákat. A pipe a rendszer által létrehozott (név nélküli) speciális állomány. Maximális hossza 10 blokk (5120 byte). Feladata: két folyamat közötti kommunikáció megvalósítása (az egyik folyamat ír a standard kimenetre, a másik pedig olvas a standard bemenetről). A pipe FILO szerkezetű. Két mutatója van: egyik az író folyamaté, a másik az olvasóé. Így az írás/olvasás cirkulárisan történik (ha a pipe megtelik az írónak kell várnia, ha kiürül az olvasónak).
Névvel ellátott csővezeték (FIFO)
A névvel ellátott csővezetékek nagyon hasonlítanak a hagyományos pipe-okhoz. Egy FIFO állománynak azonban van neve és minden olyan folyamat hozzáférhet, amelynek joga van hozzá. A FIFO a második problémát is megoldotta, hiszen itt már értelmezettek az atomi műveletek is. Az egyetlen hátrány maradt az alacsony sebesség.
Az üzenetek olyan kis adatcsomagok, amelyek a folyamatok között közlekednek. Itt természetesen meg kell mondanunk a címzett (folyamat) azonosítóját. Az üzenetek többfélék is lehetnek. Bármely folyamat – amelynek van joga – kaphat üzenetet a hálózaton keresztül.
A szemafor egy olyan jel (például egy változó), amely megmutatja, hogy egy folyamat végrehajthat-e egy bizonyos programrészt, vagy várakoznia kell.
Osztott memória (shared memory)
Az osztott memória a leggyorsabb kommunikációt eredményezi. Az alapötlete: ugyanazt a memóriarészt használja az összes összeköttetésben levő folyamat. Minél gyorsabban beírja az egyik folyamat az információt a memóriába, annál gyorsabban tudja kiolvasni azt egy másik. Ebben az esetben is felhasználhatunk egy szemafort vagy küldhetünk üzenetet, azért, hogy a folyamatok írását/olvasását összehangoljuk.
A szálak segítségével több, különálló végrehajtási egységre bonthatunk egy folyamatot. Egy folyamaton belül egy újabb szál létrehozása/befejezése gyorsabb, mint hogyha egy új folyamatot hoznánk létre ugyanannak a feladatnak az ellátásara. A folyamat szálai közti váltás, sőt, az egyes szálak közti kommunikáció is gyorsabb (hiszen nem feltétlenül igényel kernel-beavatkozást), mint a folyamatváltás vagy különböző folyamatok közti kommunikáció. Többprocesszoros rendszerben ugyanannak a folyamatnak a különböző szálai párhuzamosan is futhatnak. Vigyáznunk kell azonban a tervezéssel: több szál használata ugyanis nem eredményez automatikusan hatékonyabb programot.
Ez a rész különböző összefoglaló táblázatokat, rövid utasítás leírásokat és egyéb hasznos segítséget tartalmaz.
A dokumentumban szereplő kulcsszavak, kifejezések, utasítások jegyzéke.
Copyright (C)
Buzogány László, 2002