
- •Системное по. Цели, задачи, классификация
- •Операционная система. Основные функции ос. Структура операционной системы.
- •Общая характеристика операционных систем 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: назначение, организация, доступ
37. Виртуальное адресное пространство, управление памятью.
Виртуальное адресное пространство – совокупность виртуальных адресов, доступных прикладной программе (программам), абстрагированных от их физического представления (размещения). Для его создания служит совокупность соответствующих методов (алгоритмов) и технических средств, т.н. виртуальная память.
Без использования виртуальной памяти все выделенные фрагменты, в т.ч. образы процессов, постоянно находятся в физическом оперативном ЗУ. Принципиально эта ситуация более простая, но налагает ограничения на доступное адресное пространство либо приводит к неэффективному использованию аппаратуры. Характерна для однозадачных систем с небольшими ресурсами. В рамках группы выделяются следующие основные способы.
1. Распределение фиксированными разделами. Простейший способ, адресное пространство делится заранее, и в дальнейшем разбивка сохраняется. Применяется ранняя настройка адресов.
2. Распределение разделами переменной длины. Разделы выделяются из сплошной области по мере необходимости, что повышает гибкость и эффективность, но усложняет алгоритмы распределения. Недостатком способа является фрагментация памяти. Применяется ранняя настройка адресов.
3. Перемещаемые разделы. Выделенные разделы могут перемещаться в физическом адресном пространстве, что позволяет решить проблему фрагментации и “уборки мусора”. Еще более усложняются алгоритмы и повышается гибкость. Необходима поздняя настройка адресов.
При использовании виртуальной памяти действия по размещению и перемещению фрагментов памяти, а также преобразованию адресов выполняются автоматически. Естественным образом достигается значительное расширение доступного адресного пространства путем вытеснения фрагментов во внешнюю память (т.н. своппинг). Настройка адресов только поздняя, как правило, прозрачная для программы. В рамках группы применяются следующие механизмы.
1. Страничное распределение. Страница представляет собой блок фиксированного небольшого (1-8 Кбайт) размера, причем память выделяется только целыми страницами. Адресное пространство, таким образом, представляется как каталог страниц, возможно, не единственный, а виртуальные (логические) адреса состоят из идентификатора (индекса) страницы и смещения в странице. Преобразование может быть и многоступенчатым. Страницы могут свободно перемещаться в памяти, при этом виртуальные адреса не изменяются, но корректируется заполнение системных таблиц.
2. Сегментное распределение. Сегмент, в отличие от страницы, имеет переменный размер. Для сегмента обычно определяются владелец и права доступа к нему. Виртуальный адрес состоит из идентификатора (описателя) сегмента и смещения в нем. При перемещениях в памяти сегмент рассматривается как единый неделимый блок, что может снижать эффективность механизма и приводить к фрагментации; преобразование адресов также обчно медленнее страничного.
3. Странично-сегментное. Комбинация предыдущих. На верхнем уровне выделения памяти используются сегменты, однако каждый из них представляется как набор страниц.
Виртуальное адресное пространство процесса.
В Win32 API используется плоская 32-разрядная модель памяти. Каждому процессу выделяется собственное “личное” (private) изолированное адресное пространство, размер которого составляет 4 Гбайт. Это пространство разбивается на регионы, немного отличные для Windows 95 и Windows NT. Общим для обеих систем является то, что нижние 2 Гбайт этого пространства отведены процессу для свободного использования, а верхние 2 Гбайт зарезервированы для использования операционной системой.
Регионы в адресном пространстве процесса Windows 95
Регионы в адресном пространстве процесса Windows NT
Windows NT лучше защищена от процессов пользователя, чем Windows 95. Это обуславливает большую устойчивость ОС к ошибкам в прикладной программе.
Пример. Программа пытается обнулить страницу за страницей в системной области (старший гигабайт адресного пространства). Отметим, что операция может завершиться неудачей по двум причинам: отсутствие реальной страницы по указанному адресу либо нарушение прав доступа к существующей странице.
voidmain()
{
DWORDSysAreaAddress = 0xC0000000; // начало старшего гигабайта
while (1) {
ZeroMemory ( (LPVOID)SystemAreaAddress, 0x1000); //запись
SysAreaAddress += 0x1000; // переход к следующей странице (4K)
}
}
Под Win 9x, где защита системной области памяти не предусмотрена, выполнение программы приводит к краху системы, так как жизненно важное содержимое будет уничтожено. Windows NT такую защиту имеет, поэтому генерирует исключение и снимает программу как неправильную или вредоносную. (В качестве самостоятельного упражнения предлагается модифицировать программу таким образом, чтобы вместо аварийного завершения выводилось сообщение о возникшем исключении.)
Примечание. Помимо прочего, этот пример наглядно демонстрирует особенность "плоского" виртуального адресного пространства: произвольное 32-разрядное число может использоваться в качестве áдреса.
Управление виртуальной памятью осуществляет Virtual Memory Manager (VMM), являющийся неотъемлемой частью ядра операционной системы.
Организация памяти в Win32 страничная, размер страниц для платформ Intel и MIPS составляет 4 Kбайт, для DEC Alpha – 8 Kбайт. Win32 использует двухступенчатую схему страничного преобразования, поддерживаемую процессорами i386, 486 и Pentium, дополнительные схемы, поддерживаемые Pentium Pro, не используются.
Организацией свопинга занимается VMM. При генерации системы на диске образуется специальный файл свопинга, куда записываются те страницы, которым не находится места в физической памяти. Процессы могут захватывать память в своем 32-битном адресном пространстве и, затем, использовать ее. При обращении потока к ячейке памяти могут возникнуть три различные ситуации:
– страница существует и находится в памяти;
– страница существует и выгружена на диск;
– страница не существует.
Выделение памяти процессу означает выделение ее в файле подкачки.
Запуск на исполнение EXE-модуля происходит следующим образом. EXE-файл проецируется на память. При этом он не переписывается в файл подкачки. Просто элементы каталога и таблиц страниц настраиваются так, чтобы они указывали на EXE-файл, лежащий на диске. Затем передается управление на точку входа программы. При этом возникает исключение, обрабатывая которое стандартным образом, VMM загружает в память требуемую страницу и программа начинает исполняться. Такой механизм существенно ускоряет процедуру запуска программ, так как загрузка страниц EXE-модуля происходит по мере необходимости. Образно говоря, программа сначала начинает исполняться, а потом загружается в память. (Однако если исполняемый файл находится на съемном носителе, то перед началом исполнения он все равно переписывается в файл подкачки целиком.)
Для управления памятью прикладным программам предоставляются различные интерфейсы (API). Функции API могут быть разбиты на следующие основные группы.
1) Virtual Memory API – набор функций, позволяющих приложению работать с виртуальным адресным пространством: назначать физические страницы блоку адресов и освобождать их, устанавливать атрибуты защиты.
2) Memory Mapped File API – набор функций, позволяющий работать с файлами, отображаемыми в память. Новый механизм, предоставляемый Win32 API для работы с файлами и взаимодействия процессов. Подробно рассматривается в подразд. 4.5.
3) Heap Memory API – набор функций, позволяющих работать с динамически распределяемыми областями памяти (кучами). Подробно рассматривается в подразд. 4.6.
4) Local, Global Memory API – набор функций работы с памятью, совместимых с 16-битной Windows. Следует избегать их использования.
5) CRT Memory API – функции стандартной библиотеки периода исполнения (runtime).