Приветствую Вас Гость • Регистрация • Вход • RSS
Пятница, 9.12.2016
Главная » Файлы » Қазақша рефераттар » Информатика [ Добавить материал ]

Ағындарды синхрондау


Оқушылар,студенттер,мұғалімдер,сайт қолданушылары өз материалыңызбен бөліссеңіз қуанышты болатын едік!

31.10.2015, 23:02

Ағындарды синхрондау


Ағындар программаны өңдеуде жəне құрастыруда жұмысты жеңілдетеді, сонымен қатар жылдамдығын жоғарлатады. Көбінесе екі немесе одан көп ағындарды сол мезетте орындалып жатқан кезде координациялау үшін қажеттіліктер туады.
Мысалы, бірнеше ағындар бір айнымалыға қатынау кезінде болады. Ал басқа жағдайларда бір ағын, басқа бір ағынның жұмысы аяқталмайынша, ол өзінің жұмысын жалғастыра алмайды. Міне, осындай жағдайларда синхрондау қажеттіліктері туады.
Синхрондау объектілері жəне күту функциялары.
Windows операциялық жүйелерінде синхрондау объектілері деп сигналдық (signaled) жəне сигналдық емес (nosignaled) екі күйдің бірінде бола алатын ядро объектілерін атайды. Синхрондау объектілері төрт класқа жіктелуі мүмкін.
Бірінші класқа синхрондау объектілерінің өзі, яғни параллелдік ағындарды синхрондау мəселелерін шешуге ғана арналған объектілер жатады.
Windows операциялық жүйелерінде мұндай объектілерге келесілер жатады:
- мьютекс (mutex);
- оқиғалар (event);
- семафор (semaphore).
Синхрондау объектілерінің екінші класына берілген уақыт интервалы өткеннен кейін сигналдық күйге ауысатын күтуші таймер (waitable timer) жатады.
Синхрондау объектілерінің үшінші класына өзінің жұмысы аяқталған соң сигналдық күйге ауысатын объектілер жатады:
- жұмыс (job);
- үрдіс (процесс) (process);
- ағын (thread).
Синхрондау объектілерінің төртінші класына объект құрамындағылар өзгергені туралы хабар алған соң сигналдық күйге ауысатын объектілер жатады, олар:
- каталог күйін өзгерту (change notification);
- консолдық енгізу (console input).
4.1 Күту функциялары. Windows-тағы күту функциялары дегеніміз – ол параметрлері синхрондау объектілері болып табылатын функциялар. Бұл функциялар əдетте ағындарды бұғаттау (блокировка) үшін қолданылады.
Ағындарды тосқауылдау келесідей орындалады. Егер синхрондау объектісінің дескрипторы күту функциясының параметрі болып табылса, ал синхрондау объектісінің өзі сигналдық емес күйде болса, онда осы күту функциясын шақырушы ағын синхрондау объектісі сигналдық күйге ауысқанша тосауылданады. Қазір біз тек екі күту функциясын ғана қарастырамыз:
WaitForSingleObject жəне WaitForMultipleObject.
WaitForSingleObject функциясы. Бір синхрондау объектісінің сигналдық күйге ауысуын күту үшін WaitForMultipleObject функциясын қолданамыз, ол келесідей түрде болады:
DWORD WaitForSingleObject(
HANDLE hHandle, // объект дескрипторы
DWORD dwMilliSeconds // миллисекундпен берілген күту интервалы);
WaitForSingleObject функциясы dwMilliSecons параметріне тең уақыт интервалы ішінде дескрипторы hHandle параметрімен берілетін синхрондау объектісінің сигналдық күйге ауысуын күтеді. Егер dwMilliSecons парметрінің мəні нөлге тең болса, онда функция тек синхрондау объектісінің күйін ғана тексереді. Егер dwMilliSecons парметрінің мəні INFINITE мəніне тең болса, онда функция синхрондау объектісінің сигналдық күйге ауысуын шексіз ұзақ күтеді.
WaitForSingleObject функциясы сəтті орындалған жағдайда келесі мəндердің бірін қайтарады:
-WAIT_OBJECT_0 - объект сигналдық күйге ауысты;
-WAIT_ABBANDONED - ұмытылған мьютекс;
-WAIT_TIMEOUT - күту уақыты бітті.
WAIT_OBJECT_0 мəні – синхрондау объектісінің сигналдық күйде болғанын немесе сигналдық күйге ауысқанын білдіреді.
WAIT_ABBANDONED мəні синхрондау объектісі ретінде аяқталған ағыннан босамаған мьютекс болғанын білдіреді. Бұл жағдайда мьютекс операциялық жүйемен босатылғандықтан сигналдық күйге ауысады. Мұндай мьютекс кейде ұмытылған немесе тасталынған (abanhoned mutex) мьютекс деп аталады.
WAIT_TIMEOUT мəні күту уақытының біткенін, ал синхрондау объектісінің əлі сигналдық күйге ауыспағандығын білдіреді.
WaitForSingleObject функциясы сəтсіз орындалған жағдайдаWAIT_FALED мəнін қайтарады.
WaitForMultipleObject функциясы. Бірнеше синхрондау объектілерін немесе бірнеше синхрондау объектілерінің ішінен бір синхрондау объектісін сигналдық күйге ауысуын күту үшін келесі прототипте болатын WaitForMultipleObject функциясы қолданылады:
DWORD WaitForMultipleObjects(
DWORD nCount, // объектілер саны
CONST HANDLE *lpHandles, // массив дескрипторов объектов
BOOL bWaitAll, // күту жағдайы
DWORD dwMilliSeconds // күту интервалы (миллисекунд);
WaitForMultipleObject функциясы келесідей жұмыс істейді. Егер bWaitAll параметрінің мəні TRUE болса, онда бұл функция,
dwMilliseconds параметрінің мəніне тең уақыт интервалы аралығында, дескрипторы lpHandles массивінде берілген барлық синхрондау объектілері сигналдық күйге ауысқанша күтеді. Егер bWaitAll параметрінің мəні FALSE болса, онда бұл функция берілген уақыт интервалы ішінде берілген синхрондау объектілерінің кез келгені сигналдық күйге ауысуын күтеді. Егер dwMilliseconds параметрінің мəні нөлге тең болса, онда функция синхрондау объектілерінің күйін ғана тексереді. Егер dwMilliseconds параметрінің мəні INFINITE болса, онда функция синхрондау объектілерінің синалдық күйге ауысуын шексіз ұзақ күтеді. WaitForMultipleObject функциясымен күтілетін синхрондау объектілерінің саны MAXIMUM_WAIT_OBJECTS мəнінен аспауы керек. Сондай ақ, синхрондау объектілері қайталанбауы керек екендігін ескерте кеткен жөн.
WaitForMultipleObject функциясы сəтті аяқталған жағдайда келесі міəндерді береді:
-WAIT_OBJECT_0 мəнінен (WAIT_OBJECT_0 + nCount - 1) мəніне дейін;
-WAIT_ABBANDONED_0 мəнінен (WAIT_ABBANDONED_0 + nCount - 1) мəніне дейін;
-WAIT_TIMEOUT.
WaitForMultipleObject қайтарушы функциясының интерпретациясының мəні bWaitAll кіріс параметрінің мəніне байланысты. Алдымен бұл параметрдің мəні TRUE болған жағдайды қарастырайық. Онда берілетін мəн келесідей интерпретацияланады:
- WAIT_OBJECT_0 мəні мен (WAIT_OBJECT_0 + nCount - 1) мəні аралығындағы диапазонында болатын кез келген қайтарылатын мəндер барлық синхрондау объектілері сигналдық күйде болғанын немесе соған ауысқанын білдіреді;
- WAIT_ABBANDONED_0 мəні мен (WAIT_ABBANDONED_0 + nCount - 1) мəні аралығындағы диапазонында болатын кез келген қайтарылатын мəндер барлық синхрондау объектілері сигналдық күйде болғанын немесе соған ауысқанын жəне олардың ең болмаса біреуі ұмытылған мьютекс болғанын білдіреді;
- WAIT_TIMEOUT қайтарушы мəні күту уақыты аяқталғанын, бірақ бірде бір синхрондау объектілері сигналдық күйге ауыспағандығын білдіреді.
WaitForMultipleObject функциясы сəтсіз аяқталған жағдайда WAIT_FALED мəнін білдіреді.
4.2 Ағындарды синхрондау объектілері
Ағындарды жəне үрдістерді синхрондау үшін арналған Win 32 төрт объектілерді ұсынады. Олардың үшеуі – мьютекстер, семафорлар мен істер – бұлар ядроның объектілері болып табылады жəне дескрипторлары болады. 
Төртінші объект - CRITICAL_SECTION. CRITICAL_SECTION объектілерінің ыңғайлылығына жəне жылдамдығының жоғары болуына байланысты, бұлардың механизмдері қажеттірек.
CRITICAL_SECTION объекті.
Windows операциялық жүйелерінде бір үрдіс (процесс) контекстінде орындалатын параллелді ағындар үшін өзара ерекшелік (взаимного исключения) мəселелері операциялық жүйенің ядросы болып саналмайтын CRITICAL_SECTION типтік объектісінің көмегімен шешіледі. 
CRITICAL_SECTION типтік объектілермен жұмыс істеу үшін келесі функциялар қолданылады:
// критикалық секцияны инициализациялау
VOID InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
// критикалық секцияға кіру
VOID EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
// критикалық секцияға кіру əрекетін жасау
BOOL TryEnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
// критикалық секциядан шығу
VOID LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
// критикалық секцияны жою
VOID DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
Бұл функциялардың əрбірі CRITICAL_SECTION типтік объектісіне сілтеме жасайтын жалғыз параметрге ие. TryEnterCriticalSelection функциясынан басқа барлық функциялар мəндерді қайтармайды.
TryEnterCriticalSelection функциясы егер ағын критикалық секцияға кірген болса нөлдік емес мəнді қайтарады, қарсы жағдайда функция FALSE мəнін қайтарады.
Осы функцялармен жұмыс істеу тəртібін қарастырайық. Ол үшін программаны жобалау кезінде параллелдік ағындарда критикалық секциялар бөлдік делік, бұл критикалық секцияларда осы ағындар жіктейтін ресурстар қолдыналады. Сонда программада CRITICAL_SECTION типтік объектіні анықтаймыз жəне осы объектінің аты қолданылатын жіктеуші ресурстармен логикалық тұрғыда байланысты деп санаймыз. CRITICAL_SECTION типтік объектісімен жұмыс жасаудан бұрын, оны инициализациялау керек. Бұл үшін InitializeCriticalSelection функциясы арналған. CRITICAL_SECTION типтік объектісі инициализацияланған соң əрбір параллелді ағындарда критикалық секцяға кірместен бұрын EnterCriticalSelection функциясын шақырамыз, ол параллелдік ағындарда орындалып жатқан жəне бөлінуші ресурстармен байланысты критикалық секцияларға біруақытта кіруге жол бермейді. Бөліуші ресурстармен жұмыс істеп біткен соң, ағын өзінің критикалық секциясынан шығуы керек, бұл LeaveCriticalSelection функциясының көмегімен іске асырылады. CRITICAL_SECTION типтік объектісімен жұмыс істеп біткен соң осы объектімен жұмыс істеген барлық жүйелік ресурстарды босату керек. Осы мақсатында DeleteCriticalSection функциясы қолданылады.
Мьютекстер
Мьютекс обьектісі (ағылшын сөзінен аударғанда mutual exclusion – взаимное исключение) кодтың критикалық секциясына қарағанда, көптеген мүмкіншіліктерді ұсынады. Мьютекске аты жəне дескриптор беріледі,
сондықтан бұл обьектілер əр үрдістер арасында ағындарды синхрондау үшін қолданады. Мьютекс КС-ға ұқсас, ерекшелігі мьютекстер тайм-аут функциясын қолданады жəне сигнал беру күйіне көшеді. Ағын мьютекстің дескрипторына күту режимін орындаған (функции WaitForSingleObject жəне WaitForMultipleObjects) кезде мьютексті толықтай иеленеді. Ағын бір мьютексті бірнеше рет қабылдай алады. Соңында ағын мьютексті қанша рет қабылдаса, сонша рет босату керек.
Бақылау сұрақтары:
1. Ағындардың синхрондау объектілерін атаңыз ?
2. Қандай объектілер ағындарды процессор – аралық синхрондауға арналған (əр үрдістегі)?

 


Похожие материалы

Рахмет ретінде астында тұрған жарнамалардың біреуін басуды сұраймын!

Категория: Информатика | Добавил: Admin
Просмотров: 671 | Загрузок: 0 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]