Ағын түсінігі



Ағын түсінігі
Ағын түсінігі процессордың программаны орындау барысындағы
əрекеттерінің тізбектілігімен байланысты. Программа инструкцияларының мұндай тізбектілігі программа ішінде ағындарды басқару деп аталады.
Программа көпағынды деп аталады, егер бұл программада бір уақытта бірнеше программа орындала алатын болса. Бұл жағдайда ағындар параллельді (қатарлас) деп аталады. Егер программада бір уақытта бір ғана ағын орындалатын болса, мұндай программа бір ағындық деп аталады.
Windows-та ағын деп қосымшаларды орындау үшін процессорлық уақыттар берілетін ядроның объектісі. Әрбір ағынға келесі ресурстар жатады: атқарылатын функцияның коды, процессор, регистрлер, операциялық жұмысқа арналған стек, қауіпсіздік жүйесіне арналған ақпараты бар қатынас құру маркері.

#include iostream.h
int main()
{
int a, ' b;
cout "Input two integers: ";
cin a b;
if (a == b)
{
cout "There is no min." endl;
return 0;
if (а b)
cout "min = " а endl;
else
cout "min = " b endl;
return 0;
}

Ағындарды диспетчерлеу жəне жоспарлау

Мультипрограммалық операциялық жүйелерде ағындарға қызмет көрсету келесідей болады. Процессор жұмысының уақыты кванттарға (интервалдарға) бөлінеді, олар өз алдына ағындардың жұмыстары үшін үлестіріледі. Уақыт кванты біткен соң, ағынның жұмысы үзіліп, процессор басқа ағымға тағайындалады. Уақыт кванттары мен ағындар арасында үлестіру жұмысымен ағындар менеджері деп аталатын арнайы программа айналысады.
Ағындар менеджері процессорды басқа ағынға ауыстырғанда келесі əрекеттерді істеуі керек:
- іске қосылатын ағынның оның үзілу кезіндегі контекстіне қайта қалпына;
- басқаруды іске қосылатын ағынға беру.
Бірдей приоритетті ағындарды басқару алгоритмін қарастырайық. Бұл ағындар процессорға кезекке тұрады. Процессор ағындарға FIFO (first in -- first out), яғни бірінші келген - бірінші шығады тəртібімен қызмет көрсетеді.
Қызмет көрсетудің мұндай тəртібі циклдық қызмет көрсету деп аталады.
Өйткені аяқталмаған ағымдар келесі қызмет көрсетілгенше тосқауылданады, яғни қызмет көрсетілмей шығырылып тасталмайды. Сондай ақ, мұндай циклдық қызмет көрсету FCFS (first come -- first served), яғни бірінші келді - бірінші қызмет көрсетілді деп те аталады.
Егер ағындардың приоритеттері əр түрлі болса, оларды басқаруға бірнеше кезектері бар айтарлықтай күрделі алгоритм керек болады. Бұл жағдайда əрбір кезекте бірдей приоритетті ағындар жиналады.
Бірнеше кезектерге қызмет көрсететін қарапайым алгоритм келесідей болады: бірінші болып приоритеттері жоғары ағындарға қызмет көрсетіледі.
Жалпы жағдайда ағындарды басқару екіге бөлінеді: жоспарлау жəне диспетчерлеу. Ағынды жоспарлау деп үзілген ағындарды кезекке қою үшін қолданылатын алгоритмді айтамыз. Ағындардың менеджер (диспетчер) үзілген ағынның приоритетін өзгерте алады, бұл өз алдына осы ағын тұратын кезекті өзгертуі мүмкін. Жоспарлау алгоритмі кестелер теориясы деп аталатын математикалық пəнмен зертелінеді. Ағындарды диспетчерлеу дегеніміз процессорға ағындарға қызмет көрсетуі үшін тəртіп орнатуы. Диспетчерлеу алгоритмдері жаппай қызмет көрсету теориясы деп аталатын математикалық пəнмен зерттеледі.

Ағындарды басқару алгоритмі жүйенің келесі параметрлерін оптимизациялау үшін əзірлендеі:
- микропроцессордың жұмыс істеу уақыты максималды болуы керек;
- жүйенің өткізу қабілеті максималды болуы керек;
- ағынның жүйеде болу уақыты минималды болуы керек;
- ағынның кезекте күтіп тұру уақыты минималды болуы керек;
- жүйенің тапсырыстарға жауап беру уақыты минималды болуы керек.
Жəне бұл жағдайда əр жүйе үшін ағындардың контекстеріне ауысу шығындарын азайтатын оптималды қызмет көрсету интервалдары таңдалуы керек. Жалпы жағдайда процессордың жұмыс істеу уақытын ағындар арасында бөлу орындалуына көп уақыт қажетсінбейтін ағындарды тез орындауға мүмкіндік береді, бірақ еңбекауқымдылығы жоғары ағындардың орындаулын баяулатады.

Ағынды анықтау

Windows-та ағын деп қосымшаларды орындау үшін процессорлық уақыттар берілетін ядроның объектісі. Əрбір ағынға келесі ресурстар жатады:
- атқарылатын функцияның кодасы;
- процессор регистрлерінің жиынтығы;
- қосымша жұмысына арналған стек;
- операциялық жүйенің жұмысына арналған стек;
- құрамында қауіпсіздік жүйесіне арналған ақпараты бар қатынас құру маркері.
Аталған ресурстар біріге отырып Windows-тағы ағын контекстін құрайды.
Windows-тағы əрбір ағынның құрамында дескриптормен қоса идентификатор болады. Ол жүйеде орындалып жатқан ағындар үшін ерекше болып табылады.
Ағындардың идентификаторын пайдаланушыларға ағындардың жұмысын бақылауға мүмкіндік беретін қызметтік программалар қолданады.
Windows операциялық жүйесінде ағындардың екі типі болады:
- жүйелік ағындар;
- пайдаланушылық ағындар.
Жүйелік ағындар операциялық жүйенің түрлі қызметтерін атқарады жəне олар операциялық жүйенің ядросымен іске қосылады.
Пайдаланушылық ағындар пайдаланушылар мəселелерін шеші үшін қызмет атқарады жəне қосымшалар арқылы іске қосылады.
Жұмыс істеуші ағындарды екі типті ағындар бар:
- жұмысшы ағындар (working threads);
- пайдаланушы интерфейсінің ағындары (user interface threads).
Жұмысшы ағындар қосымшаның түрлі фондық мəселелерін атқарады.
Пайдаланушы интерфейсінің ағындары терезелермен байланысты жəне терезелерге келіп түсетін хабарларды өңдеумен байланысты жұмыстарды атқарады. Əрбір қосымшада кем дегенде бірінші (primary) немесе негізгі (main) деп аталатын бір ағын болады. Консольдық қосымшаларда бұл ағын main функциясын атқарады. Графикалық интерфейсі бар қосымшаларда бұл ағын WinMain функциясын атқарады.

Ағын күйі
Ағын бүкіл программаның динамикалық іс-əрекетін немесе программадағы қандай да бір функцияны баяндайды. Белгілеу ыңғайлы болу үшін программаны бір ағынды деп алайық. Онда ағынды келесі жұп ретінде қарастыруға болады:
ағын = (процессор, программа).
Программа процессорда орындала алады, егер бұл программа дайын болса ғана. Сонымен қатар, процессордың өзі де бос болуы керек жəне осы программаны орындауға дайын болуы керек.
Процессор мен программаның күйлерін жазу үшін келесі атауларды енгізейік: процессор үшін - "белгіленбеген", "белгіленген", ал программа үшін - "дайын емес", "дайын".
Онда ағын күйін келесі жіп күйлер арқылы анықтауға болады:
Ағын күйі = (процессор күйі, программа күйі).
Ағын күйі үшін келесі атауларды енгізейік: "тосқаулданған"("белгіленбеген", "дайын емес"), "дайын" ("белгіленбеген", "дайын") жəне "орындалуда" ("белгіленген", "дайын").
Ағынның бір күйден екінші күйге ауысулары диаграммада доғалармен
белгіленген жəне олар ағындармен жүргізілетін қандай да бір операцияларды баяндайды.
Күй түрлері:
- "жаңа" - өзінің жұмысын əлі бастамаған ағын;
- "аяқталды" - өзінің жұмысын аяқтаған ағын;
- "ұйқыда" - ағын ұйқылы күйде, яғни өзінің орыдалуын қандайда бір уақыт интервалы аралығына тоқтатқан.
Ауысулар, яғни диаграммадағы доғалар баяндайтын операциялардың атаулары олардың жанында стрелкамен көрсетілген. Операцияларды қысқаша баяндасақ, олар:
- create операциясы.
- Exit операциясы - ағын аяқталған жағдайда, ағынның өзімен орындалады жəне ағынды "орындалуда" күйінен "аяқталды" күйіне ауыстырады.
- Run операциясы - процессорлық уақытты бөліп береді жəне ағынды "дайын" күйден "орындалуда" күйіне ауыстырады.
- interrupt операциясы - ағынның орындалуын тоқтатады жəне оны " орындалуда " күйден " дайын " күйіне ауыстырады.
- Block операциясы - ағынды "орындалуда" күйінен "тосқауылданған" күйіне ауыстырады. Бұл операция қандайда бір оқиғаның болуын күткен жағдайда орындалады, мысалы, енгізу-шығару немесе ресурсты босату операциялары аяқталғанда.
- unblock операциясы - ағынды " тосқауылданған " күйінен "дайын" күйіне ауыстырады. Бұл операция ағын күткен оқиға орындалған жағдайда іске қосылады.
- suspend операциясы - ағынның орындалуын тоқтатады.
- Resume операциясы - ағынның орындалуын қайта бастайды.
- sleep операциясы - ағынды "ұйқыда" күйіне ауыстырады.
- wakeup операциясы - операциялық жүйеге ағынды оятуға мүмкіндік береді.

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

Ағындар программаны өңдеуде жəне құрастыруда жұмысты жеңілдетеді, сонымен қатар жылдамдығын жоғарлатады. Көбінесе екі немесе одан көп ағындарды сол мезетте орындалып жатқан кезде координациялау үшін қажеттіліктер туады.
Мысалы, бірнеше ағындар бір айнымалыға қатынау кезінде болады. Ал басқа жағдайларда бір ағын, басқа бір ағынның жұмысы аяқталмайынша, ол өзінің жұмысын жалғастыра алмайды. Міне, осындай жағдайларда синхрондау қажеттіліктері туады.
Синхрондау объектілері жəне күту функциялары.
Windows операциялық жүйелерінде синхрондау объектілері деп сигналдық (signaled) жəне сигналдық емес (nosignaled) екі күйдің бірінде бола алатын ядро объектілерін атайды. Синхрондау объектілері төрт класқа жіктелуі мүмкін.
Бірінші класқа синхрондау объектілерінің өзі, яғни параллелдік ағындарды синхрондау мəселелерін шешуге ғана арналған объектілер жатады.
Windows операциялық жүйелерінде мұндай объектілерге келесілер жатады:
- мьютекс (mutex);
- оқиғалар (event);
- семафор (semaphore).
Синхрондау объектілерінің екінші класына берілген уақыт интервалы өткеннен кейін сигналдық күйге ауысатын күтуші таймер (waitable timer) жатады.
Синхрондау объектілерінің үшінші класына өзінің жұмысы аяқталған соң сигналдық күйге ауысатын объектілер жатады:
- жұмыс (job);
- үрдіс (процесс) (process);
- ағын (thread).
Синхрондау объектілерінің төртінші класына объект құрамындағылар өзгергені туралы хабар алған соң сигналдық күйге ауысатын объектілер жатады, олар:
- каталог күйін өзгерту (change notification);
- консолдық енгізу (console input).

Күту функциялары.
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 мəнін білдіреді.

Ағындарды синхрондау объектілері.
Ағындарды жəне үрдістерді синхрондау үшін ... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Ағындар мен үрдістерді басқару
Қаржылық инвестиция портфелінің түсінігі, мазмұны және түрлері
Процесстер мен ағымдарды басқару
Процесс - орындалатын бағдарлама
Лас суларды тазалау әдістері
Компанияның ақша қаражаттары қозғалысын талдау. Ақша ағымын болжамдау
Отынның негізгі жану фазалары жайлы ақпарат
Эканомикалық іс-әрекеттерді нәтіжесін өлшеу
Идеал серпімді қатты денелер. Идеал сұйық динамикасының негізгі заңы
Жалпы ұлттық өнімің (ЖҰӨ) жалпы сипаттамасы
Пәндер