
- •Системное по. Цели, задачи, классификация
- •Операционная система. Основные функции ос. Структура операционной системы.
- •Общая характеристика операционных систем 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: назначение, организация, доступ
39. Подсистема памяти win32. Регионы(области) памяти. Группы функций api подсистемы памяти. Адресное пространство процесса.
В Win32 API используется плоская 32-разрядная модель памяти. Каждому процессу выделяется собственное “личное” (private) изолированное адресное пространство, размер которого составляет 4 Гбайт. Это пространство разбивается на регионы, немного отличные для Windows 95 и Windows NT. Общим для обеих систем является то, что нижние 2 Гбайт этого пространства отведены процессу для свободного использования, а верхние 2 Гбайт зарезервированы для использования операционной системой.
Регионы в адресном пространстве процесса Windows 95
Регионы в адресном пространстве процесса Windows NT
Windows NT лучше защищена от процессов пользователя, чем Windows 95. Это обуславливает большую устойчивость ОС к ошибкам в прикладной программе.
Пример. Программа пытается обнулить страницу за страницей в системной области (старший гигабайт адресного пространства). Операция может завершиться неудачей по двум причинам. Во-первых, реальной страницы по указанному адресу может не быть, а, во-вторых, если страница существует, то может быть запрещен в нее доступ. Программа пытается обнулить страницу (try) и в случае отказа (catch) выводит сообщение и переходит к следующей странице.
/* Win95Killer.cpp */
#include <windows.h>
#include <iostream.h>
void main()
{
DWORD SystemAreaAddress = 0xC0000000; //старшийгигабайт
while(1)
{
try
{ // Попытказаписи
ZeroMemory((LPVOID)SystemAreaAddress,0x1000);
}
catch(...)
{ // ошибказаписи
cout << "Exception: " << hex << SystemAreaAddress << endl;
}
SystemAreaAddress += 0x1000; //Переход к следующей странице (4K)
}
}
Поскольку в Windows 95 отсутствует защита страниц системной области, то программа уничтожает эту область, что приводит к краху системы. Windows NT защищает системную область и, поэтому, “выдерживает натиск” программы.
Управление виртуальной памятью осуществляет т.н. 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-модуля происходит по мере необходимости. Образно говоря, программа сначала начинает исполняться, а потом загружается в память. Если программа записана на дискете, то она перед началом исполнения переписывается в файл подкачки.
Диспетчер управления памятью (VMM) является составной частью ядра операционной системы. Приложения не могут получить к нему прямой доступ. Для управления памятью прикладным программам предоставляются различные интерфейсы (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).
Функции работы с виртуальной памятью.
Блок адресов в адресном пространстве процесса может находиться в одном из трех состояний:
– выделен (committed) – блоку адресов назначена физическая память либо часть файла подкачки;
– зарезервирован (reserved) – блок адресов помечен как занятый, но физическая память для него не распределена;
– свободен (free) – блок адресов не выделен и не зарезервирован.
Резервирование и выделение памяти производится блоками. Начальный адрес блока должен быть выровнен на границу 64 Кбайт (округляется вниз), а размер кратен размеру страницы (округляется вверх). При выделении память обнуляется.
Функция VirtualAlloc выделяет (резервирует) регион памяти и возвращает его адрес или NULL в случае неудачи:
LPVOID VirtualAlloc(
LPVOID lpAddress, //адресрегиона
DWORD dwSize, //размеррегиона
DWORD flAllocationType, //типвыделения
DWORD flProtect //права (защита) доступа
);
Параметры:
lpAddress – адрес, по которому надо зарезервировать или выделить память. Этот параметр может быть NULL, тогда система самостоятельно выбирает место в адресном пространстве процесса.
dwSize – размер выделяемого региона.
flAllocationType – тип распределения памяти: MEM_RESERVE – резервирование блока адресов без выделения памяти; MEM_COMMIT – отображение ранее зарезервированного блока адресов на физическую память или файл подкачки, при этом происходит реальное выделение памяти; может объединяться с MEM_RESERVE для одновременного резервирования и выделения; MEM_TOP_DOWN – выделять память по наибольшему возможному адресу; имеет смысл только при lpAddress == NULL, в Windows 95 игнорируется.
flProtect – тип защиты доступа выделяемого региона: PAGE_READONLY – допускается только чтение; PAGE_READWRITE – допускается чтение и запись; PAGE_EXECUTE – допускается только исполнение; PAGE_EXECUTE_READ – допускается исполнение и чтение; PAGE_EXECUTE_READWRITE – допускается исполнение чтение и запись; PAGE_GUARD – дополнительный флаг защиты, который комбинируется с другими флагами; при первом обращении к странице этот флаг сбрасывается и возникает исключение STATUS_GUARD_PAGE, этот флаг используется для контроля размеров стека с возможностью его динамического расширения; PAGE_NOCACHE – запрет кэширование страниц, может быть полезен при разработке драйверов устройств (например, данные в видеобуфер должны переписываться сразу, без кэширования).
Функция VirtualFree освобождает ранее выделенный регион, в случае успеха возвращает TRUE:
BOOL VirtualFree(
LPVOID lpAddress, //адресрегиона
DWORD dwSize, //размеррегиона
DWORD dwFreeType //"типосвобождения"
);
Параметры:
lpAddress – адрес региона, который надо освободить.
dwSize – размер освобождаемого региона;
dwFreeType – тип освобождения: MEM_DECOMMIT – освободить выделенную память; MEM_RELEASE – освободить зарезервированный регион, при этом параметр dwSize должен быть равен нулю.
Выделенные страницы можно заблокировать в памяти, т.е. запретить их вытеснение в файл подкачки. Для этих целей служит пара функций VirtualLock и VirtualUnlock. Процессу не разрешается блокировать более 30 страниц.
Для изменения атрибутов защиты регионов используются функции VirtualProtect и VirtualProtectEx. Причем, первая позволяет изменять атрибуты защиты в адресном пространстве текущего процесса, а вторая – произвольного.
Функции VirtualQueryи VirtualQueryEx позволяют определить статус указанного региона адресов.