Procesas (informatika)

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
Peršokti į: navigaciją, paiešką

Procesas (informatika) (angl. process) - iš anksto apibrėžta konkrečios programos arba kokios nors jos dalies vykdymo metu įvykstančių įvykių seka.[1]

Pati kompiuterio programa yra tiktai statinis instrukcijų rinkinys, tuo tarpu procesas yra aktualus šių instrukcijų vykdymas. Keletas procesų gali būti siejami su ta pačia programa. Pvz., kelių langų atidarymas toje pačioje programoje paprastai reiškia kelių skirtingų procesų vykdymą. Kompiuterijoje procesus formaliai apibrėžia operacinė sistema, juos ji vykdo ir skirtingose operacinėse sistemose tam tikromis detalėmis gali skirtis.

Vienas atskiras kompiuterio procesorius vienu metu vykdo tik vieną instrukciją (paprastą arba sudėtinę), jas visas vykdydamas vieną po kitos. Norint leisti naudotojui vykdyti keletą programų tuo pačiu metu (kai procesorius yra priverstas laukti tam tikrų resursų), vieno procesoriaus kompiuterinės sistemos paprastai naudoja laiko paskirstymą. Toks laiko paskirstymas leidžia laikas nuo laiko persijungti į kelių procesų vykdymą juos vis pratęsiant. Dažniausiai tai vyksta labai greitai, todėl atrodo, kad keli procesai vykdomi „vienu metu“. (Tai yra vadinama vienalaikiškumu arba multiprogramavimu) Naudojant daugiau nei vieną kompiuterio procesorių, atliekamas tikras vienalaikis skirtingų procesų instrukcijų apdorojimas, nors ir šiuo atveju paprastai taip pat yra naudojamas laiko paskirstymas, kad būtų užtikrintas didesnio procesų kiekio vykdomų „vienu metu“ kiekis nei turimų procesorių kiekis.

Dėl saugumo ir patikimumo daugelis šiuolaikinių operacinių sistemų draudžia tiesioginį ryšį tarp „nepriklausomų“ procesų ir tik leidžią griežtai apibrėžtą ir kontroliuojamą tokių procesų tarpusavio ryšį.

Po-procesai ir daugiasrautis režimas[taisyti | redaguoti kodą]

Pagrindinis straipsnis – Daugiasrautis režimas.

Procesai gali būti padalinti į „dukterinius“ po-prococesus arba srautus vykdomus lygiagrečiai, kurių vykdymo metu apdorojamos skirtingos instrukcijos ir naudojami tie patys resursai bei duomenys (arba, kitu atveju, tos pačios instrukcijos naudojant logiškai skirtingus resursus ir duomenis).

Daugiasrautis apdorojimas leidžia apdoroti įvairius „įvykius“ įvykusius tam tikra tvarka ir kurie turi būti apdoroti tam tikra galbūt kita tvarka nei jie įvyko, pvz., priklausomai nuo reikalingo atsakymo laiko. Daugiasrautiškumas leidžia laikinai sustabdyti tam tikrų įvykių apdorojimą tam, kad būtų apdoroti aukštesnį prioritetą turintys įvykiai.

Daugiasrautis apdorojimas leidžia serveriams, tokiems kaip interneto serveriai, apdoroti vartotojų užklausas lygiagrečiai.

Procesai yra dažnai vadinami užduotimis įterptosiose operacinėse sistemose. Proceso reikšmė yra 'tas kas užima šiek tiek laiko', palygintus su atminties reikšme 'užima vietos'. (Istoriškai terminai 'užduotis' ir 'procesai' buvo naudojami tarpusavį, tačiau terminas 'užduotis' pradeda nykti iš kompiuterio terminų žodyno.)

Anksčia naudoti aprašymai galioja procesams valdomiems operacinės sistemos, ir apibūdintiems procesams Procesų Algebroje.

Jeigu procesas užklausia ko nors, dėl ko jis turi palaukti, procesas yra užblokuojamas. Kai proceso būsena yra užblokuota, atitinkamai persijungiama į diską, bet visa tai yra atvira virtualios atminties sistemoje, kur tam tikri atminties reikšmių blokai gali būti diske, o ne pagrindinėje atmintyje. Pastaba: Nenaudojamos aktyvių procesų/užduočių dalys(vykdomos programos) atitinkamai persikelia į diską. Visos vykdomos programos dalys ir jos duomenys neprivalo būti fizinėje atmintinėje, kad susietas procesas būtų vykdomas/aktyvus.

