Оқулық «Федералдық білім беруді дамыту институты»


WINDOWS ПРОЦЕСТЕРІ ЖӘНЕ ПРОЦЕСАРАЛЫҚ



Pdf көрінісі
бет187/220
Дата25.02.2022
өлшемі2,22 Mb.
#26438
түріОқулық
1   ...   183   184   185   186   187   188   189   190   ...   220
Байланысты:
қазақша кітап

WINDOWS ПРОЦЕСТЕРІ ЖӘНЕ ПРОЦЕСАРАЛЫҚ 
ӨЗАРА ӘРЕКЕТТЕСУ
 
Windows  тобының  операциялық  жүйелері,  әсіресе  Windows  NT 
ядросы  негізінде  жүйелер    (Windows  2000,  Windows  XP,  Windows 
Vista),  процестерді  синхрондау  үшін  құралдардың  кең  жинағын 


232 
 
 
ұсынады  және  процесаралық  өзара  әрекеттесуді ұйымдастырады.  Осы 
тарауда  біз  Windows  тобының  операциялық  жүйелеріндегі  өзара 
әрекеттесуді ұйымдастырудың кейбір тәсілдерін қарастырамыз. 
 
 


233 
 
 
10.6.1. Процесстер мен ағындар 
Басқа  операциялық  жүйелердегі  сияқты  процестер  (process) 
пайдаланушыға  міндеттерді  шешуге  мүмкіндік  беретін,  негізгі 
обьектілер болып табылады. Әр процесс сәйкес келетін қосымшаларды 
орындауға  қажетті  ресурстарды  ұсынады.  Әр  процесс  өзіне 
орайластырылған  виртуалды  мекенжай  кеңістігіне;  орындалатын  код; 
ашық  жүйелік  обьектілермен  байланысты  дескрипторлар;  қауіпсіз 
мәнмәтіні;  процестің  бірегей  идентификаторы;  айнымалы  шеңберлер; 
бастапқылық  класы;  процеске  қолжетімді  виртуалды  жадының 
минималды және максималды өлшемі; ең кемі басқарудың бір ағымына 
ие. 
 
Әр  процесс  старт  кезінде  бір-жалғыз  басқару  ағымын  (thread)  іске 
асырады, оны алғашқы ағым (primary thread) деп атайды. Бірақ әр ағын 
жаңа  ағым  құра  алады.  Бұл  мағынада  процесс  негізгі  есептеуші 
жұмысын атқаратын көптеген ағымдардың капсулданатын контейнерін 
ұсынады. 
 
Процестің  барлық  ағымдары  өздерінің  арасында  виртуалды 
мекенжай кеңістігін және жүйелік ресурстарды бөліседі. Одан басқа, әр 
басқару  ағымы  ерекше  жағдайлардың  жеке  өңдеушілеріне, 
басымдылыққа,  ағымның  жергілікті  жадына,  ағымның  бірегей    иден-
тификаторына  және  ағым  қазіргі  мәнмәтін  туралы  деректеріне  ие. 
Ағым  мәнмәтіні  (thread  context)  процессор  тіркелімінің  қазіргі 
мәндерін  құрайды;  ядро  шақыртулар  қамшысы,  ағым  шеңберінің 
блогы,  ағым  қамшысының  өлшемі  туралы  ақпараттар  құраушы  және 
аталық  процестің  мекенжай  кеңістігіндегі  пайдаланушы  қамшысы. 
Одан басқа, ағымдар құқықты аталық процестен мұраға алмай шеттен 
алып пайдаланған жағдайда қауіпсіздіктің жеке мәнмәтініне ие болады.  
 
Windows NT  (Windows NT  3.x —  4.0,  Windows 2000,  Windows XP, 
Windows Vista және Windows тобының барлық серверлік операциялық 
жүйелері)  ядросына  және  Windows  9x  (Windows  95,  Windows  98  и 
Windows  ME)  негізделген  операциялық    жүйелер    ығыстырылған 
көпміндеттілікті  (preemptive  multitasking)  қолдайды.  Ол  бірнеше 
процесте бірнеше ағымдардың орындалуының әсерін құруға мүмкіндік 
береді.  Windows-ң  көптеген  алғашқы  жүйелерінде  (мысалы,  Windows 
3.x  құрамасы)  ығыстырылмайтын  көпміндеттілігіне  (nonpreemptive 
multitasking)  негізделген,  ағымдардың  бір  уақытта  орындауының 
қарапайым моделін ұстанған болатын. 
 
