Сурет. 3. Синхрондау қажеттілігінің мысалы.
Осылайша, S үрдісі өз файлын шығарылған күйін көруі екі талай.
Синхрондаудың
ахуалды
күрделілігі – туындайтын
жайтттардың
реттіліксіздігі салдарынан болады. Аталған жағдайда барлығы үрдістердің
жылдамдығы мен олардың арасындағы үзіліспен анықталады. Сондықтан да,
өзара қатынасатын үрдістерді тоқтату – күрделі мінджеттіліктердің бірі
болып табылады. Екі не одан да көп үрдістер бөлісілген деректерді өңдеп,
ақырғы нәтиже жарыс деп аталынатын үрдістердің жылдамдық
қатынастарына тәуелді келеді.
Үрдістерді синхрондаудағы маңызды түсінік – бағдарламаның
критикалық секциясы. Критикалық секция – бұл бөлісілген деректерге қол
жеткізу орындалатын бағдарламаның дербес бөлігі. Қандай да бір
ресурстарғақарасты
жарыс
эффектісін
болдырмау
мақсатында
бағдарламаның әрбір критикалық секциясында аталған ресурспен
байланысты бір үрдістің болуынқамтамасыз ету қажет. Бұл тәсіл өзара
жойылым деп аталады.
Өзара жойылымды қамтамасыздандырудың ең қарапайым дерлік тәсілі
– критикалық секцияда орныққан үрдіске барлық үзілімдерді болдыртпауға
бұйрық ету. Дегенмен аталған тәсіл қолайсыз, себебі жүйені басқару
құқығын тұтыншылық үрдіске сеніп-табыстауға болмайды; ол процессорды
ұзақ уақыт бойына қамтып алуы ықтимал, ал критикалық секцияда үрдістің
құлдырауы барысында үзілістерге рұқсат етілмеу себебінен бүтін жүйе
құлдарауы мүмкін.
Екінші тәсіл – блоктаушы құбылмалыларды қолдану тәсілі.Әрбір
бөлісілген ресурспен 1 мағынасын иемденетін екілік құбылмалылық
байланысады, егер де ресурс бос болса (еге де бір үрдіс аталған үрдіспен
байланысты критикалық секцияда орнықса), егер ресурс қызметте болса 0
мағынасы белгіленеді.
28
Жоғарыда келтірілген мысал синхрондаудың тағы да бір ахуалы -
дедлок (deadlocks), клинчи (clinch) немесе тығырықтар деп аталынатын өзара
блоктарды айғаруға ықпал етеді. Жайттардың саралануы салдарынан екі
үрдіс бір-бірін өзара блоктауы мүмкін. Үрдіс жылдамдықтарының
қатынасына сәйкес олар бір-брінен тәуелсіз бөлісілген ресурстарды
қолданыла алады (г), немесе бөлісілген ресурстарға қарасты реттілік
қалыптасыра алады (в), я болмаса бірін-бірі өзара блоктауға қабілетті келеді.
екеуі де ресурстарды ортақ пайдалану салдарынан туындаса да, Тығырықты
жағдайларды қарапайым реттіліктерден ажырата білуіміз қажет: үрдіс
кідіріп, ресурстың босауын күтеді. Дегенмен реттілік те – қалыпты үрдіс
ретінде танылады. Ол, ресурс аталған жағдайда қол жетекізу аясынан тыс
болғанда тауындап, кейіннен қайтара іскеқосылады.Тығырық, атауынан
байқағанымыздай, шешілімі жоқ есеп болып табылады.
Сурет 4. (a) принтер мен дискіні бөлетін А және В
бағдарламаларының кескіндері,
(б) өзара блок (клинч); (в) бөлісілген дискіге қалыптасқан реттілік.
(г) ресцурстардың тәуелсіз қолданылуы.
Қарастырылған мысалда (сурет 4.) тығырық екі үрдіспен қалыптасты,
дегенмен бір-бірін өзара блоктауға үрдістердің біршама бөлігі қатыса алады.
Тығырық ахуалдары өз қатарына келесі міндеттіліктерді қосады:
• Тығырықтарды қайтару
• Тығырықтарды анықтау
• Тығырықтан кейін жүйені қалпына келтіру
Тығырықтар
бағдарлама
орындаудың
алғашқы
кезеңдерінде
қайтарылуы мүмкін, яғни бұл дегеніміз бағдарлама қарапайымдылығымен
ерекшеленіп, қандай да бір тығырықтардың туындауын болдырмауы қажет.
29
Осылайша, алдыңғы мысалда А және В үрдістері ресурстарды бірдей
реттілікте сұрастырса, онда тығырықтық туындауы да ықтимал.
Тығырықтарды болдырмаудың екінші тәсілі – динакалық деп аталып,
үрдістерге ресурстарды тағайындау барысында қандай да бір ережелерге
сүйемденуге негізделеді, яғни ресурстар барлық үрдістерге тән белгілі
реттілікте бөлінуі қажет.
Ресурстарды анықтау сызбалары мен қызметтегі ресурстарға қол
жтекізу сызбаларына негізделген формальды, бағдарлалы-орындаушылық
тәсілдер баршылық. Аталған сызбалардың сараптамасы өзара блоктарды
анықтауға мүмкіндік береді.
Егер де тығырықты жағдай толасы, туындай жатса, онда барлық
блоктағы үрдістерді орындалу тізбегінен ығыстыру міндет емес.Олардың тек
жарты бөлігін ығыстыра аламыз, бұл ретте басқа үрдістермен күтілетін
ресуртар босаңсып, кейіннен кейбір үрдстерді свопинг аймағына қайтара
аламыз, сондай-ақ бағдарламаны қалпына келтіруге мүмкіндік беретін
ақырғы нүктеде үрдістерді қайтаруымызға болады. Ақырғы нүктелер
нәтижесінде тығырықтар туындауы мүмкін жерлерде орнығады.
Жолдар
Үрдістер жайында сөз қозғай отырып, операционды жүйе олардың
жалпылығын қолдайтынын ескере кеткеніміз жөн: әрбір үрдістің өзіндік
виртуалды мекен-жай кеңістігі болады, әрбір үрдіске өзіндік ресурстар –
файлдар, терезелер, семаофралар тағайындалады. Мұндай жалпылық әрбір
ресурс өзара бәсекелесуі кезінде бір үрдісті екіншсінен қорғау үшін қажетті.
Көп жағдайда үрдістер бір компьютерді бөлісетінбірнеше тұтынушыға
тиесілі, және же ОЖ үрдістерарасындағы қарама-қайшылықтарын шешуде
арбитр рөлін атқарады.
Мультибағдарламаландыру барысында жүйенің өткізгіштік қасиеті
жоғарылайды, дегенмен үрдіс бр бағдарламалы жүйеде орындалғаннан
жылдам орындалуы екі талай. Бір үрдіс шегінде шешілетін мәселе оның
шешілуін жылдамдататын ішкі параллелизм қасиетіне ие болады. Мысалға
есепті орындау барысында сыртқы құрылғыға қатынас орнатылады,бұл ретте
үрдістің орындалуын толықтай блоктамай, үрдістіңөзге де тармағынан
есептеу жүргізуді жалғастыруымызға болады.
Аталған мақсатта қазіргі заманғы ОЖ көпжолды өңдеуді
(multithreading) қолданылады. Бұл ретте жаңа жол ұғымы (thread) енгізіледі.
Мультибағдарламаландыру ендігіде жолдар деңгейінде жүзеге асады,
ал үрдіс шегінде жолдардың бірнеше деңгейінде орындалатын есептер оның
жеке бөліктерінің псевдопараллельді орындалуымен жылдамдатылады.Көп
жолдылықты бөлісілген қосымшаларды орындау барысында қолданысқа
енгізуімізге болады.
Бір үрдіске ғана қарасты жолдар дәстүрлі көп міндетті жүйе
үрдістеріндей бір-бірінен тым алшақ емес, олардың арасында тығыз
байланыс орнату оңай.
Жолдарды кейде жеңілдетілген үрдістер немесе мини-үрдістер деп
атайды.Әрбір жол қатаң реттілікпен орындалып, өзіндік бағдарламалық
30