
- •Мустафина б.М., Сейдахметова г.Е., Әлібиева ж.М.
- •Пәндік оқу - әдістемелік кешені
- •Алматы 2012
- •1. Пәннің оқу бағдарламасы – syllabus
- •Оқытушылар туралы мәліметтер:
- •1.2 Пән туралы мәліметтер:
- •Оқу жоспарының көшірмесі
- •1.3 Пререквизиттер
- •1.6 Тапсырмалардың тізімі мен түрлері және оларды орындау кестесі
- •1.7 Әдебиеттер тізімі
- •1.8 Білімді бақылау және бағалау.
- •1 Модуль бойынша бақылау жүргізуге арналған сұрақтар (1-7 бөлімдер)
- •2 Модуль бойынша бақылау жүргізуге арналған сұрақтар:
- •1.9 Қойылатын талаптар
- •2 Негізгі таратылатын материалдар мазмұны
- •2.1 Курстың тематикалық жоспары
- •2.2 Лекциялық сабақ конспектілері
- •1.1 Windows ож құрылымы Жүйе құрылымының жалпы бейнелеуі
- •2.2. Ағындарды диспетчерлеу және жоспарлау
- •2.3 Ағынды анықтау
- •2.4 Ағындармен жұмыс істеуге арналған api функциясы
- •2.5 Ағындардың приоритеті
- •3.1 Процесстерді басқару
- •3.2 Windows операциялық жүйесіндегі процесстер мен ағындар
- •3.3 Процесстермен жұмыс істеуге арнлаған api функциялар
- •4.2 Ағындарды синхрондау объектілері
- •Мьютекстер
- •5.1 Оқиғалар
- •5.2 Бұғатталған қосымша функциялар
- •7.1. Үймелер
- •7.2 Үйме жадысын басқару
- •8.1 Файлдар мен каталогтарды басқару Файлдарды құру және ашу
- •8.2 Каталогтарды басқару
- •8.3 Файлдар мен каталогтар атрибуттарын алудың басқа әдістері
- •9.1 Файлдарды бұғаттау
- •9.2 Реестр
- •Экспорттелетін идентификаторды анық қосу
- •12.1 Стандартты құрылғылар және консольді енгізу- шығару
- •12.2 Асинхронды енгізу- шығару және аяқталу порттары
- •2.3 Лабораториялық сабақтардың жоспары
- •2.4 Оқытушының басқаруымен студенттің өзіндік жұмысы бойынша оқу жоспары (соөж) (45 сағат)
- •2.5 Студенттің өзіндік жұмысының сабақ жоспары (сөж) (45 сағат)
- •2.6 Өзін өзі тексеру үшін кілтпен көрсетілген тестік жаттығулар
- •2.7 Курс бойынша емтихан сұрақтары
- •Глоссарий
- •Жүйелік программалау
7.1. Үймелер
Win32 есте сақтау қабілетін үймелер (heaps) түрінде сақтайды. Процесте бірнеше үймелер болуы мүмкін. Солардан жасаушы жадыны бөліп береді. Көбінесе бір үйме жеткілікті, бірақ астында келтірілген жағдайларға қарап олар көп үймемен жұмыс жасайды. Егерде тек қана бір үйме жеткілікті болса, онда жадыны басқаруға С кітапханасының қызметін қолданыңыз (malloc, free, calloc, realloc).
Үймелер Win32-нің объектісі болып табылады, сондықтан олардың дескрипторлары бар. Жадыны бөлу кезінде үйме дескрипторын білуіңіз қажет.
HANDLE GetProcesssHeap(VOID)
Қайтарылатын мәні: үйме процессінің дескрипторы; NULL егер сәтсіз жағдайда.
Бұл жағдайда қатені көрсету үшін CreateFile қызметіндегі сияқты қайта INVALID_HANDLE-ға емес, ал NULL-ға ораламыз.
Сонымен қатар программалар ерекше үймелер жасай алады. Бұл бөлек құрылымдардың сақталуына арналған бөлек үймелерді қажет ететін жағдайларға жатады. Келесіде бөлек үймелердің артықшылықтары суреттелген.
Тарату әділеттілігі. Сол үймеге сақталған жадыдан көп ешбір ағын ала алмайды. Көбінесе программамен шақырылған жадының кемуі бос және қолданылмайтын мәлімет элементі тек қана процесс ағынына ғана әсер етеді.
Көп ағындық жылдамдығы. Әрбір ағынға бөлек үймелерді беру арқасында айтарлықтай ағындар арасында жарыс азайғандықтан жылдамдығы көтеріледі.
Сақтау эффектісі. Бекітілген көлемді мәләметтер элементтерін кіші үймешікте сақтаудың маңызы әр түрлі көлемді көп элементтерді бір үлкен үймеде сақтаудан көбірек болып табылады. Сонымен қатар жадыны үзінділеу азаяды. Бұдан басқа, әрбір ағынға бөлек үйме бөліп беруі синхрондауды жеңілтетеді, айтарлықтай оған қосымша ұтыс береді.
Жадыны босату тиімділігі. Бүкіл үймелер және сол жерде орналасқан деректердің құрылымдары тек қана функцияның бір шақырумен босатыла алады. Сонымен қатар үйменің бүкіл бөлінген, бірақ жоғалтылған жадысы босатылады.
Тиімді сілтемелерді орналастыру. Деректер құрылымы кішірек үймеде орналасуы оның элементтері беттердің аз санында болғанына кепіл береді, сондай-ақ құрылымды өңдеуде беттік қателерді азайтады.
Осылардың құндылық артықшылдықтары қолданбаның тәуелділігінде өзгереді және көптеген программалаушылар процесс үймесін және C кітапханасын ғана қолданады. Қалай болған жағдайда да осы екі функция үймелерді құрып және жояды.
Үймлердің бастапқы нөл бола алатын және әрқашан беттердің еселі сан мөлшеріне дейін дөңгелектенеді және де алғашқы белгіленген үйменің физикалық жадысының көлемін анықтайды (беттік файлда). Программаның бастапқы өлшемінің шекарасынан шығып кеткенде қосымша беттерді максималды мәнге дейін автоматты түрде бөліп береді. Беттік файл (файл көшіргіші) шек қойылған қор болғандықтан, кейін қалдырған үйме мөлшері алдын ала белгілі болмаған оқиғаларға ыңғайлы болады. DwMaximumSize айнымалысының нөлдік мағынасы үйме мөлшерінің динамикалық үлкейінің шегін анықтайды. Үйме процессі сол сияқты динамикалық өседі.
HANDLE HeapCreate(DWORD f1 Options,
SIZE_T dwInitialSize, SIZE_T dwMaxixumSize);
Екі мөлшер аймағы DWORD емес, ал SIZE_T типіндей болады. SIZE_T типі компилятор жалаушаларына байланысты 32- разрядты немесе 64- разрядты белгісіз бүтін арқылы WIN32 немесе WIN64 анықталады. SIZE_T типі WIN64-ің мүмкіндіктерін қамтамасыз ету үшін еңгізген болатын.
FlOptions айнымалысы екі жалаушаның комбинациясы болып табылады.
HEAP_GENERATE_EXEPTION – сонымен қатар белгілеудің сәтсіз мүмкіншілігін шығарулар деп атайды. Олар құрылысты өңдеушімен өңделеді (Structured Exception Handler- SEH). HeapCreate функциясы өзімен өзі шығаруды шақырады; егер де осы жалауша орнатылған болса, ол сәтсіз жағдайында HeapAlloc сияқты функциясының шығаруын шақырады.
HEAP_NO_SERIALIZE-Осы жалаушаның орнатуы кейбір кездерде тез жұмыс істеудің кішкене үлкеюін рұқсат етеді. DwMaximumSize туралы бірнеше сөз айтып кетейік.
Егер де DwMaximumSize- дің мәні 0-ге тең болмаса, онда виртуалды мекен-жайлы аймақ бүкіл белгіленген аймақты белгілей алмаса, онда ол ерекшелінеді. Бұл үйменің максималды мөлшері, оны артпайтын деп атайды.
Басқа жағынан қарасақ, егер де DwMaximumSize – дің мәні 0-ге тең болса, онда үйме бастапқы мөлшерден артып кетеді. Бұл шекара қолайлы виртуалы мекен-жайлы ауданымен белгіленеді. Соның жартысы басқа үймелерге және сақтау файлының аймағына беріледі.
Бүкіл үймені жою үшін HeapDestroy функциясы қолданылады, ал CloseHandle функциясы бәрін керек етпейтін дескрипторларын жоюға қолданады.
BOOL Heap Destroy (HANDLE hHeapt);
hHeapt айнымалысы HeapCreate функциямен құрылған үймеге көрсету керек. Абайлаңыз үйме процесін жойып қойын жүрмеңіз (GetProcessHeap функциямен алынған). Үймелерді жою беттік файлында виртуады жадыда және физикалық жадыда кеңістікті босатады.
Үймелерді жою – бұл тағы да әр жеке элементтердің қажеттіліксіз жоюын тез босатуыдың әдісі болып табылады, бірақта Си ++ объектілерінің экземплярлары жойылмайды, сондықтан олардың деструкторлары шақырылмайды. Үйме жоюының арттықшылық қатары бар.
Құрылымда аралап шығу элементтерімен арналған кодты жазу қажеттілігі жоқ.
Әрбір бөлек элементті босату қажеттілігі жоқ.
Жүйе бүкіл мәлімет құрылғысы бір жүйелік шақырумен бостылғанша үймеге көмек беруге уақыты берілмейді.