Ығыстырылатын  көпміндетті  операциялық  жүйе  кезінде,  ал 
нақтырақ,  ығыстырылатын  жобалаушы  (preemptive  scheduler)  деп 


234 
 
 
аталатын  арнайы  жүйелік  процесс  уақыт  шегіне  байланысты  оны 
кідіртетін  жағдайға  ауыстыра  отырып,  ағындағы  процесті  уақытша 
тоқтатады. Одан кейін жобалаушы, оның басымдылығына байланысты, 
ертерек  кідірткен  процестерді  оятады  және  осы  процесс  үшін 
процессорлық  уақыттың  квантын  белгілейді.  Осы  механизм 
«мәнмәтінді 
ауыстыру» 
(context 
switching) 
атауына 
ие. 
Ығыстырылмайтын  көпміндеттілік  кезінде  жадыда  бір  уақытта 
бірнеше процесс қатысуы мүмкін, бірақ процессорлік уақыт, процестің 
өзі  немесе  пайдаланушы  процессорды  босатқанға  дейін,  негізгі 
процеске белгіленеді.  
Көп  процессорлы  жүйелерде,  операциялық  жүйелер  Windows  NT 
ядросының  (немесе  ядролар)  негізінде  жүйеде  орнатылған  қанша 
процесс  болса,  сонша  ағымдардың    бір  уақытта    орындалуына 
мүмкіндік  береді.  Бұл  жағдайда,  ұқсастыру  емес,  шын  көпміндеттілік 
пайда болады. 
 
Пайда  болған  жаңа  процестер  үшін  CreateProcess()  функциясы 
қолданылады: 
 
include 
 
BOOL WINAPI CreateProcess(
 
LPCTSTR lpApplicationName,
 
LPTSTR lpCommandLine,
 
LPSECURITY_ATTRIBUTES lpProcessAttributes, 
LPSECURITY_ATTRIBUTES lpThreadAttributes,
 
BOOL bInheritHandles,
 
DWORD dwCreationFlags,
 
LPVOID lpEnvironment,
 
LPCTSTR lpCurrentDirectory,
 
LPSTARTUPINFO lpStartupInfo,
 
LPPROCESS_INFORMATION lpProcessInformation);
 
 
CreateProcess() функциясын шақырған процесс, аталық-процесс деп 
аталады,  ал  бұл  функцияны  шақырудың  нәтижесінде  пайда  болған 
процесс  процесс-тобы  деп  аталады.  Процесс-тобы,  оны  туындатқан 
процеске толық тәуелді емес. Бірақ аталық процесс туындаған процесті 
бақылауға  және  онымен  байланысты  кейбір  оқиғаларды  барлауға 
мүмкіндік алады.  
 
LpApplicationName  параметрі  орындалуға  міндетті  бағдарламаның 
атауын  береді.  Егер  осы  параметр  NULL  тең  болса,  онда  іске 


235 
 
 
асырылатын  бағдарламаның  атауы  lpCommandLine  параметрінде 
берілуі  мүмкін.  Сондай-ақ  осы  параметрде,  іске  асырылатын 
бағдарламаға жіберілетін параметрді де береді.  
Егер  lpCommandLine  параметр  NULL  мәніне  ие  болса,  онда  іске 
асырылатын  бағдарлама  lpApplicationName  параметрінен  алынады. 
Егер екі жол да NULL тең болмаса, онда  lpApplicationName параметрі 
іске 
асырылатын  бағдарламаны 
береді, 
ал 
 
параметрінде 
lpCommandLine  осы  бағдарламаға  арналған  аралықтармен  бөлінген 
тізімді жібереді.  
 
LpProcessAttributes  параметрі  құрылатын процеске,  әдепкі құқыққа 
қарағанда  қолжетімділік  құқығын  береді.    Одан  басқа,  параметр 
көрсететін  құрылымның  бір  элементі,    CreateProcess()  функциясының 
шақыртуы  нәтижесінде    құрылған  процесс    дескрипторын  көрсетуге 
қолданылады, ол процесс-тобын мұраға алуға болады.  
 
LpThreadAttributes  параметрі,    lpProcessAttributes    параметріндей 
қолданылады.  Бірақ  егер  lpProcessAttributes  параметрі  құрылған 
процестің  параметрін  өзгертуге  арналған,  онда  lpThreadAttributes 
параметрінде  жіберілетін  ақпараттар  құрылатын  процестің  алғашқы 
ағымдарының параметрлерін өзгертуге қолданылады. 
 
