Ағындар мен үрдістерді басқару


Жоспары

  1. Кіріспе
  2. Негізгі бөлім
  1. Ағын түсінігі
  2. Ағындарды диспетчерлеу жəне жоспарлау
  3. Ағынды анықтау
  4. Үрдіс түсінігі
  5. Windows операциялық жүйесіндегі процесстер мен ағындар
  1. Қорытынды

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

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

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 функциясын атқарады.

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

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

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

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

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

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

Процесстерді қалыптастыру
Windows жүйесінде жаңа процесс прототипі төменде көрсетілген createProcess функциясын шақыру арқылы қалыптасады:

LPCTSTR lpApplicationName, // атқарылатын модулдің атауы
LPTSTR lpCoramandLine, // командалық қатар
LPSECURITY_ATTRIBUTES lpProcessAttributes, // процессті қорғау
LPSECURITY_ATTRIBUTES lpThreadAttributes, // ағынды қорғау
BOOL bInheritHandles, // дескрипторды иемдену белгілері
DWORD dwCreationFlags, // процессті жасау белгілері
LPVOID lpEnvironment, // жаңа орта (окружения) блогы
LPCTSTR lpCurrentDirectory, // ағынды каталог
LPSTARTUPINFO lpStartUpInfo, // негізгі терезе түрі
LPPROCESS_INFORMATION lpProcessInformation // процесс
// туралы ақпарат ) ;
CreateProcess функциясы процесс жəне ағын сəтті қалыптасқан болса TRUE мəнін қайтарады, сəтсіздік жағдайында FALSE мəнін қайтарады. Жаңа процесс қалыптастыратын процесс аталық (parent process) деп аталады. Басқа процес арқылы қалыптасқан жаңа процесс бағынқы (child process) деп аталады.
CreateProcess функциясының кейбір параметрлерін баяндайық. Бірінші параметр - lpApplicationName - қатарды ехе типтік атқарылушы файлдың атымен анықтайды, жəне ол жаңа процесс қалыптасқанда іске қосылады. Бұл қатар нөлмен аяқталуы керек жəне атқарылушы файлға апаратын толық жоды кқрсету керек. Қайтарылатын мəн:
lpCommandLine параметрін қолданғанда жүйе жаңа процессті іске қосуы үшін қажетті ехе-файлды іздестіруді бастайды, іздестіру жүргізілетін каталогтар тізімі төменде көрсетілген:
- қосымша іске қосылған каталог;
- аталық процесстің ағынды каталогы;
- Windows-тың жүйелік каталогы;
- Windows каталогы;
- ортаның PATH айнымалысында тізімделген каталогтар.

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

