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


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

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

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 (
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 мəнін білдіреді.

Ағындарды синхрондау объектілері.
Ағындарды жəне үрдістерді синхрондау үшін арналған Win 32 төрт объектілерді ұсынады. Олардың үшеуі - мьютекстер, семафорлар мен істер - бұлар ядроның объектілері болып табылады жəне дескрипторлары болады.
Төртінші объект - CRITICAL_SECTION. CRITICAL_SECTION объектілерінің ыңғайлылығына жəне жылдамдығының жоғары болуына байланысты, бұлардың механизмдері қажеттірек.
CRITICAL_SECTION объекті.
Windows операциялық жүйелерінде бір үрдіс (процесс) контекстінде орындалатын параллелді ағындар үшін өзара ерекшелік (взаимного исключения) мəселелері операциялық жүйенің ядросы болып саналмайтын CRITICAL_SECTION типтік объектісінің көмегімен шешіледі.
CRITICAL_SECTION типтік объектілермен жұмыс істеу үшін келесі функциялар қолданылады:
// критикалық секцияны инициализациялау
VOID (LPCRITICAL_SECTION lpCriticalSection) ;
// критикалық секцияға кіру
VOID EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection) ;
// критикалық секцияға кіру əрекетін жасау
BOOL (LPCRITICAL_SECTION lpCriticalSection) ;
// критикалық секциядан шығу
VOID LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection) ;
// критикалық секцияны жою
VOID DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection) ;
Бұл функциялардың əрбірі CRITICAL_SECTION типтік объектісіне сілтеме жасайтын жалғыз параметрге ие. функциясынан басқа барлық функциялар мəндерді қайтармайды.
функциясы егер ағын критикалық секцияға кірген болса нөлдік емес мəнді қайтарады, қарсы жағдайда функция FALSE мəнін қайтарады.
Осы функцялармен жұмыс істеу тəртібін қарастырайық. Ол үшін программаны жобалау кезінде параллелдік ағындарда критикалық секциялар бөлдік делік, бұл критикалық секцияларда осы ағындар жіктейтін ресурстар қолдыналады. Сонда программада CRITICAL_SECTION типтік объектіні анықтаймыз жəне осы объектінің аты қолданылатын жіктеуші ресурстармен логикалық тұрғыда байланысты деп санаймыз. CRITICAL_SECTION типтік объектісімен жұмыс жасаудан бұрын, оны инициализациялау керек. Бұл үшін функциясы арналған. CRITICAL_SECTION типтік объектісі инициализацияланған соң əрбір параллелді ағындарда критикалық секцяға кірместен бұрын функциясын шақырамыз, ол параллелдік ағындарда орындалып жатқан жəне бөлінуші ресурстармен байланысты критикалық секцияларға біруақытта кіруге жол бермейді. Бөліуші ресурстармен жұмыс істеп біткен соң, ағын өзінің критикалық секциясынан шығуы керек, бұл функциясының көмегімен іске асырылады. CRITICAL_SECTION типтік объектісімен жұмыс істеп біткен соң осы объектімен жұмыс істеген барлық жүйелік ресурстарды босату керек. Осы мақсатында DeleteCriticalSection функциясы қолданылады.
Мьютекс обьектісі (ағылшын сөзінен аударғанда mutual exclusion - взаимное исключение) кодтың критикалық секциясына қарағанда, көптеген мүмкіншіліктерді ұсынады. Мьютекске аты жəне дескриптор беріледі,
сондықтан бұл обьектілер əр үрдістер арасында ағындарды синхрондау үшін қолданады. Мьютекс КС-ға ұқсас, ерекшелігі мьютекстер тайм-аут функциясын қолданады жəне сигнал беру күйіне көшеді. Ағын мьютекстің дескрипторына күту режимін орындаған (функции WaitForSingleObject жəне ) кезде мьютексті толықтай иеленеді. Ағын бір мьютексті бірнеше рет қабылдай алады. Соңында ағын мьютексті қанша рет қабылдаса, сонша рет босату керек.

Үрдіс түсінігі

Үрдіс - белгілі бір нәтижеге жету үшін орындалатын тізбектелген әрекеттердің жиынтығы.

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

Үрдістің құрамында кодасы жəне деректері бар жекеменшіктік тəуелсіз виртуалды кеңістік бар, ол басқа процесстерден қорғалынған. Əрбір үрдіс өз алдына құрамында бір немесе бірнеше өзалдына тəуелсіз орындалын жатқан ағындар бола алады. Процесс өзінің ішінде жаңа ағындар жəне жаңа тəуелсіз үрдістер құра алады жəне хабарды басқара алады жəне объектілерді синхрондай алады.

Windows операциялық жүйесіндегі процесстер мен ағындар

Əрбір процесстің құрамында бір немесе бірнеше ағын бар. Windows операциялық жүйесіндегі ағын дегеніміз - орындалудың негізгі бірлігі.
Программист тұрғысынан Win32 жүйесіндегі əрбір процесстің құрамында төменде көрсетілген компоненттер бар:
- Бір немесе бірнеше ағындар;
- Басқа процесстердің адрестік кеңістіктерінен өзге ауани адрестік кеңістік, бұл жағдай жадыны нақты бөлу жағдайына қатысты емес.
Жадыда көрінетін файлдар физикалық жадыдан орын алғанымен, əртүрлі процесстер жадыда көрінетін файлдарға əртүрлі ауани адрестерді қолданады:
- DLL кодамен қоса бір немесе бірнеше кода сегменттерін;
- ауқымды айнамалылардан тұратын бір немесе бірнеше деректер сегменттерін; ортамен (окружения) байланысты айнымалылыр туралы ақпараты бар орта қатарлары, мысалыіздестірудің ағынды жолы.
• процесс үймелері жадысы.
• ашық дескрипторлар немесе басқа үймелер сияқты ресурстар.
Процесстің барлық ағындары кодаларды, ауқымды айнымалыларды, орта (окружения) қатарларын жəне ресурстарды ортақ түрде қолданады. Əрбір ағын тəуелсіз түрде жоспарланады. Ағын құрамына төменде келтірілген элементтер кіреді:
- процедураларды, үзулерді, алып тастауларды (исключений) өңдеуді жəне автоматтық деректерді шақыру стегі;
- ағынның жергілікті жадысы (Thread Local Storage - TLS) - көрсеткіштер (сілтемелер) массивы, олар процесске жекеменшіктік ерекше орта (окружения) деректерін қалыптастыру үшін жады бөлуге мүмкіндік береді;
- деректер қалыптастырған ағыннан алынған стек параметрі, ол əдетте əр ағын үшін ерекше болып табылады;
- құрамында аппараттық регистрлердің мəндері бар контекст құрылымы. Ол ядромен басқарылады.

... жалғасы

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



Реферат Курстық жұмыс Диплом Материал Диссертация Практика Презентация Сабақ жоспары Мақал-мәтелдер 1‑10 бет 11‑20 бет 21‑30 бет 31‑60 бет 61+ бет Негізгі Бет саны Қосымша Іздеу Ештеңе табылмады :( Соңғы қаралған жұмыстар Қаралған жұмыстар табылмады Тапсырыс Антиплагиат Қаралған жұмыстар kz