Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СП_УМК 2012 каз для 5В070400.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.4 Mб
Скачать

5.2 Бұғатталған қосымша функциялар

Ары қарай бірнеше функциялар көрсетілген. Олар жай операцияны салыстырумен және айнымалылардың жұбын алмастыруын рұқсат етеді.

Бұғатталған айырбас бір айнымалыны екіншісіне жазады:

LONG InterlockedExchange(LPLONG Target, LONG Value)

Функция Target айнымалысына ағындағы мағынасын қайтарып, оған Value мағынасын қосады. Target айнымалысы сөздермен тегістелуі керек.

InterlockedExchangeAdd қызметі бірінші мағынаға екіншісін қосады.

LONG InterlockedExchangeAdd (PLONG addend, LONG Increment)

Increment айнымалысы Addend айнымалысына қосылып, Addend-тің негізгі мағынасын қайтарады. Бұл функция айнымалыны екі есе (немесе одан да үлкен) өсірудің атомарлық операциясын орындауға рұқсат береді. Ал InterlockedIncrement-пен мұндай операциялар жасауға болмайды.

Соңғы InterlockedCompareExchange функциясы InterlockedExchange функциясына ұқсас. Айырмашылығы: Теңдік орындалған жағдайда ғана айырбас жасалына алады.

PVOID InterlockedCompareExchange (PVOID *Destination,

PVOID Exchange, PVOID Comparand)

Бұл функция атомарлық операцияларда келесі әрекеттерді орындайды:

Temp = *Destination

If (*Destination= = Coparand) *Destination = Exchange;

Return Temp;

Осы функцияның бір айнымалысы ол критикалық кода секциясының бұғатталуын қолданады. *Destination айнымалысы “бұғаттау айнымалысы” болып табылады. Ол 1 тең болса “бұғатталған”, ал 0 тең болса ”бұғаттан алынған” деп есептеледі. Exchange айнымылысы 0 мәнді болуы тиіс, ал Comparand болса 1 мәнін. Егер де функция 1 мағынасын қайтарса, онда шақырылған ағын кызметі өзінің “билігіне” критикалық секциясын алады. Басқалай ол “ұйқтап қалу ” немесе ”циклденіп” бірнеше уақыт керек емес циклді орындап, содан соң қайта көру керек. Бұл циклдену – цикл санағыштың 0 емес мәні бар CRITICAL_SECTION объекті үшін EnterCriticalSection функциясы күту кезінде тура осыны орындайды.

Негізгі әдебиеттер: 2 [ 246- 258]

Бақылау сұрақтары:

  1. Оқиғалардың түрлері.

  2. Оқиғаларды қолданудың төрт үлгісі.

  3. Бұғатталған функциялардың тағайындауы.

Дәріс 6. Жадыны басқару. Виртуалды жадыны қолдану

Жадыны басқару сәулеті.

Win32-нің әр процесі өзінің 4Гбайттық виртуалды адрестік кеңістігі бар. Win32 процесске ең кем дегенде жартысын қолайлы етеді (2Гбайт). Қалған виртуалды адрестік кеңістік біріге пайдаланатын кода және мәліметтерге, жүйелік кодасына, драйверлерге және т.б. арналған.

Жадыны басқаруға шолу.

ОЖ сұраныс бойынша беттерді айырбастаун, беттерді жүктеу механизмін, виртуалды жадыны физикалық жадыға бейнелеудің барлық элементтерін және т.с.с. басқарады. Міне қысқаша резюме:

- Жүйенің физикалық жадысы аз мөлшерде болады.

- Әрбір процесс (ал қолданушы және жүйелік процесстер бірнеше болуы мүмкін) өзінің виртуалды адрестік кеңістігі болады, ол қол жетерлік физикалық жадыдан едәуір асу мүмкін.

- ОЖ виртуалдық адрестерді физикалықта көрсетеді.

- Виртуалдық беттердің көбісі физикалық жадыда болмайды, сол үшін ОЖ беттік қателерді бақылап ақпараттарды дисктен: жүйелік беттік файлдан (файл подкачки) немесе қарапайым файлдан жүктейді. Беттік қателер жұмыс өнімділігіне әсер етеді, сондықтан программалар қателер саны минимумге мәлімделетіндей жобалануы тиіс.

6.1 суретте (Virtual Memory Manager) виртуалды жады диспечеріне негізделген Win32-нің API-де жадыны басқару механизмі көрсетілген. Win32 виртуалды жадының API интерфейсі (VirtualAlloc, VirtualFree, VirtualLock, VirtualUnlock және т.б.) бүтін беттермен жұмыс істей алады. Win32 “үйменің” API интерфейсі пайдаланушымен анықталатын жады бірліктерімен жұмыс істей алады.

VirtualAlloc функциясы виртуалды адрестік кеңістікте беттер қатарын бөліп береді. Ал VirtualAllocEx функциясы көрсетілген процестің виртуалды адрестік кеңістігінде беттер қатарын бөліп береді.

LPVOID VirtualAlloc (LPVOID lpvAddress, DWORD dwSize,

DWORD dwAllocationType, DWORD dwProtect).

LPVOID VirtualAllocEx (HANDLE hProcess, LPVOID lpvAddress,

DWORD dwSize, DWORD dwAllocationType, DWORD dwProtect ).

Win 32- ның программасы

С кітапханасы: C: malloc, free

Үйменің API : HeapCreate,

HeapDestroy,

HeapAlloc, HeapFree

MMFAPI:

CreateFileMapping, CreateViewOfFile

Виртуалды жадының API-і

Виртуалды жадының диспечерімен Win32-нің ядросы

Физикалық жады

Диск және

файлдық жүйе

Сурет 6.1. Win32- нің жадыны басқару сәулеті

VirtualFree функциясы виртуалды адрестік кеңістікте беттер қатарын босатады. Ал VirtualFreeEx функциясы көрсетілген процестің виртуалды адрестік кеңістікте беттер қатарын босатады.

BOOL VirtualFree (LPVOID lpvAddress, DWORD dwSize,

DWORD dwFreeType)

BOOL VirtualFreeEx (HANDLE h Process, LPVOID lpvAddress,

DWORD dwSize, DWORD dwFreeType)

VirtualLock функциясы виртуалды адрестік кеңістік аймағын жадыда бұғаттайды, ал VirtualUnLock функциясы процестің виртуалды адрестік кеңістігінде беттердің көрсетілген қатарына жол ашуға мүмкіндік береді. Қажеттілік өлшемімен беттік файлына беттерді түсіреді.

BOOL VirtualLock (LPVOID lpvAddress, DWORD dwSize),

BOOL VirtualUnLock (LPVOID lpvAddress, DWORD dwSize)

VirtualProtect функциясы виртуалды адрестік кеңістігінде бөлінген беттердің аймағына қатынас құруға қорғау орнықтыруларын өзгертеді.

BOOL VirtualProtect (LPVOID lpvAddress, DWORD dwSize,

(DWORD dwNewProtect, DWORD pdwOldProtect,),

BOOL VirtualProtectEx (HANDLE hProcess, LPVOID lpvAddress,

DWORD dwSize, DWORD dwNewProtect, DWORD pdwOldProtect,),

Негізгі әдебиеттер: 1 [ 359 - 392], 2 [132 –134] , 10 [ 340 –372]

Бақылау сұрақтары:

  1. API Win32-де жадыны басқару механизмі.

  2. Виртуалды жадысымен жұмыс жасаудағы негізгі API функциялары.

  3. Беттік қателер дегенде нені түсінесіз.

Дәріс 7. Динамиқалық таратылатын жады

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]