
- •Системное по. Цели, задачи, классификация
- •Операционная система. Основные функции ос. Структура операционной системы.
- •Общая характеристика операционных систем 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: назначение, организация, доступ
Файловый ввод-вывод
Дисковые файлы и другие устройства ввода-вывода в Win32 представлены объектами ядра "файл", для доступа к которым используются их описатели (тип данных HANDLE). Напомним, что этот тип совместим с типом "указатель" и фактически задает расположение соответствующего блока информации во внутренних структурах. В отличие от большинства объектов, признаком пустоты или недействительности описателя служит значение INVALID_HANDLE_VALUE, численно равное FFFFFFFFh или –1, а не традиционный NULL (значение 0), что соответствует стандартному устройству ввода. Как следствие, чтение из закрытого описателя в Windows 9x будет связано с клавиатурой (в Windows NT это приводит к немедленной ошибке ввода).
Для того, чтобы создать или открыть файл используется универсальная функция HANDLE CreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttrib, DWORD dwCreationDisposition, DWORD dwFlagsAndAttribs, HANDLE hTemplateFile).
В зависимости от сочетания параметров поведение функции и результаты ее вызова могут сильно различаться. Фактически посредством ее можно реализовать почти все манипуляции с файлом. Часть параметров достаточно проста и очевидна:
lpFileName – определяет имя файла.
dwDesiredAccess – тип доступа к файлу: GENERIC_READ, GENERIC_WRITE или их сочетание (объединение по ИЛИ).
dwShareMode – определяет режим совместного использования файла различными процессами. Если этот параметр равен нулю, то никакой другой поток не сможет открыть этот же файл. Флаги FILE_SHARE_READ и FILE_SHARE_WRITE или их объединение разрешают другим потокам осуществлять доступ к файлу для чтения или записи.
lpSecurityAttribs – указывает на структуру, описывающую защиту создаваемого объекта ядра, параметры по умолчанию задаются значением NULL.
hTemplateFile – если не NULL, то задает открытый файл, служащий источником (шаблоном) флагов и атрибутов, параметр dwFlagsAndAttributes (см. ниже) в этом случае игнорируется.
Гибкое управление функциональностью вызова достигается параметрами:
dwCreationDisposition – действия функции в зависимости от того, существует ли уже файл с указанным именем: CREATE_NEW (только создавать новый файл), СREATE_ALWAYS (то же, но при существовании такого файла удаляет его), OPEN_EXISTING (только открыть существующий), OPEN_ALWAYS (открыть, при необходимости создать), TRUNCATE_EXISTING (только открыть существующий и удалить прежнее содержимое).
dwFlagsAndAttribs – комбинация атрибутов файла и флагов режима работы с ним.
FILE_ATTRIBUTE_NORMAL – "обычный" файл без специальных атрибутов, не может комбинироваться с другими;
FILE_ATTRIBUTE_ARCHIVE, FILE_ATTRIBUTE_HIDDEN, FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_SYSTEM – стандартныеатрибутыфайлав FAT;
FILE_ATTRIBUTE_ENCRYPTED – для файла применяется прозрачное шифрование;
FILE_ATTRIBUTE_TEMPORARY – временный файл, хранится в памяти, но при закрытии не удаляется;
FILE_FLAG_NO_BUFFERING – запрет кэширования и опережающего чтения;
FILE_FLAG_RANDOM_ACCESS – оптимизация (кэширование) для произвольного доступа;
FILE_FLAG_SEQUENTIAL_SCAN – оптимизация (кэширование) для последовательного доступа;
FILE_FLAG_WRITE_TROUGH – запрет буферизации записи, немедленная запись;
FILE_FLAG_DELETE_ON_CLOSE – удалятьпослезакрытия;
FILE_FLAG_OVERLAPPED – для использования асинхронного ввода-вывода.
В качестве примера не вполне стандартного использования CreateFile приводится фрагмент, осуществляющий удаление файла:
hFile = CreateFile(
lpFileName, //name of file to delete
GENERIC_WRITE, //open for write
0, //no sharing
NULL, //no security attributes
OPEN_EXISTING, //open existing files only
FILE_FLAG_DELETE_ON_CLOSE, //flags and attributes
NULL //use no template file
);
if(hFile != INVALID_HANDLE_VALUE)
CloseHandle(hFile); //close and delete automatically
Win32 предоставляет типовой набор основных синхронных файловых функций. Наиболее значимыми из них являются: ReadFile() и WriteFile()
Формат функций идентичен:
BOOL ReadFile/WriteFile(
HANDLE hFile, //описательфайла
LPVOID lpBuffer, //указатель на буфер
DWORD nBytesToProcess, //требуемое количество обрабатываемых байт
LPDWORD lpProcessedBytes, //количество реально обработанных байт
LPOVERLAPPED lpOverlapped //управляющая структура асинхронного режима
);
Возвращаемое значение: TRUE при успехе, иначе FALSE, возвращает также количество реально обработанных байт.
Параметры:
hHFile – описатель (handle) объекта ядра “файл”, соответствующий открытому дисковому файлу, коммуникационному объекту или устройству.
lpBuffer – буфер для чтения/записи данных (достаточного размера)
nBytesToProcess, nProcessedBytes – требуемый и реально обработанный (прочитанный или записанный) объем данных.
lpOverlapped – указатель на структуру OVERLAPPED (см. ниже).
Структура OVERLAPPED служит в первую очередь для управления асинхронным вводом-выводом (см. ниже), но может также ограниченно использоваться в синхронном режиме. Содержит следующие поля:
Internal – резервировано операционной системой, хранит статус завершения
InternalHigh – резервировано ОС, хранит количество переданных байт
Offset – параметр, начальная позиция чтения/записи в файле
OffsetHigh – параметр, старшее слово смещения, при работе с трубопроводами и устройствами игнорируется
hEvent – параметр, описатель события по завершении операции.
При использовании асинхронного режима значение поля Internal можно считать валидным после того, как функция GetOverlappedResult перестанет возвращать значение ERROR_IO_PENDING.
Ненулевая позиция чтения/записи ("курсор" файла) может быть задана только для объектов, поддерживающих ее. В противном случае выполнение функции будет неуспешно.
Имеются также "расширенные" варианты этих функций:
ReadFileEx и WriteFileEx,
Формат функций:
BOOL ReadFileEx/WriteFileEx(
HANDLE hFile, //описательфайла
LPVOID lpBuffer, //указатель на буфер
DWORD nBytesToProcess, //требуемое количество обрабатываемых байт
LPOVERLAPPED lpOverlapped //управляющая структура
LPOVERLAPPED_COMPLETION_ROUTINElpRoutine //метод завершения
);
Возвращаемое значение и все параметры совпадающие параметры аналогичны предыдущим двум функциям, за исключением дополнительного параметра
LPOVERLAPPED_COMPLETION_ROUTINE lpRoutine – метод (функция), которому передается управление по завершении операции, используется в асинхронном режиме (см. ниже).
В зависимости от используемых параметров, указанные функции могут обслуживать файловый ввод-вывод в синхронном и асинхронном режимах.
Х.2.1 Организация синхронного ввода-вывода
Отличительной особенностью синхронного доступа является то, что после инициирования операции исполнение прикладной программы (точнее, инициировавшего эту операцию потока) приостанавливается до ее окончания, после чего программа получает результат операции. Данный режим наиболее естественен, поддерживается во всех системах и может считаться базовым.
Отметим, что альтернативой синхронному файловому вводу-выводу в Win32 является проецирование файлов, что в большинстве случаев более удобно и функционально.
Для использования функций файлового ввода-вывода в синхронном режиме требуется лишь открыть (создать) его функцией CreateFile() без установленного флага FILE_FLAG_OVERLAPPED в параметре dwFlagsAndAttributes. После этого функции ReadFile() и WriteFile() могут как опускать параметр lpOverlapped (значение NULL), так и использовать его, получая тем самым возможность явно задавать позицию чтения/записи при каждом вызове, прочая функциональность данной структуры не задействуется. Позиция "курсора" в файле имеет смысл только для объектов, которые ее реально поддерживают. Для объектов последовательного доступа, например, трубопроводов, попытка изменить позицию завершается как неуспешная.
Х.2.2 Организация асинхронного ввода-вывода
При асинхронной работе с файлами прикладная программа, инициировав операцию ввода вывода, не ожидает ее завершения, а продолжает исполняться. Система предоставляет естественные средства для синхронизации программы с инициированными ею операциями. Данный режим поддерживается в полной мере в Windows NT, Windows 95 ограничивает его применимость только коммуникационными ресурсами (транспортеры, почтовые ящики), портами и сокетами, но не дисковыми файлами.
Для организации асинхронного режима необходимо при вызове функции CreateFile() установить флаг FILE_FLAG_OVERLAPPED в параметре dwFlagsAndAttributes. Далее, используются те же функции ввода-вывода, но обязательно с заполненной управляющей структурой, передаваемой параметром lpOverlapped. Отметим, что здесь, отличие от синхронных операций, необходимо явно указать позицию курсора в файле, так как несколько операций чтения и записи могут производиться в одном и том же файле одновременно, и, следовательно, единой определенной текущей позиции не существует.
12.
13. = 21.