b'\n_START_ARTICLE_\nProcesas (informatika)\n_START_SECTION_\nKontekstin\xc4\x97 jungtis (context switch)\n_START_PARAGRAPH_\nKonteksto perjungimas padeda i\xc5\xa1saugoti ir atkurti procesui, jo konteksto ir procesoriaus b\xc5\xabsen\xc4\x85, kad vykdymas gal\xc4\x97t\xc5\xb3 b\xc5\xabti t\xc4\x99siamas nuo to pa\xc4\x8dio ta\xc5\xa1ko v\xc4\x97liau. Tai leid\xc5\xbeia keliems procesams dalintis vienu (ar keletu) procesori\xc5\xb3. Konteksto perjungimas yra viena i\xc5\xa1 esmini\xc5\xb3 daugiau\xc5\xbeduotin\xc4\x97je operacin\xc4\x97je sistemoje savybi\xc5\xb3. Konteksto perjungimas da\xc5\xbeniausiai imlus resursams, ir jo optimizavimas viena i\xc5\xa1 pagrindini\xc5\xb3 u\xc5\xbeduo\xc4\x8di\xc5\xb3 operacini\xc5\xb3 sistem\xc5\xb3 k\xc5\xabr\xc4\x97jams. Konteksto perjungimas gali reik\xc5\xa1ti registro konteksto perjungim\xc4\x85, u\xc5\xbeduoties konteksto perjungim\xc4\x85, gijos (angl. thread) arba proceso konteksto perjungim\xc4\x85. Kas tai yra kontekstas, apsprend\xc5\xbeia procesorius ir operacin\xc4\x97 sistema. Proces\xc5\xb3 perjungimas u\xc5\xbeima tam tikr\xc4\x85 laik\xc4\x85, reikia atlikti \xc4\xafvairius darbus - i\xc5\xa1saugoti ir u\xc5\xbekrauti registrus ir atminties \xc5\xbeem\xc4\x97lapius, atnaujinti \xc4\xafvairias lenteles, s\xc4\x85ra\xc5\xa1us, ir t. t.\n_START_SECTION_\nKreipini\xc5\xb3 d\xc4\x97klas\n_START_PARAGRAPH_\nKompiuteri\xc5\xb3 moksle kreipini\xc5\xb3 d\xc4\x97klo rinkinys (angl. Call stack) yra duomen\xc5\xb3 rinkinio strukt\xc5\xabra, kuri saugo informacij\xc4\x85 apie aktyvias paprogrames kompiuterin\xc4\x97je programoje. \xc5\xa0is rinkinys taip pat \xc5\xbeinomas, kaip \xc4\xafvykdymo, kontrol\xc4\x97s, funkcijos arba vykdymo laiko (\xe2\x80\x9erun-time\xe2\x80\x9c) d\xc4\x97klas ir da\xc5\xbenai yra sutrumpintas tiesiog iki \xc5\xbeod\xc5\xbeio d\xc4\x97klas (\xe2\x80\x9ethe stack\xe2\x80\x9c). Kreipini\xc5\xb3 d\xc4\x97klo technin\xc4\x97 prie\xc5\xbei\xc5\xabra yra svarbi, kad tinkamai funkcionuot\xc5\xb3 dauguma programin\xc4\x97s \xc4\xafrangos duomen\xc5\xb3, detal\xc4\x97s paprastai yra skaidrios auk\xc5\xa1to lygio programavimo kalbose._NEWLINE_Kreipini\xc5\xb3 d\xc4\x97klo rinkinys yra naudojamas keliems susijusiems tikslams, bet pagrindin\xc4\x97 prie\xc5\xbeastis viena yra steb\xc4\x97ti i\xc5\xa1 ta\xc5\xa1ko, \xc4\xaf kur\xc4\xaf kiekviena aktyvi paprogram\xc4\x97 tur\xc4\x97t\xc5\xb3 gr\xc4\xaf\xc5\xbeti, kontrol\xc4\x99, kai ji baigiama vykdyti. (Aktyvios paprogram\xc4\x97s yra tos, kurios buvo i\xc5\xa1\xc5\xa1auktos, bet dar nebuvo baigtos vykdyti gr\xc4\x85\xc5\xbeinant). Jeigu, pavyzd\xc5\xbeiui, paprogram\xc4\x97 DrawSquare i\xc5\xa1kvie\xc4\x8dia paprogram\xc4\x99 DrawLine i\xc5\xa1 keturi\xc5\xb3 skirting\xc5\xb3 viet\xc5\xb3, DrawLine kodas turi \xc5\xbeinoti keli\xc4\x85, kur gr\xc4\xaf\xc5\xbeti. Tai paprastai daroma kodo pagalba kiekvieno i\xc5\xa1kvietimo metu, viduje \xc4\xafdedant DrawSquar instrukcijos adres\xc4\x85, po tam tikro i\xc5\xa1kvietimo sakinio (\xe2\x80\x9ereturn address\xe2\x80\x9c) ant kreipini\xc5\xb3 d\xc4\x97klo.\n_START_SECTION_\nVaiko procesas\n_START_PARAGRAPH_\nVaiko procesas yra kompiuterio procesas, sukurtas kito proceso (t\xc4\x97vinio proceso)._NEWLINE_Vaiko procesas daugum\xc4\x85 atribut\xc5\xb3 paveldi i\xc5\xa1 t\xc4\x97vinio proceso. UNIX, Linux atveju da\xc5\xbeniausiai vaiko procesas yra sukuriamas kaip t\xc4\x97vinio proceso kopija, naudojant fork komand\xc4\x85, ta\xc4\x8diau naudodamas exec komand\xc4\x85 vaiko procesas gali pakeisti save kita programa._NEWLINE_Kiekvienas procesas gali sukurti daug vaiko proces\xc5\xb3, bet procesas gali tur\xc4\x97ti tik vien\xc4\x85 t\xc4\x97vin\xc4\xaf proces\xc4\x85. Jeigu procesas neturi t\xc4\x97vinio proceso, tai da\xc5\xbeniausiai rei\xc5\xa1kia, kad jis buvo sukurtas branduolio. Kai kuriose sistemose, pvz., UNIX \xc5\xa1eimos sistemose, tokiose kaip Linux, pirmieji procesai (vadinami pirminio paleidimo, angl. init) yra sukuriami branduolio sistemos u\xc5\xbekrovimo metu ir niekada nenutraukiam; kit\xc5\xb3 procesai be t\xc4\x97v\xc5\xb3 da\xc5\xbenai vykdo daemon u\xc5\xbeduotis vartotojo aplinkoje. Procesas gali likti be t\xc4\x97vinio proceso, jeigu jo t\xc4\x97vinio procesas baigia darb\xc4\x85 ir palieka pamest\xc4\x85 proces\xc4\x85, ta\xc4\x8diau tokiu atveju jo t\xc4\x97vinio procesu tampa init.\n_START_SECTION_\nT\xc4\x97vinis procesas\n_START_PARAGRAPH_\nT\xc4\x97vinis procesas yra kompiuterinis procesas, kuris suk\xc5\xabr\xc4\x97 vien\xc4\x85 ar daugiau vaiko proces\xc5\xb3._NEWLINE_Operacin\xc4\x97je sistemoje UNIX, kiekvienas procesas i\xc5\xa1skyrus nulin\xc4\xaf proces\xc4\x85 (kintamasis) yra sukuriamas, kai kitas procesas atlieka \xc5\xa1akut\xc4\x97s sistemos paklausim\xc4\x85 (angl. fork system call). Procesas, kuris taiko \xc5\xa1akut\xc4\x97s proces\xc4\x85 yra t\xc4\x97vinis procesas, o naujai sukurtas procesas yra vaiko procesas. Kiekvienas procesas (i\xc5\xa1skyrus nulin\xc4\xaf proces\xc4\x85) turi tik vien\xc4\x85 t\xc4\x97vin\xc4\xaf proces\xc4\x85, bet gali tur\xc4\x97ti daug vaik\xc5\xb3 proces\xc5\xb3._NEWLINE_Branduolys (angl. kernel) identifikuoja kiekvien\xc4\x85 proces\xc4\x85 prie savo proceso identifikuotojo (PID) (angl. process identifier). Nulinis procesas yra ypatingas procesas, kuris yra sukuriamas kai sistema u\xc5\xbesikrauna; po vaiko proceso i\xc5\xa1si\xc5\xa1akojimo (1 procesas), nulinis procesas tampa kintamuoju procesu. Pirmasis procesas, \xc5\xbeinomas kaip pirminis (angl. init), yra prot\xc4\x97vis kiekvieno kito proceso sistemoje._NEWLINE_Kai vaiko procesas baigia darb\xc4\x85 ir kviesdamas sistemos pabaigos paklausim\xc4\x85 (angl. exitsystem call), sukeldamas lemting\xc4\x85 pabaigos klaid\xc4\x85 (angl. fatal execution error), ar gaudamas darbo pabaigos signal\xc4\x85, i\xc5\xa1\xc4\x97jimo pad\xc4\x97tis yra gr\xc4\x85\xc5\xbeinama \xc4\xaf operacin\xc4\x99 sistem\xc4\x85. T\xc4\x97vinis procesas yra informuojamas apie jo vaiko proceso nutraukim\xc4\x85 per SIGCHLD (SIGCHILD \xe2\x80\x93 vaiko proceso signalas) signal\xc4\x85. T\xc4\x97vinis procesas tipi\xc5\xa1kai atkurs jo vaiko proceso i\xc5\xa1\xc4\x97jimo pad\xc4\x97t\xc4\xaf, kviesdamas laukti sistemos paklausimo. Ta\xc4\x8diau, jei t\xc4\x97vinis procesas nedaro taip, vaiko procesas tampa mirusiu procesu (angl. zombie process).\n_START_SECTION_\nProces\xc5\xb3 bendradarbiavimas\n_START_PARAGRAPH_\nKai procesai komunikuoja tarpusavyje vienas su kitu - tai vadinama "inter-process communication" (IPC) \xe2\x80\x93 bendradarbiavimu. Procesai da\xc5\xbenai s\xc4\x85veikauja tarpusavyje, pavyzd\xc5\xbeiui, vykdant u\xc5\xbeduot\xc4\xaf, pirmojo proceso rezultatas tur\xc4\x97t\xc5\xb3 b\xc5\xabti perduotas antrajam, ir taip toliau. Siekiama, kad tai b\xc5\xabt\xc5\xb3 atliekama tvarkingai ir strukt\xc5\xabri\xc5\xa1kai, o ne naudojant pertraukimus._NEWLINE_Keli\xc5\xb3 proces\xc5\xb3 bendradarbiavimas \xc4\xafmanomas ir jiems veikiant ant skirting\xc5\xb3 kompiuteri\xc5\xb3. Ta\xc4\x8diau kadangi procesai gali veikti skirtingose operacin\xc4\x97se sistemose (OS), da\xc5\xbenai reikalingi tarpininkai (vadinami protokolais), suteikiantys galimyb\xc4\x99 procesams s\xc4\x85veikauti.\n_START_SECTION_\nIstorija\n_START_PARAGRAPH_\n1960-\xc5\xb3j\xc5\xb3 prad\xc5\xbeioje kompiuteri\xc5\xb3 valdymo programin\xc4\x97 \xc4\xafranga patobul\xc4\x97jo, t. y. i\xc5\xa1 monitoriaus programin\xc4\x97s \xc4\xafrangos, pvz., IBSYS, tapo vykdomosios kontrol\xc4\x97s programine \xc4\xafranga. Kompiuteriai tapo greitesni, ta\xc4\x8diau vis tiek kompiuterio darbo laikas nebuvo pilnai i\xc5\xa1naudojamas. To pasekoje atsirado multiprogramavimas._NEWLINE_Multiprogramavimas rei\xc5\xa1kia, kad kelios programos veikia tuo pa\xc4\x8diu metu. I\xc5\xa1 prad\xc5\xbei\xc5\xb3 jos veik\xc4\x97 atskiruose procesoriuose (uniprocessor) naudodami bendrus i\xc5\xa1teklius. V\xc4\x97liau atsirado daugiaprocesis veikimas, kuris yra bendresn\xc4\x97 multiprogramavimo forma._NEWLINE_Programa, tai instrukcij\xc5\xb3 seka procesoriui. Vienas procesorius gali vykdyti tik vien\xc4\x85 instrukcij\xc4\x85 vienu metu. Tod\xc4\x97l ne\xc4\xafmanoma vykdyti daugiau program\xc5\xb3 tuo pat metu. Taip pat programai gali reik\xc4\x97ti kai kuri\xc5\xb3 i\xc5\xa1tekli\xc5\xb3 (\xc4\xafvesties), kuris ilgai u\xc5\xbetrunka. Jeigu programa pradeda ka\xc5\xbekoki\xc4\x85 l\xc4\x97t\xc4\x85 operacij\xc4\x85, pvz., spausdina, ji tuo metu nenaudoja procesoriaus, bet laiko j\xc4\xaf u\xc5\xbeimt\xc4\x85. Kad efektyviau i\xc5\xa1naudoti procesori\xc5\xb3, programa l\xc4\x97tos operacijos metu sustabdoma, ir procesori\xc5\xb3 gali naudoti kita programa. Tuo tarpu vartotojui susidaro \xc4\xafsp\xc5\xabdis, kad programos buvo vykdomos tuo pa\xc4\x8diu metu._NEWLINE_Netrukus po to, s\xc4\x85voka \xe2\x80\x9eprograma\xe2\x80\x9c buvo i\xc5\xa1pl\xc4\x97tota \xc4\xaf \xe2\x80\x9evykdan\xc4\x8diosios programos s\xc4\x85vok\xc4\x85 ir jos kontekst\xc4\x85\xe2\x80\x9c, t. y. pasi\xc5\xablyta proceso koncepcija. Tai tapo b\xc5\xabtina prad\xc4\x97jus naudoti paprogrames._NEWLINE_Gijos atsirado \xc5\xa1iek tiek v\xc4\x97liau. Atsiradus laiko paskirstymui, kompiuteri\xc5\xb3 tinklams, daugialypiams centriniams procesoriams, bendrosios atminties kompiuteriais ir pan., multiprogramavim\xc4\x85 pakeit\xc4\x97 daugiaprogramis modelis, po to daugiaprocesis, ir galiausiai multigijos.'