Procesas (informatika)

Kontekstinė jungtis (context switch)

Konteksto perjungimas padeda išsaugoti ir atkurti procesui, jo konteksto ir procesoriaus būseną, kad vykdymas galėtų būti tęsiamas nuo to pačio taško vėliau. Tai leidžia keliems procesams dalintis vienu (ar keletu) procesorių. Konteksto perjungimas yra viena iš esminių daugiaužduotinėje operacinėje sistemoje savybių. Konteksto perjungimas dažniausiai imlus resursams, ir jo optimizavimas viena iš pagrindinių užduočių operacinių sistemų kūrėjams. Konteksto perjungimas gali reikšti registro konteksto perjungimą, užduoties konteksto perjungimą, gijos (angl. thread) arba proceso konteksto perjungimą. Kas tai yra kontekstas, apsprendžia procesorius ir operacinė sistema. Procesų perjungimas užima tam tikrą laiką, reikia atlikti įvairius darbus - išsaugoti ir užkrauti registrus ir atminties žemėlapius, atnaujinti įvairias lenteles, sąrašus, ir t. t.

Kreipinių dėklas

Kompiuterių moksle kreipinių dėklo rinkinys (angl. Call stack) yra duomenų rinkinio struktūra, kuri saugo informaciją apie aktyvias paprogrames kompiuterinėje programoje. Šis rinkinys taip pat žinomas, kaip įvykdymo, kontrolės, funkcijos arba vykdymo laiko („run-time“) dėklas ir dažnai yra sutrumpintas tiesiog iki žodžio dėklas („the stack“). Kreipinių dėklo techninė priežiūra yra svarbi, kad tinkamai funkcionuotų dauguma programinės įrangos duomenų, detalės paprastai yra skaidrios aukšto lygio programavimo kalbose.
Kreipinių dėklo rinkinys yra naudojamas keliems susijusiems tikslams, bet pagrindinė priežastis viena yra stebėti iš taško, į kurį kiekviena aktyvi paprogramė turėtų grįžti, kontrolę, kai ji baigiama vykdyti. (Aktyvios paprogramės yra tos, kurios buvo iššauktos, bet dar nebuvo baigtos vykdyti grąžinant). Jeigu, pavyzdžiui, paprogramė DrawSquare iškviečia paprogramę DrawLine iš keturių skirtingų vietų, DrawLine kodas turi žinoti kelią, kur grįžti. Tai paprastai daroma kodo pagalba kiekvieno iškvietimo metu, viduje įdedant DrawSquar instrukcijos adresą, po tam tikro iškvietimo sakinio („return address“) ant kreipinių dėklo.

Vaiko procesas

Vaiko procesas yra kompiuterio procesas, sukurtas kito proceso (tėvinio proceso).
Vaiko procesas daugumą atributų paveldi iš tėvinio proceso. UNIX, Linux atveju dažniausiai vaiko procesas yra sukuriamas kaip tėvinio proceso kopija, naudojant fork komandą, tačiau naudodamas exec komandą vaiko procesas gali pakeisti save kita programa.
Kiekvienas procesas gali sukurti daug vaiko procesų, bet procesas gali turėti tik vieną tėvinį procesą. Jeigu procesas neturi tėvinio proceso, tai dažniausiai reiškia, kad jis buvo sukurtas branduolio. Kai kuriose sistemose, pvz., UNIX šeimos sistemose, tokiose kaip Linux, pirmieji procesai (vadinami pirminio paleidimo, angl. init) yra sukuriami branduolio sistemos užkrovimo metu ir niekada nenutraukiam; kitų procesai be tėvų dažnai vykdo daemon užduotis vartotojo aplinkoje. Procesas gali likti be tėvinio proceso, jeigu jo tėvinio procesas baigia darbą ir palieka pamestą procesą, tačiau tokiu atveju jo tėvinio procesu tampa init.

Tėvinis procesas

