A könnyű folyamat ( angolul light-weight process , LWP) a kifejezés hagyományos értelmében vett többfeladatos működés elérésének eszköze egy számítógépes operációs rendszerben . A Unix System V és a Solaris rendszeren egy egyszerű folyamat fut a felhasználói térben , egyetlen végrehajtási szálon felül.kernel, megosztja a virtuális címteret és a rendszerszál-erőforrásokat más könnyű folyamatokkal ugyanazon a folyamaton belül. A szálkönyvtár által kezelt több felhasználói szintű szál egy vagy több könnyű folyamatban tárolható, lehetővé téve a felhasználói szintű többfeladatos munkát, amely bizonyos teljesítményelőnyökkel járhat [1] .
Egyes operációs rendszereken nincs külön réteg könnyű folyamatok a kernelszálak és a felhasználói szálak között. Ez azt jelenti, hogy a felhasználói szálakat közvetlenül a kernelszálak valósítják meg. Ilyen esetekben a "könnyű folyamat" kifejezés általában egy kernelszálat jelent, a "szál" pedig egy felhasználói szálat. A Linux kernelben felhasználói szálak vannak implementálva, hogy lehetővé tegyék bizonyos folyamatok erőforrások megosztását, néha lehetővé téve a "könnyű folyamatok" kifejezés alkalmazását ezekre a szálakra [2] . Hasonlóan, a SunOS 4-es verziójában (a Solaris elődjében ) a felhasználói szálakat lightweight folyamatoknak nevezték [1] .
A kernelszálakat teljes egészében a kernel kezeli. Nem kell folyamathoz kapcsolódniuk, a kernel létrehozhatja őket, ha egy adott feladat elvégzéséhez szükséges. A kernelszálak nem futhatnak felhasználói módban. A könnyű folyamatok (azokon a rendszereken, ahol külön réteget képeznek) kernelszálakhoz kapcsolódnak, és felhasználói szintű kontextust biztosítanak. Ez magában foglalja a folyamat megosztott erőforrásaira való hivatkozást, amelyhez az egyszerűsített folyamat tartozik. Egy könnyű folyamat felfüggesztésekor a felhasználói szintű regiszterek tartalmát a folytatásig tárolni kell, és a fő kernelszálnak is tárolnia kell saját kernel szintű regisztereit.
[ tiszta ]
A könnyű folyamat létrehozása drágább és tovább tart, mint egy felhasználói szál. Egy könnyű folyamat létrehozásakor először rendszerhívás történik a megfelelő kernelszál létrehozásához.[ clarify ] , vagyis kernel módba váltás történik. Ezek a módkapcsolók általában magukban foglalják a paraméterek átmásolását a kernel és a felhasználói terület között, és a kernel általában további lépéseket tesz a paraméterek helyességének ellenőrzésére. A könnyű folyamatok közötti kontextusváltáshoz a regiszterek megelőző mentése szükséges, majd át kell térni a kernel módba, ahol elmenti a kernel szál regisztereit, és a könnyű folyamat összes szükséges ütemezése után a megfelelő regiszterértékek \u200b visszaállításra kerül kernel módban és felhasználói módban. [egy]
Emiatt egyes felhasználói szintű könyvtárak több felhasználói szintű szál létrehozására is alkalmasak egy egyszerű folyamaton felül. A felhasználói szálak teljes egészében a felhasználói térben létrehozhatók, megsemmisíthetők, szinkronizálhatók és válthatók egymás között anélkül, hogy rendszerhívásokra vagy kernelmódú átmenetekre lenne szükség. Ez jelentős teljesítménynövekedést biztosít a szál létrehozása és a környezetváltás során. [1] Azonban nehézségekbe ütközik egy olyan felhasználói szintű szálütemező megvalósítása, amely jól működik a kernellel.
Míg a felhasználói könyvtár a felhasználói szálak ütemezésével van elfoglalva, a kernel a mögöttes könnyű folyamatok ütemezésével van elfoglalva. A kernel és a streaming könyvtár közötti koordináció nélkül a kernel szuboptimális ütemezési döntéseket hozhat. Ez egy [Deadlock|Deadlock]-hoz is vezethet, amikor a több egyszerűsített folyamatban szétszórt felhasználói szálak megpróbálják megszerezni ugyanazokat az erőforrásokat, amelyeket egy másik, éppen nem futó felhasználói szál használ. [egy]
A probléma egyik megoldása az ütemező engedélyezése. Ez egy módszer a kernel és a szálkönyvtár koordinálására. A kernel értesíti a szálkönyvtár ütemezőjét bizonyos eseményekről (például amikor egy szál blokkolására van ütemezve), és a szálkönyvtár eldöntheti, hogy mit tegyen. Ezt a kerneltől érkező értesítést "upcall"-nak nevezik.
A felhasználói szintű könyvtárnak nincs ellenőrzése a magasabb szintű mechanizmus felett, csak értesítéseket kap a kerneltől, és a felhasználói szálakat ütemezi a meglévő könnyű folyamatokon, nem a processzorokon. A kernelütemező dönti el, hogyan ütemezze a könnyű folyamatokat a processzorokon. Ez azt jelenti, hogy a könnyű folyamatok a szálkönyvtárban "virtuális processzorokként" jelennek meg [3] .
A Solaris a 2.2-es verzió óta külön könnyű folyamatréteget valósított meg. A 9-es verzió előtt a Solaris a könnyű folyamatok és a felhasználói szálak sok-sok arányát biztosította. Ez azonban az általa okozott bonyolultság miatt elavult, ami a kernelütemező teljesítményét is javítja [1] .
A UNIX System V és modern származékai, mint az IRIX , SCO OpenServer , HP-UX és IBM AIX sok-sok leképezést biztosítanak a felhasználói szálak és a könnyű folyamatok között [3] [4] .