Mi a kontextusváltás az operációs rendszerben?
Az operációs rendszerben vannak olyan esetek, amikor a futó állapotban lévő folyamatot vissza kell vinni egy másik állapotba, például készenléti állapotba vagy várakozási/blokkolási állapotba. Ha a futó folyamat valamilyen I/O műveletet akar végrehajtani, akkor a folyamatot el kell távolítani a futó állapotból, majd a folyamatot az I/O sorba kell helyezni. Néha előfordulhat, hogy a folyamat körkörös ütemezési algoritmust használ, ahol minden meghatározott időkvantum után a folyamatnak a futó állapotból vissza kell térnie a készenléti állapotba. Ezek a folyamatváltások tehát a Context Switching segítségével történnek. Ebben a blogban megismerkedünk a kontextusváltás koncepciójával az operációs rendszerben, és megismerkedünk a kontextusváltás előnyeivel és hátrányaival is. Tehát, kezdjük el.
Mi a kontextusváltás?
A kontextusváltás egy olyan folyamat, amely során a CPU egyik folyamatról vagy feladatról a másikra vált. Ennél a jelenségnél a futó állapotban lévő folyamat végrehajtását a kernel felfüggeszti, és egy másik, készenléti állapotban lévő folyamatot hajt végre a CPU.
Ez a többfeladatos operációs rendszer egyik alapvető jellemzője. A folyamatok váltása olyan gyorsan történik, hogy a felhasználó számára azt az illúziót kelti, hogy az összes folyamat végrehajtása egyszerre történik.
A kontextusváltás folyamata azonban számos lépést tartalmaz, amelyeket követni kell. Egy folyamatot nem lehet közvetlenül átkapcsolni a futó állapotból a készenléti állapotba. El kell menteni az adott folyamat kontextusát. Ha nem menti el valamelyik P folyamat kontextusát, akkor egy idő után, amikor a P folyamat újra a CPU-ba kerül végrehajtásra, akkor a folyamat az indulásból kezdi meg a végrehajtást. A valóságban azonban attól a ponttól kell folytatnia, ahol az előző végrehajtás során elhagyta a CPU-t. Tehát a folyamat kontextusát el kell menteni, mielőtt bármely más folyamatot futó állapotba helyeznénk.
A kontextus a CPU regisztereinek és programszámlálójának tartalma egy adott időpontban. A kontextusváltás a következő okok miatt történhet:
- Amikor egy magas prioritású folyamat készenléti állapotba kerül. Ebben az esetben a futó folyamat végrehajtását le kell állítani, és a magasabb prioritású folyamatnak kell átadni a CPU-t végrehajtásra.
- Ha megszakítás következik be, akkor a futó állapotban lévő folyamatot le kell állítani, és a CPU-nak a megszakítást kell kezelnie, mielőtt valami mást csinálna.
- Ha átmenetre van szükség a felhasználói és a kernel üzemmód között, akkor el kell végezni a kontextusváltást.
A kontextusváltás lépései
A kontextusváltás folyamata több lépésből áll. Az alábbi ábra a két folyamat, a P1 és a P2 közötti kontextusváltás folyamatát ábrázolja.
A fenti ábrán látható, hogy kezdetben a P1 folyamat futó állapotban van, a P2 folyamat pedig készenléti állapotban. Most, amikor valamilyen megszakítás történik, akkor a kontextus mentése után a P1 folyamatot a futó állapotból a készenléti állapotba, a P2 folyamatot pedig a készenléti állapotból a futó állapotba kell kapcsolni. A következő lépéseket kell végrehajtani:
- Először a P1 folyamat kontextusát, azaz a futó állapotban lévő folyamatot el kell menteni a P1 folyamat folyamatvezérlő blokkjában, azaz a PCB1-ben.
- Most a PCB1-et át kell helyezni a megfelelő sorba i.pl. készenléti sorba, I/O sorba, várakozási sorba stb.
- A készenléti állapotból válassza ki a végrehajtandó új folyamatot, azaz a P2 folyamatot.
- Most frissítse a P2 folyamat, azaz a PCB2 folyamatvezérlő blokkját a folyamat állapotának futó állapotra állításával. Ha a P2 folyamatot korábban már végrehajtotta a CPU, akkor megkaphatja az utoljára végrehajtott utasítás pozícióját, így folytathatja a P2 végrehajtását.
- Hasonlóképpen, ha újra végre akarja hajtani a P1 folyamatot, akkor a fent említett lépéseket kell követnie (az 1-4. lépéstől).
A kontextusváltáshoz általában legalább két folyamatra van szükség, a round-robin algoritmus esetében pedig csak egy folyamat segítségével végezhetjük el a kontextusváltást.
Az egyik folyamat másik általi kontextusváltásával járó időt nevezzük kontextusváltási időnek.
A kontextusváltás előnye
A kontextusváltást a multitasking, azaz az időmegosztásos többprogramozás megvalósítására használják (a multitaskingról bővebben itt olvashat). A multitasking azt az illúziót kelti a felhasználókban, hogy egyszerre több folyamatot hajtanak végre. A valóságban azonban egy processzor egy adott időpillanatban csak egy feladatot hajt végre. Itt a kontextusváltás olyan gyors, hogy a felhasználó úgy érzi, hogy a CPU egyszerre több feladatot hajt végre.
A kontextusváltás hátránya
A kontextusváltás hátránya, hogy a kontextusváltáshoz bizonyos időre van szükség, azaz a kontextusváltási időre. Időt igényel egy futó állapotban lévő folyamat kontextusának elmentése, majd egy másik, futó állapotba kerülő folyamat kontextusának megszerzése. Ez alatt az idő alatt a CPU a felhasználó szempontjából nem végez hasznos munkát. Tehát a kontextusváltás ebben az állapotban puszta overhead.
Ez a blog ennyi. Remélem, tetszett ez a blog.