Tėvinis procesas yra kompiuterinis procesas, kuris sukūrė vieną ar daugiau vaiko procesų.
Operacinėje sistemoje UNIX, kiekvienas procesas išskyrus nulinį procesą (kintamasis) yra sukuriamas, kai kitas procesas atlieka šakutės sistemos paklausimą (angl. fork system call). Procesas, kuris taiko šakutės procesą yra tėvinis procesas, o naujai sukurtas procesas yra vaiko procesas. Kiekvienas procesas (išskyrus nulinį procesą) turi tik vieną tėvinį procesą, bet gali turėti daug vaikų procesų.
Branduolys (angl. kernel) identifikuoja kiekvieną procesą prie savo proceso identifikuotojo (PID) (angl. process identifier). Nulinis procesas yra ypatingas procesas, kuris yra sukuriamas kai sistema užsikrauna; po vaiko proceso išsišakojimo (1 procesas), nulinis procesas tampa kintamuoju procesu. Pirmasis procesas, žinomas kaip pirminis (angl. init), yra protėvis kiekvieno kito proceso sistemoje.
Kai vaiko procesas baigia darbą ir kviesdamas sistemos pabaigos paklausimą (angl. exitsystem call), sukeldamas lemtingą pabaigos klaidą (angl. fatal execution error), ar gaudamas darbo pabaigos signalą, išėjimo padėtis yra grąžinama į operacinę sistemą. Tėvinis procesas yra informuojamas apie jo vaiko proceso nutraukimą per SIGCHLD (SIGCHILD – vaiko proceso signalas) signalą. Tėvinis procesas tipiškai atkurs jo vaiko proceso išėjimo padėtį, kviesdamas laukti sistemos paklausimo. Tačiau, jei tėvinis procesas nedaro taip, vaiko procesas tampa mirusiu procesu (angl. zombie process).

Procesų bendradarbiavimas

Kai procesai komunikuoja tarpusavyje vienas su kitu - tai vadinama "inter-process communication" (IPC) – bendradarbiavimu. Procesai dažnai sąveikauja tarpusavyje, pavyzdžiui, vykdant užduotį, pirmojo proceso rezultatas turėtų būti perduotas antrajam, ir taip toliau. Siekiama, kad tai būtų atliekama tvarkingai ir struktūriškai, o ne naudojant pertraukimus.
Kelių procesų bendradarbiavimas įmanomas ir jiems veikiant ant skirtingų kompiuterių. Tačiau kadangi procesai gali veikti skirtingose operacinėse sistemose (OS), dažnai reikalingi tarpininkai (vadinami protokolais), suteikiantys galimybę procesams sąveikauti.

Istorija

1960-ųjų pradžioje kompiuterių valdymo programinė įranga patobulėjo, t. y. iš monitoriaus programinės įrangos, pvz., IBSYS, tapo vykdomosios kontrolės programine įranga. Kompiuteriai tapo greitesni, tačiau vis tiek kompiuterio darbo laikas nebuvo pilnai išnaudojamas. To pasekoje atsirado multiprogramavimas.
Multiprogramavimas reiškia, kad kelios programos veikia tuo pačiu metu. Iš pradžių jos veikė atskiruose procesoriuose (uniprocessor) naudodami bendrus išteklius. Vėliau atsirado daugiaprocesis veikimas, kuris yra bendresnė multiprogramavimo forma.
Programa, tai instrukcijų seka procesoriui. Vienas procesorius gali vykdyti tik vieną instrukciją vienu metu. Todėl neįmanoma vykdyti daugiau programų tuo pat metu. Taip pat programai gali reikėti kai kurių išteklių (įvesties), kuris ilgai užtrunka. Jeigu programa pradeda kažkokią lėtą operaciją, pvz., spausdina, ji tuo metu nenaudoja procesoriaus, bet laiko jį užimtą. Kad efektyviau išnaudoti procesorių, programa lėtos operacijos metu sustabdoma, ir procesorių gali naudoti kita programa. Tuo tarpu vartotojui susidaro įspūdis, kad programos buvo vykdomos tuo pačiu metu.
Netrukus po to, sąvoka „programa“ buvo išplėtota į „vykdančiosios programos sąvoką ir jos kontekstą“, t. y. pasiūlyta proceso koncepcija. Tai tapo būtina pradėjus naudoti paprogrames.
Gijos atsirado šiek tiek vėliau. Atsiradus laiko paskirstymui, kompiuterių tinklams, daugialypiams centriniams procesoriams, bendrosios atminties kompiuteriais ir pan., multiprogramavimą pakeitė daugiaprogramis modelis, po to daugiaprocesis, ir galiausiai multigijos.