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

Процесстерді басқару


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

31.10.2015, 22:59

Процесстерді басқару
 


Процесстің құрамында кодасы жəне деректері бар жекеменшіктік тəуелсіз ауани (виртуалды) кеңістік бар, ол басқа процесстерден қорғалынған. Əрбір процесс өз алдына құрамында бір немесе бірнеше өзалдына тəуелсіз орындалын жатқан ағындар бола алады. Процесс өзінің ішінде жаңа ағындар жəне жаңа тəуелсіз процесстер құра алады жəне хабарды басқара алады жəне объектілерді синхрондай алады.
Қосымшалар процесстерді құра отырып жəне оларды басқара отырып біруақытта файлдарды өңдеу бойынша есептерді орындап, есептеулерді жүргізіп жəне желідегі басқа жүйелермен өзараəрекететсе алады. Өңдеуді жылдамдату мақсатында бірнеше процессорды қолдану мүмкіндігі бар.
3.2 Windows операциялық жүйесіндегі процесстер мен ағындар Əрбір процесстің құрамында бір немесе бірнеше ағын бар. Windows операциялық жүйесіндегі ағын дегеніміз — орындалудың негізгі бірлігі.
Программист тұрғысынан Win32 жүйесіндегі əрбір процесстің құрамында төменде көрсетілген компоненталар бар:
- Бір немесе бірнеше ағындар;
- Басқа процесстердің адрестік кеңістіктерінен өзге ауани адрестік кеңістік, бұл жағдай жадыны нақты бөлу жағдайына қатысты емес. 
Жадыда көрінетін файлдар физикалық жадыдан орын алғанымен, əртүрлі процесстер жадыда көрінетін файлдарға əртүрлі ауани адрестерді қолданады:
- DLL кодамен қоса бір немесе бірнеше кода сегменттерін;
- ауқымды айнамалылардан тұратын бір немесе бірнеше деректер сегменттерін; ортамен (окружения) байланысты айнымалылыр туралы ақпараты бар орта қатарлары, мысалыіздестірудің ағынды жолы.
• процесс үймелері жадысы.
• ашық дескрипторлар немесе басқа үймелер сияқты ресурстар.
Процесстің барлық ағындары кодаларды, ауқымды айнымалыларды, орта (окружения) қатарларын жəне ресурстарды ортақ түрде қолданады. Əрбір ағын тəуелсіз түрде жоспарланады. Ағын құрамына төменде келтірілген элементтер кіреді:
- процедураларды, үзулерді, алып тастауларды (исключений) өңдеуді жəне автоматтық деректерді шақыру стегі;
- ағынның жергілікті жадысы (Thread Local Storage — TLS) — көрсеткіштер (сілтемелер) массивы, олар процесске жекеменшіктік ерекше орта (окружения) деректерін қалыптастыру үшін жады бөлуге мүмкіндік береді;
- деректер қалыптастырған ағыннан алынған стек параметрі, ол əдетте əр ағын үшін ерекше болып табылады;
- құрамында аппараттық регистрлердің мəндері бар контекст құрылымы. Ол ядромен басқарылады.
3.3 Процесстермен жұмыс істеуге арнлаған API функциялар
Процесстерді қалыптастыру
Windows жүйесінде жаңа процесс прототипі төменде көрсетілген createProcess функциясын шақыру арқылы қалыптасады:
BOOL 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 — өзара алып тастаушы белгілер; бұлардың екеуінде бір уақытта орнатуға болмайды. Бірінші белгі процессті консолсыз қалыптастырады, екіншісі жаңа процесске консоль ұсынады. Ешер осы екі белгілердің бірі орнатылмаған болса, процесс аталық процесстің консольін иемденеді.
- CREATE_NEW_PROCESS_GROUP —жаңа процесстер тобы үшін жаңа процессті түпкі (корневой) етіп анықтайды. Егер топтағы процесстер бірігіп бір консольді қолданса, онда олар консольді басқару сигналын  қабылдайды.
Кейбір белгілер жаңа процесс ағынының приоритетін басқарады. Əзірше аталық процесстің приоритетін немесе 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 функциясын шақыру арқылы процесстің аяқталуына мүмкіндік береді;
- PROCESS_QUERY_INFORMATION белгісі 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. Ағындарды жоспарлау қандай факторлар негізінде жүргізіледі?
2. Win32 жүйесінде қандай компонеталар əрбір процессті қосады?
3. Ағын құрамында қандай элементтер бар?
4. OpenProcess() функциясының API параметрлері.

 


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

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

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