Kontextusváltás

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2019. január 31-én felülvizsgált verziótól ; az ellenőrzések 7 szerkesztést igényelnek .

Kontextusváltás ( angol  kontekst switch ) - többfeladatos operációs rendszerben és környezetekben - egy feladat (folyamat, szál, szál) processzor általi végrehajtásának leállítása, miközben a megszakított helyről elment minden szükséges információt és állapotot, amely a későbbi folytatáshoz szükséges. , valamint a processzor által végrehajtandó feladatállapot visszaállítása és betöltése.

A kontextusváltási eljárás magában foglalja az úgynevezett feladatütemezést  – azt a folyamatot, amely eldönti, hogy melyik feladatra adja át a vezérlést.

Leírás

A környezetkapcsoló a következő információkat menti és állítja vissza:

Az operációs rendszer kernelében a következő struktúrák vannak társítva az egyes szálakhoz:

Kontextusváltás és teljesítmény

Ezen túlmenően, és ami nagyon fontos, a következő, a teljesítményt befolyásoló, szoftver által láthatatlan hardverműveletek következnek be a környezetváltás során:

Ezenkívül figyelembe kell venni a következő, a rendszer állapotát befolyásoló tényeket:

Kontextusváltás és operációs rendszer

Az alkalmazási réteg szempontjából a kontextusváltást feloszthatjuk önkéntesre (önkéntes) és kényszerítettre (nem önkéntes): egy futó folyamat/szál maga is átadhatja a vezérlést egy másik szálnak, vagy a kernel erőszakkal el tudja venni az irányítást azt.

  1. Az OS kernel átveheti az irányítást egy futó folyamatról/szálról, amikor az időkvantum lejár. A programozó szemszögéből ez azt jelenti, hogy a vezérlés a „legrosszabb” időpontban kerülhet ki a szálból, amikor az adatstruktúrák inkonzisztens állapotban lehetnek, mert a módosításuk nem fejeződött be.
  2. Blokkoló rendszerhívás végrehajtása . Amikor egy alkalmazás I/O-t hajt végre, a kernel dönthet úgy, hogy átadja a vezérlést egy másik szálnak/folyamatnak, miközben várja, hogy az adott szál által kért lemez vagy hálózati I/O befejeződjön. Ez a lehetőség a legproduktívabb.
  3. Kernel szinkronizálási primitívek. Mutexek , szemaforok stb. Ez a teljesítményproblémák fő forrása. A szinkronizációs primitívekkel végzett nem kellően átgondolt munka több tízezer, különösen figyelmen kívül hagyott esetekben akár több százezer kontextusváltáshoz vezethet másodpercenként.
  4. Olyan rendszerhívás, amely kifejezetten vár egy esemény (kiválasztás, lekérdezés, epoll, szünet, várakozás, ...) vagy időpont (alvás, nanoalvás, ...) bekövetkezésére. Ez az opció viszonylag produktív, mivel az operációs rendszer kernelének információi vannak a várakozási folyamatokról.

Az ütemező eljárás jellemzői

A valós idejű és az időmegosztó operációs rendszerek közötti különbség a kontextuskapcsolók ütemezési logikájának különbségében mutatkozik meg a legvilágosabban : Az időmegosztó rendszer ütemezője megpróbálja maximalizálni a teljes rendszer teljesítményét, esetleg a rendszer teljesítményének rovására. egyéni folyamatok. A valós idejű rendszerütemező feladata annak biztosítása, hogy az egyes kritikus folyamatok prioritásban fussanak, függetlenül attól, hogy a rendszer többi részének milyen nagy terhet jelent.

Kontextusváltási megvalósítások modern operációs rendszerekben

Amint az a fentiekből látható, a kontextusváltás nagyon erőforrás-igényes művelet, és minél "divatosabb" a processzor, annál erőforrás-igényesebb lesz ez a művelet. Ennek alapján a kernel számos stratégiát alkalmaz, hogy egyrészt csökkentse a kontextusváltások számát, másrészt a kontextusváltást kevésbé erőforrásigényessé tegye.

Módszerek a kontextusváltások számának csökkentésére:

Módszerek a környezetváltás erőforrás-intenzitásának csökkentésére:

A fenti példák a Linux kernelre vonatkoznak , azonban más operációs rendszerek is használnak hasonló módszereket, bár a szabadalmaztatott operációs rendszerek esetében problémás ennek bizonyítása/cáfolása.

Terminológiai megjegyzések

Linkek