Программа дисциплины для студентов


Бөлінбейтін әрекеттер және күту операторлары



бет14/45
Дата06.01.2022
өлшемі0,76 Mb.
#12433
түріБағдарламасы
1   ...   10   11   12   13   14   15   16   17   ...   45
Бөлінбейтін әрекеттер және күту операторлары

Жоғарыда ескертілгендей, параллель программаның орындалуын және процесстердің орындайтын бөлінбейтін әрекеттерінің алмасуы деп қарастыруға болады. Процесстердің өзара әрекеттестігі үшін барлық алмасулар үшін рұқсат барлық алмасулар үшін рұқсат жоқ. Синхрондау мақсаты – ұнамсыз алмастыруды болдырмау. Оны жүзеге асыру бөлінбейтін ұсақ модульды амалдарды ірі модульды (құрама) әрекеттерге біріктіру немесе белгілі бір предикатты қанағаттандыратын программаның қалып-күйіне жеткенше процесс орындалуының кідірісі жолымен жүзеге асырылады.

Синхрондаудың бірінші формасы-өзара тізімнен шығару деп атайды, екіншісі-шартты синхрондау.

Ұсақ модульдық бөлінбеушілік.

Бөлінбейтін әрекет қалып-күйді бөлмей түрлендіреді. Бұл осы әрекетті орындау барысында пайда болатын кез-келген аралық қалып-күй басқа процесстер үшін көрінбейтін болуы керек. Ұсақмодульды бөлінбейтін әрекет-программа орындалатын тікелей аппараттық жасаудың әрекеті.

Тізбекті программада меншіктеу операторы бөлінбейді, өйткені оның орындалуы барысында программаға көрінетін аралық қалып-күйлер болмайды ( аппараттық жасау анықтайтын қателерді санамағанда). Бірақ параллельпрограммада меншіктеу операторлары бөлінбейтін амал болмайды, өйткені ол ұсақ иодульдымашиналық инструкциялар тізбегі ретінде келесі программаны қарастырайық және ұсақмодульды бөлінбейтін амал – айнымалыларды оқу және жазу.

Int y=0; z=0;

Parallel: x=e+z; //y=1; z=2; end parallel;

Егер x=y+z y-ң мәнін регистрге жүктеу және келесі мәндері z-ті қоса отырып алынса, онда х айнымалысының 0,1,2 және 3. Бұлайша болатын себебі біз екінші процесстің орындалу дәрежесіне байланысты у және z-тің алғашқы мәндерімен қоса, олардың соңғы мәндерін немесе комбинациясын аламыз. Келтірілген программаның тағы бір ерекшелігі, х-тің соңғы мәні болуы мүмкін, бірақ программаны тоқтатып у+ z қосындысының мәні 2 болатын қалып-күйді көре аламыз. Машиналар келесі сипаттамаларға ие болады деп есептеледі:


  • Бөлінбейтін амалдармен оқылатын және жазылатын базалық типтің мәндері (мысалы, Int) жады элементтерінде (мысалы сөздерде) сақталады.

  • Мәндер былай өңделеді: оларды регистрлерге орналастырады, онда оған амалдар қолданады және нәтижені қайтадан жадыға жазады.

  • Әрбір процесстің өзінің регистрлер жиыны болады. Бұл әрбір процесске және регистрлер жиынын беру жолымен немесе әртүрлі процесстерді орындағанда регистрлер мәнін қайта қалпына келтіру жолымен жасалады. (Бұл регистрлер процессті орындау контекстін құрғандықтан контексті ауыстыру деп атайды.)

  • Күрделі өрнектерді есептегенде пайда болатын кез-келегн аралық нәтижелер орындалатын процесстің регистрлері немесе жады облыстарында сақталады, мысалы, оның стегінде.

Машинаның бұл моделінде, гер бір процесстегі е өрнегі басқа процесс өзгерткен айнымалыға айналмаса, бірнеше ұсақмодульды әрекеттерді орындау қажет болса да өрнекті есептеу әрқашанда бөлінбейтін амал болады. Бұл е өрнегін есептеген е-ге тәуелді бірде бір мән өзінің мәнін өзгертпейді және өрнекті есептегендегі құрылатын уақытша мәнді бірде-бір процесс көрмейді. Сол сияқты, егер x=е меншіктеуі бір процессте басқа процесс өзгертетін айнымалыға нұсқамаса (мысал, тек жергілікті айнымалыларға нұсқаса), онда меншіктеуді орындау бөлінбейтін амал.

Параллель программадағы көптеген операторлар осы қиылыспаушылық шартын қанағаттандырмайды. Бірақ та жиірек жұмсақ шарттар орындалады.

