Կողպեք փոփոխական մեխանիզմ


Ներածություն

Կողպեքի փոփոխականը համակարգչային գիտության մեխանիզմ է, որը թույլ է տալիս բազմաթիվ թելերի կամ գործընթացների փոխադարձաբար բացառել միմյանց և համաժամացնել հասանելիությունը ընդհանուր ռեսուրսներին: Կողպեքի փոփոխականը դարձել է տվյալների պարզ կառուցվածք, որը սովորաբար ունենում է բուլյան կամ ամբողջ թվի ձև և օգտագործվում է ռեսուրսի ներկա վիճակը նշելու համար: Այս հոդվածում մենք կուսումնասիրենք Lock Variable Mechanism-ը, ինչպես է այն առաջանում, ինչպես նաև դրա տարբեր առավելություններն ու թերությունները:

Ի՞նչ է կողպեքի փոփոխական մեխանիզմը:

Երբ օպերացիոն համակարգին կամ գործընթացին անհրաժեշտ է մուտք գործել որոշակի ռեսուրս, այն հայտնվում է կողպեքի փոփոխականի արժեքով: Եթե կողպեքն ազատ է (կողպման փոփոխականը սահմանված է ազատ), շարանը կամ պրոցեսը կարող են ստանալ այն՝ փոխելով կողպեքի փոփոխականը զբաղվածի: Սա երաշխավորում է, որ միայն մեկ թեմա կամ պրոցես կարող է մուտք գործել որոշակի ռեսուրս միաժամանակ: Երբ ընթացիկ շարանը կամ գործընթացը ավարտվում է ռեսուրսի օգտագործումով, այն ազատում է կողպեքը՝ վերականգնելով կողպեքի փոփոխականն իր սկզբնական հասանելի վիճակին:

Փոխադարձ բացառման կողպեքները, ընթերցող-գրող կողպեքները և պայմանի փոփոխականները բոլորը կողպեքի փոփոխականների օրինակներ են: Դրանք սովորաբար իրականացվում են ապարատային հրահանգներով, որոնք աջակցում են ատոմային գործողություններին, ինչը երաշխավորում է, որ կողպեքի փոփոխականը թարմացվում է թելի համար անվտանգ և արդյունավետ եղանակով: Միաժամանակյա ծրագրավորման մեջ կողպեքի փոփոխականները կարևոր մեխանիզմ են մրցավազքի պայմանները, փակուղիները և կենդանի արգելափակումները կանխելու համար:

Կողպեքի փոփոխականները, մյուս կողմից, կարող են ներկայացնել աշխատանքի վերին ծախսեր և հնարավոր խնդիրներ, ինչպիսիք են առաջնահերթության շրջումը և փոխադրումը: Երբ բարձր առաջնահերթ շարանը արգելափակվում է ավելի ցածր առաջնահերթության շղթայի կողմից պահվող կողպեքին սպասելիս, առաջնահերթության շրջում է տեղի ունենում: Փոխանցումը տեղի է ունենում, երբ մի քանի թելեր սպասում են կողպեքի, ինչը հանգեցնում է խցանման և կատարողականի նվազմանը: Այս խնդիրները լուծելու համար մշակվել են համաժամացման այլ մեթոդներ, ինչպիսիք են սեմաֆորները և մոնիտորները:

Կողպման փոփոխականն իր ամենահիմնական ձևով գործոն է, որը կարող է սահմանվել երկու եղանակով՝ «կողպված» կամ «բացված»: Թեև հավելվածը կամ գործընթացը պահանջում է մուտք գործել տրամադրված ռեսուրս, այն իր սկզբնական փորձերն է անում՝ կողպումը ստանալու համար՝ կողպման պարամետրը դնելով «կողպված»: Եթե կողպեքի փոփոխականն արդեն դրված է «կողպվածի» վրա, ապա ընթացիկ շարանը կամ գործընթացը կխոչընդոտվեն այնքան ժամանակ, մինչև ապահովիչը չարձակվի այն պահող տողի կամ գործընթացի կողմից: Շարանը կամ պրոցեսը կարող է մուտք գործել այն ռեսուրսը, որը կիսվել է, կատարել որոշակի գործողություն դրա վրա և վերջապես ազատել գաղտնագրման բանալին՝ փոխելով կողպեքի փոփոխականները «unlocked»-ի:

