Multitasking ( englanniksi multitasking ) on käyttöjärjestelmän tai ajonaikaisen ympäristön ominaisuus, joka tarjoaa mahdollisuuden useiden tehtävien rinnakkaiseen (tai näennäisen rinnakkaiseen ) käsittelyyn . Käyttöjärjestelmän todellinen moniajo on mahdollista vain hajautetuissa laskentajärjestelmissä .
Moniajoa on 2 tyyppiä [1] :
Monisäikeistys on monitehtävän erikoismuoto [1] .
Primitiiviset moniajoympäristöt tarjoavat puhtaan "resurssien jakamisen", jossa jokaiselle tehtävälle on määritetty tietty muistialue ja tehtävä aktivoidaan tiukasti määritellyin aikavälein.
Edistyneemmät moniajojärjestelmät allokoivat resursseja dynaamisesti, kun tehtävä alkaa muistista tai poistuu muistista sen prioriteetin ja järjestelmän strategian mukaan. Tässä moniajoympäristössä on seuraavat ominaisuudet:
Suurin vaikeus moniajoympäristön toteuttamisessa on sen luotettavuus, joka ilmaistaan muistin suojauksessa, vikojen ja katkosten käsittelyssä , suojassa jäätymiseltä ja lukkiutumiselta .
Moniajoympäristön tulee olla luotettavan lisäksi tehokas. Resurssien kustannukset sen ylläpitoon eivät saa: häiritä prosesseja, hidastaa niiden työtä, rajoittaa jyrkästi muistia.
Aluksi moniajokäyttöjärjestelmien käyttöönotto oli vakava tekninen vaikeus, minkä vuoksi moniajojärjestelmien käyttöönotto viivästyi ja käyttäjät pitivät yhden tehtävän järjestelmistä vielä pitkään käyttöönoton jälkeen.
Myöhemmin useiden onnistuneiden ratkaisujen ilmestymisen jälkeen moniajoympäristöt alkoivat kehittyä ja niitä käytetään nyt kaikkialla.
Ensimmäistä kertaa käyttöjärjestelmän moniajo otettiin käyttöön Multics -käyttöjärjestelmän kehittämisen aikana ( 1964 ). Yksi ensimmäisistä moniajojärjestelmistä oli OS/360 (1966 [2] ), jota käytettiin IBM-tietokoneissa ja niiden Neuvostoliiton vastineissa ES EVM . Järjestelmän kehitys viivästyi voimakkaasti, ja ensimmäisellä kerralla IBM esitti yhden tehtävän DOS :n asiakkaiden tyydyttämiseksi ennen OS / 360:n täyttä käyttöönottoa. Järjestelmää on arvosteltu alhaisen luotettavuuden ja käyttövaikeuden vuoksi.
Vuonna 1969 Multicsin pohjalta kehitettiin UNIX -järjestelmä, jossa oli melko siisti algoritminen ratkaisu moniajon ongelmaan. Tällä hetkellä UNIXin pohjalta on luotu kymmeniä käyttöjärjestelmiä.
PDP-11- tietokoneet ja niiden neuvostoliiton SM-4- vastineet käyttivät RSX-11- moniajojärjestelmää (neuvostoliittolainen vastine on SM EVM RTOS ) ja TSX-PLUS-ajanjakojärjestelmää, joka tarjoaa rajalliset moniajo-ominaisuudet ja monen käyttäjän ajan. jakamistila, joka emuloi jokaiselle käyttäjälle yksitehtävää RT-11: tä (neuvostoliiton analogia - RAFOS ). Jälkimmäinen ratkaisu oli erittäin suosittu täysimittaisen moniajojärjestelmän alhaisen tehokkuuden ja luotettavuuden vuoksi.
Siistiksi ratkaisuksi osoittautui alun perin VAX-tietokoneille kehitetty VMS - käyttöjärjestelmä (neuvoston vastine on SM-1700 ) RSX-11:n kehityksenä.
Maailman ensimmäinen multimediahenkilökohtainen tietokone Amiga 1000 ( 1984 ) suunniteltiin alun perin täyden laitteistotuen avulla AmigaOS :n reaaliaikaiseen ennaltaehkäisevään moniajoon . Tässä tapauksessa laitteiston ja ohjelmiston kehitys tehtiin rinnakkain, mikä johti siihen, että monitoimien ajoituskvantisoinnin (1/50 sekuntia kohden kontekstikytkintä kohden) suhteen AmigaOS pysyi verrattomana henkilökohtaisissa tietokoneissa pitkään .
Microsoft tarjosi moniajoa myös Windows - käyttöjärjestelmissä . VMS-kokemuksen käyttö paransi järjestelmien suorituskykyä ja luotettavuutta huomattavasti. Monitehtäväkontekstin vaihtoajan (kvantisoinnin) suhteen vain näitä käyttöjärjestelmiä voidaan verrata AmigaOS:ään ja UNIXiin (ja myös niiden jälkeläisiin, kuten Linux-ytimeen ).
Mielenkiintoista on, että multitasking voidaan toteuttaa paitsi toimintaympäristössä myös kieliympäristössä. Esimerkiksi Modula-2- ja Ada -ohjelmointikielten tekniset tiedot edellyttävät tukea moniajolle minkä tahansa käyttöjärjestelmän ulkopuolella. Tämän seurauksena JPI / Clarionin suosittu TopSpeed Modula-2 -ohjelmointikielen käyttöönotto 1990-luvun ensimmäisellä puoliskolla mahdollisti erityyppisten monitoimien (yhteistoiminnallinen ja ennaltaehkäisevä - katso alla) järjestämisen yhden kielen säikeille. ohjelma sellaisessa pohjimmiltaan yksitehtävässä käyttöjärjestelmässä kuin MS-DOS . Tämä tehtiin sisällyttämällä ohjelmamoduuliin kompakti tehtävien ajoitus , joka sisälsi ajastimen keskeytyskäsittelijän [3] . Ohjelmointikieliä, joilla on tämä ominaisuus, kutsutaan joskus reaaliaikaisiksi kieliksi [4] .
Moniajon tyyppi, jossa käyttöjärjestelmä lataa kaksi tai useampia sovelluksia muistiin samanaikaisesti, mutta vain pääsovellukselle annetaan CPU-aikaa. Jotta taustasovellus toimisi, se on aktivoitava. Tällainen moniajo voidaan toteuttaa paitsi käyttöjärjestelmässä, myös tehtävänvaihto-ohjelmien avulla. Tässä kategoriassa tunnetaan DESQview- ohjelma , joka ajettiin DOS:n alla ja julkaistiin ensimmäisen kerran vuonna 1985.
Edut: voit käyttää jo käynnissä olevia ohjelmia, jotka on kirjoitettu ilman moniajoa.
Haitat: mahdotonta ei-interaktiivisissa järjestelmissä, jotka toimivat ilman ihmisen puuttumista. Vuorovaikutus ohjelmien välillä on erittäin rajallista.
Moniajotyyppi, jossa seuraava tehtävä suoritetaan vasta sen jälkeen, kun nykyinen tehtävä on nimenomaisesti ilmoittanut olevansa valmis antamaan CPU:lle aikaa muille tehtäville. Erikoistapauksena tällainen ilmoitus annetaan, kun yritetään kaapata jo varattu mutex -objekti (Linux-ydin) sekä odotettaessa seuraavan viestin saapumista käyttöliittymän alijärjestelmästä (Windows-versiot 3.x asti mukaan lukien, sekä 16-bittiset sovellukset Windows 9x :ssä ).
Yhteistyötä voidaan kutsua "toisen vaiheen" moniajoksi, koska se käyttää edistyneempiä tekniikoita kuin monien tunnettujen ohjelmien (kuten MS-DOS 5.0:n DOS Shell) toteuttama yksinkertainen tehtävänvaihto. Yksinkertaisella kytkimellä aktiivinen ohjelma saa kaiken CPU-ajan ja taustasovellukset jäätyvät kokonaan. Yhteistyössä moniajoa käytettäessä sovellus voi itse asiassa käyttää niin paljon suoritinaikaa kuin parhaaksi näkee. Kaikki sovellukset jakavat CPU-ajan, siirtäen ajoittain ohjauksen seuraavalle tehtävälle.
Yhteistyöllisen moniajon edut: ei tarvitse suojata kaikkia jaettuja tietorakenteita objekteilla, kuten kriittisillä osilla ja mutexeilla, mikä yksinkertaistaa ohjelmointia, erityisesti koodin siirtämistä yksitehtäväisistä ympäristöistä moniajoympäristöihin.
Haitat: kaikkien sovellusten kyvyttömyys toimia, jos yhdessä niistä ilmenee virhe, mikä johtaa siihen, että "anna CPU-aikaa" -toimintoa ei kutsuta. Äärimmäisen vaikea mahdollisuus toteuttaa OS-ytimessä moniajo I / O -arkkitehtuuri, jonka avulla prosessori voi suorittaa yhden tehtävän, kun taas toinen tehtävä on käynnistänyt I / O-toiminnon ja odottaa sen valmistumista.
Moniajon tyyppi, jossa käyttöjärjestelmä itse siirtää hallinnan suoritettavasta ohjelmasta toiseen, jos I/O-toiminnot valmistuvat, tietokonelaitteistossa tapahtuu tapahtumia, ajastimien ja aikaviipaleiden vanheneminen tai kuitti tietyistä signaaleista ohjelmasta toiseen. Tällaisessa moniajossa prosessori voidaan vaihtaa yhden ohjelman suorittamisesta toisen suorittamiseen ilman ensimmäisen ohjelman halua ja kirjaimellisesti minkä tahansa kahden käskyn välillä sen koodissa. Prosessoriajan jakamisen suorittaa prosessin ajastin. Lisäksi käyttäjä tai käyttöjärjestelmä voi asettaa kullekin tehtävälle tietyn prioriteetin, mikä mahdollistaa joustavan hallinnan prosessoriajan jakautumiseen tehtävien välillä (voit esimerkiksi vähentää resurssiintensiivisen ohjelman prioriteettia, jolloin vähentää sen nopeutta, mutta lisää taustaprosessien suorituskykyä). Tällainen moniajo tarjoaa nopeamman vastauksen käyttäjän toimiin.
Edut:
Virheet:
Toteutettu sellaisissa käyttöjärjestelmissä kuin:
Aikaviive säikeen herättämisestä sen kutsumiseen prosessorilla, jonka aikana se on suoritettavaksi valmiiden säikeiden luettelossa. Johtuu jatkuvasta käynnissä olevista säikeistä, joilla on korkeampi tai yhtä suuri prioriteetti.
Negatiivisena vaikutuksena on, että säikeen herättämisestä seuraavan tärkeän toimenpiteen suorittamiseen on aikaviive, mikä viivästyttää tämän toiminnon suorittamista ja sen jälkeen monien muiden komponenttien toimintaa.
Nälkä luo pullonkaulan järjestelmään ja estää sitä puristamasta siitä maksimaalista suorituskykyä, jota rajoittavat vain laitteistopohjaiset pullonkaulat.
Kaikki nälänhätä, joka ylittää 100 % prosessorin käytön, voidaan korjata nostamalla nälkäisen säikeen prioriteettia, mahdollisesti väliaikaisesti.
Pääsääntöisesti nälänhädän estämiseksi käyttöjärjestelmä kutsuu automaattisesti matalan prioriteetin säikeitä, jotka ovat valmiita suoritettavaksi, vaikka niitä olisikin korkean prioriteetin ketjuissa, edellyttäen, että säiettä ei ole suoritettu pitkään aikaan (~10 sekuntia). Visuaalisesti tämä kuva on useimpien Windows-käyttäjien tuttu - jos jossakin ohjelmassa lanka lensi loputtomiin, etuikkuna toimii hyvin, tästä huolimatta etuikkunaan liittyvä lanka, Windows lisää prioriteettia. Loput ikkunat piirretään uudelleen pitkillä viiveillä, osia sekunnissa, koska niiden renderöinti toimii tässä tilanteessa vain nälänhädän ehkäisymekanismin ansiosta (muuten se näkisi ikuisesti nälkää).
Kahden koodivirran epädeterministinen suoritusjärjestys, jotka käsittelevät samaa dataa ja jotka suoritetaan kahdessa eri säikeessä (tehtävässä). Se johtaa järjestyksen ja suorituksen oikeellisuuden riippuvuuteen satunnaisista tekijöistä.
Eliminoitu lisäämällä tarvittavat lukot ja synkronointiprimitiivit . Se on yleensä helposti korjattava vika (unohtunut lukko ).
Säikeellä L on matala prioriteetti, säikeellä M on keskimääräinen prioriteetti ja säikeellä H on korkea prioriteetti. Säie L hankkii mutexin, ja suoritettaessa mutexia pitäen katkaisee säie M, joka on jostain syystä herännyt ja jolla on korkeampi prioriteetti. Säie H yrittää saada mutexin.
Tuloksena olevassa tilanteessa säie H odottaa säikeen M saavan valmiiksi nykyisen työn, koska säie M suorittaessa matalan prioriteetin säiettä L ei saa ohjausta eikä voi vapauttaa mutexia.
Eliminoitu nostamalla kaikkien tietyn mutexin saavien säikeiden prioriteettia samaan korkeaan arvoon mutexin pitoajan. Jotkut mutex-toteutukset tekevät tämän automaattisesti. Vaihtoehtoisesti säiettä, joka on jo hankkinut mutexin, edistetään sen jälkeen, kun on yritetty hankkia mutex samanaikaisesti korkeamman prioriteetin säikeellä.
Käyttöjärjestelmien näkökohdat | |||||
---|---|---|---|---|---|
| |||||
Tyypit |
| ||||
Nucleus |
| ||||
Prosessien hallinta |
| ||||
Muistinhallinta ja osoitus |
| ||||
Lataus- ja alustustyökalut | |||||
kuori | |||||
muu | |||||
Luokka Wikimedia Commons Wikikirjat Wikisanakirja |