Иемделінген дескриторлар өздерінің түпнұсқаларындағыдай (оригинал) атрибуттардан тұрады.
dwCreationFlags параметрінде бірнеше белгілерді біріктіруге болады.
- CREATE_SUSPENDED - бастапқы ағын, ол күту күйінде болады жəне тек ResumeThread функциясын шақырғаннан кейін ғана іске қосылады.
- DETACHED_PROCESS жəне CREATE_NEW_CONSOLE - өзара алып тастаушы белгілер; бұлардың екеуінде бір уақытта орнатуға болмайды. Бірінші белгі процессті консолсыз қалыптастырады, екіншісі жаңа процесске консоль ұсынады. Ешер осы екі белгілердің бірі орнатылмаған болса, процесс аталық процесстің консольін иемденеді.
- -жаңа процесстер тобы үшін жаңа процессті түпкі (корневой) етіп анықтайды. Егер топтағы процесстер бірігіп бір консольді қолданса, онда олар консольді басқару сигналын қабылдайды.
Кейбір белгілер жаңа процесс ағынының приоритетін басқарады. Əзірше аталық процесстің приоритетін немесе NORMAL_PRIORITY_CLASS мəнін қолданамыз.
lpEnvironment жаңа процесс үшін орта (окружения) блогын көрсетеді. Егер параметр NULL мəніне ие болса, онда аталық процестің ортасын (окружения) қолданады.
lpCurrentDirectory жаңа процесс үшін диск жəне каталог анықтайды. Егер оның мəні NULL болса, онда аталық процесстің жұмысшы каталогы қолданылады.
lpStartUpInfo жаңа процесс үшін стандарттық құрылғылардың программалар мен дескрипторларының негізгі терезелерін көрсетеді.
lpProcessInformation параметрі қалыптасқан процеске жəне ағынға арналған дескрипторлар мен идентификаторлар орналасатын құрылымды анықтайды.
PROCESS_INFORMATION құрылымы келесідей анықталады:
typedef struct _PROCESS_INFORMATION { HANDLE hProcess;
HANDLE hThread; DWORD dwProcessID; DWORD dwThreadID;
} PROCESS_INFORMATION;
Процесстің аяқталуы
Процесс жұмысын ExitProcess функциясын шақыру арқылы аяқтай алады, оның прототипі төменде көрсетілген:
VOID ExitProcess(
UINT uExitCode // процесстен қайтару коды ) ;
ExitProcess функциясын шақырған кезде процесстің барлық ағындары қайтару кодымен аяқталады, қайтару коды осы функцияның параметрі болып табылады. Бұл функцияны орындаған кезде жүйе процесспен жүктелген динамикалық кітапханаларға DLL_PROCESS_DETACH хабарын жібереді, бұл хабар динамикалық кітапхананы процесстен ажырату керектігін білдіреді.
Бір процесс басқа процестің көмегімен TerminateProcess функциясын шақыру арқылы аяқтала алады, оның прототипі келесідей:
BOOL TerminateProcess(
HANDLE hProcess, // процесс дескрипторы
UINT uExitCode // қайтару кодасы ) ;
Егер TerminateProcess функциясы сəтті орындалса, нөльдік емес мəн қайтарылады, қарсы жағдайда - FALSE. TerminateProcess функциясы процесс жұмысын аяқтайды, бірақ осы процесске қатысты ресурстарды босатпайды, өйткені жүйе процесспен жүктелген динамикалық кітапханаларға кітапхананы процесстен ажырату туралы хабарды жібермейді. Сондықтан бұл функция процесс тоқтап қалған төтенше жағдайларда ғана шақырылуы тиіс.
Процесстерді идентификациялау
Процесс жаңа бағыңқы (дочерный) процесстің идентификаторы мен дескрипторын PROCESS_INFORMATION құрылымынан ала алады. Бағыңқы процесстің дескрипторын жабу оған аталық процесстің қатынас құру мүмкіндігін ғана жояды. Бұл процесстің баяндамасын алу үшін келесі жұп функциялар қолданылады.
HANDLE GetCurrentProcess (VOID)
DWORD GetCurrentProcessId (VOID)
GetCurrentProcess функциясы шын мəнінде иемделінбейтін псевдодескрипторды қайтарады. Бұл мəн процесске өзінің жеке дескрипторы керек кезде қолданылады. Қайтарылған GetCurrentProcessId функцияның мəнін OpenProcess функциясын шақырылымында қолдана отырып, оның ID арқылы процесстің нағыз дескриторын қалыптастырыңыз.
HANDLE OpenProcess ( DWORD fdwAccess, BOOL fInherit,
DWORD IDProcess)
Қайтарылатын мəн: процесс дескрипторы немесе қате болған жағдайда NULL мəні.
fdwAccess параметрі процесстің дескриторға қатынас құру параметрін анықтайды. Оның мүмкін болатын кейбір мəндерін келтірейік.
- SYNCHRONIZE белгісі басқа процесстерге күту функциясын қолдана отырып осы процессті күтуге рұқсат береді;
- OCESS_ALL_ACCESS - қатынас құрудың барлық белгілері орнатылған;
- PROCESS_TERMINATE белгісі TerminateProcess функциясын шақыру арқылы процесстің аяқталуына мүмкіндік береді;
- белгісі GetExitCodeProcess функциясы арқылы дескрипторды қолдануға рұқсат береді жəне GetPriorityClass функциясы арқылы процесс туралы ақпарат алуға рұқсат береді.
Орындалушы процесс өзінің жүктеуші файлының атауын GetModuleFileName функциясы көмегімен анықтай алады, бұл жағдайда hModule параметрі ретінде NULL көрсеткіші қолданылады. Бұл функцияны динамикалық кітапханадан шақыру кітапханамен қолданылатын . ЕХЕ файлды емес, DLL файлының атауын.
Дескрипторларды көшіру
Аталық жəне бағыңқы процесстерге бағыңқы процесстен иемделінген дескриптор арқылы анықталатын объектіге қатынас құру үшін түрлі қатынас құрулар қажет болуы мүмкін. Сондай ақ, процесске бағыңқы процестің қолдануына арналған GetCurrentProcess функциясы арқылы қалыптасқан псевдодескриптоордың орынын нағыз дескриптор керек болуы мүмкін. Бұл мəселені шешу үшін аталық процесс дескриптордың қажетті қатынас құру жəне иемдену түрлеру бар көшірмелерді қалыптастыруы керек. Төменде дескрипторларды көшіруге арналған функциялар келтірілген:
BOOL DuplicateHandle(
HANDLE hSourceProcessHandle, // таратушы (источник) процесс
// дескрипторы
HANDLE hSourceHandle, // бастапқы дескриптор
HANDLE hTargetProcessHandle, // қабылдаушы процесс
// дескрипторы
LPHANDLE lpTargetHandle, // бастапқы дескриптор дубликаты
DWORD dwDesiredAccess, // объектіге қатынас құру
// белгілері
BOOL bInheritHandle, // дескрипторды имедену
DWORD dwOptions // қосымша мінетті емес белгілер ) ;
Егер DuplicateHandle функциясы сəтті аяқталса, онда ол нөлдік емес мəнді қайтарады. Қарсы жағдайда FALSE мəні қайтарылады.

... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Сигналдарды өңдеу жабдықтары
Ағын түсінігі
Процесс - орындалатын бағдарлама
«Экономикалық ақпараттар жүйесінің қоғамдағы даму рөлі»
Жобаны жоспарлау
Электірлі балқыма үрдісінің басқару объектісі ретінде сипаттамасы
Бағдарлы сыныптарда "ақпаратты жүйелер" тақырыбын оқыту әдістемесі
ҚАЗАҚСТАН МҰНАЙЫН ТАСЫМАЛДАУДЫҢ ЭКОНОМИКАЛЫҚ ТИІМДІЛІГІ
Технологиялық процестерді басқаруды автоматтандыру жүйелері
Технологиялық процесті басқару
Пәндер



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