b'\n_START_ARTICLE_\nProsessi (tietotekniikka)\n_START_PARAGRAPH_\nTietotekniikassa prosessi on tietokoneessa ajossa oleva ohjelma. Jokaisella prosessilla on yleens\xc3\xa4 k\xc3\xa4yt\xc3\xb6ss\xc3\xa4 oma muistialue ja muita resursseja, joihin muut prosessit eiv\xc3\xa4t p\xc3\xa4\xc3\xa4se k\xc3\xa4siksi. Useimmat k\xc3\xa4ytt\xc3\xb6j\xc3\xa4rjestelm\xc3\xa4t yll\xc3\xa4pit\xc3\xa4v\xc3\xa4t n\xc3\xa4it\xc3\xa4 tietoja prosessitaulussa. Eri prosessit voivat kommunikoida kesken\xc3\xa4\xc3\xa4n lukuisilla menetelmill\xc3\xa4. Usein prosessit koostuvat yhdest\xc3\xa4 tai useammasta s\xc3\xa4ikeest\xc3\xa4._NEWLINE_Typistetysti voidaan esitt\xc3\xa4\xc3\xa4 prosessille kolme eri tilaa. Sit\xc3\xa4 voidaan suorittaa (engl. running), se voi olla valmiustilassa (engl. ready, ready to run, suspended), tai odottavana/nukkuvana (engl. wait, blocked, asleep). Odotustilassa oleva prosessi voi odottaa mit\xc3\xa4 tahansa tapahtumaa, kuten esimerkiksi oheislaitteen toimintaa, viesti\xc3\xa4 toiselta prosessilta tai ajan kulumista._NEWLINE_Prosessi siirtyy valmiustilasta suoritustilaan siten, ett\xc3\xa4 k\xc3\xa4ytt\xc3\xb6j\xc3\xa4rjestelm\xc3\xa4n ytimen osa vuorontaja (engl. scheduler, dispatcher) valitsee sen suoritukseen. Odotustilaan prosessi siirtyy, jos se tekee sellaisen j\xc3\xa4rjestelm\xc3\xa4kutsun (engl. system call), jota k\xc3\xa4ytt\xc3\xb6j\xc3\xa4rjestelm\xc3\xa4 ei voi suorittaa heti loppuun asti. T\xc3\xa4llainen kutsu voi olla vaikkapa lukupyynt\xc3\xb6 oheislaitteelta kuten levylt\xc3\xa4, jos haluttua tietoa ei ole jo keskusmuistissa (puskuroinnin takia tieto voi olla keskusmuistissa valmiina, jolloin pyynt\xc3\xb6 voidaan hoitaa heti loppuun asti, eik\xc3\xa4 tilasiirtym\xc3\xa4\xc3\xa4 tehd\xc3\xa4). Kun odottaminen p\xc3\xa4\xc3\xa4ttyy, prosessi siirtyy valmiustilaan, ja kierros alkaa alusta. Jos j\xc3\xa4rjestelm\xc3\xa4ss\xc3\xa4 on irrottava (engl. pre-emptive) vuoronnus, prosessi voi siirty\xc3\xa4 my\xc3\xb6s suoritustilasta valmiustilaan._NEWLINE_Vaihtaessaan s\xc3\xa4iett\xc3\xa4 tai prosessia toiseen vuorontaja k\xc3\xa4ytt\xc3\xa4\xc3\xa4 jotain vuoronnusmenetelm\xc3\xa4\xc3\xa4. Menetelm\xc3\xa4st\xc3\xa4 riippuu hyvin pitk\xc3\xa4lle se, mik\xc3\xa4 odottavista prosesseista valitaan ajoon. Menetelmi\xc3\xa4 ovat muun muassa kiinte\xc3\xa4 prioriteetti (engl. fixed priority) (usein liitettyn\xc3\xa4 irrottavaan vuoronnukseen, engl. fixed priority pre-emptive scheduling, FPPE), vaihteleva prioriteetti (engl. dynamic priority) (useita erilaisia tapoja vaihtaa prioriteettia), lyhyin teht\xc3\xa4v\xc3\xa4 ensin (engl. shortest remaining time, SRT), l\xc3\xa4hin m\xc3\xa4\xc3\xa4r\xc3\xa4aika ensin (engl. earliest deadline first, EDF), jonomenetelm\xc3\xa4 (engl. first in, first out, FIFO, my\xc3\xb6s first come, first served, FCFS) ja sen l\xc3\xa4hisukulainen kiertovuorottelu (engl. round robin, RR). Vain osa vuoronnusmenetelmist\xc3\xa4 sopii reaaliaikaiseen vuoronnukseen (engl. real-time scheduling)._NEWLINE_Vuoronnus voidaan toteuttaa kokonaan k\xc3\xa4ytt\xc3\xb6j\xc3\xa4rjestelm\xc3\xa4n ytimess\xc3\xa4, mutta k\xc3\xa4yt\xc3\xb6ss\xc3\xa4 on my\xc3\xb6s kaksitasoisia ratkaisuja, joissa ytimen osa tyypillisesti hoitaa reaaliaikaista vuoronnusta ja muiden prosessien osalta esivalinnan tekee erillinen prosessi._NEWLINE_Unix-k\xc3\xa4ytt\xc3\xb6j\xc3\xa4rjestelm\xc3\xa4ss\xc3\xa4 ja siit\xc3\xa4 vaikutteita ottaneissa k\xc3\xa4ytt\xc3\xb6j\xc3\xa4rjestelmiss\xc3\xa4 prosessien v\xc3\xa4lill\xc3\xa4 on is\xc3\xa4-lapsisuhde.  Prosessi, joka k\xc3\xa4ynnist\xc3\xa4\xc3\xa4 toisen prosessin, on k\xc3\xa4ynnistetyn prosessin is\xc3\xa4prosessi. Vastaavasti prosessin k\xc3\xa4ynnist\xc3\xa4m\xc3\xa4t prosessit ovat sen lapsiprosesseja. Kaikki prosessit ovat joko suoraan tai v\xc3\xa4lillisesti init-prosessin j\xc3\xa4lkel\xc3\xa4isi\xc3\xa4. Init-prosessin prosessinumero on aina 1, ja k\xc3\xa4ytt\xc3\xb6j\xc3\xa4rjestelm\xc3\xa4 k\xc3\xa4ynnist\xc3\xa4\xc3\xa4 sen ennen muita prosesseja. Uusi prosessi luodaan fork-kutsulla, joka kahdentaa k\xc3\xa4ynniss\xc3\xa4 olevan prosessin. Suoritettava ohjelma vaihdetaan erillisell\xc3\xa4 kutsulla (exec). Kun prosessi p\xc3\xa4\xc3\xa4ttyy, se ilmoittaa onnistumistiedon is\xc3\xa4prosessilleen. Jos is\xc3\xa4prosessi on jo p\xc3\xa4\xc3\xa4ttynyt, prosessi on orpo ja lopetustieto menee init-prosessille, joka ei kuole ennen kuin k\xc3\xa4ytt\xc3\xb6j\xc3\xa4rjestelm\xc3\xa4 pys\xc3\xa4ytet\xc3\xa4\xc3\xa4n._NEWLINE_Kaikissa k\xc3\xa4ytt\xc3\xb6j\xc3\xa4rjestelmiss\xc3\xa4 ei is\xc3\xa4-lapsisuhdetta ole prosessien v\xc3\xa4lill\xc3\xa4 (n\xc3\xa4in esimerkiksi Windows-k\xc3\xa4ytt\xc3\xb6j\xc3\xa4rjestelm\xc3\xa4ss\xc3\xa4). Prosessin luonti ja ohjelmakoodin vaihto ei my\xc3\xb6sk\xc3\xa4\xc3\xa4n ole aina kaksivaiheinen, vaan voi tapahtua yhdell\xc3\xa4 kutsulla.\n_START_SECTION_\nS\xc3\xa4ie\n_START_PARAGRAPH_\nNykyk\xc3\xa4ytt\xc3\xb6j\xc3\xa4rjestelm\xc3\xa4t tukevat usein perinteist\xc3\xa4 prosessia kevyemp\xc3\xa4\xc3\xa4 prosessia, s\xc3\xa4iett\xc3\xa4 (engl. thread, task, light-weight process). S\xc3\xa4ie eroaa prosessista siten, ett\xc3\xa4 sill\xc3\xa4 ei ole omia resursseja, vaan se k\xc3\xa4ytt\xc3\xa4\xc3\xa4 sen prosessin resursseja, johon se kuuluu. Yhdess\xc3\xa4 prosessissa on silloin yksi tai useampia s\xc3\xa4ikeit\xc3\xa4._NEWLINE_S\xc3\xa4ikeet voidaan toteuttaa k\xc3\xa4ytt\xc3\xb6j\xc3\xa4rjestelm\xc3\xa4n ytimess\xc3\xa4 etuoikeutetussa tilassa (engl. kernel, supervisor) tai k\xc3\xa4ytt\xc3\xa4j\xc3\xa4tilassa (engl. user) prosessin osana.  J\xc3\xa4lkimm\xc3\xa4inen vaihtoehto tarkoittaa sit\xc3\xa4, ett\xc3\xa4 prosessin sis\xc3\xa4ll\xc3\xa4 on vuorontaja, joka p\xc3\xa4\xc3\xa4tt\xc3\xa4\xc3\xa4, mik\xc3\xa4 sen sis\xc3\xa4isist\xc3\xa4 s\xc3\xa4ikeist\xc3\xa4 on ajossa. T\xc3\xa4m\xc3\xa4n vaihtoehdon varjopuoli on se, ett\xc3\xa4 jos yksi s\xc3\xa4ie tekee k\xc3\xa4ytt\xc3\xb6j\xc3\xa4rjestelm\xc3\xa4pyynn\xc3\xb6n, joka edellytt\xc3\xa4\xc3\xa4 odottamista (esimerkiksi lukee tiedostoa), kaikki prosessin s\xc3\xa4ikeet pys\xc3\xa4htyv\xc3\xa4t odottamaan, koska yll\xc3\xa4 kuvattu kolmitilamalli on toteutettu vain prosessin tasolla. Jos s\xc3\xa4ikeet on toteutettu k\xc3\xa4ytt\xc3\xb6j\xc3\xa4rjestelm\xc3\xa4ss\xc3\xa4, toteutuu kolmitilamalli s\xc3\xa4ietasolla ja prosessin teht\xc3\xa4v\xc3\xa4ksi j\xc3\xa4\xc3\xa4 toimia resurssien omistajana, eli prosessi ei en\xc3\xa4\xc3\xa4 suorita ohjelmaa lainkaan, vaan kaikki suoritus tapahtuu sen sis\xc3\xa4isiss\xc3\xa4 s\xc3\xa4ikeiss\xc3\xa4. T\xc3\xa4ss\xc3\xa4 tapauksessa yhden s\xc3\xa4ikeen tekem\xc3\xa4 odottamista vaativa pyynt\xc3\xb6 ei pys\xc3\xa4yt\xc3\xa4 muita s\xc3\xa4ikeit\xc3\xa4._NEWLINE_Nykyisiss\xc3\xa4 prosessoreissa on tuki monis\xc3\xa4ikeistykselle, jolloin yksitt\xc3\xa4inen ydin voi moniajaa s\xc3\xa4ikeit\xc3\xa4 tehokkaammin.'