Kontekstin vaihto

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 31. tammikuuta 2019 tarkistetusta versiosta . tarkastukset vaativat 7 muokkausta .

Kontekstin vaihto ( englanniksi  kontekstikytkin ) - moniajokäyttöjärjestelmässä ja -ympäristöissä - prosessi, jossa prosessori lopettaa yhden tehtävän (prosessin, säikeen, säikeen) suorittamisen samalla kun tallennetaan kaikki tarvittavat tiedot ja tila, joita tarvitaan myöhempää jatkamista varten keskeytetystä paikasta ja palauttaa ja ladata prosessorin suorittaman tehtävän tilan.

Kontekstin vaihtoproseduuri sisältää ns. tehtävien ajoituksen  - prosessin, jossa päätetään, mille tehtävälle ohjaus siirretään.

Kuvaus

Kontekstikytkin tallentaa ja palauttaa seuraavat tiedot:

OS - ytimessä seuraavat rakenteet liitetään kuhunkin säikeeseen:

Kontekstin vaihto ja suorituskyky

Lisäksi, mikä on erittäin tärkeää, seuraavat ohjelmiston kannalta näkymätön laitteistotoiminnot, jotka vaikuttavat suorituskykyyn, tapahtuvat kontekstin vaihdon aikana:

Lisäksi on otettava huomioon seuraavat seikat, jotka vaikuttavat järjestelmän tilaan:

Kontekstin vaihto ja käyttöjärjestelmä

Sovelluskerroksen näkökulmasta kontekstin vaihto voidaan jakaa vapaaehtoiseen (vapaaehtoiseen) ja pakotettuun (ei-vapaaehtoiseen): käynnissä oleva prosessi/säie voi itse siirtää ohjauksen toiselle säikeelle tai ydin voi väkisin ottaa ohjauksen pois. se.

  1. OS-ydin voi ottaa ohjauksen käynnissä olevasta prosessista/säikeestä, kun aikakvantti umpeutuu. Ohjelmoijan näkökulmasta tämä tarkoittaa, että ohjaus voisi paeta säiettä "pahimmalla" hetkellä, jolloin tietorakenteet saattavat olla epäjohdonmukaisessa tilassa, koska niiden muutos ei ole valmis.
  2. Suorita estojärjestelmäkutsu . _ Kun sovellus suorittaa I/O:n, ydin voi päättää, että se voi luovuttaa hallinnan toiselle säikeelle/prosessille odottaessaan kyseisen säikeen pyytämän levyn tai verkon I/O:n valmistumista. Tämä vaihtoehto on tuottavin.
  3. Ytimen synkronoinnin primitiivit. Mutexes , semaforit jne. Tämä on suurin suorituskykyongelmien lähde. Riittämättömästi harkittu työskentely synkronointiprimitiivien kanssa voi johtaa kymmeniin tuhansiin ja erityisen huomiotta jätetyissä tapauksissa satoihin tuhansiin kontekstin vaihtoihin sekunnissa.
  4. Järjestelmäkutsu, joka odottaa eksplisiittisesti tapahtuman (valitse, kysely, epoll, tauko, odota...) tai ajankohtaa (nukkuminen, nanosleep, ...) tapahtumista. Tämä vaihtoehto on suhteellisen tuottava, koska käyttöjärjestelmän ytimessä on tietoa odotusprosesseista.

Aikataulun ominaisuudet

Ero reaaliaikaisten ja aikajakoisten käyttöjärjestelmien välillä näkyy selkeimmin kontekstikytkimien ajoituslogiikan erossa : Aikajakojärjestelmän ajoitus yrittää maksimoida koko järjestelmän suorituskyvyn, mahdollisesti järjestelmän suorituskyvyn kustannuksella. yksittäisiä prosesseja. Reaaliaikaisen järjestelmän ajoittajan tehtävänä on varmistaa, että yksittäiset kriittiset prosessit toimivat etusijalla riippumatta siitä, kuinka raskasta koko järjestelmän kokonaiskustannukset ovat.

Kontekstin vaihtamisen toteutukset nykyaikaisissa käyttöjärjestelmissä

Kuten yllä olevasta voidaan nähdä, kontekstin vaihto on erittäin resurssiintensiivinen toimenpide, ja mitä "upeampi" prosessori on, sitä resurssiintensiivisempi tämä operaatio tulee. Tämän perusteella ydin käyttää useita strategioita ensinnäkin vähentääkseen kontekstin vaihtojen määrää ja toiseksi tehdäkseen kontekstin vaihdosta vähemmän resurssiintensiivisen.

Menetelmät kontekstikytkimien määrän vähentämiseksi:

Menetelmiä kontekstin vaihtamisen resurssiintensiivisyyden vähentämiseksi:

Yllä olevat esimerkit viittaavat Linux-ytimeen , mutta myös muut käyttöjärjestelmät käyttävät samanlaisia ​​menetelmiä, vaikka omistettujen käyttöjärjestelmien tapauksessa on ongelmallista todistaa/kiistää tämän käyttö.

Terminologiahuomautuksia

Linkit