В системах до 4.2BSD каналы были реализованы с использованием файловой системы; когда в 4.2BSD были введены сокеты, каналы были реализованы заново в виде сокетов. В целях повышения производительности FreeBSD больше не использует сокеты для реализации каналов и очередей fifo. Вместо этого используется отдельная реализация, оптимизированная для локальных взаимодействий.
Ядро содержит для каждого процесса таблицу дескрипторов, которая используется для преобразования внешнего представления дескриптора во внутреннее. (Дескриптор является просто индексом для этой таблицы.) Таблица дескрипторов процесса наследуется от родителя этого процесса, а вместе с ней наследуется и доступ к объектам, на которые ссылаются дескрипторы. Главными способами получения дескриптора процессом являются следующие.
1. Открывание или создание объекта.
2. Наследование от родительского процесса.
К тому же IPC с использованием сокетов допускает передачу дескрипторов в сообщениях между несвязанными процессами на одной и той же машине.
У каждого действительного дескриптора есть связанное с ним смещение файла в байтах от начала объекта. Операции чтения и записи начинаются с этого смещения, которое обновляется после каждой передачи данных. Для объектов, допускающих произвольный доступ, смещение файла может также устанавливаться с помощью системного вызова Iseek. Обычно файлы допускают произвольный доступ, так же как и некоторые устройства. Каналы, очереди fifo и сокеты не допускают произвольного доступа.
Когда процесс завершается, ядро восстанавливает все дескрипторы, которые использовались этим процессом. Если процесс удерживал последнюю ссылку на объект, уведомляется менеджер объекта таким образом, чтобы он смог выполнить любые необходимые действия по очистке, такие, как окончательное удаление файла или освобождение сокета.
- 14/05/2010 02:47 - Интерфейс устройств
- 13/05/2010 20:26 - Поддержка нескольких файловых систем
- 13/05/2010 03:54 - Механизм взаимодействия сокетов
- 12/05/2010 18:13 - Устройства
- 12/05/2010 12:32 - Управление дескрипторами
- 11/05/2010 21:23 - Дескрипторы и ввод/вывод
- 11/05/2010 10:33 - Система ввода/вывода
- 11/05/2010 06:08 - Управление памятью внутри ядра
- 10/05/2010 20:06 - Отдельные отображения файла
- 10/05/2010 11:56 - Проектные решения по управлению памятью BSD