Գործընթաց (ինֆորմատիկա)

մինի|Ժամանակակից օպերացիոն համակարգերում պրոցեսների կարգավիճակները։
**Գործընթաց**, համակարգչային ծրագրի պասիվ հրահանգների կատարում համակարգչային պրոցեսորի վրա։ Ստանդարտ ISO 9000:2000 Definitions֊ը սահմանում է **գործընթացը** որպես փոխկապակցված և փոխազդող գործողությունների մի շարք, որոնք փոխակերպում են մուտքային տվյալները ելքային տվյալների։

Համակարգչային ծրագիրն ինքնին հրահանգների պասիվ հաջորդականություն է։ Մինչդեռ գործընթացը այս հրահանգների ուղղակի կատարումն է։

Նաև գործընթաց է կոչվում գործող ծրագիրը և նրա բոլոր տարրերը՝ հասցեների տարածք, գլոբալ փոփոխականներ, ռեգիստրներ, ստեկ, բաց ֆայլեր և այլն։

## Գործընթացի ներկայացում
Սովորաբար, համակարգչային համակարգում գործընթացը ներկայացված է (նաեւ ասում են, որ այն "տիրապետում է") հետեւյալ ռեսուրսներով.

* համակարգչային ծրագրի հետ կապված գործարկվող մեքենայական կոդի տեսքով,
* հիշողությամբ (սովորաբար վիրտուալ հիշողության որոշակի տարածքով), որը ներառում է՝
** գործարկվող կոդ,
** գործընթացի մուտքային եւ ելքային տվյալները,
** կանչերի ստեկ (ակտիվ ենթածրագրերին հետևելու համար),
** կատարման ընթացքում առաջացած հաշվարկների միջանկյալ արդյունքների պահպանման համար կույտ,
* օպերացիոն համակարգի ռեսուրսների նկարագրիչներով,որոնք հատկացված են գործընթացին, օրինակ՝ ֆայլ
* ֆայլի նկարագրիչներով (Unix օպերացիոն համակարգի տերմինաբանությունում)
* անվտանգության հատկանիշներով,  ինչպիսիք են օգտատերը եւ գործընթացի լիազորությունների հավաքածուն (թույլատրելի գործողությունները),
* պրոցեսորի վիճակով (կոնտեքստով), ինչպիսիք են՝
** ռեգիստրների բովանդակությունը,
** վիրտուալ հասցեները ֆիզիկական հասցեներ վերածելու սխեման,
** և այլն,

: Ներկայիս գործընթացի համատեքստը ներբեռնվում է հիշողության մեջ, երբ անցում է կատարվում մեկ այլ գործընթացի։

Օպերացիոն համակարգը պահում է գործընթացների մասին տեղեկատվության մեծ մասը գործընթացների աղյուսակում։

Օպերացիոն համակարգերում, որոնք ապահովվում են կատարման հոսքեր, հոսքերը նույնպես ունեն իրենց սեփական ռեսուրսները։ Սովորաբար դա միայն պրոցեսորի վիճակն է, թեև հոսքերը կարող են օգտագործել նաև այլ ռեսուրսներ։

Որպեսզի նվազեցվի գործընթացների ազդեցության հավանականությունը միմյանց վրա և համակարգի (օրինակ՝ փոխադարձ արգելափակումներ կամ խափանումներ) Օպերացիոն համակարգը ապահովում է գործընթացի մեկուսացում և հատկացնում է նրանց անհրաժեշտ ռեսուրսները։ Օպերացիոն համակարգը նաև ապահովում է գործընթացների փոխգործակցության անվտանգ և կանխատեսելի եղանակներով հաղորդակցվելու մեխանիզմներ։

### Գործընթացի ներկայացում հիշողության մեջ
մինի|Ծրագրի ներկայացումը հիշողության մեջ օգտագործողի տարածքում
Այս բաժնում ներկայացված է Լինուքս օպերացիոն համակարգի և x86 ճարտարապետության հիշողության գործընթացը։ Այս տեսակետը քիչ է տարբերվում բազմաթիվ այլ բազմաֆունկցիոնալ օպերացիոն համակարգերից և կառուցվածքներից(արխիտեկտուրա)։ Օրինակ, amd64-ում, որը x86-ի ժառանգն է, զանգերի շարքը նույն կերպ աճում է վերևից ներքև, բայց հասցեային տարածքի չափը մեծացել է մինչև 248 բայթ: Լինուքսը հիշողության հարթ մոդել է օգտագործում, և այդ պատճառով այս կառուցվածքի մեջ յուրաքանչյուր գործընթաց ունի 232 բայթ հիշողություն։ Ամբողջ վիրտուալ հիշողությունը բաժանված է օգտագործողի տարածության և միջուկի տարածության։ Միջուկի տարածքը զբաղեցնում է մեկ գիգաբայթ հիշողություն՝ սկսած ամենաբարձր հասցեից։ Մնացած տարածքը, այսինքն՝ երեք գիգաբայթ, հատկացված է օգտատերի տարածքին։

Աջ կողմում պատկերված է ցանկացած գործընթացի օգտագործողի տարածքը։ Միջուկի տարածությունը նույնն է բոլոր գործընթացների համար, քանի որ օպերացիոն համակարգում կարող է գոյություն ունենալ միջուկի միայն մեկ օրինակ։ Ծրագիրը գործարկելուց հետո օպերատիվ հիշողության մեջ ներմուծվում են պրոցեսորի հրամանները (մեքենային կոդը) և նախապատրաստած տվյալները։ Միևնույն ժամանակ, ավելի բարձր հասցեները ներմուծում են գործարկման փաստարկները(առգումենտները), ինչպես նաև միջավայրի փոփոխականները։ Տվյալների նախապատրաստման տարածքում պահպանվում են միայն ընթերցման համար հասանելի տվյալներ։ Դրանք կարող են լինել, օրինակ, տողային տառեր։

Ոչ նախապատրաստված տվյալների տարածքում, որպես կանոն, պահպանվում են գլոբալ փոփոխականներ։

Կույտը օգտագործվում է ծրագրի գործարկման ընթացքում հիշողություն հատկացնելու համար։ Լինուքսում դրա համար կա համակարգային կանչ `mmap`.

Սթեքի տարածքը օգտագործվում է ընթացակարգեր կանչելու համար։

Կարևոր մանրամասնություն է նաև այն, որ ստեկի և վերին շրջանի միջև, ինչպես նաև նախաձեռնված տվյալների շրջանի և կույտի միջև պատահական հետընթաց կա։ Դա արվում է անվտանգության նպատակներով, օրինակ՝ կանխելու համար այլ գործառույթների տեղադրումը։

Դինամիկ կապի գրադարանները և ֆայլերի քարտեզագրումները գտնվում են ստեկի և կույտի միջև։

## Գործընթացների դասակարգումը
Բազմաֆունկցիոնալ օպերացիոն համակարգերում հնարավոր     դարձավ աշխատել միաժամանակ մի քանի գործընթացների հետ։ Կանխարգելիչ բազմաֆունկցիոնալությամբ օպերացիոն համակարգերը հնարավորություն տվեցին հասնել միաժամանակ մի քանի գործընթացների աշխատանքի:Դա պահանջում էր բազմաթիվ գործընթացներ կառավարելու միջոցներ։

