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



бет74/107
Дата19.12.2023
өлшемі0.83 Mb.
#487093
түріБілім беру бағдарламасы
1   ...   70   71   72   73   74   75   76   77   ...   107
сессия ответы

Виртуальды жадыны ұйымдастыру.

Виртуалды мекен-жайды физикалық мекен-жайға түрлендіруді жүзеге асыру үшін келесі әрекеттерді орындайды. Виртуалды жад бірдей ұзындықтағы блоктарға бөлінеді, әдетте 4 Кбайт, олар беттер (страница) деп аталады. Бұл жағдайда виртуалды жад беттері сақталатын файлдар бет файлдары немесе подкачки файлдары деп аталады. Процесс виртуалды беттегі мекен-жайға жүгінген кезде, қажет болса, бұл парақ компьютердің нақты жадына жүктеледі және осы парақпен жұмыс істеу үшін процестің мекен-жай кеңістігін конфигурациялайды. Виртуалды жадтың мұндай ұйымдастырылуы бет деп аталады.
Шын мәнінде, бұл жағдайда мекен-жай екі бөлікке бөлінеді: үлкен және кіші. Мекен — жайдың жоғарғы бөлігі нақты немесе виртуалды жадтағы бет нөмірі ретінде қарастырылады, ал оның төменгі бөлігі сол беттің ішіндегі орын ауыстыру ретінде қарастырылады.
Процесс тұрғысынан оның виртуалды жадының беттері үш күйдің бірінде болуы мүмкін:
* пайдалану үшін босатылған (free);
* пайдалану үшін процеске бөлінген (committed).
* резервтелген, бірақ процесте пайдаланылмайды (reserved);
Виртуалды жад аймағын резервтеу немесе тарату үшін процесс VirtualAlloc функциясын шақыруы керек. Егер lpAddress параметрі null болса, to амалдық жүйенің өзі виртуалды жад аймағының бастапқы мекен-жайын таңдайды. Виртуалды жад аяқталғаннан кейін оны VirtualFree функциясын пайдаланып босату керек.
Процестің жұмыс жиынтығына кіретін беттер саны туралы GetProcessWorkingSetSize функциясын шақыру арқылы білуге болады. Процестің жұмыс беттерінің минималды және максималды өлшемдерін SetProcessWorkingsetSize функциясын шақыру арқылы өзгертуге болады.
Жад блогын белгілі бір мәнмен толтыру үшін FillMemory функциясы қолданылады. Егер жад блогын нөлдермен толтыру қажет болса, онда бұл үшін ZeroMemory функциясын пайдалануға болады. Виртуалды жад блогын көшіру үшін CopyMemory функциясы қолданылады. Қабаттасқан жад блоктарын көшіру үшін MoveMemory функциясы қолданылады.
Windows амалдық жүйелерінде келесі мүмкіндіктер жиынтығы бар:
• VirtualAllocEx-виртуалды жадты тарату;
• VirtualFreeEx - виртуалды жадты босату;
* VirtualProcectEx- кіретін(доступ) атрибуттарын өзгерту;
* VirtualQueryEx — аймақтың күйін анықтау.
Бұл мүмкіндіктер басқа процестің мекенжай кеңістігінде виртуалды жадпен жұмыс істеуге арналған. Бұл функциялардың атаулары біз қарастырған функциялардың атауларынан тек Ex жұрнағымен ерекшеленеді. Бұл функциялардың параметрлер тізімінде жоғарыда қарастырылғандай параметрлері бар, бірақ қосымша бірінші параметр-бұл функция жұмыс істейтін адрестік кеңістігі бар процесс дескрипторы.
Басқа процестің виртуалды жадына қол жеткізетін бағдарлама басқа процестің виртуалды жадынан деректерді оқуға және басқа процестің виртуалды жадына деректерді жазуға арналған ReadProcessMemory және WriteProcessMemory мүмкіндіктерін пайдалануы керек.
Жад үйіндісі немесе виртуалды беттің өлшемінен кішірек жад блоктарын түсіру және босату үшін пайдаланатын процесс арқылы таратылған виртуалды жад аймағы деп аталады. Егер жүйе параллель жұмыс істейтін ағындардың осы үйіндіге қол жеткізуін синхрондаса, үйінді серияланатын деп аталады. Windows-та әр үйіндінің өзіндік дескрипторы бар, сондықтан ядро нысаны болып табылады.
Әрбір процесс үшін Windows әдепкі бойынша 1 Мбайт көлеміндегі бір үйінді сақтайды және процесте пайдалану үшін одан бірден 4 КБ виртуалды жадты таратады. Әдепкі процесс үшін жасалған үйінді тұтқасын GetProcessHeap функциясы арқылы алуға болады.
Сонымен қатар, процесс жұмыс кезінде үйінділерді динамикалық түрде жасай алады. Динамикалық үйінді құру, әдетте, динамикалық бөлінген жады бар қосымшаны жылдамдатуға бағытталған. Біріншіден, динамикалық түрде жасалған үйінді әдетте тек бірдей нысандарды сақтау үшін қолданылады. Бұл жағдайда үйінді фрагментациясы алынып тасталатындықтан, жадтың динамикалық таралуы кәдімгі үйіндіге қарағанда тезірек орындалады. Бұл жағдайда жад үнемді қолданылады. Екіншіден, динамикалық түрде жасалған үйінді серияланбауы мүмкін, бұл сонымен қатар осы үйіндімен жұмысты тездетеді. Мұндай үйіндіге ағындардың кіруін синхрондаудың қажеті жоқ. Бірақ бұл жағдайда үйінді тек бір ағынды қолдана алады. Мұндай үйіндіге бірнеше ағындарға қол жеткізу үшін бұл ағындар өздігінен синхрондалуы керек. Динамикалық үйінді жасау үшін HeapCreate функциясы қолданылады. Үйіндіні жою үшін HeapDestroy функциясын пайдалану керек.
Жадты үйіндіден бөлу үшін HeapAlloc функциясы қолданылады. Егер үйіндіден бөлінген жад енді бағдарламада қолданылмаса, оны қайтадан үйіндіге қайтару керек, яғни. — босатуымыз керек. Үйіндіден бөлінген жадты босату үшін HeapFree функциясы қолданылады.
Егер үйінді серияланбайтын болса, онда бірнеше ағындардың осы үйіндіге параллель қол жеткізуі оның дәйекті (непротиворечивое) күйін бұзып, қосымшаның жұмысында қате тудыруы мүмкін. Мұндай жағдайды болдырмау үшін Windows амалдық жүйелерінде HeapLock және HeapUnlock мүмкіндіктері бар, олар бірнеше ағындардың үйіндіге параллель кіруіне жол бермейді.
Егер үйінді HeapLock функциясын пайдаланып ағынмен бұғатталса және басқа ағын осы үйіндіге қол жеткізу үшін қандай да бір функцияны тудырса, онда жүйе HeapLock функциясын тудырған ағын HeapUnlock функциясын шақырғанға дейін оны күту күйіне қояды.





  1. Достарыңызбен бөлісу:
1   ...   70   71   72   73   74   75   76   77   ...   107




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

    Басты бет