- SetThreadPriority() – үрдіс шеңберіндегі лектің қатыстық приоритетін орнату.
- Функциялар параметрлері жөніндегі толығырақ ақпаратты Win32.hlp және Windows.pas. файлдарынан іздеу қажет.
Синхрондау тәсілдері мен үрдістердің өзара әрекеттестігі
Бір үрдіс екіншісіне деректерді жөнелдіре алады, немесе бірнеше үрдіс жалпыға ортақ файлдағы деректерді өңдей алады. Осылайша, үрдістердің өзара әрекеттесуі қажетті жайт. Барлық жағдайларда үрдістердің кідірісі мен белсенділігі, реттіліктің туындауы, ресурстардың блокқа түсуі мен босануы тәсілдері арқылы шешіле алатын үрдістердің синхрондалу ахуалдары қалыптасуы ықтимал.
Мультибағдарламаландыру тәртібінде орындалып жатқан үрдістердің синхрондалу сауалдарын толыққанды дәрежеде ескермей өту – қанағатсыз қызмет, тіпті жүйенің толықтай құлдырауына соқтыруы мүмкін. Мысалға, файлдарды баспаға шығару бағдарламасын (принт-сервер) қарастырайық. Аталған бағдарлама келіп тускен реттілігінде арнайы жалпыға ортақ файлға тіркелеген барлық файлдарды баспаға шығарады. Барлық үрдіс-клиенттерге жетерлік ерекше құбылмалы NEXT, оның сұраныс файл ұстанымдарының файл атауын тіркеудегі алғашқы бос нөмірі болады.Үрдіс-клиенттер аталған құбылмалымен танысып, оны сәйкес сұраныс файл ұстанымдарына тіркеп, бірлікке NEXT мағынасын қосады. R үрдісі қандай да бір сәтте өз файлын басылымға шығаруға бел буды делік, сол себепті ол мағынасы мысалға 4 тең құбылмалы NEXT мағынасымен танысты. Үрдіс аталған мағынаны ескерсе де, орындалуы үзіліске ұшырау себебінен (мысалға, квант жойылуы салдарынан) файл атауын орнықтыруға үлгермеді. (например, в следствие исчерпания кванта). Файлды баспаға шығаруды көздеген S үрдсі де құбылмалы NEXT мағынасымен танысып, өз файлының атауын төртінші ұстанымға орнықтырып, құбылмалылықтың мағынасын бір бірлікке ұлғайтты. Басқару R үрдісіне ретті берілген жағдайда ол өзінің орындалуын жалғастыра отырып, алдыңды итерация нәтижесінде алынан бос ұстаным мағынасына сәйкес S үрдісі файлының атауы үстінен файл атауын 4 ұстанымға тіркейді.
Сурет 1. Синхрондау қажеттілігінің мысалы
Осылайша, S үрдісі өз файлын шығарылған күйін көруі екі талай. Синхрондаудың ахуалды күрделілігі – туындайтын жайтттардың реттіліксіздігі салдарынан болады. Аталған жағдайда барлығы үрдістердің жылдамдығы мен олардың арасындағы үзіліспен анықталады. Сондықтан да, өзара қатынасатын үрдістерді тоқтату – күрделі мінджеттіліктердің бірі болып табылады. Екі не одан да көп үрдістер бөлісілген деректерді өңдеп, ақырғы нәтиже жарыс деп аталынатын үрдістердің жылдамдық қатынастарына тәуелді келеді.
Үрдістерді синхрондаудағы маңызды түсінік – бағдарламаның критикалық секциясы. Критикалық секция – бұл бөлісілген деректерге қол жеткізу орындалатын бағдарламаның дербес бөлігі. Қандай да бір ресурстарғақарасты жарыс эффектісін болдырмау мақсатында бағдарламаның әрбір критикалық секциясында аталған ресурспен байланысты бір үрдістің болуынқамтамасыз ету қажет. Бұл тәсіл өзара жойылым деп аталады.
Өзара жойылымды қамтамасыздандырудың ең қарапайым дерлік тәсілі – критикалық секцияда орныққан үрдіске барлық үзілімдерді болдыртпауға бұйрық ету. Дегенмен аталған тәсіл қолайсыз, себебі жүйені басқару құқығын тұтыншылық үрдіске сеніп-табыстауға болмайды; ол процессорды ұзақ уақыт бойына қамтып алуы ықтимал, ал критикалық секцияда үрдістің құлдырауы барысында үзілістерге рұқсат етілмеу себебінен бүтін жүйе құлдарауы мүмкін.
Екінші тәсіл – блоктаушы құбылмалыларды қолдану тәсілі.Әрбір бөлісілген ресурспен 1 мағынасын иемденетін екілік құбылмалылық байланысады, егер де ресурс бос болса (еге де бір үрдіс аталған үрдіспен байланысты критикалық секцияда орнықса), егер ресурс қызметте болса 0 мағынасы белгіленеді.
Жоғарыда келтірілген мысал синхрондаудың тағы да бір ахуалы - дедлок (deadlocks), клинчи (clinch) немес е тығырықтар деп аталынатын өзара блоктарды айғаруға ықпал етеді. Жайттардың саралануы салдарынан екі үрдіс бір-бірін өзара блоктауы мүмкін. Үрдіс жылдамдықтарының қатынасына сәйкес олар бір-брінен тәуелсіз бөлісілген ресурстарды қолданыла алады (г), немесе бөлісілген ресурстарға қарасты реттілік қалыптасыра алады (в), я болмаса бірін-бірі өзара блоктауға қабілетті келеді. екеуі де ресурстарды ортақ пайдалану салдарынан туындаса да, Тығырықты жағдайларды қарапайым реттіліктерден ажырата білуіміз қажет: үрдіс кідіріп, ресурстың босауын күтеді. Дегенмен реттілік те – қалыпты үрдіс ретінде танылады. Ол, ресурс аталған жағдайда қол жетекізу аясынан тыс болғанда тауындап, кейіннен қайтара іскеқосылады.Тығырық, атауынан байқағанымыздай, шешілімі жоқ есеп болып табылады.
Сурет 2. (a) принтер мен дискіні бөлетін А және В бағдарламаларының кескіндері, (б) өзара блок (клинч); (в) бөлісілген дискіге қалыптасқан реттілік, (г) ресцурстардың тәуелсіз қолданылуы.
Қарастырылған мысалда (сурет 2.) тығырық екі үрдіспен қалыптасты, дегенмен бір-бірін өзара блоктауға үрдістердің біршама бөлігі қатыса алады.
Тығырық ахуалдары өз қатарына келесі міндеттіліктерді қосады:
- Тығырықтарды қайтару
- Тығырықтарды анықтау
- Тығырықтан кейін жүйені қалпына келтіру
Тығырықтар бағдарлама орындаудың алғашқы кезеңдерінде қайтарылуы мүмкін, яғни бұл дегеніміз бағдарлама қарапайымдылығымен ерекшеленіп, қандай да бір тығырықтардың туындауын болдырмауы қажет. Осылайша, алдыңғы мысалда А және В үрдістері ресурстарды бірдей реттілікте сұрастырса, онда тығырықтық туындауы да ықтимал. Тығырықтарды болдырмаудың екінші тәсілі – динакалық деп аталып, үрдістерге ресурстарды тағайындау барысында қандай да бір ережелерге сүйемденуге негізделеді, яғни ресурстар барлық үрдістерге тән белгілі реттілікте бөлінуі қажет.
Ресурстарды анықтау сызбалары мен қызметтегі ресурстарға қол жтекізу сызбаларына негізделген формальды, бағдарлалы-орындаушылық тәсілдер баршылық. Аталған сызбалардың сараптамасы өзара блоктарды анықтауға мүмкіндік береді.
Егер де тығырықты жағдай толасы, туындай жатса, онда барлық блоктағы үрдістерді орындалу тізбегінен ығыстыру міндет емес.Олардың тек жарты бөлігін ығыстыра аламыз, бұл ретте басқа үрдістермен күтілетін ресуртар босаңсып, кейіннен кейбір үрдстерді свопинг аймағына қайтара аламыз, сондай-ақ бағдарламаны қалпына келтіруге мүмкіндік беретін ақырғы нүктеде үрдістерді қайтаруымызға болады. Ақырғы нүктелер нәтижесінде тығырықтар туындауы мүмкін жерлерде орнығады.
Жолдар
Үрдістер жайында сөз қозғай отырып, операционды жүйе олардың жалпылығын қолдайтынын ескере кеткеніміз жөн: әрбір үрдістің өзіндік виртуалды мекен-жай кеңістігі болады, әрбір үрдіске өзіндік ресурстар – файлдар, терезелер, семаофралар тағайындалады. Мұндай жалпылық әрбір ресурс өзара бәсекелесуі кезінде бір үрдісті екіншсінен қорғау үшін қажетті. Көп жағдайда үрдістер бір компьютерді бөлісетінбірнеше тұтынушыға тиесілі, және же ОЖ үрдістерарасындағы қарама-қайшылықтарын шешуде арбитр рөлін атқарады.
Мультибағдарламаландыру барысында жүйенің өткізгіштік қасиеті жоғарылайды, дегенмен үрдіс бр бағдарламалы жүйеде орындалғаннан жылдам орындалуы екі талай. Бір үрдіс шегінде шешілетін мәселе оның шешілуін жылдамдататын ішкі параллелизм қасиетіне ие болады. Мысалға есепті орындау барысында сыртқы құрылғыға қатынас орнатылады,бұл ретте үрдістің орындалуын толықтай блоктамай, үрдістіңөзге де тармағынан есептеу жүргізуді жалғастыруымызға болады.
Аталған мақсатта қазіргі заманғы ОЖ көпжолды өңдеуді (multithreading) қолданылады. Бұл ретте жаңа жол ұғымы (thread) енгізіледі.
Мультибағдарламаландыру ендігіде жолдар деңгейінде жүзеге асады, ал үрдіс шегінде жолдардың бірнеше деңгейінде орындалатын есептер оның жеке бөліктерінің псевдопараллельді орындалуымен жылдамдатылады. Көп жолдылықты бөлісілген қосымшаларды орындау барысында қолданысқа енгізуімізге болады.
Бір үрдіске ғана қарасты жолдар дәстүрлі көп міндетті жүйе үрдістеріндей бір-бірінен тым алшақ емес, олардың арасында тығыз байланыс орнату оңай.
Жолдарды кейде жеңілдетілген үрдістер немесе мини-үрдістер деп атайды. Әрбір жол қатаң реттілікпен орындалып, өзіндік бағдарламалық есепшоты мен стегін иемденеді. Жолдар үрдістер іспеттес жол-ұрпақтарын туындатып, бір жағдайдан екіншісінежеңіл ауыстырыла алады.Жолдар келесі жағдайлардың бірінде болуы ықтимал: орындалу, кідіріс, дайын болу. Бір жол блокта болса, екіншісі қызметін жалғастыра береді. Жолдар жоспарлаудың түрлі нұсқаларына сәйкес процессорды үрдістер іспеттес бөлістіреді.
Дегенмен бір үрдіс шегіндегі түрлі жолдар жекелеген үрдітер сияқты тәуелсіз емес.Барлық жолдар қандай да бір белгілі мекен-жай кеңістігіне ие. Бұл дегеніміз, оларды бір ғана жаһандық құбылмалылар бөлістіреді. Әрбір жол әрбір виртуалды мекен-жайға қол жеткізе алады, бір жол екіншісінің стекін қолданысқа енгізе алады. Жолдар арасында толыққанды қораныс жоқ, сондықтан да біріншіден ол мүмкін емес, екіншіден қажетсіз де. Бір үрдістің барлық жолдары бір тұтынушының жалпы есебін шешеді, ал жолдар аппараты есептеуді паралельдендіру арқылу оның орындалуын жылдамдату мақсатында қолданылады. Одан өзге, мекен-жай кеңістігін бөлістіру кезінде барлық жолдар ашық файлдар, таймерлер, сигналдар жиынтығын бөлістіреді.
Көп жолды өңдеу жүйенің қызмет нәтижелілігін көп міндетті өңдеумен салыстырғанда жоғарлатады. Мысалға, Windows көп міндетті ортасында бір уақытта электронды кесте мен мәтіндікредактормен жұмыс істеуімізге болады. Дегенмен, тұтынушы жұмыс парағының есептелуін сұрастырған жағдайда электронды кесте уақытша блокқа түседі. Көп жолды ортада кесте көп жолды өңдеудің мүмкіншіліктерін ескерумін жасалса, мұндай ахуалдардың туындауы екі талай және де тұтынушы аталған электронды кестеге қол жеткізе алады.
Операциялық жүйелерді құрудың негізгі принциптері:
Көптеген принциптердің ішінен ең маңыздыларын атап көрсетейік:
1 Модульдік принцип
2 Таңдаудың функционалдық принципі
3 ОЖ генерациялау принципі
4 Артықшылықтың функционалдық принципі
5 Виртуалдау принципі
6 Бағдарламалардың сыртқы құрылғылардан тәуелсіздік принципі
7 Үйлесімділік принципі
8 Ашық және өсіп жетілдіретін ОЖ-нің принципі
9 Мобильдік принципі
10 Есептеуіштің қауіпсіздігін қамтамасыз ету принципі
Модульдік принципі
Модульді көбінесе жүйенің аяқталған және қабылданған модуль арасындағы интерфейстерге сәйкес орындалған функционалды элементі ретінде түсінедіреді. Модуль өзінің анықмасын бойынша берілген интерфейстер арқылы оңай ауысу мүмкіндігін береді. Операциялық жүйелердің құрама бөліктерін жекелеу әдістері әртүрлі болуы мүмкін, бірақ функционалдық белгілері бойынша ажыратылады.Жүйелердің модульдерге бөліну деңгейі операциялық жүйелерде қолданылатын жобалау әдісімен байланысты.
Операциялық жүйені құру кезіндегі маңызды модульдерге ерекше құқықты, қайта кіретін және реентерабелді модульдер жатады, олар есептеуіш жүйенің ресурстарын тиімді пайдалануға мүмкіндік береді.
Реентерабелдiктiң табысы әр түрлi әдiстермен жүзеге асырылады. Кейбір жүйелерде бағдарламалардың реентерабельдігі автоматты түрде алынады. Әрине, ол үшін үйлесімді аппараттық қолдау қажет. Басқа жағдайларда бұл арнайы жүйелік модульдерді қолданатын бағдарламашылар көмегімен жүзеге асады.
Модульдік принципі жүйенің технологиялық және қолданушылық қасиетін көрсетеді. Оның қолданыунан үлкен тиімділікті принцип операциялық жүйеге, қолданбалы бағдарламаға және аппаратураға бірдей таратылғанда алуға болады.