ВInheritHandles  параметрі  еншілес  процесс  аталық-процестен 
мұраға  қалатын    дескрипторды  мұраға  ала  ма  (TRUE)  және  жоқ  па 
(FALSE)  соны  көрсетеді.  Сонымен  қатар,  ашылған  файлдың 
дескрипторы  ғана  емес,  каналдар  және  басқа  жүйелік  ресурстардың 
құрылған  процестің  дескрипторын  да  мұраланады.    Мұраланған 
дескрипторлар,  қолжеткізу  құқығындағы  мәндерге  ие  болады.    Айта 
кететін жайт, барлық дескриптор емес, мұралануға белгіленгендер ғана 
мұраланады.  Дескриптордың  бұл  қасиеттері,  процесс  аралық  өзара 
әрекеттесуді ұйымдастыру кезінде маңызды. 
 
  
DwCreationFlags параметрі құрылатын процестің  басымдылық 
класын  беру  үшін  сондай-ақ  процестің  қасиеттерін  басқару  үшін  де 
қолданылады. Мысалы, егер аталық-процесс және құрылатын процесс,  
консолды 
қосымша 
болып 
табылады 
және 
параметрде 
CREATE_NEW_CONSOLE  мәні  беріледі,  онда  құрылатын  процесс 
өзінің  консолды  жеке  терезесіне  ие  болады.  Бұл  көрсетпегенше  жаңа 
терезе  ашылмайды,  ол  құрылған  процесс  аталық-процестің  консолды 
терезесін мұраға алады. 
 
LpEnvironment 
параметрі,  құрылатын  процестің  айнымалы 
шеңберін өзгерту үшін қолданылады және жаңа процесс үшін шеңбер 
блогына нұсқаушыны құрайды.  Бұл блок нөлмен аяқталады және мына 
жолдардан тұрады: 
 


236 
 
 
name=value\0 
 
егер  берілген  параметр  NULL  мәніне  ие  болса,  шеңбер  аталық-
процестен мұраланады.  
 
LpCurrentDirectory  параметрі,  құрылатын  процесс  үшін  каталогты 
және ағымдағы дискіні беру үшін қолданылады.  Егер параметр NULL 
тең  болса,  онда  ағымдағы  дискі  және  каталог  аталық-процестен 
мұраланады. 
 
LpStartupInfo параметрі, ол да құрылатын процестің ерекшеліктерін  
өзгертуге  арналған.  Берілген  параметр  құрылатын  процес  терезесінің 
бастапқы  координаталарын    беруге  мүмкіндік  береді,  терезені 
көрінетін  немесе  жасыру  керектігін  анықтайды,  сондай-ақ,  аталық-
процеспен,  процесс-тобымен  консолға  шығарылатын  ақпараттарды 
алуға немесе бұл ақпараттарды файлға не құрылғыға қайта бағыттауға 
арналған  стандартты  құрылғылардың  дескрипторын  қайта  анықтауға 
мүмкіндік  береді.    Осы  параметр  құрылатын  процестің  басқа  да 
ерекшеліктерін өзгертуге мүмкіндік береді. 
 
Параметр lpProcessInformation, қайтарылушы болып табылады.  Бұл  
параметрде  құрылған  процестің  және  оның  бастапқы  ағынының  
идентификаторы  мен  дескрипторын  қайтарады.  Берілген  функция    0 
қайтарады,  егер  белгілі  бір  себеппен  жаңа  процесс  құралмаса  немесе 
мәні 0-ден айырмашылықта болса, онда процесс сәтті құрылған. 
 
Жаңа  процесті  құруда  жүйеден  бас  тарту  себептерінен, виртуалды 
жадының  таусылуы,  іске  асырылатын  бағдарламаның  бағдарлама 
немесе  сценарий  болмауы,  процесс  кестелерінің  толып қалуы  мүмкін. 
Одан  басқа,  жаңа  процестің  туылуына,  бір  процесс  үшін  дескриптор 
саны 
шегіне 
жауап 
беретін, 
реестрдің 
HKLM\ 
Software\Microsoft\Windows 
NT\CurrentVersion\Windows\ 
UserPro- 
cessHandleQuota  параметрі  әсер  етеді.  Әдеттегідей  Windows  XP  және 
Vista жүйелеріндегі осы параметр үшін  10 000 мәні орнатылған, бірақ 
жүйенің әкімшілігі бұл мәнді өзгерте алады және осылайша қосылатын 
бағдарламаның саны шектелуін өзгерте алады.  
 