______________________

  • Užduotys ir procesai priklauso tai pačiai esybei. Nors ir jie turi skirtingas terminologines istorijas, jie yra naudojami kaip sinonimai. Šiandien labiau priimtinas terminas yra užduotis.

Kontekstinė jungtis (context switch)[taisyti | redaguoti kodą]

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[taisyti | redaguoti kodą]

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[taisyti | redaguoti kodą]

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.

Planavimo (indeksas)[taisyti | redaguoti kodą]

Planavimas yra pagrindinė sąvoka daugiaprogramių kompiuterių režime, skyrime, apdorojantis operacinę sistemą ir skubiai atliekamus operacinius sistemos projektus. Planavimas remiasi būdu, kurio procesas yra paskirtas vykdyti turimą CPU, nes jie daug geriau veikia kai ten yra CPU. Ši užduotis yra atlikta programinių įrangų, žinomų kaip sąrašo ir dispečerio.

Sąrašas yra susijęs daugiausia su:

  • CPU – kad sulaikytų CPU tiek užimtą, kiek įmanoma.
  • Pralaidumas – skaičius procesų, kurie baigia savo vykdymą per laiko vienetą.
  • Laikotarpis – visas laikas tarp proceso pateikimo ir jo baigimo.
  • Laukimo laikas - kai laiko procesas jau laukia pasirengęs eilėje.
  • Reakcijos laikas - tai trunka nuo tada, kai prašymas buvo pateiktas iki tada kai buvo pradėtas vykdyti pirmas atsakymas.
  • Sąžiningumas - Vienodas CPU laikas kiekvienam pokalbiui.

Realių laikų aplinkose, pavyzdžiui, mobiliųjų prietaisų, automatinio valdymo pramonėje (pavyzdžiui, robotų), sąrašuose taip pat turi užtikrinti, kad procesai atitinka terminus, tai yra labai svarbu stabiliai palaikymo sistemai. Numatytos užduotys yra siunčiamos į mobiliuosius įrenginius ir tvarkomos per kitus administracinius galus.

Tėvinis procesas[taisyti | redaguoti kodą]

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[taisyti | redaguoti kodą]

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[taisyti | redaguoti kodą]

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.

Procesų būsenos[taisyti | redaguoti kodą]

Operacinės sistemos branduolys “kernel” leidžia atlikti kelias užduotis vienu metu. Šis procesas turi tam tikras būsenas. Šių būsenų vardai yra nestandartizuoti, bet jie yra panašios paskirties.

  1. Pirmasis procesas yra „sukūrimas“ – jis yra leidžiamas iš antrinės atminties įrenginių (standžiojo disko, CD-ROM ir kt.) į operatyvinę atmintį. Po šio proceso jis yra pristabdomas – įgauna "laukimo" būseną.
  2. Kol procesas yra „laukimo“ būsenoje, jis laukia kol gaus signalą ir bus paleistas į procesorių. Procesas tampa „vykdomas“, kai procesorius ima vykdyti šią komanda.
  3. Jei procesas turi laukti (vartotojo įvesties ar kol atsidarys failas), procesas įgauna būseną - „blokuojamas“. Proceso būsena pakeičiama atgal į „laukimo“, kai šis procesas yra baigiamas.
  4. Kai procesas baigiamas arba operacinė sistema nutraukia jo darbą, jis yra nebereikalingas. Todėl jis iškart yra pašalinamas arba įgauna būseną „sunaikintas“. Kai šis procesas įgauna būseną „sunaikintas“, jis tiesiog laukia, kol bus pašalintas iš operatyvinės atminties.

Taip pat skaitykite[taisyti | redaguoti kodą]

Nuorodos[taisyti | redaguoti kodą]

  1. LST ISO 2382-1: 1996. Informacijos technologija. Terminai ir apibrėžimai. 1-oji dalis. Pagrindiniai terminai. Lietuvos standartizacijos departamentas. 1996. 33 ps.