Ero sivun ”Prosessi (tietotekniikka)” versioiden välillä

[arvioimaton versio][arvioimaton versio]
Poistettu sisältö Lisätty sisältö
Fri13 (keskustelu | muokkaukset)
Tarkennusta -än ja -ssä kanssa ym.
Lisäyksiä ja korjauksia.
Rivi 1:
[[Tietotekniikka|Tietotekniikassa]] '''prosessi''' on [[käyttöjärjestelmätietokone]]nessa ajossa oleva [[tietokoneohjelma|ohjelma]]. Jokaisella prosessilla on yleensä käytössä oma muistialue ja muita resursseja, joihin muut prosessit eivät pääse käsiksi. Useimmat käyttöjärjestelmät ylläpitävät näitä tietoja prosessitaulussa. Eri prosessit voivat [[prosessien välinen kommunikaatio|kommunikoida]] keskenään lukuisilla menetelmillä. Usein prosessit koostuvat yhdestä tai useammasta [[#Säie|säikeestä]].
 
Typistetysti voidaan esittää prosessille kolme eri tilaa. Sitä voidaan ''suorittaa'' ({{k-en|running}}), se voi olla ''valmiustilassa'' ({{k-en|ready, ready to run. suspended}}), tai ''odottavana/nukkuvana'' ({{k-en|wait, blocked, asleep}}). Odotustilassa oleva prosessi voi odottaa mitä tahansa tapahtumaa, kuten esimerkiksi oheislaitteen toimintaa, viestiä toiselta prosessilta tai ajan kulumista.
 
Prosessi siirtyy valmiustilasta suoritustilaan siten, että käyttöjärjestelmän ytimen osa ''vuorontaja'' ({{k-en|scheduler, dispatcher}}) toiminto valitsee sen suoritukseen. Odotustilaan prosessi siirtyy, jos se tekee sellaisen järjestelmäkutsun ({{k-en|system call}}), jota käyttöjärjestelmä ei voi suorittaa heti loppuun asti. Tällainen kutsu voisivoi olla vaikkapa lukupyyntö ohjeislaitteeltaoheislaitteelta taikuten keskusmuististalevyltä, jos haluttua tietoa ei ole jo keskusmuistissa (puskuroinnin takia tieto voi olla keskusmuistissa valmiina, jolloin pyyntö voidaan hoitaa heti loppuun asti, eikä tilasiirtymää tehdä). Kun odottaminen päättyy, prosessi siirtyy valmiustilaan, ja sykli alkaa alusta. Jos järjestelmässä on irrottava ({{k-en|pre-emptive}}) vuoronnus, prosessi voi siirtyä myös suoritustilasta valmiustilaan.
 
Vaihtaessaan säiettä tai prosessia toiseen vuorontaja käyttää jotain vuoronnusmenetelmää. Menetelmästä riippuu hyvin pitkälle se, mikä odottavista prosesseista valitaan ajoon. Menetelmiä ovat muun muassa kiinteä prioriteetti ({{k-en|fixed priority}}) (usein liitettynä irrottavaan vuoronnukseen, {{k-en|fixed priority pre-emptive scheduling, FPPE}}), vaihteleva prioriteetti ({{k-en|dynamic priority}}) (useita erilaisia tapoja vaihtaa prioriteettia), lyhyin tehtävä ensin ({{k-en|shortest remaining time, SRT}}), lähin määräaika ensin ({{k-en|earliest deadline first, EDF}}), jonomenetelmä ({{k-en|first in, first out, FIFO, myös first come, first served, FCFS}}) ja sen lähisukulainen kiertovuorottelu ({{k-en|round robin, RR}}). Vain osa vuoronnonmenetelmistävuoronnusmenetelmistä sopii reaaliaikaiseen vuoronnukseen ({{k-en|real-time scheduling}}).
 
Vuoronnus voidaan toteuttaa kokonaan käyttöjärjestelmän ytimessä, mutta käytössä on myös kaksitasoisia ratkaisuja, joissa ytimen osa tyypillisesti hoitaa reaaliaikaista vuoronnusta ja muiden prosessien osalta esivalinnan tekee erillinen prosessi.
[[Unix]]-käyttöjärjestelmässä ja siitä vaikutteita ottaneissa käyttöjärjestelmissä prosessi ei voi syntyä tyhjästä, vaan jokaisen prosessin on käynnistänyt jokin toinen prosessi, jota nimitetään prosessin ''isäprosessiksi''. Vastaavasti prosessin käynnistämät prosessit ovat sen ''lapsiprosesseja''. Kaikki prosessit ovat joko suoraan tai välillisesti [[init]]-prosessin jälkeläisiä. Init-prosessin prosessinumero on aina 1, ja käyttöjärjestelmä käynnistää sen heti itsensä jälkeen. Uusi prosessi luodaan fork-kutsulla, mutta tämä ei vielä vaihda suoritettavaa ohjelmaa.
 
[[Unix]]-käyttöjärjestelmässä ja siitä vaikutteita ottaneissa käyttöjärjestelmissä prosessiprosessien eivälillä voion syntyäisä-lapsisuhde. tyhjästä Prosessi, vaanjoka jokaisenkäynnistää toisen prosessin, on käynnistänyt jokin toinen prosessi, jota nimitetäänkäynnistetyn prosessin ''isäprosessiksiisäprosessi''. Vastaavasti prosessin käynnistämät prosessit ovat sen ''lapsiprosesseja''. Kaikki prosessit ovat joko suoraan tai välillisesti [[init]]-prosessin jälkeläisiä. Init-prosessin prosessinumero on aina 1, ja käyttöjärjestelmä käynnistää sen hetiennen itsensämuita jälkeenprosesseja. Uusi prosessi luodaan fork-kutsulla, muttajoka tämäkahdentaa käynnissä olevan prosessin. Suoritettava ohjelma vaihdetaan erillisellä kutsulla (exec). Kun prosesi päättyy, se ilmoittaa onnistumistiedon isäprosessilleen. Jos isäprosessi on jo päättynyt, lopetustieto menee isoisälle tai sen isälle ja niin edelleen, kunnes päädytään init-prosessiin, joka ei vieläkuole vaihdaennen suoritettavaakuin käyttöjärjestelmä ohjelmaapysäytetään.
 
Kaikissa käyttöjärjestelmissä ei isä-lapsisuhdetta ole prosessien välillä (näin esimerkiksi [[Windows]]-käyttöjärjestelmässä). Prosessin luonti ja ohjelmakoodin vaihto ei myöskään ole aina kaksivaiheinen, vaan voi tapahtua yhdellä kutsulla.
 
== Säie ==
Nykykäyttöjärjestelmät tukevat usein perinteistä prosessia kevyempää prosessia, säiettä ({{k-en|thread, task, light-weight process}}). Säie eroaa prosessista siten, että sillä ei ole omia resursseja, vaan se käyttää sen prosessin resursseja, johon se kuuluu. Yhdessä prosessissa on silloin yksi tai useampia säikeitä. Säikeen vaihto prosessin sisällä on kevyempää kuin prosessien välillä. Tällaisessa järjestelmässä edellä kuvattu prosessin kolmitilamalli toteutuu säietasolla ja prosessin tehtäväksi jää käyttää käyttöjärjestelmän niille sallittuja yhteisiä resursseja.
 
Säikeet voidaan toteuttaa käyttöjärjestelmän ytimessä ''etuoikeutetussa tilassa'' ({{k-en|kernel, supervisor}}) tai ''käyttäjätilassa'' ({{k-en|user}}) prosessin osana. Jälkimmäinen vaihtoehto tarkoittaa sitä, että prosessin sisällä on vuorontaja, joka päättää, mikä sen sisäisistä säikeistä on ajossa. Jos säikeet on toteutettu käyttöjärjestelmässä, toteutuu yllä kuvattu prosessin kolmitilamalli säietasolla ja prosessin tehtäväksi jää toimia resurssien omistajana, eli prosessi ei enää suorita ohjelmaa lainkaan, vaan kaikki suoritus tapahtuu sen sisäisissä säikeissä.
 
[[Luokka:Käyttöjärjestelmä]]