
- •Системное по. Цели, задачи, классификация
- •Операционная система. Основные функции ос. Структура операционной системы.
- •Общая характеристика операционных систем Microsoft: семейства dos, Windows
- •Интерфейс прикладных программ (api). Apidos (программные прерывания) и Win32
- •Дисковая подсистема в архитектуре ibmpc
- •Низкоуровневая организация дисковой памяти. Сервис bios доступа к дисковой подсистеме.
- •Понятие файловой системы. Назначение, требования, функции. Способы организации фс.
- •Объекты файловой системы: файлы, директории, логические устройства, другие виды объектов.
- •Файловые системы на основе fat
- •X.2 Файловая система ntfs
- •Служебные структуры fat и их использование
- •Программный интерфейс файловой системы (функции для взаимодействия с фс, файлового ввода-вывода) – dos, Windows Функции общего назначения
- •Файловый ввод-вывод
- •14. Адресное пространство процесса (задачи).
- •15. Приложения Windows (Win 32), разновидности. Структура оконных приложений
- •1. Основные определения
- •2. Особенности приложений Win 32.
- •3. Событийное управление
- •4. Структура приложения
- •16. Окно Win32: назначение, виды, свойства. Оконные классы.
- •17. Создание и управление окнами.
- •18. Событийное управление в Win32. Сообщения и очереди сообщений Windows (Windowsmessages): назначение, структура, отсылка, доставка, обработка Сообщения и очереди сообщений.
- •19. Цикл обработки сообщений. Оконная процедура: назначение, выполнение, способы активизации и завершения.
- •20. Многозадачность, многозадачные операционные системы, особенности выполнения приложений в многозадачной среде. Модель многозадачности Win 32
- •21. Состояния процессов (многозадачная среда). Состояния процессов (потоков)
- •22. Многозадачность в win32. Планирование и выполнения программ в win32
- •23. Процессы win32. Атрибуты и состояния процессов. Порождение процессов и управление ими. Основы управления процессами Win32
- •24. Потоки и многопоточные приложения. Порождение потоков, состояние потоков, управление ими. Основы управления потоками Win32
- •25. Нити – альтернативное управление выполнением программы Управление нитями
- •26. Распределение времени выполнения программ в многозадачной системе. Приоритеты. Распределение времени между потоками (управление приоритетами)
- •27. Приоритеты процессов и потоков win32. Управление приоритетами.
- •28. Взаимодействие процессов/потоков, взаимное исключение, синхронизация (базовые сведения)
- •29. Реализация взаимного исключения. Механизм criticalsection.
- •30. Синхронизация при управлении процессами и потоками
- •31. Функция ожидания
- •32. Использование каналов и почтовых ящиков для обмена данными
- •33. Использование файловой системы для обмена данными
- •X.2.6. Использование сообщения wm_copydata
- •34. Графическая подсистема win32 – общая характеристика, основные принципы.
- •35. Основные объекты win32 gdi. Средства векторной и растровой графики
- •Растровая графика
- •36. Подсистема памяти. Основные задачи, функции, требования
- •37. Виртуальное адресное пространство, управление памятью.
- •38. Динамическое распределение памяти программами (heap). HeapApiWin32.
- •Функции работы с кучами (heap-область)
- •39. Подсистема памяти win32. Регионы(области) памяти. Группы функций api подсистемы памяти. Адресное пространство процесса.
- •40. Управление на уровне менеджера вирнуальной памяти. (vmm)
- •41. Отображение файлов в память Проецирование файлов в память
- •42. Системный реестр windows: назначение, организация, доступ
38. Динамическое распределение памяти программами (heap). HeapApiWin32.
Как правило, библиотечные функции работы с памятью используют т.н. "кучу", или heap – область, специально предназначенную для этой цели. Память, выделенная в "куче", должна быть защищена от повторного выделения средствами ОС для предотвращения конфликтов с другими программами. Как правило, память, выделенная в "куче", автоматически освобождается по завершении программы. DOS не предоставляет никаких стандартных средств поддержки "кучи", поэтому все функции должна выполнять сама прикладная программа. В том или ином виде эта возможность имеется в большинстве систем программирования. Обычно создание "кучи" и управляющих структур выполняет "прикладной" загрузчик, а доступ к ней обеспечивают библиотечные функции.
Функции работы с кучами (heap-область)
Т.н. “куча” (heap) – динамически распределяемая область данных, предоставленная процессу. По умолчанию размер кучи составляет 1 Мбайт, но он может быть изменен параметром /HEAP при построении исполняемого модуля.
Куча идентифицируется ее описателем (handle), посредством которого осуществляется доступ к ней. Каждому создаваемому процессу обязательно выделяется одна основная куча (куча “по умолчанию”), описатель которой возвращает функция:
HANDLE GetProcessHeap(VOID).
Для работы с кучей предназначены следующие основные функции.
LPVOID HeapAlloc(hHeap,dwFlags,dwSize) – выделение блока памяти заданного размера из кучи (возвращает указатель на этот блок в адресном пространстве кучи).
LPVOID HeapReAlloc(hHeap,dwFlags,lpOldBlock,dwSize) – изменение размера выделенного блока памяти (при этом блок может быть перемещен, если в куче нет места для простого расширения).
BOOL HeapFree(hHeap,dwFlags,lpBlock) – освобождение ранее выделенного блока памяти в куче.
Так как приведенные выше функции предусматривают явное указание кучи, одновременно можно использовать более одной кучи, что целесообразно для:
– защиты друг от друга различных структур данных.
– повышения эффективности управления памятью.
– уменьшения рабочего множества процесса.
Кратко поясним последние два положения.
Хотя в системах со страничной организацией отсутствует проблема фрагментации физической памяти, сохраняется проблема фрагментации адресного пространства. Если эта проблема не актуальна в полном адресном пространстве (4 Гбайт), то в пространстве кучи (стандартно 1 Мбайт) она существенна. Если элементы структур данных различаются по размеру, то полезно размещать эти структуры в разных кучах.
Работа с разными структурами данных, в соответствии с принципом локальности, чаще всего происходит не одновременно. Границы элементов разных структур не выровнены на границу страницы, поэтому обращение к одной структуре вызывает подкачку всей страницы вместе с другими структурами, что увеличивает рабочее множество процесса.
Для создания дополнительной кучи используется функция:
HANDLE HeapCreate(DWORD dwFlags,DWORD dwInitSize,DWORD dwMaxSize)
Более подробная информация об этих и других функциях для работы с кучами содержится в соответствующей документации.