Читайте также:
|
|
С каждым процессом связано окно на экране. При вводе данных с клавиатуры вначале активизируется окно нужного процесса (устанавливается фокус ввода). С этим окном связан идентификатор. При наборе данных с клавиатуры сообщения вначале поступают в системный ПЯ сообщений. Каждому сообщению приписывается идентификатор связанного с ним окна. Прием сообщений с клавиатуры и присвоение идентификатора осуществляются клавиатурным драйвером. Этот драйвер получает управление асинхронно по прерыванию при нажатии очередной клавиши.
Сообщение из системного ПЯ сообщений сортируется диспетчером сообщений по ПЯ приема сообщений процессов. Диспетчер сообщений выполняется как самостоятельный процесс в рамках ОС, а не по прерыванию от устройств. Процесс пользователя, когда ему понадобится, прочтет сообщение из своего ПЯ и удалит это сообщение.
Другим примером ПЯ является буфер обмена (clipboard). Отличие его в том, что его содержимое при чтении не меняется, а заменяется при записи в него.
Каналы
Канал (рiре) позволяет передавать данные от одного процесса другому так, что передающий как бы выводит данные в файл, а принимающий читает из файла. Каналы могут быть именованными или анонимными. Именованные каналы организуют взаимодействие по типу очередей между самостоятельными процессами. Неименованные каналы обычно применяются для взаимодействия задачи со своими подзадачами.
Каналы в отличие от других форм межзадачного взаимодействия используют для передачи данных и синхронизации функции, первоначально созданные для доступа к файлам, но не специально для межзадачных взаимодействий.
При создании неименованного канала создается сразу два ключа канала (handel): один для записи в канал, другой для чтения из него. Эти ключи могут использоваться в любой задаче процесса, создавшего канал, они также наследуются при запуске дочерних процессов. Таким образом, простые каналы предназначены для взаимодействия и синхронизации задач в рамках одного процесса и процессов, имеющих общего потомка. Примером неименованных каналов служит pipe в UNIX (есть и именованные каналы в UNIX)
Именованные каналы в соответствии со своим названием имеют имя. За счет этого они могут использоваться для взаимодействия независимых процессов, а также для взаимодействия через локальную сеть процессов, существующих в разных компьютерах.
Именованные каналы в отличие от простых двусторонние. Процессы, связанные именованным каналом, могут обмениваться данными. Именованные каналы поддерживают взаимодействие основного обработчика информации (сервера) с несколькими сервисными процессами. Процесс, создавший именованный канал, становится его владельцем, и все данные передаются между владельцем и другими процессами (подключенными процессами — client process). Передача данных между процессами, ни один из которых не является владельцем канала, невозможна.
Именованный канал находится в одном из состояний: разорванном, ждущем, подключенном, закрытом.
После того как канал создан, он находится в разорванном состоянии. Хотя канал существует, попытка подключиться к нему закончится ошибкой. Затем определенной функцией переводят канал в ждущее состояние, ожидая открытия канала с другой стороны. После того как канал открыт с обоих концов, он переходит в подключенное состояние. В это время по каналу могут передаваться данные. Если клиент закрывает канал, то канал переходит в закрытое состояние, после чего его можно опять перевести в разорванное состояние.
Кроме того, подключенный процесс может сразу открыть, читать, записать информацию и закрыть канал.
При создании канала можно указать, что к нему можно подключить не более заданного количества подключенных процессов, в том числе не более одного процесса. Для ожидания возможности подключения используется специальная функция.
Синхронизация при использовании каналов достигается как при чтении, так и при записи в канал. При чтении из канала, если в нем нет данных, функция чтения ожидает появления данных, т.е. задача, в которой вызвана функция чтения, блокируется до занесения данных в канал. Если при выполнении записи в канал функцией "записать" обнаруживается, что буфер для накопления данных канала заполнен, то возврат из функции записи произойдет только после того, как часть данных будет изъята из канала, так что функция "записать" сможет занести в него свои данные.
Механизм именованных каналов реализован в WINDOWS 95 под названием DDE и OLE (Object Linking and Embendding - связывание и вставка объектов). Наиболее изящно обмен через неименованные и именованные каналы представлен в OS/2 и UNIX.
Дата добавления: 2015-10-02; просмотров: 41 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Очереди | | | Тупиковые ситуации |