« Бірден аспайтын» шарты.

Сын нұсқағыш өрнектегі басқа процесстер өзгертетін айнымалыға нұсқайды. Кез-келген сын секциясы-жады элементінде сақталатын қарапайым айнымалыға нұсқайды және автоматты түрде оқылады және жазылады деп есептейік. x=е меншіктеу операторы егер немесе е бірден аспайтын сын нұсқағыштан тұрса, ал х айнымалысы басқа процесспен оқылмайтын болса, немесе е өрнегі сын секцияларынан тұрмаса, ал басқа процесстер х айнымалысын оқымаса «бірден аспайтын» шартын қанағаттандырады.

Бұл шарт «бірден аспайтын» шарты деп аталады, себебі осы жағдайда ғана бір бөлінбейтін айнымалы болуы мүмкін және оны бірден артық рет шақырмайды.Осы сияқты анықтама меншіктеу операторы болмайтын өрнектерге қолданылады. Осындай өрнектер «бірден аспайтын» шартын қанағаттандырады егер ол бірден аспайтын сын нұсқағыштан тұрса.

Егер меншіктеу операторы «бірден аспайтын» шартын қанағаттандырса, онда меншіктеу операторының орындалуы бөлінбейтін амал болып көрінеді, өйткені өрнектегі бір ғана бөлінбейтін айнымалы бір ақ рет оқылады немесе жазылады. Мысалы, егер е өрнегі сын секцияларынан тұрмаса, ал х айнымалысы басқа процесстер оқитын қарапайым болса, онда олар өрнек бөлінбей есептеле ме тани алады. Сол сияқты, егер е бір сын секциясынан тұрса, онда меншіктеуді орындайын процесс айнымалының мәні қалай өзгергенін айыра алмайды: ол тек соңғы мәнді ғана көре алады.

« Бірден аспайтын» шартын түсіндіру үшін бірнеше мысал келтірейік. Келесі программада екі меншіктеу де осы шартты қанағаттандырады.

Int x=0; y=0;

Parallel: x=x+1; //y=y+1;

Мұнда бір де бір процесске сын нұсқау жоқ, сондықтан х-тің де, у-ң де соңғы мәні бір болады.

Келесі программада екі меншіктеу де осы шартты қанағаттандырады.

Int x=0; y=0;

Parallel: x=x+1; //y=y+1;

Бірінші процесс у-ке нұсқайды (бір сын нұсқағыш), бірақ х айнымалысы екінші процесспен оқылмайды, және екінші процессте сын нұсқағыш жоқ. Х айнымалысының соңғы мәні немесе 1 немесе 2, ал у-тің соңғы мәні 1. Бірінші процесс у айнымалысын немесе оны өсіру алдында, немесе өсіргеннен кейін көреді, бірақ параллель программада программаның орындалу реті детерминделмегендіктен ол қай мәндерді көргендігін ешқашан білмейді.

Келесі прораммада бір де бір меншіктеу «бірден артық емес» шартына сәйкес келмейді.

Int x=0; y=0;

Parallel: x=x+1; //y=y+1;

Әрбір процессте өрнекте сын нұсқағыш болады және әрбір процесс оқыған айнымалы мәнін мәншіктейді. Шындығында х және у айнымалыларының соңғы мәндері 1 және 2, 2 және 1 немесе 1 және 1 болуы мүмкін (егер процесстер х және у айнымалысының мәндерін оларға мән меншіктегенге дейін оқыса.) Бірақ, әрбір меншіктеу басқа процесс өзгертетін бір ғана айнымалыға бір ғана рет нұсқағандықтан, белгілі бір қалып күйде шындығында болған мәндер соңғы болады. Бұл алдында келтірілген у+2 өрнегі басқа процесс өзгертетін екі айнымалыға нұсқағыш мысалдан өзгеше.

Жалпы жағдайда, егер өрнек немесе меншіктеу операторы «бірден артық емес» шартын қанағаттандырмаса, бірақ оны бөлінбейтін етіп орындау керек болса бір бөлінбейтін әрекетте операторлар тізбегін орындау керек. Кез –келген жағдайда, ірімодульды бөлінбейтін амалдарды – бөлінбейтін болып көрінетін ұсақмодульды бөлінбейтін амалдардың тізбегін беретін синхрондау механизмі қажет.

Нақты мысал ретінде деректер қоры х және у екі мәнінен тұрады, олар әрқашанда бірдей болуы керек, яғни деректер қорын қолданатын бірде бір процесс х және у өзгеше болатын қалып күйді көрмеуі тиіс. Яғни, егер процесс х-ті өзгертсе, ол сол бөлінбейтін әрекетте у-ті де өзгертуі керек.

