Операционные системы. Учебное пособие. Марапулец Ю.В. - 173 стр.

UptoLike

Составители: 

конце. Операции чтения и записи выполняются с помощью тех же команд, которые
применяются для работы с любыми другими файлами: ReadFile() и WriteFile(). Обычно
процесс, ожидающий сообщения, создает для их получения новый поток. Этот поток пе-
риодически вызывает функцию ReadFile() и блокируется, оставаясь в пассивном состоя-
нии до поступления нового сообщения.
Наконец, сервер принимает решение о том, что диалог закончен, и разрывает со-
единение. Для уничтожения канала сервер вызывает функцию CloseHandle(). Но канал,
на самом деле, не будет уничтожен до тех пор, пока не будут закрыты все дескрипторы,
указывающие на него как со стороны клиента, так и со стороны сервера. Кроме того,
сервер может подключить к старому каналу нового клиента.
Имеется несколько разновидностей каналов [12]:
входные, выходные и дуплексные (двунаправленные);
байтовые и каналы сообщений;
блокируемые и неблокируемые;
именованные и анонимные.
Большинство атрибутов канала определяется при его создании. Рассмотрим основ-
ные виды каналов белее подробно.
Входные, выходные и дуплексные каналы. Названия каналов, относящихся к пер-
вой группе, - входные, выходные и дуплексные - указывают на направление передачи
информации. Входные и выходные каналы являются однонаправленными: с одной их
стороны осуществляется запись информации, а с другой - чтение. Входной канал позво-
ляет клиенту передавать, а серверу принимать информацию; выходной, наоборот; серве-
ру - передавать, а клиенту - принимать. Дуплексный канал позволяет передавать и при-
нимать данные обеим сторонам.
Байтовые каналы и каналы сообщений. Характер записываемой информации оп-
ределяет, в каком режиме, байтового канала или канала сообщений, будет происхо-
дить чтение. Режим канала помогает системе принять решение о том, когда следует ос-
тановить операцию чтения. В режиме байтового канала чтение информации
прекращается при поступлении последнего байта из канала или при заполнении его бу-
фера чтения. В режиме сообщений чтение информации прекращается при достижении
конца сообщения.
Внутри канала, работающего в режиме сообщений, система размещает в начале
каждого записываемого фрагмента заголовок, хранящий сведения о длине этого фраг-
мента информации. Программы, которые находятся на концах канала, не видят этого за-
головка, однако команда ReadFile() прекращает чтение, достигая конца очередного
фрагмента данных.
Блокируемые и неблокируемые каналы. Каналы бывают блокируемыми или не-
блокируемыми. Данный атрибут влияет на результаты выполнения операций чтения,
записи и соединения. В случае ошибки выполнения любой из этих функций в неблоки-
руемом канале возвращается код завершения, представляющий собой код ошибки. В ка-
нале, который допускает блокировку, функции не возвращают результата до тех пор,
пока они не завершатся, или до тех пор, пока существует ошибка.
Именованные и анонимные каналы. Канал может быть именованным, если про-
грамма-создатель снабдила его строковым значением, однозначно идентифицирующим
его имя, или анонимным, если с ним не связано никакое идентифицирующее строковое
значение. Подобно синхронизирующим объектам (простым и исключающим семафо-
рам), имя канала помогает другим процессам правильно его распознавать. Windows 98
не поддерживает именованных каналов; в этой операционной системе все каналы явля-
ются анонимными.
Анонимные каналы занимают меньше системных ресурсов, однако по сравнению с
именованными они выполняют лишь ограниченный набор задач. В частности, они могут
175
конце. Операции чтения и записи выполняются с помощью тех же команд, которые
применяются для работы с любыми другими файлами: ReadFile() и WriteFile(). Обычно
процесс, ожидающий сообщения, создает для их получения новый поток. Этот поток пе-
риодически вызывает функцию ReadFile() и блокируется, оставаясь в пассивном состоя-
нии до поступления нового сообщения.
      Наконец, сервер принимает решение о том, что диалог закончен, и разрывает со-
единение. Для уничтожения канала сервер вызывает функцию CloseHandle(). Но канал,
на самом деле, не будет уничтожен до тех пор, пока не будут закрыты все дескрипторы,
указывающие на него как со стороны клиента, так и со стороны сервера. Кроме того,
сервер может подключить к старому каналу нового клиента.
      Имеется несколько разновидностей каналов [12]:
• входные, выходные и дуплексные (двунаправленные);
• байтовые и каналы сообщений;
• блокируемые и неблокируемые;
• именованные и анонимные.
      Большинство атрибутов канала определяется при его создании. Рассмотрим основ-
ные виды каналов белее подробно.
      Входные, выходные и дуплексные каналы. Названия каналов, относящихся к пер-
вой группе, - входные, выходные и дуплексные - указывают на направление передачи
информации. Входные и выходные каналы являются однонаправленными: с одной их
стороны осуществляется запись информации, а с другой - чтение. Входной канал позво-
ляет клиенту передавать, а серверу принимать информацию; выходной, наоборот; серве-
ру - передавать, а клиенту - принимать. Дуплексный канал позволяет передавать и при-
нимать данные обеим сторонам.
      Байтовые каналы и каналы сообщений. Характер записываемой информации оп-
ределяет, в каком режиме, байтового канала или канала сообщений, будет происхо-
дить чтение. Режим канала помогает системе принять решение о том, когда следует ос-
тановить операцию чтения. В режиме байтового канала чтение информации
прекращается при поступлении последнего байта из канала или при заполнении его бу-
фера чтения. В режиме сообщений чтение информации прекращается при достижении
конца сообщения.
      Внутри канала, работающего в режиме сообщений, система размещает в начале
каждого записываемого фрагмента заголовок, хранящий сведения о длине этого фраг-
мента информации. Программы, которые находятся на концах канала, не видят этого за-
головка, однако команда ReadFile() прекращает чтение, достигая конца очередного
фрагмента данных.
      Блокируемые и неблокируемые каналы. Каналы бывают блокируемыми или не-
блокируемыми. Данный атрибут влияет на результаты выполнения операций чтения,
записи и соединения. В случае ошибки выполнения любой из этих функций в неблоки-
руемом канале возвращается код завершения, представляющий собой код ошибки. В ка-
нале, который допускает блокировку, функции не возвращают результата до тех пор,
пока они не завершатся, или до тех пор, пока существует ошибка.
      Именованные и анонимные каналы. Канал может быть именованным, если про-
грамма-создатель снабдила его строковым значением, однозначно идентифицирующим
его имя, или анонимным, если с ним не связано никакое идентифицирующее строковое
значение. Подобно синхронизирующим объектам (простым и исключающим семафо-
рам), имя канала помогает другим процессам правильно его распознавать. Windows 98
не поддерживает именованных каналов; в этой операционной системе все каналы явля-
ются анонимными.
      Анонимные каналы занимают меньше системных ресурсов, однако по сравнению с
именованными они выполняют лишь ограниченный набор задач. В частности, они могут

                                        175