Для процессов пользователя весь ввод/вывод осуществляется через дескрипторы. В данной статье описывается, как ядро управляет дескрипторами и как оно предоставляет службы дескрипторов, такие, как блокировка и опрос.
Системные вызовы, ссылающиеся на открытые файлы, принимают в качестве аргумента для указания файла дескриптор файла. Дескриптор файла используется ядром в качестве индекса в таблице дескрипторов для текущего процесса (хранящегося в структуре filedesc, подструктуре структуры процесса), чтобы найти элемент файла (file entry), или структуру файла. Взаимоотношения этих структур данных показаны ниже.

Элемент файла предусматривает тип файла и указатель на нижележащий объект для дескриптора. В FreeBSD поддерживаются шесть типов объектов.
· Для файлов данных элемент файла указывает на структуру vnode, которая ссылается на подструктуру, содержащую специфическую для файловой системы информацию. Специальные файлы не содержат размещенных на диске блоков данных; они управляются файловой системой специальных устройств, которая вызывает для выполнения запросов ввода/вывода для них соответствующие драйверы.
· Для доступа к межпроцессному взаимодействию, включая сетевые возможности, элемент файла FreeBSD может ссылаться на сокет.
· Для высокоскоростной локальной коммуникации без использования имен элемент файла будет ссылаться на канал (pipe). Ранее системы FreeBSD использовали для локальной коммуникации сокеты, но для каналов была добавлена оптимизированная поддержка для повышения их производительности.
· Для высокоскоростной локальной коммуникации с использованием имен элемент файла будет ссылаться на файл fifo. Как и в случае с каналами, для повышения производительности была добавлена оптимизированная поддержка fifo.
· Для систем, имеющих аппаратную криптографическую поддержку, дескриптор может предоставить непосредственный доступ к соответствующему оборудованию.
· Для предоставления уведомлений о событиях ядра дескриптор будет ссылаться на kqueue.
Система виртуальной памяти поддерживает отображение файлов в адресное пространство процесса. В этом случае дескриптор файла должен ссылаться на vnode, который будет частично или полностью отображен в адресное пространство пользователя.
- 09/11/2010 19:30 - Перемещение данных внутри ядра
- 09/11/2010 18:56 - Реализация select
- 04/11/2010 08:33 - Блокировка дескриптора файла
- 03/11/2010 00:01 - Асинхронный ввод/вывод
- 31/10/2010 09:00 - Открытые элементы файлов
- 27/10/2010 14:46 - Метки дисков
- 27/10/2010 14:21 - Сортировка запросов дискового ввода/вывода
- 27/10/2010 11:07 - Точки входа для драйверов дисковых устройств
- 25/10/2010 03:12 - Дисковые устройства
- 24/10/2010 15:46 - Точки входа для драйверов символьных устройств