Дәрiске әдiстемелiк нұсқау
Дәрiсте берiлген материалды игеру үшiн ағындар моделінде берiлген анықтамаларына көңiл бөліп, оларды ажырата бiлу керек. Берiлген терминдерге анықтама берiңiз. Ағындар моделінің атқаратын қызметтерiне талдау жасаңыз.
5.5 Процестер және ағындар
Мақсаты:
Процестер мен ағындардың байланыстарымен таныстыру
Дәріс жоспары:
1.Процестер мен ағындардың байланыстары
2.Пайдаланушы кеңістігінде жүзеге асыру
Тақырып бойынша негізгі түсінік:
Амалдық жүйелерде әрбір процеске адрестік кеңістік және жеке басқарушы ағын сәйкес келеді. Расында осылар процесті анықтайды. Дегенмен, кейбір жағдайларда бір адрестік кеңістікте бірнеше квазипараллель басқарушы ағындар болғаны жөн. Олар бір адрестік кеңістікті бөліскен әртүрлі процестер сияқты көрінеді.
Процестер мен ағындардың байланыстарын түсіну үшін ағындардың пайдаланушы кеңістігінде қалай жүзеге асатындығын қарастырайық. Оның екі әдісі бар, олар төмендегі суретте көрсетілген.
А – пайдаланушы кеңістігіндегі ағын дестелері, В – ядромен
басқарылатын ағын дестелері.
Бірінші әдісте ағындар дестесі түгелдей пайдаланушы кеңістігінде орналасады. Мұнда ядро әдеттегі бірағынды процесті басқарады да, ағындар дестесі туралы ешнәрсе білмейді. Ағындар ағындарды басқаратын процедуралар жиынтығы балатын бағдарлама орындалуын қолдау жүйесінің үстінен орындалады.
Бұл әдістің артықтышылығы, ол пайдаланушы деңгейінде ағын дестесін ағындарды қолдамайтын амалдық жүйеде де жүзеге асыруға болатындығында. Бұрын барлық амалдық жүйелер осы категорияға жататын, ал кейбіреулері кәзір де оған жатады.
Егер ағындарды басқару пайдаланушы кеңістігінде жүрсе, онда әрбір процессте өзіндегі ағындарды бақылайтын жеке ағындар кестесі болуы керек. Бұл кесте процестер кестесіне ұқсас болады, бірақ одан айырмашылығы, ол тек команда санағышы, стек төбесінің көрсеткіші, регистрлері, жағдайы сияқты ағындардың сипатын бақылайды. Ағын жұмысқа дайын немесе бұғаттау жағдайына өткенде қайта жүктеуге қажет барлық ақпарат, ядродағы процестер кестесінде сақталған процестер туралы ақпарат сияқты, ағындар кестесінде сақталады.
Ағын сол процесстегі басқа ағынның аяқталуын күткенде, ол локалды бұғаттауға әкелетін қандай-да бір әрекетті істеп, бағдарлама орындалуын қолдайтын жүйені шақырады. Процедура ағынды бұғаттау қажеттігін тексереді. Бұл жағдайда процедура ағынның регистрлерін ағын кестесінде сақтайды, ағын кестесінен жұмысқа дайын ағын іздейді және оның сақталған мәндерін машина регистріне жүктейді. Стек көрсеткіші мен команда санағышы ауыстырылып қосыла салысымен, жаңа ағынның жұмысы автоматты түрде жаңарады. Егер процессорда бір нұсқауда барлық регистрді сақтайтын команда болса және олардың барлығын бір жүктейтін тағы бір команда болса, онда ағындардың қайта қосылуы саны көп емес нұсқаулар арқылы орындалған болар еді.
Бірақ ағындардың процестерден өте күрделі айырмашылығы бар. Ағын өзінің жұмысын уақытша аяқтағанда, мысалы, ол Х процедурасын шақырса, онда Х бағдарламасы ағын туралы ақпаратты ағын кестесінде өзі сақтайды. Сонымен қатар, ол келесі ағынды таңдау үшін ағындар жоспарлағышын шақырады. Ағын туралы ақпарат сақтайтын процедура мен жоспарлағыш локалды процедура болғандықтан, олардың шақырулары ядроны шақырудан тиімді болады. Үзілімнің қажеті жоқ, контексті ауыстыру, кэшті сақтау және т.б. ағындарды ауыстырып қосудыедәуір жылдамдатады.
Пайдаланушы деңгейінде жүзеге асқан ағындардың басқа да артықшылықтары бар. Олар әрбір процеске өзінің жоспарлау алгоритмі болуына мүмкіндік береді. Кейбір қосымшаларға, мысалы, «қоқыс жинау» ағыны бар қосымшаларға жайсыз уақытта тоқтап қалатындығы туралы ойланбау ыңғайлы. Бұл қосымшалар жақсы масштабталады, себебі, ядро ағыны кестедегі және ядроның стегіндегі кеңістікті тұрақты толтыратындықтан, ағындардың саны көп болғанда үлкен проблемаға айналуы мүмкін. Ағынның пайдаланушы деңгейінде жүзеге асыруы өнімді болса да, оған байланысты кейбір проблемалар бар:
Бірінші проблема бұғатталған жүйелік шақыруды жүзеге асыру ға байланысты. Мысалы, пернетақтада бір перне басылмас бұрын, ағын одан оқуды бастап кеткенде жүйелік шақыруды орындауға болмайды, себебі ол барлық ағындарды тоқтатып қояды. Ағындарды қолданудың негізгі мақсаттарының бірі, ол әрбір ағынға бұғатталған ағын қалғандарына кедергі жасамайтындай етіп бұғаттау сұратымдарын пайдалануға рұқсат беру.
Екінші проблема бір ағынды жіберген уақытта басқа бір де бір ағын, бірінші ағын процессорды босатқанша, жіберілмейтіндігіне байланысты. Бір процестің ішінде таймер боынша үзілім жоқ. Нәтижесінде кезекпен орындалатын ағындар жоспарлағышын жасауға болмайды. Жоспарлағыш, ағын өз еркімен бағдарлама орындалуын қолдау жүйесіне енбейінше, ешнәрсе істей алмайды.
Үшінші проблема бағдарламалаушылар ағындарды әдейі ағындары жиі бұғатталатын қосымшаларда қолданғысы келгендігі. Ондайларды, мысалы, көпағынды web-серверден табуға болады. Бұл ағындар жүйеге үнемі жүйелік сұратымдар жіберіп отырады. Басқаруды алып кеткен ядроға, жүйелік сұратымды жасау үшін, егер бір ағын бұғатталған болса, онда ағындарды ауыстырып қосуына ешқандай қиындық жоқ.
Негізі түсінік бойынша процестер мен ағындардың байланыстарын пайдаланушы кеңістігінде жүзеге асыруды меңгермейінше, онымен жұмыс істеу мүмкін емес және қазіргі дербес компьютердің кез келген пайдаланушысында ертеме, кешпе пайда болатын проблемаларды шеше алмайсыз.
|