Կողպեք փոփոխականների առավելությունները

Կողպեքի փոփոխականների օգտագործումը մի քանի առավելություն ունի, այդ թվում՝ −

  • Փոխադարձ բացառում - Փոխադարձ բացառման հատկությունը երաշխավորում է, որ միայն մեկ շղթա կամ գործընթաց կարող է միաժամանակ մուտք գործել ընդհանուր ռեսուրս: Կողպեքի փոփոխականները պարզ և արդյունավետ միջոց են փոխադարձ բացառման իրականացման, մրցավազքի պայմանները կանխելու և ընդհանուր ռեսուրսների անվտանգ մուտք ապահովելու համար:

  • Սինխրոնիզացիա - Համաժամացումը գործողությունների կազմակերպման մեթոդ է, որը ներառում է տարբեր թելեր կամ ընթացակարգեր, որպեսզի նրանք կարողանան միասին համագործակցել ընդհանուր նպատակին հասնելու համար: Թելերը կամ պրոցեսները կարող են օգտագործել կողպման փոփոխականներ՝ համակարգելու իրենց օգտագործումը համօգտագործվող ռեսուրսների՝ երաշխավորելով, որ մի տողը չի կարող օգտագործել տարրը, մինչդեռ մյուսը փոփոխում է այն:

  • Փակուղու կանխարգելում - Փակուղի է առաջանում, երբ բազմաթիվ թելեր կամ պրոցեդուրաներ անշարժանում են առաջ շարժվելու հնարավորությունից, քանի որ նրանք համբերատար սպասում են, որ մեկը մյուսին արձակի կողպեքները: Կողպման գործոնները կարող են օգտագործվել փակուղիները խոչընդոտելու համար՝ թելերին կամ բռնակներին թույլ տալով ռեսուրսներ պահանջել ըստ որոշակի հաջորդականության, կամ արձակելով կողպեքները, որոնք անհամաչափ ժամանակ են մնացել՝ օգտագործելով թայմ-աութները կամ այլ տեխնիկա:

  • Օգտագործման հեշտություն − Կողպեքի փոփոխականները հավասարեցման պարզ գործընթաց են, որը կարող է իրականացվել ծրագրավորման պարզ կառուցվածքներով: Դրանք լայնորեն ապահովված են ընթացիկ ծրագրավորման լեզուներով և օպերացիոն համակարգերով, ինչը թույլ է տալիս մշակողների լայն շրջանակին օգտագործել դրանք:

  • Արդյունավետություն − Կողպեքի փոփոխականները սովորաբար իրականացվում են ապարատային հրահանգների միջոցով, որոնք աջակցում են ատոմային գործողություններին՝ ապահովելով, որ դրանք թարմացվում են թելի համար անվտանգ և արդյունավետ եղանակով: Սա կարող է բարելավել համակարգի աշխատանքը՝ միաժամանակ նվազեցնելով մրցավազքի պայմանների հավանականությունը:

Կողպեքի փոփոխական մեխանիզմը միաժամանակյա ծրագրավորման հիմնական տեխնիկան է՝ ճիշտ վարքագիծ ապահովելու և մրցավազքի պայմանները կանխելու համար: Այն իրականացնում է փոխադարձ բացառման, համաժամացման և փակուղու կանխարգելում պարզ և արդյունավետ ձևով, միաժամանակ լինելով հեշտ օգտագործման և արդյունավետ: Այնուամենայնիվ, կարևոր է տեղյակ լինել պոտենցիալ թերությունների մասին, ինչպիսիք են վերադիրը, փակուղին և առաջնահերթության շրջումը, և մեղմել այդ խնդիրները՝ օգտագործելով լավագույն փորձը և առաջադեմ տեխնիկան:

