Білім беру бағдарламасы Инновациялық технологиялар факультеті «Ақпараттық технологиялар және қауіпсіздік» кафедрасы 2023 Алғысөз



бет68/107
Дата19.12.2023
өлшемі0.83 Mb.
#487093
түріБілім беру бағдарламасы
1   ...   64   65   66   67   68   69   70   71   ...   107
сессия ответы

Енгізу-шығаруды баксқару.

Егер сізге UNIX ОЖ-нің Белгілі бір нұсқасы үшін кейбір сыртқы құрылғының драйверін жазу қажет болса, онда сіз міндетті түрде құжаттаманы мұқият оқып шығуыңыз керек. Дегенмен, жалпы принциптерді білу пайдалы болады.


Дәстүр бойынша, UNIX ОЖ енгізу/шығару ұйымының үш түрін және сәйкесінше драйверлердің үш түрін ажыратады. Блокты енгізу / шығару негізінен каталогтармен және негізгі деңгейде блоктық құрылымы бар қарапайым файлдық жүйе файлдарымен жұмыс істеуге арналған. Пп-да. 2.4.5 және 3.1.2 пайдаланушы деңгейінде файлдарды виртуалды жад сегменттеріне тікелей көрсету арқылы жұмыс істеуге болатынын көрсетті. Бұл мүмкіндік блокты енгізу/шығарудың жоғарғы деңгейі ретінде қарастырылады. Төменгі деңгейде блоктық енгізу / шығару блоктық драйверлермен қамтамасыз етіледі. Блоктық енгізу / шығару, сонымен қатар Жүйелік Буферлеу арқылы қолдау көрсетіледі (3.3.1-тармақты қараңыз).
Символдық енгізу / шығару пайдаланушының мекенжай кеңістігі мен сәйкес құрылғы арасындағы алмасуларды тікелей (буферлеусіз) орындауға қызмет етеді. Барлық символдық драйверлер үшін ортақ ядро қолдауы пайдаланушы мен ядролық мекенжай кеңістігі арасында деректерді жіберу функцияларын қамтамасыз ету болып табылады.
Ақырында, ағындық енгізу / шығару (біз бұл курста техникалық бөлшектердің көптігіне байланысты тым егжей-тегжейлі қарастырмаймыз) символдық енгізу/шығару сияқты, бірақ ағынға аралық өңдеу модульдерін қосу мүмкіндігінің болуына байланысты айтарлықтай икемділікке ие.

  1. Синхронды және асинхронды енгізу-шығару.

Синхронды және асинхронды енгізу / шығару


Синхронды енгізу / шығару-бұл схемада процессор енгізу / шығару орындалуын күтеді.
Асинхронды енгізу / шығару-енгізу / шығару процессордағы нұсқауларды орындаумен қатар жүреді.
Синхронды режимде орындалған кезде Win32 API енгізу/шығару функциялары (мысалы, ReadFile, WriteFile немесе DeviceloControl) операция аяқталғанға дейін бағдарламаның орындалуын блоктайды. Бұл модель өте ыңғайлы болғанымен, ол өте тиімді емес. Дәйекті енгізу / шығару сұрауларын орындау арасындағы уақыт аралығында құрылғы бос тұруы мүмкін, яғни толық пайдаланылмауы мүмкін.
Синхронды режимнің тағы бір проблемасы-орындау ағыны кез-келген бәсекелес енгізу/шығару операциясын орындау кезінде уақытты ысырап етеді. Мысалы, бір уақытта көптеген клиенттерге қызмет көрсететін серверлік қосымшада әр сеанс үшін бөлек орындалу ағынын құру қарастырылуы мүмкін. Көбінесе бос тұрған бұл ағындар жадты ысырап етеді және көптеген орындалу ағындары енгізу/шығару аяқталғаннан кейін бір уақытта жұмысын жалғастырып, процессор уақыты үшін күресе бастағанда, контексттің уақыт бірлігіне ауысуының жоғарылауына және масштабталудың төмендеуіне әкелетін ағынды сырғыту жағдайларын (thread thrashing) тудыруы мүмкін.
Windows енгізу / шығару ішкі жүйесі (құрылғы драйверлерін қоса) асинхронды режимде жұмыс істейді-бағдарлама енгізу/шығару операциясымен бір уақытта жұмысын жалғастыра алады. Іс жүзінде барлық заманауи аппараттық құрылғылар асинхронды сипатқа ие және деректерді беру немесе енгізу/шығару операциясының аяқталу сәтін анықтау үшін оларды үнемі сұрастыруды қажет етпейді.
Көптеген құрылғылар процессордың операцияға қатысуын қажет етпестен құрылғы мен компьютердің жедел жады арасында деректерді тасымалдау үшін жадқа тікелей қол жеткізу мүмкіндігін (direct Memory Access, DMA) қолдайды және деректер аяқталғаннан кейін үзіліс жасайды. Ішкі асинхронды синхронды енгізу/шығару режиміне тек Windows қосымшалары деңгейінде қолдау көрсетіледі.
Қолданба енгізу/шығару операциясын орындау үшін асинхронды сұрау жасаған кезде, Windows бұл әрекетті дереу орындайды немесе операцияның орындалуын күтіп тұрғанын көрсететін күй кодын қайтарады. Осыдан кейін орындалу ағыны басқа енгізу/шығару операцияларын бастауы немесе кейбір есептеулерді орындауы мүмкін. Бағдарламашыда енгізу / шығару операцияларының аяқталғаны туралы хабарламаларды қабылдауды ұйымдастырудың бірнеше әдісі бар:
Win32 оқиғасы: бұл оқиғаны күтіп тұрған операция енгізу/шығару аяқталғаннан кейін орындалады.
Асинхронды процедураны шақыру механизмі (Asynchronous Procedure Call, APC) арқылы пайдаланушы функциясын шақыру: орындалу ағыны хабарлауды күту күйінде болуы керек (alertable wait).
Кіріс/шығыс аяқтау порттары (I/O толық порттары, IOCP) арқылы хабарламаларды қабылдау: бұл әдетте ең тиімді механизм. Біз оны әрі қарай егжей-тегжейлі зерттейміз.
Кейбір енгізу/шығару құрылғылары (мысалы, буферленбеген режимде ашылған файл) қосымша кіріс/шығыс сұрауларының аз санының тұрақты болуын қамтамасыз ете алатын болса, қосымша пайда әкелуі мүмкін. Ол үшін Енгізу/шығару операцияларын орындау үшін алдын-ала бірнеше сұраныс жасау және әрбір орындалған сұраныс үшін жаңа сұраныс жасау ұсынылады. Бұл қолданбаның келесі сұрауды орындауын күтпестен, құрылғы драйверінің келесі әрекетті ең қысқа мерзімде инициализациялауын қамтамасыз етеді. Бірақ берілетін деректер көлемімен шектелмеңіз, себебі бұл ядро жадының шектеулі ресурстарын тұтынады.





  1. Достарыңызбен бөлісу:
1   ...   64   65   66   67   68   69   70   71   ...   107




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

    Басты бет