9.3.1.2. Буферирование каналов

9.3.1.2. Буферирование каналов

Каналы буферируют свои данные, что означает, что записанные в канал данные хранятся ядром до тех пор, пока не будут прочитаны. Однако, канал может содержать лишь такое-то количество записанных, но еще не прочитанных данных. Мы можем называть записывающий процесс производителем, а читающий процесс потребителем. Как система управляет полными и пустыми каналами?

Когда канал полон, система автоматически блокирует производителя в следующий раз, когда он пытается осуществить запись данных в канал с помощью write(). Когда канал освобождается, система копирует данные в канал, а затем позволяет системному вызову write() вернуться к производителю.

Подобным же образом, если канал пустой, потребитель блокируется в read() до тех пор, пока в канале не появятся данные для чтения. (Блокирующее поведение можно отключить; это обсуждается в разделе 9.4.3.4 «Неблокирующий ввод/вывод для каналов и очередей FIFO».)

Когда производитель вызывает на записывающем конце канала close(), потребитель может успешно прочесть любые данные, все еще находящиеся в канале. После этого дальнейшие вызовы read() возвращают 0, указывая на конец файла.

Напротив, если потребитель закрывает читаемый конец, write() на записываемом конце завершается неудачей. В частности, ядро посылает производителю сигнал «нарушенный канал», действием по умолчанию для которого является завершение процесса.

Нашей любимой аналогией для каналов является то, как муж и жена вместе моют и сушат тарелки. Один супруг моет тарелки, помещая чистые, но влажные тарелки в сушилку на раковине. Другой супруг вынимает тарелки из сушилки и вытирает их. Моющий тарелки является производителем, сушилка является каналом, а вытирающий является потребителем.[96]

Если вытирающий супруг оказывается быстрее моющего, сушилка становится пустой, и вытирающему приходится ждать, пока не будут готовы новые тарелки. Напротив, если быстрее вытирающий супруг, сушилка наполняется, и моющему приходится ждать, пока она не опустеет, прежде чем помещать в нее тарелки. Это изображено на рис. 9.3.

Рис. 9.3. Синхронизация процессов канала

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Использование именованных каналов

Из книги автора

Использование именованных каналов Функция CreateNamedPipe создает первый экземпляр именованного канала и возвращает дескриптор. При вызове этой функции указывается также максимально допустимое количество экземпляров каналов, а следовательно, и количество клиентов,


11.6. Создание неименованных каналов

Из книги автора

11.6. Создание неименованных каналов Неименованные каналы подобны именованным, но они в файловой системе не существуют. Они не имеют путевых имен, ассоциированных с ними, и все они и их следы исчезают после того, как последний файловый дескриптор, ссылающийся на них,


5.12.4 Закрытие каналов

Из книги автора

5.12.4 Закрытие каналов При закрытии канала процесс выполняет ту же самую процедуру, что и при закрытии обычного файла, за исключением того, что ядро, прежде чем освободить индекс канала, выполняет специальную обработку. Оно уменьшает количество процессов чтения из канала


Банки каналов

Из книги автора

Банки каналов Банк каналов - это, грубо говоря, устройство, позволяющее разделить цифровую линию на несколько аналоговых линий (и наоборот). Выражаясь точнее, банк каналов обеспечивает возможность объединять аналоговые телефоны и линии в систему через линию T1. На рис. 2.2


Использование каналов RSS

Из книги автора

Использование каналов RSS Каналы RSS – это формат данных, предоставляющий пользователям средства поддержки содержимого веб-узла в актуальном состоянии. Первоначально этот формат данных имел название RDF (Resource Description Framework) Site Summary, а затем получил название Rich Site Summary. Сегодня


Флаги каналов

Из книги автора

Флаги каналов Теперь перечислим флаги, которые могут иметь каналы.? R (Registered, Зарегистрированный) — обозначает зарегистрированный канал. Если канал не имеет этого флага, то он автоматически удаляется с сервера после того, как все пользователи его покинут. В противном


2.3. Создание и открытие каналов IPC

Из книги автора

2.3. Создание и открытие каналов IPC Все три функции, используемые для создания или открытия объектов IPC: mq_open, sem_open и shm_open, — принимают специальный флаг oflag в качестве второго аргумента. Он определяет параметры открытия запрашиваемого объекта аналогично второму аргументу


Использование ТСР-каналов

Из книги автора

Использование ТСР-каналов В настоящий момент ваш удаленный объект доступен через сетевой протокол HTTP. Как уже упоминалось выше, этот протокол вполне совместим с брандмауэром, но генерируемые при этом пакеты SOAP немного "раздуты" (по причине представления данных в формате


5.4.1. Создание каналов

Из книги автора

5.4.1. Создание каналов Канал создается с помощью функции pipe(). Ей необходимо передать массив из двух целых чисел. В элементе с индексом 0 функция сохраняет дескриптор файла, соответствующего выходному концу канала, а в элементе с индексом 1 сохраняется дескриптор файла,


Список каналов

Из книги автора

Список каналов Список каналов – одна из самых важных частей программы, так как работа со списком во многом определяет, насколько удобно будет работать с приложением. Необходимо отметить, что в программе FlyDS работа со списком реализована с помощью контекстного меню,


Список каналов

Из книги автора

Список каналов Познакомимся с основным инструментом программы, который будет использоваться постоянно, – это список каналов, где будут храниться все каналы, распределенные по категориям. Правильно настроенный список каналов – залог комфортной работы.Чтобы вызвать


Список каналов

Из книги автора

Список каналов Прежде всего обратимся к такому важному инструменту, как список каналов, ведь пока не настроены каналы, невозможен просмотр. Список каналов находится в левой части окна программы (рис. 5.15), причем каналы располагаются друг под другом, не подразделяясь на


Формирование списка каналов

Из книги автора

Формирование списка каналов Начальный этап настройки программы уже был изучен выше, теперь можно искать спутниковые каналы и формировать список. Если каналов будет очень много, то их будет удобнее разделить на тематические группы, а также создать небольшую группу,


Просмотр веб-каналов

Из книги автора

Просмотр веб-каналов Многие сайты в Интернете регулярно обновляются, и чтобы узнать последние новости, пользователям приходится регулярно открывать соответствующие вебстраницы и просматривать их содержимое. Однако есть и более удобный способ слежения за новостями –