Тағы да бір мысал: бір процесс байланысқан тізімдермен өрнектелген кезекке элементпен қоссын. Ал екінші процесс тізімде сол элемент болса, соны жоятын болсын. Бір айнымалы тізім басын, ал екіншісі – тізім сонын көрсетсін. Элементтерді қосу және жою екі мәнді өңдеуді қажет етеді. Мысалы, элементті қосу үшін алғашқы элементтің нұсқағышын және тізім соңының нұсқағышын жаңа элементке нұсқайтындай жағын өзгерту керек. Егер тізімде бір ғана элемент болса, бір уақытта қою және жою қайшылыққа алып келуі және тізімді қолдануға келмейтін қалып-күйге алып келуі мүмкін. Сонымен элементті қосу және жою бөлінбейтін әрекеттер болуы керек. Егер тізім бос болса, жою операциясын орындауды, тізімге элемент қосылғанға дейін қоя тұруы керек.

Бөлінбейтін амалдар үшбұрышты жақшалар < және > көмегімен беріледі. Мысалы, <е> - е өрнегі бөлінбей есептелетінін көрсетеді.

Синхрондау await операторы көмегімен анықталады:

< await (B)S>;

В бульдік айнымалы кідіріс шартын береді, ал S – аяқталуға кепілдігі бар операторлар тізбегінің тізімі ( мысалы, меншіктеу операторының тізбегі). Операторы бөлінбейтін әрекет ретінде орындалатындығын көрсету үшін үшбұрыш жақшаға алынады. Дербес жағдайда S орындала бастағанда және S тегі ешбір аралық қалып-күй басқа процесстерге көрінбейтін болса В өрнегі «ақиқат» мәніне ие болады. Мысалы,



0) S=S-1;> кодының орындалуы S-тің мәні оң болғанша кейінге қалдырылады, одан кейін ол 1-ге кемиді. Азайтқанға дейін S-тің мәні оң болатындығына кепілдік бар.

Await операторы кез-келген бөлінбейтін әрекеті бар ірімодульды анықтау үшін қолдануы мүмкін. Сондай-ақ тиімді.

Мысалы, жоғарыдағы келтірілген соңғы await операторы е семафорына Р операциясының дербес жағдайы.

Await операторының жалпы түрі - өзара алып тастау мен шарт бойынша синхрондауды анықтайды. Тек қана өзара алып тастауды анықтау үшін await операторының қысқа түрі қолданылады:



Мысалы, келесі операторда х және у-ң мәндері бөлінбейтін әрекетте өсіріледі:



Х-тің мәні 1-ге өскенде, ал у-әлі өсиегендегі аралық қалып-күй анықтама бойынша х және у айнымалыларына нұсқайтын басқа процесстер үшін көрінбейді.

Егер S тізбегі бірдің артық емес шартына қанағаттандыратын жалғыз меншіктеу операторы болса, немесе егер S бір машиналық инструкциямен жүзеге асырылса, онда бөлінбей орындалады; яғни «S; » дәл S сияқты болады.

Тек шартты синхрондауды беру үшін операторын қарастырайық;



Мысалы, процесстің келесі операторымен орындалуы айнымалысының мәні оң болғанға дейін қалдырылады.



0);>

Егер В берілген мысалдағыдай бірден артық емес шартын қанағаттандырса, онда «await (B); » өрнегі while (not B); ретінде жүзеге асырылады.

Бұл күту циклының мысалы while операторының денесі бос, сондықтан В-ның мәні жалған болғанға дейін циклданады.

Шартсыз бөлінбейтін әрекет –денесінде В кідіріс шарты болмайтын әрекет. Мұндай әрекет оның орындалуыныңбөлінбейтін шартына сәйкес бірден орындалуы мүмкін. Ұшбұрыш жағшадағы өрнектер және шарты жазылмаған немесе ақиқат мәнді қабылдайтын маппаратта жасалатын (ұсақ модульды) әрекеттер шартсыз бөлінбейтін әрекет болады.

Шартты бөлінбейтін амалдар – В шарты бар операторы.

Мұндай шарт В шарт ақиқат болғанша орындалмауы мүмкін. Егер В жалған болса, ол басқа процесстер әрекетінің нәтижесінде ақиқат болуы мүмкін. Егер В жалған болса процесстер әрекетінің нәтижесінде ақиқат болуы мүмкін. Сонымен шартты бөлінбей әрекеттің орындалуын күтетін процесс ұзақ кідірісте болуы мүмкін.




Достарыңызбен бөлісу:
1   ...   10   11   12   13   14   15   16   17   ...   45




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет