Բազմախնդրություն
Հաշվողական համակարգերում բազմախնդրությունը մեթոդ է, որի ժամանակ բազմաթիվ առաջադրանքներ, նաև հայտնի որպես պրոցեսներ, համատեղ օգտագործում են մշակման համար անհրաժեշտ բոլոր ընդհանուր ռեսուրսները, ինչպես օրինակ CPU. Այն դեպքում , երբ համակարգիչն ունի մեկ պրոցեսոր, համարվում է, որ ընդամենը 1 խնդիր է կատարվում ժամանակի ցանկացած պահին, այսինքն պրոցեսորը ակտիվորեն կատարում է հրահանգներ այդ առաջադրանքի իրականացման համար:
Բազմախնդրությունը ծրագրավորման մեջ լուծում է նաև պլանավորման խնդիրները, այսինքն, երբ տվյալ առաջադրանքները կարող են կատարվել ժամանակի ցանկացած պահին, իսկ մնացած սպասման վիճակում գտնվող խնդիրները սպասում են իրենց հերթին: Պրոցեսորի ակտը, ըստ նշանակության փոփոխության , մի առաջադրանքից մյուսին կոչվում է կոնտեքստի փոխանջատում: Երբ կոնտեքստային փոխանջատումները հաճախ են տեղի ունենում, ապա զուգահեռության հետ կապված շփոթություն է առաջանում:
Նույնիսկ մեկից ավելի պրոցեսորներ ունեցող համակարգիչների դեպքում,(հայտնի մուլտպրոցեսորային մեխանիզմներ)անվանումով, բազմախնդրությունը թույլ է տալիս ավելի մեծ թվով առաջադրանքներ գործարկել, քան պրոցեսորների քանակն է: Օպերացիոն համակարգերը կարող են ընդունել տարբեր պլանավորման ստրատեգիաներ, որոնք սովորաբար բաժանվում են հետևյալ կատեգորիաների`
- Բազմածրագրային համակարգերում, կատարվող առաջադրանքը միշտ աշխատում է այնքան ժամանակ, քանի դեռ այն իրագործում է գործողություններ, որոնք պահանջում են արտաքին իրադարձության սպասում (օրինակ ժապավենից ընթերցանություն) կամ այնքան ժամանակ, քանի դեռ համակարգչի պլանավորման համակարգը հարկադրաբար բաժանում է կատարվող առաջադրանքը կենտրոնական պրոցեսորից: Բազմածրագրային համակարգերը ստեղծված են , որպեսզի առավելագույնի հասցնեն պրոցեսորի օգտագործումը:
- Ժամանակի բաշխիչ համակարգերում, կատարվող առաջադրանքից պահանջվում է հրաժարվել պրոցեսորից, կամավոր կամ արտաքին իրադարձության միջոցով, ինչպես օրինակ սարքավորումների ընդհատումը. Ժամանակի բաշխիչ համակարգերը նախատեսված են , որպեսզի թույլատրեն մի քանի ծրագրերի միաժամանակյա կատարում: 'Ժամանակի բաշխում'արտահայտությունը սովորաբար օգտագործվում է, որպեսզի նկարագրի այն համակարգիչները, որոնք բաժանում են տեղեկատվության ներածման և արտածման սարքերը տերմինալների առումով, ըստ ինտերակտիվ օգտվողների, ինչպես օրինակ IBM-ի TSO, և VM/CMS տարբերակները:
- Իրական ժամանակի համակարգերում, որոշ առաջադրանքներ, որոնք սպասման վիճակում են գտնվում, երաշխավորված են , որ կընդունվեն պրոցեսորի կողմից , երբ տեղի է ունենում տվյալ արտաքին իրադարձությունը: Իրական ժամանակի համակարգերը նախատեսված են ղեկավարելու մեխանիկական սարքերը, այնպիսիք, ինչպիսիք են արդյունաբերական ռոբոտները, որոնք պահանջում են ճիշտ ժամանակին մշակում:
Ժամանակի բաշխիչ տերմինը շատ չի օգտագործվում, քանի որ փոխարինվել է բազմախնդրություն տերմինով, որն էլ կապված է անհատական համակարգիչների ի հայտ գալով: Վերջիններիս թիվը ավելին է, քան բաժանող ինտերակտիվ համակարգերինը:
Բովանդակություն |
Բազմածրագրավորում [խմբագրել]
Հաշվողական համակարգի վաղ ժամանակաշրջանում պրոցեսորի ժամանակը շատ թանկ արժեր, իսկ արտաքին սարքերը շատ դանդաղագործ էին: Երբ համակարգիչը մի որևէ ծրագիր էր աշխատեցնում , որը պահանջում էր մուտք դեպի արտաքին սարքեր, կենտրոնական վերամշակման միավորը (CPU) պետք է դադարեցներ ծրագրային սարքավորումների աշխատանքը, մինչև արտաքին սարքերը կմշակեին տվյալները:
Առաջին համակարգիչը, որն օգտագործեց բազմածրագրային համակարգեր, բրիտանական ԼԵՈ III համակարգիչներն էին, որ պատկանում էին Ջ. Լեոնսին և Ընկերությանը. Մի քանի տարբեր ծրագրային փաթեթներ բեռնված էին համակարգչի հիշողության մեջ և նրանցից առաջինը սկսում է աշխատել: Երբ առաջին ծրագիրը հասանելի է դառնում արտաքին սարքերին, այս ծրագրի համատեքստը արդեն հետ է պահպանվում և հիշողությունում գտնվող հաջորդ ծրագիրը հնարավորություն է ստանում կատարվելու: Այս պրոցեսը շարունակվում է այնքան ժամանակ , մինչև բոլոր ծրագրերի աշխատանքներն ավարտվում են:
Բազմածրագրավորումը ոչ մի երաշխիք չի տալիս, որ ծրագիրը կաշխատի ճիշտ ժամանակին: Իսկապես, ամեն առաջին ծրագիր կարող է ժամերով շատ լավ աշխատել, առանց մուտքի դեպի արտաքին սարքեր: Որքան էլ , որ չլինեն օգտվողներ , որոնք սպասում են ինտերակտիվ տերմինալի, ոչ մի խնդիր չի առաջանում: Օգտվողները քարտերի մի փունջ են հանձնում օպերատորին և ժամեր անց հետ են վերադառնում տպագրված արդյունքների համար: Բազմածրագրավորումը մեծապես կրճատում է սպասման ժամանակը, երբ բազմաթիվ տվյալների փաթեթներ են մշակվում:
Համատեղ բազմախնդրություն/ժամանակի բաշխիչ [խմբագրել]
Երբ համակարգչի օգտագործումը փաթեթային ռեժիմից փոխվել է ինտերակտիվ ` փոխադարձ ռեժիմի, բազմածրագրավորումը արդեն հարմար մոտեցում չէ: Յուրաքանչյուր օգտվող կցանկանար տեսնել իր ծրագրի աշխատանքը համակարգչում այնպես, կարծես դա միակն է համակարգչում: Ժամանակի բաշխման օգտագործումը սա հնարավոր դարձրեց այն որակավորմամբ, որ համակարգիչը այնքան արագագործ չի լինի ամեն մի օգտվողի համար, որքան , որ այն իսկապես կլիներ, եթե կատարեր միայն մեկ օգտվողի ծրագիրը:
Վաղ բազմախնդրային համակարգերը օգտագործում էին այնպիսի դիմումներ, որոնք ինքնակամ զիջում էին ժամանակը միմյանց: Այս մոտեցումը, որն օժանդակում էին բազմաթիվ համակարգչային օպերացիոն համակարգեր, այսօր հայտնի է որպես համատեղ բազմախնդրություն: Չնայած այն հիմա հազվադեպ է օգտագործվում ավելի մեծամասշտաբ համակարգերում, այդուհանդերձ համատեղ բազմախնդրությունը սխեմաների պլանավորում էր իրենից ներկայացնում, որն օգտագործվում էր Microsoft Windowsում (մինչև Windows 95 և Windows NT) և Mac OSում (մինչև Mac OS X) և այսպիսով հնարավոր էր լինում միաժամանակ գործարկելու բազմակի դիմումներ: Windows 9xը նույնպես օգտագործում էր համատեղ բազմախնդրությունը, բայց միայն 16 կարգանի դիմումների համար, այնպես, ինչպես Mac OS X-ի pre-Leopard PowerPC տարբերակները օգտագործեցին դրանք Classic դիմումների համար: NetWare ցանցային օպերացիոն համակարգերը օգտագործում էին համատեղ բազմախնդրությունը մինչև NetWare 6.5: Համատեղ բազմախնդրությունը այսօր էլ դեռ օգտագործվում է RISC OS համակարգերում:
Քանի որ համատեղ բազմախնդրային համակարգը հիմնված է ամեն մի պրոցեսի վրա, որը կանոնավոր կերպով ապահովում է ժամանակ համակարգում գտնվող այլ պրոցեսների համար, այդ դեպքում մի որևէ թույլ կազմակերպված պրոցես կարող է ծախսել պրոցեսորի ամբողջ ժամանակը իր վրա կամ բերել նրան, որ ամբողջ համակարգը դադարի աշխատել:Սերվերային միջավայրում սա վտանգավոր է, քանի որ ողջ ցանցը դառնում է փխրուն և խոցելի: Բոլոր ծրագրերը պետք է գնահատված և հստակեցված լինեն թեստային միջավայրում օգտագործվելու համար, նախքան տեղադրվելը գլխավոր սերվերի վրա, հակառակ դեպքում սերվերի ձախողված ծրագիրը դանդաղ է աշխատում, կամ էլ ամբողջ ցանցը ձախողվում է: Չնայած համատեղ բազմախնդրային համակարգերի նախագծման և իրականացման բարդություններին, հարկադրված ժամանակի, իրական ժամանակի ներդրված համակարգերը ( ինչպես օրինակ տիեզերական ապարատները ) հաճախ են իրագործվում ` օգտագործելով այս նմուշը: Սա թույլ է տալիս շատ հուսալի , դետերմինացված հսկողություն սահմանել բարդ իրական ժամանակի արդյունքների վրա , օրինակ շարժիչների հրդեհվելը անսահման տիեզերքում դասընթացի ուղղումների համար:
Առաջնահերթ բազմախնդրություն/ժամանակի բաշխիչ [խմբագրել]
Առաջնահերթ բազմախնդրությունը թույլ է տալիս համակարգչային համակարգերին ավելի հուսալի երաշխավորել , թե յուրաքանչյուր պրոցեսի հերթական որ"կտորն" է տվյալ պահին աշխատում:Այն նաև թույլ է տալիս համակարգին արագ որոշել կարևոր արտաքին իրադարձությունները, ինչպիսիք են օրինակ մուտքային տվյալները, որոնք կարող են պահանջել տվյալ կամ մեկ ուրիշ պրոցեսի անհապաղ ուշադրություն:
Օպերացիոն համակարգերը մշակվեցին ` օգտվելու ապարատային այս հնարավորություններից և աշխատեցնել մի քանի պրոցեսներ ըստ առաջնայնության: Օրինակ, առաջնահերթ բազմախնդրությունը իրականացվել էUnixի [1] վաղ տարբերակներում 1969թվականին, և դարձել է ստանդարտ Unix and Unix-ի նմանությամբ օպերացիոն համակարգերում, ներառյալ Linuxը, Solarisը և BSD-ն իր ածանցյալների հետ:
Ցանկացած ժամանակ պրոցեսները խմբավորվում են 2 կատեգորիաներում: Նրանք, որոնք սպասում են մուտքի կամ ելքի (հայտնի որպես "I/O սահման"), և նրանք, որոնք ամբողջությամբ օգտագործում են պրոցեսորը:("CPU սահման"): Պարզ համակարգերում ծրագրային ապահովումը հաճախ լինում է հարցումային "poll", կամ "busywait", հարցված մուտքի սպասման ժամանակ (ինչպես օրինակ սկավառակը, ստեղնաշարը կամ ցանցային մուտքերը): Այս ընթացքում համակարգը չի իրականացնում օգտակար աշխատանք: Ընդհատումների և առաջնահերթ բազմախնդրության ի հայտ գալով I/O սահմանափակ պրոցեսները կարող են "արգելափակվել", կամ սպասման մեջ դրվել, մինչև անհրաժեշտ տվյալների ի հայտ գալը, թույլ տալով մնացած պրոցեսներին օգտագործել պրոցեսորը: Երբ պահանջվող տվյալները հայտնվում են , առաջանում է ընդհատում և արգելափակված պրոցեսները կարող են ժամանակին վերադառնալ կատարման:
Վաղ առաջնահերթ բազմախնդրային օպերացիոն համակարգը, որը մատչելի էր դարձել սովորական օգտվողների համար Sinclair QDOS-ն է Sinclair QL-ի հիման վրա , որը լույս տեսավ 1984 թվականին, բայց շատ քչերը կարողացան գնել այդ մեքենան: Commodore-ի հզոր Amiga տեխնոլոգիան, որը հրապարակվեց հաջորդ տարի, առաջին ֆինանսական առումով հաջողակ համակարգիչն էր, որն օգտագործեց այդ տեխնոլոգիան և նրա մուլտիմեդիա հնարավորությունները դարձնում էին նրան անհատական համակարգիչների ժամանակակից բազմախնդրության հստակ նախահայրը: 1990-ական թվականների սկզբին Microsoftը առաջնահերթ բազմախնդրությունը դարձրեց իր օպերացիոն համակարգերի հիմնական բնութագրիչը, այն ժամանակ , երբ զարգանում էին Windows NT 3.1-ը և հետո Windows 95-ը:Ավելի ուշ այն ընդունվեց Apple Macintosh Mac OS 9.x-ի կողմից [2] որպես լրացուցիչ API, այսինքն դիմումները կարող էին ծրագրավորվել` օգտագործելով առաջնահերթ կամ կոոպերատիվ մոդելները և ավելի վաղ դիմումները դառնում էին կոոպերատիվ բազմախնդրային միակ պրոցեսի շրջանակներում: Mac OS X-ը, լինելով Unix-ին նման համակարգ, օգտագործում է առաջնահերթ բազմախնդրությունը, բոլոր առաջնային դիմումների համար, չնայած Classic դիմումները համատեղ բազմախնդրային են Mac OS 9 միջավայրում, որն աշխատում է ինչպես OS X պրոցեսը (և ենթակա է առաջնայնության, ինչպես մյուս OS X պրոցեսները):
Նման մոդելները օգտագործվում են Windows 9x և Windows NT ընտանիքի համակարգերում, որտեղ առաջնային 32-բիտանի դիմումները առաջնահերթ բազմախնդրային են , իսկ ավելի վաղ 16-բիտանի դիմումները Windows 3.x համատեղ բազմախնդրային են միակ գործընթացի շրջանակներում, չնայած NT ընտանիքում հնարավոր է ստիպել 16 բիտանի դիմումներին աշխատել որպես առանձին առաջնահերթ բազմախնդրային պրոցես:[3] Windows-ի 64-բիտանի հրատարակությունները,և x86-64, և Itanium տարբերակների համար, այլևս չեն օժանդակում ավելի հին 16 կարգանի դիմումներին և այսպիսով ապահովում են առաջնահերթ բազմախնդրություն բոլոր օժանդակ դիմումների համար:
Իրական ժամանակ [խմբագրել]
Բազմախնդրության պատճառներից է համարվում իրական ժամանակի հաշվողական համակարգերի նախագծումը, որտեղ կան մի շարք հնարավոր իրար հետ կապ չունեցող արտաքին գործողություններ, որոնց անհրաժեշտ է վերահսկել միակ պրոցեսորային համակարգի միջոցով: Նման համակարգերում հիերարխիկ ընդհատման համակարգը զուգակցվում է առաջնահերթ պրոցեսի հետ, որպեսզի հիմնական գործողություններին տրվեն առկա պրոցեսի ժամանակի ավելի մեծ հատված:
Բազմահոսքայնություն [խմբագրել]
Քանի որ բազմախնդրությունը մեծապես բարելավեց համակարգիչների արտադրողականությունը, ծրագրավորողները սկսեցին աշխատեցնել ծրագրերը որպես համատեղ պրոցեսների հավաքածուներ (օրինակ մի պրոցեսը հավաքագրում է մուտքային տվյալները, մեկ այլ պրոցես մշակում է մուտքային տվյալները, մյուսը դուրս է գրում արդյունքները սկավառակի վրա): Ինչևիցե, պահանջվում են որոշակի սարքեր, որպեսզի թույլատրեն պրոցեսներին արդյունավետ փոխանակել տվյալները:
Հոսքերի հիմնական գաղափարը կայանում է նրանում, որ պրոցեսների համատեղման ամենաարդյունավետ ճանապարհը տվյալների փոխանակման համար, դրանց ողջ հիշողության տարածքի բաժանումն է: Այսպիսով, հոսքերը հիմնականում պրոցեսներ են, որոնք իրականանում են հիշողության նույն կոնտեքստում: Հոսքերը բնութագրվում են որպես թեթևքաշային , քանի որ հոսքերի միջև փոփոխությունները չեն բերում հիշողության կոնտեքստի փոփոխությանը:
Մինչ հոսքերը պլանավորվում էին ըստ առաջնահերթության, որոշ օպերացիոն համակարգեր ապահովում էին հոսքերի մի տարբերակ, fiber անունով, որոնք պլանավորվում էին կոոպերատիվ օպերացիոն համակարգերում: Նրանք , որոնք չէին ապահովում հոսքերի Fiber տեսակը, ծրագրային դիմումները կարող էին իրականացնել իրենց սեփական fiber հոսքերը` օգտագործելով կրկնակի կանչերը, աշխատողի գործառույթներից ելնելով:Fiber-ները ավելի թեթևքաշային են, քան հոսքերը և մի փոքր ավելի հեշտ է աշխատել դրանց հետ, չնայած դրանք հակված են կորցնելու բազմաթիվ պրոցեսորներով մեքենաների հոսքերի որոշ կամ բոլոր առավելությունները:[փա՞ստ]
Որոշ համակարգեր ուղղակիորեն աջակցում են բազմահոսքայնությանը համակարգչային տեխնիկայում:
Հիշողության պաշտպանություն [խմբագրել]
Երբ հիշողությունում առկա են բազմաթիվ ծրագրեր, մի որևէ վատ ձևակերպված ծրագիր կարող է (պատահական կամ միտումնավոր) վերագրանցել հիշողությունը, որը պատկանում է մեկ այլ ծրագրի, կամ նույնիսկ օպերացիոն համակարգի:
Ուստի օպերացիոն համակարգը սահմանափակում է կատարվող ծրագրի հիշողության մատչելիությունը: Ծրագիրը, որը փորձում է մատչելի դարձնել հիշողությունը իր թույլատրելի սահմաններից դուրս, անմիջապես կդադարեցվի նախքան կկարողանա փոխել մեկ այլ պրոցեսի պատկանող հիշողությունը:
Մեկ այլ կարևոր նորամուծություն էր արտոնության մակարդակների գաղափարը: Ստորին արտոնությամբ առաջադրանքներին չի թույլատրվում հիշողության մատչելիության որոշակի տեսակներ և չի թույլատրվում կատարել որոշակի հրահանգներ: Երբ առաջադրանքը փորձում է կատարել մի որևէ արտոնյալ գործողություն, առաջանում է ծուղակ և մի որևէ վերահսկիչ ծրագրի, որը կատարվում է ավելի բարձր մակարդակում, թույլատրվում է որոշել, թե ինչպես գործել այդ դեպքում:
Հիշողության փոխանակում [խմբագրել]
Փոխանակման ֆայլերի կամ փոխանակման բաժանմունքների օգտագործումը օպերացիոն համակարգի համար մի ճանապարհ են` տրամադրելու ավելի մեծ հիշողություն, քան ֆիզիկապես կարող է հասանելի լինել պահելով հիմնական հիշողությունից մասնաբաժիններ երկրորդական պահեստում: Մինչ բազմախնդրությունը և հիշողության փոխանակումը 2 ամբողջովին իրար հետ կապ չունեցող տեխնիկաներ են , սակայն դրանք շատ հաճախ օգտագործվում են միասին, քանի որ հիշողության փոխանակումը թույլատրում է ավելի շատ առաջադրանքներ բեռնել միաժամանակ: Սովորաբար բազմախնդրային համակարգը թույլ է տալիս մեկ այլ պրոցեսի կատարվել, երբ ընթացքի մեջ գտնվող պրոցեսը հանդիպում է մի կետի, որտեղ այն ստիպված է սպասել, մինչև երկրորդական պահեստից կվերաբեռնվի հիշողության մի որոշակի մասնաբաժին:
Ծրագրավորումը բազմախնդրային միջավայրում [խմբագրել]
Պրոցեսները, որոնք լիովին անկախ են, շատ բարդություններ չեն առաջացնում ծրագրում: Բարդությունների մեծ մասը բազմախնդրային համակարգերում առաջանում է առաջադրանքների միջև համակարգչային ռեսուրսների բաշխման անհրաժեշտությունից և առաջադրանքների համատեղման գործողությունների սինխրոնիզացման պահանջներից: Տարբեր մրցակից հաշվողական տեխնիկաներ են օգտագործվում, որպեսզի խուսափեն հնարավոր պրոբլեմներից, որոնք առաջանում են բազմաթիվ առաջադրանքների` միևնույն ռեսուրսը իրենց ենթարկելու փորձերից:
Մեծամասշտաբ համակարգերը երբեմն կառուցվել են կենտրոնական պրոցեսոր(ներ)ով և մի շարք այլ I/O պրոցեսորներով, որոնք անհամաչափ բազմամշակման տեսակ են:
Տարիների ընթացքում բազմախնդրային համակարգերը կատարելագործվել են: Ժամանակակից օպերացիոն համակարգերը ընդհանուր առմամբ ներառում են մանրակրկիտ մեխանիզմներ` պրոցեսների առաջնայնությունը որոշելու համար, այն ժամանակ , երբ համաչափ բազմամշակումը իր մեջ է ներառում նոր բարդություններ ու կարողություններ: