Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Общая информация Каналы 4.2BSD

Каналы 4.2BSD

В системах до 4.2BSD каналы были реализованы с использованием файловой системы; когда в 4.2BSD были введены сокеты, каналы были реализованы заново в виде сокетов. В целях повышения производительности FreeBSD больше не использует сокеты для реализации каналов и очередей fifo. Вместо этого используется отдельная реализация, оптимизированная для локальных взаимодействий.

Ядро содержит для каждого процесса таблицу дескрипторов, которая используется для преобразования внешнего представления дескриптора во внутреннее. (Дескриптор является просто индексом для этой таблицы.) Таблица дескрипторов процесса наследуется от родителя этого процесса, а вместе с ней наследуется и доступ к объектам, на которые ссылаются дескрипторы. Главными способами получения дескриптора процессом являются следующие.

1. Открывание или создание объекта.

2. Наследование от родительского процесса.

К тому же IPC с использованием сокетов допускает передачу дескрипторов в сообщениях между несвязанными процессами на одной и той же машине.

У каждого действительного дескриптора есть связанное с ним смещение файла в байтах от начала объекта. Операции чтения и записи начинаются с этого смещения, которое обновляется после каждой передачи данных. Для объектов, допускающих произвольный доступ, смещение файла может также устанавливаться с помощью системного вызова Iseek. Обычно файлы допускают произвольный доступ, так же как и некоторые устройства. Каналы, очереди fifo и сокеты не допускают произвольного доступа.

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


Еще по теме:
Советуем прочитать:

Сейчас 64 гостей онлайн

Реклама на сайте: