DragonFly - Новая модель устройств ввода-вывода

Оригинал: DragonFly - I/O Device Operations
Перевод: Lao
редакция от 05.06.01
1-я редакция от 05.01.18 - Unix.ginras.ru

2005-06-07

Ввод-вывод значительно легче наладить, чем VFS, потому что большинство устройств уже работают асинхронно, несмотря на полусинхронный API. Рассматриваемая модель ввода-вывода предполагает три крупных направления работы:

  1. Для представления данных ввода-вывода будут использованы диапазоны объектов виртуальной памяти, а не системных или пользовательских адресов. Это позволит устройствам ввода-вывода работать совершенно независимо от порождающих их пользовательских процессов.
  2. Ввод-вывод устройства будет контролироваться системой "порт/работа_с_сообщениями" (см. http://www.dragonflybsd.org/goals/messaging.cgi).
  3. Ввод-вывод устройства обычно будет сериализоваться через одну или несколько нитей. Каждое устройство обычно будет управляться своей собственной нитью, но некоторые особо мощные устройства могут управляться несколькими потоками (до одного на процессор). Многонитевые устройства не обязательно будут конкурировать за ресурсы. Например, стек ТСР можно было бы сделать многонитевым, приписывая к каждой нити работу с целевыми портами с одинаковыми номерами портов по модулю N, это обеспечить использование нескольких нитей (и несколько процессорах) без конфликтов.

В сообщениях ввода-вывода будут использоваться неструктурированные 64-битные байтовые смещения, а не номера блоков.

Заметим, что сообщения могут обрабатываться устройством синхронно. Не следут ошибаться, полагая, что сообщения безусловно сериализуются в поток устройства, поскольку это не так. Подробности см. на http://www.dragonflybsd.org/goals/messaging.cgi.

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