Интенсивный обмен данными между процессами с использованием каналов, FIFO или очередей сообщений может вызвать падение производительности системы. Это связано с тем, что передаваемые данные копируются из буфера передающего процесса в буфер ядра и затем в буфер принимающего процесса. Механизм разделяемой памяти позволяет избавиться от этих расходов, позволяя двум или более процессам доступ к одной области памяти, при этом пока один из процессов производит запись данных в разделяемую память, другие процессы должны воздерживаться от работы с ней. Синхронизация выполнения процессов легко решается с помощью семафоров, открывая или закрывая доступ к разделяемой памяти.
Для обозначения коммуникационного узла, обеспечивающего прием и передачу данных для объекта (процесса), был предложен специальный объект – сокет. Сокеты имеют соответствующий интерфейс доступа в файловые системы UNIX, и так же как обычные файлы адресуются некоторым целым числом – дескриптором. Однако, в отличие от обычных файлов, сокеты представляют собой виртуальный объект, который существует, пока на него ссылается хотя бы один из процессов.
Все сокеты можно разделить на несколько типов, в зависимости от предоставляемых коммуникационных характеристик. Полные набор этих характеристик включает:
F Упорядоченную доставку данных;
F Отсутствие дублирования данных;
F Надежную доставку данных;
F Сохранение границ сообщений;
F Поддержку передачи экстренных сообщений;
F Предварительное установление соединения.
Каналы, рассмотренные ранее обеспечивают только первые три характеристики. При этом данные имеют вид сложного потока, вычленение сообщений из которого обеспечивается взаимодействующими приложениями.
Поддержка передачи экстремальных сообщений предполагает возможность доставки данных вне нормального потока, требующее немедленной реакции. Взаимодействие с предварительным установления соединения предполагает создание виртуального канала между источником и получателем данных. Это избавляет от необходимости идентифицировать передающую сторону в каждом пакете данных. Идентификация происходит на начальном этапе установления связи и затем сохраняется для всех пакетов, принадлежащих данному виртуальному каналу.
Подсистема ввода/вывода
Основными компонентами подсистемы ввода/вывода являются драйверы устройств, которые обеспечивают интерфейс между ядром UNIX и аппаратной частью компьютера. Благодаря этому от остальной части ядра скрыты архитектурные особенности компьютера. В UNIX существует большое количество драйверов. Часть из них обеспечивает доступ к физическим устройствам, например жёсткому диску, принтеру или терминалу, другие предоставляют аппаратно независимые услуги. Примером последних могут служить драйверы для работы с виртуальной памятью ядра.