
- •1 Призначення та функції операційних систем.
- •2 Классификация ос:
- •3 Свойства ос:
- •4 Архитектура компьютерной системы Windows nt
- •5 Типы Windows-приложений:
- •6 Структура оконных вин приложений
- •7 Механизм сообщений Windows
- •9 Реєстрація класів вікон користувача та створення вікон у Windows.
- •10 Создание дочерних окон.
- •12 Сегментный способ адресации в Windows
- •13 Страничная организация памяти в Windows
- •14.Алгоритм управления страницами
- •15. При выделении памяти необходимо учитывать следующие ограничения:
- •18. Механизмы работы с памятью. Использование виртуальной памяти.
- •19. Механизмы работы с памятью. Отображение файлов на память.
- •20. Механизмы работы с памятью. Использование «кучи».
- •21. Исследование виртуальной памяти. Системная информация.
- •22. Исследование виртуальной памяти. Статус виртуальной памяти.
- •23. Исследование виртуальной памяти. Определение состояния адресного пространства.
- •25 Компоненты файловой системы
- •26 Монтирование и демонтирование файловой системы
- •Функциональные свойства fat
- •28 Ntfs
- •29 Поняття планування та диспетчеризації.
- •30 Алгоритм циклічного планування процесів.
- •31 Алгоритм пріоритетного планування процесів.
- •32 Алгоритм планування процесів з кількома чергами.
- •33 Алгоритм адаптивно-рефлекторного планування процесів.
- •34. Поняття політики планування процесів.
- •35. Класифікація процесів з погляду планування.
- •36. Поняття процесу. Пріоритети, порядок створення та завершення
- •37. Завдання. Обмеження, створення, статистична інформація.
- •38. Поняття потоку. Створення, призупинення, поновлення та завершення потоків.
- •39. Життєвий цикл процесу. Стан процесу. Переключення станів.
- •40. Абстрактне визначення та контекст процесу. Відносини між процесами.
- •41) Критичний ресурс. Критична секція. Використання спільної змінної.
- •42) Критичний ресурс. Критична секція. Почергове виконання критичної секції.
- •43) Критичний ресурс. Критична секція. Алгоритм Деккера.
- •44) Поняття синхронізації. Виявлення та запобігання тупиків (блокувань).
- •45) Синхронізація потоків. Функції та використання моніторів.
- •46) Синхронізація. Поняття та використання семафора для критичної секції.
- •53. Понятие параллельного исполнения.
- •57. Назовите и охарактеризуйте структуру сетевых операционных систем.
- •58. Взаимодействий компонентов ос при взаимодействии компьютеров в сети.
20. Механизмы работы с памятью. Использование «кучи».
Механизмы работы с памятью:
Виртуальная память (используется для работы с большими объемами памяти);
Отображение файлов на память (используется для быстрой работы с файлом, если необходимо его записиобрабатывать в произвольном порядке, для создания разделяемой памяти между процессами)№
«Кучи» (используются для выделения небольших объемов памяти в приложении).
«Куча» - это зарезервированный (не закрепленный) участок адресного пространства. По мере использования этой памяти диспетчер «кучи» закрепляет за ней память из страничного файла. При освобождении памяти диспетчер «кучи» возвращает страницы системе.
«Куча» всегда может использоваться только одним процессом. Один процесс может иметь несколько «куч».
При создании процесса ОС ставит ему в соответствие стандартную «кучу» размером 1 Мбайт. Этот параметр можно переопределить в командной строке компоновщика или в среде. Сами функции win32 используют «кучи», поэтому уменьшать размер не стоит. Диспетчер «кучи» следит за тем, чтобы отдельные потоки одновременно не имели доступа к «куче». Стандартную «кучу» создает сама ОС и уничтожает она ее сама. Дескриптор стандартной «кучи» возвращает функция GetProcessHeap:
HANDLE GetProcessHeap(VOID).
Дескриптор стандартной «кучи» можно использовать для выделения памяти с помощью функции HeapAlloc ():
LPVOID HeapAlloc(
HANDLE hHeap,
DWORD dwFlags,
DWORD dwBytes
);
hHeap – дескриптор личного блока («кучи» ).
dwFlags – определяет флаги, которые более приоритетны, чем флаги при создании «кучи».
Можно задавать флаги:
HEAP_GENERATE_EXCEPTIONS, HEAP_NO_SERIALIZE,
HEAP_ZERO_MEMORY – заполнить выделенную память нулем.
dwBytes – количество выделенных байт.
Возвращаемое значение:
Успех – адрес начала выделенной памяти.
Ошибка и не задано HEAP_GENERATE_EXCEPTIONS, функция возвращает NULL, а если задано, функция генерирует исключение (STATUS_NO_MEMORY – недостаток доступной памяти, STATUS_ACCESS_VIOLATION – неверные параметры функции).
Кроме кучи, предусмотренной по умолчанию, можно использовать дополнительные области памяти («кучи»).
Создание «кучи». Для создания используется функция HeapCreate. Функция выделяет непрерывный блок памяти в виртуальном адресном пространстве текущего процесса и выделяет физическую память для начального блока выделенной памяти.
HANDLE HeapCreate(
DWORD flOptions,
DWORD dwInitialSize,
DWORD dwMaximumSize
);
flOptions – определяет атрибуты новой «кучи». Действует для функций, использующих «кучу» (HeapAlloc, HeapFree, HeapReAlloc, и HeapSize). Можно задать один или несколько флагов:
HEAP_GENERATE_EXCEPTIONS – указывает, что система будет формировать исключение в случае ошибок, таких как нехватка памяти, вместо возврата NULL.
HEAP_NO_SERIALIZE – определяет режим монопольного использования «кучи» потоками процесса. По умолчанию этот флаг не задан, допускается одновременный доступ двух потоков к «куче».
dwInitialSize – определяет начальный размер блока в байтах.
dwMaximumSize – если максимальный размер не нулевой, то это максимальный размер в байтах(выравнвается на границу страницы самой функцией). Если dwMaximumSize =0, это означает, что «куча» ограничена только размером памяти.
Возвращаемое значение:
Успех – дескриптор области памяти.
Ошибка – NULL.
Определение размера памяти. Чтобы узнать действительный размер выделенной памяти, используется функция HeapSize.
DWORD HeapSize(
HANDLE hHeap,
DWORD dwFlags,
LPCVOID lpMem
);
hHeap – дескриптор «кучи».
dwFlags – дополнительные характеристики используемого блока.
lpMem – адрес блока памяти, для которого определяется размер.
Возвращаемое значение:
Успех – размер в байтах.
Ошибка – 0xFFFFFFFF.
Освобождение памяти. Для освобождения используется функция HeapFree.
Успех – TRUE.
Ошибка – FALCE.
Уничтожение «кучи». Используется функция HeapDestroy. Функция освобождает память.
BOOL HeapDestroy(
HANDLE hHeap //дескриптор кучи
);
Возвращаемое значение:
Успех – не ноль.
Ошибка – ноль.
Информация о «кучах». Используется функция GetProcessHeaps. Эта функция позволяет получить дескрипторы всех «куч» для текущего процесса.
DWORD GetProcessHeaps(
DWORD NumberOfHeaps, //максимальное количество дескрипторов
PHANDLE ProcessHeaps //адрес начала массива дескрипторов
);
Возвращаемое значение: количество действующих дескрипторов для процесса.
Если оно меньше, равно NumberOfHeaps – оно является действительным количеством дескрипторов.
Если оно больше, чем NumerOfHeats – необходимо заново выделить достаточную память и заново повторить вызов функции.
Если оно равно 0, функция ошибочна.
Проверка целостности «кучи». Используется функция HeapValidate. Функция сканирует все блоки памяти кучи, проверяет правильность всего списка.
BOOL HeapValidate(
HANDLE hHeap, //дескриптор кучи для проверки
DWORD dwFlags, //флаг(допустимый атрибут: HEAP_NO_SERIALIZE)
LPCVOID lpMem //указатель на индивидуальный блок памяти
);
Возвращаемое значение:
Не ноль, если целостность не нарушена.
Если нарушена, функция возвращает ноль.
Функции HeapLock и HeapUnlock.
После вызова функции HeapLock текущий поток становится единственным владельцем «кучи». Все другие потоки, использующие «кучу», блокируются до вызова функции HeapUnlock.
BOOL HeapLock(
HANDLE hHeap //дескриптор кучи
);
Возвращаемое значение:
Если функция завершилась успешно – не ноль.
Если ошибка – то 0.
BOOL HeapUnlock(
HANDLE hHeap //дескриптор кучи
);
Возвращаемое значение:
Успех – не ноль.
Ошибка – 0.