### Unix
Unix` առաջին բազմաֆունկցիոնալ ՕՀ-երից մեկը։ Յուրաքանչյուր գործընթաց ունի եզակի թվային PID: Գործընթացները դրա մեջ ունեն ծառի նման հիերարխիա, որտեղ արմատը PID 1-ով սկզբնական գործընթացն է։ Նոր պրոցեսը կարող է ստեղծվել `fork` համակարգային կանչով, դա կլինի ծնող գործընթացի ճշգրիտ պատճենը։ Ցանկացած պրոցես, բացի init-ից, միշտ ունի ծնողական պրոցես (PPID ատրիբուտ (անգլ.՝ Parent PID)); այն գործընթացները, որոնց ծնողը ավարտել է իր աշխատանքը, դառնում են init-ի դուստր գործընթացներ։

Գործընթացները իրենց հերթին միավորվում են **խմբերի**. Խմբի նույնականացման համար (PGID) պատասխանել համակարգային կանչեր `setpgid` և `getpgid`. PGID-ը հավասար է խմբի առաջնորդի PID-ին։ Դուստր գործընթացը ժառանգում է խումբն իր ծնողից։ Խմբերը օգտագործվում են առաջադրանքների կառավարման համար։

Գործընթացի խմբերը միավորվում են **սեսսիաների** մեջ։ Նոր սեսսիայի ստեղծման համար պատասխանատու է  `setsid` համակարգային կանչը։ Միևնույն խմբի գործընթացները չեն կարող պատկանել տարբեր սեսսիաների։ Հետևաբար, խմբի ղեկավարը չի կարող դառնալ սեսսիայի ղեկավար։ Երբ ստեղծվում է սեսսիա, դուստր գործընթացը ինքնաբերաբար դառնում է սեսսիայի ղեկավար և նոր խմբի ղեկավար։ Սեսսիաները օգտագործվում են օգտատիրոջ մուտք գործելուց հետո սկսված բոլոր գործընթացները հետևելու համար։

Յուրաքանչյուր սեսսիա կարող է ունենալ ոչ ավելի, քան մեկ թերմինալի կառավարիչ. Թերմինալի էմուլյատորն ունի հրամանի վահանակ (սովորաբար bash կամ sh) որպես դուստր գործընթաց, որը, նախքան սկսելը, դառնում է նոր սեսսիայի առաջատարը և սահմանում  իրեն տերմինալի դեկավար։

## Գործընթացի ստեղծում
Պարզ օպերացիոն համակարգերը չեն պահանջում նոր պրոցեսների ստեղծում, քանի որ դրանց ներսում աշխատում է մեկ ծրագիր, որը գործարկվում է սարքը միացնելու պահին։ Ավելի բարդ համակարգերի համար անհրաժեշտ է նոր գործընթացներ ստեղծել։ Սովորաբար դրանք ստեղծվում են՝

* ՕՀ-ն գործարկելիս (օրինակ, երբ սարքի դրայվերները սկզբնավորվում են),
* Երբ առաջարկվում է ստեղծել գործընթաց՝ Այն տեղի է ունենում, երբ աշխատանքային գործընթացը կատարում է համակարգային կանչ։

## Գործընթացի վիճակները
Գործընթացը, բացի իր հիմնական աշխատանքային վիճակից, կարող է լինել նաև այլ վիճակներում, օրինակ՝ սպասում։
մինի|Անցումային գրաֆիկ

### Լինուքս
Լինուքսում գործընթացը կարող է գտնվել հետևյալ վիճակներից մեկում.

* **R** *(running/runnable)*՝ գործընթացն իրականացվում է կամ սպասում է իր հերթին,
* **D**՝ անխախտ քուն՝ գործընթացը սպասում է որոշակի իրադարձության,
* **S**՝ ընդհատվող քուն՝ գործընթացը սպասում է որոշակի իրադարձության կամ ազդանշանի,
* **T**՝  ընդհատում՝ գործընթացը դադարեցված է,
* **Z** *([[zombie]])* — գործընթացը ավարտվել է, բայց դեռևս չի փոխանցել իր վերադարձման կոդը ծնողական

գործընթացին։

## Գործընթացի ավարտ
Կատարման առնվազն 2 փուլ.

# Գործընթացը հեռացվում է պլանավորման բոլոր հերթերից, այսինքն, օպերացիոն համակարգը այլևս չի պլանավորում որևէ ռեսուրսներ հատկացնել գործընթացին,
# Գործընթացի կողմից սպառված ռեսուրսների վիճակագրության հավաքագրում, այնուհետև հիշողությունից հեռացնելով։

Գործընթացի ավարտման պատճառները.

* Կանոնավոր ելք,
* Արտահերթ կամ սխալ ելք,
* Հիշողության պակաս,
* Ծրագրի ժամկետի գերազանցում,
* Հիշողության հատկացված տարածքի գերազանցում,
* Անվավեր հրաման (ծրագրի տվյալները մեկնաբանվում են որպես պրոցեսորի հրահանգներ),
* Պաշտպանության սխալ (ոչ արտոնված հրամանի կատարում),
* Ծնողական գործընթացի դադարեցում
* Մուտքագրման և ելքի սխալ,
* Օպերատորի միջամտությունը։

## Ծանոթագրություններ

## Գրականություն
* *[[Таненбаум, Эндрю|Э. Таненбаум]], [[Вудхалл, А.|А. Вудхалл]].* «Операционные системы: Разработка и реализация.» — СПб.: 2006. — ISBN 5-469-00148-2
* *[[Таненбаум, Эндрю|Э. Таненбаум]].* «Современные операционные системы. 2-е изд.» — СПб.: Питер, 2005. — 1038 с.: ил. ISBN 5-318-00299-4


Կատեգորիա:Զուգահեռ հաշվարկ
Կատեգորիա:Տեխնոլոգիաներ օպերացիոն համակարգերում