- •5. Хранение файлов и каталогов.
- •7. Защита целостности данных.
- •8. Дополнительные возможности ntfs.
- •7. Сравнение структуры логического диска fat (fat32) и тома ntfs.
- •10. Архитектура памяти ms Windows 2000. Менеджер вп. Виртуальное ап. Средства защиты памяти. Страничное преобразование. Реализация свопинга в ms Windows 2000-2003.
- •11. Архитектура памяти ms Windows 2000-2003. Организация «статической» виртуальной памяти. Блоки адресов. Состояния блоков адресов. Функции Win32 api.
- •12. Архитектура памяти в ms Windows 200-2003. Организация «динамической» виртуальной памяти. Назначение и преимущество по сравнению с кучами ansi c. Функции Win32 api.
- •13. Архитектура памяти в ms Windows 2000-2003. Проецируемые файлы, назначение и использование. Функции Win32 api.
- •14. Архитектура памяти в ms Windows 2000-2003. Использование локальной памяти потока. Функции Win32 api.
- •15. Архитектура памяти в ms Windows 2000-2003. Адресация расширенного адресного пространства. 64-разрядные операционные системы ms Windows.
- •16. Объекты управления центральным процессором и объединения ресурсов в ms Windows 2000-2003. Атрибуты процессов и потоков. Классы приоритетов.
- •16.1, 16.2 Управление центральным процессором и объединение ресурсов.
- •16.6 Классы приоритетов.
- •17. Общие принципы диспетчеризация (планирование загрузки) в ms Windows 2000-2003. Классы приоритетов. Относительные приоритеты. Динамическое изменение приоритетов.
- •17.1 Общие принципы диспетчеризация (планирование загрузки) в ms Windows 2000-2003.
- •17.4 Динамическое изменение приоритетов.
- •18. Граф состояний потоков в ms Windows 2000-2003. Поток простоя. Принципы адаптивного планирования.
- •18.1 Граф состояний потоков в ms Windows 2000.
- •18.2 Поток простоя.
- •18.3 Принципы адаптивного планирования.
- •19. Граф состояний потоков в ms Windows 2000-2003. Особенности планирования в многопроцессорных системах. Особенности планирования в ос ms Windows Vista и Server 2008.
- •19.2 Особенности планирования в многопроцессорных системах.
- •19.3 Особенности планирования в ос ms Windows Vista и Server 2008.
- •20. Планирование загрузки процессорного времени в ms windows 2000-2003. Функции win 32 api создания и завершение процессов и потоков, управление потоками
- •21. Атомарные операции и lockless программирование. Реализация многопоточности с
- •21.1 Атомарные операции и lockless программирование.
- •21.2 Реализация многопоточности с использованием технологии OpenMp
- •21.3 Реализация блокировок и синхронизация потоков в OpenMp
- •22. Критические секции и состязания. Семафоры, Мьютексы. Задача о читателях и писателях. Задача о философах. Взаимная блокировка (тупики).
- •23. Синхронизация потоков с использованием объектов ядра ms Windows 2000-2003. Основные принципы синхронизации. События. Семафоры. Функции win 32 api.
- •24. Синхронизация потоков с использованием объектов ядра ms Windows 2000-2003. Основные принципы синхронизации. Таймеры ожидания. Мьютексы. Функции win 32 api.
- •25. Межпроцессорное взаимодействие. Передача информации в ms Windows 2000-2003. Анонимные каналы. Почтовые ящики. Функции win 32 api.
- •26. Межпроцессорное взаимодействие. Передача информации в ms Windows 2000-2003. Именованные каналы. Почтовые ящики. Функции win 32 api.
25. Межпроцессорное взаимодействие. Передача информации в ms Windows 2000-2003. Анонимные каналы. Почтовые ящики. Функции win 32 api.
Анонимные каналы
Анонимные каналы не имеют имен.
Не пригодны для обмена через сеть.
Главная цель – служить каналом между родительским и дочерним процессом или между дочерними процессами.
Односторонний обмен.
Не возможен асинхронный обмен.
Канал представляет собой псевдофайл с органзацией типа буфера FIFO (first input and first output - первый вошел, первый вышел). Образно говоря, канал представляет собой трубу (pipe) с двумя открытыми концами, в который один процесс пишет, а другой читает.
Использование анонимных каналов
Главная цель – служить каналом между родительским и дочерним процессом или между дочерними процессами. Родительский пpоцесс может быть консольным или GUI-пpиложение, но дочернее приложение должно быть консольным. Как вы знаете, консольное приложение использует стандартные дескрипторы для ввода и вывода. Если мы хотите пеpенапpавить ввод/вывод консольного приложения, мы можем заменить один дескриптор другим дескриптором одного конца канала. Консольное приложение не будет знать, что оно использует один конец канала. Оно будет считать, что это стандартный дескриптор. Это вид полимоpфизма на ООП-жаpгоне. Это мощный подход, так как нам не нужно модифицировать родительский процесс ни каким образом.
Создание анонимных каналов
BOOL CreatePipe(
LPHANDLE hReadPipe,
LPHANDLE hWritePipe, LPSECURITY_ATTRIBUTES lpPipeAttributes,
DWORD nSize
);
ReadFile – чтение из канала
WriteFile – запись в канал
pReadHandle - это указатель на переменную типа dword, которая получит дескриптов конца чтения канала.
pWriteHandle - это указатель на переменную типа dword, которая получить дескриптов конца записи канала.
pPipeAttributes указывает на стpуктуpу SECURITY_ATTRIBUTES, котоpая опpеделяет, наследуется ли каждый из концов дочерним процессом.
nBufferSize - это предполагаемый pазмеp буфера, который канал заpезеpвиpует для использования. Это всего лишь предполагаемый pазмеp. Вы можете пеpедать NULL, чтобы указать функции использовать pазмеp по умолчанию.
Не забудьте установить паpаметp bInheritable стpуктуpы SECURITY_ATTRIBUTES в TRUE, чтобы дескриптры могли наследоваться.
Пример использования анонимного канала
Создаем анонимный канал с помощью CreatePipe. Теперь мы должны подготовить параметры, которые передадим CreateProcess (мы используем эту функцию для загрузки консольного приложения). Вызоваем CreateProcess, чтобы загрузить дочернее приложение. После того, как вызов прошел успешно, дочерний процесс все еще находится в спящем состоянии. Он загружается в память, но не запускается немедленно. Закройте дескриптор записи канала. Это необходимо, так как родительскому процессу нет нужды использовать этот дескриптор, а канал не будет работать, если открыть более чем один дескриптор записи. Теперь вы можете читать данные с помощью ReadFile. Вы должны последовательно вызывать ReadFile, пока она не возвратит ноль, что будет означать, что больше данных нет. Закроем дескриптор чтения канала.
