В SVR4 все операции с файлами FIFO осуществляются в файловой системе под названием fifofs. При реализации FIFO в этой системе используются потоки и драйвер обратной связи (loopback). Если процесс вызывает mknod для создания FIFO, ядро просматривает полное имя с целью получения vnode родительского каталога. Затем оно вызывает операцию VOP_CREATE родительского объекта vnode для создания файла в данном каталоге. Ядро устанавливает в индексном дескрипторе файла флаг IFIF0, указывая тем самым, что файл имеет тип FIFO.
Ранее показана настройка файла FIFO в системе SVR4. Для использования файла процессу необходимо первоначально его открыть. Если системный вызов open обнаруживает в индексном дескрипторе флаг IFIF0, то вызывает операцию specvp(), которая, в свою очередь, запускает процедуру fifofs под названием fifovpQ. Эта процедура создает объект fifonode, во многом сходный с snode. Объект vnode, находящийся внутри fifonode, содержит указатели на вектор операций fifofs. Файловая система fifofs возвращает этот объект vnode вызову open. Теперь все последующие ссылки на файл приведут к использованию операций fifofs.
После этого системный вызов open запускает операцию V0P_0PEN нового объекта vnode. Это приводит к вызову процедуры fifo_open(). Так как файл открывается впервые, с ним еще не ассоциировано ни одного потока.
Процедура fifo_open() создает новый головной интерфейс потока и присоединяет его очередь записи к его же очереди чтения. Процедура сохраняет указатель на головной интерфейс потока (структуру stdata) и поле v_stream объекта vnode.
При последующих открытиях файла процедура fifo_open() обнаружит, что поток уже существует, и все пользователи разделяют доступ к нему.
Когда процесс записывает данные в файл FIFO, головной интерфейс потока отправляет их в нисходящем направлении в очередь записи, которая незамедлительно пересылает их обратно в очередь чтения, где они ожидают прочтения. Читающие процессы запрашивают данные из очереди чтения и блокируются головным интерфейсом потока, если данные отсутствуют. Если ни один из процессов больше не открывает файл FIFO, поток демонтируется. Поток будет заново создан при следующем открытии файла. Сам файл FIFO существует в системе, пока не будет удален принудительно.
Опубликовал katy
June 24 2015 22:08:47 ·
0 Комментариев ·
3313 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.