A multitasking ( angolul multitasking ) az operációs rendszer vagy a futási környezet olyan tulajdonsága, amely lehetővé teszi több feladat párhuzamos (vagy pszeudo -párhuzamos) feldolgozását . Az operációs rendszer valódi többfeladatos kezelése csak elosztott számítástechnikai rendszerekben lehetséges .
A többfeladatos munkavégzésnek két típusa van [1] :
A multithreading a multitasking egy speciális formája [1] .
A primitív többfeladatos környezetek tiszta "erőforrás-megosztást" biztosítanak, ahol minden feladathoz egy meghatározott memóriaterület van hozzárendelve, és a feladat szigorúan meghatározott időközönként aktiválódik.
A fejlettebb többfeladatos rendszerek dinamikusan allokálják az erőforrásokat, amikor egy feladat elindul a memóriában vagy elhagyja a memóriát, a prioritásától és a rendszer stratégiájától függően. Ez a többfeladatos környezet a következő funkciókkal rendelkezik:
A többfeladatos környezet megvalósításának fő nehézsége a megbízhatóság, amely a memóriavédelemben, a hibák és megszakítások kezelésében , valamint a lefagyások és holtpontok elleni védelemben fejeződik ki .
A többfeladatos környezetnek a megbízhatóságon túl hatékonynak is kell lennie. A karbantartáshoz szükséges erőforrások költsége nem akadályozhatja meg a folyamatokat, nem lassíthatja le munkájukat, nem korlátozhatja élesen a memóriát.
A többfeladatos operációs rendszerek bevezetése eleinte komoly technikai nehézséget jelentett, ezért a multitasking rendszerek bevezetése elhúzódott, a felhasználók pedig a bevezetés után még sokáig az egyfeladatos rendszereket preferálták.
Később, több sikeres megoldás megjelenése után, a multitasking környezetek fejlődésnek indultak, és ma már mindenhol használatosak.
Az operációs rendszer multitaskingját először a Multics operációs rendszer fejlesztése során valósították meg ( 1964 ). Az egyik első többfeladatos rendszer az OS/360 (1966 [2] ), amelyet az IBM számítógépekhez és szovjet megfelelőihez, az ES EVM -hez használtak . A rendszer fejlesztése nagymértékben késett, és az IBM először egy egyfeladatos DOS - t javasolt az ügyfelek megelégedésére az OS / 360 teljes üzembe helyezése előtt. A rendszert kritika érte az alacsony megbízhatóság és a működési nehézségek miatt.
1969- ben a Multics bázisán kifejlesztették a UNIX rendszert , amely egy meglehetősen ügyes algoritmikus megoldást kínál a multitasking problémájára. Jelenleg több tucat operációs rendszert hoztak létre UNIX alapján.
A PDP-11 számítógépek és szovjet SM-4 társaik az RSX-11 multitasking rendszert (a szovjet megfelelője az SM EVM RTOS ), valamint a TSX-PLUS időelosztó rendszert használták, amely korlátozott többfeladatos képességet és többfelhasználós időt biztosít. megosztási mód, amely minden felhasználó számára egy egyfeladatos RT-11- et (szovjet analóg - RAFOS ) emulál. Ez utóbbi megoldás nagy népszerűségnek örvendett a teljes értékű multitasking rendszer alacsony hatékonysága és megbízhatósága miatt.
Ügyes megoldásnak bizonyult az eredetileg VAX számítógépekhez kifejlesztett VMS operációs rendszer (a szovjet megfelelője az SM-1700 ) az RSX-11 továbbfejlesztéseként.
A világ első multimédiás személyi számítógépe , az Amiga 1000 ( 1984 ) eredetileg teljes hardveres támogatással készült az AmigaOS valós idejű megelőző többfeladatos munkavégzéséhez . Ebben az esetben a hardver és a szoftver fejlesztése párhuzamosan zajlott, ami oda vezetett, hogy a multitasking ütemező kvantálás tekintetében (1/50 másodperc kontextusváltásonként) az AmigaOS sokáig felülmúlhatatlan maradt a személyi számítógépeken .
A multitasking szolgáltatást a Microsoft Windows operációs rendszereken is biztosította . A VMS tapasztalatok alkalmazása lényegesen nagyobb teljesítményt és megbízhatóságot biztosított a rendszereknek. A többfeladatos kontextusváltási idő (kvantálás) szempontjából csak ezek az operációs rendszerek hasonlíthatók össze az AmigaOS-szel és a UNIX-szal (és annak leszármazottaival, mint például a Linux kernellel ).
Érdekes módon a multitasking nem csak a működési környezetben, hanem nyelvi környezetben is megvalósítható. Például a Modula-2 és az Ada programozási nyelvek specifikációi megkövetelik a multitasking támogatását bármely operációs rendszeren kívül. Ennek eredményeként a JPI / Clarion által a TopSpeed Modula-2 programozási nyelv népszerű implementációja az 1990- es évek első felében lehetővé tette a többfeladatos (kooperatív és megelőző – lásd alább) különböző típusú multitasking megszervezését egy szál számára. program egy olyan alapvetően egyfeladatos operációs rendszeren belül, mint az MS-DOS . Ez úgy történt, hogy a programmodulba egy kompakt feladatütemezőt is beépítettek , amely egy időzítő megszakításkezelőt tartalmaz [3] . Azokat a programozási nyelveket, amelyek rendelkeznek ezzel a tulajdonsággal, néha valós idejű nyelveknek is nevezik [4] .
A multitasking olyan típusa, amelyben az operációs rendszer egyszerre két vagy több alkalmazást tölt be a memóriába, de csak a főalkalmazás kap CPU-időt. A háttérben futó alkalmazás futtatásához aktiválni kell. Az ilyen multitasking nem csak az operációs rendszerben, hanem feladatváltó programok segítségével is megvalósítható. Ebben a kategóriában ismert a DESQview program , amely DOS alatt futott és 1985-ben jelent meg először.
Előnyök: a már futó programokat használhatja, anélkül, hogy a multitasking szem előtt tartásával készült volna.
Hátrányok: lehetetlen olyan nem interaktív rendszerekben, amelyek emberi beavatkozás nélkül működnek. A programok közötti interakció rendkívül korlátozott.
A többfeladatos munka olyan típusa, amelyben a következő feladat csak azután fut le, hogy az aktuális feladat kifejezetten készen áll arra, hogy a CPU-nak időt adjon más feladatoknak. Speciális esetként ilyen deklarációra van szükség, amikor egy már foglalt mutex objektumot (Linux kernel) próbálunk rögzíteni, valamint amikor a következő üzenet megérkezésére várunk a felhasználói felület alrendszerétől (Windows-verziók 3.x -ig, beleértve, valamint a 16 bites alkalmazások a Windows 9x rendszerben ).
A kooperatív többfeladatos tevékenységet "második fokozatú" multitaskingnak nevezhetjük, mert fejlettebb technikákat használ, mint a sok jól ismert program által megvalósított egyszerű feladatváltás (például az MS-DOS 5.0 -s DOS Shell ). Egy egyszerű kapcsolóval az aktív program megkapja az összes CPU-időt, a háttérben futó alkalmazások pedig teljesen lefagynak. A kooperatív többfeladatos munkavégzés révén egy alkalmazás valójában annyi CPU-időt tud lefoglalni, amennyit jónak lát. Minden alkalmazás megosztja a CPU-időt, és időszakonként átadja a vezérlést a következő feladatnak.
A kooperatív többfeladatos munkavégzés előnyei: nincs szükség az összes megosztott adatszerkezet védelmére olyan objektumokkal, mint a kritikus szakaszok és mutexek, ami leegyszerűsíti a programozást, különösen a kód portolását egyfeladatos környezetekből többfeladatos környezetbe.
Hátrányok: az összes alkalmazás nem tud működni, ha az egyikben hiba lép fel, ami a „CPU-idő megadása” művelet hívásának hiányához vezet. Rendkívül nehéz lehetőség egy többfeladatos I / O architektúra megvalósítására az operációs rendszer kernelében, amely lehetővé teszi a processzor számára, hogy egy feladatot hajtson végre, miközben egy másik feladat I / O műveletet kezdeményezett, és annak befejezésére vár.
A multitasking olyan típusa, amelyben az operációs rendszer maga adja át az irányítást egyik végrehajtható programról a másikra az I / O műveletek befejezése, a számítógép hardverében bekövetkező események, az időzítők és időszeletek lejárta vagy a nyugta esetén. bizonyos jelek egyik programból a másikba. Az ilyen típusú többfeladatos munkavégzés során a processzor átkapcsolható az egyik program végrehajtásáról egy másik végrehajtására anélkül, hogy az első programra volna szükség, és szó szerint a kódjában szereplő két utasítás között. A processzoridő elosztását a folyamatütemező végzi. Ezenkívül minden feladathoz a felhasználó vagy maga az operációs rendszer is hozzárendelhet egy bizonyos prioritást, ami rugalmasan szabályozza a processzoridő feladatok közötti elosztását (például csökkentheti egy erőforrás-igényes program prioritását, ezáltal sebességének csökkentése, de a háttérfolyamatok teljesítményének növelése). Ez a fajta multitasking gyorsabb választ ad a felhasználói műveletekre.
Előnyök:
Hibák:
Olyan operációs rendszerekben implementálva, mint:
Az időkésleltetés a szál felébresztésétől a processzoron történő meghívásig, amely alatt a szál a végrehajtásra kész szálak listájában van. Az állandóan futó magasabb vagy azonos prioritású szálak miatt fordul elő.
A negatív hatás az, hogy a szál felébresztésétől a következő fontos művelet elvégzéséig késleltetés van, ami késlelteti ennek a műveletnek a végrehajtását, és ezt követően sok más összetevő munkáját.
Az éhezés szűk keresztmetszetet hoz létre a rendszerben, és megakadályozza, hogy maximális teljesítményt préseljen ki belőle, csak a hardver által vezérelt szűk keresztmetszetek korlátozzák.
A 100%-os CPU-használatot meghaladó éhínség orvosolható a kiéhezett szál prioritásának emelésével, esetleg átmenetileg.
Általános szabály, hogy az éhezés megelőzése érdekében az operációs rendszer automatikusan elindítja a végrehajtásra kész alacsony prioritású szálakat, még akkor is, ha vannak magas prioritású szálak, feltéve, hogy a szálat hosszú ideig (~10 másodperc) nem hajtották végre. Vizuálisan ezt a képet a legtöbb Windows-felhasználó jól ismeri - ha az egyik programban a szál korlátlanul hurkolt, akkor az elülső ablak jól működik, ennek ellenére az első ablakhoz társított szál, a Windows növeli a prioritást. A többi ablakot nagy késleltetéssel, másodpercenkénti adaggal rajzolják át, mert a megjelenítésük ebben a helyzetben csak az éhezésgátló mechanizmusnak köszönhetően működik (különben örökre éhezne).
Két kódfolyam végrehajtásának nem determinisztikus sorrendje, amelyek ugyanazt az adatot dolgozzák fel, és két különböző szálban (feladatban) hajtódnak végre. Ez a végrehajtás sorrendjének és helyességének véletlenszerű tényezőktől való függéséhez vezet.
A szükséges zárolások és szinkronizálási primitívek hozzáadásával kiküszöbölhető . Ez általában egy könnyen javítható hiba (elfelejtett zár ).
Az L szál prioritása alacsony, az M szál közepes, a H szál pedig magas prioritású. Az L szál megszerzi a mutexet, és a mutex tartása közben végrehajtott végrehajtás közben megszakítja az M szálat, amely valamilyen okból felébredt és magasabb prioritású. A H szál megpróbálja megszerezni a mutexet.
A kialakult helyzetben a H szál arra vár, hogy az M szál befejezze az aktuális munkát, mert miközben az M szál fut, az alacsony prioritású L szál nem kap irányítást, és nem tudja feloldani a mutexet.
Megszűnik azáltal, hogy az összes olyan szál prioritását, amelyek egy adott mutexet szereznek, ugyanolyan magas értékre emelik a mutex megtartásának időtartamára. Egyes mutex implementációk ezt automatikusan megteszik. Alternatív megoldásként egy olyan szálat, amely már megszerezte a mutexet, előléptetik, miután megpróbálják egyidejűleg megszerezni a mutexet egy magasabb prioritású szállal.
Az operációs rendszerek szempontjai | |||||
---|---|---|---|---|---|
| |||||
Típusok |
| ||||
Sejtmag |
| ||||
Folyamatmenedzsment _ |
| ||||
Memóriakezelés és címzés | |||||
Betöltési és inicializálási eszközök | |||||
Héj | |||||
Egyéb | |||||
Kategória Wikimedia Commons Wikikönyvek Wikiszótár |