русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Особенности кучи в Windows 95, Windows NT.


Дата добавления: 2013-12-23; просмотров: 918; Нарушение авторских прав


КУЧИ (Heaps).

Мы рассматривали функции для работы с виртуальной памятью. Для работы с небольшими областями памяти используются кучи.

В DOS кучей являлась вся свободная память.

куча     программа    
640

Int 21h

48h, 49h, 4Ah

 

Каждая программа имеет следующую структуру.

 

 
 


свободная

память


данные

   
 
 
 

 

 


При работе с кучей используются следующие функции.

HeapCreate(…) – создание кучи.

 
 

 

 


куча

   
 
 
 

 

 


 

HeapDestroy(…) – уничтожение кучи.

HeapAlloc(…) – выделение блока в куче.

HeapFree(…) – освобождение блока в куче.

GetProcessHeap(…) – определение идентификатора кучи, предоставляемой процессу по умолчанию.

 

1. В Windows максимальный размер кучи может быть практически равен размеру свободного адресного пространства. По умолчанию выделяется 1 Мб и передаются 2 страницы физической памяти.

2. В Windows поддерживается несколько куч.

3. Кучи Win32 могут расти за пределы первоначально отведенного для них размера. В этом случае kernel32 выделяет дополнительный блок линейного адресного пространства и связывает с ним кучу, то есть образует подкучу.

Каждая куча Win32 поддерживает 4 отдельных списка свободных блоков, чтобы избежать чрезмерной фрагментации.

4. При создании любого процесса ОС автоматически создаёт кучу, которая называется куча, предоставляемая процессу по умолчанию. Куча нужна самой ОС для выполнения функций Win32.

 

Пример. UNICODE 2-х байтная

ANSI привычная

Windows NT, 2000 работают только с UNICODE, поэтому когда вызывается ANSI вариант, то для выполнения этой функции необходимо организовать буфер для перевода ANSI в UNICODE.



               
   
GetProcessHeap   куча 1
 
HeapCreate   куча 3
 
HeapCreate   куча 2
   
Process Data Base
 


подкучи

 
 

 

 


подкучи

 
 

 


У нас куча 1 создана по умолчанию, а 2 и 3 – это дополнительные кучи, создаваемые процессом. PDB – эта таблица содержит указатели на кучи. ToolHelp – специальный набор функций.

Для чего нужны кучи?

По умолчанию каждой подкуче выделяется ХЗ Мб.

 

Лекция № 6

 

Заголовок и арена кучи Win32.

 
 

 


 

заголовок кучи

 

 
 

 


Каждый блок имеет свой заголовок – арену. Заголовок кучи имеет следующую структуру. Заголовок состоит из полей.

1. общий размер памяти, зарезервированной для кучи.

2. указатель на следующую кучу, если она есть.

3. указатель на начало списка дополнительных подкуч данной кучи.

4. списки свободных блоков.

Для снижения фрагментации памяти и ускорения поиска свободных блоков заголовок каждой кучи содержит 4 списка свободных блоков:

1-ый список состоит из блоков, размер которых меньше 20h байт.

2-ой список состоит из блоков, размер которых меньше 80h байт.

3-ий список состоит из блоков, размер которых меньше 200h байт.

4-ый список состоит из блоков, размер которых меньше FFFFFFFFh байт.

Kernel32 ищет свободный блок в наиболее подходящем блоке.

 
 
    куча     заголовок

 

 


////////////////////////////
список свободных блоков

           
   
 
   
 
 

 

 


 

Каждая структура списка свободных блоков имеет следующий формат.

- максимальный размер блока (это число 20h, 80h, 200h и FFFFFFFFh).

- структура, представляющая собой арену, то есть заголовок.

Длина блока в арене 0, а указатель типа next указывает на первый свободный блок данного размера в куче, то есть указывает на первый свободный блок.

 
 

 

 


первый свободный блок в куче

 

 

В заголовке кучи кроме того находится указатель на следующую кучу, созданную функцией HeapCreate(…). Если следующей кучи нет, то 0.

В заголовке содержится критическая секция CriticalSection. Это структура, которая организует последовательный доступ к куче различных потоков процесса.

Несколько потоков обращаются к куче для того, чтобы выделить блок памяти в куче. Процесс выделения памяти в куче состоит из следующих этапов.

1. Поиск свободного блока.

2. Выделение физической памяти для этого блока.

3. Запись информации в выделенный блок.

Первый поток выполнил два этапа, его квант времени истёк. Начинается выполнение программного кода второго потока. Второй поток выполняет три этапа и находит тот же блок. Когда управление вернётся к первому потоку, то он запишет информацию в тот же блок, то есть информация второго потока будет испорчена.

Чтобы этого избежать существует критическая секция. Это признак. Как только какой-либо поток начинает работу с кучей устанавливается признак в CriticalSection.

Недостатком кучи является снижение производительности из-за последовательного доступа.

В заголовке кучи имеется поле флагов.

Heap_No_Serialsize – куча допускает одновременный доступ к куче со стороны нескольких потоков. Его рекомендуется не использовать, а если использовать, то только в том случае, если процесс имеет один поток.

В заголовке кучи обычно указывается сигнатура “HI” – признак того, что это заголовок кучи. Рассмотрим структуру отдельных блоков кучи. Каждый блок начинается с заголовка, то есть с арены.



<== предыдущая лекция | следующая лекция ==>
Функции компилятора для контроля стека. | Удаление кучи.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.