- •Управление процессами и потоками в мультипрограммных ос. Общие сведения о процессах и потоках в ос Windows. Понятие объекта ядра. Типы объектов ядра.
- •Описатель, командная строка, и переменные окружения процесса.
- •Создание процессов.
- •Завершение процесса.
- •Общие сведения о потоках. Создание потоков.
- •Выполнение потоков.
- •Завершение потоков.
- •Планирование потоков. Приостановка и возобновление процессов и потоков.
- •Приоритеты потоков. Классы приоритетов процессов и относительные приоритеты потоков.
- •Синхронизация процессов и потоков в мультипрограммных ос. Независимые и взаимодействующие процессы. Понятие критических ресурсов и критических секций.
- •Синхронизация процессов и потоков в ос Windows. Объекты синхронизации и функции ожидания.
- •Синхронизация с помощью критических секций.
- •Мьютексы.
- •События.
- •Семафоры.
- •Передача и обмен данными между процессами. Способы передачи данных и типы связей между процессами.
- •Средства передачи и обмена данными между процессами в ос Windows.
- •Обмен данными с помощью буфера обмена данными Clipboard.
- •Обмен данными по технологии dde.
- •Обмен данными по технологии ole. Понятие документно-ориентированной среды.
- •Принципы технологии ole.
- •Особенности ole 2.0
- •Обмен данными через разделяемые файлы.
- •Обмен данными через файлы, проецируемые в память. Создание файлов, проецируемых в память.
- •Обмен данными через проекцию файлов в память.
- •Обмен данными через страничный файл.
- •Обмен данными через программные каналы.
- •Средства организации анонимных и именованных каналов в Windows.
- •Концепция почтовых ящиков.
- •Создание почтовых ящиков.
- •Соединение клиентов с почтовым ящиком.
- •Обмен данными через почтовый ящик.
- •Закрытие почтового ящика.
- •Получение информации о почтовом ящике.
- •Обмен данными с помощью очередей сообщений.
- •Подсистема управления памятью. Функции подсистемы управления памятью.
- •Физическая и логическая память. Виртуальное (логическое) и физическое адресное пространство.
- •Способ построения вап процессов.
- •Способы распределения памяти на уровне управления процессами. Односвязное непрерывное распределение памяти.
- •Распределение памяти фиксированными разделами.
- •Распределение памяти динамическими и перемещаемыми разделами.
- •Виртуализация оперативной памяти. Свопинг и виртуальная память.
- •Страничное распределение памяти.
- •Преобразование адресов страниц прямым отображением.
- •Преобразование адресов страниц ассоциативным отображением.
- •Преобразование адресов страниц комбинированным ассоциативно-прямым отображением.
- •Совместное использование программ и данных в системах со страничной организацией памяти. Выбор размера страниц.
- •Сегментное распределение памяти.
- •Управление доступом в системах с сегментной организацией памяти.
- •Сегментно-страничное распределение памяти.
- •Реализация режима виртуальной памяти. Стратегии замещения страниц.
- •Стратегия замещения случайной страницы.
- •Стратегия замещения по принципу fifo.
- •Замещение страницы, которая использовалась наименее часто (lfu).
- •Замещение страницы, которая не использовалась в последнее время (nur).
- •Концепция локального и рабочего множества программ в системах с виртуальной памятью.
- •Уровни привилегий и защита по привилегиям.
- •Кеширование данных в памяти эвм. Иерархия устройств памяти. Понятие и принцип действия кэш-памяти.
- •Способы отображения основной памяти на кэш.
- •Двухуровневое кэширование.
- •Кеширование в процессорах моделей Pentium.
- •Структура линейного виртуального адресного пространства процесса в ос Windows.
- •Раздел 4 используется для хранения совместно используемых всеми процессами данных. Сюда же загружаются все системные .Dll модули, поэтому же доступны любому пользовательскому процессу.
- •Управление устройствами. Основные понятия и концепции организации.
Средства передачи и обмена данными между процессами в ос Windows.
В ОС Windows и других современных ОС используется несколько видов средств передачи и обмена данными между процессами, позволяющими с разной степенью эффективности решать задачи передачи и обмена. Основными из них являются:
Обмен данными с помощью универсального буфера обмена Clipboard;
Средства динамического обмена данными – Dinamic Data Exchange (DDE);
Средства связывания Object Linking and Embedding (OLE);
Средства обмена через разделяемые файлы;
Средства обмена через файлы, отображаемые на память;
Средства обмена через страничный файл;
Средства обмена через программные каналы;
Обмен с помощью сообщений.
Обмен данными с помощью буфера обмена данными Clipboard.
Этот способ обмена является наиболее простым, и позволяет выполнить как статический обмен информацией, так и динамический обмен (в ходе выполнения процессов). Буфер обмена – это средство обмена, представляющее собой совокупность разделяемой области динамической памяти и набор системных функций, предназначенных для работы с этой памятью.
Традиционным способом использования буфера обмена является обмен данными при непосредственном участии пользователя. При этом, обычно, выполняются две основных операции:
Запись данных в буфер обмена в различных форматах;
Чтение из буфера обмена.
Рисунок!!
Запись осуществляется сервером, а чтение – клиентом.
Важнейшим положением этой концепции является понятие формата используемых данных. Буфер обмена, как средства обмена, получил широкое распространение, прежде всего, из-за стандартизации ряда форматов данных, используемых при обмене между приложениями. Стандартизация позволила устранить проблемы преобразования данных при передачи.
Преобразование выполняется средствами ОС на основе ряда стандартных форматов. При этом, стандартизация форматов не ограничивает возможностей их расширения. В приложении можно создать новый формат, отличный от стандартного, и зарегистрировать его в системе с помощью системной функции RegisterClipboardFormat (). Параметром этой функции является строка с именем нового формата. Данная функция возвращает уникальный идентификатор формата. Если другие приложения вызовут эту функцию, указав в ней то же самое имя формата, то функция возвратит уже созданный идентификатор формата. В результате, все приложения будут пользоваться для обмена данными, представленными в этом формате, одним и тем же идентификатором.
Для работы с буфером обмена разработано порядка 25 стандартных форматов. Все они обозначаются константами, имеющими принятые в системе символические имена:
cf_Text – строковый формат (ASCII-z строка);
cf_BitMap – один из графических форматов;
…
Порядок обмена данными через буфер обмена на программном уровне, а не на уровне пользователя, включает выполнение двух основных операций:
Передача данных в буфер обмена;
Прием данных из буфера обмена.
Передача в буфер осуществляется из процесса-сервера, а прием данных из буфера осуществляется в процессе-клиенте.
Передача данных включает в себя следующие действия:
Подготовка данных для передачи в буфер обмена;
Открытие буфера обмена;
Очистка буфера обмена;
Посылка данных в БО;
Закрытие буфера обмена.
Подготовка данных для передачи в буфер обмена включает в себя следующие шаги:
выделение блока динамической памяти с помощью Ghandle GlobalAlloc (size_t). Возвращает дескриптор блока памяти;
фиксация блока от перемещений на время передачи в него данных и получение указателя на этот блок. GPtr GlobalLock( GHandle );
копирование передаваемой информации в выделенный блок памяти. Если передается строковая информация, то это действие можно выполнить с помощью StrCpy (GPtr, char*);
разрешение перемещения блока памяти. GlobalUnlock (GHandle).
Открытие буфера осуществляется с помощью функции OpenClipboard (GHandle). Данная функция возвращает истину, если буфер обмена не используется другим приложением, и следовательно, с ним возможны последовательные действия.
Очистка буфера обмена. EmptyClipboard(GHandle).
Посылка данных в буфер обмена. SetClipboardData(cf_Text, GHandle).
Закрытие буфера обмена. CloseClipboard (GHandle). После этой функции буфер становится доступным для других приложений.
Чтение из буфера обмена включает в себя выполнение следующих действий:
Открытие буфера обмена;
OpenClipboard()
Проверка наличия требуемого формата в буфере обмена;
IsClibpoardFormatAvailable()
Параметром является тип формата. (Например, cf_Text)
Возвращает true, если данные запрашиваемого формата присутствуют.
Передача данных из буфера обмена;
В случае успешного выполнения двух предыдущих операций.
Действия:
получение дескриптора блока памяти, содержащего данные требуемого формата. GetClipboardData();
Возвращает GHandle.
получение адреса данного блока памяти и фиксирование его от возможных перемещений на время считывания данных;
GPtr GlobalLock (GHandle);
выделение локальной памяти в области памяти процесса для записи в неё требуемых данных;
GetMem (void *P, …);
копирование данных из глобальной памяти в локальную память; В том случае, если передаются данные текстового типа, для этой операции может использоваться StrCpy (p, GPtr);
разрешение перемещения глобального блока памяти в локальную память.
GlobalUnlock (GHandle);
Закрытие буфера обмена.
CloseCliboard ();
Как следует из данного примера, программная реализация обмена данными через буфер обмена требует выполнения достаточно большого количества действий. При этом, реализация обмена для других, более сложных, чем текстовый, форматов, становится еще более сложной. Поэтому в современных системах программирования существуют встроенные средства, позволяющие упростить разработку процедур обмена через буфер обмена.
Например, в Delphi существует модуль Clipbrd, включение которого в проект позволяет использовать возможности класса TClipboard. При этом, компоненты TEdit, TMemo, TImage получают возможность использования своих методов работы с буфером обмена.
