- •Операционные системы и их интерфейсы.
- •Графические ос
- •Речевые ос
- •Динамически подключаемые библиотеки.
- •Потоки и процессы.
- •Локальная память потока
- •Потоки в Windows.
- •Сервисы в Windows
- •7. Процессы в виндовс
- •8.Работа с сервисами виндовс
- •Синхронизация.
- •Система информационной безопасности
- •Синхронизация потоков в Windows
- •Управление безопасностью в Windows
- •3. Управляемый доступ к сети
- •13. Взаимоисключающий доступ к переменным
- •Управление пользователями
- •Управление группами
- •Структура консольного приложения
- •Работа с идентификаторами безопасности
- •19, Работа с консолью
- •20. Работа с дескрипторами безопасности
- •21. Работа с окном консоли
- •Часть III. Программирование консольных приложений
- •22. Работа со списками управления доступом на высоком уровне
- •23. Работа с буфером экрана
- •24. Работа с привилегиями
- •Ввод-вывод на консоль
- •Работа с маркерами доступа
- •Первичный маркер доступа
- •Имперсонализирующие маркер доступа
- •Передача данных
- •Работа со списками управления доступом на низком уровне
- •Работа с анонимными каналами в Windows
- •Управление безопасностью объектов на низком уровне
- •Глава 45. Управление безопасностью объектов на низком уровне 993
- •31) Работа с именованными каналами в Windows
- •32) Win32 и Win64. Программирование в среде Win64.
- •33) Работа с почтовыми ящиками в Windows
- •34) Использование файловой системы и функций символьного ввода/вывода Windows
- •35) Фреймовая обработка исключений
- •36) Усовершенствованные средства для работы с файлами и каталогами и знакомство с реестром
- •37. Финальная обработка исключений
- •38. Обработка исключений
- •39. Виртуальная память
- •40 . Управление памятью, отображение файлов и библиотеки dll
- •41. Работа с виртуальной памятью в windows
- •42.Управление процессами
- •43. Работа с кучей в Windows
- •44. Потоки и планирование выполнения
- •45. Общие концепции управления файлами
- •46. Синхронизация потоков
- •47. Работа с файлами в Windows
- •48. Влияние синхронизации на производительность и рекомендации по ее повышению
- •49) Работа с каталогами (папками) в Windows
- •50) Усовершенствованные методы синхронизации потоков
- •51) Асинхронный вызов процедур
- •52) Взаимодействие между процессами
- •53) Асинхронный доступ к данным.
- •54) Сетевое программирование с помощью сокетов Windows
- •55)Порты завершения
- •57)Работа с ожидающим таймером
- •58)Асинхронный ввод/вывод и порты завершения
- •Порты завершения ввода-вывода
- •59)Отображение файлов в память.
- •Достоинства метода. Альтернативой отображению может служить прямое чтение файла или запись в файл. Такой способ работы менее удобен по следующим причинам:
- •60)Безопасность объектов Windows
- •Операционные системы и их интерфейсы.
58)Асинхронный ввод/вывод и порты завершения
Ввод и вывод всегда выполнялись медленнее других операций. Эта низкая скорость вызвана следующими факторами: - задержки вследствие поиска дорожки и сектора на устройствах произвольного доступа (таких, как жесткие диски и CD-ROM);
- задержки, вызванные относительно малой скоростью передачи данных между физическим устройством и системной памятью;
- задержки при передаче данных через сеть.
Операции ввода-вывода во многих случаях являются синхронными с потоками. Иными словами, весь поток должен был ждать, пока ввод-вывод не завершится.
Краткий обзор методов асинхронного ввода-вывода в Win32 В Win32 существует три метода выполнения асинхронного ввода-вывода: - Многопоточный ввод-вывод. Каждый поток в процессе или совокупности процессов выполняет обычный синхронный ввод-вывод, в то время как другие потоки могут продолжать работу.
- Собственно асинхронный ввод-вывод (или ввод-вывод с перекрытием). После начала чтения, записи или другой операции ввода-вывода поток продолжает выполнение. Если потоку для продолжения нужны результаты ввода-вывода, ожидает сигнала дескриптора либо указанного события.
Процедуры завершения (или расширенный ввод-вывод). Когда операция ввода-вывода завершается, система вызывает в потоке указанную процедуру завершении.
Потоковый сервер, осуществляет асинхронный ввод-вывод через именованные каналы, хотя в пределах каждого отдельного потока ввод-вывод является синхронным.
Этих проблем не возникает при использовании потоков. С другой стороны, концепции асинхронного ввода-вывода можно найти как в старых, так и в очень новых технологиях, так что изучение этих методик может заслуживать внимания. действие асинхронного вызова процедуры очень похоже на расширенный ввод-вывод, и многим нравится использовать этот механизм.
Порты завершения ввода-вывода
Порты завершения ввода-вывода, поддерживаемые только в Windows 2000/NT, объединяют возможности ввода-вывода с перекрытием и возможности независимых потоков и наиболее полезны в серверных программах. Этот механизм работает очень хорошо, когда число клиентов невелико. порт завершения ввода-вывода представляет собой набор дескрипторов с перекрытием, а потоки ожидают сигнала порта. Когда чтение или запись на одном из дескрипторов заканчиваются, один поток переходит в активное состояние и получает данные и результаты операции ввода-вывода. После этого он может обработать данные и снова ожидать сигнала порта.
Параметры
Порт завершения ввода-вывода - это совокупность дескрипторов файлов, открытых в режиме OVERLAPPED. Параметр FileHandle — это асинхронный дескриптор, который добавляется в порт. Если в этом параметре указать значение invalid_handle_value, функция создает новый порт завершения ввода-вывода и возвращает его как возвращаемое значение. Следующий параметр, ExistingCompletionPort, в этом случае должен иметь значение NULL.
ExistingCompletionPort - порт, созданный при первом вызове, и порт, в который добавляется дескриптор из первого параметра. Если добавление прошло успешно, функция также возвращает дескриптор порта, при неудаче возвращается NULL.
CompletionKey задает ключ, который будет входить в пакет завершения для FileHandle. Этот ключ обычно является индексом массива структур данных, содержащих тип операции, дескриптор и указатель на буфер данных. NumberOfConcurrentThreads указывает максимальное число потоков, которые могут работать одновременно. Все потоки вне этого предела, ожидающие сигнала порта, остаются заблокированными, даже если в них имеется дескриптор с доступными данными. Если этот параметр равен нулю, пределом будет число процессоров в системе. С портом завершения ввода-вывода можно связать неограниченное количество асинхронных дескрипторов. При первом вызове CreateIoCompletionPort создается порт и определяется максимальное число потоков. Для каждого дескриптора, который должен быть связан с портом, эту функцию надо вызывать снова. К сожалению, не существует способа удаления дескриптора из порта завершения, что ограничивает гибкость программы. Дескрипторы, связанные с портом, не должны использоваться в функциях ReadFileEx или WriteFileEx. В документации Microsoft не рекомендуется совместно использовать файлы или другие объекты с помощью других открытых дескрипторов.