Сондай  ақ  қосылатын  процесс  үшін  қорытынды  команданың 
ұзындығына  жүйелік  шектеу  қойылады.  Ол  ұзындығында  32  767 
символдан аспауы қажет.
 
Жаңа 
ағымдарды 
құру 
үшін 
CreateThread() 
функциясы 
қолданылады. 
 
include 
 
HANDLE WINAPI CreateThread(
 


237 
 
 
LPSECURITY_ATTRIBUTES lpThreadAttributes,
 
SIZE T dwStackSize,
 
LPTHREAD_START_ROUTINE lpStartAddress,
 
LPVOID lpParameter,
 
DWORD dwCreationFlags,
 
LPDWORD lpThreadId);
 
 
LpThreadAttributes  параметрі,  әдеттегідей  құқықтардың  үздігінен, 
қолжетімділік  құқығында  құрылатын  процестер  міндеттері  үшін 
қолданылады.    Сондай-ақ  осы  параметр,  құрылған  ағымның  
дескрипторының    процесс  тобынан  мұралануы  болу  мүмкіндігін 
көрсету үшін қолданылады.  Егер де параметр NULL мәніне ие болса, 
ағым әдеттегідей құқығын алады, ал ағымның дескрипторы тұқыммен 
мұралануы мүмкін емес.
 
DwStackSize  параметрі,  байттағы  ағымның  бастапқы  қамшы 
өлшемін  беруі  үшін  арналған.  Егер  де  параметр  0  мәнін  берсе,  онда 
қамшы өлшемі, қосымшалар үшін анықталған қамшы өлшеміне сәйкес 
келеді.  
 
LpStartAddress  параметрінде  ағыммен  орындалатын,  қосымшаның 
жергілікті функциясының мекенжайын береді.   
LpParameter  параметрі,  ағымның  негізгі  функциясына  қажетті, 
құрылған ағымдарға кіретін мәндерді жіберуі үшін арналған.
 
DwCreationFlags 
параметрі  ағымның  құрылуын  басқарады. 
Мысалы,  егер  осы  параметр  CREATE_SUSPENDED  мәніне  ие  болса, 
онда  құрылған  ағым,  басқа  басты  ағым  оны  жаңадан  іске  қосқанша, 
кідіре тұрады.  
Қайтарылатын 
lpThreadId 
параметрі 
құрылған 
ағым 
идентификаторын  алу  үшін  қолданылады.    Егер  осы  параметр  NULL 
тең болса, онда құрылған ағымның идентификаторы қайтарылмайды. 
 
Егер функцияның шақыртуы жаңа ағымның құрылуымен аяқталса, 
функция  құрылған  ағымның  дескрипторын  қайтарады.    Қарсы 
жағдайда  NULL мәнін қайтарады.
 
Жаңа  ағым  құруда  сәтсіз  талпыныстардың  себебі,  жүйе 
ресурстарының  немесе  дескрипторда  лимиттің  таусылуы  болып 
табылады.  Жаңа  ағымның  құрылуында  сәтсіз  талпыныстары  болып 
жиірек    виртуалды  жадының  таусылуы  табылады,  егер  жүйеде 
ағымдардың саны көп болса. 
 
Ағымдағы  процестің  дескриптор  мен  идентификаторын  қабылдау 
үшін  GetCurrentProcess()  және  GetCurrent-  ProcessId()  функциялары 
қолданылады, сәйкесінше: 


238 
 
 
 
include 
 
HANDLE WINAPI GetCurrentProcess(void);
 
DWORD WINAPI GetCurrentProcessId(void);
 
 
 
 
Ұқсас  функциялар бар  және қазіргі ағымның дескриптор мен 
идентификаторды алу үшін:
 
include 
 
HANDLE WINAPI GetCurrentThread(void);
 
DWORD WINAPI GetCurrentThreadId(void);
 
Жаңа ағымдар мен процесті туындататын бағдарламаның үлгілерін 
қарастырамыз: 
 


Достарыңызбен бөлісу:
1   ...   183   184   185   186   187   188   189   190   ...   220




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет