Операциялық жүйенің синхрондау объектілері.
Жоғарыда қарастырылған синхрондау механизмдері, глобальды ауыстырымдылық процесстерді қолдануға болатын, бірақ оларда маңызды жетіспеушілік бар, олар әртүрлі синхромды ағымдардың әртүрлі процесіне келмейді. Ондай жағдайда жүйелік система ағымды системаға синхромды объекті ұсыну керек, барлық ағымдар үшін көрінетін, басқа да әртүрлі үрдістермен жұмыс істейтін әртүрлі адрестік кеңістіктерде орындалуы тиіс.
Операциялық жүйенің синхрондау объектілерінің мысалдарына жүйелік семафоралар, мьютекстер, таймерлер және т.б. осылардың жиынтығы нақты операциялық жүйеге бағынышты операциялық жүйеде әртүрлі әдістер қолданылады. Кейбір операциялық жүйе объектіге көрсеткішті қайтарады. Басқа жағдайда операциялық жүйе объектілерді жасағанда, синхронизацияландыру аттарын көрсетеді. Әрі қарай бұл аттар әртүрлі үрдістерді басқару үшін қолданылады. Бұл жағдайда синхронизацияланған объектілермен жүретін жұмыс файлдармен істейтін жұмыстарға ұқсас болып келеді және оларды ашып-жауып, өшіруге болады.
Сонымен бірге, синхронизацияға ОС-тың мынадай «жай» объектілері қолданылуы мүмкін – файлдар, үрдістер және ағымдар. Бұл объектілердің бәрі екі жағдайда болуы мүмкін: сигналды және сигналды емес. Әр объектке «сигналды жағдай» ұғымының енуі, сол объектілердің өзіне байланысты. Мысалға, ағым аяқталған кезде ғана сигналды жағдайға көшеді. Ал, үрдіс сигналды жағдайға, барлық ағым біткен кезде көшеді. Файл өзіне деген енгізу-шығару операциясы біткен кезде ғана сигналды жағдайға көшеді. Басқа объектілерге сигналды жағдай арнайы системалық шақыруларды орындағаннан кейін орнатылады. Ағымдардың тоқталуы және қайта жұмыс істеуі ОС-тың синхронизациялану объектілеріне байланысты.
Ағымдар арнайы систермалық шақырулар арқылы операциялық жүйеге кейбір объектілерге деген орындауларын синхронизациялайтынын хабарлайды. Келесіде бұл системалық шақыруды Wait(x) деп аламыз, ал мұндағы х – синхронизацияланған боъектіге көрсеткіш. Синхронизацияланатын объекті сигналды жағдайға келтіретін сигналды шақыруды Set(x) деп атаймыз.
Wait(x) системалық шақыруды орындаған ағым, х объектісін сигналды жағдайға көшпегенше операциялық жүйе қатарда тұрады.
Системалық шақыруға мысал ретінде мыналарды атауға болады:
Ағым сигналды жағдайды 1 объектіге емес, бірнешеуіне орнатуды тосуы мүмкін.
Ағым ОС-тан 1 объектіні немесе бірнешеуін орнатуда өзін қайта жұмыс істеуін сұрауы мүмкін. Ағым аргументі ретінде системалық шақыруда Wait(x) максималды уақытқа сілтеуі мүмкін, бұны орл объекті сигналды жағдайға көшкеннен кейін тосады, осы жағдайда ОС оны қайта жұмысқа кірістіреді.
Сигналды жағдайға кейбір объектілерді орнатуды бір дегенде бірнеше объекті тосуы мүмкін. Объектіні синхронизациялау дайындығына қарай ағымның бүкіл немесе объектіні көшіруі мүмкін.
Синхронизация ағымды жоспарлаумен тығыз байланысты. Біріншіден, ағымның системалық шақырумен қатынасы системалық жоспарлау әрекетіне әкеп соғады, бұл кезде ағым жұмысынан түсіріліп, тосушылар қатарына қосылады, ал дайын ағымдар қатарынан жаңа ағым таңдалады және қайта жұмыс істейді. Екіншіден, объектінің сигналды жағдайға көшу кезеңінде сол объектіні тосқан ағым орындауға дайын ағымдар қатарына ауыстырылады. Осы екі жағдайда ағымдарды қайта жоспарлау жүзеге асады, бірақ егер ОС-та өзгермелі приоритеттер және уақыттар кванты жүзеге асса, олар операциялық жүйеде қабылданған ереже бойынша қайта саналады.
Синхронизацияланған объекті орнына файл, ағым және үрдістер қолданылған жағдайға мысал келтірейік.
Желідентүсетін сұранымдарды орындау үшін, басты ағым көмекші серверлік ағымдарды тудырады дейік. Қолданушыдан жабылу командасы түскенде, басты ағым бүкіл серверлік ағымдар жабылғанша дейін тосу керек және содан кейін ғана өзі жабылады.
Сондықтан, жабылу процедурасы Wait(x1, х2...) шақыруларын қосып алу қажет. Мұндағы х1, х2 – серверлік ағым көрсеткіштері. Осы берілген системалық шақырулар орындалғанннан кейін басты ағым тосу жағдайына ауыстырылады және олар сол жерде серверлі ағымдар сигналды жағдайға көшпегенше және жабылмағанша қолданылады. Осыдан кейін ОС басты ағымды дайын жағдайына көшіреді.
Тағы бір мысал. Кейбір қосымша істердің орындалуы келесі жұсым-этаптарының орындалуын қажет етеді. Әр этаптың өзіндік жеке үрдісі бар. Алдыңғы үрдістің жабылуы, келесісінің жұмыс істеуіне бағыттайды. Осындай логикалық жұмыстың орындалуы әр үрдіске қажет, Біріншіден, басқасына системалық шақыруды орындағанда синхронизацияланатын объект келесі келе жатқан ағым болатынын ойластыру керек.
Файл объектісінің сигналды жағдайға көшірілуі осы файлдың енгізу-шығару операциялардың жабылуымен байланысты, бұл жағдай ағым өзінің есептеулерін жалғастырудан бұрын, алдыңғы операиялардың жабылуын тосуда қолданылады.
Кейбір жағдайда ағым өзінің орындалуларын синхромды қажет етуі мүмкін, бірақ ағымның, үрдістің, енгізу-шығару операцияларын жабумен жойылмайды. Сондықтан ОС-та басқа синхронизацияланған универсалды объектілерде бар болады, жаңалық, мьютекс, семафор сияқты мәліметтерге кіруді жүргізуде қолданылады.
Объект-ағымға қарағанда, объект-үрдіс, объект-файл сигналды жағдайға ауысқан бүкіл ағымдарды дайын жағдайға көшіреді.
Мьютекстің жұмыс істеуі «иемдену» терминында жақсы түсіндіріледі. Критикалық мәліметтерге кіру кезінде ағым, системалық шақыруды Wait(x) орындады дейік, мұндағы х – мьютекстік көрсеткіш.
Мьютекс сигналды жағдайда орналасқан деп алайық, бұл кезде ағым оны сигналды емес жағдайға орнатып, иемденушісі болады.
Ағым критикалық мәліметтермен жұмыс істеп біткеннен кейі, ол мьютексті береді және оны сигналды жағдайға көшіреді. Осы моментте мьютекс бос және бірде-бір ағымға жатпайды. Егер бірде-бір ағым оның босатылуын тосса, онда ол келесі мьютекстің иемденушісі болып табылады, сол уақытта мьютекс сигналды емес жағдайға көшеді.
Объектілі жағдай – ол берілген мәліметтерге қолданбай және де ол басқа да ағымдар үшін қолданылады, осыдан кейбір әрекеттер аяқталынбайды.
Мысалға, кейбір жұмыстар былай ұйымдастырылған, бір ағым файлдік буфердегі мәліметті оқып, ал басқа ағымдар осы мәліметтерді өңдейді, кейін бірінші ағым жаңа мәліметтерді санап, ал басқа ағымдар оны қайтадан өңдеп отырады және т.с.с. Жұмыс алдында бірінші ағым объеки жағдайларын орналастырады, сигналды емес жағдайға. Барлық басқа ағымдар Wait(x) шақыруларын орындайды. Мұндағы х – жағдайдың көрсеткіші және олар осы жағдайдың орындалуын тосып, тоқтатулы тұрады. Буфер толғаннан кейін бірінші ағым Set(x) шақыруын орындай отырып операциялық жүйеге хабарлайды. Операциялық жүйе қатардағы ағымдарға қарап және оларды қайта жұмысқа кірістіреді.
Достарыңызбен бөлісу: |