Կողպեք փոփոխական մեխանիզմի թերությունները

Ահա ևս մի քանի մանրամասներ կողպեքի փոփոխական մեխանիզմի թերությունների մասին −

  • Overhead − Կողպեքի փոփոխականների օգտագործումը կարող է հանգեցնել գերծանրաբեռնվածության, հատկապես, եթե մի քանի թելեր կամ գործընթացներ մրցակցում են նույն կողպեքի փոփոխականի համար: Դա պայմանավորված է կողպեքի փոփոխականի տեղադրման և ստուգման հետ կապված վերին ծախսերի հետ, ամեն անգամ, երբ շարանը կամ գործընթացը ձեռք է բերում կամ արձակում կողպեքը: Երբ մի քանի թելեր կամ պրոցեսներ մրցում են նույն կողպեքի փոփոխականի համար, այս վերադիր ծախսը կարող է ավելանալ և ազդել համակարգի ընդհանուր աշխատանքի վրա:

  • Փակուղի − Երբ մի քանի թելեր կամ ընթացակարգեր առաջ շարժվելու հնարավորություն չունեն, քանի որ նրանք պետք է սպասեն մեկ այլ գործընթացի՝ կողպեքները ազատելու համար, սա կոչվում է փակուղի: Սա կարող է առաջանալ, եթե կողպեքի կարգը սխալ է սահմանվել, կամ եթե հավելվածը կամ ընթացակարգը չի կարողանում ազատել կողպեքը ձեռք բերելուց հետո: Փակուղիները հայտնաբերելը դժվար է և կարող է ամբողջ համակարգը կանգնեցնել:

  • Առաջնահերթ ինվերսիա - Մինչ բարձր առաջնահերթության տողը արգելափակվում է ցածր առաջնահերթության տողի կողմից, որը պարունակում է կողպեքի փոփոխական, առաջնահերթության շրջում է տեղի ունենում: Դա կարող է առաջանալ, եթե ցածր առաջնահերթության տողը ձեռք է բերում կողպման պարամետր, այնուհետև խոչընդոտում է բարձր առաջնահերթ շարանը, որը նույնպես կարիք ունի կողպեքի փոփոխականի: Սա կարող է հանգեցնել անկանխատեսելի և դժվար ախտորոշվող վարքագծի:

Կան մի քանի մեթոդներ՝ կողպեքի փոփոխականների պատճառով առաջացած վերադիր, փակուղային և առաջնահերթ ինվերսիայի նվազեցման համար: Համաժամացման ավելի առաջադեմ մեխանիզմները, ինչպիսիք են սեմաֆորները, մոնիտորները կամ կարդալ-գրելու կողպեքները, ապահովում են լրացուցիչ ֆունկցիոնալություն և ճկունություն: Մեկ այլ ռազմավարություն է զգուշորեն մշակել կողպման կարգը, որպեսզի խուսափենք փակուղուց և առաջնահերթությունների շրջադարձից: Վերջապես, առանց կողպման ծրագրավորման մեթոդները կարող են օգտագործվել՝ կողպեքի փոփոխականները ամբողջությամբ խուսափելու համար, թեև դա ավելի դժվար է իրականացնել և կարող է ոչ բոլոր հավելվածների համար համապատասխան լինել:

Եզրակացություն

Կողպեքի փոփոխականները միաժամանակ ծրագրային ապահովման մշակման հիմնական համակարգման մեխանիզմն են, որը թույլ է տալիս բազմաթիվ թելերի կամ մեթոդների միաժամանակ վերացնել և համակարգել ընդհանուր ռեսուրսները: Դրանք շարունակում են տարածված լինել ժամանակակից օպերացիոն համակարգերում և ծրագրավորման լեզուներում, անկախ այն հանգամանքից, որ դրանց օգտագործումը կարող է առաջացնել ձեռքբերումների գերբեռնվածություն և այլ խնդիրներ: